@gendive/chatllm 0.17.39 → 0.17.41

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.
@@ -260,6 +260,8 @@ interface ChecklistItem {
260
260
  status: 'pending' | 'in_progress' | 'done' | 'error';
261
261
  /** 각 단계의 AI 실행 결과 (접이식 표시용) */
262
262
  result?: string;
263
+ /** @Todo vibecode - 이미지 스킬 결과 URL (체크리스트 단계에서 이미지 생성 시) */
264
+ imageUrl?: string;
263
265
  }
264
266
  /**
265
267
  * @description 체크리스트 블록 (메시지에 첨부)
@@ -260,6 +260,8 @@ interface ChecklistItem {
260
260
  status: 'pending' | 'in_progress' | 'done' | 'error';
261
261
  /** 각 단계의 AI 실행 결과 (접이식 표시용) */
262
262
  result?: string;
263
+ /** @Todo vibecode - 이미지 스킬 결과 URL (체크리스트 단계에서 이미지 생성 시) */
264
+ imageUrl?: string;
263
265
  }
264
266
  /**
265
267
  * @description 체크리스트 블록 (메시지에 첨부)
@@ -2738,6 +2738,7 @@ ${finalContent}`;
2738
2738
  const shouldSkipSkillParsing = skipNextSkillParsingRef.current;
2739
2739
  skipNextSkillParsingRef.current = false;
2740
2740
  let accumulatedContent = "";
2741
+ let checklistStepImageUrl = null;
2741
2742
  let messagesToSend = [...existingMessages, userMessage];
2742
2743
  const recompressionThreshold = DEFAULT_RECOMPRESSION_THRESHOLD;
2743
2744
  const tokenLimit = DEFAULT_TOKEN_LIMIT;
@@ -3048,7 +3049,12 @@ ${attachmentContext}
3048
3049
  }, attachExtra);
3049
3050
  pendingAttachmentDataRef.current = null;
3050
3051
  if (skillResult?.content) {
3051
- accumulatedContent = skillResult.content;
3052
+ if (skillResult.metadata?.type === "image") {
3053
+ accumulatedContent = skillResult.metadata?.outputText || "\uC774\uBBF8\uC9C0 \uC0DD\uC131 \uC644\uB8CC";
3054
+ checklistStepImageUrl = skillResult.content;
3055
+ } else {
3056
+ accumulatedContent = skillResult.content;
3057
+ }
3052
3058
  }
3053
3059
  } catch (e) {
3054
3060
  console.warn("[useChatUI] \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uB0B4 \uC2A4\uD0AC \uC2E4\uD589 \uC2E4\uD328:", e);
@@ -3143,6 +3149,7 @@ ${attachmentContext}
3143
3149
  if (m.id !== assistantMessageId) return m;
3144
3150
  return {
3145
3151
  ...m,
3152
+ content: "",
3146
3153
  contentParts: parts,
3147
3154
  skillExecution: {
3148
3155
  ...m.skillExecution,
@@ -3214,6 +3221,7 @@ ${result.content}
3214
3221
  if (m.id !== assistantMessageId) return m;
3215
3222
  return {
3216
3223
  ...m,
3224
+ content: "",
3217
3225
  contentParts: imgFileParts,
3218
3226
  skillExecution: {
3219
3227
  ...m.skillExecution,
@@ -3321,7 +3329,9 @@ ${result.content}
3321
3329
  const updatedItems = m.checklistBlock.items.map((it, idx) => ({
3322
3330
  ...it,
3323
3331
  status: idx <= stepIndex ? "done" : it.status,
3324
- result: idx === stepIndex ? accumulatedContent : it.result
3332
+ result: idx === stepIndex ? accumulatedContent : it.result,
3333
+ /** @Todo vibecode - 이미지 스킬 결과 URL 저장 */
3334
+ ...idx === stepIndex && checklistStepImageUrl ? { imageUrl: checklistStepImageUrl } : {}
3325
3335
  }));
3326
3336
  return {
3327
3337
  ...m,
@@ -9123,7 +9133,7 @@ var ChecklistCard = ({
9123
9133
  ]
9124
9134
  }
9125
9135
  ),
9126
- canExpand && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
9136
+ canExpand && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
9127
9137
  "div",
9128
9138
  {
9129
9139
  style: {
@@ -9139,7 +9149,21 @@ var ChecklistCard = ({
9139
9149
  whiteSpace: "pre-wrap",
9140
9150
  wordBreak: "break-word"
9141
9151
  },
9142
- children: item.result
9152
+ children: [
9153
+ item.imageUrl && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
9154
+ "img",
9155
+ {
9156
+ src: item.imageUrl,
9157
+ alt: item.result || "\uC0DD\uC131\uB41C \uC774\uBBF8\uC9C0",
9158
+ style: {
9159
+ maxWidth: "100%",
9160
+ borderRadius: "8px",
9161
+ marginBottom: item.result ? "8px" : 0
9162
+ }
9163
+ }
9164
+ ),
9165
+ item.result
9166
+ ]
9143
9167
  }
9144
9168
  )
9145
9169
  ] }, item.id);