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,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw 0xRay Hooks Integration
|
|
3
|
+
*
|
|
4
|
+
* Integrates OpenClaw with 0xRay's tool.before and tool.after hooks
|
|
5
|
+
* to send tool execution events to OpenClaw Gateway.
|
|
6
|
+
*
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
* @since 2026-03-14
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* OpenClaw Hooks Manager
|
|
12
|
+
*/
|
|
13
|
+
export class OpenClawHooksManager {
|
|
14
|
+
client = null;
|
|
15
|
+
config;
|
|
16
|
+
initialized = false;
|
|
17
|
+
toolBeforeCallbacks = new Set();
|
|
18
|
+
toolAfterCallbacks = new Set();
|
|
19
|
+
logger;
|
|
20
|
+
// Offline event buffering
|
|
21
|
+
eventQueue = [];
|
|
22
|
+
maxQueueSize = 100;
|
|
23
|
+
isFlushing = false;
|
|
24
|
+
constructor(config) {
|
|
25
|
+
this.config = {
|
|
26
|
+
enabled: config.enabled ?? true,
|
|
27
|
+
toolBefore: config.toolBefore ?? true,
|
|
28
|
+
toolAfter: config.toolAfter ?? true,
|
|
29
|
+
includeArgs: config.includeArgs ?? true,
|
|
30
|
+
includeResult: config.includeResult ?? true,
|
|
31
|
+
...(config.toolFilter ? { toolFilter: config.toolFilter } : {}),
|
|
32
|
+
};
|
|
33
|
+
this.logger = console;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Set the OpenClaw client
|
|
37
|
+
*/
|
|
38
|
+
setClient(client) {
|
|
39
|
+
this.client = client;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Initialize hooks - registers with 0xRay's event system
|
|
43
|
+
*/
|
|
44
|
+
async initialize() {
|
|
45
|
+
if (this.initialized) {
|
|
46
|
+
this.logger.warn('[OpenClawHooks] Already initialized');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (!this.config.enabled) {
|
|
50
|
+
this.logger.info('[OpenClawHooks] Hooks disabled in configuration');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this.logger.info('[OpenClawHooks] Initializing 0xRay tool hooks...');
|
|
54
|
+
// Register with 0xRay's event system
|
|
55
|
+
// The integration should call registerToolBefore and registerToolAfter
|
|
56
|
+
// to connect to 0xRay's actual tool execution events
|
|
57
|
+
this.initialized = true;
|
|
58
|
+
this.logger.info('[OpenClawHooks] Hooks initialized successfully');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Register a callback for tool.before events
|
|
62
|
+
* Call this to connect to 0xRay's tool.before event system
|
|
63
|
+
*/
|
|
64
|
+
registerToolBefore(callback) {
|
|
65
|
+
this.toolBeforeCallbacks.add(callback);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Unregister a tool.before callback
|
|
69
|
+
*/
|
|
70
|
+
unregisterToolBefore(callback) {
|
|
71
|
+
this.toolBeforeCallbacks.delete(callback);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Register a callback for tool.after events
|
|
75
|
+
* Call this to connect to 0xRay's tool.after event system
|
|
76
|
+
*/
|
|
77
|
+
registerToolAfter(callback) {
|
|
78
|
+
this.toolAfterCallbacks.add(callback);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Unregister a tool.after callback
|
|
82
|
+
*/
|
|
83
|
+
unregisterToolAfter(callback) {
|
|
84
|
+
this.toolAfterCallbacks.delete(callback);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Handle tool.before event from 0xRay
|
|
88
|
+
*/
|
|
89
|
+
async onToolBefore(event) {
|
|
90
|
+
if (!this.config.enabled || !this.config.toolBefore) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
// Filter by tool name if configured
|
|
94
|
+
if (this.config.toolFilter && !this.config.toolFilter.includes(event.toolName)) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
const hookEvent = {
|
|
99
|
+
eventType: 'tool.before',
|
|
100
|
+
toolName: event.toolName,
|
|
101
|
+
toolId: event.toolId,
|
|
102
|
+
args: this.config.includeArgs ? event.args : {},
|
|
103
|
+
duration: event.duration,
|
|
104
|
+
timestamp: event.timestamp,
|
|
105
|
+
...(event.sessionId !== undefined ? { sessionId: event.sessionId } : {}),
|
|
106
|
+
...(event.agent !== undefined ? { agent: event.agent } : {}),
|
|
107
|
+
};
|
|
108
|
+
// Send to OpenClaw if connected, otherwise queue
|
|
109
|
+
if (this.client?.isConnected()) {
|
|
110
|
+
await this.client.sendRequest('event.tool.before', hookEvent);
|
|
111
|
+
// Try to flush any queued events
|
|
112
|
+
await this.flushEventQueue();
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// Queue event for later when connection is restored
|
|
116
|
+
this.queueEvent('tool.before', hookEvent);
|
|
117
|
+
}
|
|
118
|
+
// Also notify registered callbacks
|
|
119
|
+
for (const callback of this.toolBeforeCallbacks) {
|
|
120
|
+
try {
|
|
121
|
+
await callback(event);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
this.logger.error('[OpenClawHooks] Callback error in tool.before:', error);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
this.logger.debug(`[OpenClawHooks] tool.before: ${event.toolName}`);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
this.logger.error('[OpenClawHooks] Error handling tool.before:', error);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Handle tool.after event from 0xRay
|
|
135
|
+
*/
|
|
136
|
+
async onToolAfter(event) {
|
|
137
|
+
if (!this.config.enabled || !this.config.toolAfter) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// Filter by tool name if configured
|
|
141
|
+
if (this.config.toolFilter && !this.config.toolFilter.includes(event.toolName)) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
const hookEvent = {
|
|
146
|
+
eventType: 'tool.after',
|
|
147
|
+
toolName: event.toolName,
|
|
148
|
+
toolId: event.toolId,
|
|
149
|
+
args: this.config.includeArgs ? event.args : {},
|
|
150
|
+
result: this.config.includeResult ? event.result : undefined,
|
|
151
|
+
...(event.error ? { error: event.error } : {}),
|
|
152
|
+
success: !event.error,
|
|
153
|
+
duration: event.duration,
|
|
154
|
+
timestamp: event.timestamp,
|
|
155
|
+
...(event.sessionId !== undefined ? { sessionId: event.sessionId } : {}),
|
|
156
|
+
...(event.agent !== undefined ? { agent: event.agent } : {}),
|
|
157
|
+
};
|
|
158
|
+
// Send to OpenClaw if connected, otherwise queue
|
|
159
|
+
if (this.client?.isConnected()) {
|
|
160
|
+
await this.client.sendRequest('event.tool.after', hookEvent);
|
|
161
|
+
// Try to flush any queued events
|
|
162
|
+
await this.flushEventQueue();
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
// Queue event for later when connection is restored
|
|
166
|
+
this.queueEvent('tool.after', hookEvent);
|
|
167
|
+
}
|
|
168
|
+
// Also notify registered callbacks
|
|
169
|
+
for (const callback of this.toolAfterCallbacks) {
|
|
170
|
+
try {
|
|
171
|
+
await callback(event);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
this.logger.error('[OpenClawHooks] Callback error in tool.after:', error);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
this.logger.debug(`[OpenClawHooks] tool.after: ${event.toolName} (${event.error ? 'error' : 'success'})`);
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
this.logger.error('[OpenClawHooks] Error handling tool.after:', error);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Queue an event for later delivery when connection is restored
|
|
185
|
+
*/
|
|
186
|
+
queueEvent(type, event) {
|
|
187
|
+
if (this.eventQueue.length >= this.maxQueueSize) {
|
|
188
|
+
// Remove oldest event to make room
|
|
189
|
+
this.eventQueue.shift();
|
|
190
|
+
this.logger.warn('[OpenClawHooks] Event queue full, dropping oldest event');
|
|
191
|
+
}
|
|
192
|
+
this.eventQueue.push({ type, event });
|
|
193
|
+
this.logger.debug(`[OpenClawHooks] Queued ${type} event (queue size: ${this.eventQueue.length})`);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Flush queued events to OpenClaw Gateway
|
|
197
|
+
*/
|
|
198
|
+
async flushEventQueue() {
|
|
199
|
+
if (this.isFlushing || !this.client?.isConnected() || this.eventQueue.length === 0) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
this.isFlushing = true;
|
|
203
|
+
const queue = [...this.eventQueue];
|
|
204
|
+
this.eventQueue.length = 0;
|
|
205
|
+
try {
|
|
206
|
+
for (const item of queue) {
|
|
207
|
+
try {
|
|
208
|
+
if (item.type === 'tool.before') {
|
|
209
|
+
await this.client.sendRequest('event.tool.before', item.event);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
await this.client.sendRequest('event.tool.after', item.event);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
this.logger.error(`[OpenClawHooks] Failed to send queued ${item.type} event:`, error);
|
|
217
|
+
// Re-queue failed events
|
|
218
|
+
this.eventQueue.push(item);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
this.logger.info(`[OpenClawHooks] Flushed ${queue.length} queued events`);
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
this.isFlushing = false;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get the current queue size
|
|
229
|
+
*/
|
|
230
|
+
getQueueSize() {
|
|
231
|
+
return this.eventQueue.length;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Called when client reconnects - flush the event queue
|
|
235
|
+
*/
|
|
236
|
+
async handleReconnect() {
|
|
237
|
+
if (this.eventQueue.length > 0) {
|
|
238
|
+
this.logger.info(`[OpenClawHooks] Client reconnected, flushing ${this.eventQueue.length} queued events...`);
|
|
239
|
+
await this.flushEventQueue();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Shutdown hooks
|
|
244
|
+
*/
|
|
245
|
+
async shutdown() {
|
|
246
|
+
// Clear the event queue on shutdown
|
|
247
|
+
const queuedCount = this.eventQueue.length;
|
|
248
|
+
this.eventQueue.length = 0;
|
|
249
|
+
this.initialized = false;
|
|
250
|
+
this.client = null;
|
|
251
|
+
this.logger.info(`[OpenClawHooks] Hooks shutdown complete (${queuedCount} queued events dropped)`);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Check if hooks are initialized
|
|
255
|
+
*/
|
|
256
|
+
isInitialized() {
|
|
257
|
+
return this.initialized;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Update configuration
|
|
261
|
+
*/
|
|
262
|
+
updateConfig(config) {
|
|
263
|
+
this.config = {
|
|
264
|
+
...this.config,
|
|
265
|
+
...config,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Get current configuration
|
|
270
|
+
*/
|
|
271
|
+
getConfig() {
|
|
272
|
+
return { ...this.config };
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Factory function to create hooks manager
|
|
277
|
+
*/
|
|
278
|
+
export function createOpenClawHooksManager(config) {
|
|
279
|
+
return new OpenClawHooksManager(config);
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=strray-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strray-hooks.js","sourceRoot":"","sources":["../../../../src/integrations/openclaw/hooks/strray-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
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 type { OpenClawIntegrationConfig, IntegrationStatistics } from './types.js';
|
|
11
|
+
import { OpenClawClient } from './client.js';
|
|
12
|
+
import { StringRayAPIServer } from './api-server.js';
|
|
13
|
+
import { OpenClawHooksManager } from './hooks/strray-hooks.js';
|
|
14
|
+
import type { AgentInvoker } from './api-server.js';
|
|
15
|
+
/**
|
|
16
|
+
* Main OpenClaw Integration class
|
|
17
|
+
* Extends BaseIntegration for consistent lifecycle management
|
|
18
|
+
*/
|
|
19
|
+
export declare class OpenClawIntegration extends BaseIntegration {
|
|
20
|
+
private configLoader;
|
|
21
|
+
private client;
|
|
22
|
+
private apiServer;
|
|
23
|
+
private hooksManager;
|
|
24
|
+
private agentInvoker;
|
|
25
|
+
private mcpToolBeforeUnsubscribe;
|
|
26
|
+
private mcpToolAfterUnsubscribe;
|
|
27
|
+
constructor(configPath?: string);
|
|
28
|
+
/**
|
|
29
|
+
* Set the agent invoker for the API server
|
|
30
|
+
*/
|
|
31
|
+
setAgentInvoker(invoker: AgentInvoker): void;
|
|
32
|
+
/**
|
|
33
|
+
* Perform integration-specific initialization
|
|
34
|
+
* Called by BaseIntegration.initialize() after base setup
|
|
35
|
+
*/
|
|
36
|
+
protected performInitialization(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Wire OpenClaw hooks to MCPClient tool events
|
|
39
|
+
*/
|
|
40
|
+
private wireHooksToMCP;
|
|
41
|
+
/**
|
|
42
|
+
* Perform integration-specific shutdown
|
|
43
|
+
* Called by BaseIntegration.shutdown() for cleanup
|
|
44
|
+
*/
|
|
45
|
+
protected performShutdown(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Perform integration-specific health check
|
|
48
|
+
*/
|
|
49
|
+
protected performHealthCheck(): Promise<{
|
|
50
|
+
healthy: boolean;
|
|
51
|
+
message: string;
|
|
52
|
+
details?: Record<string, unknown>;
|
|
53
|
+
}>;
|
|
54
|
+
/**
|
|
55
|
+
* Get statistics including client, API server, and base stats
|
|
56
|
+
*/
|
|
57
|
+
getStatistics(): IntegrationStatistics;
|
|
58
|
+
/**
|
|
59
|
+
* Get the API server instance
|
|
60
|
+
*/
|
|
61
|
+
getAPIServer(): StringRayAPIServer | null;
|
|
62
|
+
/**
|
|
63
|
+
* Get the client instance
|
|
64
|
+
*/
|
|
65
|
+
getClient(): OpenClawClient | null;
|
|
66
|
+
/**
|
|
67
|
+
* Get the hooks manager
|
|
68
|
+
*/
|
|
69
|
+
getHooksManager(): OpenClawHooksManager | null;
|
|
70
|
+
/**
|
|
71
|
+
* Get OpenClaw-specific configuration
|
|
72
|
+
*/
|
|
73
|
+
getOpenClawConfig(): OpenClawIntegrationConfig;
|
|
74
|
+
/**
|
|
75
|
+
* Reload configuration
|
|
76
|
+
*/
|
|
77
|
+
reloadConfig(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Get the agent invoker
|
|
80
|
+
*/
|
|
81
|
+
getAgentInvoker(): AgentInvoker | null;
|
|
82
|
+
private getDefaultClientStats;
|
|
83
|
+
private getDefaultAPIServerStats;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Initialize the global integration
|
|
87
|
+
*/
|
|
88
|
+
export declare function initializeOpenClawIntegration(configPath?: string, agentInvoker?: AgentInvoker): Promise<OpenClawIntegration>;
|
|
89
|
+
/**
|
|
90
|
+
* Get the global integration
|
|
91
|
+
*/
|
|
92
|
+
export declare function getOpenClawIntegration(): OpenClawIntegration | null;
|
|
93
|
+
/**
|
|
94
|
+
* Shutdown the global integration
|
|
95
|
+
*/
|
|
96
|
+
export declare function shutdownOpenClawIntegration(): Promise<void>;
|
|
97
|
+
export * from './types.js';
|
|
98
|
+
export * from './config.js';
|
|
99
|
+
export * from './client.js';
|
|
100
|
+
export * from './api-server.js';
|
|
101
|
+
export { OpenClawHooksManager } from './hooks/strray-hooks.js';
|
|
102
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/openclaw/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACV,yBAAyB,EACzB,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,YAAY,CAA6B;IAGjD,OAAO,CAAC,wBAAwB,CAA6B;IAC7D,OAAO,CAAC,uBAAuB,CAA6B;gBAEhD,UAAU,CAAC,EAAE,MAAM;IAK/B;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAO5C;;;OAGG;cACa,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwEtD;;OAEG;YACW,cAAc;IA+C5B;;;OAGG;cACa,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BhD;;OAEG;cACa,kBAAkB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAwDvH;;OAEG;IACH,aAAa,IAAI,qBAAqB;IAQtC;;OAEG;IACH,YAAY,IAAI,kBAAkB,GAAG,IAAI;IAIzC;;OAEG;IACH,SAAS,IAAI,cAAc,GAAG,IAAI;IAIlC;;OAEG;IACH,eAAe,IAAI,oBAAoB,GAAG,IAAI;IAI9C;;OAEG;IACH,iBAAiB,IAAI,yBAAyB;IAI9C;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,wBAAwB;CAUjC;AAOD;;GAEG;AACH,wBAAsB,6BAA6B,CACjD,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAc9B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,GAAG,IAAI,CAEnE;AAED;;GAEG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAKjE;AAGD,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC"}
|