@kolbo/mcp 1.87.2 → 1.87.4
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
package/skill/GENERATED.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AUTO-GENERATED — do not edit
|
|
2
2
|
|
|
3
|
-
This tree is mirrored from kolbo-code@
|
|
3
|
+
This tree is mirrored from kolbo-code@f666a9c, 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
|
|
|
@@ -15,7 +15,7 @@ Load this file when the user wants a **Seedance 2 / Seedance 2.0** (ByteDance) v
|
|
|
15
15
|
|
|
16
16
|
- **NO MUSIC BY DEFAULT (HARD):** Unless the user explicitly asks for music, every final Seedance prompt—including every Elements/reference-driven prompt—must explicitly say `No music. No musical score.` Keep requested dialogue, synchronized production sound, ambience, and SFX; "no music" does not mean "no audio." If the user explicitly requests music, describe that music instead and omit the no-music lock. Never invent background music from cinematic tone alone.
|
|
17
17
|
- **NO FAMOUS NAMES OR IP IN PROMPTS (HARD):** Never put celebrity/public-figure names, real directors or artists, copyrighted character/franchise/IP names, famous campaign names or slogans, or famous studio/company names into a final Seedance or Elements prompt. Translate user-supplied references into concrete visual traits—medium, shape language, palette, lighting, texture, camera behavior, pacing, and mood—without repeating the famous name. Preserve exact user-owned Visual DNA and asset tags.
|
|
18
|
-
- **Visual DNA names are immutable anchors:** when `visual_dna_ids` is passed, every DNA MUST appear in the prompt as the exact literal `@DNA_name` (CAST + every shot it is in). Never "Zohar's", "the left man", "the man on the LEFT", a nickname, or a Visual DNA anchors paragraph without `@tags`.
|
|
18
|
+
- **Visual DNA names are immutable anchors:** when `visual_dna_ids` is passed, every DNA MUST appear in the prompt as the exact literal `@DNA_name` (CAST + every shot it is in). Never "Zohar's", "the left man", "the man on the LEFT", a nickname, or a Visual DNA anchors paragraph without `@tags`. English-only control-language and dialogue rules NEVER apply to asset identifiers: a stored Hebrew name such as `אביב` must remain `@אביב` literally in CAST and every applicable shot; never strip, translate, transliterate, or ASCII-normalize it.
|
|
19
19
|
- **Rewrites never thin out or rename anchors.** "`@X anchors Odysseus`" is NOT a reference line, and `Odysseus` must never replace `@X` later. Every referenced asset keeps its exact literal tag plus a full role line on every rewrite. Re-use the exact DNA tag in every shot it participates in. A compile that dropped `@gal_suit` / `@yonatan` / `#Board` is a failed turn.
|
|
20
20
|
- **DURATION + SHOT STRUCTURE (HARD — same as help widget):** every text-to-video / Elements prompt MUST open AND close with total duration, shot count, and aspect. Omit only for video-edit tasks (source duration is locked). Required first lines:
|
|
21
21
|
1. `N connected cinematic shots, Xs total, AR, Multishot ON`
|
|
@@ -11,7 +11,7 @@ Load this file when the user wants a **Seedance 2.5** video (they said "2.5" / "
|
|
|
11
11
|
|
|
12
12
|
**Audio:** Seedance 2.5 emits real synced audio. `list_models` shows `sound_generation_type: none` only because there is no in-app toggle (`sound_baked_in: true`) — it does NOT mean the model is silent, and it is never a reason to reach for TTS. Quoted dialogue is PERFORMED (synced voices, lip movement, room tone) alongside the SFX named in AUDIO, so scene dialogue never goes through `generate_speech` or `generate_lipsync`; write the lines in quotes inside their shot beats.
|
|
13
13
|
|
|
14
|
-
**Dialogue language: English.** Other languages are not reliably performed, and Hebrew does not work — it returns accented gibberish or English-shaped mouth movement. Never offer a user "Hebrew dialogue directly". See `models/seedance.md` for the three honest alternatives.
|
|
14
|
+
**Dialogue language: English.** Other languages are not reliably performed, and Hebrew does not work — it returns accented gibberish or English-shaped mouth movement. Never offer a user "Hebrew dialogue directly". This restriction applies to rendered dialogue/prose only, never to binding identifiers: preserve an exact stored Hebrew Visual DNA or moodboard tag such as `@אביב` / `#ישראל` literally. See `models/seedance.md` for the three honest alternatives.
|
|
15
15
|
|
|
16
16
|
**Draft at 480p.** Resolution is a credit MULTIPLIER, not a flat rate. Relative to 720p: 480p ×0.44, 1080p ×2.25. A 30s pass costs ~540cr at 480p against ~1230cr at 720p and ~2770cr at 1080p. Block the film at 480p, get the user's sign-off on staging, performance and timing, then re-run only the approved cut at delivery resolution.
|
|
17
17
|
|
|
@@ -808,10 +808,15 @@ function renderResult(sc) {
|
|
|
808
808
|
// voice that actually ran, so the finished card must not keep the guess.
|
|
809
809
|
renderChips(sc);
|
|
810
810
|
setPhaseChip('', false);
|
|
811
|
-
if (sc.kind === 'status' && Array.isArray(sc.items)) return renderStatusGrid(sc);
|
|
812
811
|
if (sc.batch && sc.scenes && sc.scenes.length) return renderBatchGrid(sc);
|
|
813
812
|
if (sc.kind === 'scenes' && sc.scenes && sc.scenes.length) return renderScenes(sc);
|
|
814
813
|
var urls = preferKolbo(sc.urls || []);
|
|
814
|
+
// Key the per-item grid on items[], not on kind === 'status': a host bridge
|
|
815
|
+
// (Kolbo Code's shaped()) rewrites kind from the TOOL name before the payload
|
|
816
|
+
// reaches this iframe, so a finished prompts[] batch arrived as kind:'image'
|
|
817
|
+
// with eight completed items and no top-level urls — and painted
|
|
818
|
+
// "No output received / Failed" over generations that had completed and billed.
|
|
819
|
+
if (Array.isArray(sc.items) && sc.items.length && (sc.kind === 'status' || !urls.length)) return renderStatusGrid(sc);
|
|
815
820
|
var kind = displayKind(Object.assign({}, sc, { urls: urls }));
|
|
816
821
|
if (!urls.length) return renderError('No output received');
|
|
817
822
|
if (kind === 'image') renderImages(sc, urls);
|
package/src/tools/generate.js
CHANGED
|
@@ -99,9 +99,12 @@ async function pollBatch(client, batch, { interval, timeout }, toolName) {
|
|
|
99
99
|
generations,
|
|
100
100
|
failed_submissions: batch.failed.length ? batch.failed : undefined
|
|
101
101
|
}, null, 2);
|
|
102
|
+
// Name the model that actually ran — every id in one batch ran the same one.
|
|
103
|
+
const modelsRan = [...new Set(polls.filter((p) => !p.timedOut).map((p) => p.result.result && p.result.result.model).filter(Boolean))];
|
|
102
104
|
return uiCompleted({
|
|
103
105
|
tool: toolName, kind: 'status', client,
|
|
104
|
-
model:
|
|
106
|
+
model: modelsRan.length === 1 ? modelsRan[0] : 'Generations',
|
|
107
|
+
gen: { generation_id: batch.ids[0], session_id: batch.ok[0].gen.session_id },
|
|
105
108
|
settings: {},
|
|
106
109
|
items: generations.map(g => ({
|
|
107
110
|
id: g.generation_id,
|