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.
- package/README.md +21 -0
- package/dist-npm/keepwork-sdk.js +37514 -0
- package/dist-npm/keepwork-sdk.js.map +1 -0
- package/dist-npm/md5-CZ0vz1_S.js +240 -0
- package/dist-npm/md5-CZ0vz1_S.js.map +1 -0
- package/dist-npm/types/index.d.ts +42 -0
- package/dist-npm/types/index.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIChat.core.d.ts +218 -0
- package/dist-npm/types/src/ai-chat/AIChat.core.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIChat.d.ts +18 -0
- package/dist-npm/types/src/ai-chat/AIChat.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIChat.session.d.ts +201 -0
- package/dist-npm/types/src/ai-chat/AIChat.session.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.base.d.ts +297 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.base.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.d.ts +15 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.media.d.ts +208 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.media.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/ChildSessionMixin.d.ts +153 -0
- package/dist-npm/types/src/ai-chat/ChildSessionMixin.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/CopilotTools.d.ts +150 -0
- package/dist-npm/types/src/ai-chat/CopilotTools.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/MqttManager.d.ts +123 -0
- package/dist-npm/types/src/ai-chat/MqttManager.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/SandboxToolEnv.d.ts +210 -0
- package/dist-npm/types/src/ai-chat/SandboxToolEnv.d.ts.map +1 -0
- package/dist-npm/types/src/audio/AudioEngine.d.ts +272 -0
- package/dist-npm/types/src/audio/AudioEngine.d.ts.map +1 -0
- package/dist-npm/types/src/audio/AudioEngine.utils.d.ts +72 -0
- package/dist-npm/types/src/audio/AudioEngine.utils.d.ts.map +1 -0
- package/dist-npm/types/src/audio/Speech.d.ts +247 -0
- package/dist-npm/types/src/audio/Speech.d.ts.map +1 -0
- package/dist-npm/types/src/core/AgentConfig.d.ts +104 -0
- package/dist-npm/types/src/core/AgentConfig.d.ts.map +1 -0
- package/dist-npm/types/src/core/AgentRouter.d.ts +342 -0
- package/dist-npm/types/src/core/AgentRouter.d.ts.map +1 -0
- package/dist-npm/types/src/core/NPL.d.ts +251 -0
- package/dist-npm/types/src/core/NPL.d.ts.map +1 -0
- package/dist-npm/types/src/core/RemoteLog.d.ts +132 -0
- package/dist-npm/types/src/core/RemoteLog.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.core.d.ts +84 -0
- package/dist-npm/types/src/core/keepworkSDK.core.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.d.ts +129 -0
- package/dist-npm/types/src/core/keepworkSDK.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.pages.d.ts +101 -0
- package/dist-npm/types/src/core/keepworkSDK.pages.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.utils.d.ts +40 -0
- package/dist-npm/types/src/core/keepworkSDK.utils.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHuman.d.ts +1316 -0
- package/dist-npm/types/src/digital-human/DigitalHuman.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanBridge.d.ts +54 -0
- package/dist-npm/types/src/digital-human/DigitalHumanBridge.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanConfig.d.ts +104 -0
- package/dist-npm/types/src/digital-human/DigitalHumanConfig.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrame.d.ts +390 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrame.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrameMessages.d.ts +59 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrameMessages.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanSubtitleOverlay.d.ts +114 -0
- package/dist-npm/types/src/digital-human/DigitalHumanSubtitleOverlay.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanUtils.d.ts +53 -0
- package/dist-npm/types/src/digital-human/DigitalHumanUtils.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTC.constants.d.ts +65 -0
- package/dist-npm/types/src/rtc/AIChatRTC.constants.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTC.d.ts +91 -0
- package/dist-npm/types/src/rtc/AIChatRTC.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTC.session.d.ts +268 -0
- package/dist-npm/types/src/rtc/AIChatRTC.session.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.backends.d.ts +232 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.backends.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.core.d.ts +92 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.core.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.d.ts +15 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.session.d.ts +127 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.session.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/LocalRTC.d.ts +91 -0
- package/dist-npm/types/src/rtc/LocalRTC.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/SpeechRTC.d.ts +156 -0
- package/dist-npm/types/src/rtc/SpeechRTC.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/SpeechRTC.transport.d.ts +191 -0
- package/dist-npm/types/src/rtc/SpeechRTC.transport.d.ts.map +1 -0
- package/dist-npm/types/src/store/CloudDrive.d.ts +140 -0
- package/dist-npm/types/src/store/CloudDrive.d.ts.map +1 -0
- package/dist-npm/types/src/store/LocalStorageUtil.d.ts +136 -0
- package/dist-npm/types/src/store/LocalStorageUtil.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.base.d.ts +267 -0
- package/dist-npm/types/src/store/PersonalPageStore.base.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.d.ts +13 -0
- package/dist-npm/types/src/store/PersonalPageStore.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.data.d.ts +198 -0
- package/dist-npm/types/src/store/PersonalPageStore.data.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.sync.d.ts +171 -0
- package/dist-npm/types/src/store/PersonalPageStore.sync.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.types.d.ts +92 -0
- package/dist-npm/types/src/store/PersonalPageStore.types.d.ts.map +1 -0
- package/dist-npm/types/src/store/YMLParser.d.ts +96 -0
- package/dist-npm/types/src/store/YMLParser.d.ts.map +1 -0
- package/dist-npm/types/src/tools/AgentTool.d.ts +110 -0
- package/dist-npm/types/src/tools/AgentTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/AppTools.d.ts +122 -0
- package/dist-npm/types/src/tools/AppTools.d.ts.map +1 -0
- package/dist-npm/types/src/tools/ExecuteTool.d.ts +96 -0
- package/dist-npm/types/src/tools/ExecuteTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/FileTools.d.ts +77 -0
- package/dist-npm/types/src/tools/FileTools.d.ts.map +1 -0
- package/dist-npm/types/src/tools/MinigameTools.d.ts +234 -0
- package/dist-npm/types/src/tools/MinigameTools.d.ts.map +1 -0
- package/dist-npm/types/src/tools/MqttTool.d.ts +53 -0
- package/dist-npm/types/src/tools/MqttTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/PersonalPageTool.d.ts +57 -0
- package/dist-npm/types/src/tools/PersonalPageTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/SummarizeTool.d.ts +279 -0
- package/dist-npm/types/src/tools/SummarizeTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/WebTool.d.ts +106 -0
- package/dist-npm/types/src/tools/WebTool.d.ts.map +1 -0
- package/dist-npm/types/src/types/common.d.ts +164 -0
- package/dist-npm/types/src/types/common.d.ts.map +1 -0
- package/dist-npm/types/src/ui/LocalAPIKeySettings.d.ts +229 -0
- package/dist-npm/types/src/ui/LocalAPIKeySettings.d.ts.map +1 -0
- package/dist-npm/types/src/ui/LoginWindow.d.ts +163 -0
- package/dist-npm/types/src/ui/LoginWindow.d.ts.map +1 -0
- package/dist-npm/types/src/ui/ProfileWindow.d.ts +75 -0
- package/dist-npm/types/src/ui/ProfileWindow.d.ts.map +1 -0
- package/dist-npm/types/src/ui/VerifyHuman.d.ts +23 -0
- package/dist-npm/types/src/ui/VerifyHuman.d.ts.map +1 -0
- package/dist-npm/types/src/ui/WorkspaceViewer.d.ts +184 -0
- package/dist-npm/types/src/ui/WorkspaceViewer.d.ts.map +1 -0
- package/dist-npm/types/src/user/SocialFriends.d.ts +173 -0
- package/dist-npm/types/src/user/SocialFriends.d.ts.map +1 -0
- package/dist-npm/types/src/user/UserWorks.d.ts +187 -0
- package/dist-npm/types/src/user/UserWorks.d.ts.map +1 -0
- package/dist-npm/types/src/utils/ImageUtils.d.ts +107 -0
- package/dist-npm/types/src/utils/ImageUtils.d.ts.map +1 -0
- package/dist-npm/types/src/utils/SDKLogger.d.ts +111 -0
- package/dist-npm/types/src/utils/SDKLogger.d.ts.map +1 -0
- package/dist-npm/types/src/utils/translation.d.ts +95 -0
- package/dist-npm/types/src/utils/translation.d.ts.map +1 -0
- package/dist-npm/types/src/wechat/WxAuth.d.ts +126 -0
- package/dist-npm/types/src/wechat/WxAuth.d.ts.map +1 -0
- package/dist-npm/types/src/wechat/WxLaunchApp.d.ts +96 -0
- package/dist-npm/types/src/wechat/WxLaunchApp.d.ts.map +1 -0
- package/dist-npm/types/src/wechat/WxUtils.d.ts +145 -0
- package/dist-npm/types/src/wechat/WxUtils.d.ts.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentRouter.ts — 跨 iframe Agent 注册、发现与任务转发路由器
|
|
3
|
+
*
|
|
4
|
+
* 每个 KeepworkSDK 实例(在任意 window / iframe 中)持有一个 AgentRouter。
|
|
5
|
+
* 命名 ChatSession 可向本地路由器注册;路由器通过 `window.postMessage`
|
|
6
|
+
* 在整个 iframe 树中广播可用性,使任何 `submitTask` 调用都能发现并委托远程 agent。
|
|
7
|
+
*
|
|
8
|
+
* ## 协议约定
|
|
9
|
+
* - 所有 AgentRouter 消息携带 `is_agent_router: true` 标志
|
|
10
|
+
* - NPL 模块使用 `is_paracraft_message: true`,两者互不干扰
|
|
11
|
+
* - 同一消息的 `instanceId` / `sourceInstanceId` 等于本路由器 ID 时视为自回显,丢弃
|
|
12
|
+
*
|
|
13
|
+
* ## 使用示例
|
|
14
|
+
* ```ts
|
|
15
|
+
* // 在拥有 agent 的 iframe 中
|
|
16
|
+
* const router = window.keepwork.agentRouter;
|
|
17
|
+
* router.register('codeHelper', session);
|
|
18
|
+
*
|
|
19
|
+
* // 在父页面或其他 iframe 中
|
|
20
|
+
* const router = window.keepwork.agentRouter;
|
|
21
|
+
* router.addChildWindow(iframe.contentWindow);
|
|
22
|
+
* const result = await router.submitTask('codeHelper', { task: 'Explain KeepworkSDK' });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
/** AgentRouter 协议消息类型字符串 */
|
|
26
|
+
declare const MSG: {
|
|
27
|
+
readonly REGISTER: "agent_register";
|
|
28
|
+
readonly REGISTER_ACK: "agent_register_ack";
|
|
29
|
+
readonly REGISTER_REJECT: "agent_register_reject";
|
|
30
|
+
readonly UNREGISTER: "agent_unregister";
|
|
31
|
+
readonly WINDOW_DISCONNECT: "agent_window_disconnect";
|
|
32
|
+
readonly TASK: "agent_task";
|
|
33
|
+
readonly TASK_RESULT: "agent_task_result";
|
|
34
|
+
readonly STREAM: "agent_stream";
|
|
35
|
+
readonly SYNC_ACK: "agent_sync_ack";
|
|
36
|
+
};
|
|
37
|
+
type MsgType = typeof MSG[keyof typeof MSG];
|
|
38
|
+
/** AgentRouter 协议消息信封 */
|
|
39
|
+
interface RouterMessage {
|
|
40
|
+
is_agent_router: true;
|
|
41
|
+
type: MsgType;
|
|
42
|
+
agentName?: string;
|
|
43
|
+
instanceId?: string;
|
|
44
|
+
sourceInstanceId?: string;
|
|
45
|
+
taskId?: string;
|
|
46
|
+
payload?: TaskPayload;
|
|
47
|
+
result?: unknown;
|
|
48
|
+
error?: string | null;
|
|
49
|
+
reason?: string;
|
|
50
|
+
syncId?: string;
|
|
51
|
+
request?: boolean;
|
|
52
|
+
syncBackfill?: boolean;
|
|
53
|
+
streamType?: string;
|
|
54
|
+
content?: unknown;
|
|
55
|
+
fullResponse?: unknown;
|
|
56
|
+
isRestartAgentSignal?: boolean;
|
|
57
|
+
promptFile?: string;
|
|
58
|
+
tools?: unknown[];
|
|
59
|
+
options?: Record<string, unknown>;
|
|
60
|
+
}
|
|
61
|
+
/** 任务载荷(submitTask 时传入) */
|
|
62
|
+
export interface TaskPayload {
|
|
63
|
+
task?: string;
|
|
64
|
+
description?: string;
|
|
65
|
+
/** LLM 工具列表(传给 session.send) */
|
|
66
|
+
tools?: unknown;
|
|
67
|
+
maxIterations?: number;
|
|
68
|
+
systemPrompt?: string;
|
|
69
|
+
model?: string;
|
|
70
|
+
thinking?: unknown;
|
|
71
|
+
callbackMode?: string;
|
|
72
|
+
debounceSeconds?: number;
|
|
73
|
+
/** 是否绕过 LLM 直接执行工具 */
|
|
74
|
+
toolCallOnly?: boolean;
|
|
75
|
+
fnName?: string;
|
|
76
|
+
fnArgs?: unknown;
|
|
77
|
+
[key: string]: unknown;
|
|
78
|
+
}
|
|
79
|
+
/** 路由表条目 */
|
|
80
|
+
interface RouteRecord {
|
|
81
|
+
windowRef: WindowProxy | NPLWindowProxy;
|
|
82
|
+
sourceInstanceId: string;
|
|
83
|
+
learnedFrom: WindowProxy | NPLWindowProxy;
|
|
84
|
+
updatedAt: number;
|
|
85
|
+
}
|
|
86
|
+
/** 任务注册表条目 */
|
|
87
|
+
interface OriginTaskRecord {
|
|
88
|
+
kind: 'origin';
|
|
89
|
+
agentName: string;
|
|
90
|
+
createdAt: number;
|
|
91
|
+
outboundWindow: WindowProxy | NPLWindowProxy;
|
|
92
|
+
replyWindow: null;
|
|
93
|
+
onStream: ((msg: RouterMessage) => void) | null;
|
|
94
|
+
resolve: (value: unknown) => void;
|
|
95
|
+
reject: (reason: unknown) => void;
|
|
96
|
+
timeoutId: ReturnType<typeof setTimeout> | null;
|
|
97
|
+
}
|
|
98
|
+
interface RelayTaskRecord {
|
|
99
|
+
kind: 'relay';
|
|
100
|
+
agentName: string;
|
|
101
|
+
createdAt: number;
|
|
102
|
+
outboundWindow: WindowProxy | NPLWindowProxy;
|
|
103
|
+
replyWindow: WindowProxy | NPLWindowProxy;
|
|
104
|
+
onStream: null;
|
|
105
|
+
resolve: null;
|
|
106
|
+
reject: null;
|
|
107
|
+
timeoutId: null;
|
|
108
|
+
}
|
|
109
|
+
type TaskRecord = OriginTaskRecord | RelayTaskRecord;
|
|
110
|
+
/** 本地 agent session 接口(ChatSession 的最小接口) */
|
|
111
|
+
interface AgentSession {
|
|
112
|
+
handleTask?: (taskId: string, payload: TaskPayload, streamCb: (event: unknown) => void) => Promise<unknown>;
|
|
113
|
+
executeTool?: (fnName: string, fnArgs: unknown) => Promise<unknown>;
|
|
114
|
+
clear?: () => void;
|
|
115
|
+
send?: (task: string, options: Record<string, unknown>) => Promise<unknown>;
|
|
116
|
+
messages?: unknown[];
|
|
117
|
+
options?: Record<string, unknown>;
|
|
118
|
+
}
|
|
119
|
+
/** submitTask 的回调选项 */
|
|
120
|
+
export interface SubmitTaskCallbacks {
|
|
121
|
+
onStream?: (msg: RouterMessage) => void;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* NPLWindowProxy — 通过 NPLJS 向 Lua 端转发 postMessage 的虚拟 WindowProxy。
|
|
125
|
+
*
|
|
126
|
+
* 从 AgentRouter 的视角,此对象与真实 WindowProxy 完全等价:
|
|
127
|
+
* 同样存储在 `connectedWindows` 和 `routeTable` 中。
|
|
128
|
+
* `_sendTo()` 通过检测 `_isNPLWindowProxy` 标志选择 NPLJS 通道而非 postMessage。
|
|
129
|
+
*/
|
|
130
|
+
declare class NPLWindowProxy {
|
|
131
|
+
readonly _isNPLWindowProxy = true;
|
|
132
|
+
private _npljs;
|
|
133
|
+
private _sendEventName;
|
|
134
|
+
/**
|
|
135
|
+
* @param npljs - NPLJS 实例(需暴露 SendMsg / OnMsg)
|
|
136
|
+
* @param sendEventName - JS→Lua 方向的 NPLJS 事件名
|
|
137
|
+
*/
|
|
138
|
+
constructor(npljs: {
|
|
139
|
+
SendMsg: (event: string, msg: unknown) => void;
|
|
140
|
+
}, sendEventName: string);
|
|
141
|
+
/**
|
|
142
|
+
* 模拟 window.postMessage,通过 NPLJS 发送消息到 Lua 端。
|
|
143
|
+
* @param msg - 要发送的消息对象
|
|
144
|
+
*/
|
|
145
|
+
postMessage(msg: unknown): void;
|
|
146
|
+
}
|
|
147
|
+
declare class AgentRouter {
|
|
148
|
+
/** 开启详细日志(调试用)。 */
|
|
149
|
+
static debug: boolean;
|
|
150
|
+
static _log(msgOrFn: string | (() => string), ...rest: unknown[]): void;
|
|
151
|
+
/** 此路由器实例的唯一 ID。 */
|
|
152
|
+
readonly instanceId: string;
|
|
153
|
+
/** 本地注册的 agent(agentName → session)。 */
|
|
154
|
+
readonly localAgents: Map<string, {
|
|
155
|
+
session: AgentSession;
|
|
156
|
+
}>;
|
|
157
|
+
/**
|
|
158
|
+
* 远程 agent 路由表(agentName → RouteRecord)。
|
|
159
|
+
* 记录消息应该发往哪个 windowRef 才能抵达对应 agent。
|
|
160
|
+
*/
|
|
161
|
+
readonly routeTable: Map<string, RouteRecord>;
|
|
162
|
+
/**
|
|
163
|
+
* 任务注册表(taskId → TaskRecord)。
|
|
164
|
+
* origin 任务:由本路由器提交,持有 resolve/reject 回调。
|
|
165
|
+
* relay 任务:上游转发过来,需要将结果/流转发回 replyWindow。
|
|
166
|
+
*/
|
|
167
|
+
readonly taskRegistry: Map<string, TaskRecord>;
|
|
168
|
+
/** window → 从该 window 学到的 agent 名集合(O(1) 清理索引)。 */
|
|
169
|
+
readonly windowAgents: Map<Window | NPLWindowProxy, Set<string>>;
|
|
170
|
+
/** window → 通过该 window 流转的 taskId 集合(O(1) 清理索引)。 */
|
|
171
|
+
readonly windowTasks: Map<Window | NPLWindowProxy, Set<string>>;
|
|
172
|
+
/** 已连接的子 iframe window 集合。 */
|
|
173
|
+
readonly connectedWindows: Set<Window | NPLWindowProxy>;
|
|
174
|
+
private _isDestroyed;
|
|
175
|
+
private _disconnectAnnounced;
|
|
176
|
+
private _messageHandler;
|
|
177
|
+
private _lifecycleHandler;
|
|
178
|
+
private _pendingSyncs;
|
|
179
|
+
private _nplWindowProxy;
|
|
180
|
+
private _nplRecvEventName;
|
|
181
|
+
/** 关联的 SDK 实例(用于读取 timeout 配置)。 */
|
|
182
|
+
_sdk?: {
|
|
183
|
+
timeout?: number;
|
|
184
|
+
};
|
|
185
|
+
constructor();
|
|
186
|
+
/**
|
|
187
|
+
* 在本路由器注册命名 agent,并向 iframe 树广播可用性。
|
|
188
|
+
* 若名称已被占用(本地或远程),返回 false。
|
|
189
|
+
*
|
|
190
|
+
* @param agentName - agent 唯一名称
|
|
191
|
+
* @param session - 处理该 agent 任务的 ChatSession 实例
|
|
192
|
+
* @returns 注册成功返回 true,名称冲突返回 false
|
|
193
|
+
*/
|
|
194
|
+
register(agentName: string, session: AgentSession): boolean;
|
|
195
|
+
/**
|
|
196
|
+
* 注销本地 agent 并广播移除消息。
|
|
197
|
+
* @param agentName - 要注销的 agent 名称
|
|
198
|
+
*/
|
|
199
|
+
unregister(agentName: string): void;
|
|
200
|
+
/**
|
|
201
|
+
* 检查 agent(本地或远程)是否已知。
|
|
202
|
+
* @param agentName - agent 名称
|
|
203
|
+
*/
|
|
204
|
+
hasAgent(agentName: string): boolean;
|
|
205
|
+
/**
|
|
206
|
+
* 检查 agent 是否只存在于路由表(即在另一个 iframe 中)。
|
|
207
|
+
* @param agentName - agent 名称
|
|
208
|
+
*/
|
|
209
|
+
hasRemoteAgent(agentName: string): boolean;
|
|
210
|
+
/**
|
|
211
|
+
* 等待 agent 出现(轮询路由表 / 注册事件),若已存在则立即 resolve。
|
|
212
|
+
*
|
|
213
|
+
* @param agentName - agent 名称
|
|
214
|
+
* @param timeout - 最大等待毫秒数(默认 5000)
|
|
215
|
+
*/
|
|
216
|
+
waitForAgent(agentName: string, timeout?: number): Promise<void>;
|
|
217
|
+
/**
|
|
218
|
+
* 向远程 agent 提交任务,返回 Promise 等待结果。
|
|
219
|
+
*
|
|
220
|
+
* @param agentName - 目标 agent 名称
|
|
221
|
+
* @param payload - 任务载荷(task / tools / maxIterations / systemPrompt / model 等)
|
|
222
|
+
* @param callbacks - 可选:onStream 流式回调
|
|
223
|
+
* @returns agent 任务结果
|
|
224
|
+
*/
|
|
225
|
+
submitTask(agentName: string, payload: TaskPayload, callbacks?: SubmitTaskCallbacks): Promise<unknown>;
|
|
226
|
+
/**
|
|
227
|
+
* 注册子 iframe 的 contentWindow 以加入路由树。
|
|
228
|
+
* 自动发起同步重试,直到子窗口确认。
|
|
229
|
+
*
|
|
230
|
+
* @param windowRef - 子 iframe 的 contentWindow(或 NPLWindowProxy)
|
|
231
|
+
*/
|
|
232
|
+
addChildWindow(windowRef: WindowProxy | NPLWindowProxy): void;
|
|
233
|
+
/**
|
|
234
|
+
* 移除子 iframe window,清理其相关路由和任务。
|
|
235
|
+
* @param windowRef - 要移除的 window
|
|
236
|
+
*/
|
|
237
|
+
removeChildWindow(windowRef: WindowProxy | NPLWindowProxy): void;
|
|
238
|
+
/**
|
|
239
|
+
* 销毁路由器:广播断开通知、注销所有 agent、拒绝所有待处理任务、清理监听器。
|
|
240
|
+
* 调用后此实例不可再使用。
|
|
241
|
+
*/
|
|
242
|
+
destroy(): void;
|
|
243
|
+
/**
|
|
244
|
+
* 将本路由器与 Lua 侧 AgentRouter.lua 通过 NPLJS 连接。
|
|
245
|
+
*
|
|
246
|
+
* 创建 NPLWindowProxy 并将其插入现有路由基础设施,
|
|
247
|
+
* AgentRouter 协议消息通过 NPLJS 透明转发,而非 postMessage。
|
|
248
|
+
*
|
|
249
|
+
* @param npljs - NPLJS 实例(需提供 SendMsg / OnMsg)
|
|
250
|
+
* @param options - sendEventName(JS→Lua)/ recvEventName(Lua→JS)
|
|
251
|
+
* @returns this(链式调用)
|
|
252
|
+
*/
|
|
253
|
+
attachNPLJS(npljs: {
|
|
254
|
+
SendMsg: (event: string, msg: unknown) => void;
|
|
255
|
+
OnMsg: (event: string, cb: (data: unknown) => void) => void;
|
|
256
|
+
OffMsg: (event: string) => void;
|
|
257
|
+
}, options?: {
|
|
258
|
+
sendEventName?: string;
|
|
259
|
+
recvEventName?: string;
|
|
260
|
+
}): this;
|
|
261
|
+
/**
|
|
262
|
+
* 断开通过 attachNPLJS 建立的 NPLJS 桥接。
|
|
263
|
+
*
|
|
264
|
+
* @param npljs - 与 attachNPLJS 相同的 NPLJS 实例
|
|
265
|
+
*/
|
|
266
|
+
detachNPLJS(npljs: {
|
|
267
|
+
OffMsg: (event: string) => void;
|
|
268
|
+
}): void;
|
|
269
|
+
/**
|
|
270
|
+
* 向指定 window 发送消息。
|
|
271
|
+
* NPLWindowProxy 通过 NPLJS 路由,普通 WindowProxy 通过 postMessage。
|
|
272
|
+
* @private
|
|
273
|
+
*/
|
|
274
|
+
private _sendTo;
|
|
275
|
+
/**
|
|
276
|
+
* 广播消息到父窗口和所有子 iframe,排除指定 window(防止回显循环)。
|
|
277
|
+
* @private
|
|
278
|
+
*/
|
|
279
|
+
private _broadcast;
|
|
280
|
+
/** @private 主消息事件处理器。 */
|
|
281
|
+
private _onMessage;
|
|
282
|
+
/** @private 处理 agent_register 消息:存储路由并转发。 */
|
|
283
|
+
private _handleRegister;
|
|
284
|
+
/** @private 处理 agent_register_ack(当前仅记录日志)。 */
|
|
285
|
+
private _handleRegisterAck;
|
|
286
|
+
/** @private 处理 agent_register_reject(回滚本地乐观注册)。 */
|
|
287
|
+
private _handleRegisterReject;
|
|
288
|
+
/** @private 处理 agent_unregister(验证来源后删除路由,防止劫持)。 */
|
|
289
|
+
private _handleUnregister;
|
|
290
|
+
/** @private 处理 agent_window_disconnect:清理该 window 的所有路由和任务。 */
|
|
291
|
+
private _handleWindowDisconnect;
|
|
292
|
+
/** @private 处理 agent_task:本地执行或转发到正确的 window。 */
|
|
293
|
+
private _handleTask;
|
|
294
|
+
/** @private 在本地 session 上执行任务(handleTask 接口 或 legacy send 接口)。 */
|
|
295
|
+
private _executeLocalTask;
|
|
296
|
+
/**
|
|
297
|
+
* @private 直接执行工具调用(bypasses LLM,payload.toolCallOnly=true 时调用)。
|
|
298
|
+
* 支持 RestartAgentSignal 跨 iframe 序列化。
|
|
299
|
+
*/
|
|
300
|
+
private _executeLocalToolCall;
|
|
301
|
+
/** @private 处理 agent_task_result:resolve origin 任务或向上游中继。 */
|
|
302
|
+
private _handleTaskResult;
|
|
303
|
+
/** @private 处理 agent_stream:转发给 origin 回调或向上游中继。 */
|
|
304
|
+
private _handleStream;
|
|
305
|
+
/** @private 处理 agent_sync_ack:响应或确认同步。 */
|
|
306
|
+
private _handleSyncAck;
|
|
307
|
+
/** @private 创建 origin 任务记录(带超时自动拒绝)。 */
|
|
308
|
+
private _createOriginTask;
|
|
309
|
+
/** @private 创建 relay 任务记录(转发上游任务)。 */
|
|
310
|
+
private _createRelayTask;
|
|
311
|
+
/**
|
|
312
|
+
* @private 幂等移除任务:清理超时、删除 window 索引,返回被删除的记录(已删除返回 null)。
|
|
313
|
+
*/
|
|
314
|
+
private _clearTask;
|
|
315
|
+
private _indexWindowAgent;
|
|
316
|
+
private _indexWindowTask;
|
|
317
|
+
private _isExpectedTaskSource;
|
|
318
|
+
/**
|
|
319
|
+
* @private 断开 window 时的确定性清理:
|
|
320
|
+
* 1. 从 connectedWindows 删除
|
|
321
|
+
* 2. 删除该 window 持有的所有路由,广播 UNREGISTER
|
|
322
|
+
* 3. 失败该 window 关联的所有任务(origin reject / relay 通知上游)
|
|
323
|
+
*/
|
|
324
|
+
private _cleanupWindow;
|
|
325
|
+
/**
|
|
326
|
+
* @private 将已知的所有 agent(本地 + 路由表)同步到指定 window。
|
|
327
|
+
* backfill 消息携带 syncBackfill:true,防止接收方递归回传。
|
|
328
|
+
*/
|
|
329
|
+
private _syncKnownAgentsToWindow;
|
|
330
|
+
/**
|
|
331
|
+
* @private 带重试的 agent 同步(Phase 1 快速重试 ~5s,Phase 2 每 5s 一次)。
|
|
332
|
+
* 子窗口确认后停止。
|
|
333
|
+
*/
|
|
334
|
+
private _syncWithRetry;
|
|
335
|
+
/** @private 广播 window_disconnect 通知(幂等)。 */
|
|
336
|
+
private _announceWindowDisconnect;
|
|
337
|
+
/** @private 页面生命周期钩子:pagehide 时销毁(bfcache 保留的页面除外)。 */
|
|
338
|
+
private _handleLifecycleTeardown;
|
|
339
|
+
}
|
|
340
|
+
export default AgentRouter;
|
|
341
|
+
export { NPLWindowProxy };
|
|
342
|
+
//# sourceMappingURL=AgentRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentRouter.d.ts","sourceRoot":"","sources":["../../../../src/core/AgentRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,4BAA4B;AAC5B,QAAA,MAAM,GAAG;;;;;;;;;;CAUC,CAAC;AAEX,KAAK,OAAO,GAAG,OAAO,GAAG,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AAE5C,yBAAyB;AACzB,UAAU,aAAa;IACrB,eAAe,EAAE,IAAI,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,YAAY;AACZ,UAAU,WAAW;IACnB,SAAS,EAAE,WAAW,GAAG,cAAc,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,WAAW,GAAG,cAAc,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,cAAc;AACd,UAAU,gBAAgB;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,WAAW,GAAG,cAAc,CAAC;IAC7C,WAAW,EAAE,IAAI,CAAC;IAClB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAChD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;CACjD;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,WAAW,GAAG,cAAc,CAAC;IAC7C,WAAW,EAAE,WAAW,GAAG,cAAc,CAAC;IAC1C,QAAQ,EAAE,IAAI,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,KAAK,UAAU,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAErD,6CAA6C;AAC7C,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5G,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5E,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,uBAAuB;AACvB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;CACzC;AAyBD;;;;;;GAMG;AACH,cAAM,cAAc;IAClB,QAAQ,CAAC,iBAAiB,QAAQ;IAClC,OAAO,CAAC,MAAM,CAAqD;IACnE,OAAO,CAAC,cAAc,CAAS;IAE/B;;;OAGG;gBACS,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,EAAE,aAAa,EAAE,MAAM;IAK5F;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;CAGhC;AAID,cAAM,WAAW;IACf,mBAAmB;IACnB,MAAM,CAAC,KAAK,UAAS;IAErB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAMvE,oBAAoB;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,wCAAwC;IACxC,QAAQ,CAAC,WAAW;iBAA8B,YAAY;OAAM;IAEpE;;;OAGG;IACH,QAAQ,CAAC,UAAU,2BAAkC;IAErD;;;;OAIG;IACH,QAAQ,CAAC,YAAY,0BAAiC;IAEtD,mDAAmD;IACnD,QAAQ,CAAC,YAAY,4CAAwD;IAE7E,oDAAoD;IACpD,QAAQ,CAAC,WAAW,4CAAwD;IAE5E,8BAA8B;IAC9B,QAAQ,CAAC,gBAAgB,+BAA2C;IAEpE,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,iBAAiB,CAAuB;IAChD,mCAAmC;IACnC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;;IAc5B;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO;IAY3D;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOnC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIpC;;;OAGG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI1C;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB9D;;;;;;;OAOG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,GAAE,mBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkB1G;;;;;OAKG;IACH,cAAc,CAAC,SAAS,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI;IAM7D;;;OAGG;IACH,iBAAiB,CAAC,SAAS,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI;IAIhE;;;OAGG;IACH,OAAO,IAAI,IAAI;IAgCf;;;;;;;;;OASG;IACH,WAAW,CACT,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;QAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,EACvJ,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GAC/D,IAAI;IA8BP;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,GAAG,IAAI;IAW7D;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAYf;;;OAGG;IACH,OAAO,CAAC,UAAU;IAYlB,yBAAyB;IACzB,OAAO,CAAC,UAAU;IAuBlB,6CAA6C;IAC7C,OAAO,CAAC,eAAe;IAsCvB,+CAA+C;IAC/C,OAAO,CAAC,kBAAkB;IAI1B,mDAAmD;IACnD,OAAO,CAAC,qBAAqB;IAQ7B,oDAAoD;IACpD,OAAO,CAAC,iBAAiB;IAezB,+DAA+D;IAC/D,OAAO,CAAC,uBAAuB;IAO/B,iDAAiD;YACnC,WAAW;IAwBzB,kEAAkE;YACpD,iBAAiB;IA6D/B;;;OAGG;YACW,qBAAqB;IAwCnC,6DAA6D;IAC7D,OAAO,CAAC,iBAAiB;IAwBzB,oDAAoD;IACpD,OAAO,CAAC,aAAa;IAarB,0CAA0C;IAC1C,OAAO,CAAC,cAAc;IAWtB,wCAAwC;IACxC,OAAO,CAAC,iBAAiB;IAiBzB,sCAAsC;IACtC,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,qBAAqB;IAI7B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IA+BtB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAehC;;;OAGG;IACH,OAAO,CAAC,cAAc;IAoBtB,4CAA4C;IAC5C,OAAO,CAAC,yBAAyB;IAMjC,uDAAuD;IACvD,OAAO,CAAC,wBAAwB;CAIjC;AAED,eAAe,WAAW,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NPL.ts — Paracraft / NPL(神经并行语言)通信桥接模块
|
|
3
|
+
*
|
|
4
|
+
* 提供 Keepwork 前端与 Paracraft 引擎之间的双向消息通信能力:
|
|
5
|
+
* - `NPLUtil`:静态工具集(postMessage 监听、系统检测、微信检测)
|
|
6
|
+
* - `NPLJS`:高级 NPL 通信类,带消息 ID 回调和加载握手
|
|
7
|
+
* - `ParacraftEvent`:Keepwork↔Paracraft 事件总线(前缀隔离)
|
|
8
|
+
*
|
|
9
|
+
* ## 使用前提
|
|
10
|
+
* 打开 HTML 时需在 URL 中带以下参数之一(由 Paracraft /open 命令自动注入):
|
|
11
|
+
* - `?asWebviewInParacraftClient=true`
|
|
12
|
+
* - `?asIframeInWebParacraft=true`
|
|
13
|
+
*
|
|
14
|
+
* ## 快速上手
|
|
15
|
+
* ```ts
|
|
16
|
+
* // 初始化监听(由 index.ts 自动调用)
|
|
17
|
+
* NPLUtil.initializeMessageListeners();
|
|
18
|
+
*
|
|
19
|
+
* // 高级通信
|
|
20
|
+
* window.NPLJSInstance = new NPLJS();
|
|
21
|
+
* window.paracraftEvent = new ParacraftEvent(window.NPLJSInstance);
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* ## 消息前缀约定
|
|
25
|
+
* - 进入方向(Paracraft → Keepwork):`@keepwork_`
|
|
26
|
+
* - 发出方向(Keepwork → Paracraft):`@webparacraft_`
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* 从 URL search 参数读取指定参数值。
|
|
30
|
+
* @param name - 参数名
|
|
31
|
+
* @returns 参数值,不存在时返回空字符串
|
|
32
|
+
*/
|
|
33
|
+
declare function getQueryString(name: string): string;
|
|
34
|
+
/** 微信浏览器检测结果 */
|
|
35
|
+
interface WxEnv {
|
|
36
|
+
isWeChat: boolean;
|
|
37
|
+
isMiniProgram: boolean;
|
|
38
|
+
isWorkWeChat: boolean;
|
|
39
|
+
isAnyWeChat: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 检测当前是否运行在微信系列环境中。
|
|
43
|
+
* 非浏览器环境(SSR)返回全 false。
|
|
44
|
+
*/
|
|
45
|
+
declare function isWeChatBrowser(): WxEnv;
|
|
46
|
+
/**
|
|
47
|
+
* 获取当前运行平台标识。
|
|
48
|
+
* 优先读取 `window.paracraft_platform`,然后 URL 参数,最后 UA 检测。
|
|
49
|
+
*/
|
|
50
|
+
declare function getSystem(): string;
|
|
51
|
+
/**
|
|
52
|
+
* NPL 底层通信对象。
|
|
53
|
+
* 根据当前平台(iOS/macOS/Windows WebView/Emscripten/Android)选择对应的通信机制。
|
|
54
|
+
*/
|
|
55
|
+
declare const NPL: {
|
|
56
|
+
/**
|
|
57
|
+
* 向 Paracraft 发送 NPL 消息(跨平台派发)。
|
|
58
|
+
*
|
|
59
|
+
* @param filename - NPL 文件名(作为消息路由 key)
|
|
60
|
+
* @param msg - 消息体(任意可序列化对象)
|
|
61
|
+
*/
|
|
62
|
+
activate: (filename: string, msg: unknown) => void;
|
|
63
|
+
/**
|
|
64
|
+
* 注册指定文件名的消息接收回调。
|
|
65
|
+
*
|
|
66
|
+
* @param callback - 消息回调函数
|
|
67
|
+
* @param params - 包含 filename 的参数对象
|
|
68
|
+
*/
|
|
69
|
+
this: (callback: (msg: unknown) => void, params?: {
|
|
70
|
+
filename?: string;
|
|
71
|
+
}) => void;
|
|
72
|
+
/**
|
|
73
|
+
* 接收来自 Paracraft 的 NPL 消息并派发给已注册的回调。
|
|
74
|
+
*
|
|
75
|
+
* @param filename - NPL 文件名(消息路由 key)
|
|
76
|
+
* @param msg - 消息体
|
|
77
|
+
*/
|
|
78
|
+
receive: (filename: string, msg: unknown) => void;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* 初始化全局 window.message 监听器(Emscripten/iframe 环境)。
|
|
82
|
+
*
|
|
83
|
+
* 仅当非 WebView / Android / iOS 原生环境(或处于微信环境)时注册,
|
|
84
|
+
* 防止与原生通道冲突。由 `index.ts` 在 SDK 加载时自动调用。
|
|
85
|
+
*/
|
|
86
|
+
declare function initializeMessageListeners(): void;
|
|
87
|
+
/**
|
|
88
|
+
* NPLUtil — NPL 通信静态工具集。
|
|
89
|
+
* 暴露底层 NPL 对象和初始化方法,供外部直接调用。
|
|
90
|
+
*/
|
|
91
|
+
declare class NPLUtil {
|
|
92
|
+
static readonly allMsg: Record<string, (msg: unknown) => void>;
|
|
93
|
+
static readonly NPL: {
|
|
94
|
+
/**
|
|
95
|
+
* 向 Paracraft 发送 NPL 消息(跨平台派发)。
|
|
96
|
+
*
|
|
97
|
+
* @param filename - NPL 文件名(作为消息路由 key)
|
|
98
|
+
* @param msg - 消息体(任意可序列化对象)
|
|
99
|
+
*/
|
|
100
|
+
activate: (filename: string, msg: unknown) => void;
|
|
101
|
+
/**
|
|
102
|
+
* 注册指定文件名的消息接收回调。
|
|
103
|
+
*
|
|
104
|
+
* @param callback - 消息回调函数
|
|
105
|
+
* @param params - 包含 filename 的参数对象
|
|
106
|
+
*/
|
|
107
|
+
this: (callback: (msg: unknown) => void, params?: {
|
|
108
|
+
filename?: string;
|
|
109
|
+
}) => void;
|
|
110
|
+
/**
|
|
111
|
+
* 接收来自 Paracraft 的 NPL 消息并派发给已注册的回调。
|
|
112
|
+
*
|
|
113
|
+
* @param filename - NPL 文件名(消息路由 key)
|
|
114
|
+
* @param msg - 消息体
|
|
115
|
+
*/
|
|
116
|
+
receive: (filename: string, msg: unknown) => void;
|
|
117
|
+
};
|
|
118
|
+
static readonly initializeMessageListeners: typeof initializeMessageListeners;
|
|
119
|
+
static readonly getSystem: typeof getSystem;
|
|
120
|
+
static readonly getQueryString: typeof getQueryString;
|
|
121
|
+
static readonly isWeChatBrowser: typeof isWeChatBrowser;
|
|
122
|
+
}
|
|
123
|
+
/** NPLJS 消息体结构 */
|
|
124
|
+
interface NPLJSMessage {
|
|
125
|
+
msgid?: string;
|
|
126
|
+
msgname?: string;
|
|
127
|
+
msgdata?: unknown;
|
|
128
|
+
request_reply?: boolean;
|
|
129
|
+
response_reply?: boolean;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* NPLJS — 高级 NPL 通信类,提供消息 ID 回调、加载握手、消息订阅/发布。
|
|
133
|
+
*
|
|
134
|
+
* 通常以单例形式使用:
|
|
135
|
+
* ```ts
|
|
136
|
+
* window.NPLJSInstance = new NPLJS();
|
|
137
|
+
* window.NPLJSInstance.OnLoad(() => { console.log('ready'); });
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
declare class NPLJS {
|
|
141
|
+
private m_msg_callbacks;
|
|
142
|
+
private m_ready;
|
|
143
|
+
private m_msgid;
|
|
144
|
+
private m_msgid_callbacks;
|
|
145
|
+
private m_loaded;
|
|
146
|
+
private m_onload_callback;
|
|
147
|
+
private m_onload_timerid;
|
|
148
|
+
constructor();
|
|
149
|
+
/** 是否已与 Paracraft WebView 建立连接。 */
|
|
150
|
+
IsLoaded(): boolean;
|
|
151
|
+
/**
|
|
152
|
+
* 触发加载握手流程(向 Paracraft 发送 'load' 消息,等待确认)。
|
|
153
|
+
* 若已加载则立即返回。
|
|
154
|
+
*/
|
|
155
|
+
Load(): void;
|
|
156
|
+
/** @private 处理 Paracraft 返回的 load 确认消息。 */
|
|
157
|
+
private HandleLoadMsg;
|
|
158
|
+
/**
|
|
159
|
+
* 注册加载完成回调(若已加载则立即触发)。
|
|
160
|
+
* @param callback - 连接建立后的回调
|
|
161
|
+
*/
|
|
162
|
+
OnLoad(callback: () => void): void;
|
|
163
|
+
/** @private 生成自增消息 ID(格式:`js_N`)。 */
|
|
164
|
+
private GetNextMsgId;
|
|
165
|
+
/** @private 发送原始 NPL 消息到 NPLJS 文件。 */
|
|
166
|
+
private Send;
|
|
167
|
+
/**
|
|
168
|
+
* 发送命名消息(可选回调)。
|
|
169
|
+
*
|
|
170
|
+
* @param msgname - 消息名
|
|
171
|
+
* @param msgdata - 消息数据
|
|
172
|
+
* @param msgid - 消息 ID(可选,用于回调关联)
|
|
173
|
+
* @param callback - 收到响应时触发的回调
|
|
174
|
+
*/
|
|
175
|
+
SendMsg(msgname: string, msgdata?: unknown, msgid?: string, callback?: (data: unknown) => void): void;
|
|
176
|
+
/**
|
|
177
|
+
* 接收并派发来自 Paracraft 的 NPLJS 消息。
|
|
178
|
+
* @private
|
|
179
|
+
*/
|
|
180
|
+
RecvMsg(msg: NPLJSMessage): void;
|
|
181
|
+
/**
|
|
182
|
+
* 订阅指定消息名(可同时有多个订阅者)。
|
|
183
|
+
* @param msgname - 消息名
|
|
184
|
+
* @param callback - 回调函数
|
|
185
|
+
*/
|
|
186
|
+
OnMsg(msgname: string, callback: (data: unknown, msgid?: string) => void): void;
|
|
187
|
+
/**
|
|
188
|
+
* 取消订阅指定消息名的回调。
|
|
189
|
+
* @param msgname - 消息名
|
|
190
|
+
* @param callback - 要取消的回调
|
|
191
|
+
*/
|
|
192
|
+
OffMsg(msgname: string, callback: (data: unknown, msgid?: string) => void): void;
|
|
193
|
+
/** @private 派发消息给所有订阅者。 */
|
|
194
|
+
private EmitMsg;
|
|
195
|
+
/**
|
|
196
|
+
* 检测 WebView 环境并在就绪时调用 Load()。
|
|
197
|
+
* 仅在 Windows + Edge 环境下执行,最多重试 3 次(每次间隔 1s)。
|
|
198
|
+
* @private
|
|
199
|
+
*/
|
|
200
|
+
private CheckLoadWebview;
|
|
201
|
+
/**
|
|
202
|
+
* 注册 NPLJS 文件的消息接收回调(构造函数内自动调用)。
|
|
203
|
+
* @private
|
|
204
|
+
*/
|
|
205
|
+
private registerNPLJSReceive;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* ParacraftEvent — Keepwork ↔ Paracraft 事件总线。
|
|
209
|
+
*
|
|
210
|
+
* 通过消息前缀隔离,防止与其他 postMessage 用途冲突:
|
|
211
|
+
* - 进入方向(Paracraft → Keepwork)使用前缀 `@keepwork_`
|
|
212
|
+
* - 发出方向(Keepwork → Paracraft)使用前缀 `@webparacraft_`
|
|
213
|
+
*
|
|
214
|
+
* @param npljsInstance - 可选的 NPLJS 实例;不提供时回退到 window.NPLJSInstance
|
|
215
|
+
*/
|
|
216
|
+
declare class ParacraftEvent {
|
|
217
|
+
private npljsInstance;
|
|
218
|
+
private asIframeInWebParacraft;
|
|
219
|
+
private asWebviewInParacraftClient;
|
|
220
|
+
/** 进入消息前缀(Paracraft → Keepwork) */
|
|
221
|
+
readonly eventPrefix = "@keepwork_";
|
|
222
|
+
/** 发出消息前缀(Keepwork → Paracraft) */
|
|
223
|
+
readonly msgPrefix = "@webparacraft_";
|
|
224
|
+
private events;
|
|
225
|
+
constructor(npljsInstance?: NPLJS);
|
|
226
|
+
/** 获取当前有效的 NPLJS 实例(优先构造时注入,回退 window.NPLJSInstance)。 */
|
|
227
|
+
getNPLJSInstance(): NPLJS | null;
|
|
228
|
+
/** 是否需要通过 NPLJS 发送出站消息(处于 iframe 或 WebView 模式)。 */
|
|
229
|
+
outGoingMsgNeedToBeSent(): boolean;
|
|
230
|
+
/**
|
|
231
|
+
* 订阅来自 Paracraft 的事件消息。
|
|
232
|
+
*
|
|
233
|
+
* @param name - 事件名(不含前缀)
|
|
234
|
+
* @param callback - 事件处理回调
|
|
235
|
+
*/
|
|
236
|
+
onMsg(name: string, callback: (data: unknown) => void): void;
|
|
237
|
+
/**
|
|
238
|
+
* 向 Paracraft 发送消息事件。
|
|
239
|
+
*
|
|
240
|
+
* @param name - 事件名(不含前缀)
|
|
241
|
+
* @param data - 消息数据
|
|
242
|
+
*/
|
|
243
|
+
sendMsg(name: string, data?: unknown): void;
|
|
244
|
+
/**
|
|
245
|
+
* window message 事件监听器(在构造函数中绑定)。
|
|
246
|
+
* 仅处理带 eventPrefix 前缀的消息。
|
|
247
|
+
*/
|
|
248
|
+
messageListener(event: MessageEvent): void;
|
|
249
|
+
}
|
|
250
|
+
export { NPL, NPLUtil, NPLJS, ParacraftEvent };
|
|
251
|
+
//# sourceMappingURL=NPL.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NPL.d.ts","sourceRoot":"","sources":["../../../../src/core/NPL.ts"],"names":[],"mappings":"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"}
|