openclaw-openagent 1.0.13 → 1.0.14
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/src/messaging/executor.d.ts +2 -3
- package/dist/src/messaging/executor.js +4 -31
- package/dist/src/plugin-ui/assets/openagent-override.js +4 -5
- package/dist/src/runtime/update-checker.d.ts +1 -1
- package/dist/src/runtime/update-checker.js +9 -46
- package/package.json +1 -3
- package/src/app/channel-tools.ts +0 -249
- package/src/app/discovery-tools.ts +0 -273
- package/src/app/download-file-tool.ts +0 -133
- package/src/app/hooks.ts +0 -144
- package/src/app/index.ts +0 -84
- package/src/app/messaging-tools.ts +0 -79
- package/src/app/ops-tools.ts +0 -155
- package/src/app/remote-agent-tool.ts +0 -762
- package/src/app/types.ts +0 -68
- package/src/app/upload-file-tool.ts +0 -411
- package/src/app/verbose-preflight.ts +0 -190
- package/src/auth/config.ts +0 -266
- package/src/auth/credential-manager.ts +0 -146
- package/src/auth/index.ts +0 -24
- package/src/auth/verify.ts +0 -99
- package/src/channel.ts +0 -566
- package/src/compat.ts +0 -94
- package/src/config/config-schema.ts +0 -45
- package/src/messaging/aggregator.ts +0 -120
- package/src/messaging/collector.ts +0 -89
- package/src/messaging/executor.ts +0 -72
- package/src/messaging/inbound.ts +0 -150
- package/src/messaging/index.ts +0 -11
- package/src/messaging/mention-protocol.ts +0 -94
- package/src/messaging/process-c2c-request.ts +0 -564
- package/src/messaging/process-message.ts +0 -373
- package/src/messaging/scheduler.ts +0 -55
- package/src/messaging/types.ts +0 -38
- package/src/plugin-ui/adapters/oc-2026-04.js +0 -103
- package/src/plugin-ui/adapters/oc-2026-05.js +0 -125
- package/src/plugin-ui/adapters/oc-2026-06.js +0 -125
- package/src/plugin-ui/adapters/oc-unknown.js +0 -48
- package/src/plugin-ui/assets/agentbook-icon.svg +0 -5
- package/src/plugin-ui/assets/bg.png +0 -0
- package/src/plugin-ui/assets/icon.png +0 -0
- package/src/plugin-ui/assets/magic.svg +0 -5
- package/src/plugin-ui/assets/openagent-override.js +0 -11263
- package/src/plugin-ui/build.cjs +0 -463
- package/src/plugin-ui/index.ts +0 -18
- package/src/plugin-ui/modules/agent-book/panel/agent-book.js +0 -570
- package/src/plugin-ui/modules/agent-book/panel/agent-card.js +0 -170
- package/src/plugin-ui/modules/agent-book/panel/agent-data.js +0 -643
- package/src/plugin-ui/modules/agent-book/panel/inject-ui.js +0 -665
- package/src/plugin-ui/modules/agent-book/panel/mention-state.js +0 -206
- package/src/plugin-ui/modules/agent-book/panel/styles.js +0 -832
- package/src/plugin-ui/modules/agent-book/panel/theme-adapter.js +0 -86
- package/src/plugin-ui/modules/agent-book/remote-agent-tool/components-core.js +0 -295
- package/src/plugin-ui/modules/agent-book/remote-agent-tool/thought-chain-card.js +0 -211
- package/src/plugin-ui/modules/agent-book/scanner.js +0 -131
- package/src/plugin-ui/modules/agent-book/travelcard/travel-cards.js +0 -500
- package/src/plugin-ui/modules/agent-book/travelcard/travel-engine.js +0 -652
- package/src/plugin-ui/modules/agent-book/travelcard/travel-styles.js +0 -262
- package/src/plugin-ui/modules/loader/bootstrap.js +0 -133
- package/src/plugin-ui/modules/loader/shared-state.js +0 -838
- package/src/plugin-ui/modules/loader/ws-intercept.js +0 -199
- package/src/plugin-ui/modules/remote-agent/chunk-parser.js +0 -161
- package/src/plugin-ui/modules/remote-agent/execution-card.js +0 -530
- package/src/plugin-ui/modules/remote-agent/markdown-renderer.js +0 -256
- package/src/plugin-ui/modules/remote-agent/media-links.js +0 -151
- package/src/plugin-ui/modules/remote-agent/native-style-adapter.js +0 -134
- package/src/plugin-ui/modules/remote-agent/output-card.js +0 -342
- package/src/plugin-ui/modules/remote-agent/progress-store.js +0 -363
- package/src/plugin-ui/modules/remote-agent/render-hooks.js +0 -1700
- package/src/plugin-ui/modules/remote-agent/styles.js +0 -903
- package/src/plugin-ui/modules/remote-agent/tool-card-model.js +0 -130
- package/src/plugin-ui/postinstall-deploy.cjs +0 -52
- package/src/plugin-ui/ui-extension-loader/backup.ts +0 -92
- package/src/plugin-ui/ui-extension-loader/index.ts +0 -276
- package/src/plugin-ui/ui-extension-loader/locator.ts +0 -152
- package/src/plugin-ui/ui-extension-loader/manifest.ts +0 -57
- package/src/plugin-ui/ui-extension-loader/registry-regex.ts +0 -944
- package/src/plugin-ui/ui-extension-loader/removed-extensions.ts +0 -70
- package/src/plugin-ui/ui-extension-loader/types.ts +0 -72
- package/src/proxy/auth-proxy.ts +0 -414
- package/src/runtime/account.ts +0 -549
- package/src/runtime/index.ts +0 -7
- package/src/runtime/plugin-runtime.ts +0 -94
- package/src/runtime/registry.ts +0 -71
- package/src/runtime/update-checker.ts +0 -286
- package/src/sdk/CLASS_MAP.md +0 -143
- package/src/sdk/index.d.ts +0 -126
- package/src/sdk/index.js +0 -23990
- package/src/sdk/modules/cloud-search-module.js +0 -1117
- package/src/sdk/modules/follow-module.js +0 -1069
- package/src/sdk/modules/group-module.js +0 -7397
- package/src/sdk/modules/relationship-module.js +0 -2269
- package/src/sdk/modules/signaling-module.js +0 -1468
- package/src/sdk/modules/tim-upload-plugin.js +0 -730
- package/src/sdk/node-env/http-request.js +0 -90
- package/src/sdk/node-env/index.js +0 -57
- package/src/sdk/node-env/storage.js +0 -114
- package/src/sdk/package.json +0 -10
- package/src/sdk/tsconfig.json +0 -16
- package/src/state/pending-invocation-store.ts +0 -43
- package/src/state/store.ts +0 -756
- package/src/tim/c2c.ts +0 -451
- package/src/tim/channels.ts +0 -364
- package/src/tim/client.ts +0 -330
- package/src/tim/index.ts +0 -18
- package/src/tim/messages.ts +0 -166
- package/src/tim/sdk-logger-init.ts +0 -50
- package/src/tools.ts +0 -10
- package/src/transport/factory.ts +0 -95
- package/src/transport/oasn/index.ts +0 -17
- package/src/transport/oasn/oasn-agent-card.ts +0 -111
- package/src/transport/oasn/oasn-discovery.ts +0 -108
- package/src/transport/oasn/oasn-files.ts +0 -210
- package/src/transport/oasn/oasn-http.ts +0 -529
- package/src/transport/oasn/oasn-invocation.ts +0 -604
- package/src/transport/oasn/oasn-normalize.ts +0 -133
- package/src/transport/oasn/oasn-register.ts +0 -33
- package/src/transport/oasn/oasn-transport.ts +0 -318
- package/src/transport/oasn/oasn-types.ts +0 -404
- package/src/transport/tim/index.ts +0 -8
- package/src/transport/tim/tim-transport.ts +0 -515
- package/src/transport/types.ts +0 -538
- package/src/types/openclaw-plugin-sdk-media-store.d.ts +0 -9
- package/src/types/openclaw.d.ts +0 -97
- package/src/types/tencentcloud-chat.d.ts +0 -15
- package/src/util/http.ts +0 -113
- package/src/util/logger.ts +0 -131
- package/src/util/url-resolver.ts +0 -77
package/src/transport/types.ts
DELETED
|
@@ -1,538 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Transport 接口定义层 —— OASN/TIM 双轨抽象的"零依赖"基础
|
|
3
|
-
*
|
|
4
|
-
* 设计依据:docs/specs/2026-06-16-oasn-transport-abstraction-design.md §2.1
|
|
5
|
-
*
|
|
6
|
-
* 设计原则(Interface Segregation Principle):
|
|
7
|
-
* 把原本"塞在一个 AgentTransport 接口里"的所有能力拆成 6 个能力接口,
|
|
8
|
-
* 再用 TypeScript intersection type 组合出 OasnTransport / TimTransport,
|
|
9
|
-
* 联合为 AgentTransport。上层代码依赖最小能力集即可,不再需要
|
|
10
|
-
* `transport.foo?.()` 防御式调用 —— 类型系统在编译期就保证调用合法性。
|
|
11
|
-
*
|
|
12
|
-
* 能力 ↔ 实现 矩阵:
|
|
13
|
-
*
|
|
14
|
-
* 能力接口 ┃ OasnTransport ┃ TimTransport
|
|
15
|
-
* ─────────────────────┃───────────────┃─────────────
|
|
16
|
-
* CoreTransport ┃ ✓ ┃ ✓
|
|
17
|
-
* TaskTransport ┃ ✓ ┃ ✓
|
|
18
|
-
* DiscoveryTransport ┃ ✓ ┃ ✓
|
|
19
|
-
* RegistrationTransport┃ ✓ ┃ ✗
|
|
20
|
-
* FileTransport ┃ ✓ ┃ ✗
|
|
21
|
-
* IMChannelTransport ┃ ✗ ┃ ✓
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
// ═══════════════════════════════════════════════════════════════
|
|
25
|
-
// 凭证层
|
|
26
|
-
// ═══════════════════════════════════════════════════════════════
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* 通用传输凭证。两种 transport 在不同字段语义下复用同一结构。
|
|
30
|
-
*
|
|
31
|
-
* 字段 ┃ OASN ┃ TIM
|
|
32
|
-
* ────────────┃───────────────────────────┃────────────────────────
|
|
33
|
-
* identity ┃ agent_id (`agt_cli_*`) ┃ userId(= agentId)
|
|
34
|
-
* token ┃ api_key (`oak_*`) Bearer ┃ userSig
|
|
35
|
-
* expiresAt ┃ 0(api_key 不过期) ┃ epoch ms(含 5min margin)
|
|
36
|
-
*
|
|
37
|
-
* 注:实现相关常量(apiBase / sdkAppId 等)属于"transport 构造参数",
|
|
38
|
-
* 不进入凭证结构,避免运行期 Record<string, unknown> 类型逃逸。
|
|
39
|
-
*/
|
|
40
|
-
export interface TransportCredentials {
|
|
41
|
-
/** OASN: agent_id;TIM: userId */
|
|
42
|
-
identity: string;
|
|
43
|
-
/** OASN: api_key (Bearer);TIM: userSig */
|
|
44
|
-
token: string;
|
|
45
|
-
/** 过期时间戳 (epoch ms)。OASN 静态 api_key = 0 */
|
|
46
|
-
expiresAt: number;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// ═══════════════════════════════════════════════════════════════
|
|
50
|
-
// 任务请求 / 结果
|
|
51
|
-
// ═══════════════════════════════════════════════════════════════
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* 发起一次远程 Agent 调用的入参。
|
|
55
|
-
*
|
|
56
|
-
* - OASN 路径:requestId 仅做客户端 trace;服务端用 idempotency_key + invocation_id 标识调用
|
|
57
|
-
* - TIM 路径:requestId 直接作为 C2C 关联 id
|
|
58
|
-
*/
|
|
59
|
-
export interface TaskRequest {
|
|
60
|
-
/** 客户端生成的请求 id(不等同于 OASN 的 invocation_id) */
|
|
61
|
-
requestId: string;
|
|
62
|
-
/** 任务文本内容 —— LLM 工具的 `task` 参数 */
|
|
63
|
-
task: string;
|
|
64
|
-
/**
|
|
65
|
-
* 续传已有 session 时填入。
|
|
66
|
-
* - OASN: 用于在已有 session 上叠加新 Invocation
|
|
67
|
-
* - TIM: C2C 无 session 概念,传入即忽略
|
|
68
|
-
*/
|
|
69
|
-
sessionId?: string;
|
|
70
|
-
/** 附件引用列表(OASN file_ref;TIM 当前不支持,忽略) */
|
|
71
|
-
inputFileRefs?: string[];
|
|
72
|
-
/** Artifact 引用列表(OASN-only) */
|
|
73
|
-
inputArtifactRefs?: string[];
|
|
74
|
-
/** OASN Invocation 期望执行超时;服务端会裁决为 effective_timeout_ms */
|
|
75
|
-
timeoutMs?: number;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/** 进度回调载荷 */
|
|
79
|
-
export interface TaskProgress {
|
|
80
|
-
requestId: string;
|
|
81
|
-
/**
|
|
82
|
-
* 进度文本。
|
|
83
|
-
* - OASN: progress.safe_status_message
|
|
84
|
-
* - TIM: C2C `openagent_task_progress` 自定义消息中的 content
|
|
85
|
-
*/
|
|
86
|
-
content: string;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Artifact 引用 —— 远程 Agent 返回的产物(文件/二进制)。
|
|
91
|
-
* 上层若需要内容,必须再次调用 `FileTransport.downloadArtifact()` 拉取。
|
|
92
|
-
*/
|
|
93
|
-
export interface ArtifactRef {
|
|
94
|
-
id: string;
|
|
95
|
-
displayName: string;
|
|
96
|
-
mimeType: string;
|
|
97
|
-
sizeBytes: number;
|
|
98
|
-
/** 服务端是否已就绪可下载。OASN 来自 artifacts[].content_available */
|
|
99
|
-
contentAvailable: boolean;
|
|
100
|
-
/**
|
|
101
|
-
* 内容拉取地址。
|
|
102
|
-
* - OASN: `${apiBase}/api/artifacts/{id}/content`(需 Bearer api_key)
|
|
103
|
-
* - TIM: TIM 服务下载 URL(fetch 即得)
|
|
104
|
-
*/
|
|
105
|
-
contentUrl: string;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* WebUI continuation 引用 —— 远程 ServiceAgent 在标准 run 完成后暴露的 WebUI 入口。
|
|
110
|
-
*
|
|
111
|
-
* 不是 Artifact(不是可下载的二进制产物),也不是文件;只是一段可被用户点击打开
|
|
112
|
-
* 继续与 WebUI 交互的入口。launchUrl 可能是相对路径,由上层按 access base URL 解析。
|
|
113
|
-
*
|
|
114
|
-
* 仅 OASN 路径会填充此结构;TIM 路径不会出现。
|
|
115
|
-
*/
|
|
116
|
-
export interface WebuiContinuationRef {
|
|
117
|
-
/** continuation_id(如 wcont_xxx) */
|
|
118
|
-
id: string;
|
|
119
|
-
/** 按钮/链接展示文案(后端默认 "Open WebUI") */
|
|
120
|
-
displayName: string;
|
|
121
|
-
/** 可见状态(available / pending / expired ...) */
|
|
122
|
-
visibleState: string;
|
|
123
|
-
/**
|
|
124
|
-
* WebUI shell 入口地址。
|
|
125
|
-
* - 通常是相对路径:/webui/continuations/{continuation_id}
|
|
126
|
-
* - 需要 Owner 登录态,直接打开无 token 会得到 WEBUI_AUTH_REQUIRED
|
|
127
|
-
*/
|
|
128
|
-
launchUrl: string;
|
|
129
|
-
/** 关联 session(可用于续传) */
|
|
130
|
-
sessionId?: string;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/** 任务结果 */
|
|
134
|
-
export interface TaskResult {
|
|
135
|
-
requestId: string;
|
|
136
|
-
status: 'complete' | 'error';
|
|
137
|
-
/**
|
|
138
|
-
* 文本结果。
|
|
139
|
-
* - OASN: inline_result.summary(fallback: visible_result.inline_result_summary)
|
|
140
|
-
* - TIM: C2C `openagent_task_result.content`
|
|
141
|
-
*/
|
|
142
|
-
content: string;
|
|
143
|
-
/** 产物列表。可能为空 */
|
|
144
|
-
artifacts?: ArtifactRef[];
|
|
145
|
-
/** WebUI 继续入口。仅 OASN 路径在声明了 webui 能力的 ServiceAgent 完成后返回 */
|
|
146
|
-
webuiContinuation?: WebuiContinuationRef;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* `sendTask` 返回值。携带可观察性 id,便于上层 trace + idempotency 续轮询。
|
|
151
|
-
*
|
|
152
|
-
* - OASN: 含 invocation_id / session_id / effective_timeout_ms
|
|
153
|
-
* - TIM: invocationId = requestId(C2C 无独立 invocation);其他字段 undefined
|
|
154
|
-
*/
|
|
155
|
-
export interface TaskHandle {
|
|
156
|
-
/** OASN: invocation_id;TIM: requestId */
|
|
157
|
-
invocationId: string;
|
|
158
|
-
/** OASN: session_id;TIM: undefined */
|
|
159
|
-
sessionId?: string;
|
|
160
|
-
/** 服务端裁决后的实际超时(OASN: effective_timeout_ms) */
|
|
161
|
-
effectiveTimeoutMs?: number;
|
|
162
|
-
/** 服务端首轮建议轮询间隔(OASN: next_poll_after_ms) */
|
|
163
|
-
nextPollAfterMs?: number;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/** 进度回调签名 */
|
|
167
|
-
export type ProgressCallback = (progress: TaskProgress) => void;
|
|
168
|
-
|
|
169
|
-
/** 被调端任务处理器签名(OASN 不会触发,仅 TIM 的 T3 路径使用) */
|
|
170
|
-
export type TaskHandler = (request: TaskRequest & { from: string }) => Promise<TaskResult>;
|
|
171
|
-
|
|
172
|
-
// ═══════════════════════════════════════════════════════════════
|
|
173
|
-
// 错误类型
|
|
174
|
-
// ═══════════════════════════════════════════════════════════════
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* 传输层统一错误。HTTP 错误 / SDK 错误都在 transport 内部转换为此类型。
|
|
178
|
-
*
|
|
179
|
-
* - OASN 来源:响应体 `error.{ code, message, retryable, details, request_id }`
|
|
180
|
-
* - TIM 来源:SDK 错误 code(KICKED_OUT / NETWORK_TIMEOUT / ...)
|
|
181
|
-
*/
|
|
182
|
-
export interface TransportError extends Error {
|
|
183
|
-
/** 原始错误码 */
|
|
184
|
-
code: string;
|
|
185
|
-
/** 是否可重试(OASN 服务端裁决,TIM 由本地判断) */
|
|
186
|
-
retryable: boolean;
|
|
187
|
-
/** OASN: error.request_id;TIM: SDK request id(若有) */
|
|
188
|
-
requestId?: string;
|
|
189
|
-
/** 关联 invocation/session(如有) */
|
|
190
|
-
invocationId?: string;
|
|
191
|
-
sessionId?: string;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* 构造 TransportError 的工厂。各 transport 实现内部调用。
|
|
196
|
-
* 此处显式声明为 function 而非 class,因为 TransportError 是接口而非具体类型。
|
|
197
|
-
*/
|
|
198
|
-
export function makeTransportError(
|
|
199
|
-
code: string,
|
|
200
|
-
message: string,
|
|
201
|
-
opts: { retryable?: boolean; requestId?: string; invocationId?: string; sessionId?: string } = {},
|
|
202
|
-
): TransportError {
|
|
203
|
-
const err = new Error(message) as TransportError;
|
|
204
|
-
err.code = code;
|
|
205
|
-
err.retryable = opts.retryable ?? false;
|
|
206
|
-
if (opts.requestId) err.requestId = opts.requestId;
|
|
207
|
-
if (opts.invocationId) err.invocationId = opts.invocationId;
|
|
208
|
-
if (opts.sessionId) err.sessionId = opts.sessionId;
|
|
209
|
-
return err;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
// ═══════════════════════════════════════════════════════════════
|
|
213
|
-
// Agent 发现 —— AgentCard / 搜索
|
|
214
|
-
// ═══════════════════════════════════════════════════════════════
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* OASN AgentCard 公开视图。
|
|
218
|
-
* 与 OASN apis.md `GET /api/agent-cards/{agent_id}` 响应字段一一对齐。
|
|
219
|
-
*/
|
|
220
|
-
export interface AgentCard {
|
|
221
|
-
agent_id: string;
|
|
222
|
-
agent_type: 'client' | 'service';
|
|
223
|
-
name: string;
|
|
224
|
-
description: string | null;
|
|
225
|
-
/** Model Operation Manual —— 使用说明(Markdown) */
|
|
226
|
-
MOM: string | null;
|
|
227
|
-
tags: Array<{ tag_id: string; name: string }>;
|
|
228
|
-
category: string[];
|
|
229
|
-
avatar_url: string | null;
|
|
230
|
-
visibility?: 'public' | 'private';
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/** 搜索请求。三种搜索模式(by-query / by-category / by-tags)共用同一结构,由非空字段判定走哪个端点 */
|
|
234
|
-
export interface SearchQuery {
|
|
235
|
-
/** 自然语言(`by-query`) */
|
|
236
|
-
query?: string;
|
|
237
|
-
/** category id 数组(`by-category`) */
|
|
238
|
-
category?: string[];
|
|
239
|
-
/** tag id 数组(`by-tags`) */
|
|
240
|
-
tags?: string[];
|
|
241
|
-
/** 默认 `["service"]`。当前 OASN search 只支持 service */
|
|
242
|
-
agentTypes?: string[];
|
|
243
|
-
sort?: Array<'relevance' | 'usage' | 'recency'>;
|
|
244
|
-
pageSize?: number;
|
|
245
|
-
pageNum?: number;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
export interface SearchResult {
|
|
249
|
-
searchId: string;
|
|
250
|
-
agentCards: AgentCard[];
|
|
251
|
-
pageNum: number;
|
|
252
|
-
pageSize: number;
|
|
253
|
-
hasNext: boolean;
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// ═══════════════════════════════════════════════════════════════
|
|
257
|
-
// Agent 状态 / Owner(OASN-only)
|
|
258
|
-
// ═══════════════════════════════════════════════════════════════
|
|
259
|
-
//
|
|
260
|
-
// register / claim 已迁移到 CLI,插件侧仅保留状态查询。RegisterResult、
|
|
261
|
-
// ClaimParams、ClaimResult 类型已移除。
|
|
262
|
-
|
|
263
|
-
/** `GET /api/agents/{agent_id}` 响应 */
|
|
264
|
-
export interface AgentStatusResult {
|
|
265
|
-
agent_id: string;
|
|
266
|
-
status: 'unclaimed' | 'claim_pending' | 'claimed';
|
|
267
|
-
/** CA/ClientAgent access token, not Owner token. Runtime-only. */
|
|
268
|
-
access_token?: string;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
/** `PATCH /api/agent-cards/{agent_id}` 请求。PATCH 语义:省略=不变,显式 null=清空 */
|
|
272
|
-
export interface AgentCardPatch {
|
|
273
|
-
name?: string | null;
|
|
274
|
-
description?: string | null;
|
|
275
|
-
MOM?: string | null;
|
|
276
|
-
tags?: string[] | null;
|
|
277
|
-
category?: string[] | null;
|
|
278
|
-
avatar_ref?: string | null;
|
|
279
|
-
visibility?: 'public' | 'private';
|
|
280
|
-
public_metadata?: Record<string, unknown> | null;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
/** Category 树节点 */
|
|
284
|
-
export interface CategoryNode {
|
|
285
|
-
category_id: string;
|
|
286
|
-
name: string;
|
|
287
|
-
children?: CategoryNode[];
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
export interface CategoryTree {
|
|
291
|
-
categories: CategoryNode[];
|
|
292
|
-
updated_at: string;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
/** `GET /api/users/me` 响应(Owner 维度,插件当前主要走 Agent api_key) */
|
|
296
|
-
export interface OwnerInfo {
|
|
297
|
-
owner_id: string;
|
|
298
|
-
owner_type: string;
|
|
299
|
-
display_name: string;
|
|
300
|
-
email_masked: string;
|
|
301
|
-
email_verified_at?: string;
|
|
302
|
-
status: string;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
// ═══════════════════════════════════════════════════════════════
|
|
306
|
-
// 文件 / Artifact(OASN-only)
|
|
307
|
-
// ═══════════════════════════════════════════════════════════════
|
|
308
|
-
|
|
309
|
-
/** `POST /api/files` 输入参数 */
|
|
310
|
-
export interface UploadFileParams {
|
|
311
|
-
/** 文件内容(浏览器 Blob 或 Node Buffer) */
|
|
312
|
-
content: Blob | Buffer;
|
|
313
|
-
/** 展示名(含后缀) */
|
|
314
|
-
displayName: string;
|
|
315
|
-
/** 用途标签:input / reference / ... */
|
|
316
|
-
purpose?: string;
|
|
317
|
-
/** 期望可引用时长(秒),服务端最终裁决 */
|
|
318
|
-
expiresInSeconds?: number;
|
|
319
|
-
/** MIME 类型(可选,未传时服务端推断) */
|
|
320
|
-
mimeType?: string;
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
/** `POST /api/files` 响应 */
|
|
324
|
-
export interface UploadFileResult {
|
|
325
|
-
/** 后续 Invocation 的 input_file_refs 使用 */
|
|
326
|
-
fileRef: string;
|
|
327
|
-
displayName: string;
|
|
328
|
-
mimeType: string;
|
|
329
|
-
sizeBytes: number;
|
|
330
|
-
/** epoch ms */
|
|
331
|
-
expiresAt: number;
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
/** Artifact 下载结果 */
|
|
335
|
-
export interface DownloadArtifactResult {
|
|
336
|
-
content: ArrayBuffer;
|
|
337
|
-
mimeType: string;
|
|
338
|
-
displayName: string;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
// ═══════════════════════════════════════════════════════════════
|
|
342
|
-
// IM 频道(TIM-only,多数当前 DORMANT)
|
|
343
|
-
// ═══════════════════════════════════════════════════════════════
|
|
344
|
-
|
|
345
|
-
export interface ChannelInfo {
|
|
346
|
-
id: string;
|
|
347
|
-
name: string;
|
|
348
|
-
desc: string;
|
|
349
|
-
memberCount?: number;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
export interface MemberInfo {
|
|
353
|
-
id: string;
|
|
354
|
-
nick: string;
|
|
355
|
-
role: string;
|
|
356
|
-
avatar?: string;
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
/** 群聊文本消息(TIM-only) */
|
|
360
|
-
export interface TransportMessage {
|
|
361
|
-
id: string;
|
|
362
|
-
channelId: string;
|
|
363
|
-
from: string;
|
|
364
|
-
nick: string;
|
|
365
|
-
text: string;
|
|
366
|
-
/** epoch ms(注:TIM 原始为秒,转换由 transport 层完成) */
|
|
367
|
-
time: number;
|
|
368
|
-
mentionsMe: boolean;
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
// ═══════════════════════════════════════════════════════════════
|
|
372
|
-
// 事件类型
|
|
373
|
-
// ═══════════════════════════════════════════════════════════════
|
|
374
|
-
|
|
375
|
-
/** 两种 transport 都会触发的核心事件 */
|
|
376
|
-
export type CoreTransportEvent =
|
|
377
|
-
/** 凭证失效。OASN: 401 UNAUTHENTICATED;TIM: KICKED_OUT */
|
|
378
|
-
| 'credential_expired'
|
|
379
|
-
/** 重连成功(TIM 有意义;OASN 通常不触发) */
|
|
380
|
-
| 'reconnected'
|
|
381
|
-
/** 连接断开(TIM 有意义;OASN 通常不触发) */
|
|
382
|
-
| 'disconnected';
|
|
383
|
-
|
|
384
|
-
/** 仅 TIM transport 会触发的事件 */
|
|
385
|
-
export type TimOnlyTransportEvent =
|
|
386
|
-
/** 群聊消息到达 */
|
|
387
|
-
| 'message'
|
|
388
|
-
/** 收到远程 agent 的 C2C 任务请求(T3 路径) */
|
|
389
|
-
| 'task_received'
|
|
390
|
-
/** 任务进度推送(C2C 接收方) */
|
|
391
|
-
| 'task_progress';
|
|
392
|
-
|
|
393
|
-
export type TransportEvent = CoreTransportEvent | TimOnlyTransportEvent;
|
|
394
|
-
|
|
395
|
-
// ═══════════════════════════════════════════════════════════════
|
|
396
|
-
// 能力接口
|
|
397
|
-
// ═══════════════════════════════════════════════════════════════
|
|
398
|
-
|
|
399
|
-
/**
|
|
400
|
-
* 核心生命周期 —— 两种 transport 都实现。
|
|
401
|
-
*
|
|
402
|
-
* `ready / isReady` 语义统一为"凭证已校验,可工作":
|
|
403
|
-
* - OASN: api_key 通过 GET /api/agent-cards/{agent_id} 验证
|
|
404
|
-
* - TIM: WS 已 login 且 SDK_READY
|
|
405
|
-
*/
|
|
406
|
-
export interface CoreTransport {
|
|
407
|
-
/** 实例 id(多账户支持时用作 key) */
|
|
408
|
-
readonly id: string;
|
|
409
|
-
readonly transportType: 'oasn' | 'tim';
|
|
410
|
-
|
|
411
|
-
/** 校验凭证并进入可工作状态 */
|
|
412
|
-
ready(credentials: TransportCredentials): Promise<void>;
|
|
413
|
-
|
|
414
|
-
/** 释放资源(OASN: 清轮询 timer;TIM: WS logout) */
|
|
415
|
-
dispose(): Promise<void>;
|
|
416
|
-
|
|
417
|
-
/** 是否处于可工作状态 */
|
|
418
|
-
readonly isReady: boolean;
|
|
419
|
-
|
|
420
|
-
on(event: CoreTransportEvent, handler: (...args: any[]) => void): void;
|
|
421
|
-
off(event: CoreTransportEvent, handler: (...args: any[]) => void): void;
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
/**
|
|
425
|
-
* 任务调用(T2 主路径)—— 两种 transport 都实现。
|
|
426
|
-
*
|
|
427
|
-
* 注意:返回的 `TaskHandle` 由调用方持有并传给 `waitForTaskResult`。
|
|
428
|
-
* 上层不要假设它是简单的 string id —— OASN 需要 invocation_id + session_id 联动。
|
|
429
|
-
*/
|
|
430
|
-
export interface TaskTransport {
|
|
431
|
-
/** 发起远程调用 */
|
|
432
|
-
sendTask(targetAgentId: string, task: TaskRequest): Promise<TaskHandle>;
|
|
433
|
-
|
|
434
|
-
/**
|
|
435
|
-
* 等待任务结果。
|
|
436
|
-
* - OASN: 轮询(或 SSE 升级,见设计文档 §11.8)
|
|
437
|
-
* - TIM: 阻塞等待 C2C `openagent_task_result` 消息
|
|
438
|
-
*
|
|
439
|
-
* 超时由 `options.timeoutMs` 控制(OASN 与 effective_timeout_ms 协调,见 §11.3)。
|
|
440
|
-
*/
|
|
441
|
-
waitForTaskResult(
|
|
442
|
-
handle: TaskHandle,
|
|
443
|
-
options: { timeoutMs: number; signal?: AbortSignal; onProgress?: ProgressCallback },
|
|
444
|
-
): Promise<TaskResult>;
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
/** Agent 发现 —— 两种 transport 都实现(TIM 把 channel 列表伪装成 AgentCard) */
|
|
448
|
-
export interface DiscoveryTransport {
|
|
449
|
-
searchAgents(query: SearchQuery): Promise<SearchResult>;
|
|
450
|
-
getAgent(agentId: string): Promise<AgentCard | null>;
|
|
451
|
-
/** Category 树(OASN-only;TIM 实现可返回空树) */
|
|
452
|
-
getCategories?(params?: { agentType?: string }): Promise<CategoryTree>;
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
/** Agent 状态与管理 —— OASN-only。register/claim 已迁移到 CLI */
|
|
456
|
-
export interface RegistrationTransport {
|
|
457
|
-
getAgentStatus(agentId: string): Promise<AgentStatusResult>;
|
|
458
|
-
updateAgentCard(agentId: string, patch: AgentCardPatch): Promise<AgentCard>;
|
|
459
|
-
getCurrentOwner?(): Promise<OwnerInfo | null>;
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
/** 文件 / Artifact —— OASN-only */
|
|
463
|
-
export interface FileTransport {
|
|
464
|
-
/** 上传文件,返回 file_ref(含 LRU 缓存,见设计文档 §11.4) */
|
|
465
|
-
uploadFile(file: UploadFileParams): Promise<UploadFileResult>;
|
|
466
|
-
/** 下载 Artifact 二进制内容 */
|
|
467
|
-
downloadArtifact(artifactId: string): Promise<DownloadArtifactResult>;
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
/** IM 群聊与频道管理 —— TIM-only */
|
|
471
|
-
export interface IMChannelTransport {
|
|
472
|
-
/** TIM-only 事件订阅 */
|
|
473
|
-
on(event: TimOnlyTransportEvent, handler: (...args: any[]) => void): void;
|
|
474
|
-
off(event: TimOnlyTransportEvent, handler: (...args: any[]) => void): void;
|
|
475
|
-
|
|
476
|
-
/**
|
|
477
|
-
* 接收远程 agent 任务(T3 路径)。
|
|
478
|
-
* OASN 无此能力 —— ClientAgent 是消费者侧,不接收外来 Invocation。
|
|
479
|
-
*/
|
|
480
|
-
onTaskReceived(handler: TaskHandler): void;
|
|
481
|
-
|
|
482
|
-
/** 群聊发文本(支持 @ ) */
|
|
483
|
-
sendGroupMessage(
|
|
484
|
-
channelId: string,
|
|
485
|
-
text: string,
|
|
486
|
-
atUserList?: string[],
|
|
487
|
-
): Promise<{ ok: boolean; messageId: string }>;
|
|
488
|
-
|
|
489
|
-
/** 拉取群历史 */
|
|
490
|
-
fetchGroupHistory(channelId: string, count?: number): Promise<TransportMessage[]>;
|
|
491
|
-
|
|
492
|
-
// 以下方法在当前业务里 DORMANT —— 接口保留为 optional,运行时不激活
|
|
493
|
-
listChannels?(): Promise<ChannelInfo[]>;
|
|
494
|
-
searchChannels?(keyword: string): Promise<ChannelInfo[]>;
|
|
495
|
-
joinChannel?(channelId: string): Promise<{ success: boolean; message: string }>;
|
|
496
|
-
leaveChannel?(channelId: string): Promise<{ success: boolean; message: string }>;
|
|
497
|
-
getMembers?(channelId: string): Promise<MemberInfo[]>;
|
|
498
|
-
createChannel?(name: string, desc?: string): Promise<{ success: boolean; channelId: string }>;
|
|
499
|
-
getChannelSkill?(channelId: string): Promise<string | null>;
|
|
500
|
-
setChannelSkill?(channelId: string, skill: string): Promise<{ success: boolean }>;
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
// ═══════════════════════════════════════════════════════════════
|
|
504
|
-
// 实现侧聚合类型
|
|
505
|
-
// ═══════════════════════════════════════════════════════════════
|
|
506
|
-
|
|
507
|
-
/**
|
|
508
|
-
* OASN transport 的实际能力集合 ——
|
|
509
|
-
* 含核心生命周期 + 任务调用 + 发现 + 注册/认领 + 文件,不含 IM 群聊。
|
|
510
|
-
*/
|
|
511
|
-
export type OasnTransport =
|
|
512
|
-
& CoreTransport
|
|
513
|
-
& TaskTransport
|
|
514
|
-
& DiscoveryTransport
|
|
515
|
-
& RegistrationTransport
|
|
516
|
-
& FileTransport;
|
|
517
|
-
|
|
518
|
-
/**
|
|
519
|
-
* TIM transport 的实际能力集合 ——
|
|
520
|
-
* 含核心生命周期 + 任务调用 + 发现 + IM 群聊,不含 OASN 注册/文件。
|
|
521
|
-
*/
|
|
522
|
-
export type TimTransport =
|
|
523
|
-
& CoreTransport
|
|
524
|
-
& TaskTransport
|
|
525
|
-
& DiscoveryTransport
|
|
526
|
-
& IMChannelTransport;
|
|
527
|
-
|
|
528
|
-
/**
|
|
529
|
-
* 上层调用方持有的联合类型。
|
|
530
|
-
*
|
|
531
|
-
* 使用规范:
|
|
532
|
-
* - 只用 Core/Task/Discovery 能力 → 直接接收 AgentTransport
|
|
533
|
-
* - 需要 OASN-only 能力(注册/文件)→ 通过 `transport.transportType === 'oasn'` narrow
|
|
534
|
-
* - 需要 TIM-only 能力(群聊/T3)→ 通过 `transport.transportType === 'tim'` narrow
|
|
535
|
-
*
|
|
536
|
-
* 不要使用 `transport.foo?.()` 防御式调用 —— 用 transportType 在编译期 narrow。
|
|
537
|
-
*/
|
|
538
|
-
export type AgentTransport = OasnTransport | TimTransport;
|
package/src/types/openclaw.d.ts
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Minimal type declarations for openclaw peer dependency.
|
|
3
|
-
* Only declares the APIs actually used by this plugin.
|
|
4
|
-
*
|
|
5
|
-
* These stubs allow `tsc --noEmit` to pass in environments where
|
|
6
|
-
* openclaw is not installed (e.g. npm pack / CI).
|
|
7
|
-
* At runtime, the real openclaw package provides the implementations.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
declare module 'openclaw/plugin-sdk/infra-runtime' {
|
|
11
|
-
export function resolvePreferredOpenClawTmpDir(): string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
declare module 'openclaw/plugin-sdk/plugin-entry' {
|
|
15
|
-
export interface OpenClawPluginApi {
|
|
16
|
-
runtime?: import('openclaw/plugin-sdk/core').PluginRuntime;
|
|
17
|
-
registerChannel(opts: { plugin: unknown }): void;
|
|
18
|
-
registerTool(factory: unknown, opts?: { optional?: boolean }): void;
|
|
19
|
-
registerHook?(hook: unknown): void;
|
|
20
|
-
registerHttpRoute(params: {
|
|
21
|
-
path: string;
|
|
22
|
-
auth: 'gateway' | 'plugin';
|
|
23
|
-
match?: 'exact' | 'prefix';
|
|
24
|
-
replaceExisting?: boolean;
|
|
25
|
-
handler: (req: import('node:http').IncomingMessage, res: import('node:http').ServerResponse) => Promise<boolean> | boolean;
|
|
26
|
-
}): void;
|
|
27
|
-
registrationMode?: string;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
declare module 'openclaw/plugin-sdk/channel-config-schema' {
|
|
32
|
-
export function buildChannelConfigSchema(schema: unknown): unknown;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
declare module 'openclaw/plugin-sdk/core' {
|
|
36
|
-
export interface PluginRuntime {
|
|
37
|
-
version?: string;
|
|
38
|
-
channel: {
|
|
39
|
-
routing: {
|
|
40
|
-
resolveAgentRoute(params: {
|
|
41
|
-
cfg: unknown;
|
|
42
|
-
channel: string;
|
|
43
|
-
accountId: string;
|
|
44
|
-
peer: { kind: string; id: string };
|
|
45
|
-
}): {
|
|
46
|
-
agentId?: string;
|
|
47
|
-
sessionKey?: string;
|
|
48
|
-
mainSessionKey?: string;
|
|
49
|
-
};
|
|
50
|
-
};
|
|
51
|
-
reply: {
|
|
52
|
-
finalizeInboundContext(ctx: unknown): unknown;
|
|
53
|
-
createReplyDispatcherWithTyping(opts: {
|
|
54
|
-
deliver: (
|
|
55
|
-
payload: { text?: string; mediaUrl?: string; mediaUrls?: string[] },
|
|
56
|
-
meta?: { kind?: string },
|
|
57
|
-
) => Promise<void>;
|
|
58
|
-
onError?: (err: unknown, info: { kind: string }) => void;
|
|
59
|
-
}): {
|
|
60
|
-
dispatcher: unknown;
|
|
61
|
-
replyOptions: Record<string, unknown>;
|
|
62
|
-
markDispatchIdle: () => void;
|
|
63
|
-
};
|
|
64
|
-
withReplyDispatcher(opts: { dispatcher: unknown; run: () => Promise<void> }): Promise<void>;
|
|
65
|
-
dispatchReplyFromConfig(opts: {
|
|
66
|
-
ctx: unknown;
|
|
67
|
-
cfg: unknown;
|
|
68
|
-
dispatcher: unknown;
|
|
69
|
-
replyOptions?: Record<string, unknown>;
|
|
70
|
-
}): Promise<void>;
|
|
71
|
-
};
|
|
72
|
-
session: {
|
|
73
|
-
resolveStorePath(store: unknown, opts: { agentId: string }): string;
|
|
74
|
-
recordInboundSession(opts: {
|
|
75
|
-
storePath: string;
|
|
76
|
-
sessionKey?: string;
|
|
77
|
-
ctx: unknown;
|
|
78
|
-
updateLastRoute?: {
|
|
79
|
-
sessionKey?: string;
|
|
80
|
-
channel: string;
|
|
81
|
-
to: string;
|
|
82
|
-
accountId: string;
|
|
83
|
-
};
|
|
84
|
-
onRecordError?: (err: unknown) => void;
|
|
85
|
-
}): Promise<void>;
|
|
86
|
-
};
|
|
87
|
-
};
|
|
88
|
-
events: {
|
|
89
|
-
onAgentEvent(listener: (evt: {
|
|
90
|
-
sessionKey?: string;
|
|
91
|
-
stream?: string;
|
|
92
|
-
data: { phase?: string; partialResult?: unknown; [key: string]: unknown };
|
|
93
|
-
[key: string]: unknown;
|
|
94
|
-
}) => void): () => void;
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Type declarations for local SDK modules
|
|
3
|
-
*
|
|
4
|
-
* These are JS-only modules bundled in src/sdk/ that need
|
|
5
|
-
* minimal type stubs for TypeScript compilation.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
declare module '../sdk/modules/group-module.js' {
|
|
9
|
-
const GroupModule: unknown;
|
|
10
|
-
export default GroupModule;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
declare module '../sdk/node-env/index.js' {
|
|
14
|
-
// Side-effect only module — installs ws WebSocket, localStorage, rejection handler
|
|
15
|
-
}
|