strray-ai 1.7.2 → 1.7.3
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/hooks/post-commit +152 -55
- package/.opencode/hooks/post-commit.backup +110 -174
- package/.opencode/hooks/post-push +47 -64
- package/.opencode/hooks/post-push.backup +34 -38
- package/.opencode/strray/features.json +3 -3
- package/.opencode/strray/routing-mappings.json +90 -34
- package/AGENTS.md +7 -2
- package/dist/analytics/anonymization-engine.d.ts +108 -0
- package/dist/analytics/anonymization-engine.d.ts.map +1 -0
- package/dist/analytics/anonymization-engine.js +352 -0
- package/dist/analytics/anonymization-engine.js.map +1 -0
- package/dist/analytics/consent-manager.d.ts +94 -0
- package/dist/analytics/consent-manager.d.ts.map +1 -0
- package/dist/analytics/consent-manager.js +257 -0
- package/dist/analytics/consent-manager.js.map +1 -0
- package/dist/analytics/emerging-pattern-detector.d.ts +68 -0
- package/dist/analytics/emerging-pattern-detector.d.ts.map +1 -0
- package/dist/analytics/emerging-pattern-detector.js +250 -0
- package/dist/analytics/emerging-pattern-detector.js.map +1 -0
- package/dist/analytics/pattern-learning-engine.d.ts +81 -0
- package/dist/analytics/pattern-learning-engine.d.ts.map +1 -0
- package/dist/analytics/pattern-learning-engine.js +262 -0
- package/dist/analytics/pattern-learning-engine.js.map +1 -0
- package/dist/analytics/pattern-performance-tracker.d.ts +89 -0
- package/dist/analytics/pattern-performance-tracker.d.ts.map +1 -0
- package/dist/analytics/pattern-performance-tracker.js +289 -0
- package/dist/analytics/pattern-performance-tracker.js.map +1 -0
- package/dist/analytics/prompt-pattern-analyzer.d.ts +100 -0
- package/dist/analytics/prompt-pattern-analyzer.d.ts.map +1 -0
- package/dist/analytics/prompt-pattern-analyzer.js +372 -0
- package/dist/analytics/prompt-pattern-analyzer.js.map +1 -0
- package/dist/analytics/routing-performance-analyzer.d.ts +102 -0
- package/dist/analytics/routing-performance-analyzer.d.ts.map +1 -0
- package/dist/analytics/routing-performance-analyzer.js +342 -0
- package/dist/analytics/routing-performance-analyzer.js.map +1 -0
- package/dist/analytics/routing-refiner.d.ts +105 -0
- package/dist/analytics/routing-refiner.d.ts.map +1 -0
- package/dist/analytics/routing-refiner.js +381 -0
- package/dist/analytics/routing-refiner.js.map +1 -0
- package/dist/cli/commands/analytics-disable.d.ts +10 -0
- package/dist/cli/commands/analytics-disable.d.ts.map +1 -0
- package/dist/cli/commands/analytics-disable.js +73 -0
- package/dist/cli/commands/analytics-disable.js.map +1 -0
- package/dist/cli/commands/analytics-enable-action.d.ts +9 -0
- package/dist/cli/commands/analytics-enable-action.d.ts.map +1 -0
- package/dist/cli/commands/analytics-enable-action.js +83 -0
- package/dist/cli/commands/analytics-enable-action.js.map +1 -0
- package/dist/cli/commands/analytics-preview.d.ts +10 -0
- package/dist/cli/commands/analytics-preview.d.ts.map +1 -0
- package/dist/cli/commands/analytics-preview.js +107 -0
- package/dist/cli/commands/analytics-preview.js.map +1 -0
- package/dist/cli/commands/analytics-status.d.ts +10 -0
- package/dist/cli/commands/analytics-status.d.ts.map +1 -0
- package/dist/cli/commands/analytics-status.js +68 -0
- package/dist/cli/commands/analytics-status.js.map +1 -0
- package/dist/cli/index.js +6 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/core/adaptive-kernel.d.ts +110 -0
- package/dist/core/adaptive-kernel.d.ts.map +1 -0
- package/dist/core/adaptive-kernel.js +193 -0
- package/dist/core/adaptive-kernel.js.map +1 -0
- package/dist/core/kernel-patterns.d.ts +105 -0
- package/dist/core/kernel-patterns.d.ts.map +1 -0
- package/dist/core/kernel-patterns.js +328 -0
- package/dist/core/kernel-patterns.js.map +1 -0
- package/dist/core/orchestrator.d.ts +1 -0
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +40 -11
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/delegation/agent-delegator.d.ts +1 -0
- package/dist/delegation/agent-delegator.d.ts.map +1 -1
- package/dist/delegation/agent-delegator.js +24 -2
- package/dist/delegation/agent-delegator.js.map +1 -1
- package/dist/delegation/task-skill-router.d.ts +269 -5
- package/dist/delegation/task-skill-router.d.ts.map +1 -1
- package/dist/delegation/task-skill-router.js +810 -23
- package/dist/delegation/task-skill-router.js.map +1 -1
- package/dist/postprocessor/PostProcessor.d.ts +10 -0
- package/dist/postprocessor/PostProcessor.d.ts.map +1 -1
- package/dist/postprocessor/PostProcessor.js +87 -17
- package/dist/postprocessor/PostProcessor.js.map +1 -1
- package/dist/processors/agents-md-validation-processor.d.ts +1 -0
- package/dist/processors/agents-md-validation-processor.d.ts.map +1 -1
- package/dist/processors/agents-md-validation-processor.js +34 -12
- package/dist/processors/agents-md-validation-processor.js.map +1 -1
- package/dist/processors/processor-manager.d.ts +7 -0
- package/dist/processors/processor-manager.d.ts.map +1 -1
- package/dist/processors/processor-manager.js +93 -0
- package/dist/processors/processor-manager.js.map +1 -1
- package/dist/processors/test-auto-creation-processor.d.ts.map +1 -1
- package/dist/processors/test-auto-creation-processor.js +52 -38
- package/dist/processors/test-auto-creation-processor.js.map +1 -1
- package/dist/scripts/analytics/daily-routing-analysis.d.ts +18 -0
- package/dist/scripts/analytics/daily-routing-analysis.d.ts.map +1 -0
- package/dist/scripts/analytics/daily-routing-analysis.js +268 -0
- package/dist/scripts/analytics/daily-routing-analysis.js.map +1 -0
- package/dist/scripts/analytics/index.d.ts +15 -0
- package/dist/scripts/analytics/index.d.ts.map +1 -0
- package/dist/scripts/analytics/index.js +17 -0
- package/dist/scripts/analytics/index.js.map +1 -0
- package/dist/scripts/test-p9.d.ts +15 -0
- package/dist/scripts/test-p9.d.ts.map +1 -0
- package/dist/scripts/test-p9.js +220 -0
- package/dist/scripts/test-p9.js.map +1 -0
- package/package.json +6 -2
- package/scripts/node/kernel-e2e-test.mjs +168 -0
- package/scripts/node/kernel-framework-test.mjs +127 -0
- package/scripts/node/kernel-live-test.mjs +147 -0
- package/scripts/node/kernel-real-framework-test.mjs +103 -0
- package/scripts/node/kernel-update.cjs +379 -0
- package/scripts/node/reflection-check.sh +245 -27
- package/scripts/node/test-simple-names-comprehensive.mjs +221 -0
- package/scripts/node/test-simple-names.mjs +39 -0
- package/dist/agents/documentation-writer.d.ts +0 -9
- package/dist/agents/documentation-writer.d.ts.map +0 -1
- package/dist/agents/documentation-writer.js +0 -85
- package/dist/agents/documentation-writer.js.map +0 -1
- package/dist/agents/explore.d.ts +0 -8
- package/dist/agents/explore.d.ts.map +0 -1
- package/dist/agents/explore.js +0 -55
- package/dist/agents/explore.js.map +0 -1
- package/dist/agents/librarian.d.ts +0 -3
- package/dist/agents/librarian.d.ts.map +0 -1
- package/dist/agents/librarian.js +0 -84
- package/dist/agents/librarian.js.map +0 -1
- package/dist/agents/marketing-expert.d.ts +0 -9
- package/dist/agents/marketing-expert.d.ts.map +0 -1
- package/dist/agents/marketing-expert.js +0 -112
- package/dist/agents/marketing-expert.js.map +0 -1
- package/dist/agents/oracle.d.ts +0 -8
- package/dist/agents/oracle.d.ts.map +0 -1
- package/dist/agents/oracle.js +0 -51
- package/dist/agents/oracle.js.map +0 -1
- package/dist/agents/seo-copywriter.d.ts +0 -10
- package/dist/agents/seo-copywriter.d.ts.map +0 -1
- package/dist/agents/seo-copywriter.js +0 -73
- package/dist/agents/seo-copywriter.js.map +0 -1
- package/dist/agents/seo-specialist.d.ts +0 -9
- package/dist/agents/seo-specialist.d.ts.map +0 -1
- package/dist/agents/seo-specialist.js +0 -54
- package/dist/agents/seo-specialist.js.map +0 -1
- package/dist/agents/test-architect.d.ts +0 -3
- package/dist/agents/test-architect.d.ts.map +0 -1
- package/dist/agents/test-architect.js +0 -96
- package/dist/agents/test-architect.js.map +0 -1
- package/dist/mcps/enhanced-orchestrator.server.d.ts +0 -14
- package/dist/mcps/enhanced-orchestrator.server.d.ts.map +0 -1
- package/dist/mcps/enhanced-orchestrator.server.js +0 -266
- package/dist/mcps/enhanced-orchestrator.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/analyzer.server.d.ts +0 -7
- package/dist/mcps/knowledge-skills/analyzer.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/analyzer.server.js +0 -282
- package/dist/mcps/knowledge-skills/analyzer.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/documentation-generation.server.d.ts +0 -48
- package/dist/mcps/knowledge-skills/documentation-generation.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/documentation-generation.server.js +0 -1238
- package/dist/mcps/knowledge-skills/documentation-generation.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/explore.server.d.ts +0 -21
- package/dist/mcps/knowledge-skills/explore.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/explore.server.js +0 -582
- package/dist/mcps/knowledge-skills/explore.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/marketing-expert.server.d.ts +0 -8
- package/dist/mcps/knowledge-skills/marketing-expert.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/marketing-expert.server.js +0 -356
- package/dist/mcps/knowledge-skills/marketing-expert.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/oracle.server.d.ts +0 -25
- package/dist/mcps/knowledge-skills/oracle.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/oracle.server.js +0 -569
- package/dist/mcps/knowledge-skills/oracle.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/seo-copywriter.server.d.ts +0 -8
- package/dist/mcps/knowledge-skills/seo-copywriter.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/seo-copywriter.server.js +0 -251
- package/dist/mcps/knowledge-skills/seo-copywriter.server.js.map +0 -1
- package/dist/mcps/knowledge-skills/seo-specialist.server.d.ts +0 -8
- package/dist/mcps/knowledge-skills/seo-specialist.server.d.ts.map +0 -1
- package/dist/mcps/knowledge-skills/seo-specialist.server.js +0 -211
- package/dist/mcps/knowledge-skills/seo-specialist.server.js.map +0 -1
- package/dist/mcps/librarian.server.d.ts +0 -17
- package/dist/mcps/librarian.server.d.ts.map +0 -1
- package/dist/mcps/librarian.server.js +0 -382
- package/dist/mcps/librarian.server.js.map +0 -1
- package/dist/optimization/performance-optimizer.d.ts +0 -179
- package/dist/optimization/performance-optimizer.d.ts.map +0 -1
- package/dist/optimization/performance-optimizer.js +0 -556
- package/dist/optimization/performance-optimizer.js.map +0 -1
- package/dist/utils/memory-pool.d.ts +0 -90
- package/dist/utils/memory-pool.d.ts.map +0 -1
- package/dist/utils/memory-pool.js +0 -245
- package/dist/utils/memory-pool.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
#
|
|
2
|
+
# StringRay Post-Processor post-push Hook
|
|
3
3
|
# Automatically triggers post-processor after post-push
|
|
4
4
|
|
|
5
5
|
# Get hook type from script name
|
|
@@ -46,25 +46,17 @@ fi
|
|
|
46
46
|
(
|
|
47
47
|
cd "$(dirname "$0")/../.." # Navigate to project root
|
|
48
48
|
|
|
49
|
-
# Find the
|
|
49
|
+
# Find the StringRay plugin in node_modules or current project (development)
|
|
50
50
|
STRRAY_PLUGIN=""
|
|
51
|
-
STRRAY_DIST=""
|
|
52
51
|
if [ -d "node_modules/strray-framework" ]; then
|
|
53
52
|
STRRAY_PLUGIN="node_modules/strray-framework"
|
|
54
|
-
STRRAY_DIST="node_modules/strray-framework/dist"
|
|
55
|
-
elif [ -d "node_modules/strray-ai" ]; then
|
|
56
|
-
STRRAY_PLUGIN="node_modules/strray-ai"
|
|
57
|
-
STRRAY_DIST="node_modules/strray-ai/dist"
|
|
58
53
|
elif [ -d "node_modules/@strray/strray-framework" ]; then
|
|
59
54
|
STRRAY_PLUGIN="node_modules/@strray/strray-framework"
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
STRRAY_PLUGIN="node_modules/oh-my-opencode/plugins/strray-framework"
|
|
63
|
-
STRRAY_DIST="node_modules/oh-my-opencode/plugins/strray-framework/dist"
|
|
55
|
+
elif [ -d "node_modules/OpenCode/plugins/strray-framework" ]; then
|
|
56
|
+
STRRAY_PLUGIN="node_modules/OpenCode/plugins/strray-framework"
|
|
64
57
|
elif [ -f "dist/postprocessor/PostProcessor.js" ]; then
|
|
65
58
|
# Development mode - use current project
|
|
66
59
|
STRRAY_PLUGIN="."
|
|
67
|
-
STRRAY_DIST="dist"
|
|
68
60
|
fi
|
|
69
61
|
|
|
70
62
|
if command -v node >/dev/null 2>&1 && [ -n "$STRRAY_PLUGIN" ]; then
|
|
@@ -74,7 +66,6 @@ fi
|
|
|
74
66
|
export BRANCH="$BRANCH"
|
|
75
67
|
export AUTHOR="$AUTHOR"
|
|
76
68
|
export STRRAY_PLUGIN="$STRRAY_PLUGIN"
|
|
77
|
-
export STRRAY_DIST="$STRRAY_DIST"
|
|
78
69
|
export MONITORING_LEVEL="$MONITORING_LEVEL"
|
|
79
70
|
export IS_FULL_MONITORING="$([ "$MONITORING_LEVEL" = "full" ] && echo "true" || echo "false")"
|
|
80
71
|
|
|
@@ -94,17 +85,17 @@ fi
|
|
|
94
85
|
const result = await validator.validate();
|
|
95
86
|
|
|
96
87
|
if (result.warnings.length > 0) {
|
|
97
|
-
|
|
98
|
-
result.warnings.forEach(w =>
|
|
88
|
+
await frameworkLogger.log('-git-hook-trigger', '-result-warnings-length-warning-s-found-', 'info', { message: '⚠️ ' + result.warnings.length + ' warning(s) found:' });
|
|
89
|
+
result.warnings.forEach(w => await frameworkLogger.log('-git-hook-trigger', '-w-', 'info', { message: ' ' + w) });
|
|
99
90
|
}
|
|
100
91
|
|
|
101
92
|
if (!result.passed) {
|
|
102
|
-
|
|
103
|
-
result.errors.forEach(e =>
|
|
93
|
+
await frameworkLogger.log('-git-hook-trigger', '-result-errors-length-error-s-found-', 'error', { message: '❌ ' + result.errors.length + ' error(s) found:' });
|
|
94
|
+
result.errors.forEach(e => await frameworkLogger.log('-git-hook-trigger', '-e-', 'info', { message: ' ' + e) });
|
|
104
95
|
process.exit(1);
|
|
105
96
|
}
|
|
106
97
|
|
|
107
|
-
|
|
98
|
+
await frameworkLogger.log('-git-hook-trigger', '-post-commit-validation-passed-in-result-duration-', 'success', { message: '✅ Post-commit: Validation passed in ' + result.duration + 'ms' });
|
|
108
99
|
} catch (error) {
|
|
109
100
|
console.error('❌ Post-commit validation failed:', error instanceof Error ? error.message : String(error));
|
|
110
101
|
process.exit(1);
|
|
@@ -117,56 +108,34 @@ fi
|
|
|
117
108
|
|
|
118
109
|
# Log metrics for monitoring (convert to milliseconds)
|
|
119
110
|
DURATION_MS=$((DURATION * 1000))
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
# Record metrics using metrics collector (direct import for reliability)
|
|
111
|
+
# LOG CLEANUP: Remove old log files after validation
|
|
112
|
+
# Use relative path from CWD - works in both dev and consumer
|
|
123
113
|
node -e "
|
|
124
114
|
(async () => {
|
|
125
115
|
try {
|
|
126
|
-
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
[ $EXIT_CODE -eq 0 ] && exit 0 || exit 1
|
|
136
|
-
else
|
|
137
|
-
# FULL MONITORING: Comprehensive analysis for post-push
|
|
138
|
-
# Timeout: 5 minutes max, comprehensive CI/CD validation
|
|
139
|
-
START_TIME=$(date +%s)
|
|
140
|
-
timeout 300 node -e "
|
|
141
|
-
(async () => {
|
|
142
|
-
try {
|
|
143
|
-
console.log('🚀 Post-push: Comprehensive validation initiated');
|
|
144
|
-
|
|
145
|
-
// Use PostProcessor from environment variable
|
|
146
|
-
const STRRAY_DIST = process.env.STRRAY_DIST || './dist';
|
|
147
|
-
const { PostProcessor } = await import(STRRAY_DIST + '/postprocessor/PostProcessor.js');
|
|
148
|
-
const { StrRayStateManager } = await import(STRRAY_DIST + '/state/state-manager.js');
|
|
149
|
-
|
|
150
|
-
const stateManager = new StrRayStateManager();
|
|
151
|
-
const postProcessor = new PostProcessor(stateManager, null, {
|
|
152
|
-
reporting: { enabled: true, autoGenerate: true, reportThreshold: 10 }
|
|
116
|
+
// Use dynamic import that works in both dev and consumer
|
|
117
|
+
const basePath = process.env.STRRAY_BASE_PATH || '.';
|
|
118
|
+
const { cleanupLogFiles } = await import(basePath + '/dist/postprocessor/triggers/GitHookTrigger.js');
|
|
119
|
+
const result = await cleanupLogFiles({
|
|
120
|
+
maxAgeHours: 24,
|
|
121
|
+
excludePatterns: ['logs/framework/activity.log', 'logs/agents/refactoring-log.md', 'current-session.log'],
|
|
122
|
+
directories: ['logs/'],
|
|
123
|
+
enabled: true
|
|
153
124
|
});
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
timestamp: Date.now()
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
await postProcessor.executePostProcessorLoop(context);
|
|
164
|
-
console.log('✅ Post-push: Comprehensive validation passed');
|
|
125
|
+
if (result.cleaned > 0) {
|
|
126
|
+
await frameworkLogger.log('-git-hook-trigger', '-cleaned-result-cleaned-old-log-files-', 'info', { message: `🧹 Cleaned ${result.cleaned} old log files` });
|
|
127
|
+
}
|
|
128
|
+
if (result.errors.length > 0) {
|
|
129
|
+
console.error('Log cleanup errors:', result.errors);
|
|
130
|
+
}
|
|
165
131
|
} catch (error) {
|
|
166
|
-
|
|
167
|
-
console.log('⚠️ Post-push: Validation skipped (' + (error instanceof Error ? error.message : 'error') + ')');
|
|
132
|
+
console.error('Log cleanup failed:', error.message);
|
|
168
133
|
}
|
|
169
134
|
})();
|
|
135
|
+
"
|
|
136
|
+
|
|
137
|
+
echo "HOOK_METRICS: post-commit duration=${DURATION_MS}ms exit_code=${EXIT_CODE}" >&2
|
|
138
|
+
collector.recordMetrics('post-commit', ${DURATION_MS}, ${EXIT_CODE});
|
|
170
139
|
" 2>/dev/null
|
|
171
140
|
EXIT_CODE=$?
|
|
172
141
|
END_TIME=$(date +%s)
|
|
@@ -176,12 +145,26 @@ fi
|
|
|
176
145
|
DURATION_MS=$((DURATION * 1000))
|
|
177
146
|
echo "HOOK_METRICS: post-push duration=${DURATION_MS}ms exit_code=${EXIT_CODE}" >&2
|
|
178
147
|
|
|
179
|
-
#
|
|
180
|
-
|
|
148
|
+
# Record metrics using metrics collector (direct import for reliability)
|
|
149
|
+
# Use environment variable for base path - works in both dev and consumer
|
|
150
|
+
node -e "
|
|
151
|
+
(async () => {
|
|
152
|
+
try {
|
|
153
|
+
const basePath = process.env.STRRAY_BASE_PATH || '.';
|
|
154
|
+
const distPath = process.env.STRRAY_DIST_PATH || 'dist';
|
|
155
|
+
const { HookMetricsCollector } = await import(basePath + '/' + distPath + '/postprocessor/validation/HookMetricsCollector.js');
|
|
156
|
+
const collector = new HookMetricsCollector();
|
|
157
|
+
collector.recordMetrics('post-push', ${DURATION_MS}, ${EXIT_CODE});
|
|
158
|
+
} catch (error) {
|
|
159
|
+
// Silently fail if metrics collection fails
|
|
160
|
+
}
|
|
161
|
+
})();
|
|
162
|
+
" 2>/dev/null || true
|
|
163
|
+
|
|
181
164
|
[ $EXIT_CODE -eq 0 ] && exit 0 || exit 1
|
|
182
165
|
fi
|
|
183
166
|
else
|
|
184
|
-
echo "Warning:
|
|
167
|
+
echo "Warning: StringRay plugin not found or Node.js not available, skipping post-processor"
|
|
185
168
|
fi
|
|
186
169
|
)
|
|
187
170
|
|
|
@@ -48,15 +48,23 @@ fi
|
|
|
48
48
|
|
|
49
49
|
# Find the StrRay plugin in node_modules or current project (development)
|
|
50
50
|
STRRAY_PLUGIN=""
|
|
51
|
+
STRRAY_DIST=""
|
|
51
52
|
if [ -d "node_modules/strray-framework" ]; then
|
|
52
53
|
STRRAY_PLUGIN="node_modules/strray-framework"
|
|
54
|
+
STRRAY_DIST="node_modules/strray-framework/dist"
|
|
55
|
+
elif [ -d "node_modules/strray-ai" ]; then
|
|
56
|
+
STRRAY_PLUGIN="node_modules/strray-ai"
|
|
57
|
+
STRRAY_DIST="node_modules/strray-ai/dist"
|
|
53
58
|
elif [ -d "node_modules/@strray/strray-framework" ]; then
|
|
54
59
|
STRRAY_PLUGIN="node_modules/@strray/strray-framework"
|
|
60
|
+
STRRAY_DIST="node_modules/@strray/strray-framework/dist"
|
|
55
61
|
elif [ -d "node_modules/oh-my-opencode/plugins/strray-framework" ]; then
|
|
56
62
|
STRRAY_PLUGIN="node_modules/oh-my-opencode/plugins/strray-framework"
|
|
63
|
+
STRRAY_DIST="node_modules/oh-my-opencode/plugins/strray-framework/dist"
|
|
57
64
|
elif [ -f "dist/postprocessor/PostProcessor.js" ]; then
|
|
58
65
|
# Development mode - use current project
|
|
59
66
|
STRRAY_PLUGIN="."
|
|
67
|
+
STRRAY_DIST="dist"
|
|
60
68
|
fi
|
|
61
69
|
|
|
62
70
|
if command -v node >/dev/null 2>&1 && [ -n "$STRRAY_PLUGIN" ]; then
|
|
@@ -66,6 +74,7 @@ fi
|
|
|
66
74
|
export BRANCH="$BRANCH"
|
|
67
75
|
export AUTHOR="$AUTHOR"
|
|
68
76
|
export STRRAY_PLUGIN="$STRRAY_PLUGIN"
|
|
77
|
+
export STRRAY_DIST="$STRRAY_DIST"
|
|
69
78
|
export MONITORING_LEVEL="$MONITORING_LEVEL"
|
|
70
79
|
export IS_FULL_MONITORING="$([ "$MONITORING_LEVEL" = "full" ] && echo "true" || echo "false")"
|
|
71
80
|
|
|
@@ -132,32 +141,30 @@ fi
|
|
|
132
141
|
(async () => {
|
|
133
142
|
try {
|
|
134
143
|
console.log('🚀 Post-push: Comprehensive validation initiated');
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
console.log('✅ Post-push: Comprehensive validation passed in ' + result.duration + 'ms');
|
|
144
|
+
|
|
145
|
+
// Use PostProcessor from environment variable
|
|
146
|
+
const STRRAY_DIST = process.env.STRRAY_DIST || './dist';
|
|
147
|
+
const { PostProcessor } = await import(STRRAY_DIST + '/postprocessor/PostProcessor.js');
|
|
148
|
+
const { StrRayStateManager } = await import(STRRAY_DIST + '/state/state-manager.js');
|
|
149
|
+
|
|
150
|
+
const stateManager = new StrRayStateManager();
|
|
151
|
+
const postProcessor = new PostProcessor(stateManager, null, {
|
|
152
|
+
reporting: { enabled: true, autoGenerate: true, reportThreshold: 10 }
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
// Run full post-processor loop
|
|
156
|
+
const context = {
|
|
157
|
+
commitSha: process.env.COMMIT_SHA || 'unknown',
|
|
158
|
+
branch: process.env.BRANCH || 'main',
|
|
159
|
+
files: [],
|
|
160
|
+
timestamp: Date.now()
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
await postProcessor.executePostProcessorLoop(context);
|
|
164
|
+
console.log('✅ Post-push: Comprehensive validation passed');
|
|
158
165
|
} catch (error) {
|
|
159
|
-
|
|
160
|
-
|
|
166
|
+
// Don't fail the push for validation errors
|
|
167
|
+
console.log('⚠️ Post-push: Validation skipped (' + (error instanceof Error ? error.message : 'error') + ')');
|
|
161
168
|
}
|
|
162
169
|
})();
|
|
163
170
|
" 2>/dev/null
|
|
@@ -169,19 +176,8 @@ fi
|
|
|
169
176
|
DURATION_MS=$((DURATION * 1000))
|
|
170
177
|
echo "HOOK_METRICS: post-push duration=${DURATION_MS}ms exit_code=${EXIT_CODE}" >&2
|
|
171
178
|
|
|
172
|
-
#
|
|
173
|
-
|
|
174
|
-
(async () => {
|
|
175
|
-
try {
|
|
176
|
-
const { HookMetricsCollector } = await import('./dist/postprocessor/validation/HookMetricsCollector.js');
|
|
177
|
-
const collector = new HookMetricsCollector();
|
|
178
|
-
collector.recordMetrics('post-push', ${DURATION_MS}, ${EXIT_CODE});
|
|
179
|
-
} catch (error) {
|
|
180
|
-
// Silently fail if metrics collection fails
|
|
181
|
-
}
|
|
182
|
-
})();
|
|
183
|
-
" 2>/dev/null || true
|
|
184
|
-
|
|
179
|
+
# Metrics collection - simplified, don't fail if unavailable
|
|
180
|
+
echo "✅ Post-push hook completed in ${DURATION}s"
|
|
185
181
|
[ $EXIT_CODE -eq 0 ] && exit 0 || exit 1
|
|
186
182
|
fi
|
|
187
183
|
else
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
}
|
|
15
15
|
},
|
|
16
16
|
"model_routing": {
|
|
17
|
-
"enabled":
|
|
17
|
+
"enabled": true
|
|
18
18
|
},
|
|
19
19
|
"batch_operations": {
|
|
20
20
|
"enabled": true,
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
"session_persistence": true
|
|
34
34
|
},
|
|
35
35
|
"autonomous_reporting": {
|
|
36
|
-
"enabled":
|
|
36
|
+
"enabled": true,
|
|
37
37
|
"interval_minutes": 60,
|
|
38
|
-
"auto_schedule":
|
|
38
|
+
"auto_schedule": true,
|
|
39
39
|
"include_health_assessment": true,
|
|
40
40
|
"include_agent_activities": true,
|
|
41
41
|
"include_pipeline_operations": true,
|
|
@@ -1,60 +1,116 @@
|
|
|
1
1
|
[
|
|
2
|
-
// ===== USER-FRIENDLY ALIASES =====
|
|
3
2
|
{
|
|
4
|
-
"keywords": ["
|
|
5
|
-
"skill": "
|
|
6
|
-
"agent": "
|
|
7
|
-
"confidence": 0.
|
|
3
|
+
"keywords": ["@architect", "system architect", "solution architect"],
|
|
4
|
+
"skill": "architecture-patterns",
|
|
5
|
+
"agent": "architect",
|
|
6
|
+
"confidence": 0.98
|
|
8
7
|
},
|
|
9
8
|
{
|
|
10
|
-
"keywords": ["
|
|
11
|
-
"skill": "
|
|
12
|
-
"agent": "
|
|
13
|
-
"confidence": 0.
|
|
9
|
+
"keywords": ["@code-reviewer", "code review"],
|
|
10
|
+
"skill": "code-review",
|
|
11
|
+
"agent": "code-reviewer",
|
|
12
|
+
"confidence": 0.98
|
|
14
13
|
},
|
|
15
14
|
{
|
|
16
|
-
"keywords": ["
|
|
17
|
-
"skill": "
|
|
18
|
-
"agent": "
|
|
19
|
-
"confidence": 0.
|
|
15
|
+
"keywords": ["@security-auditor", "security audit", "vulnerability scan"],
|
|
16
|
+
"skill": "security-audit",
|
|
17
|
+
"agent": "security-auditor",
|
|
18
|
+
"confidence": 0.98
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"keywords": ["@enforcer"],
|
|
22
|
+
"skill": "enforcer",
|
|
23
|
+
"agent": "enforcer",
|
|
24
|
+
"confidence": 0.98
|
|
20
25
|
},
|
|
21
26
|
{
|
|
22
|
-
"keywords": ["
|
|
27
|
+
"keywords": ["@orchestrator"],
|
|
28
|
+
"skill": "orchestrator",
|
|
29
|
+
"agent": "orchestrator",
|
|
30
|
+
"confidence": 0.98
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"keywords": ["@refactorer", "refactor code"],
|
|
34
|
+
"skill": "refactoring-strategies",
|
|
35
|
+
"agent": "refactorer",
|
|
36
|
+
"confidence": 0.98
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"keywords": ["@testing-lead", "test strategy"],
|
|
23
40
|
"skill": "testing-strategy",
|
|
24
41
|
"agent": "testing-lead",
|
|
25
|
-
"confidence": 0.
|
|
42
|
+
"confidence": 0.98
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"keywords": ["@bug-triage-specialist", "debug", "triage bug"],
|
|
46
|
+
"skill": "code-review",
|
|
47
|
+
"agent": "bug-triage-specialist",
|
|
48
|
+
"confidence": 0.98
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"keywords": ["@strategist", "planning", "roadmap"],
|
|
52
|
+
"skill": "strategist",
|
|
53
|
+
"agent": "strategist",
|
|
54
|
+
"confidence": 0.98
|
|
26
55
|
},
|
|
27
56
|
{
|
|
28
|
-
"keywords": ["
|
|
57
|
+
"keywords": ["@tech-writer", "documentation", "write docs"],
|
|
29
58
|
"skill": "documentation-generation",
|
|
30
59
|
"agent": "tech-writer",
|
|
31
|
-
"confidence": 0.
|
|
60
|
+
"confidence": 0.98
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"keywords": ["@researcher", "find code"],
|
|
64
|
+
"skill": "git-workflow",
|
|
65
|
+
"agent": "researcher",
|
|
66
|
+
"confidence": 0.98
|
|
32
67
|
},
|
|
33
|
-
// ===== LANGUAGES & FRAMEWORKS =====
|
|
34
68
|
{
|
|
35
|
-
"keywords": ["
|
|
36
|
-
"skill": "
|
|
69
|
+
"keywords": ["@performance-engineer", "optimize performance", "speed up"],
|
|
70
|
+
"skill": "performance-optimization",
|
|
37
71
|
"agent": "performance-engineer",
|
|
38
|
-
"confidence": 0.
|
|
72
|
+
"confidence": 0.98
|
|
39
73
|
},
|
|
40
74
|
{
|
|
41
|
-
"keywords": ["
|
|
42
|
-
"skill": "
|
|
43
|
-
"agent": "
|
|
75
|
+
"keywords": ["@database-engineer", "database schema", "sql", "migration"],
|
|
76
|
+
"skill": "database-design",
|
|
77
|
+
"agent": "database-engineer",
|
|
78
|
+
"confidence": 0.98
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"keywords": ["@devops-engineer", "deploy", "ci/cd", "docker"],
|
|
82
|
+
"skill": "devops-deployment",
|
|
83
|
+
"agent": "devops-engineer",
|
|
44
84
|
"confidence": 0.98
|
|
45
85
|
},
|
|
46
86
|
{
|
|
47
|
-
"keywords": ["
|
|
48
|
-
"skill": "
|
|
87
|
+
"keywords": ["@frontend-engineer", "frontend", "react", "vue"],
|
|
88
|
+
"skill": "frontend-development",
|
|
89
|
+
"agent": "frontend-engineer",
|
|
90
|
+
"confidence": 0.98
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"keywords": ["@backend-engineer", "backend", "api", "server"],
|
|
94
|
+
"skill": "backend-development",
|
|
49
95
|
"agent": "backend-engineer",
|
|
96
|
+
"confidence": 0.98
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"keywords": ["resolve merge conflict", "merge conflict"],
|
|
100
|
+
"skill": "git-workflow",
|
|
101
|
+
"agent": "researcher",
|
|
50
102
|
"confidence": 0.99
|
|
51
103
|
},
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
104
|
+
{
|
|
105
|
+
"keywords": ["improve application performance", "speed up application"],
|
|
106
|
+
"skill": "performance-optimization",
|
|
107
|
+
"agent": "mobile-developer",
|
|
108
|
+
"confidence": 0.99
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"keywords": ["design database schema", "query optimization"],
|
|
112
|
+
"skill": "database-design",
|
|
113
|
+
"agent": "database-engineer",
|
|
114
|
+
"confidence": 0.99
|
|
115
|
+
}
|
|
60
116
|
]
|
package/AGENTS.md
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# stringray - Project Agents Guide
|
|
2
2
|
|
|
3
|
-
**Last Updated**: 2026-03-
|
|
3
|
+
**Last Updated**: 2026-03-08
|
|
4
4
|
**Generated by**: StringRay AI Librarian
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
<!-- AUTO-GENERATED START -->
|
|
9
|
+
|
|
8
10
|
## Languages
|
|
9
11
|
- TypeScript
|
|
10
12
|
- JavaScript
|
|
@@ -46,5 +48,8 @@ StringRay has **two distinct plugin systems** - do NOT confuse them:
|
|
|
46
48
|
|---------------|----------|
|
|
47
49
|
| Extend StringRay with custom agents | `src/plugins/` |
|
|
48
50
|
| Inject codex into OpenCode | `.opencode/plugin/` |
|
|
51
|
+
|
|
52
|
+
<!-- AUTO-GENERATED END -->
|
|
49
53
|
---
|
|
50
|
-
|
|
54
|
+
|
|
55
|
+
*This AGENTS.md is auto-maintained by StringRay AI Librarian*
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anonymization Engine for StringRay Central Analytics
|
|
3
|
+
*
|
|
4
|
+
* Removes personally identifiable information and project-specific data
|
|
5
|
+
* while preserving learning value through pattern extraction.
|
|
6
|
+
*
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
* @since 2026-03-06
|
|
9
|
+
*/
|
|
10
|
+
export interface RawReflectionData {
|
|
11
|
+
projectName: string;
|
|
12
|
+
repositoryUrl: string;
|
|
13
|
+
reflection: string;
|
|
14
|
+
filePath: string;
|
|
15
|
+
author: string;
|
|
16
|
+
authorEmail: string;
|
|
17
|
+
code: string;
|
|
18
|
+
timestamp: Date;
|
|
19
|
+
ipAddress?: string;
|
|
20
|
+
apiKey?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface AnonymizedReflection {
|
|
23
|
+
submissionId: string;
|
|
24
|
+
metadata: {
|
|
25
|
+
submissionId: string;
|
|
26
|
+
frameworkVersion: string;
|
|
27
|
+
timestampRelative: number;
|
|
28
|
+
region: string | undefined;
|
|
29
|
+
};
|
|
30
|
+
content: {
|
|
31
|
+
taskType: string;
|
|
32
|
+
complexity: number;
|
|
33
|
+
routedAgent: string;
|
|
34
|
+
outcome: "success" | "failure";
|
|
35
|
+
duration: number;
|
|
36
|
+
confidence: number;
|
|
37
|
+
emotionalContext: {
|
|
38
|
+
struggleLevel: "none" | "low" | "medium" | "high" | "extreme";
|
|
39
|
+
frustrationIndicators: number;
|
|
40
|
+
hasCounterfactualAnalysis: boolean;
|
|
41
|
+
depthScore: number;
|
|
42
|
+
};
|
|
43
|
+
patterns: {
|
|
44
|
+
keywordsMatched: string[];
|
|
45
|
+
kernelPattern?: string | undefined;
|
|
46
|
+
successRate: number;
|
|
47
|
+
};
|
|
48
|
+
reflectionStructure: {
|
|
49
|
+
hasInnerDialogue: boolean;
|
|
50
|
+
hasCounterfactual: boolean;
|
|
51
|
+
hasMasterWisdom: boolean;
|
|
52
|
+
emotionalHonestyScore: number;
|
|
53
|
+
lengthCategory: "short" | "medium" | "long";
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export declare class AnonymizationEngine {
|
|
58
|
+
private frameworkVersion;
|
|
59
|
+
/**
|
|
60
|
+
* Anonymize raw reflection data
|
|
61
|
+
*/
|
|
62
|
+
anonymize(rawData: RawReflectionData): AnonymizedReflection;
|
|
63
|
+
/**
|
|
64
|
+
* Extract learning signals from raw data
|
|
65
|
+
*/
|
|
66
|
+
private extractLearningSignals;
|
|
67
|
+
/**
|
|
68
|
+
* Detect task type from reflection content
|
|
69
|
+
*/
|
|
70
|
+
private detectTaskType;
|
|
71
|
+
/**
|
|
72
|
+
* Estimate complexity from reflection content
|
|
73
|
+
*/
|
|
74
|
+
private estimateComplexity;
|
|
75
|
+
/**
|
|
76
|
+
* Detect agent from reflection content using keyword matching
|
|
77
|
+
*/
|
|
78
|
+
private extractAgentName;
|
|
79
|
+
/**
|
|
80
|
+
* Detect outcome from reflection
|
|
81
|
+
*/
|
|
82
|
+
private detectOutcome;
|
|
83
|
+
/**
|
|
84
|
+
* Extract emotional context indicators
|
|
85
|
+
*/
|
|
86
|
+
private extractEmotionalContext;
|
|
87
|
+
/**
|
|
88
|
+
* Extract patterns from reflection
|
|
89
|
+
*/
|
|
90
|
+
private extractPatterns;
|
|
91
|
+
/**
|
|
92
|
+
* Analyze reflection structure
|
|
93
|
+
*/
|
|
94
|
+
private analyzeReflectionStructure;
|
|
95
|
+
/**
|
|
96
|
+
* Standardize agent names
|
|
97
|
+
*/
|
|
98
|
+
private standardizeAgentName;
|
|
99
|
+
/**
|
|
100
|
+
* Anonymize timestamp to relative time
|
|
101
|
+
*/
|
|
102
|
+
private anonymizeTimestamp;
|
|
103
|
+
/**
|
|
104
|
+
* Anonymize region from IP address
|
|
105
|
+
*/
|
|
106
|
+
private anonymizeRegion;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=anonymization-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anonymization-engine.d.ts","sourceRoot":"","sources":["../../src/analytics/anonymization-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE;QACR,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;KAC5B,CAAC;IACF,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE;YAChB,aAAa,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;YAC9D,qBAAqB,EAAE,MAAM,CAAC;YAC9B,yBAAyB,EAAE,OAAO,CAAC;YACnC,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,QAAQ,EAAE;YACR,eAAe,EAAE,MAAM,EAAE,CAAC;YAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YACnC,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC;QACF,mBAAmB,EAAE;YACnB,gBAAgB,EAAE,OAAO,CAAC;YAC1B,iBAAiB,EAAE,OAAO,CAAC;YAC3B,eAAe,EAAE,OAAO,CAAC;YACzB,qBAAqB,EAAE,MAAM,CAAC;YAC9B,cAAc,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;SAC7C,CAAC;KACH,CAAC;CACH;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,gBAAgB,CAAW;IAEnC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,oBAAoB;IA+B3D;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyC9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwDxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA2C/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAmCvB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA+BlC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA8B5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,eAAe;CAiBxB"}
|