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.
- package/dist/UniversalFileService-C3WQAFOV.js +15 -0
- package/dist/{UniversalFileService-J6ET6KZK.js.map → UniversalFileService-C3WQAFOV.js.map} +1 -1
- package/dist/UniversalFileService-O3IEROBN.mjs +6 -0
- package/dist/{UniversalFileService-336GFY6N.mjs.map → UniversalFileService-O3IEROBN.mjs.map} +1 -1
- package/dist/ai/llm/index.d.mts +70 -0
- package/dist/ai/llm/index.d.ts +70 -0
- package/dist/ai/llm/index.js +54 -0
- package/dist/ai/llm/index.js.map +1 -0
- package/dist/ai/llm/index.mjs +5 -0
- package/dist/ai/llm/index.mjs.map +1 -0
- package/dist/ai/llm/ui/electron/index.d.mts +5 -0
- package/dist/ai/llm/ui/electron/index.d.ts +5 -0
- package/dist/ai/llm/ui/electron/index.js +21 -0
- package/dist/ai/llm/ui/electron/index.js.map +1 -0
- package/dist/ai/llm/ui/electron/index.mjs +8 -0
- package/dist/ai/llm/ui/electron/index.mjs.map +1 -0
- package/dist/ai/llm/ui/miniapp/index.d.mts +9 -0
- package/dist/ai/llm/ui/miniapp/index.d.ts +9 -0
- package/dist/ai/llm/ui/miniapp/index.js +107 -0
- package/dist/ai/llm/ui/miniapp/index.js.map +1 -0
- package/dist/ai/llm/ui/miniapp/index.mjs +101 -0
- package/dist/ai/llm/ui/miniapp/index.mjs.map +1 -0
- package/dist/ai/llm/ui/rn/index.d.mts +9 -0
- package/dist/ai/llm/ui/rn/index.d.ts +9 -0
- package/dist/ai/llm/ui/rn/index.js +249 -0
- package/dist/ai/llm/ui/rn/index.js.map +1 -0
- package/dist/ai/llm/ui/rn/index.mjs +243 -0
- package/dist/ai/llm/ui/rn/index.mjs.map +1 -0
- package/dist/ai/llm/ui/web/index.d.mts +15 -0
- package/dist/ai/llm/ui/web/index.d.ts +15 -0
- package/dist/ai/llm/ui/web/index.js +21 -0
- package/dist/ai/llm/ui/web/index.js.map +1 -0
- package/dist/ai/llm/ui/web/index.mjs +8 -0
- package/dist/ai/llm/ui/web/index.mjs.map +1 -0
- package/dist/ar/index.d.mts +7 -0
- package/dist/ar/index.d.ts +7 -0
- package/dist/ar/index.js +17 -0
- package/dist/ar/index.js.map +1 -0
- package/dist/ar/index.mjs +4 -0
- package/dist/ar/index.mjs.map +1 -0
- package/dist/auth/index.js +22 -22
- package/dist/auth/index.mjs +2 -2
- package/dist/auth/legacy/db/index.d.mts +5 -0
- package/dist/auth/legacy/db/index.d.ts +5 -0
- package/dist/auth/legacy/db/index.js +34 -0
- package/dist/auth/legacy/db/index.js.map +1 -0
- package/dist/auth/legacy/db/index.mjs +5 -0
- package/dist/auth/legacy/db/index.mjs.map +1 -0
- package/dist/auth/legacy/index.d.mts +51 -0
- package/dist/auth/legacy/index.d.ts +51 -0
- package/dist/auth/legacy/index.js +146 -0
- package/dist/auth/legacy/index.js.map +1 -0
- package/dist/auth/legacy/index.mjs +13 -0
- package/dist/auth/legacy/index.mjs.map +1 -0
- package/dist/auth/legacy/logic/index.d.mts +9 -0
- package/dist/auth/legacy/logic/index.d.ts +9 -0
- package/dist/auth/legacy/logic/index.js +18 -0
- package/dist/auth/legacy/logic/index.js.map +1 -0
- package/dist/auth/legacy/logic/index.mjs +5 -0
- package/dist/auth/legacy/logic/index.mjs.map +1 -0
- package/dist/auth/legacy/routes/index.d.mts +50 -0
- package/dist/auth/legacy/routes/index.d.ts +50 -0
- package/dist/auth/legacy/routes/index.js +34 -0
- package/dist/auth/legacy/routes/index.js.map +1 -0
- package/dist/auth/legacy/routes/index.mjs +5 -0
- package/dist/auth/legacy/routes/index.mjs.map +1 -0
- package/dist/auth/legacy/schema/index.d.mts +401 -0
- package/dist/auth/legacy/schema/index.d.ts +401 -0
- package/dist/auth/legacy/schema/index.js +29 -0
- package/dist/auth/legacy/schema/index.js.map +1 -0
- package/dist/auth/legacy/schema/index.mjs +4 -0
- package/dist/auth/legacy/schema/index.mjs.map +1 -0
- package/dist/auth/legacy/server/index.d.mts +15 -0
- package/dist/auth/legacy/server/index.d.ts +15 -0
- package/dist/auth/legacy/server/index.js +65 -0
- package/dist/auth/legacy/server/index.js.map +1 -0
- package/dist/auth/legacy/server/index.mjs +8 -0
- package/dist/auth/legacy/server/index.mjs.map +1 -0
- package/dist/auth/legacy/services/index.d.mts +40 -0
- package/dist/auth/legacy/services/index.d.ts +40 -0
- package/dist/auth/legacy/services/index.js +14 -0
- package/dist/auth/legacy/services/index.js.map +1 -0
- package/dist/auth/legacy/services/index.mjs +5 -0
- package/dist/auth/legacy/services/index.mjs.map +1 -0
- package/dist/auth/legacy/ui/miniapp/index.d.mts +10 -0
- package/dist/auth/legacy/ui/miniapp/index.d.ts +10 -0
- package/dist/auth/legacy/ui/miniapp/index.js +23 -0
- package/dist/auth/legacy/ui/miniapp/index.js.map +1 -0
- package/dist/auth/legacy/ui/miniapp/index.mjs +6 -0
- package/dist/auth/legacy/ui/miniapp/index.mjs.map +1 -0
- package/dist/auth/legacy/ui/web/index.d.mts +22 -0
- package/dist/auth/legacy/ui/web/index.d.ts +22 -0
- package/dist/auth/legacy/ui/web/index.js +31 -0
- package/dist/auth/legacy/ui/web/index.js.map +1 -0
- package/dist/auth/legacy/ui/web/index.mjs +6 -0
- package/dist/auth/legacy/ui/web/index.mjs.map +1 -0
- package/dist/calendar/index.d.mts +390 -237
- package/dist/calendar/index.d.ts +390 -237
- package/dist/calendar/index.js +3825 -3785
- package/dist/calendar/index.js.map +1 -1
- package/dist/calendar/index.mjs +3730 -3696
- package/dist/calendar/index.mjs.map +1 -1
- package/dist/calendar/routes/index.js +30 -327
- package/dist/calendar/routes/index.js.map +1 -1
- package/dist/calendar/routes/index.mjs +1 -323
- package/dist/calendar/routes/index.mjs.map +1 -1
- package/dist/calendar/server.d.mts +6 -0
- package/dist/calendar/server.d.ts +6 -0
- package/dist/calendar/server.js +41 -13
- package/dist/calendar/server.js.map +1 -1
- package/dist/calendar/server.mjs +2 -2
- package/dist/calendar/server.mjs.map +1 -1
- package/dist/chunk-24F7KUED.js +263 -0
- package/dist/chunk-24F7KUED.js.map +1 -0
- package/dist/{chunk-YMS6BPXS.js → chunk-27IUMDDK.js} +3 -3
- package/dist/{chunk-YMS6BPXS.js.map → chunk-27IUMDDK.js.map} +1 -1
- package/dist/chunk-37M6NZIF.js +279 -0
- package/dist/chunk-37M6NZIF.js.map +1 -0
- package/dist/chunk-3JMUNOUT.js +144 -0
- package/dist/chunk-3JMUNOUT.js.map +1 -0
- package/dist/chunk-3PFCOTJP.mjs +256 -0
- package/dist/chunk-3PFCOTJP.mjs.map +1 -0
- package/dist/{chunk-NZZZUMMX.mjs → chunk-57MVE5LL.mjs} +3 -3
- package/dist/{chunk-NZZZUMMX.mjs.map → chunk-57MVE5LL.mjs.map} +1 -1
- package/dist/{chunk-622Y6LTH.mjs → chunk-5BLZEVWK.mjs} +196 -468
- package/dist/chunk-5BLZEVWK.mjs.map +1 -0
- package/dist/{chunk-YN4MJFIG.js → chunk-5LCGOCKG.js} +5 -5
- package/dist/{chunk-YN4MJFIG.js.map → chunk-5LCGOCKG.js.map} +1 -1
- package/dist/chunk-6XUQ2B4K.js +219 -0
- package/dist/chunk-6XUQ2B4K.js.map +1 -0
- package/dist/{chunk-NCOXT7SK.js → chunk-77UEPWVQ.js} +4 -4
- package/dist/{chunk-NCOXT7SK.js.map → chunk-77UEPWVQ.js.map} +1 -1
- package/dist/chunk-CFM56MGO.mjs +35 -0
- package/dist/chunk-CFM56MGO.mjs.map +1 -0
- package/dist/chunk-CPSFYP34.mjs +140 -0
- package/dist/chunk-CPSFYP34.mjs.map +1 -0
- package/dist/chunk-D22QBOCM.mjs +336 -0
- package/dist/chunk-D22QBOCM.mjs.map +1 -0
- package/dist/chunk-DA4QV64P.mjs +35 -0
- package/dist/chunk-DA4QV64P.mjs.map +1 -0
- package/dist/chunk-EKDLZND6.js +275 -0
- package/dist/chunk-EKDLZND6.js.map +1 -0
- package/dist/chunk-EKQPFZXQ.js +12 -0
- package/dist/chunk-EKQPFZXQ.js.map +1 -0
- package/dist/chunk-ERAAB5VG.js +324 -0
- package/dist/chunk-ERAAB5VG.js.map +1 -0
- package/dist/chunk-ESLY72VI.mjs +175 -0
- package/dist/chunk-ESLY72VI.mjs.map +1 -0
- package/dist/chunk-FGQGWW73.js +38 -0
- package/dist/chunk-FGQGWW73.js.map +1 -0
- package/dist/chunk-FXQOXLDE.js +120 -0
- package/dist/chunk-FXQOXLDE.js.map +1 -0
- package/dist/chunk-FZELCJR7.mjs +19 -0
- package/dist/chunk-FZELCJR7.mjs.map +1 -0
- package/dist/{chunk-HHVDOIPV.js → chunk-H3P2PGZL.js} +3 -3
- package/dist/{chunk-HHVDOIPV.js.map → chunk-H3P2PGZL.js.map} +1 -1
- package/dist/chunk-HBQMN5QM.mjs +10 -0
- package/dist/chunk-HBQMN5QM.mjs.map +1 -0
- package/dist/chunk-ITRIXMXF.mjs +862 -0
- package/dist/chunk-ITRIXMXF.mjs.map +1 -0
- package/dist/chunk-IUWSCUDC.js +4 -0
- package/dist/chunk-IUWSCUDC.js.map +1 -0
- package/dist/chunk-JCKCKRC2.js +50 -0
- package/dist/chunk-JCKCKRC2.js.map +1 -0
- package/dist/chunk-L7GQNY54.mjs +286 -0
- package/dist/chunk-L7GQNY54.mjs.map +1 -0
- package/dist/{chunk-ZRWED7Q6.js → chunk-LDVJ7URJ.js} +235 -520
- package/dist/chunk-LDVJ7URJ.js.map +1 -0
- package/dist/{chunk-CYTXGBP2.js → chunk-MLP74E3O.js} +573 -1607
- package/dist/chunk-MLP74E3O.js.map +1 -0
- package/dist/chunk-NAX4TUT7.js +182 -0
- package/dist/chunk-NAX4TUT7.js.map +1 -0
- package/dist/chunk-NW4EN4YI.mjs +213 -0
- package/dist/chunk-NW4EN4YI.mjs.map +1 -0
- package/dist/chunk-P3QMT3AY.mjs +44 -0
- package/dist/chunk-P3QMT3AY.mjs.map +1 -0
- package/dist/chunk-PJ4KYAQZ.mjs +631 -0
- package/dist/chunk-PJ4KYAQZ.mjs.map +1 -0
- package/dist/chunk-PLSEAREM.js +345 -0
- package/dist/chunk-PLSEAREM.js.map +1 -0
- package/dist/{chunk-EGJPS7OL.mjs → chunk-QZU4UJZG.mjs} +3 -3
- package/dist/{chunk-EGJPS7OL.mjs.map → chunk-QZU4UJZG.mjs.map} +1 -1
- package/dist/chunk-RJVR33ME.mjs +3 -0
- package/dist/chunk-RJVR33ME.mjs.map +1 -0
- package/dist/chunk-SYBHDB2D.js +650 -0
- package/dist/chunk-SYBHDB2D.js.map +1 -0
- package/dist/chunk-TVKVM7JT.js +21 -0
- package/dist/chunk-TVKVM7JT.js.map +1 -0
- package/dist/{chunk-PONZPO3U.mjs → chunk-UTB72ZJ7.mjs} +414 -1448
- package/dist/chunk-UTB72ZJ7.mjs.map +1 -0
- package/dist/chunk-V7EVKD5G.mjs +116 -0
- package/dist/chunk-V7EVKD5G.mjs.map +1 -0
- package/dist/chunk-VGPR3KLR.js +872 -0
- package/dist/chunk-VGPR3KLR.js.map +1 -0
- package/dist/chunk-VS7WATQD.js +255 -0
- package/dist/chunk-VS7WATQD.js.map +1 -0
- package/dist/chunk-VSP7XJT5.mjs +272 -0
- package/dist/chunk-VSP7XJT5.mjs.map +1 -0
- package/dist/{chunk-CSDIPQQO.mjs → chunk-VTKAIOP5.mjs} +5 -5
- package/dist/{chunk-CSDIPQQO.mjs.map → chunk-VTKAIOP5.mjs.map} +1 -1
- package/dist/chunk-VULJUXTF.mjs +267 -0
- package/dist/chunk-VULJUXTF.mjs.map +1 -0
- package/dist/chunk-XAHM6B3V.js +44 -0
- package/dist/chunk-XAHM6B3V.js.map +1 -0
- package/dist/chunk-YSF5YISM.mjs +248 -0
- package/dist/chunk-YSF5YISM.mjs.map +1 -0
- package/dist/{chunk-OFYBMMWT.mjs → chunk-YYJEVAJI.mjs} +3 -3
- package/dist/{chunk-OFYBMMWT.mjs.map → chunk-YYJEVAJI.mjs.map} +1 -1
- package/dist/components/index.d.mts +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +182 -181
- package/dist/components/index.mjs +4 -3
- package/dist/index-DNKZ7-R_.d.mts +184 -0
- package/dist/index-DNKZ7-R_.d.ts +184 -0
- package/dist/index.d.mts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +285 -229
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +15 -10
- package/dist/index.mjs.map +1 -1
- package/dist/mikuFusionGame/index.js +3 -3
- package/dist/mikuFusionGame/index.mjs +2 -2
- package/dist/mmd/index.d.mts +67 -9
- package/dist/mmd/index.d.ts +67 -9
- package/dist/mmd/index.js +969 -625
- package/dist/mmd/index.js.map +1 -1
- package/dist/mmd/index.mjs +969 -628
- package/dist/mmd/index.mjs.map +1 -1
- package/dist/portfolio/index.js +10 -9
- package/dist/portfolio/index.mjs +5 -4
- package/dist/qqbot/index.d.mts +2 -0
- package/dist/qqbot/index.d.ts +2 -0
- package/dist/qqbot/index.js +21 -0
- package/dist/qqbot/index.js.map +1 -0
- package/dist/qqbot/index.mjs +4 -0
- package/dist/qqbot/index.mjs.map +1 -0
- package/dist/qqbot/server/index.d.mts +91 -0
- package/dist/qqbot/server/index.d.ts +91 -0
- package/dist/qqbot/server/index.js +21 -0
- package/dist/qqbot/server/index.js.map +1 -0
- package/dist/qqbot/server/index.mjs +4 -0
- package/dist/qqbot/server/index.mjs.map +1 -0
- package/dist/qqbot/ui/web/index.d.mts +10 -0
- package/dist/qqbot/ui/web/index.d.ts +10 -0
- package/dist/qqbot/ui/web/index.js +105 -0
- package/dist/qqbot/ui/web/index.js.map +1 -0
- package/dist/qqbot/ui/web/index.mjs +99 -0
- package/dist/qqbot/ui/web/index.mjs.map +1 -0
- package/dist/screenReceiver/index.d.mts +78 -0
- package/dist/screenReceiver/index.d.ts +78 -0
- package/dist/screenReceiver/index.js +17 -0
- package/dist/screenReceiver/index.js.map +1 -0
- package/dist/screenReceiver/index.mjs +4 -0
- package/dist/screenReceiver/index.mjs.map +1 -0
- package/dist/screenReceiver/server/index.d.mts +36 -0
- package/dist/screenReceiver/server/index.d.ts +36 -0
- package/dist/screenReceiver/server/index.js +160 -0
- package/dist/screenReceiver/server/index.js.map +1 -0
- package/dist/screenReceiver/server/index.mjs +157 -0
- package/dist/screenReceiver/server/index.mjs.map +1 -0
- package/dist/showmasterpiece/db/index.js +42 -42
- package/dist/showmasterpiece/db/index.mjs +1 -1
- package/dist/showmasterpiece/index.js +52 -41
- package/dist/showmasterpiece/index.js.map +1 -1
- package/dist/showmasterpiece/index.mjs +15 -4
- package/dist/showmasterpiece/index.mjs.map +1 -1
- package/dist/showmasterpiece/server/index.js +42 -42
- package/dist/showmasterpiece/server/index.mjs +1 -1
- package/dist/showmasterpiece/ui/miniapp/index.d.mts +2 -0
- package/dist/showmasterpiece/ui/miniapp/index.d.ts +2 -0
- package/dist/showmasterpiece/ui/miniapp/index.js +83 -55
- package/dist/showmasterpiece/ui/miniapp/index.js.map +1 -1
- package/dist/showmasterpiece/ui/miniapp/index.mjs +83 -55
- package/dist/showmasterpiece/ui/miniapp/index.mjs.map +1 -1
- package/dist/showmasterpiece/ui/web/index.js +43 -32
- package/dist/showmasterpiece/ui/web/index.mjs +15 -4
- package/dist/testYourself/index.js +13 -13
- package/dist/testYourself/index.mjs +2 -2
- package/dist/types-B-hOccQw.d.mts +122 -0
- package/dist/types-B8rGXc4e.d.mts +38 -0
- package/dist/types-Cg89HGz2.d.ts +38 -0
- package/dist/types-CvKvpyN8.d.mts +48 -0
- package/dist/types-CvKvpyN8.d.ts +48 -0
- package/dist/types-Dy6x2gJW.d.ts +122 -0
- package/dist/universalFile/server/index.js +11 -11
- package/dist/universalFile/server/index.mjs +4 -4
- package/package.json +101 -1
- package/dist/UniversalFileService-336GFY6N.mjs +0 -6
- package/dist/UniversalFileService-J6ET6KZK.js +0 -15
- package/dist/chunk-622Y6LTH.mjs.map +0 -1
- package/dist/chunk-CYTXGBP2.js.map +0 -1
- package/dist/chunk-GVVS4IMM.mjs +0 -302
- package/dist/chunk-GVVS4IMM.mjs.map +0 -1
- package/dist/chunk-PONZPO3U.mjs.map +0 -1
- package/dist/chunk-WC5QFO3T.js +0 -314
- package/dist/chunk-WC5QFO3T.js.map +0 -1
- 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-
|
|
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
|
package/dist/{UniversalFileService-336GFY6N.mjs.map → UniversalFileService-O3IEROBN.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"UniversalFileService-
|
|
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 };
|