@chat-lab/ui 0.1.0-beta.42 → 0.1.0-beta.44

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 (91) hide show
  1. package/dist/_virtual/index5.cjs +2 -5
  2. package/dist/_virtual/index5.cjs.map +1 -1
  3. package/dist/_virtual/index5.js +2 -5
  4. package/dist/_virtual/index5.js.map +1 -1
  5. package/dist/adk/components/Debug/Events/index.cjs +1 -1
  6. package/dist/adk/components/Debug/Events/index.js +1 -1
  7. package/dist/adk/components/Debug/Trace/store.cjs +5 -5
  8. package/dist/adk/components/Debug/Trace/store.cjs.map +1 -1
  9. package/dist/adk/components/Debug/Trace/store.js +2 -2
  10. package/dist/adk/hooks/useEvents.cjs +6 -6
  11. package/dist/adk/hooks/useEvents.cjs.map +1 -1
  12. package/dist/adk/hooks/useEvents.js +3 -3
  13. package/dist/assets/ThumbDownIcon.cjs +1 -1
  14. package/dist/assets/ThumbDownIcon.cjs.map +1 -1
  15. package/dist/assets/ThumbDownIcon.js +1 -1
  16. package/dist/assets/ThumbDownIcon.js.map +1 -1
  17. package/dist/components/Chatkit/index.cjs +6 -6
  18. package/dist/components/Chatkit/index.cjs.map +1 -1
  19. package/dist/components/Chatkit/index.d.ts +2 -2
  20. package/dist/components/Chatkit/index.d.ts.map +1 -1
  21. package/dist/components/Chatkit/index.js +6 -6
  22. package/dist/components/Chatkit/index.js.map +1 -1
  23. package/dist/components/Chatkit/types.d.ts +1 -0
  24. package/dist/components/Chatkit/types.d.ts.map +1 -1
  25. package/dist/components/assistant-ui/thread.cjs +18 -16
  26. package/dist/components/assistant-ui/thread.cjs.map +1 -1
  27. package/dist/components/assistant-ui/thread.d.ts.map +1 -1
  28. package/dist/components/assistant-ui/thread.js +17 -15
  29. package/dist/components/assistant-ui/thread.js.map +1 -1
  30. package/dist/components/assistant-ui/tooltip-icon-button.cjs +2 -2
  31. package/dist/components/assistant-ui/tooltip-icon-button.cjs.map +1 -1
  32. package/dist/components/assistant-ui/tooltip-icon-button.js +1 -1
  33. package/dist/components/thread-list.cjs +7 -7
  34. package/dist/components/thread-list.cjs.map +1 -1
  35. package/dist/components/thread-list.js +2 -2
  36. package/dist/components/thread-list.js.map +1 -1
  37. package/dist/components/ui/button.cjs +2 -2
  38. package/dist/components/ui/button.cjs.map +1 -1
  39. package/dist/components/ui/button.js +1 -1
  40. package/dist/hooks/useADKChat.cjs +33 -5
  41. package/dist/hooks/useADKChat.cjs.map +1 -1
  42. package/dist/hooks/useADKChat.d.ts +6 -1
  43. package/dist/hooks/useADKChat.d.ts.map +1 -1
  44. package/dist/hooks/useADKChat.js +34 -6
  45. package/dist/hooks/useADKChat.js.map +1 -1
  46. package/dist/index.cjs +1 -0
  47. package/dist/index.cjs.map +1 -1
  48. package/dist/index.js +1 -0
  49. package/dist/index.js.map +1 -1
  50. package/dist/lib/utils.cjs +1 -1
  51. package/dist/lib/utils.js +1 -1
  52. package/dist/node_modules/.pnpm/@a2a-js_sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/chunk-3QDLXHKS.cjs +7 -0
  53. package/dist/node_modules/.pnpm/@a2a-js_sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/chunk-3QDLXHKS.cjs.map +1 -0
  54. package/dist/node_modules/.pnpm/@a2a-js_sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/chunk-3QDLXHKS.js +5 -0
  55. package/dist/node_modules/.pnpm/@a2a-js_sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/chunk-3QDLXHKS.js.map +1 -0
  56. package/dist/node_modules/.pnpm/@a2a-js_sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/chunk-SJNAG4AL.cjs +100 -0
  57. package/dist/node_modules/.pnpm/@a2a-js_sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/chunk-SJNAG4AL.cjs.map +1 -0
  58. package/dist/node_modules/.pnpm/@a2a-js_sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/chunk-SJNAG4AL.js +90 -0
  59. package/dist/node_modules/.pnpm/@a2a-js_sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/chunk-SJNAG4AL.js.map +1 -0
  60. package/dist/node_modules/.pnpm/@a2a-js_sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/client/index.cjs +975 -0
  61. package/dist/node_modules/.pnpm/@a2a-js_sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/client/index.cjs.map +1 -0
  62. package/dist/node_modules/.pnpm/@a2a-js_sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/client/index.js +958 -0
  63. package/dist/node_modules/.pnpm/@a2a-js_sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/client/index.js.map +1 -0
  64. package/dist/node_modules/.pnpm/@assistant-ui_react@0.11.37_patch_hash_wncib234fzw2z5h67nrdhchb2a_@types_react-dom@17.0.2_@ty_c64hu5rigivj2gtpzfqjqatr5y/node_modules/@assistant-ui/react/dist/primitives/messagePart/useMessagePartText.cjs.map +1 -1
  65. package/dist/node_modules/.pnpm/@assistant-ui_react@0.11.37_patch_hash_wncib234fzw2z5h67nrdhchb2a_@types_react-dom@17.0.2_@ty_c64hu5rigivj2gtpzfqjqatr5y/node_modules/@assistant-ui/react/dist/primitives/messagePart/useMessagePartText.js.map +1 -1
  66. package/dist/node_modules/.pnpm/@cloudfun_web-sdk@3.1.7_@volcengine_console-web-sdk@6.2.0/node_modules/@cloudfun/web-sdk/lib/util.cjs +1 -1
  67. package/dist/node_modules/.pnpm/@cloudfun_web-sdk@3.1.7_@volcengine_console-web-sdk@6.2.0/node_modules/@cloudfun/web-sdk/lib/util.js +1 -1
  68. package/dist/node_modules/.pnpm/@radix-ui_react-slot@1.2.4_@types_react@17.0.2_react@17.0.2/node_modules/@radix-ui/react-slot/dist/index.cjs +0 -12
  69. package/dist/node_modules/.pnpm/@radix-ui_react-slot@1.2.4_@types_react@17.0.2_react@17.0.2/node_modules/@radix-ui/react-slot/dist/index.cjs.map +1 -1
  70. package/dist/node_modules/.pnpm/@radix-ui_react-slot@1.2.4_@types_react@17.0.2_react@17.0.2/node_modules/@radix-ui/react-slot/dist/index.js +2 -12
  71. package/dist/node_modules/.pnpm/@radix-ui_react-slot@1.2.4_@types_react@17.0.2_react@17.0.2/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -1
  72. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/index.cjs +1 -1
  73. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/index.js +1 -1
  74. package/dist/node_modules/clsx/dist/clsx.cjs +9 -0
  75. package/dist/node_modules/clsx/dist/clsx.cjs.map +1 -0
  76. package/dist/node_modules/clsx/dist/clsx.js +4 -0
  77. package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
  78. package/dist/node_modules/dayjs/dayjs.min.cjs +14 -0
  79. package/dist/node_modules/dayjs/dayjs.min.cjs.map +1 -0
  80. package/dist/node_modules/dayjs/dayjs.min.js +12 -0
  81. package/dist/node_modules/dayjs/dayjs.min.js.map +1 -0
  82. package/dist/packages/chatui/node_modules/@cloudfun/top-proxy-sdk/lib/client.cjs +1 -1
  83. package/dist/packages/chatui/node_modules/@cloudfun/top-proxy-sdk/lib/client.cjs.map +1 -1
  84. package/dist/packages/chatui/node_modules/@cloudfun/top-proxy-sdk/lib/client.js +1 -1
  85. package/dist/packages/chatui/node_modules/@cloudfun/top-proxy-sdk/lib/client.js.map +1 -1
  86. package/dist/packages/core/dist/index.cjs +163 -19
  87. package/dist/packages/core/dist/index.cjs.map +1 -1
  88. package/dist/packages/core/dist/index.js +162 -19
  89. package/dist/packages/core/dist/index.js.map +1 -1
  90. package/dist/plugins/adkPlugin.d.ts.map +1 -1
  91. package/package.json +1 -1
@@ -2,7 +2,7 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
- var dayjs_min = require('../node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/dayjs.min.cjs');
5
+ var dayjs = require('dayjs');
6
6
  var utils = require('../lib/utils.cjs');
7
7
  var ThreadOptionsMenu = require('./ThreadOptionsMenu.cjs');
8
8
  var ChatkitContext = require('../contexts/ChatkitContext.cjs');
@@ -25,9 +25,9 @@ const ThreadList = () => {
25
25
  const groupOrder = [];
26
26
  sortedThreads.forEach(thread => {
27
27
  const timestamp = thread.updatedAt || thread.createdAt || 0;
28
- const threadDate = dayjs_min.unix(timestamp);
29
- const today = dayjs_min().startOf('day');
30
- const yesterday = dayjs_min().subtract(1, 'day').startOf('day');
28
+ const threadDate = dayjs.unix(timestamp);
29
+ const today = dayjs().startOf('day');
30
+ const yesterday = dayjs().subtract(1, 'day').startOf('day');
31
31
  let groupTitle;
32
32
  if (threadDate.isSame(today, 'day')) {
33
33
  groupTitle = '今天';
@@ -69,8 +69,8 @@ const ThreadList = () => {
69
69
  const formatTime = (timestamp) => {
70
70
  if (!timestamp)
71
71
  return '';
72
- const date = dayjs_min.unix(timestamp);
73
- const now = dayjs_min();
72
+ const date = dayjs.unix(timestamp);
73
+ const now = dayjs();
74
74
  if (date.isSame(now, 'day')) {
75
75
  return date.format('HH:mm');
76
76
  }
@@ -89,7 +89,7 @@ const ThreadList = () => {
89
89
  ref?.setCurrentThread(threadId);
90
90
  // 这里可以添加线程切换的逻辑
91
91
  };
92
- return (jsxRuntime.jsx("div", { className: "bg-[#F6F8FA]", children: jsxRuntime.jsxs("div", { className: "flex flex-col h-full w-[200px]", children: [jsxRuntime.jsx("div", { className: "flex items-center justify-between py-[12px] px-[15px]", children: jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: jsxRuntime.jsx("h2", { className: "text-[16px] font-semibold", children: "Session" }) }) }), jsxRuntime.jsx("div", { className: "flex-1 overflow-y-auto scrollbar-thin", children: threadGroups.map(group => (jsxRuntime.jsxs("div", { className: "mb-3", children: [jsxRuntime.jsx("div", { className: "pl-[16px] h-[24px] text-[#808388] leading-[22px] mb-[4px]", children: group.title }), group.threads.map(thread => (jsxRuntime.jsx("div", { onClick: () => handleThreadClick(thread.id), className: utils.cn('flex items-center justify-between p-3 cursor-pointer transition-colors m-[4px]', currentThread?.id === thread.id
92
+ return (jsxRuntime.jsx("div", { className: "bg-[#F6F8FA]", children: jsxRuntime.jsxs("div", { className: "flex flex-col h-full w-[200px]", children: [jsxRuntime.jsx("div", { className: "flex items-center justify-between py-[12px] px-[15px]", children: jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: jsxRuntime.jsx("h2", { className: "text-[16px] font-semibold", children: "Sessions" }) }) }), jsxRuntime.jsx("div", { className: "flex-1 overflow-y-auto scrollbar-thin", children: threadGroups.map(group => (jsxRuntime.jsxs("div", { className: "mb-3", children: [jsxRuntime.jsx("div", { className: "pl-[16px] h-[24px] text-[#808388] leading-[22px] mb-[4px]", children: group.title }), group.threads.map(thread => (jsxRuntime.jsx("div", { onClick: () => handleThreadClick(thread.id), className: utils.cn('flex items-center justify-between p-3 cursor-pointer transition-colors m-[4px]', currentThread?.id === thread.id
93
93
  ? 'rounded-[10px] border bg-[#EBF1FF] border-[#1664FF1A]'
94
94
  : 'hover:bg-gray-50 border border-transparent'), children: jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntime.jsxs("div", { className: "flex justify-between items-center mb-1", children: [jsxRuntime.jsx("h3", { className: utils.cn('font-medium truncate leading-[22px]', currentThread?.id === thread.id
95
95
  ? 'text-[#1664FF]'
@@ -1 +1 @@
1
- {"version":3,"file":"thread-list.cjs","sources":["../../src/components/thread-list.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport dayjs from 'dayjs';\nimport { MoreHorizontal } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport ThreadOptionsMenu from './ThreadOptionsMenu';\nimport { useChatkitRef } from '@/contexts/ChatkitContext';\nimport useThread from '@/hooks/useThread';\nimport { Thread } from '@chat-lab/core';\n\n// 定义线程组类型\ninterface ThreadGroup {\n id: string;\n title: string;\n threads: Thread[];\n}\n\nconst ThreadList = () => {\n // 状态管理\n const ref = useChatkitRef();\n const { currentThread, threadList } = useThread();\n\n const threadGroups: ThreadGroup[] = useMemo(() => {\n if (!threadList || threadList.length === 0) {\n return [];\n }\n\n const sortedThreads = [...(threadList as Thread[])].sort((a, b) => {\n const timeA = a.updatedAt || a.createdAt || 0;\n const timeB = b.updatedAt || b.createdAt || 0;\n return timeB - timeA;\n });\n\n const groups: { [key: string]: Thread[] } = {};\n const groupOrder: string[] = [];\n\n sortedThreads.forEach(thread => {\n const timestamp = thread.updatedAt || thread.createdAt || 0;\n const threadDate = dayjs.unix(timestamp);\n const today = dayjs().startOf('day');\n const yesterday = dayjs().subtract(1, 'day').startOf('day');\n\n let groupTitle: string;\n\n if (threadDate.isSame(today, 'day')) {\n groupTitle = '今天';\n } else if (threadDate.isSame(yesterday, 'day')) {\n groupTitle = '昨天';\n } else if (threadDate.isAfter(today.subtract(7, 'day'))) {\n groupTitle = '最近7天';\n } else {\n groupTitle = threadDate.format('YYYY年MM月');\n }\n\n if (!groups[groupTitle]) {\n groups[groupTitle] = [];\n groupOrder.push(groupTitle);\n }\n groups[groupTitle].push(thread);\n });\n\n // 确保分组顺序\n const groupTitleOrder = ['今天', '昨天', '最近7天'];\n const sortedGroupOrder = groupOrder.sort((a, b) => {\n const indexA = groupTitleOrder.indexOf(a);\n const indexB = groupTitleOrder.indexOf(b);\n if (indexA !== -1 && indexB !== -1) return indexA - indexB;\n if (indexA !== -1) return -1;\n if (indexB !== -1) return 1;\n return b.localeCompare(a);\n });\n\n return sortedGroupOrder.map(groupTitle => ({\n id: groupTitle,\n title: groupTitle,\n threads: groups[groupTitle],\n }));\n }, [threadList]);\n\n const formatTime = (timestamp?: number) => {\n if (!timestamp) return '';\n\n const date = dayjs.unix(timestamp);\n const now = dayjs();\n\n if (date.isSame(now, 'day')) {\n return date.format('HH:mm');\n } else if (date.isSame(now.subtract(1, 'day'), 'day')) {\n return `昨天`;\n } else if (date.isSame(now, 'year')) {\n return date.format('MM-DD');\n } else {\n return date.format('YYYY-MM-DD');\n }\n };\n\n // 处理线程点击\n const handleThreadClick = (threadId: string) => {\n ref?.setCurrentThread(threadId);\n // 这里可以添加线程切换的逻辑\n };\n\n // 处理新建线程\n const handleNewThread = () => {\n // 这里可以添加新建线程的逻辑\n ref?.addThread({\n id: `thread-${Date.now()}`,\n name: '新对话',\n sending: false,\n metadata: {},\n messages: [],\n createdAt: dayjs().unix(),\n });\n };\n\n return (\n <div className=\"bg-[#F6F8FA]\">\n <div className=\"flex flex-col h-full w-[200px]\">\n {/* 头部 */}\n <div className=\"flex items-center justify-between py-[12px] px-[15px]\">\n <div className=\"flex items-center gap-2\">\n <h2 className=\"text-[16px] font-semibold\">Session</h2>\n </div>\n </div>\n\n {/* 线程列表 */}\n <div className=\"flex-1 overflow-y-auto scrollbar-thin\">\n {threadGroups.map(group => (\n <div key={group.id} className=\"mb-3\">\n <div className=\"pl-[16px] h-[24px] text-[#808388] leading-[22px] mb-[4px]\">\n {group.title}\n </div>\n {group.threads.map(thread => (\n <div\n key={thread.id}\n onClick={() => handleThreadClick(thread.id)}\n className={cn(\n 'flex items-center justify-between p-3 cursor-pointer transition-colors m-[4px]',\n currentThread?.id === thread.id\n ? 'rounded-[10px] border bg-[#EBF1FF] border-[#1664FF1A]'\n : 'hover:bg-gray-50 border border-transparent',\n )}\n >\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex justify-between items-center mb-1\">\n <h3\n className={cn(\n 'font-medium truncate leading-[22px]',\n currentThread?.id === thread.id\n ? 'text-[#1664FF]'\n : 'text-gray-900',\n )}\n >\n {thread.name || '新对话'}\n </h3>\n <ThreadOptionsMenu\n className=\"flex-shrink-0\"\n threadId={thread.id}\n />\n </div>\n <p className=\"text-xs text-[#808388]\">\n {formatTime(thread.updatedAt || thread.createdAt)}\n </p>\n </div>\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n};\n\nexport default ThreadList;\n"],"names":["useChatkitRef","useMemo","dayjs","_jsx","_jsxs","cn"],"mappings":"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"}
1
+ {"version":3,"file":"thread-list.cjs","sources":["../../src/components/thread-list.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport dayjs from 'dayjs';\nimport { MoreHorizontal } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport ThreadOptionsMenu from './ThreadOptionsMenu';\nimport { useChatkitRef } from '@/contexts/ChatkitContext';\nimport useThread from '@/hooks/useThread';\nimport { Thread } from '@chat-lab/core';\n\n// 定义线程组类型\ninterface ThreadGroup {\n id: string;\n title: string;\n threads: Thread[];\n}\n\nconst ThreadList = () => {\n // 状态管理\n const ref = useChatkitRef();\n const { currentThread, threadList } = useThread();\n\n const threadGroups: ThreadGroup[] = useMemo(() => {\n if (!threadList || threadList.length === 0) {\n return [];\n }\n\n const sortedThreads = [...(threadList as Thread[])].sort((a, b) => {\n const timeA = a.updatedAt || a.createdAt || 0;\n const timeB = b.updatedAt || b.createdAt || 0;\n return timeB - timeA;\n });\n\n const groups: { [key: string]: Thread[] } = {};\n const groupOrder: string[] = [];\n\n sortedThreads.forEach(thread => {\n const timestamp = thread.updatedAt || thread.createdAt || 0;\n const threadDate = dayjs.unix(timestamp);\n const today = dayjs().startOf('day');\n const yesterday = dayjs().subtract(1, 'day').startOf('day');\n\n let groupTitle: string;\n\n if (threadDate.isSame(today, 'day')) {\n groupTitle = '今天';\n } else if (threadDate.isSame(yesterday, 'day')) {\n groupTitle = '昨天';\n } else if (threadDate.isAfter(today.subtract(7, 'day'))) {\n groupTitle = '最近7天';\n } else {\n groupTitle = threadDate.format('YYYY年MM月');\n }\n\n if (!groups[groupTitle]) {\n groups[groupTitle] = [];\n groupOrder.push(groupTitle);\n }\n groups[groupTitle].push(thread);\n });\n\n // 确保分组顺序\n const groupTitleOrder = ['今天', '昨天', '最近7天'];\n const sortedGroupOrder = groupOrder.sort((a, b) => {\n const indexA = groupTitleOrder.indexOf(a);\n const indexB = groupTitleOrder.indexOf(b);\n if (indexA !== -1 && indexB !== -1) return indexA - indexB;\n if (indexA !== -1) return -1;\n if (indexB !== -1) return 1;\n return b.localeCompare(a);\n });\n\n return sortedGroupOrder.map(groupTitle => ({\n id: groupTitle,\n title: groupTitle,\n threads: groups[groupTitle],\n }));\n }, [threadList]);\n\n const formatTime = (timestamp?: number) => {\n if (!timestamp) return '';\n\n const date = dayjs.unix(timestamp);\n const now = dayjs();\n\n if (date.isSame(now, 'day')) {\n return date.format('HH:mm');\n } else if (date.isSame(now.subtract(1, 'day'), 'day')) {\n return `昨天`;\n } else if (date.isSame(now, 'year')) {\n return date.format('MM-DD');\n } else {\n return date.format('YYYY-MM-DD');\n }\n };\n\n // 处理线程点击\n const handleThreadClick = (threadId: string) => {\n ref?.setCurrentThread(threadId);\n // 这里可以添加线程切换的逻辑\n };\n\n // 处理新建线程\n const handleNewThread = () => {\n // 这里可以添加新建线程的逻辑\n ref?.addThread({\n id: `thread-${Date.now()}`,\n name: '新对话',\n sending: false,\n metadata: {},\n messages: [],\n createdAt: dayjs().unix(),\n });\n };\n\n return (\n <div className=\"bg-[#F6F8FA]\">\n <div className=\"flex flex-col h-full w-[200px]\">\n {/* 头部 */}\n <div className=\"flex items-center justify-between py-[12px] px-[15px]\">\n <div className=\"flex items-center gap-2\">\n <h2 className=\"text-[16px] font-semibold\">Sessions</h2>\n </div>\n </div>\n\n {/* 线程列表 */}\n <div className=\"flex-1 overflow-y-auto scrollbar-thin\">\n {threadGroups.map(group => (\n <div key={group.id} className=\"mb-3\">\n <div className=\"pl-[16px] h-[24px] text-[#808388] leading-[22px] mb-[4px]\">\n {group.title}\n </div>\n {group.threads.map(thread => (\n <div\n key={thread.id}\n onClick={() => handleThreadClick(thread.id)}\n className={cn(\n 'flex items-center justify-between p-3 cursor-pointer transition-colors m-[4px]',\n currentThread?.id === thread.id\n ? 'rounded-[10px] border bg-[#EBF1FF] border-[#1664FF1A]'\n : 'hover:bg-gray-50 border border-transparent',\n )}\n >\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex justify-between items-center mb-1\">\n <h3\n className={cn(\n 'font-medium truncate leading-[22px]',\n currentThread?.id === thread.id\n ? 'text-[#1664FF]'\n : 'text-gray-900',\n )}\n >\n {thread.name || '新对话'}\n </h3>\n <ThreadOptionsMenu\n className=\"flex-shrink-0\"\n threadId={thread.id}\n />\n </div>\n <p className=\"text-xs text-[#808388]\">\n {formatTime(thread.updatedAt || thread.createdAt)}\n </p>\n </div>\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n};\n\nexport default ThreadList;\n"],"names":["useChatkitRef","useMemo","_jsx","_jsxs","cn"],"mappings":";;;;;;;;;;AAgBM,MAAA,UAAU,GAAG,MAAK;;AAEtB,IAAA,MAAM,GAAG,GAAGA,4BAAa,EAAE,CAAC;IAC5B,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAC;AAElD,IAAA,MAAM,YAAY,GAAkBC,aAAO,CAAC,MAAK;QAC/C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1C,YAAA,OAAO,EAAE,CAAC;SACX;AAED,QAAA,MAAM,aAAa,GAAG,CAAC,GAAI,UAAuB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAChE,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;YAC9C,OAAO,KAAK,GAAG,KAAK,CAAC;AACvB,SAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAgC,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAa,EAAE,CAAC;AAEhC,QAAA,aAAa,CAAC,OAAO,CAAC,MAAM,IAAG;YAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACrC,YAAA,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAE5D,YAAA,IAAI,UAAkB,CAAC;YAEvB,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;gBACnC,UAAU,GAAG,IAAI,CAAC;aACnB;iBAAM,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;gBAC9C,UAAU,GAAG,IAAI,CAAC;aACnB;AAAM,iBAAA,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;gBACvD,UAAU,GAAG,MAAM,CAAC;aACrB;iBAAM;AACL,gBAAA,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;aAC5C;AAED,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;AACvB,gBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;AACxB,gBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAC7B;YACD,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClC,SAAC,CAAC,CAAC;;QAGH,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAChD,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC;gBAAE,OAAO,MAAM,GAAG,MAAM,CAAC;YAC3D,IAAI,MAAM,KAAK,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC;YAC7B,IAAI,MAAM,KAAK,CAAC,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC;AAC5B,YAAA,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC5B,SAAC,CAAC,CAAC;QAEH,OAAO,gBAAgB,CAAC,GAAG,CAAC,UAAU,KAAK;AACzC,YAAA,EAAE,EAAE,UAAU;AACd,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC;AAC5B,SAAA,CAAC,CAAC,CAAC;AACN,KAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AAEjB,IAAA,MAAM,UAAU,GAAG,CAAC,SAAkB,KAAI;AACxC,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,EAAE,CAAC;QAE1B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnC,QAAA,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SAC7B;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE;AACrD,YAAA,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE;AACnC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SAC7B;aAAM;AACL,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SAClC;AACH,KAAC,CAAC;;AAGF,IAAA,MAAM,iBAAiB,GAAG,CAAC,QAAgB,KAAI;AAC7C,QAAA,GAAG,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;;AAElC,KAAC,CAAC;IAeF,QACEC,wBAAK,SAAS,EAAC,cAAc,EAC3B,QAAA,EAAAC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gCAAgC,aAE7CD,cAAK,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,uDAAuD,EAAA,QAAA,EACpEA,wBAAK,SAAS,EAAC,yBAAyB,EACtC,QAAA,EAAAA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,2BAA2B,yBAAc,EACnD,CAAA,EAAA,CACF,EAGNA,cAAK,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACnD,YAAY,CAAC,GAAG,CAAC,KAAK,KACrBC,eAAoB,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,MAAM,aAClCD,cAAK,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,2DAA2D,EAAA,QAAA,EACvE,KAAK,CAAC,KAAK,GACR,EACL,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,KACvBA,cAEE,CAAA,KAAA,EAAA,EAAA,OAAO,EAAE,MAAM,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,EAC3C,SAAS,EAAEE,QAAE,CACX,gFAAgF,EAChF,aAAa,EAAE,EAAE,KAAK,MAAM,CAAC,EAAE;AAC7B,sCAAE,uDAAuD;sCACvD,4CAA4C,CACjD,EAED,QAAA,EAAAD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAAA,CAC7BA,eAAK,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,wCAAwC,EACrD,QAAA,EAAA,CAAAD,cAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAEE,QAAE,CACX,qCAAqC,EACrC,aAAa,EAAE,EAAE,KAAK,MAAM,CAAC,EAAE;AAC7B,0DAAE,gBAAgB;AAClB,0DAAE,eAAe,CACpB,EAAA,QAAA,EAEA,MAAM,CAAC,IAAI,IAAI,KAAK,EAAA,CAClB,EACLF,cAAA,CAAC,iBAAiB,EAAA,EAChB,SAAS,EAAC,eAAe,EACzB,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAA,CACnB,CACE,EAAA,CAAA,EACNA,cAAG,CAAA,GAAA,EAAA,EAAA,SAAS,EAAC,wBAAwB,EAClC,QAAA,EAAA,UAAU,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,EAAA,CAC/C,CACA,EAAA,CAAA,EAAA,EA7BD,MAAM,CAAC,EAAE,CA8BV,CACP,CAAC,CArCM,EAAA,EAAA,KAAK,CAAC,EAAE,CAsCZ,CACP,CAAC,EAAA,CACE,CACF,EAAA,CAAA,EAAA,CACF,EACN;AACJ;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { useMemo } from 'react';
3
- import dayjs from '../node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/dayjs.min.js';
3
+ import dayjs from 'dayjs';
4
4
  import { cn } from '../lib/utils.js';
5
5
  import ThreadOptionsMenu from './ThreadOptionsMenu.js';
6
6
  import { useChatkitRef } from '../contexts/ChatkitContext.js';
@@ -87,7 +87,7 @@ const ThreadList = () => {
87
87
  ref?.setCurrentThread(threadId);
88
88
  // 这里可以添加线程切换的逻辑
89
89
  };
90
- return (jsx("div", { className: "bg-[#F6F8FA]", children: jsxs("div", { className: "flex flex-col h-full w-[200px]", children: [jsx("div", { className: "flex items-center justify-between py-[12px] px-[15px]", children: jsx("div", { className: "flex items-center gap-2", children: jsx("h2", { className: "text-[16px] font-semibold", children: "Session" }) }) }), jsx("div", { className: "flex-1 overflow-y-auto scrollbar-thin", children: threadGroups.map(group => (jsxs("div", { className: "mb-3", children: [jsx("div", { className: "pl-[16px] h-[24px] text-[#808388] leading-[22px] mb-[4px]", children: group.title }), group.threads.map(thread => (jsx("div", { onClick: () => handleThreadClick(thread.id), className: cn('flex items-center justify-between p-3 cursor-pointer transition-colors m-[4px]', currentThread?.id === thread.id
90
+ return (jsx("div", { className: "bg-[#F6F8FA]", children: jsxs("div", { className: "flex flex-col h-full w-[200px]", children: [jsx("div", { className: "flex items-center justify-between py-[12px] px-[15px]", children: jsx("div", { className: "flex items-center gap-2", children: jsx("h2", { className: "text-[16px] font-semibold", children: "Sessions" }) }) }), jsx("div", { className: "flex-1 overflow-y-auto scrollbar-thin", children: threadGroups.map(group => (jsxs("div", { className: "mb-3", children: [jsx("div", { className: "pl-[16px] h-[24px] text-[#808388] leading-[22px] mb-[4px]", children: group.title }), group.threads.map(thread => (jsx("div", { onClick: () => handleThreadClick(thread.id), className: cn('flex items-center justify-between p-3 cursor-pointer transition-colors m-[4px]', currentThread?.id === thread.id
91
91
  ? 'rounded-[10px] border bg-[#EBF1FF] border-[#1664FF1A]'
92
92
  : 'hover:bg-gray-50 border border-transparent'), children: jsxs("div", { className: "flex-1 min-w-0", children: [jsxs("div", { className: "flex justify-between items-center mb-1", children: [jsx("h3", { className: cn('font-medium truncate leading-[22px]', currentThread?.id === thread.id
93
93
  ? 'text-[#1664FF]'
@@ -1 +1 @@
1
- {"version":3,"file":"thread-list.js","sources":["../../src/components/thread-list.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport dayjs from 'dayjs';\nimport { MoreHorizontal } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport ThreadOptionsMenu from './ThreadOptionsMenu';\nimport { useChatkitRef } from '@/contexts/ChatkitContext';\nimport useThread from '@/hooks/useThread';\nimport { Thread } from '@chat-lab/core';\n\n// 定义线程组类型\ninterface ThreadGroup {\n id: string;\n title: string;\n threads: Thread[];\n}\n\nconst ThreadList = () => {\n // 状态管理\n const ref = useChatkitRef();\n const { currentThread, threadList } = useThread();\n\n const threadGroups: ThreadGroup[] = useMemo(() => {\n if (!threadList || threadList.length === 0) {\n return [];\n }\n\n const sortedThreads = [...(threadList as Thread[])].sort((a, b) => {\n const timeA = a.updatedAt || a.createdAt || 0;\n const timeB = b.updatedAt || b.createdAt || 0;\n return timeB - timeA;\n });\n\n const groups: { [key: string]: Thread[] } = {};\n const groupOrder: string[] = [];\n\n sortedThreads.forEach(thread => {\n const timestamp = thread.updatedAt || thread.createdAt || 0;\n const threadDate = dayjs.unix(timestamp);\n const today = dayjs().startOf('day');\n const yesterday = dayjs().subtract(1, 'day').startOf('day');\n\n let groupTitle: string;\n\n if (threadDate.isSame(today, 'day')) {\n groupTitle = '今天';\n } else if (threadDate.isSame(yesterday, 'day')) {\n groupTitle = '昨天';\n } else if (threadDate.isAfter(today.subtract(7, 'day'))) {\n groupTitle = '最近7天';\n } else {\n groupTitle = threadDate.format('YYYY年MM月');\n }\n\n if (!groups[groupTitle]) {\n groups[groupTitle] = [];\n groupOrder.push(groupTitle);\n }\n groups[groupTitle].push(thread);\n });\n\n // 确保分组顺序\n const groupTitleOrder = ['今天', '昨天', '最近7天'];\n const sortedGroupOrder = groupOrder.sort((a, b) => {\n const indexA = groupTitleOrder.indexOf(a);\n const indexB = groupTitleOrder.indexOf(b);\n if (indexA !== -1 && indexB !== -1) return indexA - indexB;\n if (indexA !== -1) return -1;\n if (indexB !== -1) return 1;\n return b.localeCompare(a);\n });\n\n return sortedGroupOrder.map(groupTitle => ({\n id: groupTitle,\n title: groupTitle,\n threads: groups[groupTitle],\n }));\n }, [threadList]);\n\n const formatTime = (timestamp?: number) => {\n if (!timestamp) return '';\n\n const date = dayjs.unix(timestamp);\n const now = dayjs();\n\n if (date.isSame(now, 'day')) {\n return date.format('HH:mm');\n } else if (date.isSame(now.subtract(1, 'day'), 'day')) {\n return `昨天`;\n } else if (date.isSame(now, 'year')) {\n return date.format('MM-DD');\n } else {\n return date.format('YYYY-MM-DD');\n }\n };\n\n // 处理线程点击\n const handleThreadClick = (threadId: string) => {\n ref?.setCurrentThread(threadId);\n // 这里可以添加线程切换的逻辑\n };\n\n // 处理新建线程\n const handleNewThread = () => {\n // 这里可以添加新建线程的逻辑\n ref?.addThread({\n id: `thread-${Date.now()}`,\n name: '新对话',\n sending: false,\n metadata: {},\n messages: [],\n createdAt: dayjs().unix(),\n });\n };\n\n return (\n <div className=\"bg-[#F6F8FA]\">\n <div className=\"flex flex-col h-full w-[200px]\">\n {/* 头部 */}\n <div className=\"flex items-center justify-between py-[12px] px-[15px]\">\n <div className=\"flex items-center gap-2\">\n <h2 className=\"text-[16px] font-semibold\">Session</h2>\n </div>\n </div>\n\n {/* 线程列表 */}\n <div className=\"flex-1 overflow-y-auto scrollbar-thin\">\n {threadGroups.map(group => (\n <div key={group.id} className=\"mb-3\">\n <div className=\"pl-[16px] h-[24px] text-[#808388] leading-[22px] mb-[4px]\">\n {group.title}\n </div>\n {group.threads.map(thread => (\n <div\n key={thread.id}\n onClick={() => handleThreadClick(thread.id)}\n className={cn(\n 'flex items-center justify-between p-3 cursor-pointer transition-colors m-[4px]',\n currentThread?.id === thread.id\n ? 'rounded-[10px] border bg-[#EBF1FF] border-[#1664FF1A]'\n : 'hover:bg-gray-50 border border-transparent',\n )}\n >\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex justify-between items-center mb-1\">\n <h3\n className={cn(\n 'font-medium truncate leading-[22px]',\n currentThread?.id === thread.id\n ? 'text-[#1664FF]'\n : 'text-gray-900',\n )}\n >\n {thread.name || '新对话'}\n </h3>\n <ThreadOptionsMenu\n className=\"flex-shrink-0\"\n threadId={thread.id}\n />\n </div>\n <p className=\"text-xs text-[#808388]\">\n {formatTime(thread.updatedAt || thread.createdAt)}\n </p>\n </div>\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n};\n\nexport default ThreadList;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"thread-list.js","sources":["../../src/components/thread-list.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\nimport dayjs from 'dayjs';\nimport { MoreHorizontal } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport ThreadOptionsMenu from './ThreadOptionsMenu';\nimport { useChatkitRef } from '@/contexts/ChatkitContext';\nimport useThread from '@/hooks/useThread';\nimport { Thread } from '@chat-lab/core';\n\n// 定义线程组类型\ninterface ThreadGroup {\n id: string;\n title: string;\n threads: Thread[];\n}\n\nconst ThreadList = () => {\n // 状态管理\n const ref = useChatkitRef();\n const { currentThread, threadList } = useThread();\n\n const threadGroups: ThreadGroup[] = useMemo(() => {\n if (!threadList || threadList.length === 0) {\n return [];\n }\n\n const sortedThreads = [...(threadList as Thread[])].sort((a, b) => {\n const timeA = a.updatedAt || a.createdAt || 0;\n const timeB = b.updatedAt || b.createdAt || 0;\n return timeB - timeA;\n });\n\n const groups: { [key: string]: Thread[] } = {};\n const groupOrder: string[] = [];\n\n sortedThreads.forEach(thread => {\n const timestamp = thread.updatedAt || thread.createdAt || 0;\n const threadDate = dayjs.unix(timestamp);\n const today = dayjs().startOf('day');\n const yesterday = dayjs().subtract(1, 'day').startOf('day');\n\n let groupTitle: string;\n\n if (threadDate.isSame(today, 'day')) {\n groupTitle = '今天';\n } else if (threadDate.isSame(yesterday, 'day')) {\n groupTitle = '昨天';\n } else if (threadDate.isAfter(today.subtract(7, 'day'))) {\n groupTitle = '最近7天';\n } else {\n groupTitle = threadDate.format('YYYY年MM月');\n }\n\n if (!groups[groupTitle]) {\n groups[groupTitle] = [];\n groupOrder.push(groupTitle);\n }\n groups[groupTitle].push(thread);\n });\n\n // 确保分组顺序\n const groupTitleOrder = ['今天', '昨天', '最近7天'];\n const sortedGroupOrder = groupOrder.sort((a, b) => {\n const indexA = groupTitleOrder.indexOf(a);\n const indexB = groupTitleOrder.indexOf(b);\n if (indexA !== -1 && indexB !== -1) return indexA - indexB;\n if (indexA !== -1) return -1;\n if (indexB !== -1) return 1;\n return b.localeCompare(a);\n });\n\n return sortedGroupOrder.map(groupTitle => ({\n id: groupTitle,\n title: groupTitle,\n threads: groups[groupTitle],\n }));\n }, [threadList]);\n\n const formatTime = (timestamp?: number) => {\n if (!timestamp) return '';\n\n const date = dayjs.unix(timestamp);\n const now = dayjs();\n\n if (date.isSame(now, 'day')) {\n return date.format('HH:mm');\n } else if (date.isSame(now.subtract(1, 'day'), 'day')) {\n return `昨天`;\n } else if (date.isSame(now, 'year')) {\n return date.format('MM-DD');\n } else {\n return date.format('YYYY-MM-DD');\n }\n };\n\n // 处理线程点击\n const handleThreadClick = (threadId: string) => {\n ref?.setCurrentThread(threadId);\n // 这里可以添加线程切换的逻辑\n };\n\n // 处理新建线程\n const handleNewThread = () => {\n // 这里可以添加新建线程的逻辑\n ref?.addThread({\n id: `thread-${Date.now()}`,\n name: '新对话',\n sending: false,\n metadata: {},\n messages: [],\n createdAt: dayjs().unix(),\n });\n };\n\n return (\n <div className=\"bg-[#F6F8FA]\">\n <div className=\"flex flex-col h-full w-[200px]\">\n {/* 头部 */}\n <div className=\"flex items-center justify-between py-[12px] px-[15px]\">\n <div className=\"flex items-center gap-2\">\n <h2 className=\"text-[16px] font-semibold\">Sessions</h2>\n </div>\n </div>\n\n {/* 线程列表 */}\n <div className=\"flex-1 overflow-y-auto scrollbar-thin\">\n {threadGroups.map(group => (\n <div key={group.id} className=\"mb-3\">\n <div className=\"pl-[16px] h-[24px] text-[#808388] leading-[22px] mb-[4px]\">\n {group.title}\n </div>\n {group.threads.map(thread => (\n <div\n key={thread.id}\n onClick={() => handleThreadClick(thread.id)}\n className={cn(\n 'flex items-center justify-between p-3 cursor-pointer transition-colors m-[4px]',\n currentThread?.id === thread.id\n ? 'rounded-[10px] border bg-[#EBF1FF] border-[#1664FF1A]'\n : 'hover:bg-gray-50 border border-transparent',\n )}\n >\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex justify-between items-center mb-1\">\n <h3\n className={cn(\n 'font-medium truncate leading-[22px]',\n currentThread?.id === thread.id\n ? 'text-[#1664FF]'\n : 'text-gray-900',\n )}\n >\n {thread.name || '新对话'}\n </h3>\n <ThreadOptionsMenu\n className=\"flex-shrink-0\"\n threadId={thread.id}\n />\n </div>\n <p className=\"text-xs text-[#808388]\">\n {formatTime(thread.updatedAt || thread.createdAt)}\n </p>\n </div>\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n};\n\nexport default ThreadList;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
- var index$1 = require('../../node_modules/.pnpm/@radix-ui_react-slot@1.2.4_@types_react@17.0.2_react@17.0.2/node_modules/@radix-ui/react-slot/dist/index.cjs');
4
+ var reactSlot = require('@radix-ui/react-slot');
5
5
  var index = require('../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.cjs');
6
6
  var utils = require('../../lib/utils.cjs');
7
7
 
@@ -30,7 +30,7 @@ const buttonVariants = index.cva("inline-flex items-center justify-center gap-2
30
30
  },
31
31
  });
32
32
  function Button({ className, variant, size, asChild = false, ...props }) {
33
- const Comp = asChild ? index$1.Root : "button";
33
+ const Comp = asChild ? reactSlot.Slot : "button";
34
34
  return (jsxRuntime.jsx(Comp, { "data-slot": "button", className: utils.cn(buttonVariants({ variant, size, className })), ...props }));
35
35
  }
36
36
 
@@ -1 +1 @@
1
- {"version":3,"file":"button.cjs","sources":["../../../src/components/ui/button.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\" as React.ElementType\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n"],"names":["cva","Slot","_jsx","cn"],"mappings":";;;;;;;AAMA,MAAM,cAAc,GAAGA,SAAG,CACxB,uZAAuZ,EACvZ;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EAAE,wDAAwD;AACjE,YAAA,WAAW,EACT,qFAAqF;AACvF,YAAA,OAAO,EACL,6EAA6E;AAC/E,YAAA,SAAS,EACP,8DAA8D;AAChE,YAAA,KAAK,EACH,8CAA8C;AAChD,YAAA,IAAI,EAAE,iDAAiD;AACxD,SAAA;AACD,QAAA,IAAI,EAAE;AACJ,YAAA,OAAO,EAAE,+BAA+B;AACxC,YAAA,EAAE,EAAE,+CAA+C;AACnD,YAAA,EAAE,EAAE,sCAAsC;AAC1C,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,SAAS,EAAE,SAAS;AACrB,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,SAAS;AAChB,KAAA;AACF,CAAA,EACF;AAED,SAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAO,GAAG,KAAK,EACf,GAAG,KAAK,EAIP,EAAA;IACD,MAAM,IAAI,GAAG,OAAO,GAAGC,YAAI,GAAG,QAA6B,CAAA;IAE3D,QACEC,cAAC,CAAA,IAAI,EACO,EAAA,WAAA,EAAA,QAAQ,EAClB,SAAS,EAAEC,QAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,EACvD,GAAA,KAAK,EACT,CAAA,EACH;AACH;;;;;"}
1
+ {"version":3,"file":"button.cjs","sources":["../../../src/components/ui/button.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\" as React.ElementType\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n"],"names":["cva","Slot","_jsx","cn"],"mappings":";;;;;;;AAMA,MAAM,cAAc,GAAGA,SAAG,CACxB,uZAAuZ,EACvZ;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EAAE,wDAAwD;AACjE,YAAA,WAAW,EACT,qFAAqF;AACvF,YAAA,OAAO,EACL,6EAA6E;AAC/E,YAAA,SAAS,EACP,8DAA8D;AAChE,YAAA,KAAK,EACH,8CAA8C;AAChD,YAAA,IAAI,EAAE,iDAAiD;AACxD,SAAA;AACD,QAAA,IAAI,EAAE;AACJ,YAAA,OAAO,EAAE,+BAA+B;AACxC,YAAA,EAAE,EAAE,+CAA+C;AACnD,YAAA,EAAE,EAAE,sCAAsC;AAC1C,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,SAAS,EAAE,SAAS;AACrB,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,SAAS;AAChB,KAAA;AACF,CAAA,EACF;AAED,SAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAO,GAAG,KAAK,EACf,GAAG,KAAK,EAIP,EAAA;IACD,MAAM,IAAI,GAAG,OAAO,GAAGC,cAAI,GAAG,QAA6B,CAAA;IAE3D,QACEC,cAAC,CAAA,IAAI,EACO,EAAA,WAAA,EAAA,QAAQ,EAClB,SAAS,EAAEC,QAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,EACvD,GAAA,KAAK,EACT,CAAA,EACH;AACH;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { Root as Slot } from '../../node_modules/.pnpm/@radix-ui_react-slot@1.2.4_@types_react@17.0.2_react@17.0.2/node_modules/@radix-ui/react-slot/dist/index.js';
2
+ import { Slot } from '@radix-ui/react-slot';
3
3
  import { cva } from '../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.js';
4
4
  import { cn } from '../../lib/utils.js';
5
5
 
@@ -6,13 +6,14 @@ var v4 = require('../node_modules/.pnpm/uuid@13.0.0/node_modules/uuid/dist/v4.cj
6
6
 
7
7
  const useADKChat = ({ initialConfig, onError, adkOptions, }) => {
8
8
  const controllerRef = React.useRef(null);
9
+ const runtimeType = React.useRef(null);
9
10
  const adkPluginRef = React.useRef(null);
10
11
  const runtimeStore = React.useRef(null);
11
12
  if (!runtimeStore.current) {
12
13
  runtimeStore.current = new Map();
13
14
  }
14
15
  if (!controllerRef.current) {
15
- const state = index.createThreadManagerState();
16
+ const state = index.createThreadManagerStateWithDefault();
16
17
  const storeManager = new index.ThreadMessageManager(state);
17
18
  const adkPlugin = new index.AdkPlugin({
18
19
  appName: adkOptions?.appName || 'veadk',
@@ -22,23 +23,50 @@ const useADKChat = ({ initialConfig, onError, adkOptions, }) => {
22
23
  controllerRef.current = new index.ChatController({
23
24
  requestOptions: initialConfig.requestOptions,
24
25
  protocolOptions: initialConfig.protocolOptions,
25
- plugins: [adkPlugin],
26
+ // plugins: [adkPlugin],
26
27
  onError: onError,
27
28
  storeManager,
28
29
  });
29
30
  }
30
- const switchRuntime = (runtime) => {
31
- adkPluginRef.current?.switchRuntime(runtime);
31
+ const switchRuntime = (runtime, options) => {
32
+ // adkPluginRef.current?.switchRuntime(runtime);
32
33
  const storeManager = runtimeStore.current?.get(runtime);
33
34
  if (storeManager) {
34
35
  controllerRef.current?.setStore(storeManager);
35
36
  }
36
37
  else {
37
- const state = index.createThreadManagerState();
38
+ const state = index.createThreadManagerStateWithDefault();
38
39
  const storeManager = new index.ThreadMessageManager(state);
39
40
  runtimeStore.current?.set(runtime, storeManager);
40
41
  controllerRef.current?.setStore(storeManager);
41
42
  }
43
+ if (options.type === runtimeType.current) {
44
+ if (options.type === 'adk') {
45
+ adkPluginRef.current?.switchRuntime(runtime, options.appName);
46
+ }
47
+ }
48
+ else {
49
+ const prevRequestOptions = controllerRef.current?.getRequestOptions();
50
+ if (options.type === 'adk' && adkPluginRef.current) {
51
+ controllerRef.current?.pluginManager.addPlugin(adkPluginRef.current);
52
+ controllerRef.current?.setProtocolOptions({ protocol: 'ADK' });
53
+ controllerRef.current?.setRequestOptions({
54
+ ...prevRequestOptions,
55
+ completions: index.AdkCompletion,
56
+ });
57
+ }
58
+ else {
59
+ if (adkPluginRef.current) {
60
+ controllerRef.current?.pluginManager.removePlugin(adkPluginRef.current);
61
+ controllerRef.current?.setRequestOptions({
62
+ ...prevRequestOptions,
63
+ completions: index.A2ACompletion,
64
+ });
65
+ controllerRef.current?.setProtocolOptions({ protocol: 'A2A' });
66
+ }
67
+ }
68
+ }
69
+ runtimeType.current = options.type;
42
70
  };
43
71
  return {
44
72
  controllerRef,
@@ -1 +1 @@
1
- {"version":3,"file":"useADKChat.cjs","sources":["../../src/hooks/useADKChat.ts"],"sourcesContent":["import { useState, Ref, useRef } from 'react';\nimport {\n AdkPlugin,\n ChatController,\n createThreadManagerState,\n ProtocolOptions,\n ThreadMessageManager,\n type RequestOptions,\n} from '@chat-lab/core';\nimport { v4 as uuid } from 'uuid';\nimport { useMemoizedFn } from 'ahooks';\n\nexport const useADKChat = ({\n initialConfig,\n onError,\n adkOptions,\n}: {\n initialConfig: {\n requestOptions: RequestOptions;\n protocolOptions: ProtocolOptions;\n };\n adkOptions?: {\n appName: string;\n userID: string;\n };\n onError?: (error: Error) => void;\n}) => {\n const controllerRef = useRef<ChatController | null>(null);\n const adkPluginRef = useRef<AdkPlugin | null>(null);\n const runtimeStore = useRef<Map<string, ThreadMessageManager> | null>(null);\n if (!runtimeStore.current) {\n runtimeStore.current = new Map();\n }\n if (!controllerRef.current) {\n const state = createThreadManagerState();\n const storeManager = new ThreadMessageManager(state);\n const adkPlugin = new AdkPlugin({\n appName: adkOptions?.appName || 'veadk',\n userId: adkOptions?.userID || uuid(),\n });\n adkPluginRef.current = adkPlugin;\n controllerRef.current = new ChatController({\n requestOptions: initialConfig.requestOptions,\n protocolOptions: initialConfig.protocolOptions,\n plugins: [adkPlugin],\n onError: onError,\n storeManager,\n });\n }\n const switchRuntime = (runtime: string) => {\n adkPluginRef.current?.switchRuntime(runtime);\n const storeManager = runtimeStore.current?.get(runtime);\n if (storeManager) {\n controllerRef.current?.setStore(storeManager);\n } else {\n const state = createThreadManagerState();\n const storeManager = new ThreadMessageManager(state);\n runtimeStore.current?.set(runtime, storeManager);\n controllerRef.current?.setStore(storeManager);\n }\n };\n return {\n controllerRef,\n switchRuntime,\n };\n};\n"],"names":["useRef","createThreadManagerState","ThreadMessageManager","AdkPlugin","uuid","ChatController"],"mappings":";;;;;;AAYO,MAAM,UAAU,GAAG,CAAC,EACzB,aAAa,EACb,OAAO,EACP,UAAU,GAWX,KAAI;AACH,IAAA,MAAM,aAAa,GAAGA,YAAM,CAAwB,IAAI,CAAC,CAAC;AAC1D,IAAA,MAAM,YAAY,GAAGA,YAAM,CAAmB,IAAI,CAAC,CAAC;AACpD,IAAA,MAAM,YAAY,GAAGA,YAAM,CAA2C,IAAI,CAAC,CAAC;AAC5E,IAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AACzB,QAAA,YAAY,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;KAClC;AACD,IAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAGC,8BAAwB,EAAE,CAAC;AACzC,QAAA,MAAM,YAAY,GAAG,IAAIC,0BAAoB,CAAC,KAAK,CAAC,CAAC;AACrD,QAAA,MAAM,SAAS,GAAG,IAAIC,eAAS,CAAC;AAC9B,YAAA,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,OAAO;AACvC,YAAA,MAAM,EAAE,UAAU,EAAE,MAAM,IAAIC,EAAI,EAAE;AACrC,SAAA,CAAC,CAAC;AACH,QAAA,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;AACjC,QAAA,aAAa,CAAC,OAAO,GAAG,IAAIC,oBAAc,CAAC;YACzC,cAAc,EAAE,aAAa,CAAC,cAAc;YAC5C,eAAe,EAAE,aAAa,CAAC,eAAe;YAC9C,OAAO,EAAE,CAAC,SAAS,CAAC;AACpB,YAAA,OAAO,EAAE,OAAO;YAChB,YAAY;AACb,SAAA,CAAC,CAAC;KACJ;AACD,IAAA,MAAM,aAAa,GAAG,CAAC,OAAe,KAAI;AACxC,QAAA,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,YAAY,EAAE;AAChB,YAAA,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC/C;aAAM;AACL,YAAA,MAAM,KAAK,GAAGJ,8BAAwB,EAAE,CAAC;AACzC,YAAA,MAAM,YAAY,GAAG,IAAIC,0BAAoB,CAAC,KAAK,CAAC,CAAC;YACrD,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACjD,YAAA,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC/C;AACH,KAAC,CAAC;IACF,OAAO;QACL,aAAa;QACb,aAAa;KACd,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"useADKChat.cjs","sources":["../../src/hooks/useADKChat.ts"],"sourcesContent":["import { useState, Ref, useRef } from 'react';\nimport {\n AdkPlugin,\n ChatController,\n createThreadManagerState,\n createThreadManagerStateWithDefault,\n ProtocolOptions,\n ThreadMessageManager,\n type RequestOptions,\n A2ACompletion,\n AdkCompletion,\n} from '@chat-lab/core';\nimport { v4 as uuid } from 'uuid';\nimport { option } from 'framer-motion/dist/m';\n\nexport const useADKChat = ({\n initialConfig,\n onError,\n adkOptions,\n}: {\n initialConfig: {\n requestOptions: RequestOptions;\n protocolOptions: ProtocolOptions;\n };\n adkOptions?: {\n appName: string;\n userID: string;\n };\n onError?: (error: Error) => void;\n}) => {\n const controllerRef = useRef<ChatController | null>(null);\n const runtimeType = useRef<'a2a' | 'adk' | null>(null);\n const adkPluginRef = useRef<AdkPlugin | null>(null);\n const runtimeStore = useRef<Map<string, ThreadMessageManager> | null>(null);\n if (!runtimeStore.current) {\n runtimeStore.current = new Map();\n }\n if (!controllerRef.current) {\n const state = createThreadManagerStateWithDefault();\n const storeManager = new ThreadMessageManager(state);\n const adkPlugin = new AdkPlugin({\n appName: adkOptions?.appName || 'veadk',\n userId: adkOptions?.userID || uuid(),\n });\n adkPluginRef.current = adkPlugin;\n controllerRef.current = new ChatController({\n requestOptions: initialConfig.requestOptions,\n protocolOptions: initialConfig.protocolOptions,\n // plugins: [adkPlugin],\n onError: onError,\n storeManager,\n });\n }\n const switchRuntime = (\n runtime: string,\n options: { type: 'a2a' } | { type: 'adk'; appName: string },\n ) => {\n // adkPluginRef.current?.switchRuntime(runtime);\n const storeManager = runtimeStore.current?.get(runtime);\n if (storeManager) {\n controllerRef.current?.setStore(storeManager);\n } else {\n const state = createThreadManagerStateWithDefault();\n const storeManager = new ThreadMessageManager(state);\n runtimeStore.current?.set(runtime, storeManager);\n controllerRef.current?.setStore(storeManager);\n }\n\n if (options.type === runtimeType.current) {\n if (options.type === 'adk') {\n adkPluginRef.current?.switchRuntime(runtime, options.appName);\n }\n } else {\n const prevRequestOptions =\n controllerRef.current?.getRequestOptions() as RequestOptions;\n if (options.type === 'adk' && adkPluginRef.current) {\n controllerRef.current?.pluginManager.addPlugin(adkPluginRef.current);\n controllerRef.current?.setProtocolOptions({ protocol: 'ADK' });\n controllerRef.current?.setRequestOptions({\n ...prevRequestOptions,\n completions: AdkCompletion,\n });\n } else {\n if (adkPluginRef.current) {\n controllerRef.current?.pluginManager.removePlugin(\n adkPluginRef.current,\n );\n controllerRef.current?.setRequestOptions({\n ...prevRequestOptions,\n completions: A2ACompletion,\n });\n controllerRef.current?.setProtocolOptions({ protocol: 'A2A' });\n }\n }\n }\n runtimeType.current = options.type;\n };\n return {\n controllerRef,\n switchRuntime,\n };\n};\n"],"names":["useRef","createThreadManagerStateWithDefault","ThreadMessageManager","AdkPlugin","uuid","ChatController","AdkCompletion","A2ACompletion"],"mappings":"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"}
@@ -11,6 +11,11 @@ export declare const useADKChat: ({ initialConfig, onError, adkOptions, }: {
11
11
  onError?: (error: Error) => void;
12
12
  }) => {
13
13
  controllerRef: import("react").MutableRefObject<ChatController<import("@chat-lab/core").ChatMessage<import("@chat-lab/core").BaseMessage>> | null>;
14
- switchRuntime: (runtime: string) => void;
14
+ switchRuntime: (runtime: string, options: {
15
+ type: "a2a";
16
+ } | {
17
+ type: "adk";
18
+ appName: string;
19
+ }) => void;
15
20
  };
16
21
  //# sourceMappingURL=useADKChat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useADKChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useADKChat.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,cAAc,EAEd,eAAe,EAEf,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAIxB,eAAO,MAAM,UAAU,GAAI,yCAIxB;IACD,aAAa,EAAE;QACb,cAAc,EAAE,cAAc,CAAC;QAC/B,eAAe,EAAE,eAAe,CAAC;KAClC,CAAC;IACF,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;;6BAuBiC,MAAM;CAgBvC,CAAC"}
1
+ {"version":3,"file":"useADKChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useADKChat.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,cAAc,EAGd,eAAe,EAEf,KAAK,cAAc,EAGpB,MAAM,gBAAgB,CAAC;AAIxB,eAAO,MAAM,UAAU,GAAI,yCAIxB;IACD,aAAa,EAAE;QACb,cAAc,EAAE,cAAc,CAAC;QAC/B,eAAe,EAAE,eAAe,CAAC;KAClC,CAAC;IACF,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;;6BAyBY,MAAM,WACN;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CA8C9D,CAAC"}
@@ -1,16 +1,17 @@
1
1
  import { useRef } from 'react';
2
- import { createThreadManagerState, AdkPlugin, ChatController, ThreadMessageManager } from '../packages/core/dist/index.js';
2
+ import { createThreadManagerStateWithDefault, AdkPlugin, ChatController, ThreadMessageManager, AdkCompletion, A2ACompletion } from '../packages/core/dist/index.js';
3
3
  import v4 from '../node_modules/.pnpm/uuid@13.0.0/node_modules/uuid/dist/v4.js';
4
4
 
5
5
  const useADKChat = ({ initialConfig, onError, adkOptions, }) => {
6
6
  const controllerRef = useRef(null);
7
+ const runtimeType = useRef(null);
7
8
  const adkPluginRef = useRef(null);
8
9
  const runtimeStore = useRef(null);
9
10
  if (!runtimeStore.current) {
10
11
  runtimeStore.current = new Map();
11
12
  }
12
13
  if (!controllerRef.current) {
13
- const state = createThreadManagerState();
14
+ const state = createThreadManagerStateWithDefault();
14
15
  const storeManager = new ThreadMessageManager(state);
15
16
  const adkPlugin = new AdkPlugin({
16
17
  appName: adkOptions?.appName || 'veadk',
@@ -20,23 +21,50 @@ const useADKChat = ({ initialConfig, onError, adkOptions, }) => {
20
21
  controllerRef.current = new ChatController({
21
22
  requestOptions: initialConfig.requestOptions,
22
23
  protocolOptions: initialConfig.protocolOptions,
23
- plugins: [adkPlugin],
24
+ // plugins: [adkPlugin],
24
25
  onError: onError,
25
26
  storeManager,
26
27
  });
27
28
  }
28
- const switchRuntime = (runtime) => {
29
- adkPluginRef.current?.switchRuntime(runtime);
29
+ const switchRuntime = (runtime, options) => {
30
+ // adkPluginRef.current?.switchRuntime(runtime);
30
31
  const storeManager = runtimeStore.current?.get(runtime);
31
32
  if (storeManager) {
32
33
  controllerRef.current?.setStore(storeManager);
33
34
  }
34
35
  else {
35
- const state = createThreadManagerState();
36
+ const state = createThreadManagerStateWithDefault();
36
37
  const storeManager = new ThreadMessageManager(state);
37
38
  runtimeStore.current?.set(runtime, storeManager);
38
39
  controllerRef.current?.setStore(storeManager);
39
40
  }
41
+ if (options.type === runtimeType.current) {
42
+ if (options.type === 'adk') {
43
+ adkPluginRef.current?.switchRuntime(runtime, options.appName);
44
+ }
45
+ }
46
+ else {
47
+ const prevRequestOptions = controllerRef.current?.getRequestOptions();
48
+ if (options.type === 'adk' && adkPluginRef.current) {
49
+ controllerRef.current?.pluginManager.addPlugin(adkPluginRef.current);
50
+ controllerRef.current?.setProtocolOptions({ protocol: 'ADK' });
51
+ controllerRef.current?.setRequestOptions({
52
+ ...prevRequestOptions,
53
+ completions: AdkCompletion,
54
+ });
55
+ }
56
+ else {
57
+ if (adkPluginRef.current) {
58
+ controllerRef.current?.pluginManager.removePlugin(adkPluginRef.current);
59
+ controllerRef.current?.setRequestOptions({
60
+ ...prevRequestOptions,
61
+ completions: A2ACompletion,
62
+ });
63
+ controllerRef.current?.setProtocolOptions({ protocol: 'A2A' });
64
+ }
65
+ }
66
+ }
67
+ runtimeType.current = options.type;
40
68
  };
41
69
  return {
42
70
  controllerRef,
@@ -1 +1 @@
1
- {"version":3,"file":"useADKChat.js","sources":["../../src/hooks/useADKChat.ts"],"sourcesContent":["import { useState, Ref, useRef } from 'react';\nimport {\n AdkPlugin,\n ChatController,\n createThreadManagerState,\n ProtocolOptions,\n ThreadMessageManager,\n type RequestOptions,\n} from '@chat-lab/core';\nimport { v4 as uuid } from 'uuid';\nimport { useMemoizedFn } from 'ahooks';\n\nexport const useADKChat = ({\n initialConfig,\n onError,\n adkOptions,\n}: {\n initialConfig: {\n requestOptions: RequestOptions;\n protocolOptions: ProtocolOptions;\n };\n adkOptions?: {\n appName: string;\n userID: string;\n };\n onError?: (error: Error) => void;\n}) => {\n const controllerRef = useRef<ChatController | null>(null);\n const adkPluginRef = useRef<AdkPlugin | null>(null);\n const runtimeStore = useRef<Map<string, ThreadMessageManager> | null>(null);\n if (!runtimeStore.current) {\n runtimeStore.current = new Map();\n }\n if (!controllerRef.current) {\n const state = createThreadManagerState();\n const storeManager = new ThreadMessageManager(state);\n const adkPlugin = new AdkPlugin({\n appName: adkOptions?.appName || 'veadk',\n userId: adkOptions?.userID || uuid(),\n });\n adkPluginRef.current = adkPlugin;\n controllerRef.current = new ChatController({\n requestOptions: initialConfig.requestOptions,\n protocolOptions: initialConfig.protocolOptions,\n plugins: [adkPlugin],\n onError: onError,\n storeManager,\n });\n }\n const switchRuntime = (runtime: string) => {\n adkPluginRef.current?.switchRuntime(runtime);\n const storeManager = runtimeStore.current?.get(runtime);\n if (storeManager) {\n controllerRef.current?.setStore(storeManager);\n } else {\n const state = createThreadManagerState();\n const storeManager = new ThreadMessageManager(state);\n runtimeStore.current?.set(runtime, storeManager);\n controllerRef.current?.setStore(storeManager);\n }\n };\n return {\n controllerRef,\n switchRuntime,\n };\n};\n"],"names":["uuid"],"mappings":";;;;AAYO,MAAM,UAAU,GAAG,CAAC,EACzB,aAAa,EACb,OAAO,EACP,UAAU,GAWX,KAAI;AACH,IAAA,MAAM,aAAa,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;AAC1D,IAAA,MAAM,YAAY,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;AACpD,IAAA,MAAM,YAAY,GAAG,MAAM,CAA2C,IAAI,CAAC,CAAC;AAC5E,IAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AACzB,QAAA,YAAY,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;KAClC;AACD,IAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAG,wBAAwB,EAAE,CAAC;AACzC,QAAA,MAAM,YAAY,GAAG,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACrD,QAAA,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;AAC9B,YAAA,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,OAAO;AACvC,YAAA,MAAM,EAAE,UAAU,EAAE,MAAM,IAAIA,EAAI,EAAE;AACrC,SAAA,CAAC,CAAC;AACH,QAAA,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;AACjC,QAAA,aAAa,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC;YACzC,cAAc,EAAE,aAAa,CAAC,cAAc;YAC5C,eAAe,EAAE,aAAa,CAAC,eAAe;YAC9C,OAAO,EAAE,CAAC,SAAS,CAAC;AACpB,YAAA,OAAO,EAAE,OAAO;YAChB,YAAY;AACb,SAAA,CAAC,CAAC;KACJ;AACD,IAAA,MAAM,aAAa,GAAG,CAAC,OAAe,KAAI;AACxC,QAAA,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,YAAY,EAAE;AAChB,YAAA,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC/C;aAAM;AACL,YAAA,MAAM,KAAK,GAAG,wBAAwB,EAAE,CAAC;AACzC,YAAA,MAAM,YAAY,GAAG,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACrD,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACjD,YAAA,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC/C;AACH,KAAC,CAAC;IACF,OAAO;QACL,aAAa;QACb,aAAa;KACd,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"useADKChat.js","sources":["../../src/hooks/useADKChat.ts"],"sourcesContent":["import { useState, Ref, useRef } from 'react';\nimport {\n AdkPlugin,\n ChatController,\n createThreadManagerState,\n createThreadManagerStateWithDefault,\n ProtocolOptions,\n ThreadMessageManager,\n type RequestOptions,\n A2ACompletion,\n AdkCompletion,\n} from '@chat-lab/core';\nimport { v4 as uuid } from 'uuid';\nimport { option } from 'framer-motion/dist/m';\n\nexport const useADKChat = ({\n initialConfig,\n onError,\n adkOptions,\n}: {\n initialConfig: {\n requestOptions: RequestOptions;\n protocolOptions: ProtocolOptions;\n };\n adkOptions?: {\n appName: string;\n userID: string;\n };\n onError?: (error: Error) => void;\n}) => {\n const controllerRef = useRef<ChatController | null>(null);\n const runtimeType = useRef<'a2a' | 'adk' | null>(null);\n const adkPluginRef = useRef<AdkPlugin | null>(null);\n const runtimeStore = useRef<Map<string, ThreadMessageManager> | null>(null);\n if (!runtimeStore.current) {\n runtimeStore.current = new Map();\n }\n if (!controllerRef.current) {\n const state = createThreadManagerStateWithDefault();\n const storeManager = new ThreadMessageManager(state);\n const adkPlugin = new AdkPlugin({\n appName: adkOptions?.appName || 'veadk',\n userId: adkOptions?.userID || uuid(),\n });\n adkPluginRef.current = adkPlugin;\n controllerRef.current = new ChatController({\n requestOptions: initialConfig.requestOptions,\n protocolOptions: initialConfig.protocolOptions,\n // plugins: [adkPlugin],\n onError: onError,\n storeManager,\n });\n }\n const switchRuntime = (\n runtime: string,\n options: { type: 'a2a' } | { type: 'adk'; appName: string },\n ) => {\n // adkPluginRef.current?.switchRuntime(runtime);\n const storeManager = runtimeStore.current?.get(runtime);\n if (storeManager) {\n controllerRef.current?.setStore(storeManager);\n } else {\n const state = createThreadManagerStateWithDefault();\n const storeManager = new ThreadMessageManager(state);\n runtimeStore.current?.set(runtime, storeManager);\n controllerRef.current?.setStore(storeManager);\n }\n\n if (options.type === runtimeType.current) {\n if (options.type === 'adk') {\n adkPluginRef.current?.switchRuntime(runtime, options.appName);\n }\n } else {\n const prevRequestOptions =\n controllerRef.current?.getRequestOptions() as RequestOptions;\n if (options.type === 'adk' && adkPluginRef.current) {\n controllerRef.current?.pluginManager.addPlugin(adkPluginRef.current);\n controllerRef.current?.setProtocolOptions({ protocol: 'ADK' });\n controllerRef.current?.setRequestOptions({\n ...prevRequestOptions,\n completions: AdkCompletion,\n });\n } else {\n if (adkPluginRef.current) {\n controllerRef.current?.pluginManager.removePlugin(\n adkPluginRef.current,\n );\n controllerRef.current?.setRequestOptions({\n ...prevRequestOptions,\n completions: A2ACompletion,\n });\n controllerRef.current?.setProtocolOptions({ protocol: 'A2A' });\n }\n }\n }\n runtimeType.current = options.type;\n };\n return {\n controllerRef,\n switchRuntime,\n };\n};\n"],"names":["uuid"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -14,6 +14,7 @@ require('react/jsx-runtime');
14
14
  require('react');
15
15
  require('./adk/hooks/useEvents.cjs');
16
16
  require('./adk/components/Debug/Trace/store.cjs');
17
+ require('clsx');
17
18
  require('./components/ui/tabs.cjs');
18
19
  require('./components/ui/card.cjs');
19
20
  require('./node_modules/.pnpm/react-json-view@1.21.3_@types_react@17.0.2_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/react-json-view/dist/main.cjs');
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.js CHANGED
@@ -12,6 +12,7 @@ import 'react/jsx-runtime';
12
12
  import 'react';
13
13
  import './adk/hooks/useEvents.js';
14
14
  import './adk/components/Debug/Trace/store.js';
15
+ import 'clsx';
15
16
  import './components/ui/tabs.js';
16
17
  import './components/ui/card.js';
17
18
  import './node_modules/.pnpm/react-json-view@1.21.3_@types_react@17.0.2_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/react-json-view/dist/main.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var clsx = require('../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.cjs');
3
+ var clsx = require('clsx');
4
4
  var bundleMjs = require('../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/dist/bundle-mjs.cjs');
5
5
 
6
6
  function cn(...inputs) {
package/dist/lib/utils.js CHANGED
@@ -1,4 +1,4 @@
1
- import { clsx } from '../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js';
1
+ import { clsx } from 'clsx';
2
2
  import { twMerge } from '../node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/dist/bundle-mjs.js';
3
3
 
4
4
  function cn(...inputs) {
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ // src/constants.ts
4
+ var AGENT_CARD_PATH = ".well-known/agent-card.json";
5
+
6
+ exports.AGENT_CARD_PATH = AGENT_CARD_PATH;
7
+ //# sourceMappingURL=chunk-3QDLXHKS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-3QDLXHKS.cjs","sources":["../../../../../../../../../../node_modules/.pnpm/@a2a-js+sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/chunk-3QDLXHKS.js"],"sourcesContent":["// src/constants.ts\nvar AGENT_CARD_PATH = \".well-known/agent-card.json\";\nvar HTTP_EXTENSION_HEADER = \"X-A2A-Extensions\";\n\nexport {\n AGENT_CARD_PATH,\n HTTP_EXTENSION_HEADER\n};\n"],"names":[],"mappings":";;AAAA;AACG,IAAC,eAAe,GAAG;;;;","x_google_ignoreList":[0]}
@@ -0,0 +1,5 @@
1
+ // src/constants.ts
2
+ var AGENT_CARD_PATH = ".well-known/agent-card.json";
3
+
4
+ export { AGENT_CARD_PATH };
5
+ //# sourceMappingURL=chunk-3QDLXHKS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-3QDLXHKS.js","sources":["../../../../../../../../../../node_modules/.pnpm/@a2a-js+sdk@0.3.7_express@5.1.0/node_modules/@a2a-js/sdk/dist/chunk-3QDLXHKS.js"],"sourcesContent":["// src/constants.ts\nvar AGENT_CARD_PATH = \".well-known/agent-card.json\";\nvar HTTP_EXTENSION_HEADER = \"X-A2A-Extensions\";\n\nexport {\n AGENT_CARD_PATH,\n HTTP_EXTENSION_HEADER\n};\n"],"names":[],"mappings":"AAAA;AACG,IAAC,eAAe,GAAG;;;;","x_google_ignoreList":[0]}
@@ -0,0 +1,100 @@
1
+ 'use strict';
2
+
3
+ // src/errors.ts
4
+ var A2A_ERROR_CODE = {
5
+ PARSE_ERROR: -32700,
6
+ INVALID_REQUEST: -32600,
7
+ METHOD_NOT_FOUND: -32601,
8
+ INVALID_PARAMS: -32602,
9
+ INTERNAL_ERROR: -32603,
10
+ TASK_NOT_FOUND: -32001,
11
+ TASK_NOT_CANCELABLE: -32002,
12
+ PUSH_NOTIFICATION_NOT_SUPPORTED: -32003,
13
+ UNSUPPORTED_OPERATION: -32004,
14
+ CONTENT_TYPE_NOT_SUPPORTED: -32005,
15
+ INVALID_AGENT_RESPONSE: -32006,
16
+ AUTHENTICATED_EXTENDED_CARD_NOT_CONFIGURED: -32007
17
+ };
18
+ var TaskNotFoundError = class extends Error {
19
+ constructor(message) {
20
+ super(message ?? "Task not found");
21
+ this.name = "TaskNotFoundError";
22
+ }
23
+ };
24
+ var TaskNotCancelableError = class extends Error {
25
+ constructor(message) {
26
+ super(message ?? "Task cannot be canceled");
27
+ this.name = "TaskNotCancelableError";
28
+ }
29
+ };
30
+ var PushNotificationNotSupportedError = class extends Error {
31
+ constructor(message) {
32
+ super(message ?? "Push Notification is not supported");
33
+ this.name = "PushNotificationNotSupportedError";
34
+ }
35
+ };
36
+ var UnsupportedOperationError = class extends Error {
37
+ constructor(message) {
38
+ super(message ?? "This operation is not supported");
39
+ this.name = "UnsupportedOperationError";
40
+ }
41
+ };
42
+ var ContentTypeNotSupportedError = class extends Error {
43
+ constructor(message) {
44
+ super(message ?? "Incompatible content types");
45
+ this.name = "ContentTypeNotSupportedError";
46
+ }
47
+ };
48
+ var InvalidAgentResponseError = class extends Error {
49
+ constructor(message) {
50
+ super(message ?? "Invalid agent response type");
51
+ this.name = "InvalidAgentResponseError";
52
+ }
53
+ };
54
+ var AuthenticatedExtendedCardNotConfiguredError = class extends Error {
55
+ constructor(message) {
56
+ super(message ?? "Authenticated Extended Card not configured");
57
+ this.name = "AuthenticatedExtendedCardNotConfiguredError";
58
+ }
59
+ };
60
+ async function* parseSseStream(response) {
61
+ if (!response.body) {
62
+ throw new Error("SSE response body is undefined. Cannot read stream.");
63
+ }
64
+ let buffer = "";
65
+ let eventType = "message";
66
+ let eventData = "";
67
+ for await (const value of response.body.pipeThrough(new TextDecoderStream())) {
68
+ buffer += value;
69
+ let lineEndIndex;
70
+ while ((lineEndIndex = buffer.indexOf("\n")) >= 0) {
71
+ const line = buffer.substring(0, lineEndIndex).trim();
72
+ buffer = buffer.substring(lineEndIndex + 1);
73
+ if (line === "") {
74
+ if (eventData) {
75
+ yield { type: eventType, data: eventData };
76
+ eventData = "";
77
+ eventType = "message";
78
+ }
79
+ } else if (line.startsWith("event:")) {
80
+ eventType = line.substring("event:".length).trim();
81
+ } else if (line.startsWith("data:")) {
82
+ eventData = line.substring("data:".length).trim();
83
+ }
84
+ }
85
+ }
86
+ if (eventData) {
87
+ yield { type: eventType, data: eventData };
88
+ }
89
+ }
90
+
91
+ exports.A2A_ERROR_CODE = A2A_ERROR_CODE;
92
+ exports.AuthenticatedExtendedCardNotConfiguredError = AuthenticatedExtendedCardNotConfiguredError;
93
+ exports.ContentTypeNotSupportedError = ContentTypeNotSupportedError;
94
+ exports.InvalidAgentResponseError = InvalidAgentResponseError;
95
+ exports.PushNotificationNotSupportedError = PushNotificationNotSupportedError;
96
+ exports.TaskNotCancelableError = TaskNotCancelableError;
97
+ exports.TaskNotFoundError = TaskNotFoundError;
98
+ exports.UnsupportedOperationError = UnsupportedOperationError;
99
+ exports.parseSseStream = parseSseStream;
100
+ //# sourceMappingURL=chunk-SJNAG4AL.cjs.map