@mohanscodex/spectra-agent 0.4.7 → 0.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/dist/__tests__/skill-store.test.d.ts +2 -0
- package/dist/__tests__/skill-store.test.d.ts.map +1 -0
- package/dist/__tests__/skill-store.test.js +156 -0
- package/dist/__tests__/skill-store.test.js.map +1 -0
- package/dist/__tests__/skill.test.d.ts +2 -0
- package/dist/__tests__/skill.test.d.ts.map +1 -0
- package/dist/__tests__/skill.test.js +129 -0
- package/dist/__tests__/skill.test.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/skill-store.d.ts +26 -0
- package/dist/skill-store.d.ts.map +1 -0
- package/dist/skill-store.js +132 -0
- package/dist/skill-store.js.map +1 -0
- package/dist/skill-synth.d.ts +24 -0
- package/dist/skill-synth.d.ts.map +1 -0
- package/dist/skill-synth.js +130 -0
- package/dist/skill-synth.js.map +1 -0
- package/dist/skill.d.ts +46 -0
- package/dist/skill.d.ts.map +1 -0
- package/dist/skill.js +379 -0
- package/dist/skill.js.map +1 -0
- package/dist/tool/skill.d.ts +5 -0
- package/dist/tool/skill.d.ts.map +1 -0
- package/dist/tool/skill.js +120 -0
- package/dist/tool/skill.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { saveEvolvingSkill, findSimilarSkill, evolveSkill } from './skill-store.js';
|
|
2
|
+
const MIN_TOOL_CALLS = 3;
|
|
3
|
+
const MIN_MESSAGES = 6;
|
|
4
|
+
const SIMILARITY_THRESHOLD = 0.3;
|
|
5
|
+
export function isSessionEligibleForSynthesis(trace) {
|
|
6
|
+
return trace.toolCalls.length >= MIN_TOOL_CALLS && trace.messages.length >= MIN_MESSAGES;
|
|
7
|
+
}
|
|
8
|
+
function extractSessionSummary(trace) {
|
|
9
|
+
const parts = [];
|
|
10
|
+
const userMsgs = trace.messages.filter((m) => m.role === 'user');
|
|
11
|
+
if (userMsgs.length > 0) {
|
|
12
|
+
const content = userMsgs[0].content;
|
|
13
|
+
const text = typeof content === 'string'
|
|
14
|
+
? content
|
|
15
|
+
: content.filter((c) => c.type === 'text').map((c) => c.text).join(' ');
|
|
16
|
+
parts.push(`User intent: ${text}`);
|
|
17
|
+
}
|
|
18
|
+
const toolSummary = trace.toolCalls.map((t) => `${t.name}(${t.success ? 'ok' : 'fail'})`).join(', ');
|
|
19
|
+
parts.push(`Tools used: ${toolSummary}`);
|
|
20
|
+
const failedTools = trace.toolCalls.filter((t) => !t.success);
|
|
21
|
+
if (failedTools.length > 0) {
|
|
22
|
+
parts.push(`Failures: ${failedTools.map((t) => t.name).join(', ')}`);
|
|
23
|
+
}
|
|
24
|
+
return parts.join('\n');
|
|
25
|
+
}
|
|
26
|
+
function extractProcedure(trace) {
|
|
27
|
+
const steps = [];
|
|
28
|
+
let stepNum = 1;
|
|
29
|
+
for (const call of trace.toolCalls) {
|
|
30
|
+
if (call.name === 'bash' || call.name === 'shell') {
|
|
31
|
+
const cmd = typeof call.args === 'object' && call.args !== null
|
|
32
|
+
? call.args.command || call.args.cmd
|
|
33
|
+
: call.args;
|
|
34
|
+
steps.push(`${stepNum}. Run \`${cmd}\``);
|
|
35
|
+
stepNum++;
|
|
36
|
+
}
|
|
37
|
+
else if (call.name === 'read') {
|
|
38
|
+
const filePath = typeof call.args === 'object' && call.args !== null
|
|
39
|
+
? call.args.path || call.args.filePath
|
|
40
|
+
: call.args;
|
|
41
|
+
steps.push(`${stepNum}. Read \`${filePath}\``);
|
|
42
|
+
stepNum++;
|
|
43
|
+
}
|
|
44
|
+
else if (call.name === 'write' || call.name === 'edit') {
|
|
45
|
+
const filePath = typeof call.args === 'object' && call.args !== null
|
|
46
|
+
? call.args.path || call.args.filePath
|
|
47
|
+
: call.args;
|
|
48
|
+
steps.push(`${stepNum}. Modify \`${filePath}\``);
|
|
49
|
+
stepNum++;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return steps.join('\n');
|
|
53
|
+
}
|
|
54
|
+
function extractPitfalls(trace) {
|
|
55
|
+
const pitfalls = [];
|
|
56
|
+
const failedTools = trace.toolCalls.filter((t) => !t.success);
|
|
57
|
+
if (failedTools.length > 0) {
|
|
58
|
+
for (const fail of failedTools) {
|
|
59
|
+
pitfalls.push(`- ${fail.name} may fail with certain inputs — verify before relying on it`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return pitfalls.join('\n');
|
|
63
|
+
}
|
|
64
|
+
function toKebabCase(text) {
|
|
65
|
+
return text
|
|
66
|
+
.toLowerCase()
|
|
67
|
+
.replace(/[^a-z0-9\s-]/g, '')
|
|
68
|
+
.replace(/\s+/g, '-')
|
|
69
|
+
.replace(/-+/g, '-')
|
|
70
|
+
.replace(/^-|-$/g, '')
|
|
71
|
+
.slice(0, 80);
|
|
72
|
+
}
|
|
73
|
+
export function generateSkillContent(trace) {
|
|
74
|
+
const summary = extractSessionSummary(trace);
|
|
75
|
+
const userMsgs = trace.messages.filter((m) => m.role === 'user');
|
|
76
|
+
const rawContent = userMsgs[0]?.content || 'Unknown task';
|
|
77
|
+
const firstUserMsg = typeof rawContent === 'string'
|
|
78
|
+
? rawContent
|
|
79
|
+
: rawContent.filter((c) => c.type === 'text').map((c) => c.text).join(' ');
|
|
80
|
+
const name = firstUserMsg.length > 60
|
|
81
|
+
? firstUserMsg.slice(0, 57).trim()
|
|
82
|
+
: firstUserMsg;
|
|
83
|
+
const id = toKebabCase(name) || `skill-${Date.now()}`;
|
|
84
|
+
const description = `Auto-generated from session: ${firstUserMsg.slice(0, 100)}`;
|
|
85
|
+
const whenToUse = `when the user needs to ${firstUserMsg.toLowerCase().slice(0, 100)}`;
|
|
86
|
+
const procedure = extractProcedure(trace);
|
|
87
|
+
const pitfalls = extractPitfalls(trace);
|
|
88
|
+
const content = `---
|
|
89
|
+
name: ${name}
|
|
90
|
+
description: ${description}
|
|
91
|
+
when_to_use: ${whenToUse}
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
# ${name}
|
|
95
|
+
|
|
96
|
+
## Context
|
|
97
|
+
${summary}
|
|
98
|
+
|
|
99
|
+
## Steps
|
|
100
|
+
${procedure || '1. Analyze the task requirements\n2. Implement the solution\n3. Verify the result'}
|
|
101
|
+
|
|
102
|
+
${pitfalls ? `## Pitfalls\n${pitfalls}` : ''}
|
|
103
|
+
`;
|
|
104
|
+
return { id, name, description, whenToUse, content };
|
|
105
|
+
}
|
|
106
|
+
export async function synthesizeSkill(trace, existingSkills) {
|
|
107
|
+
if (!isSessionEligibleForSynthesis(trace))
|
|
108
|
+
return null;
|
|
109
|
+
const { id, name, description, whenToUse, content } = generateSkillContent(trace);
|
|
110
|
+
const similar = await findSimilarSkill(name, description, whenToUse, existingSkills);
|
|
111
|
+
if (similar) {
|
|
112
|
+
await evolveSkill(similar.name, { description, whenToUse }, content);
|
|
113
|
+
return { id: similar.name, action: 'evolved' };
|
|
114
|
+
}
|
|
115
|
+
const meta = {
|
|
116
|
+
id,
|
|
117
|
+
name,
|
|
118
|
+
description,
|
|
119
|
+
whenToUse,
|
|
120
|
+
tags: [],
|
|
121
|
+
useCount: 0,
|
|
122
|
+
version: 1,
|
|
123
|
+
createdAt: new Date().toISOString(),
|
|
124
|
+
updatedAt: new Date().toISOString(),
|
|
125
|
+
origin: 'learned',
|
|
126
|
+
};
|
|
127
|
+
await saveEvolvingSkill(meta, content);
|
|
128
|
+
return { id, action: 'created' };
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=skill-synth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-synth.js","sourceRoot":"","sources":["../src/skill-synth.ts"],"names":[],"mappings":"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"}
|
package/dist/skill.d.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export interface SkillMetadata {
|
|
2
|
+
name: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
whenToUse?: string;
|
|
5
|
+
allowedTools?: string[];
|
|
6
|
+
disallowedTools?: string[];
|
|
7
|
+
model?: string;
|
|
8
|
+
effort?: string;
|
|
9
|
+
context?: 'fork';
|
|
10
|
+
version?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface Skill extends SkillMetadata {
|
|
13
|
+
location: string;
|
|
14
|
+
content: string;
|
|
15
|
+
files: string[];
|
|
16
|
+
tags: string[];
|
|
17
|
+
}
|
|
18
|
+
export interface SkillDiscoveryOptions {
|
|
19
|
+
projectRoot?: string;
|
|
20
|
+
homeDir?: string;
|
|
21
|
+
customPaths?: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface MatchResult {
|
|
24
|
+
skill: Skill;
|
|
25
|
+
score: number;
|
|
26
|
+
}
|
|
27
|
+
export interface SkillIndex {
|
|
28
|
+
docCount: number;
|
|
29
|
+
idf: Map<string, number>;
|
|
30
|
+
vectors: Map<string, Map<string, number>>;
|
|
31
|
+
skills: Map<string, Skill>;
|
|
32
|
+
}
|
|
33
|
+
export declare function buildIndex(skills: Skill[]): SkillIndex;
|
|
34
|
+
export declare function matchSkills(query: string, index: SkillIndex, options?: {
|
|
35
|
+
topK?: number;
|
|
36
|
+
threshold?: number;
|
|
37
|
+
}): MatchResult[];
|
|
38
|
+
export declare function getSkillIndex(skillsOrProjectRoot: Map<string, Skill> | string): Promise<SkillIndex>;
|
|
39
|
+
export declare function invalidateSkillIndex(projectRoot?: string): void;
|
|
40
|
+
export declare function discoverSkills(options?: SkillDiscoveryOptions): Promise<Map<string, Skill>>;
|
|
41
|
+
export declare function getSkillDescription(skill: Skill): string;
|
|
42
|
+
export declare function formatSkillCatalogEntry(skill: Skill): string;
|
|
43
|
+
export declare function buildAvailableSkillsBlock(skills: Skill[]): string;
|
|
44
|
+
export declare function substituteVariables(template: string, args: string, skillDir: string): string;
|
|
45
|
+
export declare function loadSkillContent(skill: Skill, args: string): Promise<string>;
|
|
46
|
+
//# sourceMappingURL=skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,KAAM,SAAQ,aAAa;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAwKD,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC3B;AAqDD,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAsBtD;AAgBD,wBAAgB,WAAW,CAC1B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACjD,WAAW,EAAE,CAqBf;AAOD,wBAAsB,aAAa,CAClC,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,GAC9C,OAAO,CAAC,UAAU,CAAC,CAcrB;AAED,wBAAgB,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAG/D;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CA4DrG;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAKxD;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAI5D;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAMjE;AAED,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACd,MAAM,CAMR;AAED,wBAAsB,gBAAgB,CACrC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAUjB"}
|
package/dist/skill.js
ADDED
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
const SKILL_FILE = 'SKILL.md';
|
|
4
|
+
async function fileExists(p) {
|
|
5
|
+
try {
|
|
6
|
+
await fs.access(p);
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
async function readSkillFile(skillDir) {
|
|
14
|
+
const skillPath = path.join(skillDir, SKILL_FILE);
|
|
15
|
+
if (!(await fileExists(skillPath)))
|
|
16
|
+
return null;
|
|
17
|
+
const content = await fs.readFile(skillPath, 'utf-8');
|
|
18
|
+
const parsed = parseSkillFrontmatter(content);
|
|
19
|
+
const files = [];
|
|
20
|
+
try {
|
|
21
|
+
const entries = await fs.readdir(skillDir, { withFileTypes: true });
|
|
22
|
+
for (const entry of entries) {
|
|
23
|
+
if (entry.name === SKILL_FILE)
|
|
24
|
+
continue;
|
|
25
|
+
if (entry.isDirectory()) {
|
|
26
|
+
const subFiles = await readDirRecursive(path.join(skillDir, entry.name));
|
|
27
|
+
files.push(...subFiles.map((f) => path.relative(skillDir, f)));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
files.push(entry.name);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Directory read failed, return what we have
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
...parsed,
|
|
39
|
+
location: skillDir,
|
|
40
|
+
content,
|
|
41
|
+
files,
|
|
42
|
+
tags: extractTags(parsed.name, skillDir, parsed, content),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
async function readDirRecursive(dir) {
|
|
46
|
+
const results = [];
|
|
47
|
+
try {
|
|
48
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
49
|
+
for (const entry of entries) {
|
|
50
|
+
const fullPath = path.join(dir, entry.name);
|
|
51
|
+
if (entry.isDirectory()) {
|
|
52
|
+
results.push(...await readDirRecursive(fullPath));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
results.push(fullPath);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Ignore read errors
|
|
61
|
+
}
|
|
62
|
+
return results;
|
|
63
|
+
}
|
|
64
|
+
function parseSkillFrontmatter(content) {
|
|
65
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
66
|
+
if (!match)
|
|
67
|
+
return { name: '' };
|
|
68
|
+
const yaml = match[1];
|
|
69
|
+
const meta = { name: '' };
|
|
70
|
+
for (const line of yaml.split(/\r?\n/)) {
|
|
71
|
+
const colonIdx = line.indexOf(':');
|
|
72
|
+
if (colonIdx === -1)
|
|
73
|
+
continue;
|
|
74
|
+
const key = line.slice(0, colonIdx).trim();
|
|
75
|
+
const value = line.slice(colonIdx + 1).trim();
|
|
76
|
+
switch (key) {
|
|
77
|
+
case 'name':
|
|
78
|
+
meta.name = value;
|
|
79
|
+
break;
|
|
80
|
+
case 'description':
|
|
81
|
+
meta.description = value;
|
|
82
|
+
break;
|
|
83
|
+
case 'when_to_use':
|
|
84
|
+
meta.whenToUse = value;
|
|
85
|
+
break;
|
|
86
|
+
case 'allowed-tools':
|
|
87
|
+
meta.allowedTools = value.split(/\s+/).filter(Boolean);
|
|
88
|
+
break;
|
|
89
|
+
case 'disallowed-tools':
|
|
90
|
+
meta.disallowedTools = value.split(/\s+/).filter(Boolean);
|
|
91
|
+
break;
|
|
92
|
+
case 'model':
|
|
93
|
+
meta.model = value;
|
|
94
|
+
break;
|
|
95
|
+
case 'effort':
|
|
96
|
+
meta.effort = value;
|
|
97
|
+
break;
|
|
98
|
+
case 'context':
|
|
99
|
+
meta.context = value;
|
|
100
|
+
break;
|
|
101
|
+
case 'version':
|
|
102
|
+
meta.version = value;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return meta;
|
|
107
|
+
}
|
|
108
|
+
// ── Auto-tag extraction ──────────────────────────────────────────────
|
|
109
|
+
const STOP_WORDS = new Set([
|
|
110
|
+
'the', 'and', 'for', 'that', 'this', 'with', 'from', 'are', 'was',
|
|
111
|
+
'were', 'been', 'have', 'has', 'had', 'but', 'not', 'you', 'all',
|
|
112
|
+
'can', 'her', 'his', 'one', 'our', 'out', 'use', 'how', 'its',
|
|
113
|
+
'let', 'may', 'who', 'did', 'get', 'she', 'him', 'old', 'see',
|
|
114
|
+
'now', 'way', 'each', 'make', 'like', 'than', 'them', 'then',
|
|
115
|
+
'what', 'when', 'will', 'more', 'some', 'just', 'also', 'into',
|
|
116
|
+
'over', 'such', 'take', 'only', 'very', 'much', 'here', 'there',
|
|
117
|
+
'these', 'those', 'about', 'would', 'could', 'should', 'other',
|
|
118
|
+
'which', 'their', 'after', 'before', 'being', 'between', 'only',
|
|
119
|
+
]);
|
|
120
|
+
function extractTags(name, skillDir, meta, body) {
|
|
121
|
+
const tags = new Set();
|
|
122
|
+
// 1. Category from directory path (e.g., "debugging", "collaboration")
|
|
123
|
+
const pathParts = skillDir.replace(/\\/g, '/').split('/');
|
|
124
|
+
const skillsIdx = pathParts.findIndex((p) => p === 'skills');
|
|
125
|
+
if (skillsIdx >= 0 && skillsIdx < pathParts.length - 1) {
|
|
126
|
+
const category = pathParts[skillsIdx + 1];
|
|
127
|
+
if (category && !category.startsWith('.'))
|
|
128
|
+
tags.add(category.toLowerCase());
|
|
129
|
+
}
|
|
130
|
+
// 2. Name/ID segments (kebab-case → individual words)
|
|
131
|
+
const slug = name.toLowerCase().replace(/[^a-z0-9\s-]/g, '');
|
|
132
|
+
for (const seg of slug.split(/[\s-]+/)) {
|
|
133
|
+
if (seg.length > 2 && !STOP_WORDS.has(seg))
|
|
134
|
+
tags.add(seg);
|
|
135
|
+
}
|
|
136
|
+
// 3. Section headers from body (## Heading → heading words)
|
|
137
|
+
const headers = body.match(/^#+\s+(.+)$/gm);
|
|
138
|
+
if (headers) {
|
|
139
|
+
for (const h of headers) {
|
|
140
|
+
const text = h.replace(/^#+\s+/, '').toLowerCase();
|
|
141
|
+
for (const word of text.split(/\s+/)) {
|
|
142
|
+
const clean = word.replace(/[^a-z0-9]/g, '');
|
|
143
|
+
if (clean.length > 3 && !STOP_WORDS.has(clean))
|
|
144
|
+
tags.add(clean);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// 4. Keywords from description and whenToUse
|
|
149
|
+
for (const field of [meta.description, meta.whenToUse]) {
|
|
150
|
+
if (!field)
|
|
151
|
+
continue;
|
|
152
|
+
const words = field.toLowerCase().replace(/[^a-z0-9\s]/g, '').split(/\s+/);
|
|
153
|
+
for (const w of words) {
|
|
154
|
+
if (w.length > 3 && !STOP_WORDS.has(w))
|
|
155
|
+
tags.add(w);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return [...tags].slice(0, 30);
|
|
159
|
+
}
|
|
160
|
+
function tokenize(text) {
|
|
161
|
+
return text
|
|
162
|
+
.toLowerCase()
|
|
163
|
+
.replace(/[^a-z0-9\s-]/g, ' ')
|
|
164
|
+
.split(/\s+/)
|
|
165
|
+
.filter((w) => w.length > 1 && !STOP_WORDS.has(w));
|
|
166
|
+
}
|
|
167
|
+
function computeTf(tokens) {
|
|
168
|
+
const freq = new Map();
|
|
169
|
+
for (const t of tokens)
|
|
170
|
+
freq.set(t, (freq.get(t) ?? 0) + 1);
|
|
171
|
+
const len = tokens.length || 1;
|
|
172
|
+
const tf = new Map();
|
|
173
|
+
for (const [term, count] of freq)
|
|
174
|
+
tf.set(term, count / len);
|
|
175
|
+
return tf;
|
|
176
|
+
}
|
|
177
|
+
function computeIdf(allTokenSets) {
|
|
178
|
+
const df = new Map();
|
|
179
|
+
const totalDocs = allTokenSets.size;
|
|
180
|
+
for (const [, tokens] of allTokenSets) {
|
|
181
|
+
const unique = new Set(tokens);
|
|
182
|
+
for (const t of unique)
|
|
183
|
+
df.set(t, (df.get(t) ?? 0) + 1);
|
|
184
|
+
}
|
|
185
|
+
const idf = new Map();
|
|
186
|
+
for (const [term, docFreq] of df) {
|
|
187
|
+
idf.set(term, Math.log((totalDocs + 1) / (docFreq + 1)) + 1);
|
|
188
|
+
}
|
|
189
|
+
return idf;
|
|
190
|
+
}
|
|
191
|
+
function buildVector(tf, idf) {
|
|
192
|
+
const vec = new Map();
|
|
193
|
+
for (const [term, tfVal] of tf) {
|
|
194
|
+
const idfVal = idf.get(term) ?? Math.log(2);
|
|
195
|
+
vec.set(term, tfVal * idfVal);
|
|
196
|
+
}
|
|
197
|
+
return vec;
|
|
198
|
+
}
|
|
199
|
+
function skillToText(skill) {
|
|
200
|
+
const parts = [
|
|
201
|
+
skill.name,
|
|
202
|
+
skill.description ?? '',
|
|
203
|
+
skill.whenToUse ?? '',
|
|
204
|
+
...skill.tags,
|
|
205
|
+
...skill.tags,
|
|
206
|
+
];
|
|
207
|
+
return parts.join(' ');
|
|
208
|
+
}
|
|
209
|
+
export function buildIndex(skills) {
|
|
210
|
+
if (skills.length === 0)
|
|
211
|
+
return { docCount: 0, idf: new Map(), vectors: new Map(), skills: new Map() };
|
|
212
|
+
const allTokenSets = new Map();
|
|
213
|
+
const allTfs = new Map();
|
|
214
|
+
const skillMap = new Map();
|
|
215
|
+
for (const skill of skills) {
|
|
216
|
+
const id = skill.name;
|
|
217
|
+
const text = skillToText(skill);
|
|
218
|
+
const tokens = tokenize(text);
|
|
219
|
+
const tf = computeTf(tokens);
|
|
220
|
+
allTfs.set(id, tf);
|
|
221
|
+
allTokenSets.set(id, tokens);
|
|
222
|
+
skillMap.set(id, skill);
|
|
223
|
+
}
|
|
224
|
+
const idf = computeIdf(allTokenSets);
|
|
225
|
+
const vectors = new Map();
|
|
226
|
+
for (const [id, tf] of allTfs)
|
|
227
|
+
vectors.set(id, buildVector(tf, idf));
|
|
228
|
+
return { docCount: skills.length, idf, vectors, skills: skillMap };
|
|
229
|
+
}
|
|
230
|
+
function cosineSimilarity(a, b) {
|
|
231
|
+
let dot = 0;
|
|
232
|
+
let normA = 0;
|
|
233
|
+
let normB = 0;
|
|
234
|
+
for (const [term, val] of a) {
|
|
235
|
+
normA += val * val;
|
|
236
|
+
const bVal = b.get(term);
|
|
237
|
+
if (bVal !== undefined)
|
|
238
|
+
dot += val * bVal;
|
|
239
|
+
}
|
|
240
|
+
for (const [, val] of b)
|
|
241
|
+
normB += val * val;
|
|
242
|
+
if (normA === 0 || normB === 0)
|
|
243
|
+
return 0;
|
|
244
|
+
return dot / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
245
|
+
}
|
|
246
|
+
export function matchSkills(query, index, options = {}) {
|
|
247
|
+
const { topK = 5, threshold = 0.05 } = options;
|
|
248
|
+
if (index.docCount === 0)
|
|
249
|
+
return [];
|
|
250
|
+
const queryTokens = tokenize(query);
|
|
251
|
+
if (queryTokens.length === 0)
|
|
252
|
+
return [];
|
|
253
|
+
const queryTf = computeTf(queryTokens);
|
|
254
|
+
const queryVec = buildVector(queryTf, index.idf);
|
|
255
|
+
const results = [];
|
|
256
|
+
for (const [id, docVec] of index.vectors) {
|
|
257
|
+
const score = cosineSimilarity(queryVec, docVec);
|
|
258
|
+
if (score < threshold)
|
|
259
|
+
continue;
|
|
260
|
+
const skill = index.skills.get(id);
|
|
261
|
+
if (!skill)
|
|
262
|
+
continue;
|
|
263
|
+
results.push({ skill, score });
|
|
264
|
+
}
|
|
265
|
+
results.sort((a, b) => b.score - a.score);
|
|
266
|
+
return results.slice(0, topK);
|
|
267
|
+
}
|
|
268
|
+
// ── Index cache ──────────────────────────────────────────────────────
|
|
269
|
+
const indexCache = new Map();
|
|
270
|
+
const INDEX_TTL_MS = 60_000;
|
|
271
|
+
export async function getSkillIndex(skillsOrProjectRoot) {
|
|
272
|
+
const now = Date.now();
|
|
273
|
+
if (typeof skillsOrProjectRoot === 'string') {
|
|
274
|
+
const root = skillsOrProjectRoot;
|
|
275
|
+
const hit = indexCache.get(root);
|
|
276
|
+
if (hit && now - hit.builtAt < INDEX_TTL_MS)
|
|
277
|
+
return hit.index;
|
|
278
|
+
const skills = await discoverSkills({ projectRoot: root });
|
|
279
|
+
const index = buildIndex([...skills.values()]);
|
|
280
|
+
indexCache.set(root, { index, builtAt: now });
|
|
281
|
+
return index;
|
|
282
|
+
}
|
|
283
|
+
return buildIndex([...skillsOrProjectRoot.values()]);
|
|
284
|
+
}
|
|
285
|
+
export function invalidateSkillIndex(projectRoot) {
|
|
286
|
+
if (projectRoot)
|
|
287
|
+
indexCache.delete(projectRoot);
|
|
288
|
+
else
|
|
289
|
+
indexCache.clear();
|
|
290
|
+
}
|
|
291
|
+
export async function discoverSkills(options = {}) {
|
|
292
|
+
const skills = new Map();
|
|
293
|
+
const homeDir = options.homeDir ?? process.env.HOME ?? process.env.USERPROFILE ?? '';
|
|
294
|
+
const projectRoot = options.projectRoot ?? process.cwd();
|
|
295
|
+
const searchPaths = [];
|
|
296
|
+
// Project-level: .claude/skills/ and .agents/skills/
|
|
297
|
+
searchPaths.push(path.join(projectRoot, '.claude', 'skills'), path.join(projectRoot, '.agents', 'skills'));
|
|
298
|
+
// User-level: ~/.claude/skills/ and ~/.agents/skills/
|
|
299
|
+
if (homeDir) {
|
|
300
|
+
searchPaths.push(path.join(homeDir, '.claude', 'skills'), path.join(homeDir, '.agents', 'skills'));
|
|
301
|
+
}
|
|
302
|
+
// Custom paths
|
|
303
|
+
if (options.customPaths) {
|
|
304
|
+
searchPaths.push(...options.customPaths);
|
|
305
|
+
}
|
|
306
|
+
for (const searchPath of searchPaths) {
|
|
307
|
+
if (!(await fileExists(searchPath)))
|
|
308
|
+
continue;
|
|
309
|
+
try {
|
|
310
|
+
const entries = await fs.readdir(searchPath, { withFileTypes: true });
|
|
311
|
+
for (const entry of entries) {
|
|
312
|
+
if (!entry.isDirectory())
|
|
313
|
+
continue;
|
|
314
|
+
const skillDir = path.join(searchPath, entry.name);
|
|
315
|
+
const skill = await readSkillFile(skillDir);
|
|
316
|
+
if (skill && skill.name) {
|
|
317
|
+
skills.set(skill.name, skill);
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
// Category directory — scan subdirectories for SKILL.md
|
|
321
|
+
try {
|
|
322
|
+
const subEntries = await fs.readdir(skillDir, { withFileTypes: true });
|
|
323
|
+
for (const sub of subEntries) {
|
|
324
|
+
if (!sub.isDirectory())
|
|
325
|
+
continue;
|
|
326
|
+
const subSkillDir = path.join(skillDir, sub.name);
|
|
327
|
+
const subSkill = await readSkillFile(subSkillDir);
|
|
328
|
+
if (subSkill && subSkill.name) {
|
|
329
|
+
skills.set(subSkill.name, subSkill);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
// Skip unreadable subdirectories
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
catch {
|
|
340
|
+
// Skip unreadable directories
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return skills;
|
|
344
|
+
}
|
|
345
|
+
export function getSkillDescription(skill) {
|
|
346
|
+
const parts = [];
|
|
347
|
+
if (skill.whenToUse)
|
|
348
|
+
parts.push(skill.whenToUse);
|
|
349
|
+
if (skill.description)
|
|
350
|
+
parts.push(skill.description);
|
|
351
|
+
return parts.join(' ') || `Skill: ${skill.name}`;
|
|
352
|
+
}
|
|
353
|
+
export function formatSkillCatalogEntry(skill) {
|
|
354
|
+
const desc = getSkillDescription(skill);
|
|
355
|
+
const tags = skill.tags.length > 0 ? ` [${skill.tags.slice(0, 5).join(', ')}]` : '';
|
|
356
|
+
return `- ${skill.name} — ${desc}${tags}`;
|
|
357
|
+
}
|
|
358
|
+
export function buildAvailableSkillsBlock(skills) {
|
|
359
|
+
if (skills.length === 0)
|
|
360
|
+
return '';
|
|
361
|
+
const lines = skills.map((s) => formatSkillCatalogEntry(s));
|
|
362
|
+
return `## Available Skills\n${lines.join('\n')}`;
|
|
363
|
+
}
|
|
364
|
+
export function substituteVariables(template, args, skillDir) {
|
|
365
|
+
return template
|
|
366
|
+
.replace(/\$ARGUMENTS/g, args)
|
|
367
|
+
.replace(/\$0/g, args)
|
|
368
|
+
.replace(/\$\{SPECTRA_SKILL_DIR\}/g, skillDir)
|
|
369
|
+
.replace(/\$\{SPECTRA_SKILL_DIR\}/g, skillDir);
|
|
370
|
+
}
|
|
371
|
+
export async function loadSkillContent(skill, args) {
|
|
372
|
+
let content = skill.content;
|
|
373
|
+
// Remove frontmatter
|
|
374
|
+
content = content.replace(/^---\n[\s\S]*?\n---\n*/, '');
|
|
375
|
+
// Substitute variables
|
|
376
|
+
content = substituteVariables(content, args, skill.location);
|
|
377
|
+
return content;
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AA2BlC,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B,KAAK,UAAU,UAAU,CAAC,CAAS;IAClC,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;gBAAE,SAAS;YACxC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACP,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,6CAA6C;IAC9C,CAAC;IAED,OAAO;QACN,GAAG,MAAM;QACT,QAAQ,EAAE,QAAQ;QAClB,OAAO;QACP,KAAK;QACL,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;KACzD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,qBAAqB;IACtB,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAe;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAEhC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,IAAI,GAAkB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,QAAQ,KAAK,CAAC,CAAC;YAAE,SAAS;QAE9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE9C,QAAQ,GAAG,EAAE,CAAC;YACb,KAAK,MAAM;gBACV,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,MAAM;YACP,KAAK,aAAa;gBACjB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,MAAM;YACP,KAAK,aAAa;gBACjB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,MAAM;YACP,KAAK,eAAe;gBACnB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACvD,MAAM;YACP,KAAK,kBAAkB;gBACtB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1D,MAAM;YACP,KAAK,OAAO;gBACX,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,MAAM;YACP,KAAK,QAAQ;gBACZ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,MAAM;YACP,KAAK,SAAS;gBACb,IAAI,CAAC,OAAO,GAAG,KAAe,CAAC;gBAC/B,MAAM;YACP,KAAK,SAAS;gBACb,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,MAAM;QACR,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,wEAAwE;AAExE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IAC1B,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IACjE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IAChE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IAC7D,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IAC7D,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC5D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAC/D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;IAC9D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM;CAC/D,CAAC,CAAC;AAEH,SAAS,WAAW,CAAC,IAAY,EAAE,QAAgB,EAAE,IAAmB,EAAE,IAAY;IACrF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,uEAAuE;IACvE,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC7D,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAC1C,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,sDAAsD;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED,4DAA4D;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,OAAO,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACnD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBAC7C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjE,CAAC;QACF,CAAC;IACF,CAAC;IAED,6CAA6C;IAC7C,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3E,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;IACF,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC;AAgBD,SAAS,QAAQ,CAAC,IAAY;IAC7B,OAAO,IAAI;SACT,WAAW,EAAE;SACb,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;SAC7B,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,SAAS,CAAC,MAAgB;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI;QAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC;IAC5D,OAAO,EAAE,CAAC;AACX,CAAC;AAED,SAAS,UAAU,CAAC,YAAmC;IACtD,MAAM,EAAE,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC;IACpC,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,SAAS,WAAW,CAAC,EAAuB,EAAE,GAAwB;IACrE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5C,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,SAAS,WAAW,CAAC,KAAY;IAChC,MAAM,KAAK,GAAG;QACb,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,WAAW,IAAI,EAAE;QACvB,KAAK,CAAC,SAAS,IAAI,EAAE;QACrB,GAAG,KAAK,CAAC,IAAI;QACb,GAAG,KAAK,CAAC,IAAI;KACb,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAe;IACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAEvG,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA+B,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiB,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACnB,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA+B,CAAC;IACvD,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAErE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAsB,EAAE,CAAsB;IACvE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC;QACnB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,IAAI,KAAK,SAAS;YAAE,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC;IAC3C,CAAC;IACD,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;QAAE,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC;IAC5C,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACzC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,WAAW,CAC1B,KAAa,EACb,KAAiB,EACjB,UAAiD,EAAE;IAEnD,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAC/C,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAExC,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,KAAK,GAAG,SAAS;YAAE,SAAS;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,wEAAwE;AAExE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkD,CAAC;AAC7E,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,mBAAgD;IAEhD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,IAAI,OAAO,mBAAmB,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,mBAAmB,CAAC;QACjC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,GAAG,YAAY;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/C,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAoB;IACxD,IAAI,WAAW;QAAE,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;;QAC3C,UAAU,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAiC,EAAE;IACvE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IACrF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEzD,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,qDAAqD;IACrD,WAAW,CAAC,IAAI,CACf,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,EAC3C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAC3C,CAAC;IAEF,sDAAsD;IACtD,IAAI,OAAO,EAAE,CAAC;QACb,WAAW,CAAC,IAAI,CACf,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,EACvC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CACvC,CAAC;IACH,CAAC;IAED,eAAe;IACf,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;YAAE,SAAS;QAE9C,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACtE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;oBAAE,SAAS;gBACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC5C,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACzB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACP,wDAAwD;oBACxD,IAAI,CAAC;wBACJ,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;wBACvE,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;4BAC9B,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;gCAAE,SAAS;4BACjC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;4BAClD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;4BAClD,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gCAC/B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;4BACrC,CAAC;wBACF,CAAC;oBACF,CAAC;oBAAC,MAAM,CAAC;wBACR,iCAAiC;oBAClC,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,8BAA8B;QAC/B,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAY;IACnD,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,OAAO,KAAK,KAAK,CAAC,IAAI,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAe;IACxD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5D,OAAO,wBAAwB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,QAAgB,EAChB,IAAY,EACZ,QAAgB;IAEhB,OAAO,QAAQ;SACb,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;SAC7B,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;SACrB,OAAO,CAAC,0BAA0B,EAAE,QAAQ,CAAC;SAC7C,OAAO,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,KAAY,EACZ,IAAY;IAEZ,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAE5B,qBAAqB;IACrB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IAExD,uBAAuB;IACvB,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE7D,OAAO,OAAO,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AgentTool } from '../types.js';
|
|
2
|
+
import type { Skill } from '../skill.js';
|
|
3
|
+
export declare function createSkillTool(skills: Map<string, Skill>): AgentTool;
|
|
4
|
+
export declare function createFindSkillsTool(skills: Map<string, Skill>): AgentTool;
|
|
5
|
+
//# sourceMappingURL=skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/tool/skill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAc,MAAM,aAAa,CAAC;AAIrD,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,SAAS,CAgDrE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,SAAS,CAiF1E"}
|