@gendive/chatllm 0.15.0 → 0.15.2

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.
@@ -919,21 +919,53 @@ var useSkills = (options) => {
919
919
  );
920
920
  if (autoSkills.length === 0) return "";
921
921
  const skillDescriptions = autoSkills.map(([name, config]) => {
922
- const paramsDesc = config.parameters ? Object.entries(config.parameters.properties).map(([k, v]) => `${k}: ${v.description || v.type}`).join(", ") : "";
923
- return `- ${name}: ${config.description}${paramsDesc ? ` (\uD30C\uB77C\uBBF8\uD130: ${paramsDesc})` : ""}`;
924
- }).join("\n");
925
- return `## \uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uC2A4\uD0AC
922
+ let desc = `### ${name}
923
+ ${config.description}`;
924
+ if (config.parameters?.properties) {
925
+ desc += "\n\uD30C\uB77C\uBBF8\uD130:";
926
+ const props = config.parameters.properties;
927
+ const requiredList = config.parameters.required || [];
928
+ Object.entries(props).forEach(([key, prop]) => {
929
+ const isRequired = requiredList.includes(key);
930
+ const tag = isRequired ? "(\uD544\uC218)" : "(\uC120\uD0DD)";
931
+ let line = `
932
+ - ${key} ${tag}: ${prop.description || prop.type}`;
933
+ if (prop.enum) {
934
+ line += ` [\uAC00\uB2A5\uD55C \uAC12: ${prop.enum.join(", ")}]`;
935
+ }
936
+ desc += line;
937
+ });
938
+ const exampleParams = {};
939
+ Object.entries(props).forEach(([key, prop]) => {
940
+ if (prop.enum) {
941
+ exampleParams[key] = prop.enum[0];
942
+ } else if (prop.description) {
943
+ exampleParams[key] = `${prop.description}`;
944
+ } else {
945
+ exampleParams[key] = key;
946
+ }
947
+ });
948
+ desc += `
949
+ \uC608\uC2DC: <skill_use name="${name}">${JSON.stringify(exampleParams)}</skill_use>`;
950
+ }
951
+ return desc;
952
+ }).join("\n\n");
953
+ return `## \uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uB3C4\uAD6C
926
954
 
927
- \uB2E4\uC74C \uC2A4\uD0AC\uC744 \uD544\uC694\uD560 \uB54C \uD638\uCD9C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
928
- \uD638\uCD9C \uD615\uC2DD: <skill_use name="\uC2A4\uD0AC\uC774\uB984">{"param":"value"}</skill_use>
955
+ \uC544\uB798 \uB3C4\uAD6C\uB97C \uC801\uADF9\uC801\uC73C\uB85C \uC0AC\uC6A9\uD558\uC138\uC694. \uC0AC\uC6A9\uC790\uC758 \uC694\uCCAD\uC5D0 \uB9DE\uB294 \uB3C4\uAD6C\uAC00 \uC788\uC73C\uBA74 \uBC18\uB4DC\uC2DC \uD638\uCD9C\uD574\uC57C \uD569\uB2C8\uB2E4.
956
+
957
+ \uD638\uCD9C \uD615\uC2DD:
958
+ <skill_use name="\uB3C4\uAD6C\uC774\uB984">{"\uD30C\uB77C\uBBF8\uD130": "\uAC12"}</skill_use>
929
959
 
930
960
  ${skillDescriptions}
931
961
 
932
- \uADDC\uCE59:
933
- - \uC2A4\uD0AC \uD638\uCD9C\uC774 \uD544\uC694\uD558\uBA74 \uC751\uB2F5\uC5D0 \uC704 \uD0DC\uADF8\uB97C \uD3EC\uD568\uD558\uC138\uC694
934
- - \uD55C \uBC88\uC5D0 \uD558\uB098\uC758 \uC2A4\uD0AC\uB9CC \uD638\uCD9C\uD558\uC138\uC694
935
- - \uC2A4\uD0AC \uD638\uCD9C \uD0DC\uADF8 \uC678\uC5D0 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBCF4\uC5EC\uC904 \uC548\uB0B4 \uBA54\uC2DC\uC9C0\uB3C4 \uD568\uAED8 \uC791\uC131\uD558\uC138\uC694
936
- - \uC2A4\uD0AC\uC774 \uC2E4\uD589\uB418\uBA74 \uACB0\uACFC\uAC00 \uC790\uB3D9\uC73C\uB85C \uC804\uB2EC\uB429\uB2C8\uB2E4`;
962
+ **\uADDC\uCE59:**
963
+ - \uC774\uBBF8\uC9C0 \uC0DD\uC131/\uADF8\uB9BC/\uC77C\uB7EC\uC2A4\uD2B8 \uC694\uCCAD \u2192 \uBC18\uB4DC\uC2DC generate_image \uB3C4\uAD6C \uD638\uCD9C
964
+ - \uCD5C\uC2E0 \uC815\uBCF4/\uAC80\uC0C9/\uB274\uC2A4 \uC694\uCCAD \u2192 \uBC18\uB4DC\uC2DC web_search \uB3C4\uAD6C \uD638\uCD9C
965
+ - \uB3C4\uAD6C \uD638\uCD9C \uC2DC \uC9E7\uC740 \uC548\uB0B4 \uBA54\uC2DC\uC9C0\uB97C \uBA3C\uC800 \uC791\uC131\uD558\uACE0, \uADF8 \uB4A4\uC5D0 skill_use \uD0DC\uADF8\uB97C \uD3EC\uD568\uD558\uC138\uC694
966
+ - \uD55C \uBC88\uC5D0 \uD558\uB098\uC758 \uB3C4\uAD6C\uB9CC \uD638\uCD9C\uD558\uC138\uC694
967
+ - \uB3C4\uAD6C \uC5C6\uC774 \uD14D\uC2A4\uD2B8\uB85C\uB9CC \uB2F5\uBCC0\uD558\uC9C0 \uB9C8\uC138\uC694 (\uD574\uB2F9 \uB3C4\uAD6C\uAC00 \uC788\uB294 \uACBD\uC6B0)
968
+ - \uB3C4\uAD6C\uAC00 \uC2E4\uD589\uB418\uBA74 \uACB0\uACFC\uAC00 \uC790\uB3D9\uC73C\uB85C \uC804\uB2EC\uB429\uB2C8\uB2E4`;
937
969
  }, [resolvedSkills]);
938
970
  const handleSkillCall = useCallback3(
939
971
  async (content, callbacks) => {
@@ -1161,8 +1193,9 @@ var convertToolsToSkills = (tools, onToolCall) => {
1161
1193
  for (const tool of tools) {
1162
1194
  skillMap[tool.name] = {
1163
1195
  description: tool.description,
1164
- trigger: "auto",
1165
- label: tool.name,
1196
+ trigger: "both",
1197
+ label: tool.label || tool.name,
1198
+ icon: tool.icon,
1166
1199
  parameters: {
1167
1200
  type: "object",
1168
1201
  properties: Object.fromEntries(
@@ -2878,11 +2911,23 @@ ${currentSession.contextSummary}` },
2878
2911
  */
2879
2912
  manualSkills,
2880
2913
  /**
2881
- * @description manual 스킬 실행
2882
- * @Todo vibecode - 사용자가 UI에서 스킬 선택 호출, input 내용을 query로 전달
2914
+ * @description manual 스킬/도구 선택 핸들러
2915
+ * @Todo vibecode - 도구 스킬은 selectedAction으로 변환, 일반 스킬은 즉시 실행
2883
2916
  */
2884
2917
  executeManualSkill: (skillName) => {
2885
- executeManualSkill(skillName, { query: input });
2918
+ const isToolSkill = tools?.some((t) => t.name === skillName);
2919
+ if (isToolSkill) {
2920
+ const toolConfig = tools.find((t) => t.name === skillName);
2921
+ setSelectedAction({
2922
+ id: `tool_${skillName}`,
2923
+ label: toolConfig.label || toolConfig.name,
2924
+ icon: toolConfig.icon || "sparkling",
2925
+ description: toolConfig.description,
2926
+ systemPrompt: `\uC0AC\uC6A9\uC790\uAC00 "${toolConfig.label || skillName}" \uB3C4\uAD6C\uB97C \uC0AC\uC6A9\uD558\uB824\uACE0 \uD569\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uC758 \uBA54\uC2DC\uC9C0\uB97C \uBC14\uD0D5\uC73C\uB85C \uBC18\uB4DC\uC2DC <skill_use name="${skillName}"> \uD0DC\uADF8\uB97C \uC0AC\uC6A9\uD558\uC5EC \uC774 \uB3C4\uAD6C\uB97C \uD638\uCD9C\uD558\uC138\uC694. \uB3C4\uAD6C\uB97C \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uACE0 \uD14D\uC2A4\uD2B8\uB85C\uB9CC \uB2F5\uBCC0\uD558\uC9C0 \uB9C8\uC138\uC694.`
2927
+ });
2928
+ } else {
2929
+ executeManualSkill(skillName, { query: input });
2930
+ }
2886
2931
  }
2887
2932
  };
2888
2933
  };