@kolbo/mcp 1.87.3 → 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolbo/mcp",
3
- "version": "1.87.3",
3
+ "version": "1.87.4",
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": {
@@ -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);
@@ -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: 'Generations', gen: { generation_id: batch.ids[0], session_id: batch.ok[0].gen.session_id },
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,