sa2kit 1.6.60 → 1.6.62

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 (297) hide show
  1. package/dist/UniversalFileService-C3WQAFOV.js +15 -0
  2. package/dist/{UniversalFileService-J6ET6KZK.js.map → UniversalFileService-C3WQAFOV.js.map} +1 -1
  3. package/dist/UniversalFileService-O3IEROBN.mjs +6 -0
  4. package/dist/{UniversalFileService-336GFY6N.mjs.map → UniversalFileService-O3IEROBN.mjs.map} +1 -1
  5. package/dist/ai/llm/index.d.mts +70 -0
  6. package/dist/ai/llm/index.d.ts +70 -0
  7. package/dist/ai/llm/index.js +54 -0
  8. package/dist/ai/llm/index.js.map +1 -0
  9. package/dist/ai/llm/index.mjs +5 -0
  10. package/dist/ai/llm/index.mjs.map +1 -0
  11. package/dist/ai/llm/ui/electron/index.d.mts +5 -0
  12. package/dist/ai/llm/ui/electron/index.d.ts +5 -0
  13. package/dist/ai/llm/ui/electron/index.js +21 -0
  14. package/dist/ai/llm/ui/electron/index.js.map +1 -0
  15. package/dist/ai/llm/ui/electron/index.mjs +8 -0
  16. package/dist/ai/llm/ui/electron/index.mjs.map +1 -0
  17. package/dist/ai/llm/ui/miniapp/index.d.mts +9 -0
  18. package/dist/ai/llm/ui/miniapp/index.d.ts +9 -0
  19. package/dist/ai/llm/ui/miniapp/index.js +107 -0
  20. package/dist/ai/llm/ui/miniapp/index.js.map +1 -0
  21. package/dist/ai/llm/ui/miniapp/index.mjs +101 -0
  22. package/dist/ai/llm/ui/miniapp/index.mjs.map +1 -0
  23. package/dist/ai/llm/ui/rn/index.d.mts +9 -0
  24. package/dist/ai/llm/ui/rn/index.d.ts +9 -0
  25. package/dist/ai/llm/ui/rn/index.js +249 -0
  26. package/dist/ai/llm/ui/rn/index.js.map +1 -0
  27. package/dist/ai/llm/ui/rn/index.mjs +243 -0
  28. package/dist/ai/llm/ui/rn/index.mjs.map +1 -0
  29. package/dist/ai/llm/ui/web/index.d.mts +15 -0
  30. package/dist/ai/llm/ui/web/index.d.ts +15 -0
  31. package/dist/ai/llm/ui/web/index.js +21 -0
  32. package/dist/ai/llm/ui/web/index.js.map +1 -0
  33. package/dist/ai/llm/ui/web/index.mjs +8 -0
  34. package/dist/ai/llm/ui/web/index.mjs.map +1 -0
  35. package/dist/ar/index.d.mts +7 -0
  36. package/dist/ar/index.d.ts +7 -0
  37. package/dist/ar/index.js +17 -0
  38. package/dist/ar/index.js.map +1 -0
  39. package/dist/ar/index.mjs +4 -0
  40. package/dist/ar/index.mjs.map +1 -0
  41. package/dist/auth/index.js +22 -22
  42. package/dist/auth/index.mjs +2 -2
  43. package/dist/auth/legacy/db/index.d.mts +5 -0
  44. package/dist/auth/legacy/db/index.d.ts +5 -0
  45. package/dist/auth/legacy/db/index.js +34 -0
  46. package/dist/auth/legacy/db/index.js.map +1 -0
  47. package/dist/auth/legacy/db/index.mjs +5 -0
  48. package/dist/auth/legacy/db/index.mjs.map +1 -0
  49. package/dist/auth/legacy/index.d.mts +51 -0
  50. package/dist/auth/legacy/index.d.ts +51 -0
  51. package/dist/auth/legacy/index.js +146 -0
  52. package/dist/auth/legacy/index.js.map +1 -0
  53. package/dist/auth/legacy/index.mjs +13 -0
  54. package/dist/auth/legacy/index.mjs.map +1 -0
  55. package/dist/auth/legacy/logic/index.d.mts +9 -0
  56. package/dist/auth/legacy/logic/index.d.ts +9 -0
  57. package/dist/auth/legacy/logic/index.js +18 -0
  58. package/dist/auth/legacy/logic/index.js.map +1 -0
  59. package/dist/auth/legacy/logic/index.mjs +5 -0
  60. package/dist/auth/legacy/logic/index.mjs.map +1 -0
  61. package/dist/auth/legacy/routes/index.d.mts +50 -0
  62. package/dist/auth/legacy/routes/index.d.ts +50 -0
  63. package/dist/auth/legacy/routes/index.js +34 -0
  64. package/dist/auth/legacy/routes/index.js.map +1 -0
  65. package/dist/auth/legacy/routes/index.mjs +5 -0
  66. package/dist/auth/legacy/routes/index.mjs.map +1 -0
  67. package/dist/auth/legacy/schema/index.d.mts +401 -0
  68. package/dist/auth/legacy/schema/index.d.ts +401 -0
  69. package/dist/auth/legacy/schema/index.js +29 -0
  70. package/dist/auth/legacy/schema/index.js.map +1 -0
  71. package/dist/auth/legacy/schema/index.mjs +4 -0
  72. package/dist/auth/legacy/schema/index.mjs.map +1 -0
  73. package/dist/auth/legacy/server/index.d.mts +15 -0
  74. package/dist/auth/legacy/server/index.d.ts +15 -0
  75. package/dist/auth/legacy/server/index.js +65 -0
  76. package/dist/auth/legacy/server/index.js.map +1 -0
  77. package/dist/auth/legacy/server/index.mjs +8 -0
  78. package/dist/auth/legacy/server/index.mjs.map +1 -0
  79. package/dist/auth/legacy/services/index.d.mts +40 -0
  80. package/dist/auth/legacy/services/index.d.ts +40 -0
  81. package/dist/auth/legacy/services/index.js +14 -0
  82. package/dist/auth/legacy/services/index.js.map +1 -0
  83. package/dist/auth/legacy/services/index.mjs +5 -0
  84. package/dist/auth/legacy/services/index.mjs.map +1 -0
  85. package/dist/auth/legacy/ui/miniapp/index.d.mts +10 -0
  86. package/dist/auth/legacy/ui/miniapp/index.d.ts +10 -0
  87. package/dist/auth/legacy/ui/miniapp/index.js +23 -0
  88. package/dist/auth/legacy/ui/miniapp/index.js.map +1 -0
  89. package/dist/auth/legacy/ui/miniapp/index.mjs +6 -0
  90. package/dist/auth/legacy/ui/miniapp/index.mjs.map +1 -0
  91. package/dist/auth/legacy/ui/web/index.d.mts +22 -0
  92. package/dist/auth/legacy/ui/web/index.d.ts +22 -0
  93. package/dist/auth/legacy/ui/web/index.js +31 -0
  94. package/dist/auth/legacy/ui/web/index.js.map +1 -0
  95. package/dist/auth/legacy/ui/web/index.mjs +6 -0
  96. package/dist/auth/legacy/ui/web/index.mjs.map +1 -0
  97. package/dist/calendar/index.d.mts +390 -237
  98. package/dist/calendar/index.d.ts +390 -237
  99. package/dist/calendar/index.js +3825 -3785
  100. package/dist/calendar/index.js.map +1 -1
  101. package/dist/calendar/index.mjs +3730 -3696
  102. package/dist/calendar/index.mjs.map +1 -1
  103. package/dist/calendar/routes/index.js +30 -327
  104. package/dist/calendar/routes/index.js.map +1 -1
  105. package/dist/calendar/routes/index.mjs +1 -323
  106. package/dist/calendar/routes/index.mjs.map +1 -1
  107. package/dist/calendar/server.d.mts +6 -0
  108. package/dist/calendar/server.d.ts +6 -0
  109. package/dist/calendar/server.js +41 -13
  110. package/dist/calendar/server.js.map +1 -1
  111. package/dist/calendar/server.mjs +2 -2
  112. package/dist/calendar/server.mjs.map +1 -1
  113. package/dist/chunk-24F7KUED.js +263 -0
  114. package/dist/chunk-24F7KUED.js.map +1 -0
  115. package/dist/{chunk-YMS6BPXS.js → chunk-27IUMDDK.js} +3 -3
  116. package/dist/{chunk-YMS6BPXS.js.map → chunk-27IUMDDK.js.map} +1 -1
  117. package/dist/chunk-37M6NZIF.js +279 -0
  118. package/dist/chunk-37M6NZIF.js.map +1 -0
  119. package/dist/chunk-3JMUNOUT.js +144 -0
  120. package/dist/chunk-3JMUNOUT.js.map +1 -0
  121. package/dist/chunk-3PFCOTJP.mjs +256 -0
  122. package/dist/chunk-3PFCOTJP.mjs.map +1 -0
  123. package/dist/{chunk-NZZZUMMX.mjs → chunk-57MVE5LL.mjs} +3 -3
  124. package/dist/{chunk-NZZZUMMX.mjs.map → chunk-57MVE5LL.mjs.map} +1 -1
  125. package/dist/{chunk-622Y6LTH.mjs → chunk-5BLZEVWK.mjs} +196 -468
  126. package/dist/chunk-5BLZEVWK.mjs.map +1 -0
  127. package/dist/{chunk-YN4MJFIG.js → chunk-5LCGOCKG.js} +5 -5
  128. package/dist/{chunk-YN4MJFIG.js.map → chunk-5LCGOCKG.js.map} +1 -1
  129. package/dist/chunk-6XUQ2B4K.js +219 -0
  130. package/dist/chunk-6XUQ2B4K.js.map +1 -0
  131. package/dist/{chunk-NCOXT7SK.js → chunk-77UEPWVQ.js} +4 -4
  132. package/dist/{chunk-NCOXT7SK.js.map → chunk-77UEPWVQ.js.map} +1 -1
  133. package/dist/chunk-CFM56MGO.mjs +35 -0
  134. package/dist/chunk-CFM56MGO.mjs.map +1 -0
  135. package/dist/chunk-CPSFYP34.mjs +140 -0
  136. package/dist/chunk-CPSFYP34.mjs.map +1 -0
  137. package/dist/chunk-D22QBOCM.mjs +336 -0
  138. package/dist/chunk-D22QBOCM.mjs.map +1 -0
  139. package/dist/chunk-DA4QV64P.mjs +35 -0
  140. package/dist/chunk-DA4QV64P.mjs.map +1 -0
  141. package/dist/chunk-EKDLZND6.js +275 -0
  142. package/dist/chunk-EKDLZND6.js.map +1 -0
  143. package/dist/chunk-EKQPFZXQ.js +12 -0
  144. package/dist/chunk-EKQPFZXQ.js.map +1 -0
  145. package/dist/chunk-ERAAB5VG.js +324 -0
  146. package/dist/chunk-ERAAB5VG.js.map +1 -0
  147. package/dist/chunk-ESLY72VI.mjs +175 -0
  148. package/dist/chunk-ESLY72VI.mjs.map +1 -0
  149. package/dist/chunk-FGQGWW73.js +38 -0
  150. package/dist/chunk-FGQGWW73.js.map +1 -0
  151. package/dist/chunk-FXQOXLDE.js +120 -0
  152. package/dist/chunk-FXQOXLDE.js.map +1 -0
  153. package/dist/chunk-FZELCJR7.mjs +19 -0
  154. package/dist/chunk-FZELCJR7.mjs.map +1 -0
  155. package/dist/{chunk-HHVDOIPV.js → chunk-H3P2PGZL.js} +3 -3
  156. package/dist/{chunk-HHVDOIPV.js.map → chunk-H3P2PGZL.js.map} +1 -1
  157. package/dist/chunk-HBQMN5QM.mjs +10 -0
  158. package/dist/chunk-HBQMN5QM.mjs.map +1 -0
  159. package/dist/chunk-ITRIXMXF.mjs +862 -0
  160. package/dist/chunk-ITRIXMXF.mjs.map +1 -0
  161. package/dist/chunk-IUWSCUDC.js +4 -0
  162. package/dist/chunk-IUWSCUDC.js.map +1 -0
  163. package/dist/chunk-JCKCKRC2.js +50 -0
  164. package/dist/chunk-JCKCKRC2.js.map +1 -0
  165. package/dist/chunk-L7GQNY54.mjs +286 -0
  166. package/dist/chunk-L7GQNY54.mjs.map +1 -0
  167. package/dist/{chunk-ZRWED7Q6.js → chunk-LDVJ7URJ.js} +235 -520
  168. package/dist/chunk-LDVJ7URJ.js.map +1 -0
  169. package/dist/{chunk-CYTXGBP2.js → chunk-MLP74E3O.js} +573 -1607
  170. package/dist/chunk-MLP74E3O.js.map +1 -0
  171. package/dist/chunk-NAX4TUT7.js +182 -0
  172. package/dist/chunk-NAX4TUT7.js.map +1 -0
  173. package/dist/chunk-NW4EN4YI.mjs +213 -0
  174. package/dist/chunk-NW4EN4YI.mjs.map +1 -0
  175. package/dist/chunk-P3QMT3AY.mjs +44 -0
  176. package/dist/chunk-P3QMT3AY.mjs.map +1 -0
  177. package/dist/chunk-PJ4KYAQZ.mjs +631 -0
  178. package/dist/chunk-PJ4KYAQZ.mjs.map +1 -0
  179. package/dist/chunk-PLSEAREM.js +345 -0
  180. package/dist/chunk-PLSEAREM.js.map +1 -0
  181. package/dist/{chunk-EGJPS7OL.mjs → chunk-QZU4UJZG.mjs} +3 -3
  182. package/dist/{chunk-EGJPS7OL.mjs.map → chunk-QZU4UJZG.mjs.map} +1 -1
  183. package/dist/chunk-RJVR33ME.mjs +3 -0
  184. package/dist/chunk-RJVR33ME.mjs.map +1 -0
  185. package/dist/chunk-SYBHDB2D.js +650 -0
  186. package/dist/chunk-SYBHDB2D.js.map +1 -0
  187. package/dist/chunk-TVKVM7JT.js +21 -0
  188. package/dist/chunk-TVKVM7JT.js.map +1 -0
  189. package/dist/{chunk-PONZPO3U.mjs → chunk-UTB72ZJ7.mjs} +414 -1448
  190. package/dist/chunk-UTB72ZJ7.mjs.map +1 -0
  191. package/dist/chunk-V7EVKD5G.mjs +116 -0
  192. package/dist/chunk-V7EVKD5G.mjs.map +1 -0
  193. package/dist/chunk-VGPR3KLR.js +872 -0
  194. package/dist/chunk-VGPR3KLR.js.map +1 -0
  195. package/dist/chunk-VS7WATQD.js +255 -0
  196. package/dist/chunk-VS7WATQD.js.map +1 -0
  197. package/dist/chunk-VSP7XJT5.mjs +272 -0
  198. package/dist/chunk-VSP7XJT5.mjs.map +1 -0
  199. package/dist/{chunk-CSDIPQQO.mjs → chunk-VTKAIOP5.mjs} +5 -5
  200. package/dist/{chunk-CSDIPQQO.mjs.map → chunk-VTKAIOP5.mjs.map} +1 -1
  201. package/dist/chunk-VULJUXTF.mjs +267 -0
  202. package/dist/chunk-VULJUXTF.mjs.map +1 -0
  203. package/dist/chunk-XAHM6B3V.js +44 -0
  204. package/dist/chunk-XAHM6B3V.js.map +1 -0
  205. package/dist/chunk-YSF5YISM.mjs +248 -0
  206. package/dist/chunk-YSF5YISM.mjs.map +1 -0
  207. package/dist/{chunk-OFYBMMWT.mjs → chunk-YYJEVAJI.mjs} +3 -3
  208. package/dist/{chunk-OFYBMMWT.mjs.map → chunk-YYJEVAJI.mjs.map} +1 -1
  209. package/dist/components/index.d.mts +1 -0
  210. package/dist/components/index.d.ts +1 -0
  211. package/dist/components/index.js +182 -181
  212. package/dist/components/index.mjs +4 -3
  213. package/dist/index-DNKZ7-R_.d.mts +184 -0
  214. package/dist/index-DNKZ7-R_.d.ts +184 -0
  215. package/dist/index.d.mts +4 -1
  216. package/dist/index.d.ts +4 -1
  217. package/dist/index.js +285 -229
  218. package/dist/index.js.map +1 -1
  219. package/dist/index.mjs +15 -10
  220. package/dist/index.mjs.map +1 -1
  221. package/dist/mikuFusionGame/index.js +3 -3
  222. package/dist/mikuFusionGame/index.mjs +2 -2
  223. package/dist/mmd/index.d.mts +67 -9
  224. package/dist/mmd/index.d.ts +67 -9
  225. package/dist/mmd/index.js +969 -625
  226. package/dist/mmd/index.js.map +1 -1
  227. package/dist/mmd/index.mjs +969 -628
  228. package/dist/mmd/index.mjs.map +1 -1
  229. package/dist/portfolio/index.js +10 -9
  230. package/dist/portfolio/index.mjs +5 -4
  231. package/dist/qqbot/index.d.mts +2 -0
  232. package/dist/qqbot/index.d.ts +2 -0
  233. package/dist/qqbot/index.js +21 -0
  234. package/dist/qqbot/index.js.map +1 -0
  235. package/dist/qqbot/index.mjs +4 -0
  236. package/dist/qqbot/index.mjs.map +1 -0
  237. package/dist/qqbot/server/index.d.mts +91 -0
  238. package/dist/qqbot/server/index.d.ts +91 -0
  239. package/dist/qqbot/server/index.js +21 -0
  240. package/dist/qqbot/server/index.js.map +1 -0
  241. package/dist/qqbot/server/index.mjs +4 -0
  242. package/dist/qqbot/server/index.mjs.map +1 -0
  243. package/dist/qqbot/ui/web/index.d.mts +10 -0
  244. package/dist/qqbot/ui/web/index.d.ts +10 -0
  245. package/dist/qqbot/ui/web/index.js +105 -0
  246. package/dist/qqbot/ui/web/index.js.map +1 -0
  247. package/dist/qqbot/ui/web/index.mjs +99 -0
  248. package/dist/qqbot/ui/web/index.mjs.map +1 -0
  249. package/dist/screenReceiver/index.d.mts +78 -0
  250. package/dist/screenReceiver/index.d.ts +78 -0
  251. package/dist/screenReceiver/index.js +17 -0
  252. package/dist/screenReceiver/index.js.map +1 -0
  253. package/dist/screenReceiver/index.mjs +4 -0
  254. package/dist/screenReceiver/index.mjs.map +1 -0
  255. package/dist/screenReceiver/server/index.d.mts +36 -0
  256. package/dist/screenReceiver/server/index.d.ts +36 -0
  257. package/dist/screenReceiver/server/index.js +160 -0
  258. package/dist/screenReceiver/server/index.js.map +1 -0
  259. package/dist/screenReceiver/server/index.mjs +157 -0
  260. package/dist/screenReceiver/server/index.mjs.map +1 -0
  261. package/dist/showmasterpiece/db/index.js +42 -42
  262. package/dist/showmasterpiece/db/index.mjs +1 -1
  263. package/dist/showmasterpiece/index.js +52 -41
  264. package/dist/showmasterpiece/index.js.map +1 -1
  265. package/dist/showmasterpiece/index.mjs +15 -4
  266. package/dist/showmasterpiece/index.mjs.map +1 -1
  267. package/dist/showmasterpiece/server/index.js +42 -42
  268. package/dist/showmasterpiece/server/index.mjs +1 -1
  269. package/dist/showmasterpiece/ui/miniapp/index.d.mts +2 -0
  270. package/dist/showmasterpiece/ui/miniapp/index.d.ts +2 -0
  271. package/dist/showmasterpiece/ui/miniapp/index.js +83 -55
  272. package/dist/showmasterpiece/ui/miniapp/index.js.map +1 -1
  273. package/dist/showmasterpiece/ui/miniapp/index.mjs +83 -55
  274. package/dist/showmasterpiece/ui/miniapp/index.mjs.map +1 -1
  275. package/dist/showmasterpiece/ui/web/index.js +43 -32
  276. package/dist/showmasterpiece/ui/web/index.mjs +15 -4
  277. package/dist/testYourself/index.js +13 -13
  278. package/dist/testYourself/index.mjs +2 -2
  279. package/dist/types-B-hOccQw.d.mts +122 -0
  280. package/dist/types-B8rGXc4e.d.mts +38 -0
  281. package/dist/types-Cg89HGz2.d.ts +38 -0
  282. package/dist/types-CvKvpyN8.d.mts +48 -0
  283. package/dist/types-CvKvpyN8.d.ts +48 -0
  284. package/dist/types-Dy6x2gJW.d.ts +122 -0
  285. package/dist/universalFile/server/index.js +11 -11
  286. package/dist/universalFile/server/index.mjs +4 -4
  287. package/package.json +101 -1
  288. package/dist/UniversalFileService-336GFY6N.mjs +0 -6
  289. package/dist/UniversalFileService-J6ET6KZK.js +0 -15
  290. package/dist/chunk-622Y6LTH.mjs.map +0 -1
  291. package/dist/chunk-CYTXGBP2.js.map +0 -1
  292. package/dist/chunk-GVVS4IMM.mjs +0 -302
  293. package/dist/chunk-GVVS4IMM.mjs.map +0 -1
  294. package/dist/chunk-PONZPO3U.mjs.map +0 -1
  295. package/dist/chunk-WC5QFO3T.js +0 -314
  296. package/dist/chunk-WC5QFO3T.js.map +0 -1
  297. package/dist/chunk-ZRWED7Q6.js.map +0 -1
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var chunk27IUMDDK_js = require('./chunk-27IUMDDK.js');
4
+ require('./chunk-ZRAW3HXA.js');
5
+ require('./chunk-25OFOKNF.js');
6
+ require('./chunk-Z6ZWNWWR.js');
7
+
8
+
9
+
10
+ Object.defineProperty(exports, "UniversalFileService", {
11
+ enumerable: true,
12
+ get: function () { return chunk27IUMDDK_js.UniversalFileService; }
13
+ });
14
+ //# sourceMappingURL=UniversalFileService-C3WQAFOV.js.map
15
+ //# sourceMappingURL=UniversalFileService-C3WQAFOV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"UniversalFileService-J6ET6KZK.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"UniversalFileService-C3WQAFOV.js"}
@@ -0,0 +1,6 @@
1
+ export { UniversalFileService } from './chunk-57MVE5LL.mjs';
2
+ import './chunk-CIVO4R6N.mjs';
3
+ import './chunk-3DXPQ4YV.mjs';
4
+ import './chunk-WMJKH4XE.mjs';
5
+ //# sourceMappingURL=UniversalFileService-O3IEROBN.mjs.map
6
+ //# sourceMappingURL=UniversalFileService-O3IEROBN.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"UniversalFileService-336GFY6N.mjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"UniversalFileService-O3IEROBN.mjs"}
@@ -0,0 +1,70 @@
1
+ import { m as AiClientConfig, A as AiClient, o as AiChatSessionOptions, p as AiChatSession, P as PromptVariables, s as AiProvider, a as AiMessage, n as AiChatStatus, c as AiChatResponse, b as AiChatInputOptions, l as AiLogger, f as AiToolDefinition } from '../../types-B-hOccQw.mjs';
2
+ export { k as AiChatChunk, j as AiChatRequest, i as AiChatRequestOptions, d as AiRole, g as AiToolCall, e as AiToolChoice, h as AiUsage, q as PromptVariableValue, R as ResolvedAiClientConfig, r as normalizePromptVariables } from '../../types-B-hOccQw.mjs';
3
+ import '../../types-CbTsi9CZ.mjs';
4
+
5
+ declare const createAiClient: (config: AiClientConfig) => AiClient;
6
+
7
+ declare const createChatSession: (options: AiChatSessionOptions) => AiChatSession;
8
+
9
+ interface PromptTemplateOptions {
10
+ missingValue?: string;
11
+ preserveUnknown?: boolean;
12
+ }
13
+ declare const applyPromptTemplate: (template: string, variables?: PromptVariables, options?: PromptTemplateOptions) => string;
14
+
15
+ declare const DEFAULT_OPENAI_BASE_URL = "https://api.openai.com/v1";
16
+ declare const DEFAULT_OPENAI_MODEL = "gpt-3.5-turbo";
17
+ declare const createOpenAICompatibleProvider: () => AiProvider;
18
+
19
+ interface UseAiChatOptions {
20
+ client: AiClient;
21
+ systemPrompt?: string;
22
+ template?: string;
23
+ initialMessages?: AiMessage[];
24
+ }
25
+ declare const useAiChat: (options: UseAiChatOptions) => {
26
+ status: AiChatStatus;
27
+ isLoading: boolean;
28
+ error: Error | null;
29
+ messages: AiMessage[];
30
+ lastResponse: AiChatResponse | null;
31
+ sendMessage: (input: string, requestOptions?: AiChatInputOptions) => Promise<AiChatResponse>;
32
+ reset: () => void;
33
+ setSystemPrompt: (prompt?: string) => void;
34
+ };
35
+
36
+ type SkillInputSchema = Record<string, any>;
37
+ interface SkillExecutionContext {
38
+ messages?: AiMessage[];
39
+ logger?: AiLogger;
40
+ metadata?: Record<string, any>;
41
+ }
42
+ interface SkillDefinition<Input = any, Output = any> {
43
+ name: string;
44
+ description?: string;
45
+ inputSchema?: SkillInputSchema;
46
+ execute: (input: Input, context?: SkillExecutionContext) => Promise<Output> | Output;
47
+ }
48
+ interface SkillRegistry {
49
+ registerSkill(skill: SkillDefinition): void;
50
+ unregisterSkill(name: string): boolean;
51
+ getSkill(name: string): SkillDefinition | undefined;
52
+ listSkills(): SkillDefinition[];
53
+ executeSkill(name: string, input: any, context?: SkillExecutionContext): Promise<any>;
54
+ toToolDefinitions?(): AiToolDefinition[];
55
+ }
56
+
57
+ declare const skillToToolDefinition: (skill: SkillDefinition) => AiToolDefinition;
58
+ declare class InMemorySkillRegistry implements SkillRegistry {
59
+ private skills;
60
+ constructor(initialSkills?: SkillDefinition[]);
61
+ registerSkill(skill: SkillDefinition): void;
62
+ unregisterSkill(name: string): boolean;
63
+ getSkill(name: string): SkillDefinition | undefined;
64
+ listSkills(): SkillDefinition[];
65
+ executeSkill(name: string, input: any, context?: SkillExecutionContext): Promise<any>;
66
+ toToolDefinitions(): AiToolDefinition[];
67
+ }
68
+ declare const createSkillRegistry: (initialSkills?: SkillDefinition[]) => InMemorySkillRegistry;
69
+
70
+ export { AiChatInputOptions, AiChatResponse, AiChatSession, AiChatSessionOptions, AiChatStatus, AiClient, AiClientConfig, AiLogger, AiMessage, AiProvider, AiToolDefinition, DEFAULT_OPENAI_BASE_URL, DEFAULT_OPENAI_MODEL, InMemorySkillRegistry, type PromptTemplateOptions, PromptVariables, type SkillDefinition, type SkillExecutionContext, type SkillInputSchema, type SkillRegistry, type UseAiChatOptions, applyPromptTemplate, createAiClient, createChatSession, createOpenAICompatibleProvider, createSkillRegistry, skillToToolDefinition, useAiChat };
@@ -0,0 +1,70 @@
1
+ import { m as AiClientConfig, A as AiClient, o as AiChatSessionOptions, p as AiChatSession, P as PromptVariables, s as AiProvider, a as AiMessage, n as AiChatStatus, c as AiChatResponse, b as AiChatInputOptions, l as AiLogger, f as AiToolDefinition } from '../../types-Dy6x2gJW.js';
2
+ export { k as AiChatChunk, j as AiChatRequest, i as AiChatRequestOptions, d as AiRole, g as AiToolCall, e as AiToolChoice, h as AiUsage, q as PromptVariableValue, R as ResolvedAiClientConfig, r as normalizePromptVariables } from '../../types-Dy6x2gJW.js';
3
+ import '../../types-CbTsi9CZ.js';
4
+
5
+ declare const createAiClient: (config: AiClientConfig) => AiClient;
6
+
7
+ declare const createChatSession: (options: AiChatSessionOptions) => AiChatSession;
8
+
9
+ interface PromptTemplateOptions {
10
+ missingValue?: string;
11
+ preserveUnknown?: boolean;
12
+ }
13
+ declare const applyPromptTemplate: (template: string, variables?: PromptVariables, options?: PromptTemplateOptions) => string;
14
+
15
+ declare const DEFAULT_OPENAI_BASE_URL = "https://api.openai.com/v1";
16
+ declare const DEFAULT_OPENAI_MODEL = "gpt-3.5-turbo";
17
+ declare const createOpenAICompatibleProvider: () => AiProvider;
18
+
19
+ interface UseAiChatOptions {
20
+ client: AiClient;
21
+ systemPrompt?: string;
22
+ template?: string;
23
+ initialMessages?: AiMessage[];
24
+ }
25
+ declare const useAiChat: (options: UseAiChatOptions) => {
26
+ status: AiChatStatus;
27
+ isLoading: boolean;
28
+ error: Error | null;
29
+ messages: AiMessage[];
30
+ lastResponse: AiChatResponse | null;
31
+ sendMessage: (input: string, requestOptions?: AiChatInputOptions) => Promise<AiChatResponse>;
32
+ reset: () => void;
33
+ setSystemPrompt: (prompt?: string) => void;
34
+ };
35
+
36
+ type SkillInputSchema = Record<string, any>;
37
+ interface SkillExecutionContext {
38
+ messages?: AiMessage[];
39
+ logger?: AiLogger;
40
+ metadata?: Record<string, any>;
41
+ }
42
+ interface SkillDefinition<Input = any, Output = any> {
43
+ name: string;
44
+ description?: string;
45
+ inputSchema?: SkillInputSchema;
46
+ execute: (input: Input, context?: SkillExecutionContext) => Promise<Output> | Output;
47
+ }
48
+ interface SkillRegistry {
49
+ registerSkill(skill: SkillDefinition): void;
50
+ unregisterSkill(name: string): boolean;
51
+ getSkill(name: string): SkillDefinition | undefined;
52
+ listSkills(): SkillDefinition[];
53
+ executeSkill(name: string, input: any, context?: SkillExecutionContext): Promise<any>;
54
+ toToolDefinitions?(): AiToolDefinition[];
55
+ }
56
+
57
+ declare const skillToToolDefinition: (skill: SkillDefinition) => AiToolDefinition;
58
+ declare class InMemorySkillRegistry implements SkillRegistry {
59
+ private skills;
60
+ constructor(initialSkills?: SkillDefinition[]);
61
+ registerSkill(skill: SkillDefinition): void;
62
+ unregisterSkill(name: string): boolean;
63
+ getSkill(name: string): SkillDefinition | undefined;
64
+ listSkills(): SkillDefinition[];
65
+ executeSkill(name: string, input: any, context?: SkillExecutionContext): Promise<any>;
66
+ toToolDefinitions(): AiToolDefinition[];
67
+ }
68
+ declare const createSkillRegistry: (initialSkills?: SkillDefinition[]) => InMemorySkillRegistry;
69
+
70
+ export { AiChatInputOptions, AiChatResponse, AiChatSession, AiChatSessionOptions, AiChatStatus, AiClient, AiClientConfig, AiLogger, AiMessage, AiProvider, AiToolDefinition, DEFAULT_OPENAI_BASE_URL, DEFAULT_OPENAI_MODEL, InMemorySkillRegistry, type PromptTemplateOptions, PromptVariables, type SkillDefinition, type SkillExecutionContext, type SkillInputSchema, type SkillRegistry, type UseAiChatOptions, applyPromptTemplate, createAiClient, createChatSession, createOpenAICompatibleProvider, createSkillRegistry, skillToToolDefinition, useAiChat };
@@ -0,0 +1,54 @@
1
+ 'use strict';
2
+
3
+ var chunkPLSEAREM_js = require('../../chunk-PLSEAREM.js');
4
+ var chunkFXQOXLDE_js = require('../../chunk-FXQOXLDE.js');
5
+ require('../../chunk-Z6ZWNWWR.js');
6
+
7
+
8
+
9
+ Object.defineProperty(exports, "DEFAULT_OPENAI_BASE_URL", {
10
+ enumerable: true,
11
+ get: function () { return chunkPLSEAREM_js.DEFAULT_OPENAI_BASE_URL; }
12
+ });
13
+ Object.defineProperty(exports, "DEFAULT_OPENAI_MODEL", {
14
+ enumerable: true,
15
+ get: function () { return chunkPLSEAREM_js.DEFAULT_OPENAI_MODEL; }
16
+ });
17
+ Object.defineProperty(exports, "InMemorySkillRegistry", {
18
+ enumerable: true,
19
+ get: function () { return chunkPLSEAREM_js.InMemorySkillRegistry; }
20
+ });
21
+ Object.defineProperty(exports, "createAiClient", {
22
+ enumerable: true,
23
+ get: function () { return chunkPLSEAREM_js.createAiClient; }
24
+ });
25
+ Object.defineProperty(exports, "createChatSession", {
26
+ enumerable: true,
27
+ get: function () { return chunkPLSEAREM_js.createChatSession; }
28
+ });
29
+ Object.defineProperty(exports, "createOpenAICompatibleProvider", {
30
+ enumerable: true,
31
+ get: function () { return chunkPLSEAREM_js.createOpenAICompatibleProvider; }
32
+ });
33
+ Object.defineProperty(exports, "createSkillRegistry", {
34
+ enumerable: true,
35
+ get: function () { return chunkPLSEAREM_js.createSkillRegistry; }
36
+ });
37
+ Object.defineProperty(exports, "skillToToolDefinition", {
38
+ enumerable: true,
39
+ get: function () { return chunkPLSEAREM_js.skillToToolDefinition; }
40
+ });
41
+ Object.defineProperty(exports, "applyPromptTemplate", {
42
+ enumerable: true,
43
+ get: function () { return chunkFXQOXLDE_js.applyPromptTemplate; }
44
+ });
45
+ Object.defineProperty(exports, "normalizePromptVariables", {
46
+ enumerable: true,
47
+ get: function () { return chunkFXQOXLDE_js.normalizePromptVariables; }
48
+ });
49
+ Object.defineProperty(exports, "useAiChat", {
50
+ enumerable: true,
51
+ get: function () { return chunkFXQOXLDE_js.useAiChat; }
52
+ });
53
+ //# sourceMappingURL=index.js.map
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,5 @@
1
+ export { DEFAULT_OPENAI_BASE_URL, DEFAULT_OPENAI_MODEL, InMemorySkillRegistry, createAiClient, createChatSession, createOpenAICompatibleProvider, createSkillRegistry, skillToToolDefinition } from '../../chunk-D22QBOCM.mjs';
2
+ export { applyPromptTemplate, normalizePromptVariables, useAiChat } from '../../chunk-V7EVKD5G.mjs';
3
+ import '../../chunk-WMJKH4XE.mjs';
4
+ //# sourceMappingURL=index.mjs.map
5
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
@@ -0,0 +1,5 @@
1
+ export { AiChatDialog, AiConfigPage } from '../web/index.mjs';
2
+ export { a as AiChatDialogBaseProps, A as AiChatDialogProps, c as AiConfigPageProps, b as AiUiConfig } from '../../../../types-B8rGXc4e.mjs';
3
+ import 'react';
4
+ import '../../../../types-B-hOccQw.mjs';
5
+ import '../../../../types-CbTsi9CZ.mjs';
@@ -0,0 +1,5 @@
1
+ export { AiChatDialog, AiConfigPage } from '../web/index.js';
2
+ export { a as AiChatDialogBaseProps, A as AiChatDialogProps, c as AiConfigPageProps, b as AiUiConfig } from '../../../../types-Cg89HGz2.js';
3
+ import 'react';
4
+ import '../../../../types-Dy6x2gJW.js';
5
+ import '../../../../types-CbTsi9CZ.js';
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var chunk37M6NZIF_js = require('../../../../chunk-37M6NZIF.js');
4
+ require('../../../../chunk-ERAAB5VG.js');
5
+ require('../../../../chunk-FXQOXLDE.js');
6
+ require('../../../../chunk-ZWQJSZEY.js');
7
+ require('../../../../chunk-25OFOKNF.js');
8
+ require('../../../../chunk-Z6ZWNWWR.js');
9
+
10
+
11
+
12
+ Object.defineProperty(exports, "AiChatDialog", {
13
+ enumerable: true,
14
+ get: function () { return chunk37M6NZIF_js.AiChatDialog; }
15
+ });
16
+ Object.defineProperty(exports, "AiConfigPage", {
17
+ enumerable: true,
18
+ get: function () { return chunk37M6NZIF_js.AiConfigPage; }
19
+ });
20
+ //# sourceMappingURL=index.js.map
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,8 @@
1
+ export { AiChatDialog, AiConfigPage } from '../../../../chunk-VSP7XJT5.mjs';
2
+ import '../../../../chunk-L7GQNY54.mjs';
3
+ import '../../../../chunk-V7EVKD5G.mjs';
4
+ import '../../../../chunk-3NHAT7D4.mjs';
5
+ import '../../../../chunk-3DXPQ4YV.mjs';
6
+ import '../../../../chunk-WMJKH4XE.mjs';
7
+ //# sourceMappingURL=index.mjs.map
8
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
@@ -0,0 +1,9 @@
1
+ import React__default from 'react';
2
+ import { A as AiChatDialogProps } from '../../../../types-B8rGXc4e.mjs';
3
+ export { a as AiChatDialogBaseProps, c as AiConfigPageProps, b as AiUiConfig } from '../../../../types-B8rGXc4e.mjs';
4
+ import '../../../../types-B-hOccQw.mjs';
5
+ import '../../../../types-CbTsi9CZ.mjs';
6
+
7
+ declare const AiChatDialog: React__default.FC<AiChatDialogProps>;
8
+
9
+ export { AiChatDialog, AiChatDialogProps };
@@ -0,0 +1,9 @@
1
+ import React__default from 'react';
2
+ import { A as AiChatDialogProps } from '../../../../types-Cg89HGz2.js';
3
+ export { a as AiChatDialogBaseProps, c as AiConfigPageProps, b as AiUiConfig } from '../../../../types-Cg89HGz2.js';
4
+ import '../../../../types-Dy6x2gJW.js';
5
+ import '../../../../types-CbTsi9CZ.js';
6
+
7
+ declare const AiChatDialog: React__default.FC<AiChatDialogProps>;
8
+
9
+ export { AiChatDialog, AiChatDialogProps };
@@ -0,0 +1,107 @@
1
+ 'use strict';
2
+
3
+ var chunkFXQOXLDE_js = require('../../../../chunk-FXQOXLDE.js');
4
+ require('../../../../chunk-Z6ZWNWWR.js');
5
+ var React = require('react');
6
+ var components = require('@tarojs/components');
7
+
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
+
10
+ var React__default = /*#__PURE__*/_interopDefault(React);
11
+
12
+ var AiChatDialog = ({
13
+ open,
14
+ onOpenChange,
15
+ client,
16
+ title = "AI \u5BF9\u8BDD",
17
+ placeholder = "\u8F93\u5165\u4F60\u60F3\u54A8\u8BE2\u7684\u95EE\u9898...",
18
+ systemPrompt,
19
+ template,
20
+ templateVariables,
21
+ initialMessages,
22
+ requestOptions,
23
+ onResponse,
24
+ onError
25
+ }) => {
26
+ const { messages, sendMessage, isLoading, error } = chunkFXQOXLDE_js.useAiChat({
27
+ client,
28
+ systemPrompt,
29
+ template,
30
+ initialMessages
31
+ });
32
+ const [input, setInput] = React.useState("");
33
+ const helperText = React.useMemo(() => {
34
+ return template ? "\u6A21\u677F\u5DF2\u542F\u7528\uFF0C\u652F\u6301 {{input}} \u53D8\u91CF\u3002" : "\u76F4\u63A5\u8F93\u5165\u5373\u53EF\u5F00\u59CB\u5BF9\u8BDD\u3002";
35
+ }, [template]);
36
+ React.useEffect(() => {
37
+ if (!open) {
38
+ setInput("");
39
+ }
40
+ }, [open]);
41
+ const handleSend = async () => {
42
+ const content = input.trim();
43
+ if (!content || isLoading) return;
44
+ setInput("");
45
+ try {
46
+ const response = await sendMessage(content, {
47
+ ...requestOptions,
48
+ template,
49
+ variables: templateVariables
50
+ });
51
+ onResponse?.(response);
52
+ } catch (err) {
53
+ const nextError = err instanceof Error ? err : new Error(String(err));
54
+ onError?.(nextError);
55
+ }
56
+ };
57
+ if (!open) {
58
+ return null;
59
+ }
60
+ return /* @__PURE__ */ React__default.default.createElement(components.View, { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/40 px-4" }, /* @__PURE__ */ React__default.default.createElement(components.View, { className: "w-full max-w-[640px] rounded-2xl bg-white p-4 shadow-lg" }, /* @__PURE__ */ React__default.default.createElement(components.View, { className: "flex items-center justify-between" }, /* @__PURE__ */ React__default.default.createElement(components.Text, { className: "text-base font-semibold text-slate-900" }, title), /* @__PURE__ */ React__default.default.createElement(
61
+ components.Text,
62
+ {
63
+ className: "text-xs text-slate-500",
64
+ onClick: () => onOpenChange?.(false)
65
+ },
66
+ "\u5173\u95ED"
67
+ )), /* @__PURE__ */ React__default.default.createElement(
68
+ components.ScrollView,
69
+ {
70
+ scrollY: true,
71
+ className: "mt-3 max-h-[60vh] rounded-xl border border-slate-100 bg-slate-50/60 p-3"
72
+ },
73
+ messages.length === 0 && /* @__PURE__ */ React__default.default.createElement(components.View, { className: "flex flex-col items-center justify-center py-8 text-xs text-slate-400" }, /* @__PURE__ */ React__default.default.createElement(components.Text, null, "\u6682\u65E0\u5BF9\u8BDD\u5185\u5BB9"), /* @__PURE__ */ React__default.default.createElement(components.Text, null, "\u8F93\u5165\u6D88\u606F\u5F00\u59CB\u4F53\u9A8C AI \u5BF9\u8BDD\u3002")),
74
+ /* @__PURE__ */ React__default.default.createElement(components.View, { className: "flex flex-col gap-3" }, messages.map((message, index) => {
75
+ const isUser = message.role === "user";
76
+ return /* @__PURE__ */ React__default.default.createElement(
77
+ components.View,
78
+ {
79
+ key: `${message.role}-${index}`,
80
+ className: `max-w-[85%] rounded-2xl px-3 py-2 text-xs leading-relaxed ${isUser ? "ml-auto bg-slate-900 text-white" : "mr-auto border border-slate-200 bg-white text-slate-800"}`
81
+ },
82
+ /* @__PURE__ */ React__default.default.createElement(components.Text, null, message.content)
83
+ );
84
+ }), isLoading && /* @__PURE__ */ React__default.default.createElement(components.View, { className: "mr-auto max-w-[70%] rounded-2xl border border-slate-200 bg-white px-3 py-2 text-xs text-slate-500" }, /* @__PURE__ */ React__default.default.createElement(components.Text, null, "AI \u6B63\u5728\u601D\u8003...")))
85
+ ), /* @__PURE__ */ React__default.default.createElement(components.View, { className: "mt-3 rounded-xl border border-slate-100 bg-white p-3" }, /* @__PURE__ */ React__default.default.createElement(
86
+ components.Textarea,
87
+ {
88
+ value: input,
89
+ onInput: (event) => setInput(event.detail.value),
90
+ placeholder,
91
+ className: "min-h-[88px] w-full rounded-lg border border-slate-200 px-3 py-2 text-xs"
92
+ }
93
+ ), /* @__PURE__ */ React__default.default.createElement(components.View, { className: "mt-2 flex items-center justify-between" }, /* @__PURE__ */ React__default.default.createElement(components.Text, { className: "text-[10px] text-slate-400" }, helperText), /* @__PURE__ */ React__default.default.createElement(
94
+ components.Button,
95
+ {
96
+ size: "mini",
97
+ className: "bg-slate-900 text-white",
98
+ disabled: !input.trim() || isLoading,
99
+ onClick: handleSend
100
+ },
101
+ isLoading ? "\u53D1\u9001\u4E2D..." : "\u53D1\u9001"
102
+ )), error && /* @__PURE__ */ React__default.default.createElement(components.View, { className: "mt-2 rounded-md border border-rose-200 bg-rose-50 px-2 py-1 text-[10px] text-rose-600" }, /* @__PURE__ */ React__default.default.createElement(components.Text, null, error.message || "\u5BF9\u8BDD\u51FA\u9519\uFF0C\u8BF7\u91CD\u8BD5\u3002")))));
103
+ };
104
+
105
+ exports.AiChatDialog = AiChatDialog;
106
+ //# sourceMappingURL=index.js.map
107
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/ai/llm/ui/miniapp/components/AiChatDialog.tsx"],"names":["useAiChat","useState","useMemo","useEffect","View","React","Text","ScrollView","Textarea","Button"],"mappings":"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","file":"index.js","sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { Button, ScrollView, Text, Textarea, View } from '@tarojs/components';\nimport { useAiChat } from '../../../hooks/useAiChat';\nimport type { AiChatDialogProps } from '../../types';\n\nexport const AiChatDialog: React.FC<AiChatDialogProps> = ({\n open,\n onOpenChange,\n client,\n title = 'AI 对话',\n placeholder = '输入你想咨询的问题...',\n systemPrompt,\n template,\n templateVariables,\n initialMessages,\n requestOptions,\n onResponse,\n onError,\n}) => {\n const { messages, sendMessage, isLoading, error } = useAiChat({\n client,\n systemPrompt,\n template,\n initialMessages,\n });\n const [input, setInput] = useState('');\n\n const helperText = useMemo(() => {\n return template ? '模板已启用,支持 {{input}} 变量。' : '直接输入即可开始对话。';\n }, [template]);\n\n useEffect(() => {\n if (!open) {\n setInput('');\n }\n }, [open]);\n\n const handleSend = async () => {\n const content = input.trim();\n if (!content || isLoading) return;\n setInput('');\n try {\n const response = await sendMessage(content, {\n ...requestOptions,\n template,\n variables: templateVariables,\n });\n onResponse?.(response);\n } catch (err) {\n const nextError = err instanceof Error ? err : new Error(String(err));\n onError?.(nextError);\n }\n };\n\n if (!open) {\n return null;\n }\n\n return (\n <View className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/40 px-4\">\n <View className=\"w-full max-w-[640px] rounded-2xl bg-white p-4 shadow-lg\">\n <View className=\"flex items-center justify-between\">\n <Text className=\"text-base font-semibold text-slate-900\">{title}</Text>\n <Text\n className=\"text-xs text-slate-500\"\n onClick={() => onOpenChange?.(false)}\n >\n 关闭\n </Text>\n </View>\n\n <ScrollView\n scrollY\n className=\"mt-3 max-h-[60vh] rounded-xl border border-slate-100 bg-slate-50/60 p-3\"\n >\n {messages.length === 0 && (\n <View className=\"flex flex-col items-center justify-center py-8 text-xs text-slate-400\">\n <Text>暂无对话内容</Text>\n <Text>输入消息开始体验 AI 对话。</Text>\n </View>\n )}\n <View className=\"flex flex-col gap-3\">\n {messages.map((message, index) => {\n const isUser = message.role === 'user';\n return (\n <View\n key={`${message.role}-${index}`}\n className={`max-w-[85%] rounded-2xl px-3 py-2 text-xs leading-relaxed ${\n isUser\n ? 'ml-auto bg-slate-900 text-white'\n : 'mr-auto border border-slate-200 bg-white text-slate-800'\n }`}\n >\n <Text>{message.content}</Text>\n </View>\n );\n })}\n {isLoading && (\n <View className=\"mr-auto max-w-[70%] rounded-2xl border border-slate-200 bg-white px-3 py-2 text-xs text-slate-500\">\n <Text>AI 正在思考...</Text>\n </View>\n )}\n </View>\n </ScrollView>\n\n <View className=\"mt-3 rounded-xl border border-slate-100 bg-white p-3\">\n <Textarea\n value={input}\n onInput={(event: { detail: { value: string } }) => setInput(event.detail.value)}\n placeholder={placeholder}\n className=\"min-h-[88px] w-full rounded-lg border border-slate-200 px-3 py-2 text-xs\"\n />\n <View className=\"mt-2 flex items-center justify-between\">\n <Text className=\"text-[10px] text-slate-400\">{helperText}</Text>\n <Button\n size=\"mini\"\n className=\"bg-slate-900 text-white\"\n disabled={!input.trim() || isLoading}\n onClick={handleSend}\n >\n {isLoading ? '发送中...' : '发送'}\n </Button>\n </View>\n {error && (\n <View className=\"mt-2 rounded-md border border-rose-200 bg-rose-50 px-2 py-1 text-[10px] text-rose-600\">\n <Text>{error.message || '对话出错,请重试。'}</Text>\n </View>\n )}\n </View>\n </View>\n </View>\n );\n};\n"]}
@@ -0,0 +1,101 @@
1
+ import { useAiChat } from '../../../../chunk-V7EVKD5G.mjs';
2
+ import '../../../../chunk-WMJKH4XE.mjs';
3
+ import React, { useState, useMemo, useEffect } from 'react';
4
+ import { View, Text, ScrollView, Textarea, Button } from '@tarojs/components';
5
+
6
+ var AiChatDialog = ({
7
+ open,
8
+ onOpenChange,
9
+ client,
10
+ title = "AI \u5BF9\u8BDD",
11
+ placeholder = "\u8F93\u5165\u4F60\u60F3\u54A8\u8BE2\u7684\u95EE\u9898...",
12
+ systemPrompt,
13
+ template,
14
+ templateVariables,
15
+ initialMessages,
16
+ requestOptions,
17
+ onResponse,
18
+ onError
19
+ }) => {
20
+ const { messages, sendMessage, isLoading, error } = useAiChat({
21
+ client,
22
+ systemPrompt,
23
+ template,
24
+ initialMessages
25
+ });
26
+ const [input, setInput] = useState("");
27
+ const helperText = useMemo(() => {
28
+ return template ? "\u6A21\u677F\u5DF2\u542F\u7528\uFF0C\u652F\u6301 {{input}} \u53D8\u91CF\u3002" : "\u76F4\u63A5\u8F93\u5165\u5373\u53EF\u5F00\u59CB\u5BF9\u8BDD\u3002";
29
+ }, [template]);
30
+ useEffect(() => {
31
+ if (!open) {
32
+ setInput("");
33
+ }
34
+ }, [open]);
35
+ const handleSend = async () => {
36
+ const content = input.trim();
37
+ if (!content || isLoading) return;
38
+ setInput("");
39
+ try {
40
+ const response = await sendMessage(content, {
41
+ ...requestOptions,
42
+ template,
43
+ variables: templateVariables
44
+ });
45
+ onResponse?.(response);
46
+ } catch (err) {
47
+ const nextError = err instanceof Error ? err : new Error(String(err));
48
+ onError?.(nextError);
49
+ }
50
+ };
51
+ if (!open) {
52
+ return null;
53
+ }
54
+ return /* @__PURE__ */ React.createElement(View, { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/40 px-4" }, /* @__PURE__ */ React.createElement(View, { className: "w-full max-w-[640px] rounded-2xl bg-white p-4 shadow-lg" }, /* @__PURE__ */ React.createElement(View, { className: "flex items-center justify-between" }, /* @__PURE__ */ React.createElement(Text, { className: "text-base font-semibold text-slate-900" }, title), /* @__PURE__ */ React.createElement(
55
+ Text,
56
+ {
57
+ className: "text-xs text-slate-500",
58
+ onClick: () => onOpenChange?.(false)
59
+ },
60
+ "\u5173\u95ED"
61
+ )), /* @__PURE__ */ React.createElement(
62
+ ScrollView,
63
+ {
64
+ scrollY: true,
65
+ className: "mt-3 max-h-[60vh] rounded-xl border border-slate-100 bg-slate-50/60 p-3"
66
+ },
67
+ messages.length === 0 && /* @__PURE__ */ React.createElement(View, { className: "flex flex-col items-center justify-center py-8 text-xs text-slate-400" }, /* @__PURE__ */ React.createElement(Text, null, "\u6682\u65E0\u5BF9\u8BDD\u5185\u5BB9"), /* @__PURE__ */ React.createElement(Text, null, "\u8F93\u5165\u6D88\u606F\u5F00\u59CB\u4F53\u9A8C AI \u5BF9\u8BDD\u3002")),
68
+ /* @__PURE__ */ React.createElement(View, { className: "flex flex-col gap-3" }, messages.map((message, index) => {
69
+ const isUser = message.role === "user";
70
+ return /* @__PURE__ */ React.createElement(
71
+ View,
72
+ {
73
+ key: `${message.role}-${index}`,
74
+ className: `max-w-[85%] rounded-2xl px-3 py-2 text-xs leading-relaxed ${isUser ? "ml-auto bg-slate-900 text-white" : "mr-auto border border-slate-200 bg-white text-slate-800"}`
75
+ },
76
+ /* @__PURE__ */ React.createElement(Text, null, message.content)
77
+ );
78
+ }), isLoading && /* @__PURE__ */ React.createElement(View, { className: "mr-auto max-w-[70%] rounded-2xl border border-slate-200 bg-white px-3 py-2 text-xs text-slate-500" }, /* @__PURE__ */ React.createElement(Text, null, "AI \u6B63\u5728\u601D\u8003...")))
79
+ ), /* @__PURE__ */ React.createElement(View, { className: "mt-3 rounded-xl border border-slate-100 bg-white p-3" }, /* @__PURE__ */ React.createElement(
80
+ Textarea,
81
+ {
82
+ value: input,
83
+ onInput: (event) => setInput(event.detail.value),
84
+ placeholder,
85
+ className: "min-h-[88px] w-full rounded-lg border border-slate-200 px-3 py-2 text-xs"
86
+ }
87
+ ), /* @__PURE__ */ React.createElement(View, { className: "mt-2 flex items-center justify-between" }, /* @__PURE__ */ React.createElement(Text, { className: "text-[10px] text-slate-400" }, helperText), /* @__PURE__ */ React.createElement(
88
+ Button,
89
+ {
90
+ size: "mini",
91
+ className: "bg-slate-900 text-white",
92
+ disabled: !input.trim() || isLoading,
93
+ onClick: handleSend
94
+ },
95
+ isLoading ? "\u53D1\u9001\u4E2D..." : "\u53D1\u9001"
96
+ )), error && /* @__PURE__ */ React.createElement(View, { className: "mt-2 rounded-md border border-rose-200 bg-rose-50 px-2 py-1 text-[10px] text-rose-600" }, /* @__PURE__ */ React.createElement(Text, null, error.message || "\u5BF9\u8BDD\u51FA\u9519\uFF0C\u8BF7\u91CD\u8BD5\u3002")))));
97
+ };
98
+
99
+ export { AiChatDialog };
100
+ //# sourceMappingURL=index.mjs.map
101
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/ai/llm/ui/miniapp/components/AiChatDialog.tsx"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { Button, ScrollView, Text, Textarea, View } from '@tarojs/components';\nimport { useAiChat } from '../../../hooks/useAiChat';\nimport type { AiChatDialogProps } from '../../types';\n\nexport const AiChatDialog: React.FC<AiChatDialogProps> = ({\n open,\n onOpenChange,\n client,\n title = 'AI 对话',\n placeholder = '输入你想咨询的问题...',\n systemPrompt,\n template,\n templateVariables,\n initialMessages,\n requestOptions,\n onResponse,\n onError,\n}) => {\n const { messages, sendMessage, isLoading, error } = useAiChat({\n client,\n systemPrompt,\n template,\n initialMessages,\n });\n const [input, setInput] = useState('');\n\n const helperText = useMemo(() => {\n return template ? '模板已启用,支持 {{input}} 变量。' : '直接输入即可开始对话。';\n }, [template]);\n\n useEffect(() => {\n if (!open) {\n setInput('');\n }\n }, [open]);\n\n const handleSend = async () => {\n const content = input.trim();\n if (!content || isLoading) return;\n setInput('');\n try {\n const response = await sendMessage(content, {\n ...requestOptions,\n template,\n variables: templateVariables,\n });\n onResponse?.(response);\n } catch (err) {\n const nextError = err instanceof Error ? err : new Error(String(err));\n onError?.(nextError);\n }\n };\n\n if (!open) {\n return null;\n }\n\n return (\n <View className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/40 px-4\">\n <View className=\"w-full max-w-[640px] rounded-2xl bg-white p-4 shadow-lg\">\n <View className=\"flex items-center justify-between\">\n <Text className=\"text-base font-semibold text-slate-900\">{title}</Text>\n <Text\n className=\"text-xs text-slate-500\"\n onClick={() => onOpenChange?.(false)}\n >\n 关闭\n </Text>\n </View>\n\n <ScrollView\n scrollY\n className=\"mt-3 max-h-[60vh] rounded-xl border border-slate-100 bg-slate-50/60 p-3\"\n >\n {messages.length === 0 && (\n <View className=\"flex flex-col items-center justify-center py-8 text-xs text-slate-400\">\n <Text>暂无对话内容</Text>\n <Text>输入消息开始体验 AI 对话。</Text>\n </View>\n )}\n <View className=\"flex flex-col gap-3\">\n {messages.map((message, index) => {\n const isUser = message.role === 'user';\n return (\n <View\n key={`${message.role}-${index}`}\n className={`max-w-[85%] rounded-2xl px-3 py-2 text-xs leading-relaxed ${\n isUser\n ? 'ml-auto bg-slate-900 text-white'\n : 'mr-auto border border-slate-200 bg-white text-slate-800'\n }`}\n >\n <Text>{message.content}</Text>\n </View>\n );\n })}\n {isLoading && (\n <View className=\"mr-auto max-w-[70%] rounded-2xl border border-slate-200 bg-white px-3 py-2 text-xs text-slate-500\">\n <Text>AI 正在思考...</Text>\n </View>\n )}\n </View>\n </ScrollView>\n\n <View className=\"mt-3 rounded-xl border border-slate-100 bg-white p-3\">\n <Textarea\n value={input}\n onInput={(event: { detail: { value: string } }) => setInput(event.detail.value)}\n placeholder={placeholder}\n className=\"min-h-[88px] w-full rounded-lg border border-slate-200 px-3 py-2 text-xs\"\n />\n <View className=\"mt-2 flex items-center justify-between\">\n <Text className=\"text-[10px] text-slate-400\">{helperText}</Text>\n <Button\n size=\"mini\"\n className=\"bg-slate-900 text-white\"\n disabled={!input.trim() || isLoading}\n onClick={handleSend}\n >\n {isLoading ? '发送中...' : '发送'}\n </Button>\n </View>\n {error && (\n <View className=\"mt-2 rounded-md border border-rose-200 bg-rose-50 px-2 py-1 text-[10px] text-rose-600\">\n <Text>{error.message || '对话出错,请重试。'}</Text>\n </View>\n )}\n </View>\n </View>\n </View>\n );\n};\n"]}
@@ -0,0 +1,9 @@
1
+ import React__default from 'react';
2
+ import { A as AiChatDialogProps } from '../../../../types-B8rGXc4e.mjs';
3
+ export { a as AiChatDialogBaseProps, c as AiConfigPageProps, b as AiUiConfig } from '../../../../types-B8rGXc4e.mjs';
4
+ import '../../../../types-B-hOccQw.mjs';
5
+ import '../../../../types-CbTsi9CZ.mjs';
6
+
7
+ declare const AiChatDialog: React__default.FC<AiChatDialogProps>;
8
+
9
+ export { AiChatDialog, AiChatDialogProps };
@@ -0,0 +1,9 @@
1
+ import React__default from 'react';
2
+ import { A as AiChatDialogProps } from '../../../../types-Cg89HGz2.js';
3
+ export { a as AiChatDialogBaseProps, c as AiConfigPageProps, b as AiUiConfig } from '../../../../types-Cg89HGz2.js';
4
+ import '../../../../types-Dy6x2gJW.js';
5
+ import '../../../../types-CbTsi9CZ.js';
6
+
7
+ declare const AiChatDialog: React__default.FC<AiChatDialogProps>;
8
+
9
+ export { AiChatDialog, AiChatDialogProps };