@gendive/chatllm 0.17.28 → 0.17.30

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.
@@ -1003,6 +1003,11 @@ interface MessageListProps {
1003
1003
  * @Todo vibecode - pending 항목 스킵
1004
1004
  */
1005
1005
  onChecklistSkip?: (messageId: string, stepIndex: number) => void;
1006
+ /**
1007
+ * @description 현재 실행 중인 스킬 정보 (도구 실행 로딩 표시용)
1008
+ * @Todo vibecode - 메시지 리스트 하단에 도구 실행 상태 인디케이터
1009
+ */
1010
+ activeSkillExecution?: SkillExecution | null;
1006
1011
  }
1007
1012
  interface MessageBubbleProps {
1008
1013
  message: ChatMessage;
@@ -1465,6 +1470,11 @@ interface UseChatUIOptions {
1465
1470
  * @Todo vibecode - AI가 자동으로 선택지를 제공하도록 시스템 프롬프트에 가이드 추가
1466
1471
  */
1467
1472
  enablePoll?: boolean;
1473
+ /**
1474
+ * @description AI 자동 실행형 체크리스트 기능 활성화 (기본: true)
1475
+ * @Todo vibecode - 복합 작업 시 AI가 <checklist> 태그로 단계별 실행 계획 제시
1476
+ */
1477
+ enableChecklist?: boolean;
1468
1478
  /**
1469
1479
  * @description 커스텀 스킬 등록
1470
1480
  * @Todo vibecode - AI가 자동/수동으로 활용하는 스킬 시스템
@@ -1003,6 +1003,11 @@ interface MessageListProps {
1003
1003
  * @Todo vibecode - pending 항목 스킵
1004
1004
  */
1005
1005
  onChecklistSkip?: (messageId: string, stepIndex: number) => void;
1006
+ /**
1007
+ * @description 현재 실행 중인 스킬 정보 (도구 실행 로딩 표시용)
1008
+ * @Todo vibecode - 메시지 리스트 하단에 도구 실행 상태 인디케이터
1009
+ */
1010
+ activeSkillExecution?: SkillExecution | null;
1006
1011
  }
1007
1012
  interface MessageBubbleProps {
1008
1013
  message: ChatMessage;
@@ -1465,6 +1470,11 @@ interface UseChatUIOptions {
1465
1470
  * @Todo vibecode - AI가 자동으로 선택지를 제공하도록 시스템 프롬프트에 가이드 추가
1466
1471
  */
1467
1472
  enablePoll?: boolean;
1473
+ /**
1474
+ * @description AI 자동 실행형 체크리스트 기능 활성화 (기본: true)
1475
+ * @Todo vibecode - 복합 작업 시 AI가 <checklist> 태그로 단계별 실행 계획 제시
1476
+ */
1477
+ enableChecklist?: boolean;
1468
1478
  /**
1469
1479
  * @description 커스텀 스킬 등록
1470
1480
  * @Todo vibecode - AI가 자동/수동으로 활용하는 스킬 시스템
@@ -1753,6 +1753,8 @@ var useChatUI = (options) => {
1753
1753
  deepResearch,
1754
1754
  // Poll options
1755
1755
  enablePoll = true,
1756
+ // Checklist options
1757
+ enableChecklist = true,
1756
1758
  // Skills options
1757
1759
  skills,
1758
1760
  // Tool options
@@ -2118,9 +2120,60 @@ ${projectMemoryContext}`);
2118
2120
  - \uAC01 \uC9C8\uBB38\uC740 \uC11C\uB85C \uB2E4\uB978 \uB0B4\uC6A9
2119
2121
  - \uC635\uC158\uB9C8\uB2E4 \uC9E7\uC740 \uC124\uBA85 \uD3EC\uD568
2120
2122
  - \uC0AC\uC6A9\uC790\uAC00 \uBAA8\uB450 \uC120\uD0DD \uD6C4 \uC9C4\uD589`);
2123
+ }
2124
+ if (enableChecklist) {
2125
+ parts.push("");
2126
+ parts.push(`## \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uC790\uB3D9 \uC2E4\uD589 \uAE30\uB2A5
2127
+
2128
+ **\uC911\uC694: \uC544\uB798 \uC870\uAC74\uC5D0 \uD574\uB2F9\uD558\uBA74 \uBC18\uB4DC\uC2DC <checklist> \uD0DC\uADF8\uB97C \uC0AC\uC6A9\uD558\uC138\uC694.**
2129
+
2130
+ \uB2E4\uC74C \uC694\uCCAD\uC5D0\uB294 \uCCB4\uD06C\uB9AC\uC2A4\uD2B8\uB97C \uC0AC\uC6A9\uD558\uC138\uC694:
2131
+ - \uC5EC\uB7EC \uB300\uC0C1\uC744 \uAC80\uC0C9/\uC870\uC0AC\uD558\uB294 \uC694\uCCAD (\uC608: "A\uC640 B \uAC80\uC0C9\uD574\uC918", "XX \uAD00\uB828 \uC11C\uBE44\uC2A4 \uCC3E\uC544\uC918")
2132
+ - \uBE44\uAD50 \uBD84\uC11D \uC694\uCCAD (\uC608: "A\uC0AC\uC640 B\uC0AC \uBE44\uAD50\uD574\uC918")
2133
+ - \uBCF4\uACE0\uC11C/\uB9AC\uD3EC\uD2B8 \uC791\uC131 \uC694\uCCAD
2134
+ - 3\uB2E8\uACC4 \uC774\uC0C1\uC758 \uBCF5\uD569 \uC791\uC5C5
2135
+
2136
+ \uC2DC\uC2A4\uD15C\uC774 \uAC01 \uB2E8\uACC4\uB97C \uC790\uB3D9\uC73C\uB85C \uD558\uB098\uC529 \uC2E4\uD589\uD569\uB2C8\uB2E4. \uB2F9\uC2E0\uC740 \uACC4\uD68D\uB9CC \uC138\uC6B0\uBA74 \uB429\uB2C8\uB2E4.
2137
+
2138
+ **\uD615\uC2DD:**
2139
+ \uC9E7\uC740 \uC548\uB0B4 \uBA54\uC2DC\uC9C0
2140
+
2141
+ <checklist>
2142
+ <step>1\uB2E8\uACC4 \uC81C\uBAA9</step>
2143
+ <step>2\uB2E8\uACC4 \uC81C\uBAA9</step>
2144
+ <step>3\uB2E8\uACC4 \uC81C\uBAA9</step>
2145
+ </checklist>
2146
+
2147
+ **\uC608\uC2DC 1 - "\uB370\uBE0C\uB2E4\uC774\uBE0C\uC640 \uC820\uB2E4\uC774\uBE0C \uAC80\uC0C9\uD558\uACE0 \uBCF4\uACE0\uC11C \uC791\uC131\uD574\uC918":**
2148
+ \uB124, \uC870\uC0AC\uB97C \uC9C4\uD589\uD558\uACA0\uC2B5\uB2C8\uB2E4.
2149
+
2150
+ <checklist>
2151
+ <step>\uB370\uBE0C\uB2E4\uC774\uBE0C \uC11C\uBE44\uC2A4 \uC815\uBCF4 \uC870\uC0AC</step>
2152
+ <step>\uC820\uB2E4\uC774\uBE0C \uC11C\uBE44\uC2A4 \uC815\uBCF4 \uC870\uC0AC</step>
2153
+ <step>\uC720\uC0AC \uC11C\uBE44\uC2A4 \uC870\uC0AC</step>
2154
+ <step>\uBE44\uAD50 \uBD84\uC11D\uD45C \uC791\uC131</step>
2155
+ <step>\uC885\uD569 \uBCF4\uACE0\uC11C \uC791\uC131</step>
2156
+ </checklist>
2157
+
2158
+ **\uC608\uC2DC 2 - "\uC6B0\uB9AC \uC11C\uBE44\uC2A4 \uB9C8\uCF00\uD305 \uC804\uB7B5 \uC138\uC6CC\uC918":**
2159
+ \uB9C8\uCF00\uD305 \uC804\uB7B5\uC744 \uB2E8\uACC4\uBCC4\uB85C \uC218\uB9BD\uD558\uACA0\uC2B5\uB2C8\uB2E4.
2160
+
2161
+ <checklist>
2162
+ <step>\uD604\uC7AC \uC11C\uBE44\uC2A4 \uBD84\uC11D</step>
2163
+ <step>\uD0C0\uAC9F \uACE0\uAC1D \uC815\uC758</step>
2164
+ <step>\uACBD\uC7C1\uC0AC \uBCA4\uCE58\uB9C8\uD0B9</step>
2165
+ <step>\uB9C8\uCF00\uD305 \uC804\uB7B5 \uC218\uB9BD</step>
2166
+ </checklist>
2167
+
2168
+ **\uADDC\uCE59:**
2169
+ - 2~8\uB2E8\uACC4\uAC00 \uC801\uC808
2170
+ - \uAC01 \uB2E8\uACC4\uB294 \uAD6C\uCCB4\uC801\uC774\uACE0 \uC2E4\uD589 \uAC00\uB2A5\uD55C \uC791\uC5C5
2171
+ - \uB2E8\uC21C \uC9C8\uBB38\uC774\uB098 \uD55C \uBC88\uC5D0 \uB2F5\uD560 \uC218 \uC788\uB294 \uC694\uCCAD\uC5D0\uB294 \uC0AC\uC6A9 \uAE08\uC9C0
2172
+ - <checklist> \uD0DC\uADF8 \uC55E\uC5D0 \uBC18\uB4DC\uC2DC \uC9E7\uC740 \uC548\uB0B4 \uBA54\uC2DC\uC9C0\uB97C \uD3EC\uD568\uD558\uC138\uC694
2173
+ - \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uD0DC\uADF8 \uB4A4\uC5D0 \uCD94\uAC00 \uD14D\uC2A4\uD2B8\uB97C \uC791\uC131\uD558\uC9C0 \uB9C8\uC138\uC694`);
2121
2174
  }
2122
2175
  return parts.length > 0 ? parts.join("\n") : "";
2123
- }, [personalization, globalMemory, useGlobalMemoryEnabled, enablePoll, buildSkillsPrompt, enableProjects, projectHook.currentProject, projectMemory]);
2176
+ }, [personalization, globalMemory, useGlobalMemoryEnabled, enablePoll, enableChecklist, buildSkillsPrompt, enableProjects, projectHook.currentProject, projectMemory]);
2124
2177
  const compressContext = (0, import_react5.useCallback)(async (messagesToCompress, model) => {
2125
2178
  const conversationText = messagesToCompress.map((m) => `${m.role === "user" ? "\uC0AC\uC6A9\uC790" : "AI"}: ${m.content}`).join("\n\n");
2126
2179
  const summaryPrompt = `\uB2E4\uC74C \uB300\uD654 \uB0B4\uC6A9\uC744 \uD575\uC2EC \uC815\uBCF4\uB9CC \uC720\uC9C0\uD558\uBA74\uC11C \uAC04\uACB0\uD558\uAC8C \uC694\uC57D\uD574\uC8FC\uC138\uC694.
@@ -9697,7 +9750,8 @@ var MessageList = ({
9697
9750
  onPollSubmit,
9698
9751
  onChecklistAbort,
9699
9752
  onChecklistRetry,
9700
- onChecklistSkip
9753
+ onChecklistSkip,
9754
+ activeSkillExecution
9701
9755
  }) => {
9702
9756
  const messagesEndRef = (0, import_react18.useRef)(null);
9703
9757
  const containerRef = (0, import_react18.useRef)(null);
@@ -9819,6 +9873,61 @@ var MessageList = ({
9819
9873
  message.id
9820
9874
  );
9821
9875
  }),
9876
+ activeSkillExecution && activeSkillExecution.status === "executing" && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
9877
+ "div",
9878
+ {
9879
+ style: {
9880
+ display: "flex",
9881
+ alignItems: "center",
9882
+ gap: "10px",
9883
+ padding: "12px 20px",
9884
+ margin: "8px auto",
9885
+ maxWidth: "680px",
9886
+ width: "100%"
9887
+ },
9888
+ children: [
9889
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
9890
+ "div",
9891
+ {
9892
+ style: {
9893
+ width: "20px",
9894
+ height: "20px",
9895
+ borderRadius: "50%",
9896
+ border: "2px solid var(--chatllm-primary, #3584FA)",
9897
+ borderTopColor: "transparent",
9898
+ animation: "chatllm-spin 0.8s linear infinite",
9899
+ flexShrink: 0
9900
+ }
9901
+ }
9902
+ ),
9903
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
9904
+ "span",
9905
+ {
9906
+ style: {
9907
+ fontSize: "13px",
9908
+ fontWeight: 500,
9909
+ color: "var(--chatllm-text-muted, #94a3b8)"
9910
+ },
9911
+ children: activeSkillExecution.progress?.phaseLabel || `${activeSkillExecution.skillName} \uC2E4\uD589 \uC911...`
9912
+ }
9913
+ ),
9914
+ activeSkillExecution.progress?.percentage != null && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
9915
+ "span",
9916
+ {
9917
+ style: {
9918
+ fontSize: "12px",
9919
+ color: "var(--chatllm-primary, #3584FA)",
9920
+ fontWeight: 600
9921
+ },
9922
+ children: [
9923
+ activeSkillExecution.progress.percentage,
9924
+ "%"
9925
+ ]
9926
+ }
9927
+ )
9928
+ ]
9929
+ }
9930
+ ),
9822
9931
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { ref: messagesEndRef })
9823
9932
  ]
9824
9933
  }
@@ -11978,7 +12087,8 @@ var ChatUIView = ({
11978
12087
  onPollSubmit: handlePollSubmit,
11979
12088
  onChecklistAbort: handleChecklistAbort,
11980
12089
  onChecklistRetry: handleChecklistRetry,
11981
- onChecklistSkip: handleChecklistSkip
12090
+ onChecklistSkip: handleChecklistSkip,
12091
+ activeSkillExecution
11982
12092
  }
11983
12093
  ),
11984
12094
  /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(