@mindpal/protocol 0.0.2-alpha

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.
@@ -0,0 +1,354 @@
1
+ /**
2
+ * Skill RPC Protocol — JSON-RPC over stdio 标准协议定义
3
+ *
4
+ * OS 思维:Skill 是"用户态进程",Skill Runner 是"进程管理器"。
5
+ * 本协议定义了 Runner 与 Skill 子进程之间的通信契约。
6
+ *
7
+ * 传输层:换行分隔的 JSON(NDJSON / JSON Lines),over stdin/stdout
8
+ * 控制信道:stderr(日志 + 进度)
9
+ *
10
+ * 消息格式遵循 JSON-RPC 2.0 子集:
11
+ * - Request: { jsonrpc: "2.0", id, method, params }
12
+ * - Response: { jsonrpc: "2.0", id, result } | { jsonrpc: "2.0", id, error }
13
+ * - Notification: { jsonrpc: "2.0", method, params } (无 id,无需响应)
14
+ */
15
+ import { type RegistryEntry } from './registry.js';
16
+ export declare const SKILL_RPC_VERSION = "1.0";
17
+ export declare const SKILL_RPC_JSONRPC: "2.0";
18
+ /** 当前 Device Agent 协议版本 */
19
+ export declare const DEVICE_PROTOCOL_VERSION = "1.0";
20
+ /** 最低支持的协议版本 */
21
+ export declare const MIN_SUPPORTED_PROTOCOL_VERSION = "1.0";
22
+ /** 所有支持的协议版本列表 */
23
+ export declare const PROTOCOL_VERSIONS: readonly ["1.0"];
24
+ /** 协议版本类型 */
25
+ export type ProtocolVersion = (typeof PROTOCOL_VERSIONS)[number];
26
+ /** Device Agent → API: 协议握手请求 */
27
+ export interface ProtocolHandshake {
28
+ type: "protocol.handshake";
29
+ protocolVersion: string;
30
+ agentVersion: string;
31
+ capabilities: string[];
32
+ }
33
+ /** API → Device Agent: 协议握手确认 */
34
+ export interface ProtocolHandshakeAck {
35
+ type: "protocol.handshake.ack";
36
+ negotiatedVersion: string;
37
+ serverVersion: string;
38
+ compatible: boolean;
39
+ deprecationWarning?: string;
40
+ /** 服务端下发的多模态策略(元数据驱动) */
41
+ multimodalPolicy?: DeviceMultimodalPolicy | null;
42
+ }
43
+ /** 设备支持的模态类型 */
44
+ export type DeviceModality = 'image' | 'audio' | 'video' | 'text' | 'sensor' | 'actuator' | (string & {});
45
+ export declare const BUILTIN_DEVICE_MODALITIES: RegistryEntry[];
46
+ export declare const modalityRegistry: import("./registry.js").TypeRegistry<unknown>;
47
+ export type SkillRuntime = string;
48
+ export declare const BUILTIN_SKILL_RUNTIMES: RegistryEntry[];
49
+ export declare const runtimeRegistry: import("./registry.js").TypeRegistry<unknown>;
50
+ export type SensitivityProfile = string;
51
+ export declare const BUILTIN_SENSITIVITY_PROFILES: RegistryEntry[];
52
+ export declare const sensitivityProfileRegistry: import("./registry.js").TypeRegistry<unknown>;
53
+ /** 设备多模态能力声明(设备注册/握手时上报) */
54
+ export interface DeviceMultimodalCapabilities {
55
+ modalities: DeviceModality[];
56
+ multimodalConfig?: {
57
+ maxFileSize?: number;
58
+ supportedFormats?: Partial<Record<DeviceModality, string[]>>;
59
+ /** 流式交互配置 */
60
+ streaming?: {
61
+ supported: boolean;
62
+ maxConcurrentStreams?: number;
63
+ };
64
+ /** VAD(语音活动检测)配置 —— 元数据驱动 */
65
+ vad?: {
66
+ enabled: boolean;
67
+ silenceThresholdMs?: number;
68
+ energySmoothingFactor?: number;
69
+ adaptiveThreshold?: boolean;
70
+ /** 噪声基线校准时长(ms),默认 3000 */
71
+ noiseCalibrationMs?: number;
72
+ /** 最小语音段时长(ms),低于此值视为噪声,默认 200 */
73
+ minSpeechDurationMs?: number;
74
+ /** 灵敏度档位:quiet/normal/noisy/auto */
75
+ sensitivityProfile?: SensitivityProfile;
76
+ };
77
+ /** 轻量级视频帧流配置 */
78
+ videoStream?: {
79
+ supported: boolean;
80
+ frameIntervalMs?: number;
81
+ maxFrameWidth?: number;
82
+ format?: "jpeg" | "png";
83
+ };
84
+ };
85
+ /**
86
+ * 设备能力描述符(OS级设备抽象,设备连接时上报)。
87
+ * 完整类型定义见 @mindpal/shared deviceProtocol.DeviceCapabilityDescriptor。
88
+ * 协议层仅保留弱类型引用以保持零依赖。
89
+ */
90
+ capabilityDescriptor?: unknown;
91
+ }
92
+ /** 服务端下发的多模态策略 */
93
+ export interface DeviceMultimodalPolicy {
94
+ allowedModalities: DeviceModality[];
95
+ maxFileSizeBytes: number;
96
+ supportedFormats: Partial<Record<DeviceModality, string[]>>;
97
+ /** 流式策略下发 */
98
+ streaming?: {
99
+ supported: boolean;
100
+ maxConcurrentStreams?: number;
101
+ sttStreaming?: boolean;
102
+ ttsStreaming?: boolean;
103
+ } | null;
104
+ /** VAD 策略下发 */
105
+ vad?: {
106
+ enabled: boolean;
107
+ silenceThresholdMs?: number;
108
+ energySmoothingFactor?: number;
109
+ adaptiveThreshold?: boolean;
110
+ noiseCalibrationMs?: number;
111
+ minSpeechDurationMs?: number;
112
+ sensitivityProfile?: SensitivityProfile;
113
+ } | null;
114
+ /** 视频帧流策略下发 */
115
+ videoStream?: {
116
+ supported: boolean;
117
+ frameIntervalMs?: number;
118
+ maxFrameWidth?: number;
119
+ format?: "jpeg" | "png";
120
+ realtimeAnalysis?: boolean;
121
+ } | null;
122
+ }
123
+ /** 设备多模态附件 */
124
+ export interface DeviceAttachment {
125
+ type: "image" | "document" | "voice" | "video";
126
+ mimeType: string;
127
+ name?: string;
128
+ /** base64 data URL */
129
+ dataUrl?: string;
130
+ }
131
+ /** 设备 → 云端:多模态查询消息 */
132
+ export interface DeviceMultimodalQuery {
133
+ type: "device_query";
134
+ sessionId: string;
135
+ conversationId?: string;
136
+ message: string;
137
+ attachments?: DeviceAttachment[];
138
+ }
139
+ /**
140
+ * 检查客户端版本是否与最低版本兼容。
141
+ * 仅比较主版本号(semver major)。
142
+ */
143
+ export declare function isVersionCompatible(clientVersion: string, minVersion: string): boolean;
144
+ /**
145
+ * 在服务端支持的版本列表中选出与客户端兼容的最高版本。
146
+ * 返回 null 表示无兼容版本。
147
+ */
148
+ export declare function negotiateVersion(clientVersion: string, supportedVersions: readonly string[]): string | null;
149
+ /** JSON-RPC 请求 */
150
+ export interface SkillRpcRequest<P = unknown> {
151
+ jsonrpc: typeof SKILL_RPC_JSONRPC;
152
+ id: string | number;
153
+ method: string;
154
+ params: P;
155
+ }
156
+ /** JSON-RPC 成功响应 */
157
+ export interface SkillRpcSuccess<R = unknown> {
158
+ jsonrpc: typeof SKILL_RPC_JSONRPC;
159
+ id: string | number;
160
+ result: R;
161
+ }
162
+ /** JSON-RPC 错误响应 */
163
+ export interface SkillRpcError {
164
+ jsonrpc: typeof SKILL_RPC_JSONRPC;
165
+ id: string | number | null;
166
+ error: {
167
+ code: number;
168
+ message: string;
169
+ data?: unknown;
170
+ };
171
+ }
172
+ /** JSON-RPC 通知(无 id,无需响应) */
173
+ export interface SkillRpcNotification<P = unknown> {
174
+ jsonrpc: typeof SKILL_RPC_JSONRPC;
175
+ method: string;
176
+ params: P;
177
+ }
178
+ export type SkillRpcResponse<R = unknown> = SkillRpcSuccess<R> | SkillRpcError;
179
+ export type SkillRpcMessage = SkillRpcRequest | SkillRpcResponse | SkillRpcNotification;
180
+ /** JSON-RPC 2.0 标准错误码 — 固定不变 */
181
+ export declare const JSONRPC_STANDARD_ERRORS: {
182
+ readonly PARSE_ERROR: -32700;
183
+ readonly INVALID_REQUEST: -32600;
184
+ readonly METHOD_NOT_FOUND: -32601;
185
+ readonly INVALID_PARAMS: -32602;
186
+ readonly INTERNAL_ERROR: -32603;
187
+ };
188
+ /** 自定义错误码注册表 */
189
+ export declare const BUILTIN_CUSTOM_ERRORS: RegistryEntry<number>[];
190
+ export declare const skillErrorCodeRegistry: import("./registry.js").TypeRegistry<number>;
191
+ /** 向后兼容的完整错误码对象(合并标准+自定义) */
192
+ export declare const SKILL_RPC_ERRORS: {
193
+ readonly EXECUTION_TIMEOUT: -32001;
194
+ readonly EXECUTION_FAILED: -32002;
195
+ readonly RESOURCE_EXHAUSTED: -32003;
196
+ readonly POLICY_VIOLATION: -32004;
197
+ readonly DEPENDENCY_ERROR: -32005;
198
+ readonly CAPABILITY_DENIED: -32006;
199
+ readonly PARSE_ERROR: -32700;
200
+ readonly INVALID_REQUEST: -32600;
201
+ readonly METHOD_NOT_FOUND: -32601;
202
+ readonly INVALID_PARAMS: -32602;
203
+ readonly INTERNAL_ERROR: -32603;
204
+ };
205
+ import type { InferenceMode, ModelCapabilityTier } from './skill-manifest.js';
206
+ /** Runner → Skill: 模型配置注入(Runner 根据 manifest.modelRequirements 分配) */
207
+ export interface SkillModelConfig {
208
+ /** 分配的模型端点 URL */
209
+ endpoint: string;
210
+ /** 认证令牌 */
211
+ apiKey: string;
212
+ /** 模型标识符(如 gpt-4o, claude-sonnet, deepseek-r1) */
213
+ model: string;
214
+ /** 推理模式(由 Runner 根据 manifest 声明确定) */
215
+ inferenceMode: InferenceMode;
216
+ /** 实际分配的能力等级 */
217
+ capabilityTier: ModelCapabilityTier;
218
+ /** 模型调用超时(ms) */
219
+ timeoutMs: number;
220
+ /** 最大输出 token 数 */
221
+ maxOutputTokens?: number;
222
+ }
223
+ /** Runner → Skill: 初始化请求 */
224
+ export interface SkillInitializeParams {
225
+ /** 协议版本 */
226
+ protocolVersion: string;
227
+ /** Skill 工具引用 */
228
+ toolRef: string;
229
+ /** 执行上下文 */
230
+ context: {
231
+ tenantId: string;
232
+ spaceId: string | null;
233
+ subjectId: string | null;
234
+ traceId: string;
235
+ locale: string;
236
+ };
237
+ /** 能力包络(声明 Skill 可使用的能力) */
238
+ capabilities: {
239
+ /** 允许的出站域名 */
240
+ allowedDomains: string[];
241
+ /** 允许的文件系统路径 */
242
+ allowedPaths: string[];
243
+ /** 是否允许网络访问 */
244
+ networkAccess: boolean;
245
+ };
246
+ /** 资源限制 */
247
+ limits: {
248
+ timeoutMs: number;
249
+ memoryMb: number;
250
+ maxOutputBytes: number;
251
+ };
252
+ /** 模型配置注入(Runner 根据 manifest.modelRequirements 分配模型资源) */
253
+ modelConfig?: SkillModelConfig;
254
+ }
255
+ /** Skill → Runner: 初始化响应 */
256
+ export interface SkillInitializeResult {
257
+ /** Skill 名称 */
258
+ name: string;
259
+ /** Skill 版本 */
260
+ version: string;
261
+ /** 支持的运行时语言 */
262
+ runtime: SkillRuntime;
263
+ /** Skill 声明的能力需求 */
264
+ requiredCapabilities?: string[];
265
+ }
266
+ /** Runner → Skill: 执行请求 */
267
+ export interface SkillExecuteParams {
268
+ /** 请求唯一 ID(幂等键) */
269
+ requestId: string;
270
+ /** 要调用的 Skill 方法名(Skill 可暴露多个方法,缺省时调用默认入口) */
271
+ method?: string;
272
+ /** 输入参数 */
273
+ input: Record<string, unknown>;
274
+ /** 输入摘要 */
275
+ inputDigest: {
276
+ sha256_8: string;
277
+ bytes: number;
278
+ };
279
+ /** 可选执行上下文(可序列化部分,apiFetch 在沙箱中就地构造) */
280
+ context?: {
281
+ locale: string;
282
+ apiBaseUrl?: string;
283
+ authToken?: string;
284
+ };
285
+ }
286
+ /** Skill → Runner: 执行响应 */
287
+ export interface SkillExecuteResult {
288
+ /** 输出数据 */
289
+ output: unknown;
290
+ /** 输出摘要 */
291
+ outputDigest?: {
292
+ sha256_8?: string;
293
+ bytes?: number;
294
+ };
295
+ /** 出站请求摘要 */
296
+ egressSummary?: {
297
+ allowed: number;
298
+ denied: number;
299
+ };
300
+ }
301
+ export interface SkillHeartbeatParams {
302
+ ts: number;
303
+ }
304
+ export interface SkillHeartbeatResult {
305
+ ts: number;
306
+ status: "alive" | "busy";
307
+ }
308
+ /** Skill → Runner: 进度通知 */
309
+ export interface SkillProgressNotification {
310
+ /** 进度百分比 0-100 */
311
+ progress: number;
312
+ /** 当前阶段描述 */
313
+ phase?: string;
314
+ /** 附加信息 */
315
+ detail?: unknown;
316
+ }
317
+ /** Skill → Runner: 日志通知 */
318
+ export interface SkillLogNotification {
319
+ level: "debug" | "info" | "warn" | "error";
320
+ message: string;
321
+ data?: unknown;
322
+ }
323
+ export declare const SKILL_RPC_METHODS: {
324
+ readonly INITIALIZE: "skill.initialize";
325
+ readonly EXECUTE: "skill.execute";
326
+ readonly HEARTBEAT: "skill.heartbeat";
327
+ readonly SHUTDOWN: "skill.shutdown";
328
+ /** 通知方法 */
329
+ readonly PROGRESS: "skill.progress";
330
+ readonly LOG: "skill.log";
331
+ };
332
+ /** 获取 RPC 解析失败累计次数(可观测性 / 健康检查用) */
333
+ export declare function getRpcParseFailures(): number;
334
+ /** 创建 JSON-RPC 请求 */
335
+ export declare function createRpcRequest<P>(id: string | number, method: string, params: P): SkillRpcRequest<P>;
336
+ /** 创建 JSON-RPC 成功响应 */
337
+ export declare function createRpcSuccess<R>(id: string | number, result: R): SkillRpcSuccess<R>;
338
+ /** 创建 JSON-RPC 错误响应 */
339
+ export declare function createRpcError(id: string | number | null, code: number, message: string, data?: unknown): SkillRpcError;
340
+ /** 创建通知消息 */
341
+ export declare function createRpcNotification<P>(method: string, params: P): SkillRpcNotification<P>;
342
+ /** 序列化为 NDJSON 行 */
343
+ export declare function serializeRpcMessage(msg: SkillRpcMessage): string;
344
+ /** 从 NDJSON 行反序列化 */
345
+ export declare function parseRpcMessage(line: string): SkillRpcMessage | null;
346
+ /** 判断是否为请求 */
347
+ export declare function isRpcRequest(msg: SkillRpcMessage): msg is SkillRpcRequest;
348
+ /** 判断是否为通知 */
349
+ export declare function isRpcNotification(msg: SkillRpcMessage): msg is SkillRpcNotification;
350
+ /** 判断是否为响应 */
351
+ export declare function isRpcResponse(msg: SkillRpcMessage): msg is SkillRpcResponse;
352
+ /** 判断是否为错误响应 */
353
+ export declare function isRpcError(msg: SkillRpcMessage): msg is SkillRpcError;
354
+ //# sourceMappingURL=skill-rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-rpc.d.ts","sourceRoot":"","sources":["../src/skill-rpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ /**
3
+ * Skill RPC Protocol — JSON-RPC over stdio 标准协议定义
4
+ *
5
+ * OS 思维:Skill 是"用户态进程",Skill Runner 是"进程管理器"。
6
+ * 本协议定义了 Runner 与 Skill 子进程之间的通信契约。
7
+ *
8
+ * 传输层:换行分隔的 JSON(NDJSON / JSON Lines),over stdin/stdout
9
+ * 控制信道:stderr(日志 + 进度)
10
+ *
11
+ * 消息格式遵循 JSON-RPC 2.0 子集:
12
+ * - Request: { jsonrpc: "2.0", id, method, params }
13
+ * - Response: { jsonrpc: "2.0", id, result } | { jsonrpc: "2.0", id, error }
14
+ * - Notification: { jsonrpc: "2.0", method, params } (无 id,无需响应)
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.SKILL_RPC_METHODS = exports.SKILL_RPC_ERRORS = exports.skillErrorCodeRegistry = exports.BUILTIN_CUSTOM_ERRORS = exports.JSONRPC_STANDARD_ERRORS = exports.sensitivityProfileRegistry = exports.BUILTIN_SENSITIVITY_PROFILES = exports.runtimeRegistry = exports.BUILTIN_SKILL_RUNTIMES = exports.modalityRegistry = exports.BUILTIN_DEVICE_MODALITIES = exports.PROTOCOL_VERSIONS = exports.MIN_SUPPORTED_PROTOCOL_VERSION = exports.DEVICE_PROTOCOL_VERSION = exports.SKILL_RPC_JSONRPC = exports.SKILL_RPC_VERSION = void 0;
18
+ exports.isVersionCompatible = isVersionCompatible;
19
+ exports.negotiateVersion = negotiateVersion;
20
+ exports.getRpcParseFailures = getRpcParseFailures;
21
+ exports.createRpcRequest = createRpcRequest;
22
+ exports.createRpcSuccess = createRpcSuccess;
23
+ exports.createRpcError = createRpcError;
24
+ exports.createRpcNotification = createRpcNotification;
25
+ exports.serializeRpcMessage = serializeRpcMessage;
26
+ exports.parseRpcMessage = parseRpcMessage;
27
+ exports.isRpcRequest = isRpcRequest;
28
+ exports.isRpcNotification = isRpcNotification;
29
+ exports.isRpcResponse = isRpcResponse;
30
+ exports.isRpcError = isRpcError;
31
+ const registry_js_1 = require("./registry.js");
32
+ /* ================================================================== */
33
+ /* 协议版本 */
34
+ /* ================================================================== */
35
+ exports.SKILL_RPC_VERSION = "1.0";
36
+ exports.SKILL_RPC_JSONRPC = "2.0";
37
+ /* ================================================================== */
38
+ /* Device Agent 协议版本管控 */
39
+ /* ================================================================== */
40
+ /** 当前 Device Agent 协议版本 */
41
+ exports.DEVICE_PROTOCOL_VERSION = "1.0";
42
+ /** 最低支持的协议版本 */
43
+ exports.MIN_SUPPORTED_PROTOCOL_VERSION = "1.0";
44
+ /** 所有支持的协议版本列表 */
45
+ exports.PROTOCOL_VERSIONS = ["1.0"];
46
+ exports.BUILTIN_DEVICE_MODALITIES = [
47
+ (0, registry_js_1.builtInEntry)('image', 'device.modality'),
48
+ (0, registry_js_1.builtInEntry)('audio', 'device.modality'),
49
+ (0, registry_js_1.builtInEntry)('video', 'device.modality'),
50
+ ];
51
+ exports.modalityRegistry = (0, registry_js_1.createRegistry)(exports.BUILTIN_DEVICE_MODALITIES);
52
+ exports.BUILTIN_SKILL_RUNTIMES = [
53
+ (0, registry_js_1.builtInEntry)('python', 'skill.runtime'),
54
+ (0, registry_js_1.builtInEntry)('node', 'skill.runtime'),
55
+ (0, registry_js_1.builtInEntry)('go', 'skill.runtime'),
56
+ (0, registry_js_1.builtInEntry)('rust', 'skill.runtime'),
57
+ (0, registry_js_1.builtInEntry)('other', 'skill.runtime'),
58
+ ];
59
+ exports.runtimeRegistry = (0, registry_js_1.createRegistry)(exports.BUILTIN_SKILL_RUNTIMES);
60
+ exports.BUILTIN_SENSITIVITY_PROFILES = [
61
+ (0, registry_js_1.builtInEntry)('quiet', 'device.vad.sensitivity'),
62
+ (0, registry_js_1.builtInEntry)('normal', 'device.vad.sensitivity'),
63
+ (0, registry_js_1.builtInEntry)('noisy', 'device.vad.sensitivity'),
64
+ (0, registry_js_1.builtInEntry)('auto', 'device.vad.sensitivity'),
65
+ ];
66
+ exports.sensitivityProfileRegistry = (0, registry_js_1.createRegistry)(exports.BUILTIN_SENSITIVITY_PROFILES);
67
+ /**
68
+ * 检查客户端版本是否与最低版本兼容。
69
+ * 仅比较主版本号(semver major)。
70
+ */
71
+ function isVersionCompatible(clientVersion, minVersion) {
72
+ const clientMajor = parseMajor(clientVersion);
73
+ const minMajor = parseMajor(minVersion);
74
+ if (clientMajor === null || minMajor === null)
75
+ return false;
76
+ return clientMajor >= minMajor;
77
+ }
78
+ /**
79
+ * 在服务端支持的版本列表中选出与客户端兼容的最高版本。
80
+ * 返回 null 表示无兼容版本。
81
+ */
82
+ function negotiateVersion(clientVersion, supportedVersions) {
83
+ const clientMajor = parseMajor(clientVersion);
84
+ if (clientMajor === null)
85
+ return null;
86
+ let best = null;
87
+ let bestMajor = -1;
88
+ for (const v of supportedVersions) {
89
+ const major = parseMajor(v);
90
+ if (major === null)
91
+ continue;
92
+ if (major <= clientMajor && major > bestMajor) {
93
+ best = v;
94
+ bestMajor = major;
95
+ }
96
+ }
97
+ return best;
98
+ }
99
+ /** 从 semver 字符串中提取主版本号 */
100
+ function parseMajor(version) {
101
+ const m = /^(\d+)/.exec(version);
102
+ return m ? Number(m[1]) : null;
103
+ }
104
+ /* ================================================================== */
105
+ /* 标准错误码(JSON-RPC 2.0 + 自定义扩展) */
106
+ /* ================================================================== */
107
+ /** JSON-RPC 2.0 标准错误码 — 固定不变 */
108
+ exports.JSONRPC_STANDARD_ERRORS = {
109
+ PARSE_ERROR: -32700,
110
+ INVALID_REQUEST: -32600,
111
+ METHOD_NOT_FOUND: -32601,
112
+ INVALID_PARAMS: -32602,
113
+ INTERNAL_ERROR: -32603,
114
+ };
115
+ /** 自定义错误码注册表 */
116
+ exports.BUILTIN_CUSTOM_ERRORS = [
117
+ (0, registry_js_1.builtInEntry)('EXECUTION_TIMEOUT', 'skill.error', -32001),
118
+ (0, registry_js_1.builtInEntry)('EXECUTION_FAILED', 'skill.error', -32002),
119
+ (0, registry_js_1.builtInEntry)('RESOURCE_EXHAUSTED', 'skill.error', -32003),
120
+ (0, registry_js_1.builtInEntry)('POLICY_VIOLATION', 'skill.error', -32004),
121
+ (0, registry_js_1.builtInEntry)('DEPENDENCY_ERROR', 'skill.error', -32005),
122
+ (0, registry_js_1.builtInEntry)('CAPABILITY_DENIED', 'skill.error', -32006),
123
+ ];
124
+ exports.skillErrorCodeRegistry = (0, registry_js_1.createRegistry)(exports.BUILTIN_CUSTOM_ERRORS);
125
+ /** 向后兼容的完整错误码对象(合并标准+自定义) */
126
+ exports.SKILL_RPC_ERRORS = {
127
+ ...exports.JSONRPC_STANDARD_ERRORS,
128
+ EXECUTION_TIMEOUT: -32001,
129
+ EXECUTION_FAILED: -32002,
130
+ RESOURCE_EXHAUSTED: -32003,
131
+ POLICY_VIOLATION: -32004,
132
+ DEPENDENCY_ERROR: -32005,
133
+ CAPABILITY_DENIED: -32006,
134
+ };
135
+ /* ================================================================== */
136
+ /* 方法名常量 */
137
+ /* ================================================================== */
138
+ exports.SKILL_RPC_METHODS = {
139
+ INITIALIZE: "skill.initialize",
140
+ EXECUTE: "skill.execute",
141
+ HEARTBEAT: "skill.heartbeat",
142
+ SHUTDOWN: "skill.shutdown",
143
+ /** 通知方法 */
144
+ PROGRESS: "skill.progress",
145
+ LOG: "skill.log",
146
+ };
147
+ /* ================================================================== */
148
+ /* RPC 解析失败计数器 */
149
+ /* ================================================================== */
150
+ let rpcParseFailureCount = 0;
151
+ /** 获取 RPC 解析失败累计次数(可观测性 / 健康检查用) */
152
+ function getRpcParseFailures() { return rpcParseFailureCount; }
153
+ /* ================================================================== */
154
+ /* 辅助函数 */
155
+ /* ================================================================== */
156
+ /** 创建 JSON-RPC 请求 */
157
+ function createRpcRequest(id, method, params) {
158
+ return { jsonrpc: exports.SKILL_RPC_JSONRPC, id, method, params };
159
+ }
160
+ /** 创建 JSON-RPC 成功响应 */
161
+ function createRpcSuccess(id, result) {
162
+ return { jsonrpc: exports.SKILL_RPC_JSONRPC, id, result };
163
+ }
164
+ /** 创建 JSON-RPC 错误响应 */
165
+ function createRpcError(id, code, message, data) {
166
+ return { jsonrpc: exports.SKILL_RPC_JSONRPC, id, error: { code, message, ...(data !== undefined ? { data } : {}) } };
167
+ }
168
+ /** 创建通知消息 */
169
+ function createRpcNotification(method, params) {
170
+ return { jsonrpc: exports.SKILL_RPC_JSONRPC, method, params };
171
+ }
172
+ /** 序列化为 NDJSON 行 */
173
+ function serializeRpcMessage(msg) {
174
+ return JSON.stringify(msg) + "\n";
175
+ }
176
+ /** 从 NDJSON 行反序列化 */
177
+ function parseRpcMessage(line) {
178
+ const trimmed = line.trim();
179
+ if (!trimmed)
180
+ return null;
181
+ try {
182
+ const obj = JSON.parse(trimmed);
183
+ if (obj && typeof obj === "object" && obj.jsonrpc === "2.0")
184
+ return obj;
185
+ return null;
186
+ }
187
+ catch {
188
+ rpcParseFailureCount++;
189
+ return null;
190
+ }
191
+ }
192
+ /** 判断是否为请求 */
193
+ function isRpcRequest(msg) {
194
+ return "method" in msg && "id" in msg;
195
+ }
196
+ /** 判断是否为通知 */
197
+ function isRpcNotification(msg) {
198
+ return "method" in msg && !("id" in msg);
199
+ }
200
+ /** 判断是否为响应 */
201
+ function isRpcResponse(msg) {
202
+ return !("method" in msg) && "id" in msg;
203
+ }
204
+ /** 判断是否为错误响应 */
205
+ function isRpcError(msg) {
206
+ return "error" in msg;
207
+ }
208
+ //# sourceMappingURL=skill-rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-rpc.js","sourceRoot":"","sources":["../src/skill-rpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Unified Runtime State Machine.
3
+ *
4
+ * Defines canonical status enums, legal transition tables, and transition
5
+ * functions for Step, Run, and CollabPhase statuses.
6
+ *
7
+ * Shared across API and Worker.
8
+ */
9
+ export declare const STEP_STATUSES: readonly ["pending", "running", "paused", "needs_approval", "needs_device", "needs_arbiter", "streaming", "succeeded", "failed", "deadletter", "canceled"];
10
+ export type StepStatus = (typeof STEP_STATUSES)[number];
11
+ export declare const STEP_TERMINAL: ReadonlySet<StepStatus>;
12
+ export declare const STEP_BLOCKING: ReadonlySet<StepStatus>;
13
+ export declare const STEP_STREAMING: ReadonlySet<StepStatus>;
14
+ export declare const STEP_TRANSITIONS: Readonly<Record<StepStatus, ReadonlySet<StepStatus>>>;
15
+ export declare const RUN_STATUSES: readonly ["created", "queued", "running", "paused", "needs_approval", "needs_device", "needs_arbiter", "succeeded", "failed", "canceled", "stopped", "compensating", "compensated"];
16
+ export type RunStatus = (typeof RUN_STATUSES)[number];
17
+ export declare const RUN_TERMINAL: ReadonlySet<RunStatus>;
18
+ export declare const RUN_TRANSITIONS: Readonly<Record<RunStatus, ReadonlySet<RunStatus>>>;
19
+ export declare const COLLAB_PHASES: readonly ["planning", "executing", "paused", "needs_approval", "needs_device", "needs_arbiter", "succeeded", "failed", "stopped"];
20
+ export type CollabPhase = (typeof COLLAB_PHASES)[number];
21
+ export declare const COLLAB_TERMINAL: ReadonlySet<CollabPhase>;
22
+ export declare const COLLAB_TRANSITIONS: Readonly<Record<CollabPhase, ReadonlySet<CollabPhase>>>;
23
+ export interface TransitionViolation {
24
+ entity: "step" | "run" | "collab" | "agent";
25
+ from: string;
26
+ to: string;
27
+ message: string;
28
+ }
29
+ export declare function transitionStep(from: StepStatus, to: StepStatus): StepStatus;
30
+ export declare function transitionRun(from: RunStatus, to: RunStatus): RunStatus;
31
+ export declare function transitionCollab(from: CollabPhase, to: CollabPhase): CollabPhase;
32
+ export interface TransitionResult<T extends string> {
33
+ ok: boolean;
34
+ status: T;
35
+ violation?: TransitionViolation;
36
+ }
37
+ export declare function tryTransitionStep(from: StepStatus, to: StepStatus): TransitionResult<StepStatus>;
38
+ export declare function tryTransitionRun(from: RunStatus, to: RunStatus): TransitionResult<RunStatus>;
39
+ export declare function tryTransitionCollab(from: CollabPhase, to: CollabPhase): TransitionResult<CollabPhase>;
40
+ export declare function normalizeStepStatus(raw: unknown): StepStatus | null;
41
+ export declare function normalizeRunStatus(raw: unknown): RunStatus | null;
42
+ export declare function normalizeCollabPhase(raw: unknown): CollabPhase | null;
43
+ export interface StateInvariantViolation {
44
+ code: string;
45
+ severity: "error" | "warn";
46
+ message: string;
47
+ details?: Record<string, unknown>;
48
+ }
49
+ export declare function checkStateInvariant(params: {
50
+ runStatus: string;
51
+ steps: Array<{
52
+ stepId: string;
53
+ status: string;
54
+ }>;
55
+ collabPhase?: string | null;
56
+ agentPhase?: string | null;
57
+ }): StateInvariantViolation[];
58
+ export declare const AGENT_PHASES: readonly ["idle", "planning", "thinking", "deciding", "acting", "waiting", "blocked", "completed", "failed", "timeout"];
59
+ export type AgentPhase = (typeof AGENT_PHASES)[number];
60
+ export declare const AGENT_TRANSITIONS: Readonly<Record<AgentPhase, ReadonlySet<AgentPhase>>>;
61
+ export declare const AGENT_TERMINAL: ReadonlySet<AgentPhase>;
62
+ /** 安全转换 Agent 阶段(返回结果对象,不抛异常) */
63
+ export declare function tryTransitionAgent(from: AgentPhase, to: AgentPhase): TransitionResult<AgentPhase>;
64
+ /** 硬转换 Agent 阶段(违反时抛异常) */
65
+ export declare function transitionAgent(from: AgentPhase, to: AgentPhase): AgentPhase;
66
+ /** 判断是否为 Agent 终态 */
67
+ export declare function isAgentTerminal(phase: AgentPhase): boolean;
68
+ /**
69
+ * 将 OrchestrationPhase 字符串映射到 AgentPhase。
70
+ * 用于桥接旧编排系统与新 Agent 状态机。
71
+ */
72
+ export declare function mapOrchestrationToAgent(phase: string): AgentPhase;
73
+ /**
74
+ * 将 AgentPhase 映射回 OrchestrationPhase 字符串。
75
+ */
76
+ export declare function mapAgentToOrchestration(phase: AgentPhase): string;
77
+ //# sourceMappingURL=state-machine.d.ts.map