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
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.22.13",
2
+ "version": "1.22.22",
3
3
  "terms": [
4
4
  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60
5
5
  ],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "framework": "0xRay 1.0.0",
3
- "version": "1.22.13",
3
+ "version": "1.22.22",
4
4
  "description": "Codex-compliant framework configuration for Credible UI project",
5
5
  "thresholds": {
6
6
  "bundleSize": {
@@ -220,7 +220,7 @@
220
220
  }
221
221
  },
222
222
  "codex": {
223
- "version": "1.22.13",
223
+ "version": "1.22.22",
224
224
  "terms": [
225
225
  1,
226
226
  2,
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.22.13",
2
+ "version": "1.22.22",
3
3
  "description": "0xRay Skills Registry - recommended skill sources for consumers",
4
4
  "sources": [
5
5
  {
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.22.13",
2
+ "version": "1.22.22",
3
3
  "lastUpdated": "2026-03-09",
4
4
  "errorPreventionTarget": 0.996,
5
5
  "terms": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./config.schema.json",
3
- "version": "1.22.13",
3
+ "version": "1.22.22",
4
4
  "description": "0xRay Framework - Token Management & Performance Configuration",
5
5
 
6
6
  "token_management": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./features.schema.json",
3
- "version": "1.22.13",
3
+ "version": "1.22.22",
4
4
  "description": "0xRay Framework - Unified Feature Configuration",
5
5
  "token_optimization": {
6
6
  "enabled": true,
@@ -4,19 +4,19 @@
4
4
  "openclaw": {
5
5
  "enabled": false,
6
6
  "type": "external-service",
7
- "version": "1.22.13",
7
+ "version": "1.22.22",
8
8
  "config": {}
9
9
  },
10
10
  "python-bridge": {
11
11
  "enabled": false,
12
12
  "type": "protocol-bridge",
13
- "version": "1.22.13",
13
+ "version": "1.22.22",
14
14
  "config": {}
15
15
  },
16
16
  "react": {
17
17
  "enabled": false,
18
18
  "type": "framework-adapter",
19
- "version": "1.22.13",
19
+ "version": "1.22.22",
20
20
  "config": {}
21
21
  }
22
22
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.22.13",
2
+ "version": "1.22.22",
3
3
  "lastUpdated": "2026-03-09",
4
4
  "errorPreventionTarget": 0.996,
5
5
  "terms": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./config.schema.json",
3
- "version": "1.22.13",
3
+ "version": "1.22.22",
4
4
  "description": "0xRay Framework - Token Management & Performance Configuration",
5
5
 
6
6
  "token_management": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./features.schema.json",
3
- "version": "1.22.13",
3
+ "version": "1.22.22",
4
4
  "description": "0xRay Framework - Unified Feature Configuration",
5
5
  "token_optimization": {
6
6
  "enabled": true,
@@ -4,19 +4,19 @@
4
4
  "openclaw": {
5
5
  "enabled": false,
6
6
  "type": "external-service",
7
- "version": "1.22.13",
7
+ "version": "1.22.22",
8
8
  "config": {}
9
9
  },
10
10
  "python-bridge": {
11
11
  "enabled": false,
12
12
  "type": "protocol-bridge",
13
- "version": "1.22.13",
13
+ "version": "1.22.22",
14
14
  "config": {}
15
15
  },
16
16
  "react": {
17
17
  "enabled": false,
18
18
  "type": "framework-adapter",
19
- "version": "1.22.13",
19
+ "version": "1.22.22",
20
20
  "config": {}
21
21
  }
22
22
  }
package/dist/CHANGELOG.md CHANGED
@@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Conventional Commits](https://www.conventionalcommits.org/).
6
6
 
7
+ ## [1.22.23] - 2026-04-27
8
+
9
+ ### 🔄 Changes
10
+
11
+ ### 🔎 Other Changes
12
+ - release: v1.22.22 - OpenClaw TypeScript compilation fix, integration test scripts (3bcbb8969)
13
+
14
+ ---
15
+
16
+ ## [1.22.22] - 2026-04-27
17
+
18
+ ### 🔄 Changes
19
+
20
+ - Version bump
21
+
22
+ ---
23
+
7
24
  ## [1.22.20] - 2026-04-27
8
25
 
9
26
  ### 🔄 Changes
@@ -36,7 +36,7 @@ class RoutingRefiner {
36
36
  const optimizations = this.suggestMappingOptimizations(promptAnalysis, performanceReport);
37
37
  const warnings = this.generateWarnings(newMappings, optimizations);
38
38
  return {
39
- version: "1.22.13",
39
+ version: "1.22.22",
40
40
  generatedAt: new Date(),
41
41
  summary: {
42
42
  newMappings: newMappings.length,
@@ -731,7 +731,7 @@ export class BootOrchestrator {
731
731
  try {
732
732
  // Load 0xRay configuration directly (no Python dependency)
733
733
  const stringRayConfig = {
734
- version: "1.22.13",
734
+ version: "1.22.22",
735
735
  codex_enabled: true,
736
736
  codex_version: "v1.7.5",
737
737
  codex_terms: [
@@ -286,7 +286,7 @@ export class FeaturesConfigLoader {
286
286
  */
287
287
  getDefaultConfig() {
288
288
  return {
289
- version: "1.22.13",
289
+ version: "1.22.22",
290
290
  description: "0xRay Framework - Unified Feature Configuration",
291
291
  token_optimization: {
292
292
  enabled: true,
package/dist/index.d.ts CHANGED
@@ -11,6 +11,8 @@ export { frameworkLogger } from "./core/framework-logger.js";
11
11
  export { BUILTIN_CODEX } from "./core/codex-formatter.js";
12
12
  import { defaultStringRayConfig } from "./core/index.js";
13
13
  export { defaultStringRayConfig };
14
+ export { OpenClawIntegration, initializeOpenClawIntegration, getOpenClawIntegration, shutdownOpenClawIntegration } from "./integrations/openclaw/index.js";
15
+ export type { OpenClawIntegrationConfig } from "./integrations/openclaw/types.js";
14
16
  export declare function initializeStringRay(config?: {}): {
15
17
  success: boolean;
16
18
  config: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAGlC,wBAAgB,mBAAmB,CAAC,MAAM,KAAK;;;;;;;;;;;;EAS9C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAElC,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC3J,YAAY,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAGlF,wBAAgB,mBAAmB,CAAC,MAAM,KAAK;;;;;;;;;;;;EAS9C"}
package/dist/index.js CHANGED
@@ -11,6 +11,7 @@ export { frameworkLogger } from "./core/framework-logger.js";
11
11
  export { BUILTIN_CODEX } from "./core/codex-formatter.js";
12
12
  import { defaultStringRayConfig } from "./core/index.js";
13
13
  export { defaultStringRayConfig };
14
+ export { OpenClawIntegration, initializeOpenClawIntegration, getOpenClawIntegration, shutdownOpenClawIntegration } from "./integrations/openclaw/index.js";
14
15
  // Main initialization function
15
16
  export function initializeStringRay(config = {}) {
16
17
  const mergedConfig = { ...defaultStringRayConfig, ...config };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAElC,+BAA+B;AAC/B,MAAM,UAAU,mBAAmB,CAAC,MAAM,GAAG,EAAE;IAC7C,MAAM,YAAY,GAAG,EAAE,GAAG,sBAAsB,EAAE,GAAG,MAAM,EAAE,CAAC;IAE9D,8CAA8C;IAC9C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,0CAA0C;KACpD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAElC,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAG3J,+BAA+B;AAC/B,MAAM,UAAU,mBAAmB,CAAC,MAAM,GAAG,EAAE;IAC7C,MAAM,YAAY,GAAG,EAAE,GAAG,sBAAsB,EAAE,GAAG,MAAM,EAAE,CAAC;IAE9D,8CAA8C;IAC9C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,0CAA0C;KACpD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * 0xRay API Server
3
+ *
4
+ * HTTP API server that OpenClaw skills call to invoke 0xRay capabilities.
5
+ * This is the bridge between OpenClaw skills and 0xRay.
6
+ *
7
+ * @version 1.0.0
8
+ * @since 2026-03-14
9
+ */
10
+ import { StringRayAPIServerConfig, AgentInvokeRequest, AgentInvokeResponse, APIServerStatistics } from './types.js';
11
+ /**
12
+ * Agent invoker interface - implemented by 0xRay
13
+ */
14
+ export interface AgentInvoker {
15
+ invoke(request: AgentInvokeRequest): Promise<AgentInvokeResponse>;
16
+ getStatus?(): Promise<{
17
+ healthy: boolean;
18
+ version: string;
19
+ }>;
20
+ }
21
+ /**
22
+ * 0xRay API Server
23
+ */
24
+ export declare class StringRayAPIServer {
25
+ private server;
26
+ private config;
27
+ private agentInvoker;
28
+ private apiKey;
29
+ private stats;
30
+ private responseTimes;
31
+ private logger;
32
+ constructor(config: StringRayAPIServerConfig);
33
+ /**
34
+ * Set the agent invoker
35
+ */
36
+ setAgentInvoker(invoker: AgentInvoker): void;
37
+ /**
38
+ * Start the API server
39
+ */
40
+ start(): Promise<void>;
41
+ /**
42
+ * Stop the API server
43
+ */
44
+ stop(): Promise<void>;
45
+ /**
46
+ * Check if server is running
47
+ */
48
+ isRunning(): boolean;
49
+ /**
50
+ * Get server statistics
51
+ */
52
+ getStats(): APIServerStatistics;
53
+ /**
54
+ * Handle incoming HTTP request
55
+ */
56
+ private handleRequest;
57
+ /**
58
+ * Handle health check request
59
+ */
60
+ private handleHealth;
61
+ /**
62
+ * Handle agent invoke request
63
+ */
64
+ private handleAgentInvoke;
65
+ /**
66
+ * Handle agent status request
67
+ */
68
+ private handleAgentStatus;
69
+ /**
70
+ * Validate API key using constant-time comparison to prevent timing attacks
71
+ */
72
+ private validateApiKey;
73
+ /**
74
+ * Read request body
75
+ */
76
+ private readBody;
77
+ /**
78
+ * Send JSON response
79
+ */
80
+ private sendResponse;
81
+ }
82
+ /**
83
+ * Factory function to create API server
84
+ */
85
+ export declare function createStringRayAPIServer(config: StringRayAPIServerConfig): StringRayAPIServer;
86
+ //# sourceMappingURL=api-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-server.d.ts","sourceRoot":"","sources":["../../../src/integrations/openclaw/api-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EAEnB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClE,SAAS,CAAC,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9D;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,KAAK,CAOX;IACF,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAU;gBAEZ,MAAM,EAAE,wBAAwB;IAe5C;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAI5C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI,mBAAmB;IAa/B;;OAEG;YACW,aAAa;IA6G3B;;OAEG;YACW,YAAY;IAuB1B;;OAEG;YACW,iBAAiB;IAmB/B;;OAEG;YACW,iBAAiB;IA6B/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAgBhB;;OAEG;IACH,OAAO,CAAC,YAAY;CAUrB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,wBAAwB,GAAG,kBAAkB,CAE7F"}
@@ -0,0 +1,339 @@
1
+ /**
2
+ * 0xRay API Server
3
+ *
4
+ * HTTP API server that OpenClaw skills call to invoke 0xRay capabilities.
5
+ * This is the bridge between OpenClaw skills and 0xRay.
6
+ *
7
+ * @version 1.0.0
8
+ * @since 2026-03-14
9
+ */
10
+ import * as crypto from 'crypto';
11
+ import * as http from 'http';
12
+ /**
13
+ * 0xRay API Server
14
+ */
15
+ export class StringRayAPIServer {
16
+ server = null;
17
+ config;
18
+ agentInvoker = null;
19
+ apiKey = '';
20
+ stats = {
21
+ startedAt: 0,
22
+ requestsTotal: 0,
23
+ requestsByEndpoint: {},
24
+ requestsByStatus: {},
25
+ averageResponseTime: 0,
26
+ errors: 0,
27
+ };
28
+ responseTimes = [];
29
+ logger;
30
+ constructor(config) {
31
+ this.config = {
32
+ port: config.port || 18431,
33
+ host: config.host || '127.0.0.1',
34
+ apiKey: config.apiKey || '',
35
+ cors: config.cors ?? false,
36
+ rateLimit: config.rateLimit || {
37
+ windowMs: 60000,
38
+ maxRequests: 100,
39
+ },
40
+ };
41
+ this.logger = console;
42
+ }
43
+ /**
44
+ * Set the agent invoker
45
+ */
46
+ setAgentInvoker(invoker) {
47
+ this.agentInvoker = invoker;
48
+ }
49
+ /**
50
+ * Start the API server
51
+ */
52
+ async start() {
53
+ if (this.server) {
54
+ this.logger.warn('[StringRayAPIServer] Server already running');
55
+ return;
56
+ }
57
+ return new Promise((resolve, reject) => {
58
+ this.server = http.createServer((req, res) => {
59
+ this.handleRequest(req, res);
60
+ });
61
+ this.server.on('error', (error) => {
62
+ this.logger.error('[StringRayAPIServer] Server error:', error);
63
+ this.stats.errors++;
64
+ reject(error);
65
+ });
66
+ this.server.listen(this.config.port, this.config.host, () => {
67
+ this.stats.startedAt = Date.now();
68
+ this.logger.info(`[StringRayAPIServer] Listening on http://${this.config.host}:${this.config.port}`);
69
+ resolve();
70
+ });
71
+ });
72
+ }
73
+ /**
74
+ * Stop the API server
75
+ */
76
+ async stop() {
77
+ return new Promise((resolve) => {
78
+ if (this.server) {
79
+ this.server.close(() => {
80
+ this.logger.info('[StringRayAPIServer] Server stopped');
81
+ this.server = null;
82
+ resolve();
83
+ });
84
+ }
85
+ else {
86
+ resolve();
87
+ }
88
+ });
89
+ }
90
+ /**
91
+ * Check if server is running
92
+ */
93
+ isRunning() {
94
+ return this.server !== null;
95
+ }
96
+ /**
97
+ * Get server statistics
98
+ */
99
+ getStats() {
100
+ // Calculate average response time
101
+ if (this.responseTimes.length > 0) {
102
+ const total = this.responseTimes.reduce((a, b) => a + b, 0);
103
+ this.stats.averageResponseTime = total / this.responseTimes.length;
104
+ }
105
+ return { ...this.stats };
106
+ }
107
+ // =========================================================================
108
+ // Private Methods
109
+ // =========================================================================
110
+ /**
111
+ * Handle incoming HTTP request
112
+ */
113
+ async handleRequest(req, res) {
114
+ const startTime = Date.now();
115
+ const url = new URL(req.url || '/', `http://${this.config.host}:${this.config.port}`);
116
+ const method = req.method || 'GET';
117
+ const endpoint = `${method} ${url.pathname}`;
118
+ this.stats.requestsTotal++;
119
+ this.stats.requestsByEndpoint[endpoint] = (this.stats.requestsByEndpoint[endpoint] || 0) + 1;
120
+ // Set CORS headers if enabled
121
+ if (this.config.cors) {
122
+ // Security: When an API key is configured, restrict CORS to localhost only
123
+ // to prevent cross-origin attacks where a malicious site could make
124
+ // authenticated requests using the API key from a victim's browser.
125
+ if (this.config.apiKey) {
126
+ this.logger.warn('[StringRayAPIServer] Security: API key is set with CORS enabled. ' +
127
+ 'Restricting Access-Control-Allow-Origin to localhost only. ' +
128
+ 'Configure explicit allowed origins if cross-origin access is needed.');
129
+ const origin = req.headers.origin;
130
+ if (origin && ['http://localhost', 'http://127.0.0.1', 'http://localhost:3000',
131
+ 'http://127.0.0.1:3000', 'http://localhost:5173', 'http://127.0.0.1:5173'].includes(origin)) {
132
+ res.setHeader('Access-Control-Allow-Origin', origin);
133
+ }
134
+ else {
135
+ res.setHeader('Access-Control-Allow-Origin', 'http://127.0.0.1');
136
+ }
137
+ }
138
+ else {
139
+ res.setHeader('Access-Control-Allow-Origin', '*');
140
+ }
141
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
142
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
143
+ }
144
+ // Handle OPTIONS preflight
145
+ if (method === 'OPTIONS') {
146
+ this.sendResponse(res, 204, null);
147
+ return;
148
+ }
149
+ // Check API key for non-health endpoints
150
+ if (url.pathname !== '/health' && this.config.apiKey) {
151
+ const authHeader = req.headers.authorization;
152
+ if (!this.validateApiKey(authHeader)) {
153
+ this.sendResponse(res, 401, { error: 'Unauthorized - Invalid or missing API key' });
154
+ return;
155
+ }
156
+ }
157
+ try {
158
+ let body = '';
159
+ if (method === 'POST' || method === 'PUT') {
160
+ body = await this.readBody(req);
161
+ }
162
+ // Route request
163
+ let result;
164
+ switch (url.pathname) {
165
+ case '/health':
166
+ result = await this.handleHealth();
167
+ this.sendResponse(res, 200, result);
168
+ break;
169
+ case '/api/agent/invoke':
170
+ if (method !== 'POST') {
171
+ this.sendResponse(res, 405, { error: 'Method not allowed - Use POST' });
172
+ return;
173
+ }
174
+ result = await this.handleAgentInvoke(JSON.parse(body));
175
+ this.sendResponse(res, 200, result);
176
+ break;
177
+ case '/api/agent/status':
178
+ result = await this.handleAgentStatus();
179
+ this.sendResponse(res, 200, result);
180
+ break;
181
+ case '/stats':
182
+ result = this.getStats();
183
+ this.sendResponse(res, 200, result);
184
+ break;
185
+ default:
186
+ this.sendResponse(res, 404, { error: 'Not found' });
187
+ }
188
+ }
189
+ catch (error) {
190
+ this.logger.error(`[StringRayAPIServer] Error handling request:`, error);
191
+ this.stats.errors++;
192
+ const errorMessage = error instanceof Error ? error.message : 'Internal server error';
193
+ this.sendResponse(res, 500, { error: errorMessage });
194
+ }
195
+ finally {
196
+ // Track response time
197
+ const responseTime = Date.now() - startTime;
198
+ this.responseTimes.push(responseTime);
199
+ // Keep only last 1000 response times
200
+ if (this.responseTimes.length > 1000) {
201
+ this.responseTimes.shift();
202
+ }
203
+ // Track status code
204
+ const statusCode = res.statusCode || 500;
205
+ this.stats.requestsByStatus[statusCode] = (this.stats.requestsByStatus[statusCode] || 0) + 1;
206
+ }
207
+ }
208
+ /**
209
+ * Handle health check request
210
+ */
211
+ async handleHealth() {
212
+ let agentStatus = 'unhealthy';
213
+ if (this.agentInvoker?.getStatus) {
214
+ try {
215
+ const status = await this.agentInvoker.getStatus();
216
+ agentStatus = status.healthy ? 'healthy' : 'degraded';
217
+ }
218
+ catch {
219
+ agentStatus = 'unhealthy';
220
+ }
221
+ }
222
+ return {
223
+ status: agentStatus,
224
+ version: '1.0.0',
225
+ uptime: this.stats.startedAt ? Date.now() - this.stats.startedAt : 0,
226
+ openclaw: {
227
+ connected: false,
228
+ state: 'disconnected',
229
+ },
230
+ };
231
+ }
232
+ /**
233
+ * Handle agent invoke request
234
+ */
235
+ async handleAgentInvoke(request) {
236
+ if (!this.agentInvoker) {
237
+ return {
238
+ success: false,
239
+ error: 'Agent invoker not configured',
240
+ };
241
+ }
242
+ try {
243
+ const result = await this.agentInvoker.invoke(request);
244
+ return result;
245
+ }
246
+ catch (error) {
247
+ return {
248
+ success: false,
249
+ error: error instanceof Error ? error.message : 'Unknown error',
250
+ };
251
+ }
252
+ }
253
+ /**
254
+ * Handle agent status request
255
+ */
256
+ async handleAgentStatus() {
257
+ if (!this.agentInvoker) {
258
+ return {
259
+ healthy: false,
260
+ message: 'Agent invoker not configured',
261
+ };
262
+ }
263
+ if (this.agentInvoker.getStatus) {
264
+ try {
265
+ const status = await this.agentInvoker.getStatus();
266
+ return {
267
+ healthy: status.healthy,
268
+ message: `Agent running version ${status.version}`,
269
+ };
270
+ }
271
+ catch {
272
+ return {
273
+ healthy: false,
274
+ message: 'Agent check failed',
275
+ };
276
+ }
277
+ }
278
+ return {
279
+ healthy: true,
280
+ message: 'Agent invoker configured',
281
+ };
282
+ }
283
+ /**
284
+ * Validate API key using constant-time comparison to prevent timing attacks
285
+ */
286
+ validateApiKey(authHeader) {
287
+ if (!authHeader) {
288
+ return false;
289
+ }
290
+ const expectedKey = this.config.apiKey;
291
+ const providedKey = authHeader.startsWith('Bearer ')
292
+ ? authHeader.slice(7)
293
+ : authHeader;
294
+ // Length mismatch check: return false immediately (length is not secret),
295
+ // but this does not leak information about the key content.
296
+ if (providedKey.length !== expectedKey.length) {
297
+ return false;
298
+ }
299
+ // Use timing-safe comparison for the actual key content
300
+ const expectedBuf = Buffer.from(expectedKey, 'utf-8');
301
+ const providedBuf = Buffer.from(providedKey, 'utf-8');
302
+ return crypto.timingSafeEqual(expectedBuf, providedBuf);
303
+ }
304
+ /**
305
+ * Read request body
306
+ */
307
+ readBody(req) {
308
+ return new Promise((resolve, reject) => {
309
+ let body = '';
310
+ req.on('data', (chunk) => {
311
+ body += chunk;
312
+ });
313
+ req.on('end', () => {
314
+ resolve(body);
315
+ });
316
+ req.on('error', reject);
317
+ });
318
+ }
319
+ /**
320
+ * Send JSON response
321
+ */
322
+ sendResponse(res, statusCode, data) {
323
+ res.statusCode = statusCode;
324
+ res.setHeader('Content-Type', 'application/json');
325
+ if (data !== null) {
326
+ res.end(JSON.stringify(data));
327
+ }
328
+ else {
329
+ res.end();
330
+ }
331
+ }
332
+ }
333
+ /**
334
+ * Factory function to create API server
335
+ */
336
+ export function createStringRayAPIServer(config) {
337
+ return new StringRayAPIServer(config);
338
+ }
339
+ //# sourceMappingURL=api-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-server.js","sourceRoot":"","sources":["../../../src/integrations/openclaw/api-server.ts"],"names":[],"mappings":"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"}