oh-my-claude-sisyphus 3.4.3 → 3.5.0
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/README.md +45 -0
- package/dist/__tests__/learner/auto-learner.test.d.ts +7 -0
- package/dist/__tests__/learner/auto-learner.test.d.ts.map +1 -0
- package/dist/__tests__/learner/auto-learner.test.js +507 -0
- package/dist/__tests__/learner/auto-learner.test.js.map +1 -0
- package/dist/__tests__/learner/matcher.test.d.ts +2 -0
- package/dist/__tests__/learner/matcher.test.d.ts.map +1 -0
- package/dist/__tests__/learner/matcher.test.js +330 -0
- package/dist/__tests__/learner/matcher.test.js.map +1 -0
- package/dist/analytics/analytics-summary.d.ts.map +1 -1
- package/dist/analytics/analytics-summary.js +12 -11
- package/dist/analytics/analytics-summary.js.map +1 -1
- package/dist/analytics/backfill-dedup.d.ts.map +1 -1
- package/dist/analytics/backfill-dedup.js +8 -11
- package/dist/analytics/backfill-dedup.js.map +1 -1
- package/dist/analytics/backfill-engine.d.ts.map +1 -1
- package/dist/analytics/backfill-engine.js +12 -3
- package/dist/analytics/backfill-engine.js.map +1 -1
- package/dist/analytics/query-engine.d.ts.map +1 -1
- package/dist/analytics/query-engine.js +3 -2
- package/dist/analytics/query-engine.js.map +1 -1
- package/dist/analytics/token-tracker.d.ts.map +1 -1
- package/dist/analytics/token-tracker.js +22 -27
- package/dist/analytics/token-tracker.js.map +1 -1
- package/dist/analytics/transcript-token-extractor.d.ts +17 -1
- package/dist/analytics/transcript-token-extractor.d.ts.map +1 -1
- package/dist/analytics/transcript-token-extractor.js +66 -19
- package/dist/analytics/transcript-token-extractor.js.map +1 -1
- package/dist/analytics/types.d.ts +13 -0
- package/dist/analytics/types.d.ts.map +1 -1
- package/dist/analytics/types.js.map +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/hooks/learner/auto-invoke.d.ts +82 -0
- package/dist/hooks/learner/auto-invoke.d.ts.map +1 -0
- package/dist/hooks/learner/auto-invoke.js +234 -0
- package/dist/hooks/learner/auto-invoke.js.map +1 -0
- package/dist/hooks/learner/auto-learner.d.ts +55 -0
- package/dist/hooks/learner/auto-learner.d.ts.map +1 -0
- package/dist/hooks/learner/auto-learner.js +361 -0
- package/dist/hooks/learner/auto-learner.js.map +1 -0
- package/dist/hooks/learner/index.d.ts +3 -0
- package/dist/hooks/learner/index.d.ts.map +1 -1
- package/dist/hooks/learner/index.js +4 -0
- package/dist/hooks/learner/index.js.map +1 -1
- package/dist/hooks/learner/matcher.d.ts +40 -0
- package/dist/hooks/learner/matcher.d.ts.map +1 -0
- package/dist/hooks/learner/matcher.js +230 -0
- package/dist/hooks/learner/matcher.js.map +1 -0
- package/package.json +1 -1
- package/skills/local-skills-setup/SKILL.md +465 -0
- package/skills/skill/SKILL.md +406 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
// Smart skill matcher with fuzzy matching, pattern detection, and confidence scoring
|
|
2
|
+
// No external dependencies - uses built-in only
|
|
3
|
+
/**
|
|
4
|
+
* Match skills against a prompt using multiple matching strategies
|
|
5
|
+
*/
|
|
6
|
+
export function matchSkills(prompt, skills, options = {}) {
|
|
7
|
+
const { threshold = 30, maxResults = 10 } = options;
|
|
8
|
+
const trimmedPrompt = prompt.trim();
|
|
9
|
+
// Early return for empty or whitespace-only prompts
|
|
10
|
+
if (!trimmedPrompt) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
const normalizedPrompt = trimmedPrompt.toLowerCase();
|
|
14
|
+
const context = extractContext(prompt);
|
|
15
|
+
const results = [];
|
|
16
|
+
for (const skill of skills) {
|
|
17
|
+
const allTriggers = [...skill.triggers, ...(skill.tags || [])];
|
|
18
|
+
const matches = [];
|
|
19
|
+
for (const trigger of allTriggers) {
|
|
20
|
+
const normalizedTrigger = trigger.toLowerCase();
|
|
21
|
+
// 1. Exact match (highest confidence)
|
|
22
|
+
if (normalizedPrompt.includes(normalizedTrigger)) {
|
|
23
|
+
matches.push({ trigger, score: 100, type: 'exact' });
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
// 2. Pattern match (regex/glob-like patterns)
|
|
27
|
+
const patternScore = patternMatch(normalizedPrompt, normalizedTrigger);
|
|
28
|
+
if (patternScore > 0) {
|
|
29
|
+
matches.push({ trigger, score: patternScore, type: 'pattern' });
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
// 3. Fuzzy match (Levenshtein distance)
|
|
33
|
+
const fuzzyScore = fuzzyMatch(normalizedPrompt, normalizedTrigger);
|
|
34
|
+
if (fuzzyScore >= 60) {
|
|
35
|
+
matches.push({ trigger, score: fuzzyScore, type: 'fuzzy' });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (matches.length > 0) {
|
|
39
|
+
// Calculate overall confidence based on best matches
|
|
40
|
+
const bestMatch = matches.reduce((a, b) => (a.score > b.score ? a : b));
|
|
41
|
+
const avgScore = matches.reduce((sum, m) => sum + m.score, 0) / matches.length;
|
|
42
|
+
const confidence = Math.round(bestMatch.score * 0.7 + avgScore * 0.3);
|
|
43
|
+
if (confidence >= threshold) {
|
|
44
|
+
results.push({
|
|
45
|
+
skillId: skill.id,
|
|
46
|
+
confidence,
|
|
47
|
+
matchedTriggers: matches.map((m) => m.trigger),
|
|
48
|
+
matchType: bestMatch.type,
|
|
49
|
+
context,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Sort by confidence (descending) and limit results
|
|
55
|
+
return results
|
|
56
|
+
.sort((a, b) => b.confidence - a.confidence)
|
|
57
|
+
.slice(0, maxResults);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Fuzzy string matching using Levenshtein distance
|
|
61
|
+
* Returns confidence score 0-100
|
|
62
|
+
*/
|
|
63
|
+
export function fuzzyMatch(text, pattern) {
|
|
64
|
+
if (!text.trim() || !pattern.trim())
|
|
65
|
+
return 0;
|
|
66
|
+
// Check if pattern is a substring first (partial match bonus)
|
|
67
|
+
const words = text.split(/\s+/).filter(w => w.length > 0);
|
|
68
|
+
for (const word of words) {
|
|
69
|
+
if (word === pattern)
|
|
70
|
+
return 100;
|
|
71
|
+
if (word.length > 0 && pattern.length > 0 &&
|
|
72
|
+
(word.includes(pattern) || pattern.includes(word))) {
|
|
73
|
+
return 80;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Calculate Levenshtein distance for each word
|
|
77
|
+
let bestScore = 0;
|
|
78
|
+
for (const word of words) {
|
|
79
|
+
const distance = levenshteinDistance(word, pattern);
|
|
80
|
+
const maxLen = Math.max(word.length, pattern.length);
|
|
81
|
+
const similarity = maxLen > 0 ? ((maxLen - distance) / maxLen) * 100 : 0;
|
|
82
|
+
bestScore = Math.max(bestScore, similarity);
|
|
83
|
+
}
|
|
84
|
+
return Math.round(bestScore);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Calculate Levenshtein distance between two strings
|
|
88
|
+
*/
|
|
89
|
+
function levenshteinDistance(str1, str2) {
|
|
90
|
+
const m = str1.length;
|
|
91
|
+
const n = str2.length;
|
|
92
|
+
// Create distance matrix
|
|
93
|
+
const dp = Array(m + 1)
|
|
94
|
+
.fill(null)
|
|
95
|
+
.map(() => Array(n + 1).fill(0));
|
|
96
|
+
// Initialize first row and column
|
|
97
|
+
for (let i = 0; i <= m; i++)
|
|
98
|
+
dp[i][0] = i;
|
|
99
|
+
for (let j = 0; j <= n; j++)
|
|
100
|
+
dp[0][j] = j;
|
|
101
|
+
// Fill the matrix
|
|
102
|
+
for (let i = 1; i <= m; i++) {
|
|
103
|
+
for (let j = 1; j <= n; j++) {
|
|
104
|
+
if (str1[i - 1] === str2[j - 1]) {
|
|
105
|
+
dp[i][j] = dp[i - 1][j - 1];
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
dp[i][j] =
|
|
109
|
+
1 +
|
|
110
|
+
Math.min(dp[i - 1][j], // deletion
|
|
111
|
+
dp[i][j - 1], // insertion
|
|
112
|
+
dp[i - 1][j - 1] // substitution
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return dp[m][n];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Pattern-based matching for regex-like triggers
|
|
121
|
+
* Returns confidence score 0-100
|
|
122
|
+
*/
|
|
123
|
+
function patternMatch(text, pattern) {
|
|
124
|
+
// Check for glob-like patterns
|
|
125
|
+
if (pattern.includes('*')) {
|
|
126
|
+
const regexPattern = pattern.replace(/\*/g, '.*');
|
|
127
|
+
try {
|
|
128
|
+
const regex = new RegExp(regexPattern, 'i');
|
|
129
|
+
if (regex.test(text)) {
|
|
130
|
+
return 85; // High confidence for pattern match
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// Invalid regex, skip
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Check for regex-like patterns (starts with / and has / somewhere after, with optional flags)
|
|
138
|
+
// Supports: /pattern/ or /pattern/flags (e.g., /error/i)
|
|
139
|
+
const regexMatch = pattern.match(/^\/(.+)\/([gimsuy]*)$/);
|
|
140
|
+
if (regexMatch) {
|
|
141
|
+
try {
|
|
142
|
+
const [, regexPattern, flags] = regexMatch;
|
|
143
|
+
const regex = new RegExp(regexPattern, flags || 'i');
|
|
144
|
+
if (regex.test(text)) {
|
|
145
|
+
return 90; // Very high confidence for explicit regex match
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Invalid regex, skip
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return 0;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Extract contextual information from the prompt
|
|
156
|
+
*/
|
|
157
|
+
export function extractContext(prompt) {
|
|
158
|
+
const detectedErrors = [];
|
|
159
|
+
const detectedFiles = [];
|
|
160
|
+
const detectedPatterns = [];
|
|
161
|
+
// Error detection
|
|
162
|
+
const errorPatterns = [
|
|
163
|
+
/\b(error|exception|failed|failure|crash|bug)\b/gi,
|
|
164
|
+
/\b([A-Z][a-z]+Error)\b/g, // TypeError, ReferenceError, etc.
|
|
165
|
+
/\b(ENOENT|EACCES|ECONNREFUSED)\b/g, // Node.js error codes
|
|
166
|
+
/at\s+.*\(.*:\d+:\d+\)/g, // Stack trace lines
|
|
167
|
+
];
|
|
168
|
+
for (const pattern of errorPatterns) {
|
|
169
|
+
const matches = prompt.match(pattern);
|
|
170
|
+
if (matches) {
|
|
171
|
+
detectedErrors.push(...matches.map((m) => m.trim()).filter((m) => m.length > 0));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// File detection
|
|
175
|
+
const filePatterns = [
|
|
176
|
+
/\b([a-zA-Z0-9_-]+\/)*[a-zA-Z0-9_-]+\.[a-z]{2,4}\b/g, // Relative paths
|
|
177
|
+
/\b\/[a-zA-Z0-9_\/-]+\.[a-z]{2,4}\b/g, // Absolute paths
|
|
178
|
+
/\bsrc\/[a-zA-Z0-9_\/-]+/g, // src/ paths
|
|
179
|
+
];
|
|
180
|
+
for (const pattern of filePatterns) {
|
|
181
|
+
const matches = prompt.match(pattern);
|
|
182
|
+
if (matches) {
|
|
183
|
+
detectedFiles.push(...matches.map((m) => m.trim()).filter((m) => m.length > 0));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Pattern detection
|
|
187
|
+
const codePatterns = [
|
|
188
|
+
{ pattern: /\basync\b.*\bawait\b/gi, name: 'async/await' },
|
|
189
|
+
{ pattern: /\bpromise\b/gi, name: 'promise' },
|
|
190
|
+
{ pattern: /\bcallback\b/gi, name: 'callback' },
|
|
191
|
+
{ pattern: /\bregex\b|\bregular expression\b/gi, name: 'regex' },
|
|
192
|
+
{ pattern: /\bapi\b/gi, name: 'api' },
|
|
193
|
+
{ pattern: /\btest\b.*\b(unit|integration|e2e)\b/gi, name: 'testing' },
|
|
194
|
+
{ pattern: /\b(typescript|ts)\b/gi, name: 'typescript' },
|
|
195
|
+
{ pattern: /\b(javascript|js)\b/gi, name: 'javascript' },
|
|
196
|
+
{ pattern: /\breact\b/gi, name: 'react' },
|
|
197
|
+
{ pattern: /\bgit\b/gi, name: 'git' },
|
|
198
|
+
];
|
|
199
|
+
for (const { pattern, name } of codePatterns) {
|
|
200
|
+
if (pattern.test(prompt)) {
|
|
201
|
+
detectedPatterns.push(name);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Deduplicate and normalize
|
|
205
|
+
return {
|
|
206
|
+
detectedErrors: [...new Set(detectedErrors)],
|
|
207
|
+
detectedFiles: [...new Set(detectedFiles)],
|
|
208
|
+
detectedPatterns: [...new Set(detectedPatterns)],
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Calculate confidence score based on match metrics
|
|
213
|
+
*/
|
|
214
|
+
export function calculateConfidence(matches, total, matchType) {
|
|
215
|
+
if (total === 0)
|
|
216
|
+
return 0;
|
|
217
|
+
const matchRatio = matches / total;
|
|
218
|
+
let baseScore = matchRatio * 100;
|
|
219
|
+
// Apply multiplier based on match type
|
|
220
|
+
const multipliers = {
|
|
221
|
+
exact: 1.0,
|
|
222
|
+
pattern: 0.9,
|
|
223
|
+
fuzzy: 0.7,
|
|
224
|
+
semantic: 0.8,
|
|
225
|
+
};
|
|
226
|
+
const multiplier = multipliers[matchType] || 0.5;
|
|
227
|
+
const confidence = Math.round(baseScore * multiplier);
|
|
228
|
+
return Math.min(100, Math.max(0, confidence));
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../../src/hooks/learner/matcher.ts"],"names":[],"mappings":"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"}
|