@ray-js/t-agent-plugin-aistream 0.2.0-beta-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/LICENSE.md +21 -0
  2. package/README-zh_CN.md +12 -0
  3. package/README.md +12 -0
  4. package/dist/AIStreamTypes.d.ts +1413 -0
  5. package/dist/AIStreamTypes.js +216 -0
  6. package/dist/ChatHistoryStore.d.ts +66 -0
  7. package/dist/ChatHistoryStore.js +160 -0
  8. package/dist/global.d.ts +4 -0
  9. package/dist/global.js +4 -0
  10. package/dist/index.d.ts +4 -0
  11. package/dist/index.js +4 -0
  12. package/dist/polyfill.d.ts +1 -0
  13. package/dist/polyfill.js +8 -0
  14. package/dist/utils/AIStream.d.ts +137 -0
  15. package/dist/utils/AIStream.js +486 -0
  16. package/dist/utils/abort.d.ts +38 -0
  17. package/dist/utils/abort.js +177 -0
  18. package/dist/utils/actions.d.ts +48 -0
  19. package/dist/utils/actions.js +76 -0
  20. package/dist/utils/apis.d.ts +15 -0
  21. package/dist/utils/apis.js +10 -0
  22. package/dist/utils/defaultMock.d.ts +1 -0
  23. package/dist/utils/defaultMock.js +429 -0
  24. package/dist/utils/index.d.ts +11 -0
  25. package/dist/utils/index.js +11 -0
  26. package/dist/utils/logger.d.ts +2 -0
  27. package/dist/utils/logger.js +3 -0
  28. package/dist/utils/mock.d.ts +48 -0
  29. package/dist/utils/mock.js +72 -0
  30. package/dist/utils/observer.d.ts +61 -0
  31. package/dist/utils/observer.js +152 -0
  32. package/dist/utils/parsers.d.ts +10 -0
  33. package/dist/utils/parsers.js +13 -0
  34. package/dist/utils/promisify.d.ts +18 -0
  35. package/dist/utils/promisify.js +82 -0
  36. package/dist/utils/sendMessage.d.ts +21 -0
  37. package/dist/utils/sendMessage.js +241 -0
  38. package/dist/utils/ttt.d.ts +99 -0
  39. package/dist/utils/ttt.js +97 -0
  40. package/dist/utils/url.d.ts +11 -0
  41. package/dist/utils/url.js +31 -0
  42. package/dist/utils/version.d.ts +1 -0
  43. package/dist/utils/version.js +63 -0
  44. package/dist/withAIStream.d.ts +64 -0
  45. package/dist/withAIStream.js +420 -0
  46. package/package.json +39 -0
@@ -0,0 +1,99 @@
1
+ import { ApiRequestByAtopParams, ApiRequestByHighwayParams, AudioBody, AuthorizeParams, AuthorizePolicyStatusParams, CanIUseRouterParams, CheckConnectParams, CheckConnectResult, CloseSessionParams, ConnectParams, ConnectStateBody, CreateSessionParams, DeleteRecordListParams, DisconnectParams, EventBody, EventChannelMessageParams, GetAppInfoParams, GetCurrentHomeInfoParams, GetMiniAppConfigParams, GetAccountInfoParams, ImageBody, InsertRecordParams, NavigateToMiniProgramParams, OpenInnerH5Params, OpenMiniWidgetParams, QueryAgentTokenParams, QueryRecordListParams, RecordAmplitudesBody, RegisterChannelParams, RouterParams, SendEventChatBreakParams, SendEventEndParams, SendEventPayloadEndParams, SendEventStartParams, SendImageDataParams, SendTextDataParams, SessionStateBody, StartRecordAndSendAudioDataParams, StopRecordAndSendAudioDataParams, TextBody, UpdateRecordParams } from '../AIStreamTypes';
2
+ export declare const getMiniAppConfig: (options?: Omit<GetMiniAppConfigParams, "success" | "fail"> | undefined) => Promise<{
3
+ config: any;
4
+ }>;
5
+ export declare const getAccountInfo: (options?: Omit<GetAccountInfoParams, "success" | "fail"> | undefined) => Promise<{
6
+ miniProgram: import("../AIStreamTypes").MiniProgramAccountInfo;
7
+ }>;
8
+ export declare const isDevTools: () => boolean;
9
+ export declare const apiRequestByAtop: (options?: Omit<ApiRequestByAtopParams, "success" | "fail"> | undefined) => Promise<{
10
+ thing_json_?: any;
11
+ data: string;
12
+ }>;
13
+ export declare const apiRequestByHighway: (options?: Omit<ApiRequestByHighwayParams, "success" | "fail"> | undefined) => Promise<{
14
+ thingjson?: any;
15
+ data: string;
16
+ }>;
17
+ export declare const createNativeEventManager: (options: {
18
+ name: string;
19
+ }) => any;
20
+ export declare const getCurrentHomeInfo: (options?: Omit<GetCurrentHomeInfoParams, "success" | "fail"> | undefined) => Promise<{
21
+ homeName: string;
22
+ homeId: string;
23
+ longitude: string;
24
+ latitude: string;
25
+ address: string;
26
+ admin: boolean;
27
+ }>;
28
+ export declare const authorize: (options?: Omit<AuthorizeParams, "success" | "fail"> | undefined) => Promise<null>;
29
+ export declare const getAppInfo: (options?: Omit<GetAppInfoParams, "success" | "fail"> | undefined) => Promise<{
30
+ serverTimestamp: number;
31
+ appVersion: string;
32
+ language: string;
33
+ countryCode: string;
34
+ regionCode: string;
35
+ appName: string;
36
+ appIcon: string;
37
+ appEnv?: number | undefined;
38
+ appBundleId: string;
39
+ appScheme: string;
40
+ appId: string;
41
+ clientId?: string | undefined;
42
+ }>;
43
+ export declare const canIUseRouter: (options?: Omit<CanIUseRouterParams, "success" | "fail"> | undefined) => Promise<{
44
+ result: boolean;
45
+ }>;
46
+ export declare const router: (options?: Omit<RouterParams, "success" | "fail"> | undefined) => Promise<null>;
47
+ export declare const navigateToMiniProgram: (options?: Omit<NavigateToMiniProgramParams, "success" | "fail"> | undefined) => Promise<null>;
48
+ export declare const openInnerH5: (options?: Omit<OpenInnerH5Params, "success" | "fail"> | undefined) => Promise<null>;
49
+ export declare const authorizePolicyStatus: (options?: Omit<AuthorizePolicyStatusParams, "success" | "fail"> | undefined) => Promise<{
50
+ sign: import("../AIStreamTypes").AuthorizePolicySign;
51
+ }>;
52
+ export declare const registerChannel: (options?: Omit<RegisterChannelParams, "success" | "fail"> | undefined) => Promise<null>;
53
+ export declare const listenReceiveMessage: (listener: (params: EventChannelMessageParams) => void) => () => void;
54
+ export declare const openMiniWidget: (options?: Omit<OpenMiniWidgetParams, "success" | "fail"> | undefined) => Promise<null>;
55
+ export declare const isConnectSync: (params: CheckConnectParams) => CheckConnectResult;
56
+ export declare const connect: (options?: Omit<ConnectParams, "success" | "fail"> | undefined) => Promise<{
57
+ connectionId: string;
58
+ }>;
59
+ export declare const disconnect: (options?: Omit<DisconnectParams, "success" | "fail"> | undefined) => Promise<null>;
60
+ export declare const queryAgentToken: (options?: Omit<QueryAgentTokenParams, "success" | "fail"> | undefined) => Promise<{
61
+ agentToken: string;
62
+ bizConfig: import("../AIStreamTypes").BizConfig;
63
+ }>;
64
+ export declare const createSession: (options?: Omit<CreateSessionParams, "success" | "fail"> | undefined) => Promise<{
65
+ sessionId: string;
66
+ sendDataChannels: string[];
67
+ revDataChannels: string[];
68
+ }>;
69
+ export declare const closeSession: (options?: Omit<CloseSessionParams, "success" | "fail"> | undefined) => Promise<null>;
70
+ export declare const sendEventStart: (options?: Omit<SendEventStartParams, "success" | "fail"> | undefined) => Promise<{
71
+ eventId: string;
72
+ }>;
73
+ export declare const sendEventPayloadEnd: (options?: Omit<SendEventPayloadEndParams, "success" | "fail"> | undefined) => Promise<null>;
74
+ export declare const sendEventEnd: (options?: Omit<SendEventEndParams, "success" | "fail"> | undefined) => Promise<null>;
75
+ export declare const sendEventChatBreak: (options?: Omit<SendEventChatBreakParams, "success" | "fail"> | undefined) => Promise<null>;
76
+ export declare const startRecordAndSendAudioData: (options?: Omit<StartRecordAndSendAudioDataParams, "success" | "fail"> | undefined) => Promise<null>;
77
+ export declare const stopRecordAndSendAudioData: (options?: Omit<StopRecordAndSendAudioDataParams, "success" | "fail"> | undefined) => Promise<null>;
78
+ export declare const sendImageData: (options?: Omit<SendImageDataParams, "success" | "fail"> | undefined) => Promise<null>;
79
+ export declare const sendTextData: (options?: Omit<SendTextDataParams, "success" | "fail"> | undefined) => Promise<null>;
80
+ export declare const registerRecordAmplitudes: (options?: Omit<{
81
+ count: number;
82
+ }, "success" | "fail"> | undefined) => Promise<never>;
83
+ export declare const unregisterVoiceAmplitudes: (options?: Omit<any, "success" | "fail"> | undefined) => Promise<unknown>;
84
+ export declare const listenEventReceived: (listener: (params: EventBody) => void) => () => void;
85
+ export declare const listenAudioReceived: (listener: (params: AudioBody) => void) => () => void;
86
+ export declare const listenTextReceived: (listener: (params: TextBody) => void) => () => void;
87
+ export declare const listenImageReceived: (listener: (params: ImageBody) => void) => () => void;
88
+ export declare const listenConnectStateChanged: (listener: (params: ConnectStateBody) => void) => () => void;
89
+ export declare const listenSessionStateChanged: (listener: (params: SessionStateBody) => void) => () => void;
90
+ export declare const listenRecordAmplitudes: (listener: (params: RecordAmplitudesBody) => void) => () => void;
91
+ export declare const queryRecordList: (options?: Omit<QueryRecordListParams, "success" | "fail"> | undefined) => Promise<{
92
+ records: import("../AIStreamTypes").RecordBody[];
93
+ total: number;
94
+ }>;
95
+ export declare const deleteRecordList: (options?: Omit<DeleteRecordListParams, "success" | "fail"> | undefined) => Promise<null>;
96
+ export declare const updateRecord: (options?: Omit<UpdateRecordParams, "success" | "fail"> | undefined) => Promise<null>;
97
+ export declare const insertRecord: (options?: Omit<InsertRecordParams, "success" | "fail"> | undefined) => Promise<{
98
+ id: number;
99
+ }>;
@@ -0,0 +1,97 @@
1
+ import { listening, promisify } from './promisify';
2
+ import { ConnectClientType, ConnectState } from '../AIStreamTypes';
3
+ import { generateId } from '@ray-js/t-agent';
4
+ export const getMiniAppConfig = promisify(ty.getMiniAppConfig, true);
5
+ export const getAccountInfo = promisify(ty.getAccountInfo, true);
6
+ export const isDevTools = () => {
7
+ return ty.getSystemInfoSync().brand === 'devtools';
8
+ };
9
+ export const apiRequestByAtop = promisify(ty.apiRequestByAtop);
10
+ export const apiRequestByHighway = promisify(ty.apiRequestByHighway);
11
+ export const createNativeEventManager = options => {
12
+ if (isDevTools) {
13
+ return {
14
+ onListener: () => null,
15
+ offerListener: () => null
16
+ };
17
+ }
18
+ return ty.createNativeEventManager(options);
19
+ };
20
+ export const getCurrentHomeInfo = promisify(ty.home.getCurrentHomeInfo);
21
+ export const authorize = promisify(ty.authorize, true);
22
+ export const getAppInfo = promisify(ty.getAppInfo);
23
+ export const canIUseRouter = promisify(ty.canIUseRouter);
24
+ export const router = promisify(ty.router);
25
+ export const navigateToMiniProgram = promisify(ty.navigateToMiniProgram);
26
+ export const openInnerH5 = promisify(ty.openInnerH5);
27
+ export const authorizePolicyStatus = promisify(
28
+ // @ts-ignore
29
+ ty.authorizePolicyStatus);
30
+ export const registerChannel = promisify(ty.registerChannel);
31
+ export const listenReceiveMessage = listening(ty.onReceiveMessage, ty.offReceiveMessage);
32
+ export const openMiniWidget = promisify(ty.openMiniWidget);
33
+ export const isConnectSync = params => {
34
+ if (isDevTools()) {
35
+ return {
36
+ connected: true,
37
+ state: ConnectState.CONNECTED,
38
+ connectionId: generateId(),
39
+ clientType: ConnectClientType.APP
40
+ };
41
+ }
42
+ return ty.aistream.isConnectedSync(params);
43
+ };
44
+ export const connect = promisify(ty.aistream.connect, true);
45
+ export const disconnect = promisify(ty.aistream.disconnect, true);
46
+ export const queryAgentToken = promisify(ty.aistream.queryAgentToken, true);
47
+ export const createSession = promisify(ty.aistream.createSession, true);
48
+ export const closeSession = promisify(ty.aistream.closeSession, true);
49
+ export const sendEventStart = promisify(ty.aistream.sendEventStart, true);
50
+ export const sendEventPayloadEnd = promisify(ty.aistream.sendEventPayloadEnd, true);
51
+ export const sendEventEnd = promisify(ty.aistream.sendEventEnd, true);
52
+ export const sendEventChatBreak = promisify(ty.aistream.sendEventChatBreak, true);
53
+ export const startRecordAndSendAudioData = promisify(ty.aistream.startRecordAndSendAudioData, true);
54
+ export const stopRecordAndSendAudioData = promisify(ty.aistream.stopRecordAndSendAudioData, true);
55
+
56
+ // export const startRecordAndSendVideoData = promisify<StartRecordAndSendVideoDataParams>(
57
+ // ty.aistream.startRecordAndSendVideoData,
58
+ // true
59
+ // );
60
+ //
61
+ // export const stopRecordAndSendVideoData = promisify<StopRecordAndSendVideoDataParams>(
62
+ // ty.aistream.stopRecordAndSendVideoData,
63
+ // true
64
+ // );
65
+
66
+ export const sendImageData = promisify(ty.aistream.sendImageData, true);
67
+ export const sendTextData = promisify(ty.aistream.sendTextData, true);
68
+ export const registerRecordAmplitudes = promisify(ty.aistream.registerRecordAmplitudes, true);
69
+ export const unregisterVoiceAmplitudes = promisify(ty.aistream.unregisterVoiceAmplitudes, true);
70
+
71
+ // export const sendFileData = promisify<SendFileDataParams>(ty.aistream.sendFileData);
72
+
73
+ export const listenEventReceived = listening(ty.aistream.onEventReceived, ty.aistream.offEventReceived, true);
74
+ export const listenAudioReceived = listening(ty.aistream.onAudioReceived, ty.aistream.offAudioReceived, true);
75
+
76
+ // export const listenVideoReceived = listening<VideoBody>(
77
+ // ty.aistream.onVideoReceived,
78
+ // ty.aistream.offVideoReceived,
79
+ // true
80
+ // );
81
+
82
+ export const listenTextReceived = listening(ty.aistream.onTextReceived, ty.aistream.offTextReceived, true);
83
+ export const listenImageReceived = listening(ty.aistream.onImageReceived, ty.aistream.offImageReceived, true);
84
+
85
+ // export const listenFileReceived = listening<FileBody>(
86
+ // ty.aistream.onFileReceived,
87
+ // ty.aistream.offFileReceived,
88
+ // true
89
+ // );
90
+
91
+ export const listenConnectStateChanged = listening(ty.aistream.onConnectStateChanged, ty.aistream.offConnectStateChanged, true);
92
+ export const listenSessionStateChanged = listening(ty.aistream.onSessionStateChanged, ty.aistream.offSessionStateChanged, true);
93
+ export const listenRecordAmplitudes = listening(ty.aistream.onRecordAmplitudes, ty.aistream.offRecordAmplitudes, true);
94
+ export const queryRecordList = promisify(ty.aistream.queryRecordList, true);
95
+ export const deleteRecordList = promisify(ty.aistream.deleteRecordList, true);
96
+ export const updateRecord = promisify(ty.aistream.updateRecord, true);
97
+ export const insertRecord = promisify(ty.aistream.insertRecord, true);
@@ -0,0 +1,11 @@
1
+ export declare function parseMiniAppURL(url: string): {
2
+ appId: string;
3
+ path: string;
4
+ query: Record<string, string | undefined>;
5
+ queryStr: string;
6
+ } | {
7
+ query: Record<string, string | undefined>;
8
+ queryStr: string;
9
+ appId: string;
10
+ path?: undefined;
11
+ } | null;
@@ -0,0 +1,31 @@
1
+ import Url from 'url-parse';
2
+ export function parseMiniAppURL(url) {
3
+ if (!url || !(url.startsWith('tuyaSmart://miniApp') || url.startsWith('thingsmart://miniApp'))) {
4
+ return null;
5
+ }
6
+ const u = new Url(url, true);
7
+ const uq = new Url(url, false);
8
+ if (u.query.url) {
9
+ const url = new Url(u.query.url, true);
10
+ const uq = new Url(u.query.url, false);
11
+ return {
12
+ appId: url.hostname,
13
+ path: url.pathname,
14
+ query: url.query,
15
+ queryStr: uq.query
16
+ };
17
+ }
18
+ if (u.query.uniqueCode) {
19
+ return {
20
+ query: u.query,
21
+ queryStr: uq.query,
22
+ appId: u.query.uniqueCode
23
+ };
24
+ }
25
+ return {
26
+ appId: '',
27
+ path: u.pathname,
28
+ query: u.query,
29
+ queryStr: u.query.toString()
30
+ };
31
+ }
@@ -0,0 +1 @@
1
+ export declare function isVersionMatch(range: string, version: string): boolean;
@@ -0,0 +1,63 @@
1
+ import "core-js/modules/es.string.trim.js";
2
+ import "core-js/modules/esnext.iterator.constructor.js";
3
+ import "core-js/modules/esnext.iterator.every.js";
4
+ import "core-js/modules/esnext.iterator.filter.js";
5
+ import "core-js/modules/esnext.iterator.map.js";
6
+ import "core-js/modules/esnext.iterator.some.js";
7
+ import "core-js/modules/web.dom-collections.iterator.js";
8
+ function parseVersion(v) {
9
+ const parts = v.split('.');
10
+ if (parts.length !== 3 || parts.some(p => isNaN(Number(p)))) {
11
+ throw new Error("Invalid version: ".concat(v));
12
+ }
13
+ return parts.map(Number);
14
+ }
15
+ function compareVersions(a, b) {
16
+ const [a1, a2, a3] = parseVersion(a);
17
+ const [b1, b2, b3] = parseVersion(b);
18
+ if (a1 !== b1) return a1 - b1;
19
+ if (a2 !== b2) return a2 - b2;
20
+ return a3 - b3;
21
+ }
22
+ function matchSingleCondition(version, condition) {
23
+ const trimmed = condition.trim();
24
+ if (!trimmed) return true;
25
+ if (trimmed.startsWith('^')) {
26
+ const base = trimmed.slice(1);
27
+ const [major] = parseVersion(base);
28
+ return compareVersions(version, base) >= 0 && parseVersion(version)[0] === major;
29
+ }
30
+ if (trimmed.startsWith('~')) {
31
+ const base = trimmed.slice(1);
32
+ const [major, minor] = parseVersion(base);
33
+ const [vMajor, vMinor] = parseVersion(version);
34
+ return compareVersions(version, base) >= 0 && vMajor === major && vMinor === minor;
35
+ }
36
+ if (trimmed.startsWith('>=')) {
37
+ return compareVersions(version, trimmed.slice(2)) >= 0;
38
+ }
39
+ if (trimmed.startsWith('>')) {
40
+ return compareVersions(version, trimmed.slice(1)) > 0;
41
+ }
42
+ if (trimmed.startsWith('<=')) {
43
+ return compareVersions(version, trimmed.slice(2)) <= 0;
44
+ }
45
+ if (trimmed.startsWith('<')) {
46
+ return compareVersions(version, trimmed.slice(1)) < 0;
47
+ }
48
+ if (trimmed.startsWith('=')) {
49
+ return compareVersions(version, trimmed.slice(1)) === 0;
50
+ }
51
+
52
+ // 默认等于
53
+ return compareVersions(version, trimmed) === 0;
54
+ }
55
+ export function isVersionMatch(range, version) {
56
+ try {
57
+ parseVersion(version);
58
+ const conditions = range.split(' ').filter(Boolean);
59
+ return conditions.every(cond => matchSingleCondition(version, cond));
60
+ } catch (err) {
61
+ return false;
62
+ }
63
+ }
@@ -0,0 +1,64 @@
1
+ import { ChatAgent, ChatMessage, ComposeHandler, InputBlock } from '@ray-js/t-agent';
2
+ import { ConnectClientType } from './AIStreamTypes';
3
+ import { ChatHistoryStore, StoredMessageObject } from './ChatHistoryStore';
4
+ export interface AIStreamOptions {
5
+ /** client 类型: 1-作为设备代理, 2-作为 App */
6
+ clientType?: ConnectClientType;
7
+ /** 代理的设备ID, clientType == 1 时必传 */
8
+ deviceId?: string;
9
+ agentId?: string;
10
+ channel?: string;
11
+ /** 打开小程序的链接,取链接参数字段 aiPtChannel */
12
+ aiPtChannel?: string;
13
+ sessionId?: string;
14
+ tokenApi?: string;
15
+ tokenApiVersion?: string;
16
+ /** 历史消息数量,默认1000,为0的话,则已分页的方式取全部数据 */
17
+ historySize?: number;
18
+ /** 是否支持多模态 */
19
+ multiModal?: boolean;
20
+ wireInput?: boolean;
21
+ /** 索引ID,如果传了 createChatHistoryStore,则会覆盖 */
22
+ indexId?: string;
23
+ /** 家庭id,不填默认当前家庭 */
24
+ homeId?: number;
25
+ /** 自定义消息存储, 返回的实例需要实现 ChatHistoryStore 接口 */
26
+ createChatHistoryStore?: (agent: ChatAgent) => ChatHistoryStore;
27
+ messageOptions?: {
28
+ device_id?: string;
29
+ [key: string]: string;
30
+ };
31
+ }
32
+ export interface AIStreamHooks {
33
+ onMessageParse: (msgItem: StoredMessageObject, result: {
34
+ messages: ChatMessage[];
35
+ }) => void;
36
+ onSkillCompose: (skill: any, respMsg: ChatMessage, result: {
37
+ messages: ChatMessage[];
38
+ }) => void;
39
+ }
40
+ export declare function withAIStream(options?: AIStreamOptions): (agent: ChatAgent) => {
41
+ hooks: import("hookable").Hookable<any, string>;
42
+ assistant: {
43
+ send: (blocks: InputBlock[], signal?: AbortSignal, extraOptions?: Record<string, any>) => {
44
+ response: import("@ray-js/t-agent").StreamResponse;
45
+ metaPromise: Promise<Record<string, any>>;
46
+ };
47
+ chat: (blocks: InputBlock[], signal?: AbortSignal, options?: {
48
+ sendBy?: string | undefined;
49
+ responseBy?: string | undefined;
50
+ extraOptions?: Record<string, any> | undefined;
51
+ } | undefined) => Promise<ChatMessage[]>;
52
+ composeHandler: ComposeHandler;
53
+ options: AIStreamOptions;
54
+ removeMessage: (message: ChatMessage) => Promise<void>;
55
+ clearAllMessages: () => Promise<void>;
56
+ feedback: ({ requestId, type, }: {
57
+ requestId: string;
58
+ type: 'like' | 'unlike';
59
+ }) => Promise<{
60
+ thingjson?: any;
61
+ data: string;
62
+ } | null>;
63
+ };
64
+ };