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.
Files changed (87) hide show
  1. package/.opencode/codex.codex +1 -1
  2. package/.opencode/enforcer-config.json +2 -2
  3. package/.opencode/skills/registry.json +1 -1
  4. package/.opencode/strray/codex.json +1 -1
  5. package/.opencode/strray/config.json +1 -1
  6. package/.opencode/strray/features.json +1 -1
  7. package/.opencode/strray/integrations.json +3 -3
  8. package/.strray/codex.json +1 -1
  9. package/.strray/config.json +1 -1
  10. package/.strray/features.json +1 -1
  11. package/.strray/integrations.json +3 -3
  12. package/dist/CHANGELOG.md +17 -0
  13. package/dist/analytics/routing-refiner.js +1 -1
  14. package/dist/core/boot-orchestrator.js +1 -1
  15. package/dist/core/features-config.js +1 -1
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/integrations/openclaw/api-server.d.ts +86 -0
  21. package/dist/integrations/openclaw/api-server.d.ts.map +1 -0
  22. package/dist/integrations/openclaw/api-server.js +339 -0
  23. package/dist/integrations/openclaw/api-server.js.map +1 -0
  24. package/dist/integrations/openclaw/client.d.ts +120 -0
  25. package/dist/integrations/openclaw/client.d.ts.map +1 -0
  26. package/dist/integrations/openclaw/client.js +447 -0
  27. package/dist/integrations/openclaw/client.js.map +1 -0
  28. package/dist/integrations/openclaw/config.d.ts +97 -0
  29. package/dist/integrations/openclaw/config.d.ts.map +1 -0
  30. package/dist/integrations/openclaw/config.js +375 -0
  31. package/dist/integrations/openclaw/config.js.map +1 -0
  32. package/dist/integrations/openclaw/hooks/strray-hooks.d.ts +125 -0
  33. package/dist/integrations/openclaw/hooks/strray-hooks.d.ts.map +1 -0
  34. package/dist/integrations/openclaw/hooks/strray-hooks.js +281 -0
  35. package/dist/integrations/openclaw/hooks/strray-hooks.js.map +1 -0
  36. package/dist/integrations/openclaw/index.d.ts +102 -0
  37. package/dist/integrations/openclaw/index.d.ts.map +1 -0
  38. package/dist/integrations/openclaw/index.js +340 -0
  39. package/dist/integrations/openclaw/index.js.map +1 -0
  40. package/dist/integrations/openclaw/types.d.ts +427 -0
  41. package/dist/integrations/openclaw/types.d.ts.map +1 -0
  42. package/dist/integrations/openclaw/types.js +154 -0
  43. package/dist/integrations/openclaw/types.js.map +1 -0
  44. package/dist/mcps/architect-tools.server.js +1 -1
  45. package/dist/mcps/auto-format.server.js +1 -1
  46. package/dist/mcps/boot-orchestrator.server.js +1 -1
  47. package/dist/mcps/enforcer-tools.server.js +1 -1
  48. package/dist/mcps/estimation.server.js +1 -1
  49. package/dist/mcps/framework-compliance-audit.server.js +1 -1
  50. package/dist/mcps/framework-help.server.js +1 -1
  51. package/dist/mcps/knowledge-skills/api-design.server.js +1 -1
  52. package/dist/mcps/knowledge-skills/architecture-patterns.server.js +1 -1
  53. package/dist/mcps/knowledge-skills/bug-triage-specialist.server.js +1 -1
  54. package/dist/mcps/knowledge-skills/code-analyzer.server.js +1 -1
  55. package/dist/mcps/knowledge-skills/code-review.server.js +1 -1
  56. package/dist/mcps/knowledge-skills/content-creator.server.js +1 -1
  57. package/dist/mcps/knowledge-skills/database-design.server.js +1 -1
  58. package/dist/mcps/knowledge-skills/devops-deployment.server.js +1 -1
  59. package/dist/mcps/knowledge-skills/git-workflow.server.js +1 -1
  60. package/dist/mcps/knowledge-skills/growth-strategist.server.js +1 -1
  61. package/dist/mcps/knowledge-skills/log-monitor.server.js +1 -1
  62. package/dist/mcps/knowledge-skills/mobile-development.server.js +1 -1
  63. package/dist/mcps/knowledge-skills/multimodal-looker.server.js +1 -1
  64. package/dist/mcps/knowledge-skills/performance-optimization.server.js +1 -1
  65. package/dist/mcps/knowledge-skills/project-analysis.server.js +1 -1
  66. package/dist/mcps/knowledge-skills/refactoring-strategies.server.js +1 -1
  67. package/dist/mcps/knowledge-skills/security-audit.server.js +1 -1
  68. package/dist/mcps/knowledge-skills/seo-consultant.server.js +1 -1
  69. package/dist/mcps/knowledge-skills/session-management.server.js +1 -1
  70. package/dist/mcps/knowledge-skills/skill-invocation.server.js +1 -1
  71. package/dist/mcps/knowledge-skills/strategist.server.js +1 -1
  72. package/dist/mcps/knowledge-skills/tech-writer.server.js +2 -2
  73. package/dist/mcps/knowledge-skills/testing-best-practices.server.js +1 -1
  74. package/dist/mcps/knowledge-skills/testing-strategy.server.js +1 -1
  75. package/dist/mcps/knowledge-skills/ui-ux-design.server.js +1 -1
  76. package/dist/mcps/lint.server.js +1 -1
  77. package/dist/mcps/model-health-check.server.js +1 -1
  78. package/dist/mcps/performance-analysis.server.js +1 -1
  79. package/dist/mcps/processor-pipeline.server.js +1 -1
  80. package/dist/mcps/registry.json +1 -1
  81. package/dist/mcps/researcher.server.js +1 -1
  82. package/dist/mcps/security-scan.server.js +1 -1
  83. package/dist/mcps/state-manager.server.js +1 -1
  84. package/dist/orchestrator/universal-registry-bridge.js +1 -1
  85. package/dist/skills/registry.json +1 -1
  86. package/package.json +1 -1
  87. 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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"}