@clawroom/sdk 0.5.25 → 0.5.26

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,87 @@
1
+ import type { AgentResultFile, AgentMessage, AgentWorkRef, ServerTask, ServerChatMessage } from "./protocol.js";
2
+ export type TaskCallback = (task: ServerTask) => void;
3
+ export type ChatCallback = (messages: ServerChatMessage[]) => void;
4
+ export type ConnectedCallback = (agentId: string) => void;
5
+ export type DisconnectedCallback = () => void;
6
+ export type Unsubscribe = () => void;
7
+ export type ClawroomClientOptions = {
8
+ endpoint?: string;
9
+ token: string;
10
+ deviceId: string;
11
+ skills: string[];
12
+ kind?: string;
13
+ wsUrl?: string;
14
+ log?: {
15
+ info?: (message: string, ...args: unknown[]) => void;
16
+ warn?: (message: string, ...args: unknown[]) => void;
17
+ error?: (message: string, ...args: unknown[]) => void;
18
+ };
19
+ };
20
+ /**
21
+ * ClawRoom SDK client.
22
+ * WebSocket primary for real-time push, HTTP polling as fallback.
23
+ */
24
+ export declare class ClawroomClient {
25
+ private heartbeatTimer;
26
+ private pollTimer;
27
+ private heartbeatInFlight;
28
+ private pollInFlight;
29
+ protected stopped: boolean;
30
+ protected readonly httpBase: string;
31
+ protected readonly options: ClawroomClientOptions;
32
+ protected taskCallbacks: TaskCallback[];
33
+ protected chatCallbacks: ChatCallback[];
34
+ private connectedCallbacks;
35
+ private disconnectedCallbacks;
36
+ private wsTransport;
37
+ private recentChatIds;
38
+ private connectedAgentId;
39
+ private isConnectedValue;
40
+ constructor(options: ClawroomClientOptions);
41
+ private get wsUrl();
42
+ get connected(): boolean;
43
+ get agentId(): string | null;
44
+ get isAlive(): boolean;
45
+ connect(): void;
46
+ disconnect(): void;
47
+ send(message: AgentMessage): Promise<void>;
48
+ onTask(cb: TaskCallback): Unsubscribe;
49
+ offTask(cb: TaskCallback): void;
50
+ onChatMessage(cb: ChatCallback): Unsubscribe;
51
+ offChatMessage(cb: ChatCallback): void;
52
+ onConnected(cb: ConnectedCallback): Unsubscribe;
53
+ offConnected(cb: ConnectedCallback): void;
54
+ onDisconnected(cb: DisconnectedCallback): Unsubscribe;
55
+ offDisconnected(cb: DisconnectedCallback): void;
56
+ sendComplete(taskId: string, output: string, attachments?: AgentResultFile[], workRef?: AgentWorkRef): Promise<void>;
57
+ sendFail(taskId: string, reason: string, workRef?: AgentWorkRef): Promise<void>;
58
+ sendProgress(taskId: string, message: string, workRef?: AgentWorkRef): Promise<void>;
59
+ sendChatReply(channelId: string, content: string, replyTo?: string, workRefs?: AgentWorkRef[]): Promise<void>;
60
+ sendTyping(channelId: string): Promise<void>;
61
+ sendReflection(reflection: {
62
+ scope: "chat" | "task";
63
+ status: string;
64
+ summary: string;
65
+ channelId?: string | null;
66
+ taskId?: string | null;
67
+ messageId?: string | null;
68
+ toolsUsed?: string[];
69
+ responseExcerpt?: string | null;
70
+ detail?: Record<string, unknown>;
71
+ }): Promise<void>;
72
+ private startHeartbeat;
73
+ private stopHeartbeat;
74
+ private stopPolling;
75
+ protected register(): Promise<void>;
76
+ protected pollTick(): Promise<void>;
77
+ protected onPollSuccess(agentId: string | undefined): void;
78
+ protected onPollError(err: unknown): void;
79
+ private sendViaHttp;
80
+ protected httpRequest(method: string, path: string, body: unknown): Promise<unknown>;
81
+ protected onHttpError(status: number, text: string): void;
82
+ private rememberChat;
83
+ private dispatchTask;
84
+ private markConnected;
85
+ private markDisconnected;
86
+ }
87
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAavB,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;AACtD,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;AACnE,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAC1D,MAAM,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC;AAC9C,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE;QACJ,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QACrD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QACrD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;KACvD,CAAC;CACH,CAAC;AAaF;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,YAAY,CAAS;IAC7B,SAAS,CAAC,OAAO,UAAS;IAC1B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IAClD,SAAS,CAAC,aAAa,EAAE,YAAY,EAAE,CAAM;IAC7C,SAAS,CAAC,aAAa,EAAE,YAAY,EAAE,CAAM;IAC7C,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,gBAAgB,CAAS;gBAErB,OAAO,EAAE,qBAAqB;IAK1C,OAAO,KAAK,KAAK,GAGhB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,OAAO,IAAI,IAAI;IA4Df,UAAU,IAAI,IAAI;IAWZ,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,WAAW;IAKrC,OAAO,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI;IAI/B,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,WAAW;IAK5C,cAAc,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI;IAItC,WAAW,CAAC,EAAE,EAAE,iBAAiB,GAAG,WAAW;IAK/C,YAAY,CAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI;IAIzC,cAAc,CAAC,EAAE,EAAE,oBAAoB,GAAG,WAAW;IAKrD,eAAe,CAAC,EAAE,EAAE,oBAAoB,GAAG,IAAI;IAIzC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/E,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpF,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7G,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,cAAc,CAAC,UAAU,EAAE;QAC/B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,WAAW;cAIH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;cAoBzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBzC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI1D,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;YAQ3B,WAAW;cAgBT,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB1F,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKzD,OAAO,CAAC,YAAY;YAWN,YAAY;IAK1B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;CAKzB"}
package/dist/client.js ADDED
@@ -0,0 +1,375 @@
1
+ import { WsTransport } from "./ws-transport.js";
2
+ const DEFAULT_ENDPOINT = "https://clawroom.site9.ai/api/agents";
3
+ const HEARTBEAT_INTERVAL_MS = 30_000;
4
+ const POLL_INTERVAL_MS = 10_000;
5
+ const DEFAULT_AGENT_CHAT_PROFILE = {
6
+ role: "No role defined",
7
+ systemPrompt: "No system prompt configured",
8
+ memory: "No memory recorded yet",
9
+ continuityPacket: "No continuity packet available yet",
10
+ };
11
+ /**
12
+ * ClawRoom SDK client.
13
+ * WebSocket primary for real-time push, HTTP polling as fallback.
14
+ */
15
+ export class ClawroomClient {
16
+ heartbeatTimer = null;
17
+ pollTimer = null;
18
+ heartbeatInFlight = false;
19
+ pollInFlight = false;
20
+ stopped = false;
21
+ httpBase;
22
+ options;
23
+ taskCallbacks = [];
24
+ chatCallbacks = [];
25
+ connectedCallbacks = [];
26
+ disconnectedCallbacks = [];
27
+ wsTransport = null;
28
+ recentChatIds = new Set();
29
+ connectedAgentId = null;
30
+ isConnectedValue = false;
31
+ constructor(options) {
32
+ this.options = options;
33
+ this.httpBase = (options.endpoint || DEFAULT_ENDPOINT).replace(/\/+$/, "");
34
+ }
35
+ get wsUrl() {
36
+ if (this.options.wsUrl)
37
+ return this.options.wsUrl;
38
+ return this.httpBase.replace(/\/api\/agents$/, "").replace(/^http/, "ws") + "/api/ws";
39
+ }
40
+ get connected() {
41
+ return this.isConnectedValue;
42
+ }
43
+ get agentId() {
44
+ return this.connectedAgentId;
45
+ }
46
+ get isAlive() {
47
+ return !this.stopped;
48
+ }
49
+ connect() {
50
+ this.stopped = false;
51
+ this.startHeartbeat();
52
+ void this.register();
53
+ // WebSocket transport
54
+ this.wsTransport?.disconnect();
55
+ this.wsTransport = null;
56
+ this.wsTransport = new WsTransport({
57
+ url: this.wsUrl,
58
+ token: this.options.token,
59
+ log: { info: (m) => this.options.log?.info?.(m), warn: (m) => this.options.log?.warn?.(m) },
60
+ onConnected: () => { this.options.log?.info?.("[clawroom] WebSocket connected"); },
61
+ onDisconnected: () => { this.options.log?.info?.("[clawroom] WebSocket disconnected"); },
62
+ onMessage: (msg) => {
63
+ if (msg.type === "task" && msg.task) {
64
+ const task = msg.task;
65
+ void this.dispatchTask(task);
66
+ }
67
+ if (msg.type === "chat" && Array.isArray(msg.messages)) {
68
+ const fresh = msg.messages.filter((m) => this.rememberChat(m.workId ?? m.messageId));
69
+ if (fresh.length > 0) {
70
+ for (const cb of this.chatCallbacks)
71
+ cb(fresh);
72
+ }
73
+ }
74
+ const message = getRecord(msg.message);
75
+ if (msg.type === "message" && message) {
76
+ const agentProfile = resolveAgentChatProfile(msg.agentProfile, message.agentProfile);
77
+ const delivered = [{
78
+ workId: getString(message.workId),
79
+ leaseToken: getString(message.leaseToken),
80
+ messageId: getString(message.id, getString(msg.messageId)),
81
+ channelId: getString(message.channelId),
82
+ content: getString(message.content),
83
+ attachments: getAttachments(msg.attachments) ?? getAttachments(message.attachments),
84
+ context: getContext(msg.context),
85
+ isMention: typeof msg.isMention === "boolean" ? msg.isMention : false,
86
+ wakeReason: getWakeReason(msg.wakeReason) ?? getWakeReason(message.wakeReason),
87
+ triggerReason: getOptionalString(msg.triggerReason) ?? getOptionalString(message.triggerReason),
88
+ agentProfile,
89
+ }];
90
+ const fresh = delivered.filter((m) => this.rememberChat(m.workId ?? m.messageId));
91
+ if (fresh.length > 0) {
92
+ for (const cb of this.chatCallbacks)
93
+ cb(fresh);
94
+ }
95
+ }
96
+ },
97
+ });
98
+ this.wsTransport.connect();
99
+ // Keep HTTP polling active even when WS is up.
100
+ // WS is the fast path; polling is the durable delivery path.
101
+ this.stopPolling();
102
+ this.pollTimer = setInterval(() => {
103
+ void this.pollTick();
104
+ }, POLL_INTERVAL_MS);
105
+ void this.pollTick();
106
+ }
107
+ disconnect() {
108
+ this.stopped = true;
109
+ this.stopHeartbeat();
110
+ this.stopPolling();
111
+ this.wsTransport?.disconnect();
112
+ this.wsTransport = null;
113
+ this.recentChatIds.clear();
114
+ this.markDisconnected();
115
+ this.connectedAgentId = null;
116
+ }
117
+ async send(message) {
118
+ await this.sendViaHttp(message);
119
+ }
120
+ onTask(cb) {
121
+ this.taskCallbacks.push(cb);
122
+ return () => this.offTask(cb);
123
+ }
124
+ offTask(cb) {
125
+ removeCallback(this.taskCallbacks, cb);
126
+ }
127
+ onChatMessage(cb) {
128
+ this.chatCallbacks.push(cb);
129
+ return () => this.offChatMessage(cb);
130
+ }
131
+ offChatMessage(cb) {
132
+ removeCallback(this.chatCallbacks, cb);
133
+ }
134
+ onConnected(cb) {
135
+ this.connectedCallbacks.push(cb);
136
+ return () => this.offConnected(cb);
137
+ }
138
+ offConnected(cb) {
139
+ removeCallback(this.connectedCallbacks, cb);
140
+ }
141
+ onDisconnected(cb) {
142
+ this.disconnectedCallbacks.push(cb);
143
+ return () => this.offDisconnected(cb);
144
+ }
145
+ offDisconnected(cb) {
146
+ removeCallback(this.disconnectedCallbacks, cb);
147
+ }
148
+ async sendComplete(taskId, output, attachments, workRef) {
149
+ await this.send({ type: "agent.complete", taskId, output, attachments, workRef });
150
+ }
151
+ async sendFail(taskId, reason, workRef) {
152
+ await this.send({ type: "agent.fail", taskId, reason, workRef });
153
+ }
154
+ async sendProgress(taskId, message, workRef) {
155
+ await this.send({ type: "agent.progress", taskId, message, workRef });
156
+ }
157
+ async sendChatReply(channelId, content, replyTo, workRefs) {
158
+ await this.send({ type: "agent.chat.reply", channelId, content, replyTo, workRefs });
159
+ }
160
+ async sendTyping(channelId) {
161
+ await this.send({ type: "agent.typing", channelId });
162
+ }
163
+ async sendReflection(reflection) {
164
+ await this.httpRequest("POST", "/reflections", reflection);
165
+ }
166
+ // ── Heartbeat ─────────────────────────────────────────
167
+ startHeartbeat() {
168
+ this.stopHeartbeat();
169
+ this.heartbeatTimer = setInterval(() => {
170
+ if (!this.stopped)
171
+ void this.register();
172
+ }, HEARTBEAT_INTERVAL_MS);
173
+ }
174
+ stopHeartbeat() {
175
+ if (this.heartbeatTimer) {
176
+ clearInterval(this.heartbeatTimer);
177
+ this.heartbeatTimer = null;
178
+ }
179
+ }
180
+ stopPolling() {
181
+ if (this.pollTimer) {
182
+ clearInterval(this.pollTimer);
183
+ this.pollTimer = null;
184
+ }
185
+ }
186
+ async register() {
187
+ if (this.heartbeatInFlight)
188
+ return;
189
+ this.heartbeatInFlight = true;
190
+ try {
191
+ const response = await this.httpRequest("POST", "/heartbeat", {
192
+ deviceId: this.options.deviceId,
193
+ skills: this.options.skills,
194
+ kind: this.options.kind ?? "openclaw",
195
+ });
196
+ this.onPollSuccess(response.agentId);
197
+ }
198
+ catch (err) {
199
+ this.options.log?.warn?.(`[clawroom] heartbeat error: ${err}`);
200
+ if (!this.wsTransport?.connected) {
201
+ this.onPollError(err);
202
+ }
203
+ }
204
+ finally {
205
+ this.heartbeatInFlight = false;
206
+ }
207
+ }
208
+ async pollTick() {
209
+ if (this.stopped || this.pollInFlight)
210
+ return;
211
+ this.pollInFlight = true;
212
+ try {
213
+ const res = await this.httpRequest("POST", "/poll", {});
214
+ this.onPollSuccess(res?.agentId);
215
+ if (res.task) {
216
+ await this.dispatchTask(res.task);
217
+ }
218
+ if (res.chat && Array.isArray(res.chat) && res.chat.length > 0) {
219
+ const fresh = res.chat.filter((m) => this.rememberChat(m.workId ?? m.messageId));
220
+ if (fresh.length > 0) {
221
+ this.options.log?.info?.(`[clawroom] received ${fresh.length} chat mention(s)`);
222
+ for (const cb of this.chatCallbacks)
223
+ cb(fresh);
224
+ }
225
+ }
226
+ }
227
+ catch (err) {
228
+ this.options.log?.warn?.(`[clawroom] poll error: ${err}`);
229
+ this.onPollError(err);
230
+ }
231
+ finally {
232
+ this.pollInFlight = false;
233
+ }
234
+ }
235
+ onPollSuccess(agentId) {
236
+ this.markConnected(agentId);
237
+ }
238
+ onPollError(err) {
239
+ void err;
240
+ if (this.wsTransport?.connected)
241
+ return;
242
+ this.markDisconnected();
243
+ }
244
+ // ── HTTP ──────────────────────────────────────────────
245
+ async sendViaHttp(message) {
246
+ switch (message.type) {
247
+ case "agent.complete":
248
+ await this.httpRequest("POST", "/complete", { taskId: message.taskId, output: message.output, attachments: message.attachments, workRef: message.workRef });
249
+ break;
250
+ case "agent.fail":
251
+ await this.httpRequest("POST", "/fail", { taskId: message.taskId, reason: message.reason, workRef: message.workRef });
252
+ break;
253
+ case "agent.progress":
254
+ await this.httpRequest("POST", "/progress", { taskId: message.taskId, message: message.message, workRef: message.workRef });
255
+ break;
256
+ case "agent.heartbeat":
257
+ await this.httpRequest("POST", "/heartbeat", {});
258
+ break;
259
+ case "agent.chat.reply":
260
+ await this.httpRequest("POST", "/chat/reply", {
261
+ channelId: message.channelId,
262
+ content: message.content,
263
+ replyTo: message.replyTo,
264
+ workRefs: message.workRefs,
265
+ });
266
+ break;
267
+ case "agent.typing":
268
+ await this.httpRequest("POST", "/typing", { channelId: message.channelId });
269
+ break;
270
+ }
271
+ }
272
+ async httpRequest(method, path, body) {
273
+ const res = await fetch(`${this.httpBase}${path}`, {
274
+ method,
275
+ headers: { "Content-Type": "application/json", "Authorization": `Bearer ${this.options.token}` },
276
+ body: JSON.stringify(body),
277
+ });
278
+ const text = await res.text().catch(() => "");
279
+ if (!res.ok) {
280
+ this.onHttpError(res.status, text);
281
+ throw new Error(`HTTP ${res.status}: ${text}`);
282
+ }
283
+ if (!text)
284
+ return null;
285
+ try {
286
+ return JSON.parse(text);
287
+ }
288
+ catch {
289
+ throw new Error(`Invalid JSON response from ${path}`);
290
+ }
291
+ }
292
+ onHttpError(status, text) {
293
+ void status;
294
+ void text;
295
+ }
296
+ rememberChat(messageId) {
297
+ if (!messageId)
298
+ return false;
299
+ if (this.recentChatIds.has(messageId))
300
+ return false;
301
+ this.recentChatIds.add(messageId);
302
+ if (this.recentChatIds.size > 1000) {
303
+ const oldest = this.recentChatIds.values().next().value;
304
+ if (oldest)
305
+ this.recentChatIds.delete(oldest);
306
+ }
307
+ return true;
308
+ }
309
+ async dispatchTask(task) {
310
+ this.options.log?.info?.(`[clawroom] received task ${task.taskId}: ${task.title}`);
311
+ for (const cb of this.taskCallbacks)
312
+ cb(task);
313
+ }
314
+ markConnected(agentId) {
315
+ if (agentId)
316
+ this.connectedAgentId = agentId;
317
+ if (!this.connectedAgentId || this.isConnectedValue)
318
+ return;
319
+ this.isConnectedValue = true;
320
+ for (const callback of this.connectedCallbacks)
321
+ callback(this.connectedAgentId);
322
+ }
323
+ markDisconnected() {
324
+ if (!this.isConnectedValue)
325
+ return;
326
+ this.isConnectedValue = false;
327
+ for (const callback of this.disconnectedCallbacks)
328
+ callback();
329
+ }
330
+ }
331
+ function removeCallback(callbacks, callback) {
332
+ const index = callbacks.indexOf(callback);
333
+ if (index !== -1)
334
+ callbacks.splice(index, 1);
335
+ }
336
+ function getRecord(value) {
337
+ if (!value || typeof value !== "object" || Array.isArray(value))
338
+ return null;
339
+ return value;
340
+ }
341
+ function getString(value, fallback = "") {
342
+ return typeof value === "string" ? value : fallback;
343
+ }
344
+ function getOptionalString(value) {
345
+ return typeof value === "string" ? value : undefined;
346
+ }
347
+ function getAttachments(value) {
348
+ return Array.isArray(value) ? value : undefined;
349
+ }
350
+ function getContext(value) {
351
+ return Array.isArray(value) ? value : [];
352
+ }
353
+ function getWakeReason(value) {
354
+ return typeof value === "string" ? value : undefined;
355
+ }
356
+ function getAgentChatProfile(value) {
357
+ const record = getRecord(value);
358
+ if (!record)
359
+ return null;
360
+ return {
361
+ role: getString(record.role, DEFAULT_AGENT_CHAT_PROFILE.role),
362
+ systemPrompt: getString(record.systemPrompt, DEFAULT_AGENT_CHAT_PROFILE.systemPrompt),
363
+ memory: getString(record.memory, DEFAULT_AGENT_CHAT_PROFILE.memory),
364
+ continuityPacket: getString(record.continuityPacket, DEFAULT_AGENT_CHAT_PROFILE.continuityPacket),
365
+ };
366
+ }
367
+ function resolveAgentChatProfile(...values) {
368
+ for (const value of values) {
369
+ const profile = getAgentChatProfile(value);
370
+ if (profile)
371
+ return profile;
372
+ }
373
+ return DEFAULT_AGENT_CHAT_PROFILE;
374
+ }
375
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -4,19 +4,5 @@ export { ClawroomMachineClient } from "./machine-client.js";
4
4
  export type { ClawroomMachineClientOptions } from "./machine-client.js";
5
5
  export { WsTransport } from "./ws-transport.js";
6
6
  export type { WsTransportOptions } from "./ws-transport.js";
7
-
8
- export type {
9
- AgentChatProfile,
10
- ChatAttachmentRef,
11
- AgentMessage,
12
- AgentHeartbeat,
13
- AgentComplete,
14
- AgentProgress,
15
- AgentResultFile,
16
- AgentFail,
17
- AgentChatReply,
18
- AgentTyping,
19
- ServerMessage,
20
- ServerTask,
21
- ServerChatMessage,
22
- } from "./protocol.js";
7
+ export type { AgentChatProfile, AgentWorkRef, ChatAttachmentRef, AgentMessage, AgentHeartbeat, AgentComplete, AgentProgress, AgentResultFile, AgentFail, AgentChatReply, AgentTyping, ServerMessage, ServerTask, ServerChatMessage, } from "./protocol.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,eAAe,EACf,SAAS,EACT,cAAc,EACd,WAAW,EACX,aAAa,EACb,UAAU,EACV,iBAAiB,GAClB,MAAM,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { ClawroomClient } from "./client.js";
2
+ export { ClawroomMachineClient } from "./machine-client.js";
3
+ export { WsTransport } from "./ws-transport.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * ClawRoom Machine Client — machine-level auth with multi-agent support.
3
+ * WebSocket primary for real-time push, HTTP polling as fallback.
4
+ */
5
+ import type { AgentWorkRef, ServerChatMessage, ServerTask } from "./protocol.js";
6
+ export type ClawroomMachineClientOptions = {
7
+ endpoint?: string;
8
+ apiKey: string;
9
+ hostname?: string;
10
+ capabilities?: string[];
11
+ wsUrl?: string;
12
+ log?: {
13
+ info?: (message: string, ...args: unknown[]) => void;
14
+ warn?: (message: string, ...args: unknown[]) => void;
15
+ error?: (message: string, ...args: unknown[]) => void;
16
+ };
17
+ };
18
+ export type AgentReflectionPayload = {
19
+ scope: "chat" | "task";
20
+ status: string;
21
+ summary: string;
22
+ channelId?: string | null;
23
+ taskId?: string | null;
24
+ messageId?: string | null;
25
+ toolsUsed?: string[];
26
+ responseExcerpt?: string | null;
27
+ detail?: Record<string, unknown>;
28
+ };
29
+ type AgentWork = {
30
+ agentId: string;
31
+ agentName: string;
32
+ task: ServerTask | null;
33
+ chat: ServerChatMessage[] | null;
34
+ };
35
+ export declare class ClawroomMachineClient {
36
+ private options;
37
+ private heartbeatTimer;
38
+ private pollTimer;
39
+ private heartbeatInFlight;
40
+ private pollInFlight;
41
+ private taskHandler;
42
+ private chatHandler;
43
+ private connectHandler;
44
+ private disconnectHandler;
45
+ private _connected;
46
+ private _stopped;
47
+ private wsTransport;
48
+ private recentChatIds;
49
+ constructor(options: ClawroomMachineClientOptions);
50
+ private get baseUrl();
51
+ private get wsUrl();
52
+ private httpRequest;
53
+ onAgentTask(handler: (agentId: string, task: AgentWork["task"]) => void): void;
54
+ onAgentChat(handler: (agentId: string, messages: NonNullable<AgentWork["chat"]>) => void): void;
55
+ onConnected(handler: (machineId: string) => void): void;
56
+ onDisconnected(handler: () => void): void;
57
+ sendAgentComplete(agentId: string, taskId: string, output: string, attachments?: Array<{
58
+ filename: string;
59
+ mimeType: string;
60
+ data: string;
61
+ }>, workRef?: AgentWorkRef): Promise<void>;
62
+ sendAgentFail(agentId: string, taskId: string, reason: string, workRef?: AgentWorkRef): Promise<void>;
63
+ sendAgentChatReply(agentId: string, channelId: string, content: string, replyTo?: string, workRefs?: AgentWorkRef[]): Promise<void>;
64
+ sendAgentTyping(agentId: string, channelId: string): Promise<void>;
65
+ sendAgentReflection(agentId: string, reflection: AgentReflectionPayload): Promise<void>;
66
+ get connected(): boolean;
67
+ get stopped(): boolean;
68
+ private rememberChat;
69
+ private markConnected;
70
+ private markDisconnected;
71
+ private pollOnce;
72
+ connect(): void;
73
+ disconnect(): void;
74
+ private stopHeartbeat;
75
+ private stopPolling;
76
+ }
77
+ export {};
78
+ //# sourceMappingURL=machine-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-client.d.ts","sourceRoot":"","sources":["../src/machine-client.ts"],"names":[],"mappings":"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"}