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.
Files changed (189) hide show
  1. package/.opencode/hooks/post-commit +152 -55
  2. package/.opencode/hooks/post-commit.backup +110 -174
  3. package/.opencode/hooks/post-push +47 -64
  4. package/.opencode/hooks/post-push.backup +34 -38
  5. package/.opencode/strray/features.json +3 -3
  6. package/.opencode/strray/routing-mappings.json +90 -34
  7. package/AGENTS.md +7 -2
  8. package/dist/analytics/anonymization-engine.d.ts +108 -0
  9. package/dist/analytics/anonymization-engine.d.ts.map +1 -0
  10. package/dist/analytics/anonymization-engine.js +352 -0
  11. package/dist/analytics/anonymization-engine.js.map +1 -0
  12. package/dist/analytics/consent-manager.d.ts +94 -0
  13. package/dist/analytics/consent-manager.d.ts.map +1 -0
  14. package/dist/analytics/consent-manager.js +257 -0
  15. package/dist/analytics/consent-manager.js.map +1 -0
  16. package/dist/analytics/emerging-pattern-detector.d.ts +68 -0
  17. package/dist/analytics/emerging-pattern-detector.d.ts.map +1 -0
  18. package/dist/analytics/emerging-pattern-detector.js +250 -0
  19. package/dist/analytics/emerging-pattern-detector.js.map +1 -0
  20. package/dist/analytics/pattern-learning-engine.d.ts +81 -0
  21. package/dist/analytics/pattern-learning-engine.d.ts.map +1 -0
  22. package/dist/analytics/pattern-learning-engine.js +262 -0
  23. package/dist/analytics/pattern-learning-engine.js.map +1 -0
  24. package/dist/analytics/pattern-performance-tracker.d.ts +89 -0
  25. package/dist/analytics/pattern-performance-tracker.d.ts.map +1 -0
  26. package/dist/analytics/pattern-performance-tracker.js +289 -0
  27. package/dist/analytics/pattern-performance-tracker.js.map +1 -0
  28. package/dist/analytics/prompt-pattern-analyzer.d.ts +100 -0
  29. package/dist/analytics/prompt-pattern-analyzer.d.ts.map +1 -0
  30. package/dist/analytics/prompt-pattern-analyzer.js +372 -0
  31. package/dist/analytics/prompt-pattern-analyzer.js.map +1 -0
  32. package/dist/analytics/routing-performance-analyzer.d.ts +102 -0
  33. package/dist/analytics/routing-performance-analyzer.d.ts.map +1 -0
  34. package/dist/analytics/routing-performance-analyzer.js +342 -0
  35. package/dist/analytics/routing-performance-analyzer.js.map +1 -0
  36. package/dist/analytics/routing-refiner.d.ts +105 -0
  37. package/dist/analytics/routing-refiner.d.ts.map +1 -0
  38. package/dist/analytics/routing-refiner.js +381 -0
  39. package/dist/analytics/routing-refiner.js.map +1 -0
  40. package/dist/cli/commands/analytics-disable.d.ts +10 -0
  41. package/dist/cli/commands/analytics-disable.d.ts.map +1 -0
  42. package/dist/cli/commands/analytics-disable.js +73 -0
  43. package/dist/cli/commands/analytics-disable.js.map +1 -0
  44. package/dist/cli/commands/analytics-enable-action.d.ts +9 -0
  45. package/dist/cli/commands/analytics-enable-action.d.ts.map +1 -0
  46. package/dist/cli/commands/analytics-enable-action.js +83 -0
  47. package/dist/cli/commands/analytics-enable-action.js.map +1 -0
  48. package/dist/cli/commands/analytics-preview.d.ts +10 -0
  49. package/dist/cli/commands/analytics-preview.d.ts.map +1 -0
  50. package/dist/cli/commands/analytics-preview.js +107 -0
  51. package/dist/cli/commands/analytics-preview.js.map +1 -0
  52. package/dist/cli/commands/analytics-status.d.ts +10 -0
  53. package/dist/cli/commands/analytics-status.d.ts.map +1 -0
  54. package/dist/cli/commands/analytics-status.js +68 -0
  55. package/dist/cli/commands/analytics-status.js.map +1 -0
  56. package/dist/cli/index.js +6 -3
  57. package/dist/cli/index.js.map +1 -1
  58. package/dist/core/adaptive-kernel.d.ts +110 -0
  59. package/dist/core/adaptive-kernel.d.ts.map +1 -0
  60. package/dist/core/adaptive-kernel.js +193 -0
  61. package/dist/core/adaptive-kernel.js.map +1 -0
  62. package/dist/core/kernel-patterns.d.ts +105 -0
  63. package/dist/core/kernel-patterns.d.ts.map +1 -0
  64. package/dist/core/kernel-patterns.js +328 -0
  65. package/dist/core/kernel-patterns.js.map +1 -0
  66. package/dist/core/orchestrator.d.ts +1 -0
  67. package/dist/core/orchestrator.d.ts.map +1 -1
  68. package/dist/core/orchestrator.js +40 -11
  69. package/dist/core/orchestrator.js.map +1 -1
  70. package/dist/delegation/agent-delegator.d.ts +1 -0
  71. package/dist/delegation/agent-delegator.d.ts.map +1 -1
  72. package/dist/delegation/agent-delegator.js +24 -2
  73. package/dist/delegation/agent-delegator.js.map +1 -1
  74. package/dist/delegation/task-skill-router.d.ts +269 -5
  75. package/dist/delegation/task-skill-router.d.ts.map +1 -1
  76. package/dist/delegation/task-skill-router.js +810 -23
  77. package/dist/delegation/task-skill-router.js.map +1 -1
  78. package/dist/postprocessor/PostProcessor.d.ts +10 -0
  79. package/dist/postprocessor/PostProcessor.d.ts.map +1 -1
  80. package/dist/postprocessor/PostProcessor.js +87 -17
  81. package/dist/postprocessor/PostProcessor.js.map +1 -1
  82. package/dist/processors/agents-md-validation-processor.d.ts +1 -0
  83. package/dist/processors/agents-md-validation-processor.d.ts.map +1 -1
  84. package/dist/processors/agents-md-validation-processor.js +34 -12
  85. package/dist/processors/agents-md-validation-processor.js.map +1 -1
  86. package/dist/processors/processor-manager.d.ts +7 -0
  87. package/dist/processors/processor-manager.d.ts.map +1 -1
  88. package/dist/processors/processor-manager.js +93 -0
  89. package/dist/processors/processor-manager.js.map +1 -1
  90. package/dist/processors/test-auto-creation-processor.d.ts.map +1 -1
  91. package/dist/processors/test-auto-creation-processor.js +52 -38
  92. package/dist/processors/test-auto-creation-processor.js.map +1 -1
  93. package/dist/scripts/analytics/daily-routing-analysis.d.ts +18 -0
  94. package/dist/scripts/analytics/daily-routing-analysis.d.ts.map +1 -0
  95. package/dist/scripts/analytics/daily-routing-analysis.js +268 -0
  96. package/dist/scripts/analytics/daily-routing-analysis.js.map +1 -0
  97. package/dist/scripts/analytics/index.d.ts +15 -0
  98. package/dist/scripts/analytics/index.d.ts.map +1 -0
  99. package/dist/scripts/analytics/index.js +17 -0
  100. package/dist/scripts/analytics/index.js.map +1 -0
  101. package/dist/scripts/test-p9.d.ts +15 -0
  102. package/dist/scripts/test-p9.d.ts.map +1 -0
  103. package/dist/scripts/test-p9.js +220 -0
  104. package/dist/scripts/test-p9.js.map +1 -0
  105. package/package.json +6 -2
  106. package/scripts/node/kernel-e2e-test.mjs +168 -0
  107. package/scripts/node/kernel-framework-test.mjs +127 -0
  108. package/scripts/node/kernel-live-test.mjs +147 -0
  109. package/scripts/node/kernel-real-framework-test.mjs +103 -0
  110. package/scripts/node/kernel-update.cjs +379 -0
  111. package/scripts/node/reflection-check.sh +245 -27
  112. package/scripts/node/test-simple-names-comprehensive.mjs +221 -0
  113. package/scripts/node/test-simple-names.mjs +39 -0
  114. package/dist/agents/documentation-writer.d.ts +0 -9
  115. package/dist/agents/documentation-writer.d.ts.map +0 -1
  116. package/dist/agents/documentation-writer.js +0 -85
  117. package/dist/agents/documentation-writer.js.map +0 -1
  118. package/dist/agents/explore.d.ts +0 -8
  119. package/dist/agents/explore.d.ts.map +0 -1
  120. package/dist/agents/explore.js +0 -55
  121. package/dist/agents/explore.js.map +0 -1
  122. package/dist/agents/librarian.d.ts +0 -3
  123. package/dist/agents/librarian.d.ts.map +0 -1
  124. package/dist/agents/librarian.js +0 -84
  125. package/dist/agents/librarian.js.map +0 -1
  126. package/dist/agents/marketing-expert.d.ts +0 -9
  127. package/dist/agents/marketing-expert.d.ts.map +0 -1
  128. package/dist/agents/marketing-expert.js +0 -112
  129. package/dist/agents/marketing-expert.js.map +0 -1
  130. package/dist/agents/oracle.d.ts +0 -8
  131. package/dist/agents/oracle.d.ts.map +0 -1
  132. package/dist/agents/oracle.js +0 -51
  133. package/dist/agents/oracle.js.map +0 -1
  134. package/dist/agents/seo-copywriter.d.ts +0 -10
  135. package/dist/agents/seo-copywriter.d.ts.map +0 -1
  136. package/dist/agents/seo-copywriter.js +0 -73
  137. package/dist/agents/seo-copywriter.js.map +0 -1
  138. package/dist/agents/seo-specialist.d.ts +0 -9
  139. package/dist/agents/seo-specialist.d.ts.map +0 -1
  140. package/dist/agents/seo-specialist.js +0 -54
  141. package/dist/agents/seo-specialist.js.map +0 -1
  142. package/dist/agents/test-architect.d.ts +0 -3
  143. package/dist/agents/test-architect.d.ts.map +0 -1
  144. package/dist/agents/test-architect.js +0 -96
  145. package/dist/agents/test-architect.js.map +0 -1
  146. package/dist/mcps/enhanced-orchestrator.server.d.ts +0 -14
  147. package/dist/mcps/enhanced-orchestrator.server.d.ts.map +0 -1
  148. package/dist/mcps/enhanced-orchestrator.server.js +0 -266
  149. package/dist/mcps/enhanced-orchestrator.server.js.map +0 -1
  150. package/dist/mcps/knowledge-skills/analyzer.server.d.ts +0 -7
  151. package/dist/mcps/knowledge-skills/analyzer.server.d.ts.map +0 -1
  152. package/dist/mcps/knowledge-skills/analyzer.server.js +0 -282
  153. package/dist/mcps/knowledge-skills/analyzer.server.js.map +0 -1
  154. package/dist/mcps/knowledge-skills/documentation-generation.server.d.ts +0 -48
  155. package/dist/mcps/knowledge-skills/documentation-generation.server.d.ts.map +0 -1
  156. package/dist/mcps/knowledge-skills/documentation-generation.server.js +0 -1238
  157. package/dist/mcps/knowledge-skills/documentation-generation.server.js.map +0 -1
  158. package/dist/mcps/knowledge-skills/explore.server.d.ts +0 -21
  159. package/dist/mcps/knowledge-skills/explore.server.d.ts.map +0 -1
  160. package/dist/mcps/knowledge-skills/explore.server.js +0 -582
  161. package/dist/mcps/knowledge-skills/explore.server.js.map +0 -1
  162. package/dist/mcps/knowledge-skills/marketing-expert.server.d.ts +0 -8
  163. package/dist/mcps/knowledge-skills/marketing-expert.server.d.ts.map +0 -1
  164. package/dist/mcps/knowledge-skills/marketing-expert.server.js +0 -356
  165. package/dist/mcps/knowledge-skills/marketing-expert.server.js.map +0 -1
  166. package/dist/mcps/knowledge-skills/oracle.server.d.ts +0 -25
  167. package/dist/mcps/knowledge-skills/oracle.server.d.ts.map +0 -1
  168. package/dist/mcps/knowledge-skills/oracle.server.js +0 -569
  169. package/dist/mcps/knowledge-skills/oracle.server.js.map +0 -1
  170. package/dist/mcps/knowledge-skills/seo-copywriter.server.d.ts +0 -8
  171. package/dist/mcps/knowledge-skills/seo-copywriter.server.d.ts.map +0 -1
  172. package/dist/mcps/knowledge-skills/seo-copywriter.server.js +0 -251
  173. package/dist/mcps/knowledge-skills/seo-copywriter.server.js.map +0 -1
  174. package/dist/mcps/knowledge-skills/seo-specialist.server.d.ts +0 -8
  175. package/dist/mcps/knowledge-skills/seo-specialist.server.d.ts.map +0 -1
  176. package/dist/mcps/knowledge-skills/seo-specialist.server.js +0 -211
  177. package/dist/mcps/knowledge-skills/seo-specialist.server.js.map +0 -1
  178. package/dist/mcps/librarian.server.d.ts +0 -17
  179. package/dist/mcps/librarian.server.d.ts.map +0 -1
  180. package/dist/mcps/librarian.server.js +0 -382
  181. package/dist/mcps/librarian.server.js.map +0 -1
  182. package/dist/optimization/performance-optimizer.d.ts +0 -179
  183. package/dist/optimization/performance-optimizer.d.ts.map +0 -1
  184. package/dist/optimization/performance-optimizer.js +0 -556
  185. package/dist/optimization/performance-optimizer.js.map +0 -1
  186. package/dist/utils/memory-pool.d.ts +0 -90
  187. package/dist/utils/memory-pool.d.ts.map +0 -1
  188. package/dist/utils/memory-pool.js +0 -245
  189. 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"}