@chat-lab/ui 0.1.0-beta.53 → 0.1.0-beta.54

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.
Files changed (46) hide show
  1. package/dist/components/Chatkit/index.cjs +5 -5
  2. package/dist/components/Chatkit/index.cjs.map +1 -1
  3. package/dist/components/Chatkit/index.js +5 -5
  4. package/dist/components/Chatkit/index.js.map +1 -1
  5. package/dist/components/Chatkit/types.d.ts +1 -0
  6. package/dist/components/Chatkit/types.d.ts.map +1 -1
  7. package/dist/components/assistant-ui/attachment.cjs +7 -58
  8. package/dist/components/assistant-ui/attachment.cjs.map +1 -1
  9. package/dist/components/assistant-ui/attachment.d.ts.map +1 -1
  10. package/dist/components/assistant-ui/attachment.js +8 -59
  11. package/dist/components/assistant-ui/attachment.js.map +1 -1
  12. package/dist/components/assistant-ui/message-components-with-avatar.cjs +8 -2
  13. package/dist/components/assistant-ui/message-components-with-avatar.cjs.map +1 -1
  14. package/dist/components/assistant-ui/message-components-with-avatar.d.ts +2 -4
  15. package/dist/components/assistant-ui/message-components-with-avatar.d.ts.map +1 -1
  16. package/dist/components/assistant-ui/message-components-with-avatar.js +8 -2
  17. package/dist/components/assistant-ui/message-components-with-avatar.js.map +1 -1
  18. package/dist/components/assistant-ui/thread.cjs +0 -1
  19. package/dist/components/assistant-ui/thread.cjs.map +1 -1
  20. package/dist/components/assistant-ui/thread.js +0 -1
  21. package/dist/components/assistant-ui/thread.js.map +1 -1
  22. package/dist/components/assistant-ui-tools/skill-agent-tool-set.cjs +52 -7
  23. package/dist/components/assistant-ui-tools/skill-agent-tool-set.cjs.map +1 -1
  24. package/dist/components/assistant-ui-tools/skill-agent-tool-set.d.ts.map +1 -1
  25. package/dist/components/assistant-ui-tools/skill-agent-tool-set.js +53 -8
  26. package/dist/components/assistant-ui-tools/skill-agent-tool-set.js.map +1 -1
  27. package/dist/hooks/useSkillAgent/SkillAgentPlugin.cjs +12 -5
  28. package/dist/hooks/useSkillAgent/SkillAgentPlugin.cjs.map +1 -1
  29. package/dist/hooks/useSkillAgent/SkillAgentPlugin.d.ts.map +1 -1
  30. package/dist/hooks/useSkillAgent/SkillAgentPlugin.js +12 -5
  31. package/dist/hooks/useSkillAgent/SkillAgentPlugin.js.map +1 -1
  32. package/dist/index.css +1 -1
  33. package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniqueId.cjs +31 -0
  34. package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniqueId.cjs.map +1 -0
  35. package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniqueId.js +29 -0
  36. package/dist/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniqueId.js.map +1 -0
  37. package/dist/packages/core/dist/index.cjs +2 -8
  38. package/dist/packages/core/dist/index.cjs.map +1 -1
  39. package/dist/packages/core/dist/index.js +2 -8
  40. package/dist/packages/core/dist/index.js.map +1 -1
  41. package/dist/utils/convertToAssistantMessage.cjs +44 -16
  42. package/dist/utils/convertToAssistantMessage.cjs.map +1 -1
  43. package/dist/utils/convertToAssistantMessage.d.ts.map +1 -1
  44. package/dist/utils/convertToAssistantMessage.js +44 -16
  45. package/dist/utils/convertToAssistantMessage.js.map +1 -1
  46. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"skill-agent-tool-set.js","sources":["../../../src/components/assistant-ui-tools/skill-agent-tool-set.tsx"],"sourcesContent":["'use client';\n\nimport {\n makeAssistantToolUI,\n useMessagePartReasoning,\n} from '@assistant-ui/react';\nimport React, { useState } from 'react';\nimport { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card';\nimport { ChevronDown, ChevronUp, Play, RotateCw } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport CodeIcon from '@/assets/Code';\nimport { useChatkitContext } from '@/contexts/ChatkitContext';\nimport { useI18n } from '@/contexts/I18nContext';\n\nconst DataBlock: React.FC<{ label: string; content: any }> = ({\n label,\n content,\n}) => {\n const textContent =\n typeof content === 'string' ? content : JSON.stringify(content, null, 2);\n return (\n <div className=\"rounded-[8px] bg-[#0000000A] border border-border overflow-hidden mt-2\">\n <div className=\"leading-[22px] tracking-[0.3%] text-[13px] text-muted-foreground py-1.5 px-3 pl-[14px] pt-[8px] h-[38px] bg-muted/30 border-b border-border\">\n {label}\n </div>\n <div className=\"p-4 bg-[#FAFBFC]\">\n <pre className=\"text-xs font-mono text-foreground whitespace-pre-wrap break-all overflow-x-auto\">\n {textContent}\n </pre>\n </div>\n </div>\n );\n};\n\nimport { getAvatarByIdx } from '../assistant-ui/message-components-with-avatar';\nimport { File, FilePlus, FilePen, ListChecks } from 'lucide-react';\n\nconst ToolIcon: React.FC<{ toolName: string; className?: string }> = ({\n toolName,\n className,\n}) => {\n switch (toolName) {\n case 'bash_tool':\n return <CodeIcon className={className} />;\n case 'write_file_tool':\n return <FilePlus className={className} />;\n case 'edit_file_tool':\n return <FilePen className={className} />;\n case 'update_check_list_tool':\n return <ListChecks className={className} />;\n default:\n return <File className={className} />;\n }\n};\n\nconst getToolDisplayName = (t: (key: string) => string, toolName: string) => {\n switch (toolName) {\n case 'bash_tool':\n return '执行命令';\n case 'write_file_tool':\n return '写文件';\n case 'edit_file_tool':\n return '编辑文件';\n case 'update_check_list_tool':\n return '更新检查列表';\n default:\n return toolName;\n }\n};\n\nconst getToolSummary = (toolName: string, args: any) => {\n switch (toolName) {\n case 'bash_tool':\n return args?.command;\n case 'write_file_tool':\n case 'edit_file_tool':\n return args?.file_path;\n case 'update_check_list_tool':\n return args?.skill_name;\n default:\n return '';\n }\n};\n\nconst ExecutionItem: React.FC<{\n execution: any;\n isLast?: boolean;\n showAvatar?: boolean;\n marginLeft?: boolean;\n author?: string;\n authorIdx?: number;\n}> = ({ execution, isLast, showAvatar, marginLeft, author, authorIdx }) => {\n const { expandToolDetail } = useChatkitContext();\n const [isItemExpanded, setIsItemExpanded] = useState(expandToolDetail);\n const { toolName, args, result } = execution;\n const isRunning = result === undefined;\n const { t } = useI18n();\n\n const displayName = getToolDisplayName(t, toolName);\n const summary = getToolSummary(toolName, args);\n const Avatar = getAvatarByIdx(authorIdx);\n\n const content = (\n <>\n <div\n className={cn(\n 'flex items-center gap-2 py-1.5 px-2 -mx-2 rounded-md cursor-pointer select-none transition-colors',\n !isRunning && 'hover:bg-muted',\n )}\n onClick={() => !isRunning && setIsItemExpanded(!isItemExpanded)}\n >\n <div className=\"flex-shrink-0 w-4 h-4 flex items-center justify-center\">\n {isRunning ? (\n <RotateCw className=\"h-3.5 w-3.5 animate-spin text-primary\" />\n ) : (\n <Play\n className={cn(\n 'h-3 w-3 text-muted-foreground transition-transform duration-200',\n isItemExpanded && 'rotate-90',\n )}\n fill=\"currentColor\"\n />\n )}\n </div>\n <div className={cn('flex items-center gap-2 min-w-0')}>\n <ToolIcon\n toolName={toolName}\n className=\"h-4 w-4 text-muted-foreground flex-shrink-0\"\n />\n <span\n className={cn(\n 'text-sm font-normal leading-[22px] tracking-[0.3%] shrink-0',\n isRunning ? 'text-muted-foreground' : 'text-foreground',\n )}\n >\n {displayName}\n </span>\n <span\n className={cn(\n 'text-sm font-medium truncate font-mono',\n isRunning ? 'text-muted-foreground' : 'text-foreground',\n )}\n >\n {summary}\n {isRunning && '...'}\n </span>\n </div>\n </div>\n\n {(isItemExpanded || isRunning) && !isRunning && (\n <div\n className={cn(\n 'ml-2 pl-4 mt-1 space-y-3 mb-1 animate-in slide-in-from-top-1 duration-200',\n !isLast && 'border-l border-border',\n )}\n >\n {args && <DataBlock label={t('execution.args')} content={args} />}\n {result && (\n <DataBlock label={t('execution.result')} content={result} />\n )}\n </div>\n )}\n {/* 运行时如果展开也显示参数 */}\n {isRunning && isItemExpanded && args && (\n <div className=\"ml-2 pl-4 mt-1 space-y-3 mb-1 animate-in slide-in-from-top-1 duration-200\">\n <DataBlock label={t('execution.args')} content={args} />\n </div>\n )}\n </>\n );\n\n if (!showAvatar) {\n return (\n <div className={cn('group', marginLeft && 'ml-[50px]')}>{content}</div>\n );\n }\n\n return (\n <div className=\"flex items-start\">\n <div className=\"fit-content mr-[12px] flex-shrink-0 flex-grow-0\">\n <Avatar />\n </div>\n <div className=\"flex-1\">\n <div className=\"font-medium text-[15px] leading-[22px] mb-[6px] color-[#0C0D0E]\">\n {author || 'Agent'}\n </div>\n {content}\n </div>\n </div>\n );\n};\n\nconst ToolExecution: React.FC<{\n toolName: string;\n args: any;\n result?: any;\n showAvatar?: boolean;\n marginLeft?: boolean;\n author?: string;\n authorIdx?: number;\n isLast?: boolean;\n}> = ({\n toolName,\n args,\n result,\n showAvatar,\n marginLeft,\n author,\n authorIdx,\n isLast,\n}) => {\n const execution = {\n toolName,\n args,\n result,\n author,\n authorIdx,\n };\n return (\n <ExecutionItem\n execution={execution}\n isLast={isLast}\n showAvatar={showAvatar}\n marginLeft={marginLeft}\n author={author}\n authorIdx={authorIdx}\n />\n );\n};\n\nconst WriteFileTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'write_file_tool',\n render: props => <ToolExecution {...props} />,\n});\n\nconst ReadFileTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'read_file_tool',\n render: props => <ToolExecution {...props} />,\n});\n\nconst EditFileTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'edit_file_tool',\n render: props => <ToolExecution {...props} />,\n});\n\nexport const BashTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'bash_tool',\n render: props => <ToolExecution {...props} />,\n});\n\nconst UpdateCheckListTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'update_check_list',\n render: props => <ToolExecution {...props} />,\n});\n\nconst RecommendPromptTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'recommend_prompt',\n render: props => <ToolExecution {...props} />,\n});\n\nconst TakeSummaryTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'task_summary',\n render: props => <ToolExecution {...props} />,\n});\n\nconst SkillTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'skills_tool',\n render: props => <ToolExecution {...props} />,\n});\n\nconst skillAgentToolSet = [\n WriteFileTool,\n EditFileTool,\n BashTool,\n UpdateCheckListTool,\n RecommendPromptTool,\n TakeSummaryTool,\n ReadFileTool,\n SkillTool,\n];\nexport { skillAgentToolSet };\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"skill-agent-tool-set.js","sources":["../../../src/components/assistant-ui-tools/skill-agent-tool-set.tsx"],"sourcesContent":["'use client';\n\nimport {\n makeAssistantToolUI,\n useMessagePartReasoning,\n} from '@assistant-ui/react';\nimport React, { useState } from 'react';\nimport { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card';\nimport { ChevronDown, ChevronUp, Play, RotateCw } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport CodeIcon from '@/assets/Code';\nimport { useChatkitContext } from '@/contexts/ChatkitContext';\nimport { useI18n } from '@/contexts/I18nContext';\n\nconst DataBlock: React.FC<{ label: string; content: any }> = ({\n label,\n content,\n}) => {\n const textContent =\n typeof content === 'string' ? content : JSON.stringify(content, null, 2);\n return (\n <div className=\"rounded-[8px] bg-[#0000000A] border border-border overflow-hidden mt-2\">\n <div className=\"leading-[22px] tracking-[0.3%] text-[13px] text-muted-foreground py-1.5 px-3 pl-[14px] pt-[8px] h-[38px] bg-muted/30 border-b border-border\">\n {label}\n </div>\n <div className=\"p-4 bg-[#FAFBFC]\">\n <pre className=\"text-xs font-mono text-foreground whitespace-pre-wrap break-all overflow-x-auto\">\n {textContent}\n </pre>\n </div>\n </div>\n );\n};\n\nimport { getAvatarByIdx } from '../assistant-ui/message-components-with-avatar';\nimport { File, FilePlus, FilePen, ListChecks } from 'lucide-react';\n\nconst ToolIcon: React.FC<{ toolName: string; className?: string }> = ({\n toolName,\n className,\n}) => {\n switch (toolName) {\n case 'bash_tool':\n return <CodeIcon className={className} />;\n case 'write_file_tool':\n return <FilePlus className={className} />;\n case 'edit_file_tool':\n return <FilePen className={className} />;\n case 'update_check_list_tool':\n return <ListChecks className={className} />;\n default:\n return <File className={className} />;\n }\n};\n\nconst getToolDisplayName = (t: (key: string) => string, toolName: string) => {\n switch (toolName) {\n case 'bash_tool':\n return '执行命令';\n case 'write_file_tool':\n return '写文件';\n case 'edit_file_tool':\n return '编辑文件';\n case 'update_check_list':\n return '更新检查列表';\n case 'recommend_prompt':\n return '推荐提示';\n case 'skills_tool':\n return '技能工具';\n case 'task_summary':\n return '任务总结';\n default:\n return toolName;\n }\n};\n\nconst getToolSummary = (toolName: string, args: any) => {\n switch (toolName) {\n case 'bash_tool':\n case 'skills_tool':\n return args?.command;\n case 'write_file_tool':\n case 'edit_file_tool':\n return args?.file_path;\n case 'update_check_list_tool':\n return args?.skill_name;\n default:\n return '';\n }\n};\n\nconst ExecutionItem: React.FC<{\n label?: string;\n result?: string;\n execution: any;\n isLast?: boolean;\n showAvatar?: boolean;\n marginLeft?: boolean;\n author?: string;\n authorIdx?: number;\n}> = ({\n execution,\n isLast,\n showAvatar,\n marginLeft,\n author,\n authorIdx,\n label,\n result: resultFromProps,\n}) => {\n const { expandToolDetail } = useChatkitContext();\n const [isItemExpanded, setIsItemExpanded] = useState(expandToolDetail);\n const { toolName, args, result } = execution;\n const isRunning = result === undefined;\n const { t } = useI18n();\n\n const displayName = getToolDisplayName(t, toolName);\n const summary = getToolSummary(toolName, args);\n const Avatar = getAvatarByIdx(authorIdx);\n\n const resultToDisplay = resultFromProps || result;\n\n const content = (\n <>\n <div\n className={cn(\n 'flex items-center gap-2 py-1.5 px-2 -mx-2 rounded-md cursor-pointer select-none transition-colors',\n !isRunning && 'hover:bg-muted',\n )}\n onClick={() => !isRunning && setIsItemExpanded(!isItemExpanded)}\n >\n <div className=\"flex-shrink-0 w-4 h-4 flex items-center justify-center\">\n {isRunning ? (\n <RotateCw className=\"h-3.5 w-3.5 animate-spin text-primary\" />\n ) : (\n <Play\n className={cn(\n 'h-3 w-3 text-muted-foreground transition-transform duration-200',\n isItemExpanded && 'rotate-90',\n )}\n fill=\"currentColor\"\n />\n )}\n </div>\n <div className={cn('flex items-center gap-2 min-w-0')}>\n <ToolIcon\n toolName={toolName}\n className=\"h-4 w-4 text-muted-foreground flex-shrink-0\"\n />\n <span\n className={cn(\n 'text-sm font-normal leading-[22px] tracking-[0.3%] shrink-0',\n isRunning ? 'text-muted-foreground' : 'text-foreground',\n )}\n >\n {displayName}\n </span>\n <span\n className={cn(\n 'text-sm font-medium truncate font-mono',\n isRunning ? 'text-muted-foreground' : 'text-foreground',\n )}\n >\n {summary}\n {isRunning && '...'}\n </span>\n </div>\n </div>\n\n {(isItemExpanded || isRunning) && !isRunning && (\n <div\n className={cn(\n 'ml-2 pl-4 mt-1 space-y-3 mb-1 animate-in slide-in-from-top-1 duration-200',\n !isLast && 'border-l border-border',\n )}\n >\n {args && (\n <DataBlock label={label || t('execution.args')} content={args} />\n )}\n {resultToDisplay && (\n <DataBlock\n label={t('execution.result')}\n content={resultToDisplay}\n />\n )}\n </div>\n )}\n {/* 运行时如果展开也显示参数 */}\n {isRunning && isItemExpanded && args && (\n <div className=\"ml-2 pl-4 mt-1 space-y-3 mb-1 animate-in slide-in-from-top-1 duration-200\">\n <DataBlock label={t('execution.args')} content={args} />\n </div>\n )}\n </>\n );\n\n if (!showAvatar) {\n return (\n <div className={cn('group', marginLeft && 'ml-[50px]')}>{content}</div>\n );\n }\n\n return (\n <div className=\"flex items-start\">\n <div className=\"fit-content mr-[12px] flex-shrink-0 flex-grow-0\">\n <Avatar />\n </div>\n <div className=\"flex-1\">\n <div className=\"font-medium text-[15px] leading-[22px] mb-[6px] color-[#0C0D0E]\">\n {author || 'Agent'}\n </div>\n {content}\n </div>\n </div>\n );\n};\n\nconst WriteFileToolComp: React.FC<{\n label?: string;\n result?: string;\n execution: any;\n isLast?: boolean;\n showAvatar?: boolean;\n marginLeft?: boolean;\n author?: string;\n authorIdx?: number;\n}> = ({\n execution,\n isLast,\n showAvatar,\n marginLeft,\n author,\n authorIdx,\n label,\n result: resultFromProps,\n}) => {\n const { expandToolDetail } = useChatkitContext();\n const [isItemExpanded, setIsItemExpanded] = useState(expandToolDetail);\n const { toolName, args, result } = execution;\n const isRunning = result === undefined;\n const { t } = useI18n();\n\n const displayName = getToolDisplayName(t, toolName);\n const summary = getToolSummary(toolName, args);\n const Avatar = getAvatarByIdx(authorIdx);\n\n const resultToDisplay = resultFromProps || result;\n\n const content = (\n <>\n <div\n className={cn(\n 'flex items-center gap-2 py-1.5 px-2 -mx-2 rounded-md cursor-pointer select-none transition-colors',\n !isRunning && 'hover:bg-muted',\n )}\n onClick={() => !isRunning && setIsItemExpanded(!isItemExpanded)}\n >\n <div className=\"flex-shrink-0 w-4 h-4 flex items-center justify-center\">\n {isRunning ? (\n <RotateCw className=\"h-3.5 w-3.5 animate-spin text-primary\" />\n ) : (\n <Play\n className={cn(\n 'h-3 w-3 text-muted-foreground transition-transform duration-200',\n isItemExpanded && 'rotate-90',\n )}\n fill=\"currentColor\"\n />\n )}\n </div>\n <div className={cn('flex items-center gap-2 min-w-0')}>\n <ToolIcon\n toolName={toolName}\n className=\"h-4 w-4 text-muted-foreground flex-shrink-0\"\n />\n <span\n className={cn(\n 'text-sm font-normal leading-[22px] tracking-[0.3%] shrink-0',\n isRunning ? 'text-muted-foreground' : 'text-foreground',\n )}\n >\n {displayName}\n </span>\n <span\n className={cn(\n 'text-sm font-medium truncate font-mono',\n isRunning ? 'text-muted-foreground' : 'text-foreground',\n )}\n >\n {summary}\n {isRunning && '...'}\n </span>\n </div>\n </div>\n\n {(isItemExpanded || isRunning) && !isRunning && (\n <div\n className={cn(\n 'ml-2 pl-4 mt-1 space-y-3 mb-1 animate-in slide-in-from-top-1 duration-200',\n !isLast && 'border-l border-border',\n )}\n >\n {args && (\n <DataBlock label={'写文件'} content={args?.content || args} />\n )}\n </div>\n )}\n {/* 运行时如果展开也显示参数 */}\n {isRunning && isItemExpanded && args && (\n <div className=\"ml-2 pl-4 mt-1 space-y-3 mb-1 animate-in slide-in-from-top-1 duration-200\">\n <DataBlock label={'写文件'} content={args?.content || args} />\n </div>\n )}\n </>\n );\n\n if (!showAvatar) {\n return (\n <div className={cn('group', marginLeft && 'ml-[50px]')}>{content}</div>\n );\n }\n\n return (\n <div className=\"flex items-start\">\n <div className=\"fit-content mr-[12px] flex-shrink-0 flex-grow-0\">\n <Avatar />\n </div>\n <div className=\"flex-1\">\n <div className=\"font-medium text-[15px] leading-[22px] mb-[6px] color-[#0C0D0E]\">\n {author || 'Agent'}\n </div>\n {content}\n </div>\n </div>\n );\n};\n\nconst ReadFileToolComp: React.FC<{\n label?: string;\n result?: string;\n execution: any;\n isLast?: boolean;\n showAvatar?: boolean;\n marginLeft?: boolean;\n author?: string;\n authorIdx?: number;\n}> = ({\n execution,\n isLast,\n showAvatar,\n marginLeft,\n author,\n authorIdx,\n label,\n result: resultFromProps,\n}) => {\n const { expandToolDetail } = useChatkitContext();\n const [isItemExpanded, setIsItemExpanded] = useState(expandToolDetail);\n const { toolName, args, result } = execution;\n const isRunning = result === undefined;\n const { t } = useI18n();\n\n const displayName = getToolDisplayName(t, toolName);\n const summary = getToolSummary(toolName, args);\n const Avatar = getAvatarByIdx(authorIdx);\n\n const resultToDisplay = resultFromProps || result;\n\n const content = (\n <>\n <div\n className={cn(\n 'flex items-center gap-2 py-1.5 px-2 -mx-2 rounded-md cursor-pointer select-none transition-colors',\n !isRunning && 'hover:bg-muted',\n )}\n onClick={() => !isRunning && setIsItemExpanded(!isItemExpanded)}\n >\n <div className=\"flex-shrink-0 w-4 h-4 flex items-center justify-center\">\n {isRunning ? (\n <RotateCw className=\"h-3.5 w-3.5 animate-spin text-primary\" />\n ) : (\n <Play\n className={cn(\n 'h-3 w-3 text-muted-foreground transition-transform duration-200',\n isItemExpanded && 'rotate-90',\n )}\n fill=\"currentColor\"\n />\n )}\n </div>\n <div className={cn('flex items-center gap-2 min-w-0')}>\n <ToolIcon\n toolName={toolName}\n className=\"h-4 w-4 text-muted-foreground flex-shrink-0\"\n />\n <span\n className={cn(\n 'text-sm font-normal leading-[22px] tracking-[0.3%] shrink-0',\n isRunning ? 'text-muted-foreground' : 'text-foreground',\n )}\n >\n 读文件\n </span>\n <span\n className={cn(\n 'text-sm font-medium truncate font-mono',\n isRunning ? 'text-muted-foreground' : 'text-foreground',\n )}\n >\n {summary}\n {isRunning && '...'}\n </span>\n </div>\n </div>\n\n {(isItemExpanded || isRunning) && !isRunning && (\n <div\n className={cn(\n 'ml-2 pl-4 mt-1 space-y-3 mb-1 animate-in slide-in-from-top-1 duration-200',\n !isLast && 'border-l border-border',\n )}\n >\n {resultToDisplay && (\n <DataBlock\n label={'读取文件'}\n content={resultToDisplay?.result || resultToDisplay}\n />\n )}\n </div>\n )}\n {/* 运行时如果展开也显示参数 */}\n {isRunning && isItemExpanded && args && (\n <div className=\"ml-2 pl-4 mt-1 space-y-3 mb-1 animate-in slide-in-from-top-1 duration-200\">\n <DataBlock label={'写文件'} content={args?.content || args} />\n </div>\n )}\n </>\n );\n\n if (!showAvatar) {\n return (\n <div className={cn('group', marginLeft && 'ml-[50px]')}>{content}</div>\n );\n }\n\n return (\n <div className=\"flex items-start\">\n <div className=\"fit-content mr-[12px] flex-shrink-0 flex-grow-0\">\n <Avatar />\n </div>\n <div className=\"flex-1\">\n <div className=\"font-medium text-[15px] leading-[22px] mb-[6px] color-[#0C0D0E]\">\n {author || 'Agent'}\n </div>\n {content}\n </div>\n </div>\n );\n};\n\nconst ToolExecution: React.FC<{\n toolName: string;\n args: any;\n label?: string;\n result?: any;\n showAvatar?: boolean;\n marginLeft?: boolean;\n author?: string;\n authorIdx?: number;\n isLast?: boolean;\n component?: React.ElementType;\n}> = ({\n toolName,\n args,\n result,\n showAvatar,\n marginLeft,\n author,\n authorIdx,\n isLast,\n component = ExecutionItem,\n}) => {\n const execution = {\n toolName,\n args,\n result,\n author,\n authorIdx,\n };\n return React.createElement(component, {\n execution,\n isLast,\n showAvatar,\n marginLeft,\n author,\n authorIdx,\n });\n};\n\nconst WriteFileTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'write_file_tool',\n render: props => <ToolExecution {...props} component={WriteFileToolComp} />,\n});\n\nconst ReadFileTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'read_file_tool',\n render: props => <ToolExecution {...props} component={ReadFileToolComp} />,\n});\n\nconst EditFileTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'edit_file_tool',\n render: props => <ToolExecution {...props} />,\n});\n\nexport const BashTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'bash_tool',\n render: props => <ToolExecution {...props} />,\n});\n\nconst UpdateCheckListTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'update_check_list',\n render: props => <ToolExecution {...props} />,\n});\n\nconst RecommendPromptTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'recommend_prompt',\n render: props => <ToolExecution {...props} />,\n});\n\nconst TakeSummaryTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'task_summary',\n render: props => <ToolExecution {...props} />,\n});\n\nconst SkillTool = makeAssistantToolUI<Record<string, any>, any>({\n toolName: 'skills_tool',\n render: props => <ToolExecution {...props} />,\n});\n\nconst skillAgentToolSet = [\n WriteFileTool,\n EditFileTool,\n BashTool,\n UpdateCheckListTool,\n RecommendPromptTool,\n TakeSummaryTool,\n ReadFileTool,\n SkillTool,\n];\nexport { skillAgentToolSet };\n"],"names":["_jsxs","_jsx","_Fragment","React"],"mappings":"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"}
@@ -31,13 +31,20 @@ class SkillAgentPlugin extends index.ChatkitPlugin {
31
31
  const filePaths = await this.onUploadFiles?.(ctx.userMessage.attaches.map(({ file }) => file));
32
32
  return {
33
33
  ...ctx,
34
- attachments: [],
35
34
  userMessage: {
36
35
  ...ctx.userMessage,
37
- content: ctx.userMessage.content.concat({
38
- type: 'text',
39
- text: `附件 :${filePaths?.join(',') || ''}`,
40
- }),
36
+ attaches: [],
37
+ content: [
38
+ ...ctx.userMessage.content,
39
+ ...(filePaths?.length
40
+ ? [
41
+ {
42
+ type: 'text',
43
+ text: `[${filePaths.join(',')}]`,
44
+ },
45
+ ]
46
+ : []),
47
+ ],
41
48
  },
42
49
  };
43
50
  });
@@ -1 +1 @@
1
- {"version":3,"file":"SkillAgentPlugin.cjs","sources":["../../../src/hooks/useSkillAgent/SkillAgentPlugin.ts"],"sourcesContent":["import { ChatkitPlugin, Compiler } from '@chat-lab/core';\nimport { SkillAgentOptions } from '.';\nimport { deepAssign } from '@/utils/deepAssign';\nconst pluginName = 'SkillAgentPlugin';\nclass SkillAgentPlugin extends ChatkitPlugin {\n onStateChange?: (state: Record<string, unknown>) => void;\n onUploadFiles?: (files: File[]) => Promise<string[]>;\n constructor(options: {\n onStateChange?: (state: Record<string, unknown>) => void;\n onUploadFiles?: (files: File[]) => Promise<string[]>;\n }) {\n super({ pluginName });\n this.onStateChange = options.onStateChange;\n this.onUploadFiles = options.onUploadFiles;\n }\n apply(compiler: Compiler) {\n compiler.hooks.message.received.tap(pluginName, (ctx: any) => {\n const metadata = ctx.metadata;\n const threadId = ctx.threadId;\n if (metadata.hasStateDelta) {\n const thread = this.chatController?.getThread(threadId);\n const pendingState = deepAssign(\n thread?.metadata?.state || {},\n metadata.stateDelta,\n ) as Record<string, unknown>;\n this.onStateChange?.(pendingState);\n this.chatController?.updateThread(threadId, {\n metadata: {\n ...thread?.metadata,\n state: pendingState,\n },\n });\n }\n\n return ctx;\n });\n\n compiler.hooks.message.beforeSend.tap(pluginName, async (ctx: any) => {\n const filePaths = await this.onUploadFiles?.(\n ctx.userMessage.attaches.map(({ file }) => file),\n );\n\n return {\n ...ctx,\n attachments: [],\n userMessage: {\n ...ctx.userMessage,\n content: ctx.userMessage.content.concat({\n type: 'text',\n text: `附件 :${filePaths?.join(',') || ''}`,\n }),\n },\n };\n });\n }\n\n updateOptions(options: SkillAgentOptions) {\n this.onStateChange = options.onStateChange;\n this.onUploadFiles = options.onUploadFiles;\n }\n}\n\nexport default SkillAgentPlugin;\n"],"names":["ChatkitPlugin","deepAssign"],"mappings":";;;;;AAGA,MAAM,UAAU,GAAG,kBAAkB,CAAC;AACtC,MAAM,gBAAiB,SAAQA,mBAAa,CAAA;AAG1C,IAAA,WAAA,CAAY,OAGX,EAAA;AACC,QAAA,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;AAC3C,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;KAC5C;AACD,IAAA,KAAK,CAAC,QAAkB,EAAA;AACtB,QAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,GAAQ,KAAI;AAC3D,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B,YAAA,IAAI,QAAQ,CAAC,aAAa,EAAE;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxD,gBAAA,MAAM,YAAY,GAAGC,qBAAU,CAC7B,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,EAC7B,QAAQ,CAAC,UAAU,CACO,CAAC;AAC7B,gBAAA,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,QAAQ,EAAE;AAC1C,oBAAA,QAAQ,EAAE;wBACR,GAAG,MAAM,EAAE,QAAQ;AACnB,wBAAA,KAAK,EAAE,YAAY;AACpB,qBAAA;AACF,iBAAA,CAAC,CAAC;aACJ;AAED,YAAA,OAAO,GAAG,CAAC;AACb,SAAC,CAAC,CAAC;AAEH,QAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,GAAQ,KAAI;YACnE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,GACxC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CACjD,CAAC;YAEF,OAAO;AACL,gBAAA,GAAG,GAAG;AACN,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,WAAW,EAAE;oBACX,GAAG,GAAG,CAAC,WAAW;oBAClB,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;AACtC,wBAAA,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,CAAO,IAAA,EAAA,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAE,CAAA;qBAC1C,CAAC;AACH,iBAAA;aACF,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,aAAa,CAAC,OAA0B,EAAA;AACtC,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;AAC3C,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;KAC5C;AACF;;;;"}
1
+ {"version":3,"file":"SkillAgentPlugin.cjs","sources":["../../../src/hooks/useSkillAgent/SkillAgentPlugin.ts"],"sourcesContent":["import { ChatkitPlugin, Compiler } from '@chat-lab/core';\nimport { SkillAgentOptions } from '.';\nimport { deepAssign } from '@/utils/deepAssign';\nconst pluginName = 'SkillAgentPlugin';\nclass SkillAgentPlugin extends ChatkitPlugin {\n onStateChange?: (state: Record<string, unknown>) => void;\n onUploadFiles?: (files: File[]) => Promise<string[]>;\n constructor(options: {\n onStateChange?: (state: Record<string, unknown>) => void;\n onUploadFiles?: (files: File[]) => Promise<string[]>;\n }) {\n super({ pluginName });\n this.onStateChange = options.onStateChange;\n this.onUploadFiles = options.onUploadFiles;\n }\n apply(compiler: Compiler) {\n compiler.hooks.message.received.tap(pluginName, (ctx: any) => {\n const metadata = ctx.metadata;\n const threadId = ctx.threadId;\n if (metadata.hasStateDelta) {\n const thread = this.chatController?.getThread(threadId);\n const pendingState = deepAssign(\n thread?.metadata?.state || {},\n metadata.stateDelta,\n ) as Record<string, unknown>;\n this.onStateChange?.(pendingState);\n this.chatController?.updateThread(threadId, {\n metadata: {\n ...thread?.metadata,\n state: pendingState,\n },\n });\n }\n\n return ctx;\n });\n\n compiler.hooks.message.beforeSend.tap(pluginName, async (ctx: any) => {\n const filePaths = await this.onUploadFiles?.(\n ctx.userMessage.attaches.map(({ file }) => file),\n );\n\n\n return {\n ...ctx,\n userMessage: {\n ...ctx.userMessage,\n attaches: [],\n content: [\n ...ctx.userMessage.content,\n ...(filePaths?.length\n ? [\n {\n type: 'text',\n text: `[${filePaths.join(',')}]`,\n },\n ]\n : []),\n ],\n },\n };\n });\n }\n\n updateOptions(options: SkillAgentOptions) {\n this.onStateChange = options.onStateChange;\n this.onUploadFiles = options.onUploadFiles;\n }\n}\n\nexport default SkillAgentPlugin;\n"],"names":["ChatkitPlugin","deepAssign"],"mappings":";;;;;AAGA,MAAM,UAAU,GAAG,kBAAkB,CAAC;AACtC,MAAM,gBAAiB,SAAQA,mBAAa,CAAA;AAG1C,IAAA,WAAA,CAAY,OAGX,EAAA;AACC,QAAA,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;AAC3C,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;KAC5C;AACD,IAAA,KAAK,CAAC,QAAkB,EAAA;AACtB,QAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,GAAQ,KAAI;AAC3D,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B,YAAA,IAAI,QAAQ,CAAC,aAAa,EAAE;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxD,gBAAA,MAAM,YAAY,GAAGC,qBAAU,CAC7B,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,EAC7B,QAAQ,CAAC,UAAU,CACO,CAAC;AAC7B,gBAAA,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,QAAQ,EAAE;AAC1C,oBAAA,QAAQ,EAAE;wBACR,GAAG,MAAM,EAAE,QAAQ;AACnB,wBAAA,KAAK,EAAE,YAAY;AACpB,qBAAA;AACF,iBAAA,CAAC,CAAC;aACJ;AAED,YAAA,OAAO,GAAG,CAAC;AACb,SAAC,CAAC,CAAC;AAEH,QAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,GAAQ,KAAI;YACnE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,GACxC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CACjD,CAAC;YAGF,OAAO;AACL,gBAAA,GAAG,GAAG;AACN,gBAAA,WAAW,EAAE;oBACX,GAAG,GAAG,CAAC,WAAW;AAClB,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAG,GAAG,CAAC,WAAW,CAAC,OAAO;wBAC1B,IAAI,SAAS,EAAE,MAAM;AACnB,8BAAE;AACE,gCAAA;AACE,oCAAA,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAG,CAAA,CAAA;AACjC,iCAAA;AACF,6BAAA;8BACD,EAAE,CAAC;AACR,qBAAA;AACF,iBAAA;aACF,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,aAAa,CAAC,OAA0B,EAAA;AACtC,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;AAC3C,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;KAC5C;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SkillAgentPlugin.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSkillAgent/SkillAgentPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,GAAG,CAAC;AAGtC,cAAM,gBAAiB,SAAQ,aAAa;IAC1C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACzD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACzC,OAAO,EAAE;QACnB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;QACzD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;KACtD;IAKD,KAAK,CAAC,QAAQ,EAAE,QAAQ;IAyCxB,aAAa,CAAC,OAAO,EAAE,iBAAiB;CAIzC;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"SkillAgentPlugin.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSkillAgent/SkillAgentPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,GAAG,CAAC;AAGtC,cAAM,gBAAiB,SAAQ,aAAa;IAC1C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACzD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACzC,OAAO,EAAE;QACnB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;QACzD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;KACtD;IAKD,KAAK,CAAC,QAAQ,EAAE,QAAQ;IAiDxB,aAAa,CAAC,OAAO,EAAE,iBAAiB;CAIzC;AAED,eAAe,gBAAgB,CAAC"}
@@ -29,13 +29,20 @@ class SkillAgentPlugin extends ChatkitPlugin {
29
29
  const filePaths = await this.onUploadFiles?.(ctx.userMessage.attaches.map(({ file }) => file));
30
30
  return {
31
31
  ...ctx,
32
- attachments: [],
33
32
  userMessage: {
34
33
  ...ctx.userMessage,
35
- content: ctx.userMessage.content.concat({
36
- type: 'text',
37
- text: `附件 :${filePaths?.join(',') || ''}`,
38
- }),
34
+ attaches: [],
35
+ content: [
36
+ ...ctx.userMessage.content,
37
+ ...(filePaths?.length
38
+ ? [
39
+ {
40
+ type: 'text',
41
+ text: `[${filePaths.join(',')}]`,
42
+ },
43
+ ]
44
+ : []),
45
+ ],
39
46
  },
40
47
  };
41
48
  });
@@ -1 +1 @@
1
- {"version":3,"file":"SkillAgentPlugin.js","sources":["../../../src/hooks/useSkillAgent/SkillAgentPlugin.ts"],"sourcesContent":["import { ChatkitPlugin, Compiler } from '@chat-lab/core';\nimport { SkillAgentOptions } from '.';\nimport { deepAssign } from '@/utils/deepAssign';\nconst pluginName = 'SkillAgentPlugin';\nclass SkillAgentPlugin extends ChatkitPlugin {\n onStateChange?: (state: Record<string, unknown>) => void;\n onUploadFiles?: (files: File[]) => Promise<string[]>;\n constructor(options: {\n onStateChange?: (state: Record<string, unknown>) => void;\n onUploadFiles?: (files: File[]) => Promise<string[]>;\n }) {\n super({ pluginName });\n this.onStateChange = options.onStateChange;\n this.onUploadFiles = options.onUploadFiles;\n }\n apply(compiler: Compiler) {\n compiler.hooks.message.received.tap(pluginName, (ctx: any) => {\n const metadata = ctx.metadata;\n const threadId = ctx.threadId;\n if (metadata.hasStateDelta) {\n const thread = this.chatController?.getThread(threadId);\n const pendingState = deepAssign(\n thread?.metadata?.state || {},\n metadata.stateDelta,\n ) as Record<string, unknown>;\n this.onStateChange?.(pendingState);\n this.chatController?.updateThread(threadId, {\n metadata: {\n ...thread?.metadata,\n state: pendingState,\n },\n });\n }\n\n return ctx;\n });\n\n compiler.hooks.message.beforeSend.tap(pluginName, async (ctx: any) => {\n const filePaths = await this.onUploadFiles?.(\n ctx.userMessage.attaches.map(({ file }) => file),\n );\n\n return {\n ...ctx,\n attachments: [],\n userMessage: {\n ...ctx.userMessage,\n content: ctx.userMessage.content.concat({\n type: 'text',\n text: `附件 :${filePaths?.join(',') || ''}`,\n }),\n },\n };\n });\n }\n\n updateOptions(options: SkillAgentOptions) {\n this.onStateChange = options.onStateChange;\n this.onUploadFiles = options.onUploadFiles;\n }\n}\n\nexport default SkillAgentPlugin;\n"],"names":[],"mappings":";;;AAGA,MAAM,UAAU,GAAG,kBAAkB,CAAC;AACtC,MAAM,gBAAiB,SAAQ,aAAa,CAAA;AAG1C,IAAA,WAAA,CAAY,OAGX,EAAA;AACC,QAAA,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;AAC3C,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;KAC5C;AACD,IAAA,KAAK,CAAC,QAAkB,EAAA;AACtB,QAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,GAAQ,KAAI;AAC3D,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B,YAAA,IAAI,QAAQ,CAAC,aAAa,EAAE;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxD,gBAAA,MAAM,YAAY,GAAG,UAAU,CAC7B,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,EAC7B,QAAQ,CAAC,UAAU,CACO,CAAC;AAC7B,gBAAA,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,QAAQ,EAAE;AAC1C,oBAAA,QAAQ,EAAE;wBACR,GAAG,MAAM,EAAE,QAAQ;AACnB,wBAAA,KAAK,EAAE,YAAY;AACpB,qBAAA;AACF,iBAAA,CAAC,CAAC;aACJ;AAED,YAAA,OAAO,GAAG,CAAC;AACb,SAAC,CAAC,CAAC;AAEH,QAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,GAAQ,KAAI;YACnE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,GACxC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CACjD,CAAC;YAEF,OAAO;AACL,gBAAA,GAAG,GAAG;AACN,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,WAAW,EAAE;oBACX,GAAG,GAAG,CAAC,WAAW;oBAClB,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;AACtC,wBAAA,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,CAAO,IAAA,EAAA,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAE,CAAA;qBAC1C,CAAC;AACH,iBAAA;aACF,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,aAAa,CAAC,OAA0B,EAAA;AACtC,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;AAC3C,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;KAC5C;AACF;;;;"}
1
+ {"version":3,"file":"SkillAgentPlugin.js","sources":["../../../src/hooks/useSkillAgent/SkillAgentPlugin.ts"],"sourcesContent":["import { ChatkitPlugin, Compiler } from '@chat-lab/core';\nimport { SkillAgentOptions } from '.';\nimport { deepAssign } from '@/utils/deepAssign';\nconst pluginName = 'SkillAgentPlugin';\nclass SkillAgentPlugin extends ChatkitPlugin {\n onStateChange?: (state: Record<string, unknown>) => void;\n onUploadFiles?: (files: File[]) => Promise<string[]>;\n constructor(options: {\n onStateChange?: (state: Record<string, unknown>) => void;\n onUploadFiles?: (files: File[]) => Promise<string[]>;\n }) {\n super({ pluginName });\n this.onStateChange = options.onStateChange;\n this.onUploadFiles = options.onUploadFiles;\n }\n apply(compiler: Compiler) {\n compiler.hooks.message.received.tap(pluginName, (ctx: any) => {\n const metadata = ctx.metadata;\n const threadId = ctx.threadId;\n if (metadata.hasStateDelta) {\n const thread = this.chatController?.getThread(threadId);\n const pendingState = deepAssign(\n thread?.metadata?.state || {},\n metadata.stateDelta,\n ) as Record<string, unknown>;\n this.onStateChange?.(pendingState);\n this.chatController?.updateThread(threadId, {\n metadata: {\n ...thread?.metadata,\n state: pendingState,\n },\n });\n }\n\n return ctx;\n });\n\n compiler.hooks.message.beforeSend.tap(pluginName, async (ctx: any) => {\n const filePaths = await this.onUploadFiles?.(\n ctx.userMessage.attaches.map(({ file }) => file),\n );\n\n\n return {\n ...ctx,\n userMessage: {\n ...ctx.userMessage,\n attaches: [],\n content: [\n ...ctx.userMessage.content,\n ...(filePaths?.length\n ? [\n {\n type: 'text',\n text: `[${filePaths.join(',')}]`,\n },\n ]\n : []),\n ],\n },\n };\n });\n }\n\n updateOptions(options: SkillAgentOptions) {\n this.onStateChange = options.onStateChange;\n this.onUploadFiles = options.onUploadFiles;\n }\n}\n\nexport default SkillAgentPlugin;\n"],"names":[],"mappings":";;;AAGA,MAAM,UAAU,GAAG,kBAAkB,CAAC;AACtC,MAAM,gBAAiB,SAAQ,aAAa,CAAA;AAG1C,IAAA,WAAA,CAAY,OAGX,EAAA;AACC,QAAA,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;AAC3C,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;KAC5C;AACD,IAAA,KAAK,CAAC,QAAkB,EAAA;AACtB,QAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,GAAQ,KAAI;AAC3D,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B,YAAA,IAAI,QAAQ,CAAC,aAAa,EAAE;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxD,gBAAA,MAAM,YAAY,GAAG,UAAU,CAC7B,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,EAC7B,QAAQ,CAAC,UAAU,CACO,CAAC;AAC7B,gBAAA,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,QAAQ,EAAE;AAC1C,oBAAA,QAAQ,EAAE;wBACR,GAAG,MAAM,EAAE,QAAQ;AACnB,wBAAA,KAAK,EAAE,YAAY;AACpB,qBAAA;AACF,iBAAA,CAAC,CAAC;aACJ;AAED,YAAA,OAAO,GAAG,CAAC;AACb,SAAC,CAAC,CAAC;AAEH,QAAA,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,GAAQ,KAAI;YACnE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,GACxC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CACjD,CAAC;YAGF,OAAO;AACL,gBAAA,GAAG,GAAG;AACN,gBAAA,WAAW,EAAE;oBACX,GAAG,GAAG,CAAC,WAAW;AAClB,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,OAAO,EAAE;AACP,wBAAA,GAAG,GAAG,CAAC,WAAW,CAAC,OAAO;wBAC1B,IAAI,SAAS,EAAE,MAAM;AACnB,8BAAE;AACE,gCAAA;AACE,oCAAA,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAG,CAAA,CAAA;AACjC,iCAAA;AACF,6BAAA;8BACD,EAAE,CAAC;AACR,qBAAA;AACF,iBAAA;aACF,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,aAAa,CAAC,OAA0B,EAAA;AACtC,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;AAC3C,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;KAC5C;AACF;;;;"}