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
|
@@ -0,0 +1,352 @@
|
|
|
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
|
+
import * as crypto from "crypto";
|
|
11
|
+
export class AnonymizationEngine {
|
|
12
|
+
frameworkVersion = "1.7.2";
|
|
13
|
+
/**
|
|
14
|
+
* Anonymize raw reflection data
|
|
15
|
+
*/
|
|
16
|
+
anonymize(rawData) {
|
|
17
|
+
const submissionId = crypto.randomUUID();
|
|
18
|
+
// Extract learning signals before removing sensitive data
|
|
19
|
+
const learningSignals = this.extractLearningSignals(rawData);
|
|
20
|
+
// Build anonymized reflection
|
|
21
|
+
const anonymized = {
|
|
22
|
+
submissionId,
|
|
23
|
+
metadata: {
|
|
24
|
+
submissionId,
|
|
25
|
+
frameworkVersion: this.frameworkVersion,
|
|
26
|
+
timestampRelative: this.anonymizeTimestamp(rawData.timestamp),
|
|
27
|
+
region: this.anonymizeRegion(rawData.ipAddress) || undefined
|
|
28
|
+
},
|
|
29
|
+
content: {
|
|
30
|
+
taskType: learningSignals.taskType,
|
|
31
|
+
complexity: learningSignals.complexity,
|
|
32
|
+
routedAgent: this.standardizeAgentName(learningSignals.routedAgent),
|
|
33
|
+
outcome: learningSignals.outcome,
|
|
34
|
+
duration: learningSignals.duration,
|
|
35
|
+
confidence: learningSignals.confidence,
|
|
36
|
+
emotionalContext: learningSignals.emotionalContext,
|
|
37
|
+
patterns: learningSignals.patterns,
|
|
38
|
+
reflectionStructure: learningSignals.reflectionStructure
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
return anonymized;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Extract learning signals from raw data
|
|
45
|
+
*/
|
|
46
|
+
extractLearningSignals(rawData) {
|
|
47
|
+
// Determine task type from content
|
|
48
|
+
const taskType = this.detectTaskType(rawData.reflection);
|
|
49
|
+
// Estimate complexity (simplified version)
|
|
50
|
+
const complexity = this.estimateComplexity(rawData.reflection);
|
|
51
|
+
// Extract agent name
|
|
52
|
+
const routedAgent = this.extractAgentName(rawData.reflection);
|
|
53
|
+
// Determine outcome
|
|
54
|
+
const outcome = this.detectOutcome(rawData.reflection);
|
|
55
|
+
// Estimate duration (default to 0 if not available)
|
|
56
|
+
const duration = 0; // Would be extracted from logs in real implementation
|
|
57
|
+
// Estimate confidence (default to 0.5 if not available)
|
|
58
|
+
const confidence = 0.5; // Would be extracted from routing in real implementation
|
|
59
|
+
// Extract emotional context
|
|
60
|
+
const emotionalContext = this.extractEmotionalContext(rawData.reflection);
|
|
61
|
+
// Extract patterns
|
|
62
|
+
const patterns = this.extractPatterns(rawData.reflection);
|
|
63
|
+
// Analyze reflection structure
|
|
64
|
+
const reflectionStructure = this.analyzeReflectionStructure(rawData.reflection);
|
|
65
|
+
return {
|
|
66
|
+
taskType,
|
|
67
|
+
complexity,
|
|
68
|
+
routedAgent,
|
|
69
|
+
outcome,
|
|
70
|
+
duration,
|
|
71
|
+
confidence,
|
|
72
|
+
emotionalContext,
|
|
73
|
+
patterns,
|
|
74
|
+
reflectionStructure
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Detect task type from reflection content
|
|
79
|
+
*/
|
|
80
|
+
detectTaskType(reflection) {
|
|
81
|
+
const lowerReflection = reflection.toLowerCase();
|
|
82
|
+
if (lowerReflection.includes("bug") || lowerReflection.includes("fix") || lowerReflection.includes("debug")) {
|
|
83
|
+
return "bug_fix";
|
|
84
|
+
}
|
|
85
|
+
if (lowerReflection.includes("implement") || lowerReflection.includes("feature") || lowerReflection.includes("add")) {
|
|
86
|
+
return "feature_implementation";
|
|
87
|
+
}
|
|
88
|
+
if (lowerReflection.includes("test") || lowerReflection.includes("spec")) {
|
|
89
|
+
return "testing";
|
|
90
|
+
}
|
|
91
|
+
if (lowerReflection.includes("deploy") || lowerReflection.includes("release")) {
|
|
92
|
+
return "deployment";
|
|
93
|
+
}
|
|
94
|
+
if (lowerReflection.includes("refactor") || lowerReflection.includes("optimize")) {
|
|
95
|
+
return "refactoring";
|
|
96
|
+
}
|
|
97
|
+
return "general_task";
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Estimate complexity from reflection content
|
|
101
|
+
*/
|
|
102
|
+
estimateComplexity(reflection) {
|
|
103
|
+
// Simplified complexity estimation based on length and content
|
|
104
|
+
const length = reflection.length;
|
|
105
|
+
const hasKeywords = [
|
|
106
|
+
"complex", "difficult", "challenge", "struggle",
|
|
107
|
+
"multiple", "several", "various"
|
|
108
|
+
].some(keyword => reflection.toLowerCase().includes(keyword));
|
|
109
|
+
let complexity = 50; // Base complexity
|
|
110
|
+
// Adjust based on length
|
|
111
|
+
if (length > 500)
|
|
112
|
+
complexity += 10;
|
|
113
|
+
if (length > 1000)
|
|
114
|
+
complexity += 15;
|
|
115
|
+
// Adjust based on keywords
|
|
116
|
+
if (hasKeywords)
|
|
117
|
+
complexity += 20;
|
|
118
|
+
// Normalize to 1-100 range
|
|
119
|
+
return Math.min(100, Math.max(1, complexity));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Detect agent from reflection content using keyword matching
|
|
123
|
+
*/
|
|
124
|
+
extractAgentName(reflection) {
|
|
125
|
+
const lowerReflection = reflection.toLowerCase();
|
|
126
|
+
// First, check for direct agent mentions (highest priority)
|
|
127
|
+
const directAgentMentions = [
|
|
128
|
+
"enforcer", "orchestrator", "architect", "security-auditor",
|
|
129
|
+
"code-reviewer", "refactorer", "testing-lead", "bug-triage-specialist",
|
|
130
|
+
"researcher", "strategist", "frontend-engineer", "backend-engineer"
|
|
131
|
+
];
|
|
132
|
+
for (const agent of directAgentMentions) {
|
|
133
|
+
if (lowerReflection.includes(agent)) {
|
|
134
|
+
return agent;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Then check for keyword matches
|
|
138
|
+
const keywordAgents = {
|
|
139
|
+
"bug": "bug-triage-specialist",
|
|
140
|
+
"fix": "bug-triage-specialist",
|
|
141
|
+
"debug": "bug-triage-specialist",
|
|
142
|
+
"triage": "bug-triage-specialist",
|
|
143
|
+
"issue": "enforcer",
|
|
144
|
+
"problem": "enforcer",
|
|
145
|
+
"error": "enforcer",
|
|
146
|
+
"security": "security-auditor",
|
|
147
|
+
"vulnerab": "security-auditor",
|
|
148
|
+
"audit": "security-auditor",
|
|
149
|
+
"refactor": "refactorer",
|
|
150
|
+
"optimize": "refactorer",
|
|
151
|
+
"review": "code-reviewer",
|
|
152
|
+
"architect": "architect",
|
|
153
|
+
"design": "architect",
|
|
154
|
+
"test": "testing-lead",
|
|
155
|
+
"testing": "testing-lead",
|
|
156
|
+
"orchestrat": "orchestrator",
|
|
157
|
+
"coordinate": "orchestrator",
|
|
158
|
+
"enforce": "enforcer",
|
|
159
|
+
"validat": "enforcer",
|
|
160
|
+
"quality": "enforcer",
|
|
161
|
+
"strateg": "strategist",
|
|
162
|
+
"plan": "strategist",
|
|
163
|
+
"research": "researcher",
|
|
164
|
+
"find": "researcher",
|
|
165
|
+
"search": "researcher"
|
|
166
|
+
};
|
|
167
|
+
for (const [keyword, agent] of Object.entries(keywordAgents)) {
|
|
168
|
+
if (lowerReflection.includes(keyword)) {
|
|
169
|
+
return agent;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return "unknown";
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Detect outcome from reflection
|
|
176
|
+
*/
|
|
177
|
+
detectOutcome(reflection) {
|
|
178
|
+
const lowerReflection = reflection.toLowerCase();
|
|
179
|
+
const failureIndicators = ["failed", "error", "bug", "crash", "timeout"];
|
|
180
|
+
const successIndicators = ["succeeded", "completed", "finished", "resolved", "fixed"];
|
|
181
|
+
const hasFailure = failureIndicators.some(indicator => lowerReflection.includes(indicator));
|
|
182
|
+
const hasSuccess = successIndicators.some(indicator => lowerReflection.includes(indicator));
|
|
183
|
+
if (hasFailure && !hasSuccess) {
|
|
184
|
+
return "failure";
|
|
185
|
+
}
|
|
186
|
+
return "success";
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Extract emotional context indicators
|
|
190
|
+
*/
|
|
191
|
+
extractEmotionalContext(reflection) {
|
|
192
|
+
const lowerReflection = reflection.toLowerCase();
|
|
193
|
+
// Detect struggle level
|
|
194
|
+
const highStruggle = ["extremely", "very difficult", "struggled", "challenging"];
|
|
195
|
+
const mediumStruggle = ["difficult", "complex", "complicated"];
|
|
196
|
+
const lowStruggle = ["minor", "simple", "easy"];
|
|
197
|
+
let struggleLevel = "none";
|
|
198
|
+
if (highStruggle.some(word => lowerReflection.includes(word))) {
|
|
199
|
+
struggleLevel = "extreme";
|
|
200
|
+
}
|
|
201
|
+
else if (mediumStruggle.some(word => lowerReflection.includes(word))) {
|
|
202
|
+
struggleLevel = "high";
|
|
203
|
+
}
|
|
204
|
+
else if (lowStruggle.some(word => lowerReflection.includes(word))) {
|
|
205
|
+
struggleLevel = "medium";
|
|
206
|
+
}
|
|
207
|
+
// Count frustration indicators
|
|
208
|
+
const frustrationWords = ["frustrated", "stuck", "blocked", "confused", "unclear"];
|
|
209
|
+
const frustrationIndicators = frustrationWords.filter(word => lowerReflection.includes(word)).length;
|
|
210
|
+
// Detect counterfactual analysis
|
|
211
|
+
const counterfactualIndicators = [
|
|
212
|
+
"would have", "if i had", "what if", "could have", "should have",
|
|
213
|
+
"counterfactual", "hypothetical", "alternative"
|
|
214
|
+
];
|
|
215
|
+
const hasCounterfactualAnalysis = counterfactualIndicators.some(word => lowerReflection.includes(word));
|
|
216
|
+
// Estimate depth score (simplified)
|
|
217
|
+
const depthIndicators = [
|
|
218
|
+
"inner dialogue", "counterfactual", "master's wisdom",
|
|
219
|
+
"personal journey", "deep lessons", "root cause"
|
|
220
|
+
];
|
|
221
|
+
const depthScore = Math.min(5, depthIndicators.filter(word => lowerReflection.includes(word)).length);
|
|
222
|
+
return {
|
|
223
|
+
struggleLevel,
|
|
224
|
+
frustrationIndicators,
|
|
225
|
+
hasCounterfactualAnalysis,
|
|
226
|
+
depthScore
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Extract patterns from reflection
|
|
231
|
+
*/
|
|
232
|
+
extractPatterns(reflection) {
|
|
233
|
+
const lowerReflection = reflection.toLowerCase();
|
|
234
|
+
// Extract keywords
|
|
235
|
+
const keywords = [];
|
|
236
|
+
const possibleKeywords = [
|
|
237
|
+
"bug", "fix", "debug", "error", "issue",
|
|
238
|
+
"feature", "implement", "add", "create",
|
|
239
|
+
"test", "spec", "verify", "validate",
|
|
240
|
+
"deploy", "release", "publish", "ship",
|
|
241
|
+
"refactor", "optimize", "improve", "enhance"
|
|
242
|
+
];
|
|
243
|
+
possibleKeywords.forEach(keyword => {
|
|
244
|
+
if (lowerReflection.includes(keyword)) {
|
|
245
|
+
keywords.push(keyword);
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
// Detect kernel pattern (simplified)
|
|
249
|
+
let kernelPattern;
|
|
250
|
+
if (keywords.includes("critical") && keywords.includes("path")) {
|
|
251
|
+
kernelPattern = "P1-critical-path-violation";
|
|
252
|
+
}
|
|
253
|
+
// Estimate success rate (would be calculated from historical data in real implementation)
|
|
254
|
+
const successRate = 0.85; // Default estimate
|
|
255
|
+
return {
|
|
256
|
+
keywordsMatched: keywords,
|
|
257
|
+
kernelPattern,
|
|
258
|
+
successRate
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Analyze reflection structure
|
|
263
|
+
*/
|
|
264
|
+
analyzeReflectionStructure(reflection) {
|
|
265
|
+
const lowerReflection = reflection.toLowerCase();
|
|
266
|
+
const hasInnerDialogue = lowerReflection.includes("inner dialogue") ||
|
|
267
|
+
lowerReflection.includes("what i was thinking");
|
|
268
|
+
const hasCounterfactual = lowerReflection.includes("counterfactual") ||
|
|
269
|
+
lowerReflection.includes("would have happened");
|
|
270
|
+
const hasMasterWisdom = lowerReflection.includes("master") ||
|
|
271
|
+
lowerReflection.includes("what they knew");
|
|
272
|
+
// Estimate emotional honesty (simplified)
|
|
273
|
+
const emotionalWords = ["frustrated", "struggled", "stuck", "confused",
|
|
274
|
+
"uncertain", "worried", "anxious", "relieved"];
|
|
275
|
+
const emotionalHonestyScore = Math.min(5, emotionalWords.filter(word => lowerReflection.includes(word)).length);
|
|
276
|
+
// Categorize length
|
|
277
|
+
const lengthCategory = reflection.length < 500 ? "short" :
|
|
278
|
+
reflection.length < 1000 ? "medium" : "long";
|
|
279
|
+
return {
|
|
280
|
+
hasInnerDialogue,
|
|
281
|
+
hasCounterfactual,
|
|
282
|
+
hasMasterWisdom,
|
|
283
|
+
emotionalHonestyScore,
|
|
284
|
+
lengthCategory
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Standardize agent names
|
|
289
|
+
*/
|
|
290
|
+
standardizeAgentName(agent) {
|
|
291
|
+
// If agent is already a valid agent name, return it as-is
|
|
292
|
+
const validAgents = [
|
|
293
|
+
"enforcer", "orchestrator", "architect", "security-auditor",
|
|
294
|
+
"code-reviewer", "refactorer", "testing-lead", "bug-triage-specialist",
|
|
295
|
+
"researcher", "strategist", "frontend-engineer", "backend-engineer"
|
|
296
|
+
];
|
|
297
|
+
if (validAgents.includes(agent)) {
|
|
298
|
+
return agent;
|
|
299
|
+
}
|
|
300
|
+
const standardNames = {
|
|
301
|
+
"enforcer": "enforcer",
|
|
302
|
+
"orchestrator": "orchestrator",
|
|
303
|
+
"architect": "architect",
|
|
304
|
+
"security": "security-auditor",
|
|
305
|
+
"auditor": "security-auditor",
|
|
306
|
+
"code": "code-reviewer",
|
|
307
|
+
"reviewer": "code-reviewer",
|
|
308
|
+
"refactor": "refactorer",
|
|
309
|
+
"testing": "testing-lead",
|
|
310
|
+
"test": "testing-lead",
|
|
311
|
+
"bug": "bug-triage-specialist",
|
|
312
|
+
"triage": "bug-triage-specialist",
|
|
313
|
+
"research": "researcher"
|
|
314
|
+
};
|
|
315
|
+
return standardNames[agent] || "unknown";
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Anonymize timestamp to relative time
|
|
319
|
+
*/
|
|
320
|
+
anonymizeTimestamp(timestamp) {
|
|
321
|
+
const now = new Date();
|
|
322
|
+
const diffMs = now.getTime() - timestamp.getTime();
|
|
323
|
+
const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
|
|
324
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
325
|
+
if (diffDays > 0) {
|
|
326
|
+
return diffDays;
|
|
327
|
+
}
|
|
328
|
+
return diffHours;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Anonymize region from IP address
|
|
332
|
+
*/
|
|
333
|
+
anonymizeRegion(ipAddress) {
|
|
334
|
+
if (!ipAddress) {
|
|
335
|
+
return undefined;
|
|
336
|
+
}
|
|
337
|
+
// Extract rough region (simplified - real implementation would use GeoIP)
|
|
338
|
+
// This is just a placeholder for demonstration
|
|
339
|
+
const ipParts = ipAddress.split('.');
|
|
340
|
+
if (ipParts.length >= 2) {
|
|
341
|
+
const firstOctet = parseInt(ipParts[0]);
|
|
342
|
+
if (firstOctet >= 1 && firstOctet <= 126)
|
|
343
|
+
return "NA"; // North America
|
|
344
|
+
if (firstOctet >= 128 && firstOctet <= 191)
|
|
345
|
+
return "ASIA"; // Asia
|
|
346
|
+
if (firstOctet >= 192 && firstOctet <= 223)
|
|
347
|
+
return "EU"; // Europe
|
|
348
|
+
}
|
|
349
|
+
return undefined;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=anonymization-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anonymization-engine.js","sourceRoot":"","sources":["../../src/analytics/anonymization-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consent Manager for StringRay Central Analytics
|
|
3
|
+
*
|
|
4
|
+
* Manages user consent for analytics data submission with granular
|
|
5
|
+
* control over what categories can be shared.
|
|
6
|
+
*
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
* @since 2026-03-06
|
|
9
|
+
*/
|
|
10
|
+
export interface ConsentConfiguration {
|
|
11
|
+
analyticsEnabled: boolean;
|
|
12
|
+
consentDate: Date;
|
|
13
|
+
consentVersion: string;
|
|
14
|
+
lastOptOut: Date | undefined;
|
|
15
|
+
categories: {
|
|
16
|
+
reflections: boolean;
|
|
17
|
+
logs: boolean;
|
|
18
|
+
metrics: boolean;
|
|
19
|
+
patterns: boolean;
|
|
20
|
+
};
|
|
21
|
+
projectId: string;
|
|
22
|
+
}
|
|
23
|
+
export interface ConsentCategory {
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
enabled: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare class ConsentManager {
|
|
29
|
+
private configPath;
|
|
30
|
+
private config;
|
|
31
|
+
private submissionQueue;
|
|
32
|
+
constructor(configPath?: string);
|
|
33
|
+
/**
|
|
34
|
+
* Initialize consent manager - load existing config or create default
|
|
35
|
+
*/
|
|
36
|
+
initialize(): Promise<ConsentConfiguration>;
|
|
37
|
+
/**
|
|
38
|
+
* Enable analytics (opt-in)
|
|
39
|
+
*/
|
|
40
|
+
enableConsent(categories?: string[]): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Disable analytics (opt-out)
|
|
43
|
+
*/
|
|
44
|
+
disableConsent(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Check if submission is allowed for a category
|
|
47
|
+
*/
|
|
48
|
+
canSubmit(category: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Get current consent status
|
|
51
|
+
*/
|
|
52
|
+
getStatus(): Promise<ConsentConfiguration>;
|
|
53
|
+
/**
|
|
54
|
+
* Enable specific category
|
|
55
|
+
*/
|
|
56
|
+
enableCategory(category: string): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Disable specific category
|
|
59
|
+
*/
|
|
60
|
+
disableCategory(category: string): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Get all categories with their status
|
|
63
|
+
*/
|
|
64
|
+
getCategories(): ConsentCategory[];
|
|
65
|
+
/**
|
|
66
|
+
* Generate anonymous project ID
|
|
67
|
+
*/
|
|
68
|
+
private generateProjectId;
|
|
69
|
+
/**
|
|
70
|
+
* Create default disabled configuration
|
|
71
|
+
*/
|
|
72
|
+
private createDefaultConfig;
|
|
73
|
+
/**
|
|
74
|
+
* Load configuration from file
|
|
75
|
+
*/
|
|
76
|
+
private loadConfig;
|
|
77
|
+
/**
|
|
78
|
+
* Save configuration to file
|
|
79
|
+
*/
|
|
80
|
+
private saveConfig;
|
|
81
|
+
/**
|
|
82
|
+
* Clear submission queue
|
|
83
|
+
*/
|
|
84
|
+
private clearSubmissionQueue;
|
|
85
|
+
/**
|
|
86
|
+
* Add item to submission queue
|
|
87
|
+
*/
|
|
88
|
+
queueSubmission(data: any): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Save submission queue to file
|
|
91
|
+
*/
|
|
92
|
+
private saveSubmissionQueue;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=consent-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consent-manager.d.ts","sourceRoot":"","sources":["../../src/analytics/consent-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,IAAI,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,IAAI,GAAG,SAAS,CAAC;IAC7B,UAAU,EAAE;QACV,WAAW,EAAE,OAAO,CAAC;QACrB,IAAI,EAAE,OAAO,CAAC;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,eAAe,CAAa;gBAExB,UAAU,SAA2B;IAIjD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAmBjD;;OAEG;IACG,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCzD;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBrC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IASpC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAYhD;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAarD;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAatD;;OAEG;IACH,aAAa,IAAI,eAAe,EAAE;IAmBlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;YACW,UAAU;IAkBxB;;OAEG;YACW,UAAU;IAgBxB;;OAEG;YACW,oBAAoB;IAWlC;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C;;OAEG;YACW,mBAAmB;CAWlC"}
|