keepwork-sdk 1.0.0

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 (146) hide show
  1. package/README.md +21 -0
  2. package/dist-npm/keepwork-sdk.js +37514 -0
  3. package/dist-npm/keepwork-sdk.js.map +1 -0
  4. package/dist-npm/md5-CZ0vz1_S.js +240 -0
  5. package/dist-npm/md5-CZ0vz1_S.js.map +1 -0
  6. package/dist-npm/types/index.d.ts +42 -0
  7. package/dist-npm/types/index.d.ts.map +1 -0
  8. package/dist-npm/types/src/ai-chat/AIChat.core.d.ts +218 -0
  9. package/dist-npm/types/src/ai-chat/AIChat.core.d.ts.map +1 -0
  10. package/dist-npm/types/src/ai-chat/AIChat.d.ts +18 -0
  11. package/dist-npm/types/src/ai-chat/AIChat.d.ts.map +1 -0
  12. package/dist-npm/types/src/ai-chat/AIChat.session.d.ts +201 -0
  13. package/dist-npm/types/src/ai-chat/AIChat.session.d.ts.map +1 -0
  14. package/dist-npm/types/src/ai-chat/AIGenerators.base.d.ts +297 -0
  15. package/dist-npm/types/src/ai-chat/AIGenerators.base.d.ts.map +1 -0
  16. package/dist-npm/types/src/ai-chat/AIGenerators.d.ts +15 -0
  17. package/dist-npm/types/src/ai-chat/AIGenerators.d.ts.map +1 -0
  18. package/dist-npm/types/src/ai-chat/AIGenerators.media.d.ts +208 -0
  19. package/dist-npm/types/src/ai-chat/AIGenerators.media.d.ts.map +1 -0
  20. package/dist-npm/types/src/ai-chat/ChildSessionMixin.d.ts +153 -0
  21. package/dist-npm/types/src/ai-chat/ChildSessionMixin.d.ts.map +1 -0
  22. package/dist-npm/types/src/ai-chat/CopilotTools.d.ts +150 -0
  23. package/dist-npm/types/src/ai-chat/CopilotTools.d.ts.map +1 -0
  24. package/dist-npm/types/src/ai-chat/MqttManager.d.ts +123 -0
  25. package/dist-npm/types/src/ai-chat/MqttManager.d.ts.map +1 -0
  26. package/dist-npm/types/src/ai-chat/SandboxToolEnv.d.ts +210 -0
  27. package/dist-npm/types/src/ai-chat/SandboxToolEnv.d.ts.map +1 -0
  28. package/dist-npm/types/src/audio/AudioEngine.d.ts +272 -0
  29. package/dist-npm/types/src/audio/AudioEngine.d.ts.map +1 -0
  30. package/dist-npm/types/src/audio/AudioEngine.utils.d.ts +72 -0
  31. package/dist-npm/types/src/audio/AudioEngine.utils.d.ts.map +1 -0
  32. package/dist-npm/types/src/audio/Speech.d.ts +247 -0
  33. package/dist-npm/types/src/audio/Speech.d.ts.map +1 -0
  34. package/dist-npm/types/src/core/AgentConfig.d.ts +104 -0
  35. package/dist-npm/types/src/core/AgentConfig.d.ts.map +1 -0
  36. package/dist-npm/types/src/core/AgentRouter.d.ts +342 -0
  37. package/dist-npm/types/src/core/AgentRouter.d.ts.map +1 -0
  38. package/dist-npm/types/src/core/NPL.d.ts +251 -0
  39. package/dist-npm/types/src/core/NPL.d.ts.map +1 -0
  40. package/dist-npm/types/src/core/RemoteLog.d.ts +132 -0
  41. package/dist-npm/types/src/core/RemoteLog.d.ts.map +1 -0
  42. package/dist-npm/types/src/core/keepworkSDK.core.d.ts +84 -0
  43. package/dist-npm/types/src/core/keepworkSDK.core.d.ts.map +1 -0
  44. package/dist-npm/types/src/core/keepworkSDK.d.ts +129 -0
  45. package/dist-npm/types/src/core/keepworkSDK.d.ts.map +1 -0
  46. package/dist-npm/types/src/core/keepworkSDK.pages.d.ts +101 -0
  47. package/dist-npm/types/src/core/keepworkSDK.pages.d.ts.map +1 -0
  48. package/dist-npm/types/src/core/keepworkSDK.utils.d.ts +40 -0
  49. package/dist-npm/types/src/core/keepworkSDK.utils.d.ts.map +1 -0
  50. package/dist-npm/types/src/digital-human/DigitalHuman.d.ts +1316 -0
  51. package/dist-npm/types/src/digital-human/DigitalHuman.d.ts.map +1 -0
  52. package/dist-npm/types/src/digital-human/DigitalHumanBridge.d.ts +54 -0
  53. package/dist-npm/types/src/digital-human/DigitalHumanBridge.d.ts.map +1 -0
  54. package/dist-npm/types/src/digital-human/DigitalHumanConfig.d.ts +104 -0
  55. package/dist-npm/types/src/digital-human/DigitalHumanConfig.d.ts.map +1 -0
  56. package/dist-npm/types/src/digital-human/DigitalHumanFrame.d.ts +390 -0
  57. package/dist-npm/types/src/digital-human/DigitalHumanFrame.d.ts.map +1 -0
  58. package/dist-npm/types/src/digital-human/DigitalHumanFrameMessages.d.ts +59 -0
  59. package/dist-npm/types/src/digital-human/DigitalHumanFrameMessages.d.ts.map +1 -0
  60. package/dist-npm/types/src/digital-human/DigitalHumanSubtitleOverlay.d.ts +114 -0
  61. package/dist-npm/types/src/digital-human/DigitalHumanSubtitleOverlay.d.ts.map +1 -0
  62. package/dist-npm/types/src/digital-human/DigitalHumanUtils.d.ts +53 -0
  63. package/dist-npm/types/src/digital-human/DigitalHumanUtils.d.ts.map +1 -0
  64. package/dist-npm/types/src/rtc/AIChatRTC.constants.d.ts +65 -0
  65. package/dist-npm/types/src/rtc/AIChatRTC.constants.d.ts.map +1 -0
  66. package/dist-npm/types/src/rtc/AIChatRTC.d.ts +91 -0
  67. package/dist-npm/types/src/rtc/AIChatRTC.d.ts.map +1 -0
  68. package/dist-npm/types/src/rtc/AIChatRTC.session.d.ts +268 -0
  69. package/dist-npm/types/src/rtc/AIChatRTC.session.d.ts.map +1 -0
  70. package/dist-npm/types/src/rtc/AIChatRTCLocal.backends.d.ts +232 -0
  71. package/dist-npm/types/src/rtc/AIChatRTCLocal.backends.d.ts.map +1 -0
  72. package/dist-npm/types/src/rtc/AIChatRTCLocal.core.d.ts +92 -0
  73. package/dist-npm/types/src/rtc/AIChatRTCLocal.core.d.ts.map +1 -0
  74. package/dist-npm/types/src/rtc/AIChatRTCLocal.d.ts +15 -0
  75. package/dist-npm/types/src/rtc/AIChatRTCLocal.d.ts.map +1 -0
  76. package/dist-npm/types/src/rtc/AIChatRTCLocal.session.d.ts +127 -0
  77. package/dist-npm/types/src/rtc/AIChatRTCLocal.session.d.ts.map +1 -0
  78. package/dist-npm/types/src/rtc/LocalRTC.d.ts +91 -0
  79. package/dist-npm/types/src/rtc/LocalRTC.d.ts.map +1 -0
  80. package/dist-npm/types/src/rtc/SpeechRTC.d.ts +156 -0
  81. package/dist-npm/types/src/rtc/SpeechRTC.d.ts.map +1 -0
  82. package/dist-npm/types/src/rtc/SpeechRTC.transport.d.ts +191 -0
  83. package/dist-npm/types/src/rtc/SpeechRTC.transport.d.ts.map +1 -0
  84. package/dist-npm/types/src/store/CloudDrive.d.ts +140 -0
  85. package/dist-npm/types/src/store/CloudDrive.d.ts.map +1 -0
  86. package/dist-npm/types/src/store/LocalStorageUtil.d.ts +136 -0
  87. package/dist-npm/types/src/store/LocalStorageUtil.d.ts.map +1 -0
  88. package/dist-npm/types/src/store/PersonalPageStore.base.d.ts +267 -0
  89. package/dist-npm/types/src/store/PersonalPageStore.base.d.ts.map +1 -0
  90. package/dist-npm/types/src/store/PersonalPageStore.d.ts +13 -0
  91. package/dist-npm/types/src/store/PersonalPageStore.d.ts.map +1 -0
  92. package/dist-npm/types/src/store/PersonalPageStore.data.d.ts +198 -0
  93. package/dist-npm/types/src/store/PersonalPageStore.data.d.ts.map +1 -0
  94. package/dist-npm/types/src/store/PersonalPageStore.sync.d.ts +171 -0
  95. package/dist-npm/types/src/store/PersonalPageStore.sync.d.ts.map +1 -0
  96. package/dist-npm/types/src/store/PersonalPageStore.types.d.ts +92 -0
  97. package/dist-npm/types/src/store/PersonalPageStore.types.d.ts.map +1 -0
  98. package/dist-npm/types/src/store/YMLParser.d.ts +96 -0
  99. package/dist-npm/types/src/store/YMLParser.d.ts.map +1 -0
  100. package/dist-npm/types/src/tools/AgentTool.d.ts +110 -0
  101. package/dist-npm/types/src/tools/AgentTool.d.ts.map +1 -0
  102. package/dist-npm/types/src/tools/AppTools.d.ts +122 -0
  103. package/dist-npm/types/src/tools/AppTools.d.ts.map +1 -0
  104. package/dist-npm/types/src/tools/ExecuteTool.d.ts +96 -0
  105. package/dist-npm/types/src/tools/ExecuteTool.d.ts.map +1 -0
  106. package/dist-npm/types/src/tools/FileTools.d.ts +77 -0
  107. package/dist-npm/types/src/tools/FileTools.d.ts.map +1 -0
  108. package/dist-npm/types/src/tools/MinigameTools.d.ts +234 -0
  109. package/dist-npm/types/src/tools/MinigameTools.d.ts.map +1 -0
  110. package/dist-npm/types/src/tools/MqttTool.d.ts +53 -0
  111. package/dist-npm/types/src/tools/MqttTool.d.ts.map +1 -0
  112. package/dist-npm/types/src/tools/PersonalPageTool.d.ts +57 -0
  113. package/dist-npm/types/src/tools/PersonalPageTool.d.ts.map +1 -0
  114. package/dist-npm/types/src/tools/SummarizeTool.d.ts +279 -0
  115. package/dist-npm/types/src/tools/SummarizeTool.d.ts.map +1 -0
  116. package/dist-npm/types/src/tools/WebTool.d.ts +106 -0
  117. package/dist-npm/types/src/tools/WebTool.d.ts.map +1 -0
  118. package/dist-npm/types/src/types/common.d.ts +164 -0
  119. package/dist-npm/types/src/types/common.d.ts.map +1 -0
  120. package/dist-npm/types/src/ui/LocalAPIKeySettings.d.ts +229 -0
  121. package/dist-npm/types/src/ui/LocalAPIKeySettings.d.ts.map +1 -0
  122. package/dist-npm/types/src/ui/LoginWindow.d.ts +163 -0
  123. package/dist-npm/types/src/ui/LoginWindow.d.ts.map +1 -0
  124. package/dist-npm/types/src/ui/ProfileWindow.d.ts +75 -0
  125. package/dist-npm/types/src/ui/ProfileWindow.d.ts.map +1 -0
  126. package/dist-npm/types/src/ui/VerifyHuman.d.ts +23 -0
  127. package/dist-npm/types/src/ui/VerifyHuman.d.ts.map +1 -0
  128. package/dist-npm/types/src/ui/WorkspaceViewer.d.ts +184 -0
  129. package/dist-npm/types/src/ui/WorkspaceViewer.d.ts.map +1 -0
  130. package/dist-npm/types/src/user/SocialFriends.d.ts +173 -0
  131. package/dist-npm/types/src/user/SocialFriends.d.ts.map +1 -0
  132. package/dist-npm/types/src/user/UserWorks.d.ts +187 -0
  133. package/dist-npm/types/src/user/UserWorks.d.ts.map +1 -0
  134. package/dist-npm/types/src/utils/ImageUtils.d.ts +107 -0
  135. package/dist-npm/types/src/utils/ImageUtils.d.ts.map +1 -0
  136. package/dist-npm/types/src/utils/SDKLogger.d.ts +111 -0
  137. package/dist-npm/types/src/utils/SDKLogger.d.ts.map +1 -0
  138. package/dist-npm/types/src/utils/translation.d.ts +95 -0
  139. package/dist-npm/types/src/utils/translation.d.ts.map +1 -0
  140. package/dist-npm/types/src/wechat/WxAuth.d.ts +126 -0
  141. package/dist-npm/types/src/wechat/WxAuth.d.ts.map +1 -0
  142. package/dist-npm/types/src/wechat/WxLaunchApp.d.ts +96 -0
  143. package/dist-npm/types/src/wechat/WxLaunchApp.d.ts.map +1 -0
  144. package/dist-npm/types/src/wechat/WxUtils.d.ts +145 -0
  145. package/dist-npm/types/src/wechat/WxUtils.d.ts.map +1 -0
  146. package/package.json +52 -0
@@ -0,0 +1,208 @@
1
+ /**
2
+ * AIGenerators.media.ts — 图片/视频生成层
3
+ *
4
+ * 继承 AIGeneratorsBase,添加:
5
+ * - genImage(Keepwork proxy + 直连 OpenAI/Google/OpenRouter)
6
+ * - genVideo(Keepwork proxy + OpenRouter 直连)
7
+ * - getVideoTaskStatus / pollVideoTask
8
+ * - CloudDrive 上传辅助(_maybeUploadDataURI)
9
+ * - OpenRouter 视频直连辅助(_genVideoOpenRouter / _pollVideoTaskOpenRouter 等)
10
+ * - 图片相关辅助(_toOpenRouterImageParts / _buildOpenRouterImageMessages 等)
11
+ */
12
+ import { AIGeneratorsBase, type AIGeneratorsSDKRef, type GenChatOptions } from './AIGenerators.base';
13
+ /** genImage 选项 */
14
+ export interface GenImageOptions {
15
+ width?: number;
16
+ height?: number;
17
+ provider?: string;
18
+ apiKey?: string;
19
+ model?: string;
20
+ compressionRatio?: number;
21
+ images?: Array<{
22
+ url?: string;
23
+ image_url?: {
24
+ url: string;
25
+ };
26
+ role?: string;
27
+ }>;
28
+ /** 是否上传 data URI 到 Keepwork CDN(默认 true) */
29
+ uploadResultToKeepwork?: boolean;
30
+ fileName?: string;
31
+ /** CloudDrive 临时文件生命周期天数(默认 180) */
32
+ expire?: number;
33
+ preferDirect?: boolean;
34
+ directOnly?: boolean;
35
+ directProvider?: string;
36
+ aspectRatio?: string;
37
+ aspect_ratio?: string;
38
+ imageSize?: string;
39
+ image_size?: string;
40
+ size?: string;
41
+ modalities?: string[];
42
+ outputModalities?: string[];
43
+ output_modalities?: string[];
44
+ onMessage?: GenChatOptions['onMessage'];
45
+ onReasoning?: GenChatOptions['onReasoning'];
46
+ onImage?: GenChatOptions['onImage'];
47
+ extraHeaders?: Record<string, string>;
48
+ stream?: boolean;
49
+ [key: string]: unknown;
50
+ }
51
+ /** genVideo 选项 */
52
+ export interface GenVideoOptions {
53
+ model?: string;
54
+ duration?: number;
55
+ resolution?: string;
56
+ ratio?: string;
57
+ size?: string;
58
+ generateAudio?: boolean;
59
+ watermark?: boolean;
60
+ seed?: number;
61
+ apiKey?: string;
62
+ images?: Array<{
63
+ url?: string;
64
+ role?: string;
65
+ }>;
66
+ videos?: Array<{
67
+ url?: string;
68
+ role?: string;
69
+ }>;
70
+ audios?: Array<{
71
+ url?: string;
72
+ role?: string;
73
+ }>;
74
+ directLink?: boolean;
75
+ preferDirect?: boolean;
76
+ directOnly?: boolean;
77
+ extraHeaders?: Record<string, string>;
78
+ providerOptions?: Record<string, unknown>;
79
+ callbackUrl?: string;
80
+ [key: string]: unknown;
81
+ }
82
+ /** 视频任务状态 */
83
+ export interface VideoTaskStatus {
84
+ status: 'succeeded' | 'failed' | 'pending' | 'in_progress' | 'timeout' | 'cancelled' | 'expired' | string;
85
+ videoUrl?: string;
86
+ contentUrl?: string;
87
+ duration?: number;
88
+ usage?: unknown;
89
+ error?: string | object;
90
+ raw?: unknown;
91
+ }
92
+ /** pollVideoTask 回调 */
93
+ export interface PollVideoCallbacks {
94
+ onStatus?: (status: string, data: unknown) => void;
95
+ interval?: number;
96
+ timeout?: number;
97
+ apiKey?: string;
98
+ model?: string;
99
+ directLink?: boolean;
100
+ }
101
+ /**
102
+ * AIGenerators — 继承自 AIGeneratorsBase,提供图片/视频生成能力。
103
+ */
104
+ declare class AIGenerators extends AIGeneratorsBase {
105
+ constructor(sdk: AIGeneratorsSDKRef);
106
+ /** 推断图片生成 provider(优先 caller > model 自动检测,默认 seedream)。 */
107
+ _inferImageProvider(model?: string, provider?: string): string;
108
+ /**
109
+ * 将参考图片列表转换为 OpenRouter chat-completions 格式的 image_url parts。
110
+ */
111
+ _toOpenRouterImageParts(images?: Array<{
112
+ url?: string;
113
+ image_url?: {
114
+ url: string;
115
+ };
116
+ [key: string]: unknown;
117
+ }>): Array<{
118
+ type: string;
119
+ image_url: {
120
+ url: string;
121
+ };
122
+ }>;
123
+ /** 构建包含参考图片的 OpenRouter 多模态 user 消息。 */
124
+ _buildOpenRouterImageMessages(prompt: string, images?: GenImageOptions['images']): Array<{
125
+ role: string;
126
+ content: unknown;
127
+ }>;
128
+ /** 从 caller opts 构建 OpenRouter image_config(aspect_ratio + image_size)。 */
129
+ _buildOpenRouterImageConfig(opts?: GenImageOptions): {
130
+ aspect_ratio?: string;
131
+ image_size?: string;
132
+ } | null;
133
+ /** 根据 model 决定 OpenRouter 图片生成的 output modalities。 */
134
+ _buildOpenRouterImageModalities(model: string, opts?: GenImageOptions): string[];
135
+ /** 构建图片生成失败时的详细错误信息。 */
136
+ _buildNoImageError(data: unknown, model?: string): string;
137
+ /**
138
+ * 生成图片(via Keepwork genImage API 或直连 provider)。
139
+ *
140
+ * 路由逻辑:
141
+ * 1. 有 apiKey + preferDirect → 直连(OpenAI / Google / OpenRouter)
142
+ * 2. directOnly 但无 key → 抛出
143
+ * 3. 其余 → 通过 Keepwork proxy
144
+ *
145
+ * @param prompt - 图片描述
146
+ * @param opts - 尺寸 / provider / apiKey / model / 参考图片等
147
+ * @returns 生成的图片 URL(或 data URI)
148
+ */
149
+ genImage(prompt: string, opts?: GenImageOptions): Promise<string | null>;
150
+ /** @private 直连 provider 生成图片的分发器。 */
151
+ private _genImageDirect;
152
+ private _genImageOpenAI;
153
+ private _genImageGoogle;
154
+ private _genImageOpenRouter;
155
+ /**
156
+ * 将 data URI 上传到 Keepwork CDN(默认行为)。
157
+ * 优先使用用户个人 CloudDrive,失败时回退 tempvision bucket。
158
+ * 传入 `uploadResultToKeepwork:false` 保留原始 data URI。
159
+ */
160
+ _maybeUploadDataURI(dataURI: string, opts?: {
161
+ uploadResultToKeepwork?: boolean;
162
+ fileName?: string;
163
+ expire?: number;
164
+ }): Promise<string>;
165
+ private _uploadDataURIToCloudDrive;
166
+ /**
167
+ * 提交视频生成任务(via Keepwork genVideo API 或 OpenRouter 直连)。
168
+ *
169
+ * @param prompt - 视频描述
170
+ * @param opts - 时长 / 分辨率 / 宽高比 / 参考图片 / provider 等
171
+ * @returns taskId 字符串(OpenRouter 任务以 `openrouter:` 前缀标识)
172
+ */
173
+ genVideo(prompt: string, opts?: GenVideoOptions): Promise<string>;
174
+ /**
175
+ * 单次轮询视频生成任务状态。
176
+ * 支持 Keepwork 任务 ID 和 `openrouter:` 前缀的 OpenRouter 任务 ID。
177
+ */
178
+ getVideoTaskStatus(taskId: string, opts?: {
179
+ apiKey?: string;
180
+ model?: string;
181
+ }): Promise<VideoTaskStatus>;
182
+ /**
183
+ * 持续轮询视频任务直到完成或失败。
184
+ * 支持 Keepwork 任务 ID 和 `openrouter:` 前缀 ID。
185
+ *
186
+ * @param taskId - 任务 ID
187
+ * @param callbacks - onStatus / interval / timeout / apiKey / model / directLink
188
+ */
189
+ pollVideoTask(taskId: string, callbacks?: PollVideoCallbacks): Promise<VideoTaskStatus>;
190
+ private _genVideoOpenRouter;
191
+ _extractOpenRouterErrorMessage(data: unknown): string;
192
+ _resolveOpenRouterApiKey(opts?: {
193
+ apiKey?: string;
194
+ model?: string;
195
+ }): string;
196
+ /** 从 taskId 中剥离 'openrouter:' 前缀得到 OpenRouter jobId(保持与重构前 AIGenerators.js 原型方法一致)。 */
197
+ _openRouterJobIdFromTaskId(taskId: unknown): string;
198
+ _normalizeOpenRouterVideoStatus(data: Record<string, unknown>): VideoTaskStatus & {
199
+ contentUrl?: string;
200
+ };
201
+ _resolveOpenRouterVideoDirectLink(contentUrl: string | undefined, apiKey: string, opts?: {
202
+ directLink?: boolean;
203
+ }): Promise<string | undefined>;
204
+ private _getVideoTaskStatusOpenRouter;
205
+ private _pollVideoTaskOpenRouter;
206
+ }
207
+ export default AIGenerators;
208
+ //# sourceMappingURL=AIGenerators.media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AIGenerators.media.d.ts","sourceRoot":"","sources":["../../../../src/ai-chat/AIGenerators.media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * ChildSessionMixin.ts — 子 agent 会话共享逻辑
3
+ *
4
+ * 向任意 session 类(ChatSession、RTCChatSession 等)注入子 agent 状态和方法。
5
+ * 子 session 始终是通过 `sdk.aiChat.createSession()` 创建的文本型 ChatSession。
6
+ *
7
+ * ## 使用方式
8
+ * ```ts
9
+ * // 构造函数中:
10
+ * initChildSessionState(this, options);
11
+ *
12
+ * // prototype 上(只需一次):
13
+ * Object.assign(MySession.prototype, childSessionMethods);
14
+ * ```
15
+ *
16
+ * ## 宿主类要求
17
+ * - `this.sdk` — KeepworkSDK 实例(需有 `.aiChat.createSession()`)
18
+ * - `this.model` — 默认模型名称
19
+ * - `this.options` — 会话选项(可含 `.enableTools`)
20
+ * - `this._triggerImmediateCallback()` — **必须**在宿主类中覆盖实现
21
+ */
22
+ /** 子任务对象 */
23
+ export interface ChildTask {
24
+ id: string;
25
+ task: string;
26
+ description: string | null;
27
+ tools: string[];
28
+ maxIterations: number;
29
+ systemPrompt: string | null;
30
+ model: string | null;
31
+ thinking: unknown;
32
+ callbackMode: string;
33
+ debounceSeconds: number;
34
+ resolve: (value: unknown) => void;
35
+ reject: (reason: unknown) => void;
36
+ promise: Promise<unknown>;
37
+ }
38
+ /** 子 session 注册表条目 */
39
+ export interface ChildSessionEntry {
40
+ session: ChildSessionHost;
41
+ queue: ChildTask[];
42
+ isRunning: boolean;
43
+ }
44
+ /** 待处理子 agent 结果 */
45
+ export interface PendingChildResult {
46
+ agentName: string;
47
+ taskId: string;
48
+ taskSummary: string;
49
+ result: unknown;
50
+ }
51
+ /** 子 agent 流式事件 */
52
+ export interface ChildStreamEvent {
53
+ agentPath: string;
54
+ agentName: string;
55
+ taskId: string;
56
+ type: 'message' | 'toolCall' | 'complete' | 'error' | string;
57
+ content: unknown;
58
+ fullResponse?: unknown;
59
+ }
60
+ /** 宿主 session 最小接口(避免循环引用) */
61
+ export interface ChildSessionHost {
62
+ name?: string | null;
63
+ parentSession?: ChildSessionHost | null;
64
+ sdk?: unknown;
65
+ aiChat?: {
66
+ sdk?: unknown;
67
+ createSession?: (opts: unknown) => ChildSessionHost;
68
+ };
69
+ model?: string;
70
+ workspace?: string | null;
71
+ sandbox?: unknown;
72
+ options?: {
73
+ enableTools?: string[];
74
+ [key: string]: unknown;
75
+ };
76
+ customTools?: unknown[];
77
+ enabledToolCategories?: string[];
78
+ messages?: Array<{
79
+ role: string;
80
+ content: string;
81
+ }>;
82
+ _history?: unknown[];
83
+ _childSessions: Record<string, ChildSessionEntry>;
84
+ _pendingChildResults: PendingChildResult[];
85
+ _debounceTimers: ReturnType<typeof setTimeout>[];
86
+ _isSending: boolean;
87
+ _lastSendOptions: Record<string, unknown>;
88
+ _maxChildSessions: number;
89
+ _depth: number;
90
+ _maxDepth: number;
91
+ onChildStream: ((event: ChildStreamEvent) => void) | null;
92
+ _triggerImmediateCallback(): Promise<void>;
93
+ send?: (msg: unknown, opts?: unknown) => Promise<unknown>;
94
+ clear?: () => void;
95
+ }
96
+ /** initChildSessionState 选项 */
97
+ export interface ChildSessionInitOptions {
98
+ name?: string;
99
+ parentSession?: ChildSessionHost | null;
100
+ onChildStream?: ((event: ChildStreamEvent) => void) | null;
101
+ _depth?: number;
102
+ _maxDepth?: number;
103
+ [key: string]: unknown;
104
+ }
105
+ /** 生成 UUID v4(浏览器原生优先)。 */
106
+ export declare function _generateUUID(): string;
107
+ /**
108
+ * 将值截断为可读摘要字符串,用于日志输出。
109
+ * @param value - 任意值
110
+ * @param maxLength - 截断字符数(默认 180)
111
+ */
112
+ export declare function _summarize(value: unknown, maxLength?: number): string;
113
+ /**
114
+ * 在 session 实例上初始化子 agent 状态字段。
115
+ * 在宿主类构造函数内调用。
116
+ *
117
+ * @param self - session 实例(`this`)
118
+ * @param options - 构造选项
119
+ */
120
+ export declare function initChildSessionState(self: ChildSessionHost, options?: ChildSessionInitOptions): void;
121
+ /**
122
+ * 要注入到宿主类 prototype 的子 agent 方法集。
123
+ *
124
+ * 宿主类最低要求:
125
+ * - `this.sdk`(或 `this.aiChat`)——有 `.aiChat.createSession()`
126
+ * - `this.model`——默认模型名
127
+ * - `this.options`——选项(可含 `enableTools`)
128
+ * - `this._triggerImmediateCallback()`——**必须在宿主类中覆盖**
129
+ */
130
+ export declare const childSessionMethods: Partial<ChildSessionHost> & {
131
+ createChildSession(name: string, options?: Record<string, unknown>): ChildSessionEntry;
132
+ enqueueChildTask(name: string, task: string, tools?: string[], maxIterations?: number, systemPrompt?: string, extra?: Record<string, unknown>): Promise<unknown>;
133
+ _processChildQueue(name: string): Promise<void>;
134
+ _buildAgentPath(childName: string): string;
135
+ _emitChildStream(event: ChildStreamEvent): void;
136
+ _bubbleChildStream(event: ChildStreamEvent): void;
137
+ _consumePendingChildResults(): PendingChildResult[];
138
+ _handleChildCallback(mode: string, debounceSeconds?: number): void;
139
+ _triggerImmediateCallback(): Promise<void>;
140
+ _triggerDebounceCallback(seconds?: number): void;
141
+ _cancelDebounceTimers(): void;
142
+ getParentContext(messageCount?: number): {
143
+ systemPrompt: string | null;
144
+ recentMessages: unknown[];
145
+ model?: string;
146
+ workspace?: string | null;
147
+ } | null;
148
+ getChildSession(name: string): ChildSessionEntry | undefined;
149
+ getChildSessionNames(): string[];
150
+ _cleanupChildSessions(): void;
151
+ };
152
+ export { initChildSessionState as default };
153
+ //# sourceMappingURL=ChildSessionMixin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChildSessionMixin.d.ts","sourceRoot":"","sources":["../../../../src/ai-chat/ChildSessionMixin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * CopilotTools.ts — AI 工具分类注册与调度中心(TypeScript 版)
3
+ *
4
+ * 管理所有可供 AI 会话使用的工具分类(category),提供:
5
+ * - `registerToolCategory()`:注册自定义工具分类(含 definitions / executor / onConfig)
6
+ * - `getToolDefinitions()`:按分类名获取 OpenAI 格式工具定义(支持按函数名过滤和排除)
7
+ * - `execute()`:按函数名分发工具调用到对应分类的 executor
8
+ * - `resolveEnabledCategories()`:将 toolsConfig 对象解析为分类名数组
9
+ * - `setToolConfig()`:更新分类的运行时配置
10
+ *
11
+ * ## 内置工具分类
12
+ * | 分类名 | 工具 |
13
+ * |-------------|----------------------------|
14
+ * | mqtt | mqtt_publish/get/subscribe |
15
+ * | read | read_file, list_dir |
16
+ * | edit | replace_string_in_file, create_file, multi_replace |
17
+ * | search | grep_search |
18
+ * | fileOps | read + edit + search 合集 |
19
+ * | execute | run_app_cmd |
20
+ * | web | fetch_webpage |
21
+ * | personalPage | personal_page_load/save |
22
+ * | agent | runAsyncAgentTask 等 |
23
+ * | app | read_app, click_element 等 |
24
+ * | summarize | summarize_conversation 等 |
25
+ */
26
+ import AppTools from '../tools/AppTools';
27
+ /** 工具函数定义(OpenAI Function Calling 格式) */
28
+ export interface ToolDefinition {
29
+ type: 'function';
30
+ function: {
31
+ name: string;
32
+ description: string;
33
+ parameters: Record<string, unknown>;
34
+ };
35
+ }
36
+ /** 工具分类注册表条目 */
37
+ export interface ToolCategoryEntry {
38
+ definitions: ToolDefinition[];
39
+ /** 工具执行器(fnName, fnArgs, config) => result */
40
+ executor: (fnName: string, fnArgs: unknown, config?: unknown) => Promise<unknown>;
41
+ /** 运行时配置更新回调 */
42
+ onConfig?: (config: unknown) => void;
43
+ /**
44
+ * 为 true 时,此分类的工具不会被 SandboxToolEnv 的分类级代理自动路由;
45
+ * 需通过 toolProxy.functions 明确指定才会走代理路径。
46
+ */
47
+ disableAutoProxy?: boolean;
48
+ }
49
+ /** SDK 最小接口 */
50
+ interface SDKRef {
51
+ agentRouter?: {
52
+ instanceId?: string;
53
+ hasRemoteAgent?: (name: string) => boolean;
54
+ submitTask?: (name: string, payload: unknown, callbacks?: unknown) => Promise<unknown>;
55
+ };
56
+ [key: string]: unknown;
57
+ }
58
+ declare class CopilotTools {
59
+ /** 工具分类注册表 */
60
+ _registry: Record<string, ToolCategoryEntry>;
61
+ /** 函数名 → 主分类名 反向索引 */
62
+ _fnNameToCategory: Record<string, string>;
63
+ /** 各分类的运行时配置 */
64
+ toolConfigs: Record<string, unknown>;
65
+ /** AppTools 类引用(供外部访问) */
66
+ static AppTools: typeof AppTools;
67
+ AppTools: typeof AppTools;
68
+ private mqttTool;
69
+ private fileTools;
70
+ private agentTool;
71
+ private personalPageTool;
72
+ private executeTool;
73
+ private webTool;
74
+ private summarizeTool;
75
+ private appTools;
76
+ constructor(sdk: SDKRef);
77
+ /**
78
+ * 注册一个工具分类。
79
+ *
80
+ * 同一函数名可属于多个分类;第一个注册该函数名的分类成为其主执行者。
81
+ * 后续包含同名函数的分类(如 'fileOps' 包含 read/edit/search 中的所有函数)
82
+ * 仍可通过 `getToolDefinitions` 暴露定义,但执行调度以先注册者为准。
83
+ *
84
+ * @param name - 分类名(如 'mqtt' / 'fileOps')
85
+ * @param entry - 分类入口(definitions / executor / onConfig / disableAutoProxy)
86
+ */
87
+ registerToolCategory(name: string, entry: ToolCategoryEntry): void;
88
+ /**
89
+ * 获取指定分类列表对应的 OpenAI 格式工具定义(去重)。
90
+ *
91
+ * 支持格式:
92
+ * - `"category"`:包含该分类所有函数
93
+ * - `"category.fnName"`:仅包含指定函数
94
+ * - `"-category.fnName"`:从完整分类包含中排除指定函数
95
+ *
96
+ * @param categoryNames - 分类名数组(空 / undefined 时返回 [])
97
+ */
98
+ getToolDefinitions(categoryNames?: string[]): ToolDefinition[];
99
+ /**
100
+ * 导出指定分类的工具定义(可序列化格式)。
101
+ * 供 DigitalHumanFrame 将父级工具定义传入子 iframe。
102
+ *
103
+ * @param categoryNames - 要导出的分类(空 / undefined 时导出全部)
104
+ */
105
+ getExportableDefinitions(categoryNames?: string[]): Record<string, ToolDefinition[]>;
106
+ /**
107
+ * 检查指定函数名是否在任意注册分类中可执行。
108
+ * @param fnName - 工具函数名
109
+ */
110
+ canExecute(fnName: string): boolean;
111
+ /**
112
+ * 按函数名执行工具,分发到对应分类的 executor。
113
+ *
114
+ * @param fnName - 工具函数名
115
+ * @param fnArgs - 工具参数
116
+ * @param config - 运行时配置
117
+ */
118
+ execute(fnName: string, fnArgs: unknown, config?: unknown): Promise<unknown>;
119
+ /**
120
+ * 将 toolsConfig 对象解析为分类名数组(供 AIChat / SandboxToolEnv 使用)。
121
+ *
122
+ * 支持的 key 格式:
123
+ * - `"category": { enabled: true }` — 启用整个分类
124
+ * - `"category.fnName": { enabled: true }` — 仅启用该分类中的指定函数
125
+ * - `"category.fnName": { enabled: false }` — 从完整分类包含中排除指定函数(生成 `-category.fnName` 条目)
126
+ *
127
+ * @param toolsConfig - 工具配置对象
128
+ * @returns 已启用分类名数组(含点分函数名和排除标记)
129
+ */
130
+ resolveEnabledCategories(toolsConfig: Record<string, {
131
+ enabled?: boolean;
132
+ }>): string[];
133
+ /**
134
+ * 设置指定分类的运行时配置。
135
+ * 支持新名称('mqtt' / 'personalPage')和旧别名('MqttTool' 等)。
136
+ *
137
+ * @param categoryName - 分类名或旧别名
138
+ * @param config - 运行时配置对象
139
+ */
140
+ setToolConfig(categoryName: string, config: unknown): void;
141
+ /**
142
+ * 注册所有内置工具分类(构造函数内自动调用)。
143
+ * 原子分类(read / edit / search)先注册,fileOps 作为合集后注册;
144
+ * 原子分类的执行优先级高于 fileOps。
145
+ * @private
146
+ */
147
+ private _registerBuiltinTools;
148
+ }
149
+ export default CopilotTools;
150
+ //# sourceMappingURL=CopilotTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CopilotTools.d.ts","sourceRoot":"","sources":["../../../../src/ai-chat/CopilotTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * MqttManager.ts — MQTT 客户端管理器
3
+ *
4
+ * 运行时按需从 CDN 加载 mqtt.js,封装连接/订阅/发布等操作,
5
+ * 并通过内置事件系统通知状态变化和消息到达。
6
+ *
7
+ * ## 使用示例
8
+ * ```ts
9
+ * const mqtt = new MqttManager();
10
+ * mqtt.on('message', ({ topic, message }) => console.log(topic, message));
11
+ * await mqtt.connect({ host: 'broker.example.com', port: 8083, topics: ['my/topic'] });
12
+ * mqtt.publish('my/topic', 'hello');
13
+ * ```
14
+ *
15
+ * 注意:`mqtt.js` 在运行时从 CDN 加载(`window.mqtt`),
16
+ * 不包含在构建产物中。
17
+ */
18
+ /** MQTT 连接配置 */
19
+ export interface MqttConfig {
20
+ /** 协议(默认 'wss') */
21
+ protocol?: string;
22
+ host: string;
23
+ port: number | string;
24
+ username?: string;
25
+ password?: string;
26
+ /** 客户端 ID(默认随机生成) */
27
+ clientId?: string;
28
+ /** KeepAlive 间隔秒数(默认 60) */
29
+ keepalive?: number;
30
+ /** 连接成功后自动订阅的 topic 列表 */
31
+ topics?: string[];
32
+ /** 兼容旧格式:单个 topic(自动转换为 topics 数组) */
33
+ topic?: string;
34
+ }
35
+ /** 连接状态 */
36
+ export type MqttStatus = 'disconnected' | 'connecting' | 'connected' | 'error';
37
+ /** message 事件载荷 */
38
+ export interface MqttMessageEvent {
39
+ topic: string;
40
+ message: string;
41
+ }
42
+ /** MqttManager 支持的事件类型 */
43
+ export type MqttEventName = 'statusChange' | 'message' | 'error';
44
+ declare class MqttManager {
45
+ private client;
46
+ private listeners;
47
+ private config;
48
+ private retryCount;
49
+ private maxRetries;
50
+ status: MqttStatus;
51
+ /**
52
+ * 注册事件监听器。
53
+ * @param event - 事件名('statusChange' | 'message' | 'error')
54
+ * @param callback - 回调函数
55
+ */
56
+ on(event: MqttEventName, callback: (data: unknown) => void): void;
57
+ /**
58
+ * 取消注册事件监听器。
59
+ * @param event - 事件名
60
+ * @param callback - 要取消的回调
61
+ */
62
+ off(event: MqttEventName, callback: (data: unknown) => void): void;
63
+ /** @private 触发事件。 */
64
+ private emit;
65
+ /**
66
+ * 懒加载 mqtt.js(从 CDN)。
67
+ * 若已加载(window.mqtt 存在)则立即 resolve。
68
+ */
69
+ LoadMQTT(): Promise<void>;
70
+ /**
71
+ * 建立 MQTT 连接。
72
+ *
73
+ * 优先级:传入 config → 上次缓存的 config → localStorage 中保存的 config。
74
+ * 连接成功后自动订阅 `config.topics`(或 `config.topic`)中的所有 topic。
75
+ *
76
+ * @param config - 连接配置(可选,省略时使用缓存配置)
77
+ */
78
+ connect(config?: MqttConfig): Promise<void>;
79
+ /** @private 连接成功回调。 */
80
+ private OnConnect;
81
+ /** @private 连接关闭回调。 */
82
+ private OnClose;
83
+ /**
84
+ * @private 收到消息回调(持久化到 localStorage 并触发 message 事件)。
85
+ */
86
+ private OnMessage;
87
+ /**
88
+ * 断开 MQTT 连接并清理客户端实例。
89
+ */
90
+ disconnect(): void;
91
+ /**
92
+ * 订阅指定 topic。
93
+ * 若当前未连接则静默跳过(不抛错)。
94
+ *
95
+ * @param topic - MQTT topic 路径
96
+ */
97
+ subscribe(topic: string): void;
98
+ /**
99
+ * 等待指定 topic 的下一条消息(Promise 封装)。
100
+ * 若 localStorage 中已有缓存消息则立即 resolve。
101
+ *
102
+ * @param topic - MQTT topic 路径
103
+ * @param timeout - 超时毫秒数(默认 5000)
104
+ * @returns 消息字符串
105
+ */
106
+ get(topic: string, timeout?: number): Promise<string>;
107
+ /**
108
+ * 向指定 topic 发布消息。
109
+ * 若当前未连接则返回 false。
110
+ *
111
+ * @param topic - MQTT topic 路径
112
+ * @param message - 消息字符串
113
+ * @returns 是否成功发布
114
+ */
115
+ publish(topic: string, message: string): boolean;
116
+ /**
117
+ * 更新连接配置(不立即重连,下次 connect() 时生效)。
118
+ * @param config - 新的连接配置
119
+ */
120
+ setConfig(config: MqttConfig): void;
121
+ }
122
+ export default MqttManager;
123
+ //# sourceMappingURL=MqttManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MqttManager.d.ts","sourceRoot":"","sources":["../../../../src/ai-chat/MqttManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAQH,gBAAgB;AAChB,MAAM,WAAW,UAAU;IACzB,mBAAmB;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,WAAW;AACX,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AAE/E,mBAAmB;AACnB,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,0BAA0B;AAC1B,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,CAAC;AAkBjE,cAAM,WAAW;IACf,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,SAAS,CAAsD;IACvE,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,MAAM,EAAE,UAAU,CAAkB;IAIpC;;;;OAIG;IACH,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAKjE;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAKlE,qBAAqB;IACrB,OAAO,CAAC,IAAI;IAMZ;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAc/B;;;;;;;OAOG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAgGjD,uBAAuB;IACvB,OAAO,CAAC,SAAS;IAOjB,uBAAuB;IACvB,OAAO,CAAC,OAAO;IAQf;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB;;OAEG;IACH,UAAU,IAAI,IAAI;IAWlB;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ9B;;;;;;;OAOG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCnD;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAQhD;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;CAGpC;AAED,eAAe,WAAW,CAAC"}