@clawsignal/clawsignal 0.2.0 → 0.3.1

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.
@@ -1,50 +1,25 @@
1
1
  {
2
2
  "id": "clawsignal",
3
3
  "name": "ClawSignal",
4
- "version": "0.2.0",
5
- "description": "Receive and respond to ClawSignal agent messages",
4
+ "version": "0.3.0",
5
+ "description": "Real-time messaging between AI agents via ClawSignal",
6
6
  "author": "ClawSignal",
7
7
  "configSchema": {
8
8
  "type": "object",
9
9
  "additionalProperties": false,
10
- "required": ["apiKey"],
11
- "properties": {
12
- "apiKey": {
13
- "type": "string",
14
- "description": "Your ClawSignal API key (starts with clawsig_)"
15
- },
16
- "serverUrl": {
17
- "type": "string",
18
- "description": "ClawSignal server URL (default: wss://clawsignal.com)",
19
- "default": "wss://clawsignal.com"
20
- },
21
- "autoReply": {
22
- "type": "boolean",
23
- "description": "Automatically send agent responses back via ClawSignal",
24
- "default": true
25
- },
26
- "sessionPrefix": {
27
- "type": "string",
28
- "description": "Prefix for session keys",
29
- "default": "clawsignal"
30
- }
31
- }
10
+ "properties": {}
32
11
  },
33
- "uiHints": {
34
- "apiKey": {
35
- "label": "API Key",
36
- "placeholder": "clawsig_xxxxxxxx",
37
- "sensitive": true
38
- },
39
- "serverUrl": {
40
- "label": "Server URL",
41
- "placeholder": "wss://clawsignal.com"
42
- },
43
- "autoReply": {
44
- "label": "Auto-reply via ClawSignal"
45
- },
46
- "sessionPrefix": {
47
- "label": "Session Prefix"
48
- }
12
+ "channel": {
13
+ "id": "clawsignal",
14
+ "label": "ClawSignal",
15
+ "selectionLabel": "ClawSignal (Agent Messaging)",
16
+ "docsPath": "/channels/clawsignal",
17
+ "docsLabel": "clawsignal",
18
+ "blurb": "Real-time messaging between AI agents",
19
+ "order": 110
20
+ },
21
+ "install": {
22
+ "npmSpec": "@clawsignal/clawsignal",
23
+ "defaultChoice": "npm"
49
24
  }
50
25
  }
package/dist/index.d.ts CHANGED
@@ -1,80 +1,20 @@
1
1
  /**
2
- * ClawSignal Plugin for Clawdbot
2
+ * ClawSignal Plugin for OpenClaw
3
3
  *
4
- * Connects to ClawSignal's event stream and triggers the Clawdbot agent
5
- * when new messages arrive. Sends responses back via ClawSignal.
4
+ * Connects to ClawSignal's event stream and handles messages through
5
+ * OpenClaw's standard channel infrastructure.
6
6
  */
7
- interface PluginLogger {
8
- info: (msg: string, meta?: object) => void;
9
- warn: (msg: string, meta?: object) => void;
10
- error: (msg: string, meta?: object) => void;
11
- debug: (msg: string, meta?: object) => void;
12
- }
13
- interface PluginRuntime {
14
- channel: {
15
- routing: {
16
- resolveAgentRoute: (params: {
17
- cfg: unknown;
18
- channel: string;
19
- accountId?: string;
20
- peer?: {
21
- kind: string;
22
- id: string;
23
- };
24
- }) => {
25
- sessionKey: string;
26
- accountId: string;
27
- };
28
- };
29
- reply: {
30
- finalizeInboundContext: (ctx: Record<string, unknown>) => Record<string, unknown>;
31
- dispatchReplyFromConfig: (params: {
32
- ctx: Record<string, unknown>;
33
- cfg: unknown;
34
- dispatcher: {
35
- deliver: (payload: {
36
- text?: string;
37
- }) => void | Promise<void>;
38
- complete: () => void;
39
- };
40
- replyOptions?: Record<string, unknown>;
41
- }) => Promise<{
42
- queuedFinal: boolean;
43
- }>;
44
- };
45
- session: {
46
- recordInboundSession: (params: {
47
- storePath: string;
48
- sessionKey: string;
49
- ctx: Record<string, unknown>;
50
- }) => Promise<void>;
51
- resolveStorePath: (cfg: unknown) => string;
52
- };
7
+ declare const plugin: {
8
+ id: string;
9
+ name: string;
10
+ version: string;
11
+ description: string;
12
+ configSchema: {
13
+ type: string;
14
+ additionalProperties: boolean;
15
+ properties: {};
53
16
  };
54
- state: {
55
- resolveStateDir: (cfg: unknown) => string;
56
- };
57
- }
58
- interface PluginApi {
59
- config: unknown;
60
- logger: PluginLogger;
61
- runtime: PluginRuntime;
62
- registerService: (service: {
63
- id: string;
64
- start: () => void | Promise<void>;
65
- stop: () => void | Promise<void>;
66
- }) => void;
67
- registerGatewayMethod: (method: string, handler: (ctx: {
68
- params: unknown;
69
- respond: (ok: boolean, payload: unknown) => void;
70
- }) => void) => void;
71
- registerTool: (tool: {
72
- name: string;
73
- description: string;
74
- parameters: object;
75
- handler: (params: unknown) => Promise<unknown>;
76
- }) => void;
77
- }
78
- export default function register(api: PluginApi): void;
79
- export {};
17
+ register(api: any): void;
18
+ };
19
+ export default plugin;
80
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2TH,QAAA,MAAM,MAAM;;;;;;;;;;kBAWI,GAAG;CAyDlB,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/dist/index.js CHANGED
@@ -1,266 +1,318 @@
1
1
  /**
2
- * ClawSignal Plugin for Clawdbot
2
+ * ClawSignal Plugin for OpenClaw
3
3
  *
4
- * Connects to ClawSignal's event stream and triggers the Clawdbot agent
5
- * when new messages arrive. Sends responses back via ClawSignal.
4
+ * Connects to ClawSignal's event stream and handles messages through
5
+ * OpenClaw's standard channel infrastructure.
6
6
  */
7
- import WebSocket from 'ws';
8
- const DEFAULT_SERVER_URL = 'wss://clawsignal.com';
7
+ import WebSocket from "ws";
8
+ const DEFAULT_SERVER_URL = "wss://clawsignal.com";
9
9
  const RECONNECT_DELAY_MS = 5000;
10
10
  const PING_INTERVAL_MS = 30000;
11
- export default function register(api) {
12
- const getConfig = () => {
13
- const config = api.config;
14
- const entry = config.plugins?.entries?.clawsignal;
15
- if (!entry?.enabled || !entry?.config?.apiKey) {
16
- return null;
17
- }
18
- return entry.config;
11
+ // Runtime reference
12
+ let pluginRuntime = null;
13
+ function setRuntime(runtime) {
14
+ pluginRuntime = runtime;
15
+ }
16
+ function getRuntime() {
17
+ if (!pluginRuntime)
18
+ throw new Error("ClawSignal runtime not initialized");
19
+ return pluginRuntime;
20
+ }
21
+ // Config helpers
22
+ function resolveClawSignalAccount(cfg, accountId) {
23
+ const config = cfg.channels?.clawsignal;
24
+ return {
25
+ accountId: accountId ?? "default",
26
+ enabled: config?.enabled !== false,
27
+ configured: !!config?.apiKey,
28
+ apiKey: config?.apiKey ?? null,
29
+ serverUrl: config?.serverUrl ?? DEFAULT_SERVER_URL,
19
30
  };
20
- let ws = null;
21
- let reconnectTimeout = null;
22
- let pingInterval = null;
23
- let isShuttingDown = false;
24
- const sendToClawSignal = async (to, message) => {
25
- const config = getConfig();
26
- if (!config)
27
- return false;
28
- const httpUrl = (config.serverUrl || DEFAULT_SERVER_URL)
29
- .replace('wss://', 'https://')
30
- .replace('ws://', 'http://');
31
- try {
32
- const response = await fetch(`${httpUrl}/api/v1/send`, {
33
- method: 'POST',
34
- headers: {
35
- 'Authorization': `Bearer ${config.apiKey}`,
36
- 'Content-Type': 'application/json',
31
+ }
32
+ // Active connections
33
+ const activeConnections = new Map();
34
+ // Send message to ClawSignal
35
+ async function sendToClawSignal(to, message, account) {
36
+ if (!account.apiKey)
37
+ return false;
38
+ const httpUrl = account.serverUrl
39
+ .replace("wss://", "https://")
40
+ .replace("ws://", "http://");
41
+ try {
42
+ const response = await fetch(`${httpUrl}/api/v1/send`, {
43
+ method: "POST",
44
+ headers: {
45
+ Authorization: `Bearer ${account.apiKey}`,
46
+ "Content-Type": "application/json",
47
+ },
48
+ body: JSON.stringify({ to, message }),
49
+ });
50
+ return response.ok;
51
+ }
52
+ catch {
53
+ return false;
54
+ }
55
+ }
56
+ // Channel plugin definition
57
+ const clawsignalChannel = {
58
+ id: "clawsignal",
59
+ meta: {
60
+ id: "clawsignal",
61
+ label: "ClawSignal",
62
+ selectionLabel: "ClawSignal (Agent Messaging)",
63
+ docsPath: "/channels/clawsignal",
64
+ docsLabel: "clawsignal",
65
+ blurb: "Real-time messaging between AI agents via ClawSignal",
66
+ order: 110,
67
+ },
68
+ capabilities: {
69
+ chatTypes: ["direct"],
70
+ media: false,
71
+ },
72
+ reload: { configPrefixes: ["channels.clawsignal"] },
73
+ configSchema: {
74
+ type: "object",
75
+ properties: {
76
+ clawsignal: {
77
+ type: "object",
78
+ properties: {
79
+ apiKey: { type: "string" },
80
+ serverUrl: { type: "string" },
81
+ enabled: { type: "boolean" },
37
82
  },
38
- body: JSON.stringify({ to, message }),
39
- });
40
- if (!response.ok) {
41
- api.logger.error('Failed to send ClawSignal message', {
42
- status: response.status,
43
- to
44
- });
45
- return false;
83
+ },
84
+ },
85
+ },
86
+ config: {
87
+ listAccountIds: () => ["default"],
88
+ resolveAccount: (cfg, accountId) => resolveClawSignalAccount(cfg, accountId),
89
+ defaultAccountId: () => "default",
90
+ isConfigured: (account) => account.configured,
91
+ describeAccount: (account) => ({
92
+ accountId: account.accountId,
93
+ enabled: account.enabled,
94
+ configured: account.configured,
95
+ }),
96
+ },
97
+ outbound: {
98
+ deliveryMode: "direct",
99
+ textChunkLimit: 4000,
100
+ sendText: async ({ to, text, accountId }) => {
101
+ const runtime = getRuntime();
102
+ const cfg = runtime.config.loadConfig();
103
+ const account = resolveClawSignalAccount(cfg, accountId);
104
+ if (!account.configured) {
105
+ throw new Error("ClawSignal not configured (missing API key)");
46
106
  }
47
- api.logger.debug('Sent ClawSignal message', { to });
48
- return true;
49
- }
50
- catch (err) {
51
- api.logger.error('Error sending ClawSignal message', {
52
- error: err instanceof Error ? err.message : String(err),
53
- to
54
- });
55
- return false;
56
- }
57
- };
58
- const handleMessage = async (data) => {
59
- const pluginConfig = getConfig();
60
- if (!pluginConfig)
61
- return;
62
- if (data.type === 'ping') {
63
- ws?.send(JSON.stringify({ type: 'pong' }));
64
- return;
65
- }
66
- if (data.type === 'connected') {
67
- api.logger.info('ClawSignal connection established');
68
- return;
69
- }
70
- if (data.type === 'message' && data.from && data.message) {
71
- const sessionPrefix = pluginConfig.sessionPrefix || 'clawsignal';
72
- const sessionKey = `${sessionPrefix}:${data.from}`;
73
- api.logger.info('Received ClawSignal message', {
74
- from: data.from,
75
- sessionKey
76
- });
77
- try {
78
- const cfg = api.config;
79
- // Build inbound context similar to how channels do it
80
- const ctx = api.runtime.channel.reply.finalizeInboundContext({
81
- Body: `[ClawSignal from ${data.from}]: ${data.message}`,
82
- RawBody: data.message,
83
- CommandBody: data.message,
84
- From: `clawsignal:${data.from}`,
85
- To: 'clawsignal:self',
86
- SessionKey: sessionKey,
87
- AccountId: 'default',
88
- ChatType: 'direct',
89
- ConversationLabel: data.from,
90
- SenderName: data.from,
91
- SenderId: data.from,
92
- Provider: 'clawsignal',
93
- Surface: 'clawsignal',
94
- MessageSid: data.id || `cs-${Date.now()}`,
95
- Timestamp: data.timestamp || Date.now(),
96
- OriginatingChannel: 'clawsignal',
97
- OriginatingTo: `clawsignal:${data.from}`,
98
- });
99
- // Collect response
100
- let responseText = '';
101
- // Dispatch to agent
102
- await api.runtime.channel.reply.dispatchReplyFromConfig({
103
- ctx,
104
- cfg,
105
- dispatcher: {
106
- deliver: (payload) => {
107
- if (payload.text) {
108
- responseText += payload.text;
109
- }
110
- },
111
- complete: () => { },
112
- },
113
- });
114
- // Send response back via ClawSignal if enabled
115
- if (pluginConfig.autoReply !== false && responseText) {
116
- await sendToClawSignal(data.from, responseText);
117
- }
107
+ const success = await sendToClawSignal(to, text, account);
108
+ if (!success) {
109
+ throw new Error("Failed to send ClawSignal message");
118
110
  }
119
- catch (err) {
120
- api.logger.error('Error processing ClawSignal message', {
121
- error: err instanceof Error ? err.message : String(err),
122
- from: data.from,
123
- });
111
+ return { channel: "clawsignal", to };
112
+ },
113
+ },
114
+ status: {
115
+ defaultRuntime: {
116
+ accountId: "default",
117
+ running: false,
118
+ lastStartAt: null,
119
+ lastStopAt: null,
120
+ lastError: null,
121
+ },
122
+ buildChannelSummary: ({ snapshot }) => ({
123
+ configured: snapshot.configured ?? false,
124
+ running: snapshot.running ?? false,
125
+ lastStartAt: snapshot.lastStartAt ?? null,
126
+ lastStopAt: snapshot.lastStopAt ?? null,
127
+ lastError: snapshot.lastError ?? null,
128
+ }),
129
+ buildAccountSnapshot: ({ account, runtime }) => ({
130
+ accountId: account.accountId,
131
+ enabled: account.enabled,
132
+ configured: account.configured,
133
+ running: runtime?.running ?? false,
134
+ lastStartAt: runtime?.lastStartAt ?? null,
135
+ lastStopAt: runtime?.lastStopAt ?? null,
136
+ lastError: runtime?.lastError ?? null,
137
+ }),
138
+ },
139
+ gateway: {
140
+ startAccount: async (ctx) => {
141
+ const account = ctx.account;
142
+ const runtime = getRuntime();
143
+ ctx.log?.info(`[${account.accountId}] Starting ClawSignal channel`);
144
+ if (!account.configured || !account.apiKey) {
145
+ throw new Error("ClawSignal API key not configured");
124
146
  }
125
- }
126
- };
127
- const connect = () => {
128
- const config = getConfig();
129
- if (!config || isShuttingDown) {
130
- return;
131
- }
132
- const serverUrl = config.serverUrl || DEFAULT_SERVER_URL;
133
- const wsUrl = `${serverUrl}/api/v1/events`;
134
- api.logger.info('Connecting to ClawSignal', { url: wsUrl });
135
- try {
136
- ws = new WebSocket(wsUrl, {
137
- headers: {
138
- 'Authorization': `Bearer ${config.apiKey}`,
139
- },
140
- });
141
- ws.on('open', () => {
142
- api.logger.info('ClawSignal WebSocket connected');
143
- if (pingInterval)
147
+ let ws = null;
148
+ let pingInterval = null;
149
+ let reconnectTimeout = null;
150
+ let isShuttingDown = false;
151
+ const cleanup = () => {
152
+ if (pingInterval) {
144
153
  clearInterval(pingInterval);
145
- pingInterval = setInterval(() => {
146
- if (ws?.readyState === WebSocket.OPEN) {
147
- ws.send(JSON.stringify({ type: 'ping' }));
154
+ pingInterval = null;
155
+ }
156
+ if (ws) {
157
+ ws.removeAllListeners();
158
+ if (ws.readyState === WebSocket.OPEN) {
159
+ ws.close();
148
160
  }
149
- }, PING_INTERVAL_MS);
150
- });
151
- ws.on('message', (rawData) => {
161
+ ws = null;
162
+ }
163
+ };
164
+ const connect = () => {
165
+ if (isShuttingDown)
166
+ return;
167
+ const wsUrl = `${account.serverUrl}/api/v1/events`;
168
+ ctx.log?.info(`Connecting to ClawSignal: ${wsUrl}`);
152
169
  try {
153
- const data = JSON.parse(rawData.toString());
154
- handleMessage(data);
170
+ ws = new WebSocket(wsUrl, {
171
+ headers: { Authorization: `Bearer ${account.apiKey}` },
172
+ });
173
+ ws.on("open", () => {
174
+ ctx.log?.info("ClawSignal WebSocket connected");
175
+ ctx.setStatus({ running: true, lastStartAt: Date.now() });
176
+ if (pingInterval)
177
+ clearInterval(pingInterval);
178
+ pingInterval = setInterval(() => {
179
+ if (ws?.readyState === WebSocket.OPEN) {
180
+ ws.send(JSON.stringify({ type: "ping" }));
181
+ }
182
+ }, PING_INTERVAL_MS);
183
+ });
184
+ ws.on("message", async (rawData) => {
185
+ try {
186
+ const data = JSON.parse(rawData.toString());
187
+ if (data.type === "ping") {
188
+ ws?.send(JSON.stringify({ type: "pong" }));
189
+ return;
190
+ }
191
+ if (data.type === "connected") {
192
+ ctx.log?.info("ClawSignal connection established");
193
+ return;
194
+ }
195
+ if (data.type === "message" && data.from && data.message) {
196
+ ctx.log?.info(`Received message from ${data.from}`);
197
+ // Use OpenClaw's standard message handling
198
+ await runtime.channel.reply.handleInboundMessage({
199
+ channel: "clawsignal",
200
+ accountId: account.accountId,
201
+ senderId: data.from,
202
+ chatType: "direct",
203
+ chatId: data.from,
204
+ text: data.message,
205
+ reply: async (responseText) => {
206
+ await sendToClawSignal(data.from, responseText, account);
207
+ },
208
+ });
209
+ }
210
+ }
211
+ catch (err) {
212
+ ctx.log?.error(`Failed to process ClawSignal message: ${err}`);
213
+ }
214
+ });
215
+ ws.on("close", (code, reason) => {
216
+ ctx.log?.warn(`ClawSignal WebSocket closed: ${code} ${reason}`);
217
+ cleanup();
218
+ if (!isShuttingDown) {
219
+ ctx.log?.info(`Reconnecting in ${RECONNECT_DELAY_MS / 1000}s`);
220
+ reconnectTimeout = setTimeout(connect, RECONNECT_DELAY_MS);
221
+ }
222
+ });
223
+ ws.on("error", (err) => {
224
+ ctx.log?.error(`ClawSignal WebSocket error: ${err.message}`);
225
+ ctx.setStatus({ lastError: err.message });
226
+ });
155
227
  }
156
228
  catch (err) {
157
- api.logger.error('Failed to parse ClawSignal message', {
158
- error: err instanceof Error ? err.message : String(err),
159
- });
229
+ ctx.log?.error(`Failed to create ClawSignal WebSocket: ${err}`);
230
+ if (!isShuttingDown) {
231
+ reconnectTimeout = setTimeout(connect, RECONNECT_DELAY_MS);
232
+ }
160
233
  }
161
- });
162
- ws.on('close', (code, reason) => {
163
- api.logger.warn('ClawSignal WebSocket closed', {
164
- code,
165
- reason: reason.toString()
166
- });
167
- cleanup();
168
- scheduleReconnect();
169
- });
170
- ws.on('error', (err) => {
171
- api.logger.error('ClawSignal WebSocket error', {
172
- error: err.message,
173
- });
174
- });
175
- }
176
- catch (err) {
177
- api.logger.error('Failed to create ClawSignal WebSocket', {
178
- error: err instanceof Error ? err.message : String(err),
179
- });
180
- scheduleReconnect();
181
- }
182
- };
183
- const cleanup = () => {
184
- if (pingInterval) {
185
- clearInterval(pingInterval);
186
- pingInterval = null;
187
- }
188
- if (ws) {
189
- ws.removeAllListeners();
190
- if (ws.readyState === WebSocket.OPEN) {
191
- ws.close();
192
- }
193
- ws = null;
194
- }
195
- };
196
- const scheduleReconnect = () => {
197
- if (isShuttingDown)
198
- return;
199
- if (reconnectTimeout) {
200
- clearTimeout(reconnectTimeout);
201
- }
202
- api.logger.info(`Reconnecting to ClawSignal in ${RECONNECT_DELAY_MS / 1000}s`);
203
- reconnectTimeout = setTimeout(() => {
204
- reconnectTimeout = null;
234
+ };
235
+ // Start connection
205
236
  connect();
206
- }, RECONNECT_DELAY_MS);
207
- };
208
- // Register background service
209
- api.registerService({
210
- id: 'clawsignal-listener',
211
- start: () => {
212
- isShuttingDown = false;
213
- const config = getConfig();
214
- if (config) {
215
- connect();
216
- }
217
- else {
218
- api.logger.warn('ClawSignal plugin enabled but no API key configured');
219
- }
220
- },
221
- stop: () => {
222
- isShuttingDown = true;
223
- if (reconnectTimeout) {
224
- clearTimeout(reconnectTimeout);
225
- reconnectTimeout = null;
226
- }
227
- cleanup();
228
- api.logger.info('ClawSignal listener stopped');
229
- },
230
- });
231
- // Register RPC method for status
232
- api.registerGatewayMethod('clawsignal.status', ({ respond }) => {
233
- const config = getConfig();
234
- respond(true, {
235
- configured: !!config,
236
- connected: ws?.readyState === WebSocket.OPEN,
237
- serverUrl: config?.serverUrl || DEFAULT_SERVER_URL,
238
- });
239
- });
240
- // Register tool for sending messages
241
- api.registerTool({
242
- name: 'clawsignal_send',
243
- description: 'Send a message to another agent via ClawSignal',
244
- parameters: {
245
- type: 'object',
246
- required: ['to', 'message'],
247
- properties: {
248
- to: {
249
- type: 'string',
250
- description: 'The recipient agent name on ClawSignal',
237
+ // Store connection state
238
+ activeConnections.set(account.accountId, { ws, pingInterval, reconnectTimeout });
239
+ // Return cleanup function
240
+ return {
241
+ stop: () => {
242
+ isShuttingDown = true;
243
+ if (reconnectTimeout) {
244
+ clearTimeout(reconnectTimeout);
245
+ reconnectTimeout = null;
246
+ }
247
+ cleanup();
248
+ activeConnections.delete(account.accountId);
249
+ ctx.log?.info(`[${account.accountId}] ClawSignal channel stopped`);
251
250
  },
252
- message: {
253
- type: 'string',
254
- description: 'The message to send',
251
+ };
252
+ },
253
+ },
254
+ };
255
+ // Plugin definition
256
+ const plugin = {
257
+ id: "clawsignal",
258
+ name: "ClawSignal",
259
+ version: "0.3.0",
260
+ description: "Real-time messaging between AI agents via ClawSignal",
261
+ configSchema: {
262
+ type: "object",
263
+ additionalProperties: false,
264
+ properties: {},
265
+ },
266
+ register(api) {
267
+ setRuntime(api.runtime);
268
+ // Register as a channel
269
+ api.registerChannel({ plugin: clawsignalChannel });
270
+ // Register send tool
271
+ api.registerTool({
272
+ name: "clawsignal_send",
273
+ description: "Send a message to another agent via ClawSignal",
274
+ parameters: {
275
+ type: "object",
276
+ required: ["to", "message"],
277
+ properties: {
278
+ to: { type: "string", description: "The recipient agent name" },
279
+ message: { type: "string", description: "The message to send" },
255
280
  },
256
281
  },
257
- },
258
- handler: async (params) => {
259
- const { to, message } = params;
260
- const success = await sendToClawSignal(to, message);
261
- return { success, to, message: success ? 'Message sent' : 'Failed to send' };
262
- },
263
- });
264
- api.logger.info('ClawSignal plugin registered');
265
- }
282
+ async execute(_id, params) {
283
+ const runtime = getRuntime();
284
+ const cfg = runtime.config.loadConfig();
285
+ const account = resolveClawSignalAccount(cfg);
286
+ if (!account.configured) {
287
+ return {
288
+ content: [{ type: "text", text: "ClawSignal not configured" }],
289
+ };
290
+ }
291
+ const success = await sendToClawSignal(params.to, params.message, account);
292
+ return {
293
+ content: [{
294
+ type: "text",
295
+ text: success
296
+ ? `Message sent to ${params.to}`
297
+ : `Failed to send message to ${params.to}`,
298
+ }],
299
+ };
300
+ },
301
+ });
302
+ // Register status RPC
303
+ api.registerGatewayMethod("clawsignal.status", ({ respond }) => {
304
+ const runtime = getRuntime();
305
+ const cfg = runtime.config.loadConfig();
306
+ const account = resolveClawSignalAccount(cfg);
307
+ const conn = activeConnections.get(account.accountId);
308
+ respond(true, {
309
+ configured: account.configured,
310
+ connected: conn?.ws?.readyState === WebSocket.OPEN,
311
+ serverUrl: account.serverUrl,
312
+ });
313
+ });
314
+ api.logger.info("ClawSignal plugin registered");
315
+ },
316
+ };
317
+ export default plugin;
266
318
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,50 +1,25 @@
1
1
  {
2
2
  "id": "clawsignal",
3
3
  "name": "ClawSignal",
4
- "version": "0.1.0",
5
- "description": "Receive and respond to ClawSignal agent messages",
4
+ "version": "0.3.0",
5
+ "description": "Real-time messaging between AI agents via ClawSignal",
6
6
  "author": "ClawSignal",
7
7
  "configSchema": {
8
8
  "type": "object",
9
9
  "additionalProperties": false,
10
- "required": ["apiKey"],
11
- "properties": {
12
- "apiKey": {
13
- "type": "string",
14
- "description": "Your ClawSignal API key (starts with clawsig_)"
15
- },
16
- "serverUrl": {
17
- "type": "string",
18
- "description": "ClawSignal server URL (default: wss://clawsignal.com)",
19
- "default": "wss://clawsignal.com"
20
- },
21
- "autoReply": {
22
- "type": "boolean",
23
- "description": "Automatically send agent responses back via ClawSignal",
24
- "default": true
25
- },
26
- "sessionPrefix": {
27
- "type": "string",
28
- "description": "Prefix for session keys",
29
- "default": "clawsignal"
30
- }
31
- }
10
+ "properties": {}
32
11
  },
33
- "uiHints": {
34
- "apiKey": {
35
- "label": "API Key",
36
- "placeholder": "clawsig_xxxxxxxx",
37
- "sensitive": true
38
- },
39
- "serverUrl": {
40
- "label": "Server URL",
41
- "placeholder": "wss://clawsignal.com"
42
- },
43
- "autoReply": {
44
- "label": "Auto-reply via ClawSignal"
45
- },
46
- "sessionPrefix": {
47
- "label": "Session Prefix"
48
- }
12
+ "channel": {
13
+ "id": "clawsignal",
14
+ "label": "ClawSignal",
15
+ "selectionLabel": "ClawSignal (Agent Messaging)",
16
+ "docsPath": "/channels/clawsignal",
17
+ "docsLabel": "clawsignal",
18
+ "blurb": "Real-time messaging between AI agents",
19
+ "order": 110
20
+ },
21
+ "install": {
22
+ "npmSpec": "@clawsignal/clawsignal",
23
+ "defaultChoice": "npm"
49
24
  }
50
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clawsignal/clawsignal",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "ClawSignal integration for OpenClaw - receive agent messages via ClawSignal",
5
5
  "author": "ClawSignal",
6
6
  "license": "MIT",