@winmatrix/agent-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/adapters/claude/ClaudeAdapter.d.ts +40 -0
  2. package/dist/adapters/claude/ClaudeAdapter.d.ts.map +1 -0
  3. package/dist/adapters/claude/ClaudeAdapter.js +515 -0
  4. package/dist/adapters/claude/ClaudeAdapter.js.map +1 -0
  5. package/dist/adapters/claude/ClaudeStreamParser.d.ts +39 -0
  6. package/dist/adapters/claude/ClaudeStreamParser.d.ts.map +1 -0
  7. package/dist/adapters/claude/ClaudeStreamParser.js +80 -0
  8. package/dist/adapters/claude/ClaudeStreamParser.js.map +1 -0
  9. package/dist/adapters/hermes/HermesAdapter.d.ts +37 -0
  10. package/dist/adapters/hermes/HermesAdapter.d.ts.map +1 -0
  11. package/dist/adapters/hermes/HermesAdapter.js +342 -0
  12. package/dist/adapters/hermes/HermesAdapter.js.map +1 -0
  13. package/dist/adapters/openclaw/OpenClawAdapter.d.ts +77 -0
  14. package/dist/adapters/openclaw/OpenClawAdapter.d.ts.map +1 -0
  15. package/dist/adapters/openclaw/OpenClawAdapter.js +798 -0
  16. package/dist/adapters/openclaw/OpenClawAdapter.js.map +1 -0
  17. package/dist/adapters/openclaw/unwrapOpenClawPayloads.d.ts +6 -0
  18. package/dist/adapters/openclaw/unwrapOpenClawPayloads.d.ts.map +1 -0
  19. package/dist/adapters/openclaw/unwrapOpenClawPayloads.js +24 -0
  20. package/dist/adapters/openclaw/unwrapOpenClawPayloads.js.map +1 -0
  21. package/dist/core/AdapterRegistry.d.ts +21 -0
  22. package/dist/core/AdapterRegistry.d.ts.map +1 -0
  23. package/dist/core/AdapterRegistry.js +37 -0
  24. package/dist/core/AdapterRegistry.js.map +1 -0
  25. package/dist/core/AgentAdapter.d.ts +165 -0
  26. package/dist/core/AgentAdapter.d.ts.map +1 -0
  27. package/dist/core/AgentAdapter.js +23 -0
  28. package/dist/core/AgentAdapter.js.map +1 -0
  29. package/dist/core/DaemonClient.d.ts +102 -0
  30. package/dist/core/DaemonClient.d.ts.map +1 -0
  31. package/dist/core/DaemonClient.js +225 -0
  32. package/dist/core/DaemonClient.js.map +1 -0
  33. package/dist/core/Protocol.d.ts +257 -0
  34. package/dist/core/Protocol.d.ts.map +1 -0
  35. package/dist/core/Protocol.js +140 -0
  36. package/dist/core/Protocol.js.map +1 -0
  37. package/dist/core/RuntimeDetector.d.ts +7 -0
  38. package/dist/core/RuntimeDetector.d.ts.map +1 -0
  39. package/dist/core/RuntimeDetector.js +45 -0
  40. package/dist/core/RuntimeDetector.js.map +1 -0
  41. package/dist/core/WinMatrixAgentClient.d.ts +134 -0
  42. package/dist/core/WinMatrixAgentClient.d.ts.map +1 -0
  43. package/dist/core/WinMatrixAgentClient.js +382 -0
  44. package/dist/core/WinMatrixAgentClient.js.map +1 -0
  45. package/dist/index.d.ts +36 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +33 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/runtime/DualRuntimeBridge.d.ts +38 -0
  50. package/dist/runtime/DualRuntimeBridge.d.ts.map +1 -0
  51. package/dist/runtime/DualRuntimeBridge.js +305 -0
  52. package/dist/runtime/DualRuntimeBridge.js.map +1 -0
  53. package/dist/runtime/bridgeConfigLoader.d.ts +14 -0
  54. package/dist/runtime/bridgeConfigLoader.d.ts.map +1 -0
  55. package/dist/runtime/bridgeConfigLoader.js +133 -0
  56. package/dist/runtime/bridgeConfigLoader.js.map +1 -0
  57. package/dist/runtime/bridgeConfigTypes.d.ts +26 -0
  58. package/dist/runtime/bridgeConfigTypes.d.ts.map +1 -0
  59. package/dist/runtime/bridgeConfigTypes.js +6 -0
  60. package/dist/runtime/bridgeConfigTypes.js.map +1 -0
  61. package/dist/runtime/bridgeHome.d.ts +19 -0
  62. package/dist/runtime/bridgeHome.d.ts.map +1 -0
  63. package/dist/runtime/bridgeHome.js +61 -0
  64. package/dist/runtime/bridgeHome.js.map +1 -0
  65. package/dist/runtime/bridgeReconnectPolicy.d.ts +8 -0
  66. package/dist/runtime/bridgeReconnectPolicy.d.ts.map +1 -0
  67. package/dist/runtime/bridgeReconnectPolicy.js +16 -0
  68. package/dist/runtime/bridgeReconnectPolicy.js.map +1 -0
  69. package/dist/runtime/bridgeTaskJournal.d.ts +7 -0
  70. package/dist/runtime/bridgeTaskJournal.d.ts.map +1 -0
  71. package/dist/runtime/bridgeTaskJournal.js +66 -0
  72. package/dist/runtime/bridgeTaskJournal.js.map +1 -0
  73. package/dist/runtime/localRuntimeAvailabilityMonitor.d.ts +22 -0
  74. package/dist/runtime/localRuntimeAvailabilityMonitor.d.ts.map +1 -0
  75. package/dist/runtime/localRuntimeAvailabilityMonitor.js +81 -0
  76. package/dist/runtime/localRuntimeAvailabilityMonitor.js.map +1 -0
  77. package/dist/runtime/runDualRuntimeBridge.d.ts +2 -0
  78. package/dist/runtime/runDualRuntimeBridge.d.ts.map +1 -0
  79. package/dist/runtime/runDualRuntimeBridge.js +32 -0
  80. package/dist/runtime/runDualRuntimeBridge.js.map +1 -0
  81. package/dist/utils/parseSkillMd.d.ts +10 -0
  82. package/dist/utils/parseSkillMd.d.ts.map +1 -0
  83. package/dist/utils/parseSkillMd.js +34 -0
  84. package/dist/utils/parseSkillMd.js.map +1 -0
  85. package/dist/utils/processUtils.d.ts +8 -0
  86. package/dist/utils/processUtils.d.ts.map +1 -0
  87. package/dist/utils/processUtils.js +31 -0
  88. package/dist/utils/processUtils.js.map +1 -0
  89. package/dist/utils/spawnHelper.d.ts +38 -0
  90. package/dist/utils/spawnHelper.d.ts.map +1 -0
  91. package/dist/utils/spawnHelper.js +122 -0
  92. package/dist/utils/spawnHelper.js.map +1 -0
  93. package/package.json +61 -0
@@ -0,0 +1,225 @@
1
+ /**
2
+ * WinMatrix Agent SDK - DaemonClient
3
+ *
4
+ * Extends WinMatrixAgentClient for the Computer/Daemon connection model.
5
+ * After WebSocket connection, sends `computer.register` (instead of `register`)
6
+ * with the computer's identity, host info, and detected runtimes.
7
+ *
8
+ * The Daemon connection acts as a multiplexing channel:
9
+ * - computer.heartbeat events keep the Computer alive
10
+ * - agent.create / agent.stop events manage Agent lifecycle on the host
11
+ * - task.* messages are routed by agentId for individual agents
12
+ */
13
+ import { METHODS, EVENTS, parseFrame, isEvent, isRequest, isResponse, } from './Protocol.js';
14
+ import { WinMatrixAgentClient } from './WinMatrixAgentClient.js';
15
+ /* ── DaemonClient ── */
16
+ export class DaemonClient extends WinMatrixAgentClient {
17
+ daemonOptions;
18
+ serverComputerId = null;
19
+ agentCreateHandler = null;
20
+ agentStopHandler = null;
21
+ profileCollector = null;
22
+ /** 心跳执行锁,防止定时器回调并发 */
23
+ heartbeatInProgress = false;
24
+ constructor(options) {
25
+ super({
26
+ url: options.url,
27
+ apiKey: options.token,
28
+ agentId: `computer:${options.installationId}`,
29
+ name: options.hostname,
30
+ agentType: 'daemon',
31
+ capabilities: { streaming: false, toolCall: false, cancellation: false },
32
+ autoReconnect: options.autoReconnect,
33
+ bridgeHooks: options.bridgeHooks,
34
+ });
35
+ this.daemonOptions = options;
36
+ }
37
+ /** Register handler for daemon-specific events */
38
+ onDaemonEvent(event, handler) {
39
+ if (event === 'agent.create') {
40
+ this.agentCreateHandler = handler;
41
+ }
42
+ else if (event === 'agent.stop') {
43
+ this.agentStopHandler = handler;
44
+ }
45
+ }
46
+ /** Get the server-assigned computer ID (available after successful registration) */
47
+ getComputerId() {
48
+ return this.serverComputerId;
49
+ }
50
+ /** Set the profile collector function (called during heartbeat to attach agentProfiles) */
51
+ setProfileCollector(fn) {
52
+ this.profileCollector = fn;
53
+ }
54
+ /**
55
+ * 通过 daemon 连接发送 agent.error 事件。
56
+ * 替代直接访问私有 ws 属性,用于 agent.create 失败时通知服务端。
57
+ */
58
+ sendAgentError(agentId, error) {
59
+ if (this.getState() !== 'registered')
60
+ return false;
61
+ try {
62
+ this.sendEvent(EVENTS.AGENT_ERROR, { agentId, error });
63
+ return true;
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
69
+ /** Immediately send a heartbeat with agent profiles (used for agent create/destroy/rescan) */
70
+ async sendHeartbeatNow() {
71
+ if (this.getState() !== 'registered')
72
+ return;
73
+ try {
74
+ const agentProfiles = this.profileCollector ? await this.profileCollector() : undefined;
75
+ this.sendEvent(EVENTS.COMPUTER_HEARTBEAT, agentProfiles ? { agentProfiles } : undefined);
76
+ }
77
+ catch {
78
+ // best-effort
79
+ }
80
+ }
81
+ /* ── Protected overrides ── */
82
+ /**
83
+ * Override register() to send computer.register instead of agent register.
84
+ */
85
+ async register() {
86
+ const params = {
87
+ installationId: this.daemonOptions.installationId,
88
+ token: this.daemonOptions.token,
89
+ hostname: this.daemonOptions.hostname,
90
+ os: this.daemonOptions.hostOs,
91
+ arch: this.daemonOptions.hostArch,
92
+ daemonVersion: this.daemonOptions.daemonVersion,
93
+ runtimes: this.daemonOptions.runtimes,
94
+ };
95
+ if (this.daemonOptions.supportedAgentTypes?.length) {
96
+ params.supportedAgentTypes = this.daemonOptions.supportedAgentTypes;
97
+ }
98
+ const response = await this.sendRequest(METHODS.COMPUTER_REGISTER, params);
99
+ if (!response.ok) {
100
+ throw new Error(`Computer registration failed: ${response.error ?? 'unknown error'}`);
101
+ }
102
+ const payload = response.payload;
103
+ if (payload?.computerId) {
104
+ this.serverComputerId = payload.computerId;
105
+ }
106
+ }
107
+ /**
108
+ * Override heartbeat for daemon mode — sends computer.heartbeat events with optional agentProfiles.
109
+ * 使用锁防止定时器回调并发执行,确保上次心跳完成后再调度下次。
110
+ */
111
+ startHeartbeat() {
112
+ const interval = 30000;
113
+ this.heartbeatTimer = setInterval(async () => {
114
+ // 如果上次心跳还在执行,跳过本次
115
+ if (this.heartbeatInProgress)
116
+ return;
117
+ if (this.getState() !== 'registered')
118
+ return;
119
+ this.heartbeatInProgress = true;
120
+ try {
121
+ const agentProfiles = this.profileCollector ? await this.profileCollector() : undefined;
122
+ this.sendEvent(EVENTS.COMPUTER_HEARTBEAT, agentProfiles ? { agentProfiles } : undefined);
123
+ }
124
+ catch {
125
+ // Ignore transient send failures
126
+ }
127
+ finally {
128
+ this.heartbeatInProgress = false;
129
+ }
130
+ }, interval);
131
+ }
132
+ /**
133
+ * Override to extract agentId before parseFrame and intercept daemon events.
134
+ *
135
+ * 注意:方案 B 下 onPassthrough 未设置,passthrough 路由代码(task.assign ACK / wrapper 响应)
136
+ * 当前为 dead code。每个 agent 有独立 WinMatrixAgentClient + WebSocket,消息由
137
+ * AgentProcessManager 分发到各 agent 的 client,不经过 daemon 连接多路复用。
138
+ */
139
+ handleMessage(data) {
140
+ const raw = typeof data === 'string' ? data : data.toString('utf-8');
141
+ // Extract top-level agentId before parseFrame (which drops non-standard fields)
142
+ let agentId = null;
143
+ try {
144
+ const parsed = JSON.parse(raw);
145
+ if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
146
+ if (typeof parsed.agentId === 'string' && parsed.agentId.length > 0) {
147
+ agentId = parsed.agentId;
148
+ }
149
+ }
150
+ }
151
+ catch {
152
+ return;
153
+ }
154
+ // Parse the frame for routing
155
+ const frame = parseFrame(raw);
156
+ if (!frame)
157
+ return;
158
+ // Intercept daemon events BEFORE parent handling
159
+ if (isEvent(frame)) {
160
+ const eventFrame = frame;
161
+ if (this.handleDaemonEvent(eventFrame.event, eventFrame.payload)) {
162
+ return;
163
+ }
164
+ }
165
+ // Pass through agent-level messages to daemon for wrapper forwarding
166
+ if (this.daemonOptions.onPassthrough) {
167
+ if (isRequest(frame)) {
168
+ const reqFrame = frame;
169
+ if (reqFrame.method === METHODS.TASK_ASSIGN) {
170
+ // Ack receipt, then pass through
171
+ this.sendRaw({ type: 'res', id: reqFrame.id, ok: true });
172
+ this.daemonOptions.onPassthrough(frame, raw, agentId);
173
+ return;
174
+ }
175
+ // Other unrecognized requests → pass through
176
+ this.daemonOptions.onPassthrough(frame, raw, agentId);
177
+ return;
178
+ }
179
+ if (isEvent(frame)) {
180
+ const evtFrame = frame;
181
+ // Pass through task/tool events for agent-level routing
182
+ if (evtFrame.event.startsWith('task.') || evtFrame.event.startsWith('tool.')) {
183
+ this.daemonOptions.onPassthrough(frame, raw, agentId);
184
+ return;
185
+ }
186
+ }
187
+ }
188
+ // Pass through response frames for forwarded wrapper requests
189
+ // (IDs starting with 'wrapper-'). Daemon-originated responses (IDs
190
+ // starting with 'sdk-') must be handled by the parent's pendingRequests.
191
+ if (isResponse(frame) && this.daemonOptions.onPassthrough) {
192
+ const resFrame = frame;
193
+ if (typeof resFrame.id === 'string' && resFrame.id.startsWith('wrapper-')) {
194
+ this.daemonOptions.onPassthrough(frame, raw, agentId);
195
+ return;
196
+ }
197
+ }
198
+ // Delegate to parent for standard message handling (responses, ping, etc.)
199
+ super.handleMessage(data);
200
+ }
201
+ /**
202
+ * Handle daemon-specific events. Returns true if the event was handled.
203
+ */
204
+ handleDaemonEvent(event, payload) {
205
+ switch (event) {
206
+ case EVENTS.AGENT_CREATE: {
207
+ const createPayload = payload;
208
+ if (createPayload?.agentId && (createPayload?.runtime || createPayload?.agentType === 'hermes' || createPayload?.agentType === 'openclaw')) {
209
+ this.agentCreateHandler?.(createPayload);
210
+ }
211
+ return true;
212
+ }
213
+ case EVENTS.AGENT_STOP: {
214
+ const stopPayload = payload;
215
+ if (stopPayload?.agentId) {
216
+ this.agentStopHandler?.(stopPayload);
217
+ }
218
+ return true;
219
+ }
220
+ default:
221
+ return false;
222
+ }
223
+ }
224
+ }
225
+ //# sourceMappingURL=DaemonClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DaemonClient.js","sourceRoot":"","sources":["../../src/core/DaemonClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,OAAO,EACP,MAAM,EACN,UAAU,EACV,OAAO,EACP,SAAS,EACT,UAAU,GAQX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAoC,MAAM,2BAA2B,CAAC;AAqDnG,wBAAwB;AAExB,MAAM,OAAO,YAAa,SAAQ,oBAAoB;IACnC,aAAa,CAAsB;IAC5C,gBAAgB,GAAkB,IAAI,CAAC;IACvC,kBAAkB,GAAgD,IAAI,CAAC;IACvE,gBAAgB,GAA8C,IAAI,CAAC;IACnE,gBAAgB,GAA2C,IAAI,CAAC;IACxE,sBAAsB;IACd,mBAAmB,GAAG,KAAK,CAAC;IAEpC,YAAY,OAA4B;QACtC,KAAK,CAAC;YACJ,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,KAAK;YACrB,OAAO,EAAE,YAAY,OAAO,CAAC,cAAc,EAAE;YAC7C,IAAI,EAAE,OAAO,CAAC,QAAQ;YACtB,SAAS,EAAE,QAAQ;YACnB,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE;YACxE,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;IAC/B,CAAC;IAED,kDAAkD;IAClD,aAAa,CAAC,KAAoC,EAAE,OAAoC;QACtF,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YAC7B,IAAI,CAAC,kBAAkB,GAAG,OAA+C,CAAC;QAC5E,CAAC;aAAM,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;YAClC,IAAI,CAAC,gBAAgB,GAAG,OAA6C,CAAC;QACxE,CAAC;IACH,CAAC;IAED,oFAAoF;IACpF,aAAa;QACX,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,2FAA2F;IAC3F,mBAAmB,CAAC,EAAiC;QACnD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,OAAe,EAAE,KAAa;QAC3C,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,YAAY;YAAE,OAAO,KAAK,CAAC;QACnD,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,8FAA8F;IAC9F,KAAK,CAAC,gBAAgB;QACpB,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,YAAY;YAAE,OAAO;QAC7C,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACxF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3F,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;IAED,+BAA+B;IAE/B;;OAEG;IACO,KAAK,CAAC,QAAQ;QACtB,MAAM,MAAM,GAA2B;YACrC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,cAAc;YACjD,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK;YAC/B,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;YACrC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;YAC7B,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;YACjC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa;YAC/C,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;SACtC,CAAC;QACF,IAAI,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC;YACnD,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC;QACtE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAE3E,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAsD,CAAC;QAChF,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;;OAGG;IACO,cAAc;QACtB,MAAM,QAAQ,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YAC3C,kBAAkB;YAClB,IAAI,IAAI,CAAC,mBAAmB;gBAAE,OAAO;YACrC,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,YAAY;gBAAE,OAAO;YAE7C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBACxF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC3F,CAAC;YAAC,MAAM,CAAC;gBACP,iCAAiC;YACnC,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACnC,CAAC;QACH,CAAC,EAAE,QAAQ,CAAC,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACO,aAAa,CAAC,IAAuB;QAC7C,MAAM,GAAG,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAErE,gFAAgF;QAChF,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5E,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QAED,8BAA8B;QAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,iDAAiD;QACjD,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,KAAkB,CAAC;YACtC,IAAI,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjE,OAAO;YACT,CAAC;QACH,CAAC;QAED,qEAAqE;QACrE,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM,QAAQ,GAAG,KAAoB,CAAC;gBACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC5C,iCAAiC;oBACjC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;oBACzD,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;oBACtD,OAAO;gBACT,CAAC;gBACD,6CAA6C;gBAC7C,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YAED,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnB,MAAM,QAAQ,GAAG,KAAkB,CAAC;gBACpC,wDAAwD;gBACxD,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7E,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;oBACtD,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,mEAAmE;QACnE,yEAAyE;QACzE,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;YAC1D,MAAM,QAAQ,GAAG,KAAqB,CAAC;YACvC,IAAI,OAAO,QAAQ,CAAC,EAAE,KAAK,QAAQ,IAAI,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1E,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;QACH,CAAC;QAED,2EAA2E;QAC3E,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,KAAa,EAAE,OAAgB;QACvD,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;gBACzB,MAAM,aAAa,GAAG,OAA2B,CAAC;gBAClD,IAAI,aAAa,EAAE,OAAO,IAAI,CAAC,aAAa,EAAE,OAAO,IAAI,aAAa,EAAE,SAAS,KAAK,QAAQ,IAAI,aAAa,EAAE,SAAS,KAAK,UAAU,CAAC,EAAE,CAAC;oBAC3I,IAAI,CAAC,kBAAkB,EAAE,CAAC,aAAa,CAAC,CAAC;gBAC3C,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;gBACvB,MAAM,WAAW,GAAG,OAAyB,CAAC;gBAC9C,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;oBACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,CAAC,CAAC;gBACvC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,257 @@
1
+ /**
2
+ * WinMatrix Agent SDK - Protocol
3
+ *
4
+ * Client-side mirror of the server-side JSON-RPC protocol.
5
+ * Defines frame types and helper functions for building/parsing messages.
6
+ */
7
+ export interface BaseRequest {
8
+ type: 'req';
9
+ id: string;
10
+ method: string;
11
+ params?: unknown;
12
+ }
13
+ export interface BaseResponse {
14
+ type: 'res';
15
+ id: string;
16
+ ok: boolean;
17
+ payload?: unknown;
18
+ error?: string;
19
+ }
20
+ export interface BaseEvent {
21
+ type: 'event';
22
+ event: string;
23
+ payload?: unknown;
24
+ }
25
+ export type InboundFrame = BaseResponse | BaseEvent | BaseRequest;
26
+ export declare const METHODS: {
27
+ readonly REGISTER: "register";
28
+ readonly COMPUTER_REGISTER: "computer.register";
29
+ readonly PING: "ping";
30
+ readonly TASK_ASSIGN: "task.assign";
31
+ readonly TOOL_CALL: "tool.call";
32
+ readonly SESSION_LIST: "session.list";
33
+ readonly SESSION_GET: "session.get";
34
+ };
35
+ export declare const EVENTS: {
36
+ readonly TASK_DELTA: "task.delta";
37
+ readonly TASK_THINKING: "task.thinking";
38
+ readonly TASK_COMPLETE: "task.complete";
39
+ readonly TASK_ERROR: "task.error";
40
+ readonly TASK_CANCEL: "task.cancel";
41
+ readonly TASK_CANCELLED: "task.cancelled";
42
+ readonly TASK_RESUME: "task.resume";
43
+ /** SDK 上报本地 Hermes/OpenClaw HTTP 等运行时是否可达(由 bridge 维护) */
44
+ readonly RUNTIME_AVAILABILITY: "runtime.availability";
45
+ /** Daemon 连接:服务端下发创建 Agent 指令 */
46
+ readonly AGENT_CREATE: "agent.create";
47
+ /** Daemon 连接:服务端下发停止 Agent 指令 */
48
+ readonly AGENT_STOP: "agent.stop";
49
+ /** Daemon 连接:Agent 启动/运行异常 */
50
+ readonly AGENT_ERROR: "agent.error";
51
+ /** Daemon 连接:Computer 心跳 */
52
+ readonly COMPUTER_HEARTBEAT: "computer.heartbeat";
53
+ };
54
+ /** 与 WinMatrix 服务端 ExternalAgentProtocol.RuntimeAvailabilityPayloadSchema 对齐 */
55
+ export interface RuntimeAvailabilityPayload {
56
+ runtimeKind: 'hermes' | 'openclaw';
57
+ reachable: boolean;
58
+ checkedAtIso: string;
59
+ /** endpoint = 探测 HTTP;command = 本地命令模式,由 bridge 进程代表可达性 */
60
+ mode: 'endpoint' | 'command';
61
+ error?: string;
62
+ }
63
+ export interface RegisterParams {
64
+ agentId: string;
65
+ apiKey: string;
66
+ name: string;
67
+ agentType: string;
68
+ capabilities: {
69
+ streaming: boolean;
70
+ toolCall: boolean;
71
+ cancellation: boolean;
72
+ maxConcurrentTasks?: number;
73
+ };
74
+ }
75
+ export interface RegisterResponsePayload {
76
+ connectionSessionToken: string;
77
+ config: {
78
+ heartbeatInterval: number;
79
+ taskTimeout: number;
80
+ };
81
+ }
82
+ export interface ComputerRegisterParams {
83
+ installationId: string;
84
+ token: string;
85
+ hostname: string;
86
+ os: string;
87
+ arch: string;
88
+ daemonVersion?: string;
89
+ runtimes: Array<{
90
+ name: string;
91
+ version?: string;
92
+ available: boolean;
93
+ }>;
94
+ /** Agent types the daemon can host natively (e.g. ["claude-code","hermes","openclaw"]) */
95
+ supportedAgentTypes?: string[];
96
+ }
97
+ export interface ComputerRegisterResponsePayload {
98
+ computerId: string;
99
+ }
100
+ export interface TaskConstraints {
101
+ timeout?: number;
102
+ allowedTools?: string[];
103
+ }
104
+ export interface TaskContext {
105
+ roleId: string;
106
+ roleName: string;
107
+ rolePersonality?: string;
108
+ projectId?: string;
109
+ projectName?: string;
110
+ projectCode?: string;
111
+ operatorName?: string;
112
+ conversationSummary?: string;
113
+ constraints?: TaskConstraints;
114
+ }
115
+ export interface TaskAssignParams {
116
+ taskId: string;
117
+ input: string;
118
+ context: TaskContext;
119
+ streaming: boolean;
120
+ /** 服务端生成的系统提示词 */
121
+ systemPrompt?: string;
122
+ /** 本任务的 MCP ToolProxy token(per-task session ID) */
123
+ mcpToken?: string;
124
+ }
125
+ export interface TaskDeltaPayload {
126
+ taskId: string;
127
+ content: string;
128
+ }
129
+ export interface TaskThinkingPayload {
130
+ taskId: string;
131
+ content: string;
132
+ }
133
+ export interface TaskCompletePayload {
134
+ taskId: string;
135
+ result: unknown;
136
+ sessionId?: string;
137
+ usage?: {
138
+ input: number;
139
+ output: number;
140
+ };
141
+ }
142
+ export interface TaskErrorPayload {
143
+ taskId: string;
144
+ error: string;
145
+ /** 错误码 — 例如 'AGENT_BUSY' 表示 Agent 正忙 */
146
+ code?: string;
147
+ }
148
+ export interface TaskCancelPayload {
149
+ taskId: string;
150
+ }
151
+ export interface TaskCancelledPayload {
152
+ taskId: string;
153
+ }
154
+ export interface TaskResumePayload {
155
+ taskId: string;
156
+ }
157
+ export interface SessionListParams {
158
+ dir?: string;
159
+ limit?: number;
160
+ }
161
+ export interface SessionListResponsePayload {
162
+ sessions: Array<{
163
+ id: string;
164
+ cwd?: string;
165
+ projectPath?: string;
166
+ summary?: string;
167
+ createdAt?: string;
168
+ lastActivityAt?: string;
169
+ messageCount?: number;
170
+ status?: string;
171
+ }>;
172
+ error?: string;
173
+ }
174
+ export interface SessionGetParams {
175
+ sessionId: string;
176
+ dir?: string;
177
+ messageLimit?: number;
178
+ messageOffset?: number;
179
+ includeRawMessages?: boolean;
180
+ }
181
+ export interface SessionGetResponsePayload {
182
+ session: {
183
+ id: string;
184
+ cwd?: string;
185
+ projectPath?: string;
186
+ summary?: string;
187
+ createdAt?: string;
188
+ lastActivityAt?: string;
189
+ messageCount?: number;
190
+ status?: string;
191
+ };
192
+ messageCount: number;
193
+ truncated: boolean;
194
+ userPrompts: string[];
195
+ assistantText: string;
196
+ lastAssistantText: string;
197
+ rawMessages?: unknown[];
198
+ rawMessagesIncluded?: boolean;
199
+ error?: string;
200
+ }
201
+ /** AGENT_BUSY — Agent 正在执行任务,拒绝并发请求 */
202
+ export declare const ERROR_CODES: {
203
+ readonly AGENT_BUSY: "AGENT_BUSY";
204
+ };
205
+ export interface ToolCallParams {
206
+ callId: string;
207
+ toolName: string;
208
+ args: unknown;
209
+ /** 任务 ID,多并发任务时用于精确匹配服务端会话 */
210
+ taskId?: string;
211
+ }
212
+ export interface ToolCallResponse {
213
+ result: unknown;
214
+ }
215
+ /** Generate a unique request ID */
216
+ export declare function nextRequestId(): string;
217
+ /** Create a request frame */
218
+ export declare function createRequest(id: string, method: string, params?: unknown): BaseRequest;
219
+ /** Create an event frame */
220
+ export declare function createEvent(event: string, payload?: unknown): BaseEvent;
221
+ /** Parse a raw WebSocket message into a typed frame */
222
+ export declare function parseFrame(raw: string): InboundFrame | null;
223
+ /** Parse a response frame */
224
+ export declare function parseResponse(raw: string): BaseResponse | null;
225
+ /** Parse an event frame */
226
+ export declare function parseEvent(raw: string): BaseEvent | null;
227
+ export declare function isResponse(frame: InboundFrame): frame is BaseResponse;
228
+ export declare function isEvent(frame: InboundFrame): frame is BaseEvent;
229
+ export declare function isRequest(frame: InboundFrame): frame is BaseRequest;
230
+ export declare function isTaskAssignRequest(frame: InboundFrame): frame is BaseRequest & {
231
+ params: TaskAssignParams;
232
+ };
233
+ export declare function isTaskCancelEvent(frame: InboundFrame): frame is BaseEvent & {
234
+ payload: TaskCancelPayload;
235
+ };
236
+ export declare function isTaskResumeEvent(frame: InboundFrame): frame is BaseEvent & {
237
+ payload: TaskResumePayload;
238
+ };
239
+ export declare function isSessionListRequest(frame: InboundFrame): frame is BaseRequest & {
240
+ params: SessionListParams;
241
+ };
242
+ export interface AgentProfile {
243
+ agentId: string;
244
+ agentType: string;
245
+ tools: string[];
246
+ skills: Array<{
247
+ name: string;
248
+ description?: string;
249
+ source?: string;
250
+ category?: string;
251
+ }>;
252
+ toolCategories: Record<string, string[]>;
253
+ }
254
+ export declare function isSessionGetRequest(frame: InboundFrame): frame is BaseRequest & {
255
+ params: SessionGetParams;
256
+ };
257
+ //# sourceMappingURL=Protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Protocol.d.ts","sourceRoot":"","sources":["../../src/core/Protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * WinMatrix Agent SDK - Protocol
3
+ *
4
+ * Client-side mirror of the server-side JSON-RPC protocol.
5
+ * Defines frame types and helper functions for building/parsing messages.
6
+ */
7
+ /* ── Method Names ── */
8
+ export const METHODS = {
9
+ REGISTER: 'register',
10
+ COMPUTER_REGISTER: 'computer.register',
11
+ PING: 'ping',
12
+ TASK_ASSIGN: 'task.assign',
13
+ TOOL_CALL: 'tool.call',
14
+ SESSION_LIST: 'session.list',
15
+ SESSION_GET: 'session.get',
16
+ };
17
+ /* ── Event Names ── */
18
+ export const EVENTS = {
19
+ TASK_DELTA: 'task.delta',
20
+ TASK_THINKING: 'task.thinking',
21
+ TASK_COMPLETE: 'task.complete',
22
+ TASK_ERROR: 'task.error',
23
+ TASK_CANCEL: 'task.cancel',
24
+ TASK_CANCELLED: 'task.cancelled',
25
+ TASK_RESUME: 'task.resume',
26
+ /** SDK 上报本地 Hermes/OpenClaw HTTP 等运行时是否可达(由 bridge 维护) */
27
+ RUNTIME_AVAILABILITY: 'runtime.availability',
28
+ /** Daemon 连接:服务端下发创建 Agent 指令 */
29
+ AGENT_CREATE: 'agent.create',
30
+ /** Daemon 连接:服务端下发停止 Agent 指令 */
31
+ AGENT_STOP: 'agent.stop',
32
+ /** Daemon 连接:Agent 启动/运行异常 */
33
+ AGENT_ERROR: 'agent.error',
34
+ /** Daemon 连接:Computer 心跳 */
35
+ COMPUTER_HEARTBEAT: 'computer.heartbeat',
36
+ };
37
+ /** AGENT_BUSY — Agent 正在执行任务,拒绝并发请求 */
38
+ export const ERROR_CODES = {
39
+ AGENT_BUSY: 'AGENT_BUSY',
40
+ };
41
+ /* ── Helper Functions ── */
42
+ let _nextId = 0;
43
+ /** Generate a unique request ID */
44
+ export function nextRequestId() {
45
+ return `sdk-${Date.now()}-${++_nextId}`;
46
+ }
47
+ /** Create a request frame */
48
+ export function createRequest(id, method, params) {
49
+ const frame = { type: 'req', id, method };
50
+ if (params !== undefined) {
51
+ frame.params = params;
52
+ }
53
+ return frame;
54
+ }
55
+ /** Create an event frame */
56
+ export function createEvent(event, payload) {
57
+ const frame = { type: 'event', event };
58
+ if (payload !== undefined) {
59
+ frame.payload = payload;
60
+ }
61
+ return frame;
62
+ }
63
+ /** Parse a raw WebSocket message into a typed frame */
64
+ export function parseFrame(raw) {
65
+ let data;
66
+ try {
67
+ data = JSON.parse(raw);
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ if (!isRecord(data))
73
+ return null;
74
+ switch (data.type) {
75
+ case 'res': {
76
+ if (typeof data.id !== 'string' || data.id.length === 0)
77
+ return null;
78
+ if (typeof data.ok !== 'boolean')
79
+ return null;
80
+ return data;
81
+ }
82
+ case 'event': {
83
+ if (typeof data.event !== 'string' || data.event.length === 0)
84
+ return null;
85
+ return data;
86
+ }
87
+ case 'req': {
88
+ if (typeof data.id !== 'string' || data.id.length === 0)
89
+ return null;
90
+ if (typeof data.method !== 'string' || data.method.length === 0)
91
+ return null;
92
+ return data;
93
+ }
94
+ default:
95
+ return null;
96
+ }
97
+ }
98
+ /** Parse a response frame */
99
+ export function parseResponse(raw) {
100
+ const frame = parseFrame(raw);
101
+ if (frame && frame.type === 'res')
102
+ return frame;
103
+ return null;
104
+ }
105
+ /** Parse an event frame */
106
+ export function parseEvent(raw) {
107
+ const frame = parseFrame(raw);
108
+ if (frame && frame.type === 'event')
109
+ return frame;
110
+ return null;
111
+ }
112
+ /* ── Type Guards ── */
113
+ function isRecord(value) {
114
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
115
+ }
116
+ export function isResponse(frame) {
117
+ return frame.type === 'res';
118
+ }
119
+ export function isEvent(frame) {
120
+ return frame.type === 'event';
121
+ }
122
+ export function isRequest(frame) {
123
+ return frame.type === 'req';
124
+ }
125
+ export function isTaskAssignRequest(frame) {
126
+ return frame.type === 'req' && frame.method === METHODS.TASK_ASSIGN;
127
+ }
128
+ export function isTaskCancelEvent(frame) {
129
+ return frame.type === 'event' && frame.event === EVENTS.TASK_CANCEL;
130
+ }
131
+ export function isTaskResumeEvent(frame) {
132
+ return frame.type === 'event' && frame.event === EVENTS.TASK_RESUME;
133
+ }
134
+ export function isSessionListRequest(frame) {
135
+ return frame.type === 'req' && frame.method === METHODS.SESSION_LIST;
136
+ }
137
+ export function isSessionGetRequest(frame) {
138
+ return frame.type === 'req' && frame.method === METHODS.SESSION_GET;
139
+ }
140
+ //# sourceMappingURL=Protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Protocol.js","sourceRoot":"","sources":["../../src/core/Protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface Runtime {
2
+ name: string;
3
+ version?: string;
4
+ available: boolean;
5
+ }
6
+ export declare function detectRuntimes(): Runtime[];
7
+ //# sourceMappingURL=RuntimeDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeDetector.d.ts","sourceRoot":"","sources":["../../src/core/RuntimeDetector.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAkCD,wBAAgB,cAAc,IAAI,OAAO,EAAE,CAK1C"}