@gendive/chatllm 0.17.29 → 0.17.31
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/dist/react/index.d.mts +5 -0
- package/dist/react/index.d.ts +5 -0
- package/dist/react/index.js +249 -150
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +249 -150
- package/dist/react/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/react/index.mjs
CHANGED
|
@@ -2056,32 +2056,52 @@ ${projectMemoryContext}`);
|
|
|
2056
2056
|
parts.push("");
|
|
2057
2057
|
parts.push(`## \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uC790\uB3D9 \uC2E4\uD589 \uAE30\uB2A5
|
|
2058
2058
|
|
|
2059
|
-
\
|
|
2060
|
-
|
|
2059
|
+
**\uC911\uC694: \uC544\uB798 \uC870\uAC74\uC5D0 \uD574\uB2F9\uD558\uBA74 \uBC18\uB4DC\uC2DC <checklist> \uD0DC\uADF8\uB97C \uC0AC\uC6A9\uD558\uC138\uC694.**
|
|
2060
|
+
|
|
2061
|
+
\uB2E4\uC74C \uC694\uCCAD\uC5D0\uB294 \uCCB4\uD06C\uB9AC\uC2A4\uD2B8\uB97C \uC0AC\uC6A9\uD558\uC138\uC694:
|
|
2062
|
+
- \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")
|
|
2063
|
+
- \uBE44\uAD50 \uBD84\uC11D \uC694\uCCAD (\uC608: "A\uC0AC\uC640 B\uC0AC \uBE44\uAD50\uD574\uC918")
|
|
2064
|
+
- \uBCF4\uACE0\uC11C/\uB9AC\uD3EC\uD2B8 \uC791\uC131 \uC694\uCCAD
|
|
2065
|
+
- 3\uB2E8\uACC4 \uC774\uC0C1\uC758 \uBCF5\uD569 \uC791\uC5C5
|
|
2066
|
+
|
|
2067
|
+
\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.
|
|
2061
2068
|
|
|
2062
2069
|
**\uD615\uC2DD:**
|
|
2070
|
+
\uC9E7\uC740 \uC548\uB0B4 \uBA54\uC2DC\uC9C0
|
|
2071
|
+
|
|
2063
2072
|
<checklist>
|
|
2064
2073
|
<step>1\uB2E8\uACC4 \uC81C\uBAA9</step>
|
|
2065
2074
|
<step>2\uB2E8\uACC4 \uC81C\uBAA9</step>
|
|
2066
2075
|
<step>3\uB2E8\uACC4 \uC81C\uBAA9</step>
|
|
2067
2076
|
</checklist>
|
|
2068
2077
|
|
|
2069
|
-
**\uC608\uC2DC - "
|
|
2070
|
-
\uB124, \
|
|
2078
|
+
**\uC608\uC2DC 1 - "\uB370\uBE0C\uB2E4\uC774\uBE0C\uC640 \uC820\uB2E4\uC774\uBE0C \uAC80\uC0C9\uD558\uACE0 \uBCF4\uACE0\uC11C \uC791\uC131\uD574\uC918":**
|
|
2079
|
+
\uB124, \uC870\uC0AC\uB97C \uC9C4\uD589\uD558\uACA0\uC2B5\uB2C8\uB2E4.
|
|
2080
|
+
|
|
2081
|
+
<checklist>
|
|
2082
|
+
<step>\uB370\uBE0C\uB2E4\uC774\uBE0C \uC11C\uBE44\uC2A4 \uC815\uBCF4 \uC870\uC0AC</step>
|
|
2083
|
+
<step>\uC820\uB2E4\uC774\uBE0C \uC11C\uBE44\uC2A4 \uC815\uBCF4 \uC870\uC0AC</step>
|
|
2084
|
+
<step>\uC720\uC0AC \uC11C\uBE44\uC2A4 \uC870\uC0AC</step>
|
|
2085
|
+
<step>\uBE44\uAD50 \uBD84\uC11D\uD45C \uC791\uC131</step>
|
|
2086
|
+
<step>\uC885\uD569 \uBCF4\uACE0\uC11C \uC791\uC131</step>
|
|
2087
|
+
</checklist>
|
|
2088
|
+
|
|
2089
|
+
**\uC608\uC2DC 2 - "\uC6B0\uB9AC \uC11C\uBE44\uC2A4 \uB9C8\uCF00\uD305 \uC804\uB7B5 \uC138\uC6CC\uC918":**
|
|
2090
|
+
\uB9C8\uCF00\uD305 \uC804\uB7B5\uC744 \uB2E8\uACC4\uBCC4\uB85C \uC218\uB9BD\uD558\uACA0\uC2B5\uB2C8\uB2E4.
|
|
2071
2091
|
|
|
2072
2092
|
<checklist>
|
|
2073
|
-
<step
|
|
2074
|
-
<step
|
|
2075
|
-
<step>\
|
|
2076
|
-
<step>\
|
|
2093
|
+
<step>\uD604\uC7AC \uC11C\uBE44\uC2A4 \uBD84\uC11D</step>
|
|
2094
|
+
<step>\uD0C0\uAC9F \uACE0\uAC1D \uC815\uC758</step>
|
|
2095
|
+
<step>\uACBD\uC7C1\uC0AC \uBCA4\uCE58\uB9C8\uD0B9</step>
|
|
2096
|
+
<step>\uB9C8\uCF00\uD305 \uC804\uB7B5 \uC218\uB9BD</step>
|
|
2077
2097
|
</checklist>
|
|
2078
2098
|
|
|
2079
2099
|
**\uADDC\uCE59:**
|
|
2080
|
-
- 2~8\uB2E8\uACC4\uAC00 \uC801\uC808
|
|
2100
|
+
- 2~8\uB2E8\uACC4\uAC00 \uC801\uC808
|
|
2081
2101
|
- \uAC01 \uB2E8\uACC4\uB294 \uAD6C\uCCB4\uC801\uC774\uACE0 \uC2E4\uD589 \uAC00\uB2A5\uD55C \uC791\uC5C5
|
|
2082
2102
|
- \uB2E8\uC21C \uC9C8\uBB38\uC774\uB098 \uD55C \uBC88\uC5D0 \uB2F5\uD560 \uC218 \uC788\uB294 \uC694\uCCAD\uC5D0\uB294 \uC0AC\uC6A9 \uAE08\uC9C0
|
|
2083
|
-
- <checklist> \uD0DC\uADF8 \uC55E\uC5D0 \uC9E7\uC740 \uC548\uB0B4 \uBA54\uC2DC\uC9C0\uB97C \uD3EC\uD568
|
|
2084
|
-
- \
|
|
2103
|
+
- <checklist> \uD0DC\uADF8 \uC55E\uC5D0 \uBC18\uB4DC\uC2DC \uC9E7\uC740 \uC548\uB0B4 \uBA54\uC2DC\uC9C0\uB97C \uD3EC\uD568\uD558\uC138\uC694
|
|
2104
|
+
- \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uD0DC\uADF8 \uB4A4\uC5D0 \uCD94\uAC00 \uD14D\uC2A4\uD2B8\uB97C \uC791\uC131\uD558\uC9C0 \uB9C8\uC138\uC694`);
|
|
2085
2105
|
}
|
|
2086
2106
|
return parts.length > 0 ? parts.join("\n") : "";
|
|
2087
2107
|
}, [personalization, globalMemory, useGlobalMemoryEnabled, enablePoll, enableChecklist, buildSkillsPrompt, enableProjects, projectHook.currentProject, projectMemory]);
|
|
@@ -2866,6 +2886,7 @@ ${attachmentContext}
|
|
|
2866
2886
|
}
|
|
2867
2887
|
if (detectedSkill && !resolvedSkills[detectedSkill.name]) {
|
|
2868
2888
|
console.warn(`[useChatUI] \uC2A4\uD0AC "${detectedSkill.name}" \uAC10\uC9C0\uB418\uC5C8\uC73C\uB098 \uBBF8\uB4F1\uB85D. \uB4F1\uB85D\uB41C \uC2A4\uD0AC:`, Object.keys(resolvedSkills));
|
|
2889
|
+
accumulatedContent = skillCleanContent;
|
|
2869
2890
|
setSessions(
|
|
2870
2891
|
(prev) => prev.map((s) => {
|
|
2871
2892
|
if (s.id !== capturedSessionId) return s;
|
|
@@ -2880,84 +2901,157 @@ ${attachmentContext}
|
|
|
2880
2901
|
);
|
|
2881
2902
|
}
|
|
2882
2903
|
if (detectedSkill && resolvedSkills[detectedSkill.name]) {
|
|
2883
|
-
|
|
2884
|
-
(
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
};
|
|
2899
|
-
})
|
|
2900
|
-
};
|
|
2901
|
-
})
|
|
2902
|
-
);
|
|
2903
|
-
let streamedReport = "";
|
|
2904
|
-
const { result } = await handleSkillCall(assistantContent, {
|
|
2905
|
-
onProgress: (progress) => {
|
|
2906
|
-
setSessions(
|
|
2907
|
-
(prev) => prev.map((s) => {
|
|
2908
|
-
if (s.id !== capturedSessionId) return s;
|
|
2909
|
-
return {
|
|
2910
|
-
...s,
|
|
2911
|
-
messages: s.messages.map((m) => {
|
|
2912
|
-
if (m.id !== assistantMessageId) return m;
|
|
2913
|
-
return {
|
|
2914
|
-
...m,
|
|
2915
|
-
skillExecution: { ...m.skillExecution, progress }
|
|
2916
|
-
};
|
|
2917
|
-
})
|
|
2918
|
-
};
|
|
2919
|
-
})
|
|
2920
|
-
);
|
|
2921
|
-
},
|
|
2922
|
-
onStream: (chunk) => {
|
|
2923
|
-
streamedReport += chunk;
|
|
2924
|
-
setSessions(
|
|
2925
|
-
(prev) => prev.map((s) => {
|
|
2926
|
-
if (s.id !== capturedSessionId) return s;
|
|
2927
|
-
return {
|
|
2928
|
-
...s,
|
|
2929
|
-
messages: s.messages.map((m) => {
|
|
2930
|
-
if (m.id !== assistantMessageId) return m;
|
|
2931
|
-
return { ...m, content: streamedReport };
|
|
2932
|
-
})
|
|
2933
|
-
};
|
|
2934
|
-
})
|
|
2935
|
-
);
|
|
2936
|
-
},
|
|
2937
|
-
signal: abortControllerRef.current?.signal
|
|
2938
|
-
});
|
|
2939
|
-
if (result) {
|
|
2940
|
-
if (result.metadata?.__toolResult__) {
|
|
2941
|
-
const resultType = result.metadata.resultType;
|
|
2942
|
-
const toolName = result.metadata.toolName;
|
|
2943
|
-
const toolLabel = result.metadata.toolLabel;
|
|
2944
|
-
const toolIcon = result.metadata.toolIcon;
|
|
2945
|
-
const parts = [];
|
|
2946
|
-
if (skillCleanContent.trim()) {
|
|
2947
|
-
parts.push({ type: "text", content: skillCleanContent });
|
|
2904
|
+
if (activeChecklistRef.current) {
|
|
2905
|
+
console.log("[useChatUI] \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uB2E8\uACC4 \uB0B4 \uC2A4\uD0AC \uC2E4\uD589:", detectedSkill.name);
|
|
2906
|
+
accumulatedContent = skillCleanContent;
|
|
2907
|
+
setSessions(
|
|
2908
|
+
(prev) => prev.map((s) => {
|
|
2909
|
+
if (s.id !== capturedSessionId) return s;
|
|
2910
|
+
return { ...s, messages: s.messages.map((m) => m.id !== assistantMessageId ? m : { ...m, content: skillCleanContent }) };
|
|
2911
|
+
})
|
|
2912
|
+
);
|
|
2913
|
+
try {
|
|
2914
|
+
const { result: skillResult } = await handleSkillCall(assistantContent, {
|
|
2915
|
+
signal: abortControllerRef.current?.signal
|
|
2916
|
+
});
|
|
2917
|
+
if (skillResult?.content) {
|
|
2918
|
+
accumulatedContent = skillResult.content;
|
|
2948
2919
|
}
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2920
|
+
} catch (e) {
|
|
2921
|
+
console.warn("[useChatUI] \uCCB4\uD06C\uB9AC\uC2A4\uD2B8 \uB0B4 \uC2A4\uD0AC \uC2E4\uD589 \uC2E4\uD328:", e);
|
|
2922
|
+
}
|
|
2923
|
+
} else {
|
|
2924
|
+
setSessions(
|
|
2925
|
+
(prev) => prev.map((s) => {
|
|
2926
|
+
if (s.id !== capturedSessionId) return s;
|
|
2927
|
+
return {
|
|
2928
|
+
...s,
|
|
2929
|
+
messages: s.messages.map((m) => {
|
|
2930
|
+
if (m.id !== assistantMessageId) return m;
|
|
2931
|
+
return {
|
|
2932
|
+
...m,
|
|
2933
|
+
content: skillCleanContent,
|
|
2934
|
+
skillExecution: {
|
|
2935
|
+
skillName: detectedSkill.name,
|
|
2936
|
+
params: detectedSkill.params,
|
|
2937
|
+
status: "executing"
|
|
2938
|
+
}
|
|
2939
|
+
};
|
|
2940
|
+
})
|
|
2941
|
+
};
|
|
2942
|
+
})
|
|
2943
|
+
);
|
|
2944
|
+
let streamedReport = "";
|
|
2945
|
+
const { result } = await handleSkillCall(assistantContent, {
|
|
2946
|
+
onProgress: (progress) => {
|
|
2947
|
+
setSessions(
|
|
2948
|
+
(prev) => prev.map((s) => {
|
|
2949
|
+
if (s.id !== capturedSessionId) return s;
|
|
2950
|
+
return {
|
|
2951
|
+
...s,
|
|
2952
|
+
messages: s.messages.map((m) => {
|
|
2953
|
+
if (m.id !== assistantMessageId) return m;
|
|
2954
|
+
return {
|
|
2955
|
+
...m,
|
|
2956
|
+
skillExecution: { ...m.skillExecution, progress }
|
|
2957
|
+
};
|
|
2958
|
+
})
|
|
2959
|
+
};
|
|
2960
|
+
})
|
|
2961
|
+
);
|
|
2962
|
+
},
|
|
2963
|
+
onStream: (chunk) => {
|
|
2964
|
+
streamedReport += chunk;
|
|
2965
|
+
setSessions(
|
|
2966
|
+
(prev) => prev.map((s) => {
|
|
2967
|
+
if (s.id !== capturedSessionId) return s;
|
|
2968
|
+
return {
|
|
2969
|
+
...s,
|
|
2970
|
+
messages: s.messages.map((m) => {
|
|
2971
|
+
if (m.id !== assistantMessageId) return m;
|
|
2972
|
+
return { ...m, content: streamedReport };
|
|
2973
|
+
})
|
|
2974
|
+
};
|
|
2975
|
+
})
|
|
2976
|
+
);
|
|
2977
|
+
},
|
|
2978
|
+
signal: abortControllerRef.current?.signal
|
|
2979
|
+
});
|
|
2980
|
+
if (result) {
|
|
2981
|
+
if (result.metadata?.__toolResult__) {
|
|
2982
|
+
const resultType = result.metadata.resultType;
|
|
2983
|
+
const toolName = result.metadata.toolName;
|
|
2984
|
+
const toolLabel = result.metadata.toolLabel;
|
|
2985
|
+
const toolIcon = result.metadata.toolIcon;
|
|
2986
|
+
const parts = [];
|
|
2987
|
+
if (skillCleanContent.trim()) {
|
|
2988
|
+
parts.push({ type: "text", content: skillCleanContent });
|
|
2959
2989
|
}
|
|
2960
|
-
|
|
2990
|
+
parts.push({
|
|
2991
|
+
type: "tool_result",
|
|
2992
|
+
toolName,
|
|
2993
|
+
label: toolLabel,
|
|
2994
|
+
icon: toolIcon,
|
|
2995
|
+
result: {
|
|
2996
|
+
type: resultType,
|
|
2997
|
+
content: result.content,
|
|
2998
|
+
metadata: result.metadata,
|
|
2999
|
+
sources: result.sources
|
|
3000
|
+
}
|
|
3001
|
+
});
|
|
3002
|
+
setSessions(
|
|
3003
|
+
(prev) => prev.map((s) => {
|
|
3004
|
+
if (s.id !== capturedSessionId) return s;
|
|
3005
|
+
return {
|
|
3006
|
+
...s,
|
|
3007
|
+
messages: s.messages.map((m) => {
|
|
3008
|
+
if (m.id !== assistantMessageId) return m;
|
|
3009
|
+
return {
|
|
3010
|
+
...m,
|
|
3011
|
+
contentParts: parts,
|
|
3012
|
+
skillExecution: {
|
|
3013
|
+
...m.skillExecution,
|
|
3014
|
+
status: "done",
|
|
3015
|
+
result
|
|
3016
|
+
}
|
|
3017
|
+
};
|
|
3018
|
+
})
|
|
3019
|
+
};
|
|
3020
|
+
})
|
|
3021
|
+
);
|
|
3022
|
+
if (resultType === "image" || resultType === "file") {
|
|
3023
|
+
saveMessagesOnEarlyReturn();
|
|
3024
|
+
setIsLoading(false);
|
|
3025
|
+
abortControllerRef.current = null;
|
|
3026
|
+
return;
|
|
3027
|
+
}
|
|
3028
|
+
let shouldContinue = continueAfterToolResult;
|
|
3029
|
+
if (onSkillCompleteRef.current) {
|
|
3030
|
+
const decision = onSkillCompleteRef.current(toolName, result);
|
|
3031
|
+
shouldContinue = decision === "continue";
|
|
3032
|
+
}
|
|
3033
|
+
if (!shouldContinue) {
|
|
3034
|
+
saveMessagesOnEarlyReturn();
|
|
3035
|
+
setIsLoading(false);
|
|
3036
|
+
abortControllerRef.current = null;
|
|
3037
|
+
return;
|
|
3038
|
+
}
|
|
3039
|
+
skipNextSkillParsingRef.current = true;
|
|
3040
|
+
saveMessagesOnEarlyReturn();
|
|
3041
|
+
const feedbackPrompt = resultType === "error" ? `\uB3C4\uAD6C "${toolName}" \uC2E4\uD589 \uC911 \uC624\uB958 \uBC1C\uC0DD: ${result.content}
|
|
3042
|
+
|
|
3043
|
+
\uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC624\uB958\uB97C \uC548\uB0B4\uD574\uC8FC\uC138\uC694. skill_use \uD0DC\uADF8\uB294 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694.` : `\uB3C4\uAD6C "${toolName}" \uACB0\uACFC:
|
|
3044
|
+
|
|
3045
|
+
${result.content}
|
|
3046
|
+
|
|
3047
|
+
\uC704 \uACB0\uACFC\uB97C \uBC14\uD0D5\uC73C\uB85C \uB2F5\uBCC0\uD574\uC8FC\uC138\uC694. skill_use \uD0DC\uADF8\uB294 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694.`;
|
|
3048
|
+
setTimeout(() => {
|
|
3049
|
+
sendMessage(feedbackPrompt, { hiddenUserMessage: true });
|
|
3050
|
+
}, 100);
|
|
3051
|
+
setIsLoading(false);
|
|
3052
|
+
abortControllerRef.current = null;
|
|
3053
|
+
return;
|
|
3054
|
+
}
|
|
2961
3055
|
setSessions(
|
|
2962
3056
|
(prev) => prev.map((s) => {
|
|
2963
3057
|
if (s.id !== capturedSessionId) return s;
|
|
@@ -2967,7 +3061,7 @@ ${attachmentContext}
|
|
|
2967
3061
|
if (m.id !== assistantMessageId) return m;
|
|
2968
3062
|
return {
|
|
2969
3063
|
...m,
|
|
2970
|
-
|
|
3064
|
+
sources: result.sources || m.sources,
|
|
2971
3065
|
skillExecution: {
|
|
2972
3066
|
...m.skillExecution,
|
|
2973
3067
|
status: "done",
|
|
@@ -2978,18 +3072,18 @@ ${attachmentContext}
|
|
|
2978
3072
|
};
|
|
2979
3073
|
})
|
|
2980
3074
|
);
|
|
2981
|
-
if (
|
|
3075
|
+
if (streamedReport) {
|
|
2982
3076
|
saveMessagesOnEarlyReturn();
|
|
2983
3077
|
setIsLoading(false);
|
|
2984
3078
|
abortControllerRef.current = null;
|
|
2985
3079
|
return;
|
|
2986
3080
|
}
|
|
2987
|
-
let
|
|
3081
|
+
let shouldContinueSkill = continueAfterToolResult;
|
|
2988
3082
|
if (onSkillCompleteRef.current) {
|
|
2989
|
-
const decision = onSkillCompleteRef.current(
|
|
2990
|
-
|
|
3083
|
+
const decision = onSkillCompleteRef.current(detectedSkill.name, result);
|
|
3084
|
+
shouldContinueSkill = decision === "continue";
|
|
2991
3085
|
}
|
|
2992
|
-
if (!
|
|
3086
|
+
if (!shouldContinueSkill) {
|
|
2993
3087
|
saveMessagesOnEarlyReturn();
|
|
2994
3088
|
setIsLoading(false);
|
|
2995
3089
|
abortControllerRef.current = null;
|
|
@@ -2997,70 +3091,18 @@ ${attachmentContext}
|
|
|
2997
3091
|
}
|
|
2998
3092
|
skipNextSkillParsingRef.current = true;
|
|
2999
3093
|
saveMessagesOnEarlyReturn();
|
|
3000
|
-
const
|
|
3001
|
-
|
|
3002
|
-
\uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC624\uB958\uB97C \uC548\uB0B4\uD574\uC8FC\uC138\uC694. skill_use \uD0DC\uADF8\uB294 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694.` : `\uB3C4\uAD6C "${toolName}" \uACB0\uACFC:
|
|
3094
|
+
const resultPrompt = `\uC2A4\uD0AC "${detectedSkill.name}" \uC2E4\uD589 \uACB0\uACFC:
|
|
3003
3095
|
|
|
3004
3096
|
${result.content}
|
|
3005
3097
|
|
|
3006
|
-
\uC704 \uACB0\uACFC\uB97C \uBC14\uD0D5\uC73C\uB85C \uB2F5\uBCC0\uD574\uC8FC\uC138\uC694. skill_use \uD0DC\uADF8\uB294 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694.`;
|
|
3098
|
+
\uC704 \uACB0\uACFC\uB97C \uBC14\uD0D5\uC73C\uB85C \uC0AC\uC6A9\uC790\uC758 \uC6D0\uB798 \uC9C8\uBB38\uC5D0 \uB2F5\uBCC0\uD574\uC8FC\uC138\uC694. skill_use \uD0DC\uADF8\uB294 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694.`;
|
|
3007
3099
|
setTimeout(() => {
|
|
3008
|
-
sendMessage(
|
|
3100
|
+
sendMessage(resultPrompt, { hiddenUserMessage: true });
|
|
3009
3101
|
}, 100);
|
|
3010
3102
|
setIsLoading(false);
|
|
3011
3103
|
abortControllerRef.current = null;
|
|
3012
3104
|
return;
|
|
3013
3105
|
}
|
|
3014
|
-
setSessions(
|
|
3015
|
-
(prev) => prev.map((s) => {
|
|
3016
|
-
if (s.id !== capturedSessionId) return s;
|
|
3017
|
-
return {
|
|
3018
|
-
...s,
|
|
3019
|
-
messages: s.messages.map((m) => {
|
|
3020
|
-
if (m.id !== assistantMessageId) return m;
|
|
3021
|
-
return {
|
|
3022
|
-
...m,
|
|
3023
|
-
sources: result.sources || m.sources,
|
|
3024
|
-
skillExecution: {
|
|
3025
|
-
...m.skillExecution,
|
|
3026
|
-
status: "done",
|
|
3027
|
-
result
|
|
3028
|
-
}
|
|
3029
|
-
};
|
|
3030
|
-
})
|
|
3031
|
-
};
|
|
3032
|
-
})
|
|
3033
|
-
);
|
|
3034
|
-
if (streamedReport) {
|
|
3035
|
-
saveMessagesOnEarlyReturn();
|
|
3036
|
-
setIsLoading(false);
|
|
3037
|
-
abortControllerRef.current = null;
|
|
3038
|
-
return;
|
|
3039
|
-
}
|
|
3040
|
-
let shouldContinueSkill = continueAfterToolResult;
|
|
3041
|
-
if (onSkillCompleteRef.current) {
|
|
3042
|
-
const decision = onSkillCompleteRef.current(detectedSkill.name, result);
|
|
3043
|
-
shouldContinueSkill = decision === "continue";
|
|
3044
|
-
}
|
|
3045
|
-
if (!shouldContinueSkill) {
|
|
3046
|
-
saveMessagesOnEarlyReturn();
|
|
3047
|
-
setIsLoading(false);
|
|
3048
|
-
abortControllerRef.current = null;
|
|
3049
|
-
return;
|
|
3050
|
-
}
|
|
3051
|
-
skipNextSkillParsingRef.current = true;
|
|
3052
|
-
saveMessagesOnEarlyReturn();
|
|
3053
|
-
const resultPrompt = `\uC2A4\uD0AC "${detectedSkill.name}" \uC2E4\uD589 \uACB0\uACFC:
|
|
3054
|
-
|
|
3055
|
-
${result.content}
|
|
3056
|
-
|
|
3057
|
-
\uC704 \uACB0\uACFC\uB97C \uBC14\uD0D5\uC73C\uB85C \uC0AC\uC6A9\uC790\uC758 \uC6D0\uB798 \uC9C8\uBB38\uC5D0 \uB2F5\uBCC0\uD574\uC8FC\uC138\uC694. skill_use \uD0DC\uADF8\uB294 \uC0AC\uC6A9\uD558\uC9C0 \uB9C8\uC138\uC694.`;
|
|
3058
|
-
setTimeout(() => {
|
|
3059
|
-
sendMessage(resultPrompt, { hiddenUserMessage: true });
|
|
3060
|
-
}, 100);
|
|
3061
|
-
setIsLoading(false);
|
|
3062
|
-
abortControllerRef.current = null;
|
|
3063
|
-
return;
|
|
3064
3106
|
}
|
|
3065
3107
|
}
|
|
3066
3108
|
}
|
|
@@ -9661,7 +9703,8 @@ var MessageList = ({
|
|
|
9661
9703
|
onPollSubmit,
|
|
9662
9704
|
onChecklistAbort,
|
|
9663
9705
|
onChecklistRetry,
|
|
9664
|
-
onChecklistSkip
|
|
9706
|
+
onChecklistSkip,
|
|
9707
|
+
activeSkillExecution
|
|
9665
9708
|
}) => {
|
|
9666
9709
|
const messagesEndRef = useRef8(null);
|
|
9667
9710
|
const containerRef = useRef8(null);
|
|
@@ -9783,6 +9826,61 @@ var MessageList = ({
|
|
|
9783
9826
|
message.id
|
|
9784
9827
|
);
|
|
9785
9828
|
}),
|
|
9829
|
+
activeSkillExecution && activeSkillExecution.status === "executing" && /* @__PURE__ */ jsxs16(
|
|
9830
|
+
"div",
|
|
9831
|
+
{
|
|
9832
|
+
style: {
|
|
9833
|
+
display: "flex",
|
|
9834
|
+
alignItems: "center",
|
|
9835
|
+
gap: "10px",
|
|
9836
|
+
padding: "12px 20px",
|
|
9837
|
+
margin: "8px auto",
|
|
9838
|
+
maxWidth: "680px",
|
|
9839
|
+
width: "100%"
|
|
9840
|
+
},
|
|
9841
|
+
children: [
|
|
9842
|
+
/* @__PURE__ */ jsx17(
|
|
9843
|
+
"div",
|
|
9844
|
+
{
|
|
9845
|
+
style: {
|
|
9846
|
+
width: "20px",
|
|
9847
|
+
height: "20px",
|
|
9848
|
+
borderRadius: "50%",
|
|
9849
|
+
border: "2px solid var(--chatllm-primary, #3584FA)",
|
|
9850
|
+
borderTopColor: "transparent",
|
|
9851
|
+
animation: "chatllm-spin 0.8s linear infinite",
|
|
9852
|
+
flexShrink: 0
|
|
9853
|
+
}
|
|
9854
|
+
}
|
|
9855
|
+
),
|
|
9856
|
+
/* @__PURE__ */ jsx17(
|
|
9857
|
+
"span",
|
|
9858
|
+
{
|
|
9859
|
+
style: {
|
|
9860
|
+
fontSize: "13px",
|
|
9861
|
+
fontWeight: 500,
|
|
9862
|
+
color: "var(--chatllm-text-muted, #94a3b8)"
|
|
9863
|
+
},
|
|
9864
|
+
children: activeSkillExecution.progress?.phaseLabel || `${activeSkillExecution.skillName} \uC2E4\uD589 \uC911...`
|
|
9865
|
+
}
|
|
9866
|
+
),
|
|
9867
|
+
activeSkillExecution.progress?.percentage != null && /* @__PURE__ */ jsxs16(
|
|
9868
|
+
"span",
|
|
9869
|
+
{
|
|
9870
|
+
style: {
|
|
9871
|
+
fontSize: "12px",
|
|
9872
|
+
color: "var(--chatllm-primary, #3584FA)",
|
|
9873
|
+
fontWeight: 600
|
|
9874
|
+
},
|
|
9875
|
+
children: [
|
|
9876
|
+
activeSkillExecution.progress.percentage,
|
|
9877
|
+
"%"
|
|
9878
|
+
]
|
|
9879
|
+
}
|
|
9880
|
+
)
|
|
9881
|
+
]
|
|
9882
|
+
}
|
|
9883
|
+
),
|
|
9786
9884
|
/* @__PURE__ */ jsx17("div", { ref: messagesEndRef })
|
|
9787
9885
|
]
|
|
9788
9886
|
}
|
|
@@ -11942,7 +12040,8 @@ var ChatUIView = ({
|
|
|
11942
12040
|
onPollSubmit: handlePollSubmit,
|
|
11943
12041
|
onChecklistAbort: handleChecklistAbort,
|
|
11944
12042
|
onChecklistRetry: handleChecklistRetry,
|
|
11945
|
-
onChecklistSkip: handleChecklistSkip
|
|
12043
|
+
onChecklistSkip: handleChecklistSkip,
|
|
12044
|
+
activeSkillExecution
|
|
11946
12045
|
}
|
|
11947
12046
|
),
|
|
11948
12047
|
/* @__PURE__ */ jsx22(
|