oh-my-claude-sisyphus 3.5.6 → 3.5.8
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 +58 -343
- package/commands/omc-setup.md +51 -0
- package/dist/__tests__/analytics/tokscale-adapter.test.d.ts +2 -0
- package/dist/__tests__/analytics/tokscale-adapter.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/tokscale-adapter.test.js +79 -0
- package/dist/__tests__/analytics/tokscale-adapter.test.js.map +1 -0
- package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +7 -0
- package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +1 -0
- package/dist/__tests__/hooks/auto-slash-command/executor.test.js +374 -0
- package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +1 -0
- package/dist/__tests__/hooks/learner/bridge.test.d.ts +11 -0
- package/dist/__tests__/hooks/learner/bridge.test.d.ts.map +1 -0
- package/dist/__tests__/hooks/learner/bridge.test.js +199 -0
- package/dist/__tests__/hooks/learner/bridge.test.js.map +1 -0
- package/dist/__tests__/installer.test.js +1 -1
- package/dist/analytics/cost-estimator.d.ts +14 -0
- package/dist/analytics/cost-estimator.d.ts.map +1 -1
- package/dist/analytics/cost-estimator.js +65 -0
- package/dist/analytics/cost-estimator.js.map +1 -1
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +4 -0
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/query-engine.d.ts +3 -0
- package/dist/analytics/query-engine.d.ts.map +1 -1
- package/dist/analytics/query-engine.js +87 -0
- package/dist/analytics/query-engine.js.map +1 -1
- package/dist/analytics/token-tracker.d.ts +3 -0
- package/dist/analytics/token-tracker.d.ts.map +1 -1
- package/dist/analytics/token-tracker.js +89 -0
- package/dist/analytics/token-tracker.js.map +1 -1
- package/dist/analytics/tokscale-adapter.d.ts +71 -0
- package/dist/analytics/tokscale-adapter.d.ts.map +1 -0
- package/dist/analytics/tokscale-adapter.js +223 -0
- package/dist/analytics/tokscale-adapter.js.map +1 -0
- package/dist/analytics/types.d.ts +17 -0
- package/dist/analytics/types.d.ts.map +1 -1
- package/dist/analytics/types.js +5 -0
- package/dist/analytics/types.js.map +1 -1
- package/dist/cli/analytics.js +35 -0
- package/dist/cli/analytics.js.map +1 -1
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +4 -2
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/stats.d.ts.map +1 -1
- package/dist/cli/commands/stats.js +6 -1
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/index.js +95 -35
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/tokscale-launcher.d.ts +18 -0
- package/dist/cli/utils/tokscale-launcher.d.ts.map +1 -0
- package/dist/cli/utils/tokscale-launcher.js +64 -0
- package/dist/cli/utils/tokscale-launcher.js.map +1 -0
- package/dist/features/auto-update.js +5 -5
- package/dist/features/auto-update.js.map +1 -1
- package/dist/hooks/learner/bridge.d.ts +71 -0
- package/dist/hooks/learner/bridge.d.ts.map +1 -0
- package/dist/hooks/learner/bridge.js +426 -0
- package/dist/hooks/learner/bridge.js.map +1 -0
- package/dist/hooks/skill-bridge.cjs +349 -0
- package/dist/hud/types.d.ts +6 -2
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/hud/types.js.map +1 -1
- package/dist/hud/usage-api.d.ts.map +1 -1
- package/dist/hud/usage-api.js +13 -1
- package/dist/hud/usage-api.js.map +1 -1
- package/dist/installer/index.d.ts +1 -1
- package/dist/installer/index.js +1 -1
- package/docs/ARCHITECTURE.md +80 -397
- package/docs/FEATURES.md +396 -1981
- package/docs/MIGRATION.md +4 -4
- package/docs/REFERENCE.md +545 -0
- package/docs/SYNC-SYSTEM.md +6 -6
- package/package.json +5 -2
- package/scripts/build-skill-bridge.mjs +32 -0
- package/scripts/skill-injector.mjs +77 -26
- package/scripts/sync-metadata.ts +2 -2
- package/skills/omc-setup/SKILL.md +51 -0
- package/docs/FULL-README.md +0 -1001
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Bridge Module
|
|
3
|
+
*
|
|
4
|
+
* Exports a focused API for skill-injector.mjs to use via esbuild bundle.
|
|
5
|
+
* This module bridges the TypeScript learner infrastructure with the standalone hook script.
|
|
6
|
+
*
|
|
7
|
+
* Bundled to: dist/hooks/skill-bridge.cjs
|
|
8
|
+
* Usage: const bridge = require('../dist/hooks/skill-bridge.cjs');
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, realpathSync } from 'fs';
|
|
11
|
+
import { join, dirname, basename } from 'path';
|
|
12
|
+
import { homedir } from 'os';
|
|
13
|
+
// Re-export constants
|
|
14
|
+
export const USER_SKILLS_DIR = join(homedir(), '.claude', 'skills', 'omc-learned');
|
|
15
|
+
export const PROJECT_SKILLS_SUBDIR = '.omc/skills';
|
|
16
|
+
export const SKILL_EXTENSION = '.md';
|
|
17
|
+
/** Session TTL: 1 hour */
|
|
18
|
+
const SESSION_TTL_MS = 60 * 60 * 1000;
|
|
19
|
+
/** State file path */
|
|
20
|
+
const STATE_FILE = '.omc/state/skill-sessions.json';
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// Session Cache (File-Based)
|
|
23
|
+
// =============================================================================
|
|
24
|
+
/**
|
|
25
|
+
* Get state file path for a project.
|
|
26
|
+
*/
|
|
27
|
+
function getStateFilePath(projectRoot) {
|
|
28
|
+
return join(projectRoot, STATE_FILE);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Read session state from file.
|
|
32
|
+
*/
|
|
33
|
+
function readSessionState(projectRoot) {
|
|
34
|
+
const stateFile = getStateFilePath(projectRoot);
|
|
35
|
+
try {
|
|
36
|
+
if (existsSync(stateFile)) {
|
|
37
|
+
const content = readFileSync(stateFile, 'utf-8');
|
|
38
|
+
return JSON.parse(content);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Ignore read/parse errors
|
|
43
|
+
}
|
|
44
|
+
return { sessions: {} };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Write session state to file.
|
|
48
|
+
*/
|
|
49
|
+
function writeSessionState(projectRoot, state) {
|
|
50
|
+
const stateFile = getStateFilePath(projectRoot);
|
|
51
|
+
try {
|
|
52
|
+
mkdirSync(dirname(stateFile), { recursive: true });
|
|
53
|
+
writeFileSync(stateFile, JSON.stringify(state, null, 2), 'utf-8');
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Ignore write errors (non-critical)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get paths of skills already injected in this session.
|
|
61
|
+
*/
|
|
62
|
+
export function getInjectedSkillPaths(sessionId, projectRoot) {
|
|
63
|
+
const state = readSessionState(projectRoot);
|
|
64
|
+
const session = state.sessions[sessionId];
|
|
65
|
+
if (!session)
|
|
66
|
+
return [];
|
|
67
|
+
// Check TTL
|
|
68
|
+
if (Date.now() - session.timestamp > SESSION_TTL_MS) {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
return session.injectedPaths;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Mark skills as injected for this session.
|
|
75
|
+
*/
|
|
76
|
+
export function markSkillsInjected(sessionId, paths, projectRoot) {
|
|
77
|
+
const state = readSessionState(projectRoot);
|
|
78
|
+
const now = Date.now();
|
|
79
|
+
// Prune expired sessions
|
|
80
|
+
for (const [id, session] of Object.entries(state.sessions)) {
|
|
81
|
+
if (now - session.timestamp > SESSION_TTL_MS) {
|
|
82
|
+
delete state.sessions[id];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Get existing paths for this session
|
|
86
|
+
const existing = state.sessions[sessionId]?.injectedPaths ?? [];
|
|
87
|
+
// Merge with new paths (dedupe)
|
|
88
|
+
state.sessions[sessionId] = {
|
|
89
|
+
injectedPaths: [...new Set([...existing, ...paths])],
|
|
90
|
+
timestamp: now,
|
|
91
|
+
};
|
|
92
|
+
writeSessionState(projectRoot, state);
|
|
93
|
+
}
|
|
94
|
+
// =============================================================================
|
|
95
|
+
// File Discovery (Recursive)
|
|
96
|
+
// =============================================================================
|
|
97
|
+
/**
|
|
98
|
+
* Recursively find all skill files in a directory.
|
|
99
|
+
*/
|
|
100
|
+
function findSkillFilesRecursive(dir, results) {
|
|
101
|
+
if (!existsSync(dir))
|
|
102
|
+
return;
|
|
103
|
+
try {
|
|
104
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
105
|
+
for (const entry of entries) {
|
|
106
|
+
const fullPath = join(dir, entry.name);
|
|
107
|
+
if (entry.isDirectory()) {
|
|
108
|
+
findSkillFilesRecursive(fullPath, results);
|
|
109
|
+
}
|
|
110
|
+
else if (entry.isFile() && entry.name.endsWith(SKILL_EXTENSION)) {
|
|
111
|
+
results.push(fullPath);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// Permission denied or other errors - silently skip
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Resolve symlinks safely with fallback.
|
|
121
|
+
*/
|
|
122
|
+
function safeRealpathSync(filePath) {
|
|
123
|
+
try {
|
|
124
|
+
return realpathSync(filePath);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return filePath;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Find all skill files for a given project.
|
|
132
|
+
* Returns project skills first (higher priority), then user skills.
|
|
133
|
+
* Now supports RECURSIVE discovery (subdirectories included).
|
|
134
|
+
*/
|
|
135
|
+
export function findSkillFiles(projectRoot) {
|
|
136
|
+
const candidates = [];
|
|
137
|
+
const seenRealPaths = new Set();
|
|
138
|
+
// 1. Search project-level skills (higher priority)
|
|
139
|
+
const projectSkillsDir = join(projectRoot, PROJECT_SKILLS_SUBDIR);
|
|
140
|
+
const projectFiles = [];
|
|
141
|
+
findSkillFilesRecursive(projectSkillsDir, projectFiles);
|
|
142
|
+
for (const filePath of projectFiles) {
|
|
143
|
+
const realPath = safeRealpathSync(filePath);
|
|
144
|
+
if (seenRealPaths.has(realPath))
|
|
145
|
+
continue;
|
|
146
|
+
seenRealPaths.add(realPath);
|
|
147
|
+
candidates.push({
|
|
148
|
+
path: filePath,
|
|
149
|
+
realPath,
|
|
150
|
+
scope: 'project',
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
// 2. Search user-level skills (lower priority)
|
|
154
|
+
const userFiles = [];
|
|
155
|
+
findSkillFilesRecursive(USER_SKILLS_DIR, userFiles);
|
|
156
|
+
for (const filePath of userFiles) {
|
|
157
|
+
const realPath = safeRealpathSync(filePath);
|
|
158
|
+
if (seenRealPaths.has(realPath))
|
|
159
|
+
continue;
|
|
160
|
+
seenRealPaths.add(realPath);
|
|
161
|
+
candidates.push({
|
|
162
|
+
path: filePath,
|
|
163
|
+
realPath,
|
|
164
|
+
scope: 'user',
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return candidates;
|
|
168
|
+
}
|
|
169
|
+
// =============================================================================
|
|
170
|
+
// Parsing
|
|
171
|
+
// =============================================================================
|
|
172
|
+
/**
|
|
173
|
+
* Parse YAML frontmatter and content from a skill file.
|
|
174
|
+
*/
|
|
175
|
+
export function parseSkillFile(content) {
|
|
176
|
+
const frontmatterRegex = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/;
|
|
177
|
+
const match = content.match(frontmatterRegex);
|
|
178
|
+
if (!match) {
|
|
179
|
+
// No frontmatter - still valid, use filename as name
|
|
180
|
+
return {
|
|
181
|
+
metadata: {},
|
|
182
|
+
content: content.trim(),
|
|
183
|
+
valid: true,
|
|
184
|
+
errors: [],
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
const yamlContent = match[1];
|
|
188
|
+
const body = match[2].trim();
|
|
189
|
+
const errors = [];
|
|
190
|
+
try {
|
|
191
|
+
const metadata = parseYamlMetadata(yamlContent);
|
|
192
|
+
return {
|
|
193
|
+
metadata,
|
|
194
|
+
content: body,
|
|
195
|
+
valid: true,
|
|
196
|
+
errors,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
catch (e) {
|
|
200
|
+
return {
|
|
201
|
+
metadata: {},
|
|
202
|
+
content: body,
|
|
203
|
+
valid: false,
|
|
204
|
+
errors: [`YAML parse error: ${e}`],
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Simple YAML parser for skill frontmatter.
|
|
210
|
+
* Handles: id, name, description, triggers, tags, matching, model, agent
|
|
211
|
+
*/
|
|
212
|
+
function parseYamlMetadata(yamlContent) {
|
|
213
|
+
const lines = yamlContent.split('\n');
|
|
214
|
+
const metadata = {};
|
|
215
|
+
let i = 0;
|
|
216
|
+
while (i < lines.length) {
|
|
217
|
+
const line = lines[i];
|
|
218
|
+
const colonIndex = line.indexOf(':');
|
|
219
|
+
if (colonIndex === -1) {
|
|
220
|
+
i++;
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
const key = line.slice(0, colonIndex).trim();
|
|
224
|
+
const rawValue = line.slice(colonIndex + 1).trim();
|
|
225
|
+
switch (key) {
|
|
226
|
+
case 'id':
|
|
227
|
+
metadata.id = parseStringValue(rawValue);
|
|
228
|
+
break;
|
|
229
|
+
case 'name':
|
|
230
|
+
metadata.name = parseStringValue(rawValue);
|
|
231
|
+
break;
|
|
232
|
+
case 'description':
|
|
233
|
+
metadata.description = parseStringValue(rawValue);
|
|
234
|
+
break;
|
|
235
|
+
case 'model':
|
|
236
|
+
metadata.model = parseStringValue(rawValue);
|
|
237
|
+
break;
|
|
238
|
+
case 'agent':
|
|
239
|
+
metadata.agent = parseStringValue(rawValue);
|
|
240
|
+
break;
|
|
241
|
+
case 'matching':
|
|
242
|
+
metadata.matching = parseStringValue(rawValue);
|
|
243
|
+
break;
|
|
244
|
+
case 'triggers':
|
|
245
|
+
case 'tags': {
|
|
246
|
+
const { value, consumed } = parseArrayValue(rawValue, lines, i);
|
|
247
|
+
if (key === 'triggers') {
|
|
248
|
+
metadata.triggers = Array.isArray(value) ? value : (value ? [value] : []);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
metadata.tags = Array.isArray(value) ? value : (value ? [value] : []);
|
|
252
|
+
}
|
|
253
|
+
i += consumed - 1;
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
i++;
|
|
258
|
+
}
|
|
259
|
+
return metadata;
|
|
260
|
+
}
|
|
261
|
+
function parseStringValue(value) {
|
|
262
|
+
if (!value)
|
|
263
|
+
return '';
|
|
264
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
265
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
266
|
+
return value.slice(1, -1);
|
|
267
|
+
}
|
|
268
|
+
return value;
|
|
269
|
+
}
|
|
270
|
+
function parseArrayValue(rawValue, lines, currentIndex) {
|
|
271
|
+
// Inline array: ["a", "b"]
|
|
272
|
+
if (rawValue.startsWith('[')) {
|
|
273
|
+
const content = rawValue.slice(1, rawValue.lastIndexOf(']')).trim();
|
|
274
|
+
if (!content)
|
|
275
|
+
return { value: [], consumed: 1 };
|
|
276
|
+
const items = content.split(',').map(s => parseStringValue(s.trim())).filter(Boolean);
|
|
277
|
+
return { value: items, consumed: 1 };
|
|
278
|
+
}
|
|
279
|
+
// Multi-line array
|
|
280
|
+
if (!rawValue || rawValue === '') {
|
|
281
|
+
const items = [];
|
|
282
|
+
let consumed = 1;
|
|
283
|
+
for (let j = currentIndex + 1; j < lines.length; j++) {
|
|
284
|
+
const nextLine = lines[j];
|
|
285
|
+
const arrayMatch = nextLine.match(/^\s+-\s*(.*)$/);
|
|
286
|
+
if (arrayMatch) {
|
|
287
|
+
const itemValue = parseStringValue(arrayMatch[1].trim());
|
|
288
|
+
if (itemValue)
|
|
289
|
+
items.push(itemValue);
|
|
290
|
+
consumed++;
|
|
291
|
+
}
|
|
292
|
+
else if (nextLine.trim() === '') {
|
|
293
|
+
consumed++;
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (items.length > 0) {
|
|
300
|
+
return { value: items, consumed };
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// Single value
|
|
304
|
+
return { value: parseStringValue(rawValue), consumed: 1 };
|
|
305
|
+
}
|
|
306
|
+
// =============================================================================
|
|
307
|
+
// Matching
|
|
308
|
+
// =============================================================================
|
|
309
|
+
/**
|
|
310
|
+
* Calculate Levenshtein distance between two strings.
|
|
311
|
+
*/
|
|
312
|
+
function levenshteinDistance(str1, str2) {
|
|
313
|
+
const m = str1.length;
|
|
314
|
+
const n = str2.length;
|
|
315
|
+
const dp = Array(m + 1)
|
|
316
|
+
.fill(null)
|
|
317
|
+
.map(() => Array(n + 1).fill(0));
|
|
318
|
+
for (let i = 0; i <= m; i++)
|
|
319
|
+
dp[i][0] = i;
|
|
320
|
+
for (let j = 0; j <= n; j++)
|
|
321
|
+
dp[0][j] = j;
|
|
322
|
+
for (let i = 1; i <= m; i++) {
|
|
323
|
+
for (let j = 1; j <= n; j++) {
|
|
324
|
+
if (str1[i - 1] === str2[j - 1]) {
|
|
325
|
+
dp[i][j] = dp[i - 1][j - 1];
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
dp[i][j] = 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return dp[m][n];
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Fuzzy match a trigger against prompt text.
|
|
336
|
+
* Returns confidence score 0-100.
|
|
337
|
+
*/
|
|
338
|
+
function fuzzyMatchTrigger(prompt, trigger) {
|
|
339
|
+
const words = prompt.split(/\s+/).filter(w => w.length > 0);
|
|
340
|
+
// Exact word match
|
|
341
|
+
for (const word of words) {
|
|
342
|
+
if (word === trigger)
|
|
343
|
+
return 100;
|
|
344
|
+
if (word.includes(trigger) || trigger.includes(word)) {
|
|
345
|
+
return 80;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// Levenshtein distance for each word
|
|
349
|
+
let bestScore = 0;
|
|
350
|
+
for (const word of words) {
|
|
351
|
+
const distance = levenshteinDistance(word, trigger);
|
|
352
|
+
const maxLen = Math.max(word.length, trigger.length);
|
|
353
|
+
const similarity = maxLen > 0 ? ((maxLen - distance) / maxLen) * 100 : 0;
|
|
354
|
+
bestScore = Math.max(bestScore, similarity);
|
|
355
|
+
}
|
|
356
|
+
return Math.round(bestScore);
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Find matching skills for injection based on prompt triggers.
|
|
360
|
+
*
|
|
361
|
+
* Options:
|
|
362
|
+
* - fuzzyThreshold: minimum score for fuzzy match (default: 60)
|
|
363
|
+
* - maxResults: maximum skills to return (default: 5)
|
|
364
|
+
*/
|
|
365
|
+
export function matchSkillsForInjection(prompt, projectRoot, sessionId, options = {}) {
|
|
366
|
+
const { fuzzyThreshold = 60, maxResults = 5 } = options;
|
|
367
|
+
const promptLower = prompt.toLowerCase();
|
|
368
|
+
// Get already injected skills
|
|
369
|
+
const alreadyInjected = new Set(getInjectedSkillPaths(sessionId, projectRoot));
|
|
370
|
+
// Find all skill files
|
|
371
|
+
const candidates = findSkillFiles(projectRoot);
|
|
372
|
+
const matches = [];
|
|
373
|
+
for (const candidate of candidates) {
|
|
374
|
+
// Skip if already injected
|
|
375
|
+
if (alreadyInjected.has(candidate.path))
|
|
376
|
+
continue;
|
|
377
|
+
try {
|
|
378
|
+
const content = readFileSync(candidate.path, 'utf-8');
|
|
379
|
+
const parsed = parseSkillFile(content);
|
|
380
|
+
if (!parsed)
|
|
381
|
+
continue;
|
|
382
|
+
const triggers = parsed.metadata.triggers ?? [];
|
|
383
|
+
if (triggers.length === 0)
|
|
384
|
+
continue;
|
|
385
|
+
const useFuzzy = parsed.metadata.matching === 'fuzzy';
|
|
386
|
+
let totalScore = 0;
|
|
387
|
+
// Check triggers
|
|
388
|
+
for (const trigger of triggers) {
|
|
389
|
+
const triggerLower = trigger.toLowerCase();
|
|
390
|
+
// Exact substring match (default)
|
|
391
|
+
if (promptLower.includes(triggerLower)) {
|
|
392
|
+
totalScore += 10;
|
|
393
|
+
continue;
|
|
394
|
+
}
|
|
395
|
+
// Fuzzy match (opt-in only)
|
|
396
|
+
if (useFuzzy) {
|
|
397
|
+
const fuzzyScore = fuzzyMatchTrigger(promptLower, triggerLower);
|
|
398
|
+
if (fuzzyScore >= fuzzyThreshold) {
|
|
399
|
+
totalScore += Math.round(fuzzyScore / 10); // Scale down for consistency
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
if (totalScore > 0) {
|
|
404
|
+
// Get name from metadata or filename
|
|
405
|
+
const name = parsed.metadata.name ||
|
|
406
|
+
basename(candidate.path, SKILL_EXTENSION);
|
|
407
|
+
matches.push({
|
|
408
|
+
path: candidate.path,
|
|
409
|
+
name,
|
|
410
|
+
content: parsed.content,
|
|
411
|
+
score: totalScore,
|
|
412
|
+
scope: candidate.scope,
|
|
413
|
+
triggers,
|
|
414
|
+
matching: parsed.metadata.matching,
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
catch {
|
|
419
|
+
// Ignore file read errors
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
// Sort by score (descending) and limit
|
|
423
|
+
matches.sort((a, b) => b.score - a.score);
|
|
424
|
+
return matches.slice(0, maxResults);
|
|
425
|
+
}
|
|
426
|
+
//# sourceMappingURL=bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../src/hooks/learner/bridge.ts"],"names":[],"mappings":"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"}
|