strray-ai 1.22.21 → 1.22.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.opencode/codex.codex +1 -1
- package/.opencode/enforcer-config.json +2 -2
- package/.opencode/skills/registry.json +1 -1
- package/.opencode/strray/codex.json +1 -1
- package/.opencode/strray/config.json +1 -1
- package/.opencode/strray/features.json +1 -1
- package/.opencode/strray/integrations.json +3 -3
- package/.strray/codex.json +1 -1
- package/.strray/config.json +1 -1
- package/.strray/features.json +1 -1
- package/.strray/integrations.json +3 -3
- package/dist/CHANGELOG.md +17 -0
- package/dist/analytics/routing-refiner.js +1 -1
- package/dist/core/boot-orchestrator.js +1 -1
- package/dist/core/features-config.js +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/openclaw/api-server.d.ts +86 -0
- package/dist/integrations/openclaw/api-server.d.ts.map +1 -0
- package/dist/integrations/openclaw/api-server.js +339 -0
- package/dist/integrations/openclaw/api-server.js.map +1 -0
- package/dist/integrations/openclaw/client.d.ts +120 -0
- package/dist/integrations/openclaw/client.d.ts.map +1 -0
- package/dist/integrations/openclaw/client.js +447 -0
- package/dist/integrations/openclaw/client.js.map +1 -0
- package/dist/integrations/openclaw/config.d.ts +97 -0
- package/dist/integrations/openclaw/config.d.ts.map +1 -0
- package/dist/integrations/openclaw/config.js +375 -0
- package/dist/integrations/openclaw/config.js.map +1 -0
- package/dist/integrations/openclaw/hooks/strray-hooks.d.ts +125 -0
- package/dist/integrations/openclaw/hooks/strray-hooks.d.ts.map +1 -0
- package/dist/integrations/openclaw/hooks/strray-hooks.js +281 -0
- package/dist/integrations/openclaw/hooks/strray-hooks.js.map +1 -0
- package/dist/integrations/openclaw/index.d.ts +102 -0
- package/dist/integrations/openclaw/index.d.ts.map +1 -0
- package/dist/integrations/openclaw/index.js +340 -0
- package/dist/integrations/openclaw/index.js.map +1 -0
- package/dist/integrations/openclaw/types.d.ts +427 -0
- package/dist/integrations/openclaw/types.d.ts.map +1 -0
- package/dist/integrations/openclaw/types.js +154 -0
- package/dist/integrations/openclaw/types.js.map +1 -0
- package/dist/mcps/architect-tools.server.js +1 -1
- package/dist/mcps/auto-format.server.js +1 -1
- package/dist/mcps/boot-orchestrator.server.js +1 -1
- package/dist/mcps/enforcer-tools.server.js +1 -1
- package/dist/mcps/estimation.server.js +1 -1
- package/dist/mcps/framework-compliance-audit.server.js +1 -1
- package/dist/mcps/framework-help.server.js +1 -1
- package/dist/mcps/knowledge-skills/api-design.server.js +1 -1
- package/dist/mcps/knowledge-skills/architecture-patterns.server.js +1 -1
- package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +1 -1
- package/dist/mcps/knowledge-skills/code-analyzer.server.js +1 -1
- package/dist/mcps/knowledge-skills/code-review.server.js +1 -1
- package/dist/mcps/knowledge-skills/content-creator.server.js +1 -1
- package/dist/mcps/knowledge-skills/database-design.server.js +1 -1
- package/dist/mcps/knowledge-skills/devops-deployment.server.js +1 -1
- package/dist/mcps/knowledge-skills/git-workflow.server.js +1 -1
- package/dist/mcps/knowledge-skills/growth-strategist.server.js +1 -1
- package/dist/mcps/knowledge-skills/log-monitor.server.js +1 -1
- package/dist/mcps/knowledge-skills/mobile-development.server.js +1 -1
- package/dist/mcps/knowledge-skills/multimodal-looker.server.js +1 -1
- package/dist/mcps/knowledge-skills/performance-optimization.server.js +1 -1
- package/dist/mcps/knowledge-skills/project-analysis.server.js +1 -1
- package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +1 -1
- package/dist/mcps/knowledge-skills/security-audit.server.js +1 -1
- package/dist/mcps/knowledge-skills/seo-consultant.server.js +1 -1
- package/dist/mcps/knowledge-skills/session-management.server.js +1 -1
- package/dist/mcps/knowledge-skills/skill-invocation.server.js +1 -1
- package/dist/mcps/knowledge-skills/strategist.server.js +1 -1
- package/dist/mcps/knowledge-skills/tech-writer.server.js +2 -2
- package/dist/mcps/knowledge-skills/testing-best-practices.server.js +1 -1
- package/dist/mcps/knowledge-skills/testing-strategy.server.js +1 -1
- package/dist/mcps/knowledge-skills/ui-ux-design.server.js +1 -1
- package/dist/mcps/lint.server.js +1 -1
- package/dist/mcps/model-health-check.server.js +1 -1
- package/dist/mcps/performance-analysis.server.js +1 -1
- package/dist/mcps/processor-pipeline.server.js +1 -1
- package/dist/mcps/registry.json +1 -1
- package/dist/mcps/researcher.server.js +1 -1
- package/dist/mcps/security-scan.server.js +1 -1
- package/dist/mcps/state-manager.server.js +1 -1
- package/dist/orchestrator/universal-registry-bridge.js +1 -1
- package/dist/skills/registry.json +1 -1
- package/package.json +1 -1
- package/scripts/node/universal-version-manager.js +3 -3
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw Integration - Main Module
|
|
3
|
+
*
|
|
4
|
+
* Combines all OpenClaw integration components into a single interface.
|
|
5
|
+
*
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
* @since 2026-03-14
|
|
8
|
+
*/
|
|
9
|
+
import { BaseIntegration } from '../base/index.js';
|
|
10
|
+
import { OpenClawConfigLoader } from './config.js';
|
|
11
|
+
import { OpenClawClient } from './client.js';
|
|
12
|
+
import { StringRayAPIServer } from './api-server.js';
|
|
13
|
+
import { OpenClawHooksManager } from './hooks/strray-hooks.js';
|
|
14
|
+
import { mcpClientManager } from '../../mcps/mcp-client.js';
|
|
15
|
+
/**
|
|
16
|
+
* Main OpenClaw Integration class
|
|
17
|
+
* Extends BaseIntegration for consistent lifecycle management
|
|
18
|
+
*/
|
|
19
|
+
export class OpenClawIntegration extends BaseIntegration {
|
|
20
|
+
configLoader;
|
|
21
|
+
client = null;
|
|
22
|
+
apiServer = null;
|
|
23
|
+
hooksManager = null;
|
|
24
|
+
agentInvoker = null;
|
|
25
|
+
// Event subscription tracking for cleanup
|
|
26
|
+
mcpToolBeforeUnsubscribe = null;
|
|
27
|
+
mcpToolAfterUnsubscribe = null;
|
|
28
|
+
constructor(configPath) {
|
|
29
|
+
super('openclaw', '1.0.0', { enabled: true, debug: false, logLevel: 'info' });
|
|
30
|
+
this.configLoader = new OpenClawConfigLoader(configPath);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Set the agent invoker for the API server
|
|
34
|
+
*/
|
|
35
|
+
setAgentInvoker(invoker) {
|
|
36
|
+
this.agentInvoker = invoker;
|
|
37
|
+
if (this.apiServer) {
|
|
38
|
+
this.apiServer.setAgentInvoker(invoker);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Perform integration-specific initialization
|
|
43
|
+
* Called by BaseIntegration.initialize() after base setup
|
|
44
|
+
*/
|
|
45
|
+
async performInitialization() {
|
|
46
|
+
const config = this.configLoader.getConfig();
|
|
47
|
+
// Merge with base config
|
|
48
|
+
this.config = { ...this.config, ...config };
|
|
49
|
+
if (!config.enabled) {
|
|
50
|
+
await this.log('info', 'Integration disabled in configuration');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
await this.log('info', 'Initializing...');
|
|
54
|
+
// Initialize API server if enabled
|
|
55
|
+
if (config.apiServer?.enabled) {
|
|
56
|
+
await this.log('info', 'Starting API server...');
|
|
57
|
+
this.apiServer = new StringRayAPIServer(config.apiServer);
|
|
58
|
+
if (this.agentInvoker) {
|
|
59
|
+
this.apiServer.setAgentInvoker(this.agentInvoker);
|
|
60
|
+
}
|
|
61
|
+
await this.apiServer.start();
|
|
62
|
+
}
|
|
63
|
+
// Initialize WebSocket client
|
|
64
|
+
await this.log('info', 'Connecting to OpenClaw Gateway...');
|
|
65
|
+
this.client = new OpenClawClient({
|
|
66
|
+
gatewayUrl: config.gatewayUrl,
|
|
67
|
+
authToken: config.authToken,
|
|
68
|
+
deviceId: config.deviceId,
|
|
69
|
+
deviceKeyPair: config.deviceKeyPair,
|
|
70
|
+
reconnect: config.autoReconnect,
|
|
71
|
+
reconnectAttempts: config.maxReconnectAttempts,
|
|
72
|
+
reconnectDelay: config.reconnectDelay,
|
|
73
|
+
});
|
|
74
|
+
// Set up event listeners using inherited emit
|
|
75
|
+
this.client.onStateChange(async (state, previousState) => {
|
|
76
|
+
this.log('info', `Client state: ${previousState} → ${state}`);
|
|
77
|
+
this.emit('stateChange', { previousState, newState: state });
|
|
78
|
+
// Flush queued events when client reconnects
|
|
79
|
+
if (this.hooksManager && (state === 'connected' || state === 'authorized')) {
|
|
80
|
+
await this.hooksManager.handleReconnect();
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
try {
|
|
84
|
+
await this.client.connect();
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
88
|
+
await this.log('warning', `Failed to connect to OpenClaw Gateway: ${errorMessage}`);
|
|
89
|
+
// Don't fail - API server can still work independently
|
|
90
|
+
}
|
|
91
|
+
// Initialize hooks if enabled
|
|
92
|
+
if (config.hooks?.enabled) {
|
|
93
|
+
await this.log('info', 'Initializing tool hooks...');
|
|
94
|
+
this.hooksManager = new OpenClawHooksManager(config.hooks);
|
|
95
|
+
if (this.client) {
|
|
96
|
+
this.hooksManager.setClient(this.client);
|
|
97
|
+
}
|
|
98
|
+
await this.hooksManager.initialize();
|
|
99
|
+
// Wire hooks to MCPClient tool events
|
|
100
|
+
await this.wireHooksToMCP();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Wire OpenClaw hooks to MCPClient tool events
|
|
105
|
+
*/
|
|
106
|
+
async wireHooksToMCP() {
|
|
107
|
+
if (!this.hooksManager) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
await this.log('info', 'Wiring hooks to MCP tool events...');
|
|
111
|
+
// Subscribe to tool.before events and store unsubscribe function
|
|
112
|
+
this.mcpToolBeforeUnsubscribe = await mcpClientManager.onToolEvent('tool.before', async (event) => {
|
|
113
|
+
const toolEvent = event;
|
|
114
|
+
try {
|
|
115
|
+
await this.hooksManager.onToolBefore({
|
|
116
|
+
toolName: toolEvent.toolName,
|
|
117
|
+
toolId: `${toolEvent.serverName}:${toolEvent.toolName}`,
|
|
118
|
+
args: toolEvent.args,
|
|
119
|
+
duration: 0,
|
|
120
|
+
timestamp: toolEvent.timestamp,
|
|
121
|
+
agent: toolEvent.serverName,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
await this.log('error', `Error in tool.before handler: ${error}`);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
// Subscribe to tool.after events and store unsubscribe function
|
|
129
|
+
this.mcpToolAfterUnsubscribe = await mcpClientManager.onToolEvent('tool.after', async (event) => {
|
|
130
|
+
const toolEvent = event;
|
|
131
|
+
try {
|
|
132
|
+
const afterEvent = {
|
|
133
|
+
toolName: toolEvent.toolName,
|
|
134
|
+
toolId: `${toolEvent.serverName}:${toolEvent.toolName}`,
|
|
135
|
+
args: toolEvent.args,
|
|
136
|
+
duration: toolEvent.duration,
|
|
137
|
+
timestamp: toolEvent.timestamp,
|
|
138
|
+
agent: toolEvent.serverName,
|
|
139
|
+
};
|
|
140
|
+
if (toolEvent.result !== undefined)
|
|
141
|
+
afterEvent.result = toolEvent.result;
|
|
142
|
+
if (toolEvent.error !== undefined)
|
|
143
|
+
afterEvent.error = toolEvent.error;
|
|
144
|
+
await this.hooksManager.onToolAfter(afterEvent);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
await this.log('error', `Error in tool.after handler: ${error}`);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
await this.log('success', 'Hooks wired to MCP tool events');
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Perform integration-specific shutdown
|
|
154
|
+
* Called by BaseIntegration.shutdown() for cleanup
|
|
155
|
+
*/
|
|
156
|
+
async performShutdown() {
|
|
157
|
+
await this.log('info', 'Shutting down...');
|
|
158
|
+
// Unsubscribe from MCP tool events (prevent memory leaks)
|
|
159
|
+
if (this.mcpToolBeforeUnsubscribe) {
|
|
160
|
+
this.mcpToolBeforeUnsubscribe();
|
|
161
|
+
this.mcpToolBeforeUnsubscribe = null;
|
|
162
|
+
}
|
|
163
|
+
if (this.mcpToolAfterUnsubscribe) {
|
|
164
|
+
this.mcpToolAfterUnsubscribe();
|
|
165
|
+
this.mcpToolAfterUnsubscribe = null;
|
|
166
|
+
}
|
|
167
|
+
// Shutdown hooks
|
|
168
|
+
if (this.hooksManager) {
|
|
169
|
+
await this.hooksManager.shutdown();
|
|
170
|
+
}
|
|
171
|
+
// Disconnect client
|
|
172
|
+
if (this.client) {
|
|
173
|
+
this.client.disconnect();
|
|
174
|
+
}
|
|
175
|
+
// Stop API server
|
|
176
|
+
if (this.apiServer) {
|
|
177
|
+
await this.apiServer.stop();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Perform integration-specific health check
|
|
182
|
+
*/
|
|
183
|
+
async performHealthCheck() {
|
|
184
|
+
const checks = [];
|
|
185
|
+
// Check API server
|
|
186
|
+
if (this.apiServer) {
|
|
187
|
+
const apiStats = this.apiServer.getStats();
|
|
188
|
+
const apiHealthy = apiStats.startedAt > 0;
|
|
189
|
+
checks.push({
|
|
190
|
+
healthy: apiHealthy,
|
|
191
|
+
component: 'apiServer',
|
|
192
|
+
message: apiHealthy ? 'API server running' : 'API server not started',
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
// Check client connection
|
|
196
|
+
if (this.client) {
|
|
197
|
+
const clientState = this.client.getState();
|
|
198
|
+
const clientHealthy = clientState === 'connected' || clientState === 'authorized';
|
|
199
|
+
checks.push({
|
|
200
|
+
healthy: clientHealthy,
|
|
201
|
+
component: 'client',
|
|
202
|
+
message: `Client state: ${clientState}`,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
// Check hooks manager
|
|
206
|
+
if (this.hooksManager) {
|
|
207
|
+
const hooksHealthy = this.hooksManager.isInitialized();
|
|
208
|
+
const queueSize = this.hooksManager.getQueueSize();
|
|
209
|
+
checks.push({
|
|
210
|
+
healthy: hooksHealthy,
|
|
211
|
+
component: 'hooks',
|
|
212
|
+
message: hooksHealthy
|
|
213
|
+
? `Hooks initialized (queue: ${queueSize})`
|
|
214
|
+
: 'Hooks not initialized',
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
// Determine overall health
|
|
218
|
+
const allHealthy = checks.length > 0 && checks.every(c => c.healthy);
|
|
219
|
+
const anyHealthy = checks.some(c => c.healthy);
|
|
220
|
+
return {
|
|
221
|
+
healthy: allHealthy || (anyHealthy && checks.length > 0),
|
|
222
|
+
message: checks.length === 0
|
|
223
|
+
? 'No components to check'
|
|
224
|
+
: checks.map(c => c.message).join('; '),
|
|
225
|
+
details: {
|
|
226
|
+
components: checks.reduce((acc, c) => {
|
|
227
|
+
acc[c.component] = c.healthy;
|
|
228
|
+
return acc;
|
|
229
|
+
}, {}),
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get statistics including client, API server, and base stats
|
|
235
|
+
*/
|
|
236
|
+
getStatistics() {
|
|
237
|
+
return {
|
|
238
|
+
client: this.client?.getStats() || this.getDefaultClientStats(),
|
|
239
|
+
apiServer: this.apiServer?.getStats() || this.getDefaultAPIServerStats(),
|
|
240
|
+
uptime: this.getStats().uptime,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Get the API server instance
|
|
245
|
+
*/
|
|
246
|
+
getAPIServer() {
|
|
247
|
+
return this.apiServer;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Get the client instance
|
|
251
|
+
*/
|
|
252
|
+
getClient() {
|
|
253
|
+
return this.client;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Get the hooks manager
|
|
257
|
+
*/
|
|
258
|
+
getHooksManager() {
|
|
259
|
+
return this.hooksManager;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Get OpenClaw-specific configuration
|
|
263
|
+
*/
|
|
264
|
+
getOpenClawConfig() {
|
|
265
|
+
return this.configLoader.getConfig();
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Reload configuration
|
|
269
|
+
*/
|
|
270
|
+
reloadConfig() {
|
|
271
|
+
this.configLoader.reload();
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Get the agent invoker
|
|
275
|
+
*/
|
|
276
|
+
getAgentInvoker() {
|
|
277
|
+
return this.agentInvoker;
|
|
278
|
+
}
|
|
279
|
+
getDefaultClientStats() {
|
|
280
|
+
return {
|
|
281
|
+
messagesSent: 0,
|
|
282
|
+
messagesReceived: 0,
|
|
283
|
+
requestsSent: 0,
|
|
284
|
+
requestsSucceeded: 0,
|
|
285
|
+
requestsFailed: 0,
|
|
286
|
+
reconnects: 0,
|
|
287
|
+
errors: 0,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
getDefaultAPIServerStats() {
|
|
291
|
+
return {
|
|
292
|
+
startedAt: 0,
|
|
293
|
+
requestsTotal: 0,
|
|
294
|
+
requestsByEndpoint: {},
|
|
295
|
+
requestsByStatus: {},
|
|
296
|
+
averageResponseTime: 0,
|
|
297
|
+
errors: 0,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Global integration instance
|
|
303
|
+
*/
|
|
304
|
+
let globalIntegration = null;
|
|
305
|
+
/**
|
|
306
|
+
* Initialize the global integration
|
|
307
|
+
*/
|
|
308
|
+
export async function initializeOpenClawIntegration(configPath, agentInvoker) {
|
|
309
|
+
if (globalIntegration) {
|
|
310
|
+
return globalIntegration;
|
|
311
|
+
}
|
|
312
|
+
globalIntegration = new OpenClawIntegration(configPath);
|
|
313
|
+
if (agentInvoker) {
|
|
314
|
+
globalIntegration.setAgentInvoker(agentInvoker);
|
|
315
|
+
}
|
|
316
|
+
await globalIntegration.initialize();
|
|
317
|
+
return globalIntegration;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Get the global integration
|
|
321
|
+
*/
|
|
322
|
+
export function getOpenClawIntegration() {
|
|
323
|
+
return globalIntegration;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Shutdown the global integration
|
|
327
|
+
*/
|
|
328
|
+
export async function shutdownOpenClawIntegration() {
|
|
329
|
+
if (globalIntegration) {
|
|
330
|
+
await globalIntegration.shutdown();
|
|
331
|
+
globalIntegration = null;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// Export all components
|
|
335
|
+
export * from './types.js';
|
|
336
|
+
export * from './config.js';
|
|
337
|
+
export * from './client.js';
|
|
338
|
+
export * from './api-server.js';
|
|
339
|
+
export { OpenClawHooksManager } from './hooks/strray-hooks.js';
|
|
340
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/openclaw/index.ts"],"names":[],"mappings":"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"}
|