stringray-ai 1.0.41 → 1.0.42
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/README.md +48 -0
- package/.opencode/oh-my-opencode.json +93 -0
- package/.opencode/package.json +6 -0
- package/opencode.json +112 -0
- package/package.json +4 -1
- package/scripts/postinstall.cjs +42 -20
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# StrRay Python Backend
|
|
2
|
+
|
|
3
|
+
The StrRay framework includes a Python backend located in `src/strray/` with the following components:
|
|
4
|
+
|
|
5
|
+
- **Core Agents**: Async agent coordination and state management
|
|
6
|
+
- **Configuration**: Dynamic model routing and settings management
|
|
7
|
+
- **AI Services**: Interface to various AI providers
|
|
8
|
+
- **Performance Monitoring**: Metrics collection and analysis
|
|
9
|
+
- **Security**: Input validation and access control
|
|
10
|
+
- **Orchestration**: Async delegation, progress persistence, conflict resolution
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
|
|
14
|
+
Install Python dependencies:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pip install -r src/requirements.txt
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
The Python backend is automatically integrated with the framework agents and provides the underlying AI coordination capabilities.
|
|
23
|
+
|
|
24
|
+
## Architecture
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
.opencode/src/strray/
|
|
28
|
+
├── core/
|
|
29
|
+
│ ├── agent.py # BaseAgent class with async capabilities
|
|
30
|
+
│ ├── context_loader.py # Context loading utilities
|
|
31
|
+
│ └── orchestration.py # Advanced coordination systems
|
|
32
|
+
├── config/
|
|
33
|
+
│ └── manager.py # Configuration management
|
|
34
|
+
├── ai/
|
|
35
|
+
│ └── service.py # AI service interfaces
|
|
36
|
+
├── performance/
|
|
37
|
+
│ └── monitor.py # Performance monitoring
|
|
38
|
+
└── security.py # Security utilities
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Integration with oh-my-opencode
|
|
42
|
+
|
|
43
|
+
The Python backend integrates seamlessly with the oh-my-opencode framework through:
|
|
44
|
+
|
|
45
|
+
- **MCP Servers**: Model Context Protocol for agent communication
|
|
46
|
+
- **Configuration Bridge**: Shared configuration management
|
|
47
|
+
- **Command Interface**: Shell script integration points
|
|
48
|
+
- **Logging Integration**: Automatic logging to REFACTORING_LOG.md
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.14.0",
|
|
3
|
+
"model": "opencode/grok-code",
|
|
4
|
+
|
|
5
|
+
"settings": {
|
|
6
|
+
"theme": "auto",
|
|
7
|
+
"maxConcurrentAgents": 5,
|
|
8
|
+
"multi_agent_orchestration": {
|
|
9
|
+
"enabled": true,
|
|
10
|
+
"max_concurrent_agents": 5,
|
|
11
|
+
"coordination_model": "async-multi-agent"
|
|
12
|
+
},
|
|
13
|
+
"relentlessExecution": true,
|
|
14
|
+
"errorTolerance": 0,
|
|
15
|
+
"performanceBudget": {
|
|
16
|
+
"bundleSizeKb": 2048,
|
|
17
|
+
"responseTimeMs": 2000,
|
|
18
|
+
"memoryUsageMb": 512
|
|
19
|
+
},
|
|
20
|
+
"security": {
|
|
21
|
+
"inputValidation": true,
|
|
22
|
+
"sanitizeData": true,
|
|
23
|
+
"auditLogging": true
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"hooks": {
|
|
27
|
+
"preCommit": ["lint", "test", "security-scan"],
|
|
28
|
+
"postCommit": ["deploy-preview"],
|
|
29
|
+
"onError": ["notify-team", "log-error"]
|
|
30
|
+
},
|
|
31
|
+
"integrations": {
|
|
32
|
+
"github": true,
|
|
33
|
+
"slack": false,
|
|
34
|
+
"datadog": false
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
"plugin": ["oh-my-opencode", "dist/plugin/plugins/stringray-codex-injection.js"],
|
|
38
|
+
"claude_code": {
|
|
39
|
+
"mcp": true,
|
|
40
|
+
"commands": true,
|
|
41
|
+
"skills": true,
|
|
42
|
+
"agents": true,
|
|
43
|
+
"hooks": true,
|
|
44
|
+
"plugins": true
|
|
45
|
+
},
|
|
46
|
+
"agent": {
|
|
47
|
+
"orchestrator": {
|
|
48
|
+
"model": "opencode/grok-code"
|
|
49
|
+
},
|
|
50
|
+
"enhanced-orchestrator": {
|
|
51
|
+
"model": "opencode/grok-code"
|
|
52
|
+
},
|
|
53
|
+
"enforcer": {
|
|
54
|
+
"model": "opencode/grok-code"
|
|
55
|
+
},
|
|
56
|
+
"architect": {
|
|
57
|
+
"model": "opencode/grok-code"
|
|
58
|
+
},
|
|
59
|
+
"test-architect": {
|
|
60
|
+
"model": "opencode/grok-code"
|
|
61
|
+
},
|
|
62
|
+
"bug-triage-specialist": {
|
|
63
|
+
"model": "opencode/grok-code"
|
|
64
|
+
},
|
|
65
|
+
"code-reviewer": {
|
|
66
|
+
"model": "opencode/grok-code"
|
|
67
|
+
},
|
|
68
|
+
"security-auditor": {
|
|
69
|
+
"model": "opencode/grok-code"
|
|
70
|
+
},
|
|
71
|
+
"refactorer": {
|
|
72
|
+
"model": "opencode/grok-code"
|
|
73
|
+
},
|
|
74
|
+
"librarian": {
|
|
75
|
+
"model": "opencode/grok-code"
|
|
76
|
+
},
|
|
77
|
+
"explore": {
|
|
78
|
+
"model": "opencode/grok-code"
|
|
79
|
+
},
|
|
80
|
+
"oracle": {
|
|
81
|
+
"model": "opencode/grok-code"
|
|
82
|
+
},
|
|
83
|
+
"frontend-ui-ux-engineer": {
|
|
84
|
+
"model": "opencode/grok-code"
|
|
85
|
+
},
|
|
86
|
+
"document-writer": {
|
|
87
|
+
"model": "opencode/grok-code"
|
|
88
|
+
},
|
|
89
|
+
"multimodal-looker": {
|
|
90
|
+
"model": "opencode/grok-code"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
package/opencode.json
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://opencode.ai/config.json",
|
|
3
|
+
"mcp": {
|
|
4
|
+
// Disable problematic default MCP servers
|
|
5
|
+
"context7": { "enabled": false },
|
|
6
|
+
"global-everything": { "enabled": false },
|
|
7
|
+
"global-filesystem": { "enabled": false },
|
|
8
|
+
"global-git": { "enabled": false },
|
|
9
|
+
"global-sqlite": { "enabled": false },
|
|
10
|
+
"grep_app": { "enabled": false },
|
|
11
|
+
// Enable our custom StrRay MCP servers
|
|
12
|
+
"orchestrator": {
|
|
13
|
+
"type": "local",
|
|
14
|
+
"command": ["node", "dist/mcps/orchestrator.server.js"],
|
|
15
|
+
"enabled": true
|
|
16
|
+
},
|
|
17
|
+
"enhanced-orchestrator": {
|
|
18
|
+
"type": "local",
|
|
19
|
+
"command": ["node", "dist/mcps/enhanced-orchestrator.server.js"],
|
|
20
|
+
"enabled": true
|
|
21
|
+
},
|
|
22
|
+
"enforcer": {
|
|
23
|
+
"type": "local",
|
|
24
|
+
"command": ["node", "dist/mcps/enforcer-tools.server.js"],
|
|
25
|
+
"enabled": true
|
|
26
|
+
},
|
|
27
|
+
"api-design": {
|
|
28
|
+
"type": "local",
|
|
29
|
+
"command": ["node", "dist/mcps/knowledge-skills/api-design.server.js"],
|
|
30
|
+
"enabled": true
|
|
31
|
+
},
|
|
32
|
+
"architecture-patterns": {
|
|
33
|
+
"type": "local",
|
|
34
|
+
"command": [
|
|
35
|
+
"node",
|
|
36
|
+
"dist/mcps/knowledge-skills/architecture-patterns.server.js"
|
|
37
|
+
],
|
|
38
|
+
"enabled": true
|
|
39
|
+
},
|
|
40
|
+
"git-workflow": {
|
|
41
|
+
"type": "local",
|
|
42
|
+
"command": ["node", "dist/mcps/knowledge-skills/git-workflow.server.js"],
|
|
43
|
+
"enabled": true
|
|
44
|
+
},
|
|
45
|
+
"performance-optimization": {
|
|
46
|
+
"type": "local",
|
|
47
|
+
"command": [
|
|
48
|
+
"node",
|
|
49
|
+
"dist/mcps/knowledge-skills/performance-optimization.server.js"
|
|
50
|
+
],
|
|
51
|
+
"enabled": true
|
|
52
|
+
},
|
|
53
|
+
"project-analysis": {
|
|
54
|
+
"type": "local",
|
|
55
|
+
"command": [
|
|
56
|
+
"node",
|
|
57
|
+
"dist/mcps/knowledge-skills/project-analysis.server.js"
|
|
58
|
+
],
|
|
59
|
+
"enabled": true
|
|
60
|
+
},
|
|
61
|
+
"testing-strategy": {
|
|
62
|
+
"type": "local",
|
|
63
|
+
"command": [
|
|
64
|
+
"node",
|
|
65
|
+
"dist/mcps/knowledge-skills/testing-strategy.server.js"
|
|
66
|
+
],
|
|
67
|
+
"enabled": true
|
|
68
|
+
},
|
|
69
|
+
"code-review": {
|
|
70
|
+
"type": "local",
|
|
71
|
+
"command": ["node", "dist/mcps/knowledge-skills/code-review.server.js"],
|
|
72
|
+
"enabled": true
|
|
73
|
+
},
|
|
74
|
+
"security-audit": {
|
|
75
|
+
"type": "local",
|
|
76
|
+
"command": [
|
|
77
|
+
"node",
|
|
78
|
+
"dist/mcps/knowledge-skills/security-audit.server.js"
|
|
79
|
+
],
|
|
80
|
+
"enabled": true
|
|
81
|
+
},
|
|
82
|
+
"ui-ux-design": {
|
|
83
|
+
"type": "local",
|
|
84
|
+
"command": ["node", "dist/mcps/knowledge-skills/ui-ux-design.server.js"],
|
|
85
|
+
"enabled": true
|
|
86
|
+
},
|
|
87
|
+
"refactoring-strategies": {
|
|
88
|
+
"type": "local",
|
|
89
|
+
"command": [
|
|
90
|
+
"node",
|
|
91
|
+
"dist/mcps/knowledge-skills/refactoring-strategies.server.js"
|
|
92
|
+
],
|
|
93
|
+
"enabled": true
|
|
94
|
+
},
|
|
95
|
+
"testing-best-practices": {
|
|
96
|
+
"type": "local",
|
|
97
|
+
"command": [
|
|
98
|
+
"node",
|
|
99
|
+
"dist/mcps/knowledge-skills/testing-best-practices.server.js"
|
|
100
|
+
],
|
|
101
|
+
"enabled": true
|
|
102
|
+
},
|
|
103
|
+
"librarian": {
|
|
104
|
+
"type": "local",
|
|
105
|
+
"command": [
|
|
106
|
+
"node",
|
|
107
|
+
"dist/plugin/mcps/knowledge-skills/project-analysis.server.js"
|
|
108
|
+
],
|
|
109
|
+
"enabled": true
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stringray-ai",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.42",
|
|
4
4
|
"description": "⚡ StringRay ⚡: Bulletproof AI orchestration with systematic error prevention. Zero dead ends. Ship clean, tested, optimized code — every time.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/plugin/index.js",
|
|
@@ -95,6 +95,9 @@
|
|
|
95
95
|
},
|
|
96
96
|
"files": [
|
|
97
97
|
".mcp.json",
|
|
98
|
+
"opencode.json",
|
|
99
|
+
".opencode/oh-my-opencode.json",
|
|
100
|
+
".opencode/package.json",
|
|
98
101
|
"dist/cli",
|
|
99
102
|
"dist/plugin",
|
|
100
103
|
"dist/mcps",
|
package/scripts/postinstall.cjs
CHANGED
|
@@ -8,35 +8,57 @@ const fs = require('fs');
|
|
|
8
8
|
const path = require('path');
|
|
9
9
|
const os = require('os');
|
|
10
10
|
|
|
11
|
-
//
|
|
11
|
+
// Configuration files to copy during installation
|
|
12
|
+
const configFiles = [
|
|
13
|
+
{ source: '.mcp.json', dest: '.mcp.json' },
|
|
14
|
+
{ source: 'opencode.json', dest: 'opencode.json' },
|
|
15
|
+
{ source: '.opencode/oh-my-opencode.json', dest: '.opencode/oh-my-opencode.json' },
|
|
16
|
+
{ source: '.opencode/package.json', dest: '.opencode/package.json' }
|
|
17
|
+
];
|
|
18
|
+
|
|
12
19
|
// Find the package root relative to this script
|
|
13
20
|
const packageRoot = path.join(__dirname, '..');
|
|
14
|
-
const mcpConfigSource = path.join(packageRoot, '.mcp.json');
|
|
15
|
-
const mcpConfigDest = path.join(process.cwd(), '.mcp.json');
|
|
16
21
|
|
|
17
22
|
console.log('Postinstall running...');
|
|
18
23
|
console.log('Script dir:', __dirname);
|
|
19
24
|
console.log('Package root:', packageRoot);
|
|
20
|
-
console.log('Source:', mcpConfigSource);
|
|
21
|
-
console.log('Destination:', mcpConfigDest);
|
|
22
|
-
console.log('Source exists:', fs.existsSync(mcpConfigSource));
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
// Copy all configuration files
|
|
27
|
+
configFiles.forEach(({ source: sourcePath, dest: destPath }) => {
|
|
28
|
+
const source = path.join(packageRoot, sourcePath);
|
|
29
|
+
const dest = path.join(process.cwd(), destPath);
|
|
30
|
+
|
|
31
|
+
console.log(`Copying ${sourcePath} -> ${destPath}`);
|
|
32
|
+
console.log('Source exists:', fs.existsSync(source));
|
|
33
|
+
|
|
34
|
+
try {
|
|
35
|
+
if (fs.existsSync(source)) {
|
|
36
|
+
// Ensure destination directory exists
|
|
37
|
+
const destDir = path.dirname(dest);
|
|
38
|
+
if (!fs.existsSync(destDir)) {
|
|
39
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
40
|
+
console.log(`Created directory: ${destDir}`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
fs.copyFileSync(source, dest);
|
|
44
|
+
console.log(`✅ ${sourcePath} installed`);
|
|
45
|
+
} else {
|
|
46
|
+
console.warn(`Warning: ${sourcePath} not found at ${source}`);
|
|
47
|
+
// Try alternative locations for installed package
|
|
48
|
+
const altSource = path.join(packageRoot, 'node_modules', 'stringray-ai', sourcePath);
|
|
49
|
+
if (fs.existsSync(altSource)) {
|
|
50
|
+
const destDir = path.dirname(dest);
|
|
51
|
+
if (!fs.existsSync(destDir)) {
|
|
52
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
53
|
+
}
|
|
54
|
+
fs.copyFileSync(altSource, dest);
|
|
55
|
+
console.log(`✅ ${sourcePath} installed (alt location)`);
|
|
56
|
+
}
|
|
35
57
|
}
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.warn(`Warning: Could not copy ${sourcePath}:`, error.message);
|
|
36
60
|
}
|
|
37
|
-
}
|
|
38
|
-
console.warn('Warning: Could not copy MCP config:', error.message);
|
|
39
|
-
}
|
|
61
|
+
});
|
|
40
62
|
|
|
41
63
|
// Create a marker file to prove the script ran
|
|
42
64
|
const markerPath = path.join(os.tmpdir(), 'stringray-postinstall-ran');
|