@kolbo/mcp 1.81.9 → 1.81.11

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolbo/mcp",
3
- "version": "1.81.9",
3
+ "version": "1.81.11",
4
4
  "description": "Kolbo AI MCP Server - Generate images, videos, music, speech, and sound effects from Claude Code",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  # AUTO-GENERATED — do not edit
2
2
 
3
- This tree is mirrored from kolbo-code@9c91cff, the single source of truth.
3
+ This tree is mirrored from kolbo-code@c3b231a, the single source of truth.
4
4
  Canonical source: packages/opencode/skills/kolbo/
5
5
  Distribution: .github/workflows/sync-skill-to-plugin.yml
6
6
 
package/skill/SKILL.md CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
- version: 0.9.10
2
+ version: 0.9.11
3
3
  name: kolbo
4
4
  description: |
5
5
  Generate, edit, analyze, and direct creative media through Kolbo AI: images,
@@ -57,6 +57,7 @@ Then generate **only** with the confirmed parameters. If the user changes an opt
57
57
  - **Batch totalling 100+ credits**: run `check_credits` first.
58
58
  - **Quote real cost**: after firing, log `credits_used` (from the tool result) to `.kolbo/production.md` — never `base × count`.
59
59
  - **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.
60
+ - **Out of credits → `show_plans`.** A generation refused for credits already returns the upgrade card automatically — do NOT retry it, and do not re-run the tool "to be sure". Call `show_plans` yourself when the user asks about pricing, plans, upgrading, or how to get more credits. Prices are live and promo-adjusted; never quote them from memory. The user completes any purchase themselves on app.kolbo.ai/pricing — you cannot buy for them.
60
61
 
61
62
  For multi-scene / batch work this pairs with `generate_creative_director` (see below) — still confirm the brief first.
62
63
 
@@ -122,7 +123,7 @@ Each `references/models/*.md` mirrors the matching skill prompt in `kolbo-api/sr
122
123
  ### Discovery, Library, Visual DNA, Moodboards, Chat, Publishing
123
124
  | Tool | Purpose |
124
125
  |------|---------|
125
- | `list_models` / `list_voices` / `check_credits` / `get_generation_status` / `cancel_generation` / `get_session_usage` | Discovery + status. `list_models` with no args returns the recommended shortlist out of ~428 — pass `type` for a full category with per-model caps. `cancel_generation` stops an in-flight job and refunds what it can: use it when the user changes their mind mid-generation instead of letting it run. |
126
+ | `list_models` / `list_voices` / `check_credits` / `show_plans` / `get_generation_status` / `cancel_generation` / `get_session_usage` | Discovery + status. `list_models` with no args returns the recommended shortlist out of ~428 — pass `type` for a full category with per-model caps. `cancel_generation` stops an in-flight job and refunds what it can: use it when the user changes their mind mid-generation instead of letting it run. `show_plans` renders the balance + upgrade card for pricing/plan/upgrade questions. |
126
127
  | `upload_media` / `create_upload_ticket` / `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`. Getting a LOCAL file in depends on where the server runs: `upload_media` with a path only works on a local (stdio) install; over a remote connector use `create_upload_ticket` and POST the file yourself. |
127
128
  | `create_visual_dna` / `update_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`. Edit with `update_visual_dna`; never delete+recreate. |
128
129
  | `list_moodboards` / `get_moodboard` / `list_presets` | Style overlays + sheet presets — see **Preset contract** in Core Workflow. Never omit `preset_id` after claiming a preset was used. |
package/skill/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.10
1
+ 0.9.11
package/src/apps/html.js CHANGED
@@ -173,6 +173,9 @@ function bindPeekHits(root) {
173
173
  };
174
174
  });
175
175
  }
176
+ // Whether THIS peek took the iframe fullscreen (vs. opening inside a card the
177
+ // user had already fullscreened) — only then does closing it hand the mode back.
178
+ var peekWentFullscreen = false;
176
179
  function openPeek(url, kind, cap) {
177
180
  if (!url) return;
178
181
  var box = ensurePeek();
@@ -184,6 +187,23 @@ function openPeek(url, kind, cap) {
184
187
  el('peek-cap').textContent = cap || '';
185
188
  box.hidden = false;
186
189
  if (window.kolbo && window.kolbo.notifySize) window.kolbo.notifySize();
190
+ // Go big when the host allows it: the overlay is ALREADY visible inside the
191
+ // card, so a host that refuses fullscreen (or never answers the request)
192
+ // still shows the preview — the failure mode is "smaller", never "nothing".
193
+ // Skip the request when the card itself is fullscreen; the overlay covers it.
194
+ if (!window.kolbo || !window.kolbo.requestDisplayMode) return;
195
+ if (document.documentElement.classList.contains('k-fullscreen')) return;
196
+ try {
197
+ window.kolbo.requestDisplayMode('fullscreen').then(function (res) {
198
+ // The user may have closed the peek before the host answered — hand the
199
+ // grant straight back instead of fullscreening an empty card.
200
+ if (!(res && res.mode === 'fullscreen')) return;
201
+ if (box.hidden) { window.kolbo.requestDisplayMode('inline').catch(function () {}); return; }
202
+ peekWentFullscreen = true;
203
+ document.documentElement.classList.add('k-peek-fs');
204
+ if (window.kolbo.setFullscreen) window.kolbo.setFullscreen(true);
205
+ }).catch(function () {});
206
+ } catch (e) {}
187
207
  }
188
208
  function closePeek() {
189
209
  var box = el('peek');
@@ -192,6 +212,12 @@ function closePeek() {
192
212
  el('peek-img').removeAttribute('src');
193
213
  var vid = el('peek-video');
194
214
  if (vid) { try { vid.pause(); } catch (e) {} vid.removeAttribute('src'); }
215
+ if (peekWentFullscreen) {
216
+ peekWentFullscreen = false;
217
+ document.documentElement.classList.remove('k-peek-fs');
218
+ try { window.kolbo.requestDisplayMode('inline').catch(function () {}); } catch (e) {}
219
+ if (window.kolbo.setFullscreen) window.kolbo.setFullscreen(false);
220
+ }
195
221
  if (window.kolbo && window.kolbo.notifySize) window.kolbo.notifySize();
196
222
  }
197
223
  document.addEventListener('keydown', function (e) { if (e.key === 'Escape') closePeek(); });
package/src/apps/theme.js CHANGED
@@ -155,6 +155,10 @@ body {
155
155
  display: inline-flex; align-items: center; justify-content: center;
156
156
  }
157
157
  .k-peek-cap { font-size: 12px; color: var(--text-muted); text-align: center; max-width: 100%; word-break: break-word; }
158
+ /* Peek granted host fullscreen: the overlay owns the whole viewport, not the card. */
159
+ html.k-peek-fs, html.k-peek-fs body { height: 100%; overflow: hidden; }
160
+ html.k-peek-fs .k-peek { position: fixed; inset: 0; z-index: 50; }
161
+ html.k-peek-fs .k-peek img, html.k-peek-fs .k-peek video { max-height: calc(100vh - 72px); }
158
162
  /* Visual DNA chips: the character's face, so you can see WHICH DNA is locked in. */
159
163
  .k-dna-face { width: 18px; height: 18px; border-radius: 999px; object-fit: cover; margin-left: -3px; background: var(--border-strong); }
160
164
  .k-dna-stack .k-dna-stack-item { display: inline-flex; }