kagent-ts 0.1.2 → 0.1.4
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/core/agent.d.ts +61 -13
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +55 -14
- package/dist/core/agent.js.map +1 -1
- package/dist/core/hooks.d.ts +8 -2
- package/dist/core/hooks.d.ts.map +1 -1
- package/dist/core/plan-solve-agent.d.ts.map +1 -1
- package/dist/core/plan-solve-agent.js +40 -17
- package/dist/core/plan-solve-agent.js.map +1 -1
- package/dist/core/react-agent.d.ts.map +1 -1
- package/dist/core/react-agent.js +30 -13
- package/dist/core/react-agent.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +8 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/mcp-client-manager.d.ts +64 -0
- package/dist/mcp/mcp-client-manager.d.ts.map +1 -0
- package/dist/mcp/mcp-client-manager.js +224 -0
- package/dist/mcp/mcp-client-manager.js.map +1 -0
- package/dist/mcp/mcp-types.d.ts +58 -0
- package/dist/mcp/mcp-types.d.ts.map +1 -0
- package/dist/mcp/mcp-types.js +20 -0
- package/dist/mcp/mcp-types.js.map +1 -0
- package/dist/skills/file-skill-loader.d.ts +5 -14
- package/dist/skills/file-skill-loader.d.ts.map +1 -1
- package/dist/skills/file-skill-loader.js +28 -146
- package/dist/skills/file-skill-loader.js.map +1 -1
- package/dist/skills/skill-manager.d.ts +6 -23
- package/dist/skills/skill-manager.d.ts.map +1 -1
- package/dist/skills/skill-manager.js +9 -53
- package/dist/skills/skill-manager.js.map +1 -1
- package/dist/skills/types.d.ts +1 -8
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/trace/index.d.ts +4 -0
- package/dist/trace/index.d.ts.map +1 -0
- package/dist/trace/index.js +6 -0
- package/dist/trace/index.js.map +1 -0
- package/dist/trace/trace-logger.d.ts +92 -0
- package/dist/trace/trace-logger.d.ts.map +1 -0
- package/dist/trace/trace-logger.js +463 -0
- package/dist/trace/trace-logger.js.map +1 -0
- package/dist/trace/types.d.ts +20 -0
- package/dist/trace/types.d.ts.map +1 -0
- package/dist/trace/types.js +3 -0
- package/dist/trace/types.js.map +1 -0
- package/package.json +2 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Skill } from "./types";
|
|
2
|
-
import { Tool } from "../tools/types";
|
|
3
2
|
/**
|
|
4
3
|
* Parse YAML-like frontmatter from a Markdown file.
|
|
5
4
|
*
|
|
@@ -32,15 +31,14 @@ export declare function parseKeywords(raw?: string): string[] | undefined;
|
|
|
32
31
|
* skills/
|
|
33
32
|
* ├── <skill-name>/
|
|
34
33
|
* │ ├── SKILL.md # Frontmatter (metadata) + body (system prompt)
|
|
35
|
-
* │
|
|
36
|
-
* │ └── scripts/ # Optional executable scripts
|
|
34
|
+
* │ └── reference/ # Optional reference docs (*.md, *.txt)
|
|
37
35
|
* ├── <another-skill>/
|
|
38
36
|
* │ └── ...
|
|
39
37
|
* ```
|
|
40
38
|
*
|
|
41
39
|
* Loading is two-phase:
|
|
42
40
|
* 1. `scan()` — reads only frontmatter, returns metadata-only `Skill[]`
|
|
43
|
-
* 2. `loadSystemPrompt()`
|
|
41
|
+
* 2. `loadSystemPrompt()` — full content (body + reference docs), called
|
|
44
42
|
* lazily on activation.
|
|
45
43
|
*/
|
|
46
44
|
export declare class FileSkillLoader {
|
|
@@ -55,14 +53,15 @@ export declare class FileSkillLoader {
|
|
|
55
53
|
getDirectory(): string;
|
|
56
54
|
/**
|
|
57
55
|
* Get the absolute path to a named skill's subdirectory.
|
|
56
|
+
* Throws if the skill name contains path traversal characters.
|
|
58
57
|
*/
|
|
59
58
|
getSkillDir(name: string): string;
|
|
60
59
|
/**
|
|
61
60
|
* Scan the skills directory and return metadata-only Skill objects.
|
|
62
61
|
*
|
|
63
62
|
* Reads only the frontmatter from each SKILL.md — the body (systemPrompt)
|
|
64
|
-
*
|
|
65
|
-
*
|
|
63
|
+
* is NOT loaded at this stage. It is loaded lazily when the skill is
|
|
64
|
+
* activated.
|
|
66
65
|
*
|
|
67
66
|
* Subdirectories without a valid SKILL.md (or without a `name` in
|
|
68
67
|
* frontmatter) are skipped with a warning.
|
|
@@ -76,13 +75,5 @@ export declare class FileSkillLoader {
|
|
|
76
75
|
* Throws if the skill directory does not exist.
|
|
77
76
|
*/
|
|
78
77
|
loadSystemPrompt(name: string): string;
|
|
79
|
-
/**
|
|
80
|
-
* Create Tool objects from scripts in the scripts/ subdirectory.
|
|
81
|
-
*
|
|
82
|
-
* Each recognized script file becomes a Tool named `{skillName}_{scriptName}`.
|
|
83
|
-
*
|
|
84
|
-
* Returns an empty array if the scripts/ directory is missing or empty.
|
|
85
|
-
*/
|
|
86
|
-
loadScriptsAsTools(name: string): Tool[];
|
|
87
78
|
}
|
|
88
79
|
//# sourceMappingURL=file-skill-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-skill-loader.d.ts","sourceRoot":"","sources":["../../src/skills/file-skill-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-skill-loader.d.ts","sourceRoot":"","sources":["../../src/skills/file-skill-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIhC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAC7C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;CACd,CAuBA;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAOhE;AAwBD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;IAE1B;;OAEG;gBACS,SAAS,CAAC,EAAE,MAAM;IAI9B;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKjC;;;;;;;;;OASG;IACH,IAAI,IAAI,KAAK,EAAE;IA0Df;;;;;;OAMG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAsCvC"}
|
|
@@ -38,7 +38,6 @@ exports.parseFrontmatter = parseFrontmatter;
|
|
|
38
38
|
exports.parseKeywords = parseKeywords;
|
|
39
39
|
const fs = __importStar(require("fs"));
|
|
40
40
|
const path = __importStar(require("path"));
|
|
41
|
-
const child_process_1 = require("child_process");
|
|
42
41
|
// ─── Frontmatter Parsing ───────────────────────────────────────────────────
|
|
43
42
|
/**
|
|
44
43
|
* Parse YAML-like frontmatter from a Markdown file.
|
|
@@ -69,7 +68,12 @@ function parseFrontmatter(raw) {
|
|
|
69
68
|
if (colonIdx <= 0)
|
|
70
69
|
continue;
|
|
71
70
|
const key = trimmed.slice(0, colonIdx).trim();
|
|
72
|
-
|
|
71
|
+
let value = trimmed.slice(colonIdx + 1).trim();
|
|
72
|
+
// Strip surrounding quotes if both ends match
|
|
73
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
74
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
75
|
+
value = value.slice(1, -1).trim();
|
|
76
|
+
}
|
|
73
77
|
if (key)
|
|
74
78
|
frontmatter[key] = value;
|
|
75
79
|
}
|
|
@@ -89,78 +93,19 @@ function parseKeywords(raw) {
|
|
|
89
93
|
return keywords.length > 0 ? keywords : undefined;
|
|
90
94
|
}
|
|
91
95
|
// ─── Script Execution ──────────────────────────────────────────────────────
|
|
92
|
-
const SUPPORTED_SCRIPT_EXTENSIONS = new Set([
|
|
93
|
-
".sh",
|
|
94
|
-
".bat",
|
|
95
|
-
".cmd",
|
|
96
|
-
".ps1",
|
|
97
|
-
".js",
|
|
98
|
-
".py",
|
|
99
|
-
]);
|
|
100
96
|
const REFERENCE_EXTENSIONS = new Set([".md", ".txt"]);
|
|
101
97
|
/**
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*/
|
|
105
|
-
function getInterpreter(filePath) {
|
|
106
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
107
|
-
switch (ext) {
|
|
108
|
-
case ".sh":
|
|
109
|
-
return ["bash", filePath];
|
|
110
|
-
case ".bat":
|
|
111
|
-
case ".cmd":
|
|
112
|
-
return ["cmd.exe", "/c", filePath];
|
|
113
|
-
case ".ps1":
|
|
114
|
-
return ["powershell.exe", "-File", filePath];
|
|
115
|
-
case ".js":
|
|
116
|
-
return ["node", filePath];
|
|
117
|
-
case ".py":
|
|
118
|
-
// Try python3 first, fall back to python
|
|
119
|
-
try {
|
|
120
|
-
(0, child_process_1.execFileSync)("python3", ["--version"], { timeout: 5000, stdio: "ignore" });
|
|
121
|
-
return ["python3", filePath];
|
|
122
|
-
}
|
|
123
|
-
catch {
|
|
124
|
-
return ["python", filePath];
|
|
125
|
-
}
|
|
126
|
-
default:
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Extract a description for a script tool from the first comment/line
|
|
132
|
-
* of the file, or fall back to a generic description.
|
|
98
|
+
* Validate a skill name to prevent path traversal.
|
|
99
|
+
* Only allows alphanumeric characters, hyphens, underscores, and dots.
|
|
133
100
|
*/
|
|
134
|
-
function
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const firstLine = content.split("\n")[0]?.trim();
|
|
138
|
-
if (firstLine) {
|
|
139
|
-
// Strip common comment markers and shebang
|
|
140
|
-
const clean = firstLine
|
|
141
|
-
.replace(/^#!\s*/, "")
|
|
142
|
-
.replace(/^#\s*/, "")
|
|
143
|
-
.replace(/^\/\/\s*/, "")
|
|
144
|
-
.replace(/^--\s*/, "")
|
|
145
|
-
.trim();
|
|
146
|
-
if (clean && !clean.startsWith("/"))
|
|
147
|
-
return clean;
|
|
148
|
-
}
|
|
101
|
+
function validateSkillName(name) {
|
|
102
|
+
if (!name) {
|
|
103
|
+
throw new Error(`Skill name must not be empty.`);
|
|
149
104
|
}
|
|
150
|
-
|
|
151
|
-
|
|
105
|
+
// Prevent path traversal: reject names with slashes, backslashes, "..", or null bytes
|
|
106
|
+
if (/[/\\]|\.\.|\0/.test(name)) {
|
|
107
|
+
throw new Error(`Invalid skill name "${name}": contains path traversal characters.`);
|
|
152
108
|
}
|
|
153
|
-
return `Execute the ${path.basename(filePath)} script`;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Sanitize a string for use as a tool name (alphanumeric + underscores only).
|
|
157
|
-
*/
|
|
158
|
-
function sanitizeToolName(name) {
|
|
159
|
-
return name
|
|
160
|
-
.toLowerCase()
|
|
161
|
-
.replace(/[^a-z0-9_]/g, "_")
|
|
162
|
-
.replace(/_+/g, "_")
|
|
163
|
-
.replace(/^_|_$/g, "");
|
|
164
109
|
}
|
|
165
110
|
// ─── FileSkillLoader ───────────────────────────────────────────────────────
|
|
166
111
|
/**
|
|
@@ -171,15 +116,14 @@ function sanitizeToolName(name) {
|
|
|
171
116
|
* skills/
|
|
172
117
|
* ├── <skill-name>/
|
|
173
118
|
* │ ├── SKILL.md # Frontmatter (metadata) + body (system prompt)
|
|
174
|
-
* │
|
|
175
|
-
* │ └── scripts/ # Optional executable scripts
|
|
119
|
+
* │ └── reference/ # Optional reference docs (*.md, *.txt)
|
|
176
120
|
* ├── <another-skill>/
|
|
177
121
|
* │ └── ...
|
|
178
122
|
* ```
|
|
179
123
|
*
|
|
180
124
|
* Loading is two-phase:
|
|
181
125
|
* 1. `scan()` — reads only frontmatter, returns metadata-only `Skill[]`
|
|
182
|
-
* 2. `loadSystemPrompt()`
|
|
126
|
+
* 2. `loadSystemPrompt()` — full content (body + reference docs), called
|
|
183
127
|
* lazily on activation.
|
|
184
128
|
*/
|
|
185
129
|
class FileSkillLoader {
|
|
@@ -198,16 +142,18 @@ class FileSkillLoader {
|
|
|
198
142
|
}
|
|
199
143
|
/**
|
|
200
144
|
* Get the absolute path to a named skill's subdirectory.
|
|
145
|
+
* Throws if the skill name contains path traversal characters.
|
|
201
146
|
*/
|
|
202
147
|
getSkillDir(name) {
|
|
148
|
+
validateSkillName(name);
|
|
203
149
|
return path.join(this.directory, name);
|
|
204
150
|
}
|
|
205
151
|
/**
|
|
206
152
|
* Scan the skills directory and return metadata-only Skill objects.
|
|
207
153
|
*
|
|
208
154
|
* Reads only the frontmatter from each SKILL.md — the body (systemPrompt)
|
|
209
|
-
*
|
|
210
|
-
*
|
|
155
|
+
* is NOT loaded at this stage. It is loaded lazily when the skill is
|
|
156
|
+
* activated.
|
|
211
157
|
*
|
|
212
158
|
* Subdirectories without a valid SKILL.md (or without a `name` in
|
|
213
159
|
* frontmatter) are skipped with a warning.
|
|
@@ -244,12 +190,19 @@ class FileSkillLoader {
|
|
|
244
190
|
console.warn(`[Skills] Skipping "${entry.name}": SKILL.md has no "name" in frontmatter`);
|
|
245
191
|
continue;
|
|
246
192
|
}
|
|
193
|
+
try {
|
|
194
|
+
validateSkillName(name);
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
198
|
+
console.warn(`[Skills] Skipping "${entry.name}": ${message}`);
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
247
201
|
skills.push({
|
|
248
202
|
name,
|
|
249
203
|
description: frontmatter.description?.trim() ?? "",
|
|
250
204
|
systemPrompt: "", // Loaded lazily on activation
|
|
251
205
|
keywords: parseKeywords(frontmatter.keywords),
|
|
252
|
-
tools: [], // Loaded lazily on activation
|
|
253
206
|
});
|
|
254
207
|
}
|
|
255
208
|
return skills;
|
|
@@ -289,77 +242,6 @@ class FileSkillLoader {
|
|
|
289
242
|
}
|
|
290
243
|
return parts.join("").trim();
|
|
291
244
|
}
|
|
292
|
-
/**
|
|
293
|
-
* Create Tool objects from scripts in the scripts/ subdirectory.
|
|
294
|
-
*
|
|
295
|
-
* Each recognized script file becomes a Tool named `{skillName}_{scriptName}`.
|
|
296
|
-
*
|
|
297
|
-
* Returns an empty array if the scripts/ directory is missing or empty.
|
|
298
|
-
*/
|
|
299
|
-
loadScriptsAsTools(name) {
|
|
300
|
-
const scriptsDir = path.join(this.getSkillDir(name), "scripts");
|
|
301
|
-
const tools = [];
|
|
302
|
-
let entries;
|
|
303
|
-
try {
|
|
304
|
-
entries = fs.readdirSync(scriptsDir, { withFileTypes: true });
|
|
305
|
-
}
|
|
306
|
-
catch {
|
|
307
|
-
// No scripts/ directory — return empty
|
|
308
|
-
return [];
|
|
309
|
-
}
|
|
310
|
-
for (const entry of entries) {
|
|
311
|
-
if (!entry.isFile())
|
|
312
|
-
continue;
|
|
313
|
-
const ext = path.extname(entry.name).toLowerCase();
|
|
314
|
-
if (!SUPPORTED_SCRIPT_EXTENSIONS.has(ext))
|
|
315
|
-
continue;
|
|
316
|
-
const scriptPath = path.join(scriptsDir, entry.name);
|
|
317
|
-
const scriptName = path.basename(entry.name, ext);
|
|
318
|
-
const toolName = sanitizeToolName(`${name}_${scriptName}`);
|
|
319
|
-
const toolDescription = getScriptDescription(scriptPath);
|
|
320
|
-
const tool = {
|
|
321
|
-
name: toolName,
|
|
322
|
-
description: toolDescription,
|
|
323
|
-
parameters: {
|
|
324
|
-
type: "object",
|
|
325
|
-
properties: {
|
|
326
|
-
args: {
|
|
327
|
-
type: "string",
|
|
328
|
-
description: `Arguments to pass to the ${entry.name} script. ` +
|
|
329
|
-
`Use shell-style syntax (space-separated).`,
|
|
330
|
-
},
|
|
331
|
-
},
|
|
332
|
-
required: ["args"],
|
|
333
|
-
},
|
|
334
|
-
async execute(params) {
|
|
335
|
-
const argsStr = String(params.args ?? "");
|
|
336
|
-
const interpreter = getInterpreter(scriptPath);
|
|
337
|
-
if (!interpreter) {
|
|
338
|
-
return `Error: Unsupported script type "${ext}" for ${entry.name}`;
|
|
339
|
-
}
|
|
340
|
-
const [cmd, ...cmdArgs] = interpreter;
|
|
341
|
-
// Append the script argument after the interpreter args
|
|
342
|
-
const allArgs = argsStr
|
|
343
|
-
? [...cmdArgs, ...argsStr.split(/\s+/).filter(Boolean)]
|
|
344
|
-
: cmdArgs;
|
|
345
|
-
return new Promise((resolve) => {
|
|
346
|
-
const child = (0, child_process_1.execFile)(cmd, allArgs, { timeout: 30000, maxBuffer: 1024 * 1024 }, (err, stdout, stderr) => {
|
|
347
|
-
if (err) {
|
|
348
|
-
const details = stderr
|
|
349
|
-
? `\nstderr:\n${stderr.trim()}`
|
|
350
|
-
: "";
|
|
351
|
-
resolve(`Error executing ${entry.name}: ${err.message}${details}`);
|
|
352
|
-
return;
|
|
353
|
-
}
|
|
354
|
-
resolve(stdout.trim() || "(no output)");
|
|
355
|
-
});
|
|
356
|
-
});
|
|
357
|
-
},
|
|
358
|
-
};
|
|
359
|
-
tools.push(tool);
|
|
360
|
-
}
|
|
361
|
-
return tools;
|
|
362
|
-
}
|
|
363
245
|
}
|
|
364
246
|
exports.FileSkillLoader = FileSkillLoader;
|
|
365
247
|
//# sourceMappingURL=file-skill-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-skill-loader.js","sourceRoot":"","sources":["../../src/skills/file-skill-loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"file-skill-loader.js","sourceRoot":"","sources":["../../src/skills/file-skill-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Skill, SkillStatus } from "./types";
|
|
2
|
-
import { ToolRegistry } from "../tools/tool-registry";
|
|
3
2
|
/**
|
|
4
3
|
* Manages skill registration, activation, and progressive disclosure.
|
|
5
4
|
*
|
|
@@ -8,10 +7,11 @@ import { ToolRegistry } from "../tools/tool-registry";
|
|
|
8
7
|
* core system prompt small while allowing deep expertise to be
|
|
9
8
|
* injected when needed.
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
* 1.
|
|
13
|
-
*
|
|
14
|
-
*
|
|
10
|
+
* Workflow:
|
|
11
|
+
* 1. Skills are registered from a directory (metadata only: name, description, keywords)
|
|
12
|
+
* 2. `buildAvailableSkillsHint()` lists all available skills in the system prompt
|
|
13
|
+
* 3. LLM decides which skill to use → `activate(name)` loads the full content
|
|
14
|
+
* 4. `buildSkillsPrompt()` includes the active skill's full system prompt
|
|
15
15
|
*/
|
|
16
16
|
export declare class SkillManager {
|
|
17
17
|
/** All registered skills (active or not), keyed by name. */
|
|
@@ -24,21 +24,6 @@ export declare class SkillManager {
|
|
|
24
24
|
private fileLoaders;
|
|
25
25
|
/** File-based skills whose full content has been loaded from disk. */
|
|
26
26
|
private loadedFileSkills;
|
|
27
|
-
/** Reference to the ToolRegistry for registering/unregistering skill tools. */
|
|
28
|
-
private toolRegistry?;
|
|
29
|
-
/**
|
|
30
|
-
* @param toolRegistry Optional ToolRegistry — skills with tools
|
|
31
|
-
* will auto-register/unregister there.
|
|
32
|
-
*/
|
|
33
|
-
constructor(toolRegistry?: ToolRegistry);
|
|
34
|
-
/**
|
|
35
|
-
* Bind a ToolRegistry so skill tools are managed automatically.
|
|
36
|
-
*/
|
|
37
|
-
bindToolRegistry(registry: ToolRegistry): void;
|
|
38
|
-
/**
|
|
39
|
-
* Register one or more skills.
|
|
40
|
-
*/
|
|
41
|
-
register(...skills: Skill[]): void;
|
|
42
27
|
/**
|
|
43
28
|
* Unregister a skill by name. Deactivates it first if active.
|
|
44
29
|
*/
|
|
@@ -68,8 +53,7 @@ export declare class SkillManager {
|
|
|
68
53
|
getAll(): Skill[];
|
|
69
54
|
/**
|
|
70
55
|
* Activate a skill by name.
|
|
71
|
-
* -
|
|
72
|
-
* - Registers its tools (if a ToolRegistry is bound).
|
|
56
|
+
* - Lazy-loads the full system prompt from disk (if file-based).
|
|
73
57
|
* - Returns true if the skill was newly activated.
|
|
74
58
|
*/
|
|
75
59
|
activate(name: string): boolean;
|
|
@@ -79,7 +63,6 @@ export declare class SkillManager {
|
|
|
79
63
|
activateMany(names: string[]): string[];
|
|
80
64
|
/**
|
|
81
65
|
* Deactivate a skill.
|
|
82
|
-
* - Unregisters its tools (if a ToolRegistry is bound).
|
|
83
66
|
*/
|
|
84
67
|
deactivate(name: string): boolean;
|
|
85
68
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/skills/skill-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/skills/skill-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG7C;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAY;IACvB,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAiC;IAEjD,wCAAwC;IACxC,OAAO,CAAC,YAAY,CAAiC;IAErD,oDAAoD;IACpD,OAAO,CAAC,WAAW,CAAgC;IAEnD,mEAAmE;IACnE,OAAO,CAAC,WAAW,CAA2C;IAE9D,sEAAsE;IACtE,OAAO,CAAC,gBAAgB,CAA0B;IAIlD;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQjC;;;;;;;;;OASG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IA6B1C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIpC;;OAEG;IACH,MAAM,IAAI,KAAK,EAAE;IAMjB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IA+B/B;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAcvC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAWjC;;OAEG;IACH,aAAa,IAAI,IAAI;IASrB;;;;;;OAMG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA2B1C;;;;;OAKG;IACH,iBAAiB,IAAI,MAAM;IAW3B;;;;;;OAMG;IACH,wBAAwB,IAAI,MAAM;IAgBlC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI/B;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,YAAY,IAAI,WAAW,EAAE;IAY7B;;OAEG;IACH,eAAe,IAAI,WAAW,EAAE;CAGjC"}
|
|
@@ -10,10 +10,11 @@ const file_skill_loader_1 = require("./file-skill-loader");
|
|
|
10
10
|
* core system prompt small while allowing deep expertise to be
|
|
11
11
|
* injected when needed.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
* 1.
|
|
15
|
-
*
|
|
16
|
-
*
|
|
13
|
+
* Workflow:
|
|
14
|
+
* 1. Skills are registered from a directory (metadata only: name, description, keywords)
|
|
15
|
+
* 2. `buildAvailableSkillsHint()` lists all available skills in the system prompt
|
|
16
|
+
* 3. LLM decides which skill to use → `activate(name)` loads the full content
|
|
17
|
+
* 4. `buildSkillsPrompt()` includes the active skill's full system prompt
|
|
17
18
|
*/
|
|
18
19
|
class SkillManager {
|
|
19
20
|
/** All registered skills (active or not), keyed by name. */
|
|
@@ -26,33 +27,7 @@ class SkillManager {
|
|
|
26
27
|
fileLoaders = new Map();
|
|
27
28
|
/** File-based skills whose full content has been loaded from disk. */
|
|
28
29
|
loadedFileSkills = new Set();
|
|
29
|
-
/** Reference to the ToolRegistry for registering/unregistering skill tools. */
|
|
30
|
-
toolRegistry;
|
|
31
|
-
/**
|
|
32
|
-
* @param toolRegistry Optional ToolRegistry — skills with tools
|
|
33
|
-
* will auto-register/unregister there.
|
|
34
|
-
*/
|
|
35
|
-
constructor(toolRegistry) {
|
|
36
|
-
this.toolRegistry = toolRegistry;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Bind a ToolRegistry so skill tools are managed automatically.
|
|
40
|
-
*/
|
|
41
|
-
bindToolRegistry(registry) {
|
|
42
|
-
this.toolRegistry = registry;
|
|
43
|
-
}
|
|
44
30
|
// ─── Registration ────────────────────────────────────────────────────
|
|
45
|
-
/**
|
|
46
|
-
* Register one or more skills.
|
|
47
|
-
*/
|
|
48
|
-
register(...skills) {
|
|
49
|
-
for (const skill of skills) {
|
|
50
|
-
if (this.registry.has(skill.name)) {
|
|
51
|
-
throw new Error(`Skill "${skill.name}" is already registered.`);
|
|
52
|
-
}
|
|
53
|
-
this.registry.set(skill.name, skill);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
31
|
/**
|
|
57
32
|
* Unregister a skill by name. Deactivates it first if active.
|
|
58
33
|
*/
|
|
@@ -60,6 +35,7 @@ class SkillManager {
|
|
|
60
35
|
if (this.activeSkills.has(name)) {
|
|
61
36
|
this.deactivate(name);
|
|
62
37
|
}
|
|
38
|
+
this.fileLoaders.delete(name);
|
|
63
39
|
return this.registry.delete(name);
|
|
64
40
|
}
|
|
65
41
|
/**
|
|
@@ -114,8 +90,7 @@ class SkillManager {
|
|
|
114
90
|
// ─── Activation / Deactivation ───────────────────────────────────────
|
|
115
91
|
/**
|
|
116
92
|
* Activate a skill by name.
|
|
117
|
-
* -
|
|
118
|
-
* - Registers its tools (if a ToolRegistry is bound).
|
|
93
|
+
* - Lazy-loads the full system prompt from disk (if file-based).
|
|
119
94
|
* - Returns true if the skill was newly activated.
|
|
120
95
|
*/
|
|
121
96
|
activate(name) {
|
|
@@ -126,12 +101,11 @@ class SkillManager {
|
|
|
126
101
|
if (this.activeSkills.has(name)) {
|
|
127
102
|
return false; // Already active
|
|
128
103
|
}
|
|
129
|
-
// Lazy-load file-based skills: populate systemPrompt
|
|
104
|
+
// Lazy-load file-based skills: populate systemPrompt from disk
|
|
130
105
|
const loader = this.fileLoaders.get(name);
|
|
131
106
|
if (loader && !this.loadedFileSkills.has(name)) {
|
|
132
107
|
try {
|
|
133
108
|
skill.systemPrompt = loader.loadSystemPrompt(name);
|
|
134
|
-
skill.tools = loader.loadScriptsAsTools(name);
|
|
135
109
|
this.loadedFileSkills.add(name);
|
|
136
110
|
}
|
|
137
111
|
catch (err) {
|
|
@@ -141,17 +115,6 @@ class SkillManager {
|
|
|
141
115
|
}
|
|
142
116
|
this.activeSkills.set(name, skill);
|
|
143
117
|
this.activatedAt.set(name, new Date());
|
|
144
|
-
// Register skill tools if we have a registry
|
|
145
|
-
if (this.toolRegistry && skill.tools) {
|
|
146
|
-
for (const tool of skill.tools) {
|
|
147
|
-
try {
|
|
148
|
-
this.toolRegistry.register(tool);
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
151
|
-
// Tool already registered — skip
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
118
|
return true;
|
|
156
119
|
}
|
|
157
120
|
/**
|
|
@@ -173,18 +136,11 @@ class SkillManager {
|
|
|
173
136
|
}
|
|
174
137
|
/**
|
|
175
138
|
* Deactivate a skill.
|
|
176
|
-
* - Unregisters its tools (if a ToolRegistry is bound).
|
|
177
139
|
*/
|
|
178
140
|
deactivate(name) {
|
|
179
141
|
const skill = this.activeSkills.get(name);
|
|
180
142
|
if (!skill)
|
|
181
143
|
return false;
|
|
182
|
-
// Unregister skill tools
|
|
183
|
-
if (this.toolRegistry && skill.tools) {
|
|
184
|
-
for (const tool of skill.tools) {
|
|
185
|
-
this.toolRegistry.remove(tool.name);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
144
|
this.activeSkills.delete(name);
|
|
189
145
|
this.activatedAt.delete(name);
|
|
190
146
|
// Allow re-activation to reload from disk if the skill files changed
|
|
@@ -243,7 +199,7 @@ class SkillManager {
|
|
|
243
199
|
return "";
|
|
244
200
|
const sections = [];
|
|
245
201
|
for (const skill of active) {
|
|
246
|
-
sections.push(`[Skill: ${skill.name}]\n${skill.systemPrompt}`);
|
|
202
|
+
sections.push(`[Skill: ${skill.name}]\n${skill.systemPrompt ?? ""}`);
|
|
247
203
|
}
|
|
248
204
|
return "\n\n" + sections.join("\n\n");
|
|
249
205
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-manager.js","sourceRoot":"","sources":["../../src/skills/skill-manager.ts"],"names":[],"mappings":";;;AACA,2DAAsD;
|
|
1
|
+
{"version":3,"file":"skill-manager.js","sourceRoot":"","sources":["../../src/skills/skill-manager.ts"],"names":[],"mappings":";;;AACA,2DAAsD;AAEtD;;;;;;;;;;;;;GAaG;AACH,MAAa,YAAY;IACvB,4DAA4D;IACpD,QAAQ,GAAuB,IAAI,GAAG,EAAE,CAAC;IAEjD,wCAAwC;IAChC,YAAY,GAAuB,IAAI,GAAG,EAAE,CAAC;IAErD,oDAAoD;IAC5C,WAAW,GAAsB,IAAI,GAAG,EAAE,CAAC;IAEnD,mEAAmE;IAC3D,WAAW,GAAiC,IAAI,GAAG,EAAE,CAAC;IAE9D,sEAAsE;IAC9D,gBAAgB,GAAgB,IAAI,GAAG,EAAE,CAAC;IAElD,wEAAwE;IAExE;;OAEG;IACH,UAAU,CAAC,IAAY;QACrB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;;;;OASG;IACH,qBAAqB,CAAC,GAAW;QAC/B,MAAM,MAAM,GAAG,IAAI,mCAAe,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,IAAI,CACV,sBAAsB,KAAK,CAAC,IAAI,yCAAyC,CAC1E,CAAC;gBACF,SAAS;YACX,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzC,KAAK,EAAE,CAAC;QACV,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,uBAAuB,KAAK,6BAA6B,GAAG,EAAE;gBAC5D,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK;oBACvB,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,KAAK,WAAW;oBACxC,CAAC,CAAC,EAAE,CAAC,CACV,CAAC;QACJ,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,wEAAwE;IAExE;;;;OAIG;IACH,QAAQ,CAAC,IAAY;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,iBAAiB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtF,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,CAAC,iBAAiB;QACjC,CAAC;QAED,+DAA+D;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC;gBACH,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,gBAAgB,OAAO,EAAE,CACvD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,KAAe;QAC1B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sBAAsB;YACxB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,qEAAqE;QACrE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,aAAa;QACX,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,wEAAwE;IAExE;;;;;;OAMG;IACH,iBAAiB,CAAC,KAAa;QAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,6BAA6B;YAC7B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YAEhD,+BAA+B;YAC/B,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAE7D,qBAAqB;YACrB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACrC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7B,CAAC;oBACD,MAAM,CAAC,gCAAgC;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,wEAAwE;IAExE;;;;;OAKG;IACH,iBAAiB;QACf,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACH,wBAAwB;QACtB,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,OAAO,CACL,sGAAsG;YACtG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAClD,CAAC;IACJ,CAAC;IAED,wEAAwE;IAExE;;OAEG;IACH,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjD,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,MAAM;gBACN,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;aAC3C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;CACF;AArSD,oCAqSC"}
|
package/dist/skills/types.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { Tool } from "../tools/types";
|
|
2
1
|
/**
|
|
3
2
|
* A Skill is a reusable capability that can be loaded into the agent's
|
|
4
3
|
* system prompt on demand (progressive disclosure).
|
|
5
4
|
*
|
|
6
5
|
* Each skill carries:
|
|
7
6
|
* - A system prompt fragment with instructions for the LLM
|
|
8
|
-
* - Optional tools the skill needs
|
|
9
7
|
* - Optional keywords that trigger automatic activation
|
|
10
8
|
*/
|
|
11
9
|
export interface Skill {
|
|
@@ -17,17 +15,12 @@ export interface Skill {
|
|
|
17
15
|
* System prompt content injected into the agent's system message
|
|
18
16
|
* when this skill is activated.
|
|
19
17
|
*/
|
|
20
|
-
systemPrompt
|
|
18
|
+
systemPrompt?: string;
|
|
21
19
|
/**
|
|
22
20
|
* Optional keywords for auto-detection.
|
|
23
21
|
* When user input contains any of these, the skill is activated automatically.
|
|
24
22
|
*/
|
|
25
23
|
keywords?: string[];
|
|
26
|
-
/**
|
|
27
|
-
* Optional tools that this skill provides.
|
|
28
|
-
* These are registered when the skill activates and unregistered on deactivation.
|
|
29
|
-
*/
|
|
30
|
-
tools?: Tool[];
|
|
31
24
|
}
|
|
32
25
|
/**
|
|
33
26
|
* Status of a skill within the SkillManager.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,KAAK;IACpB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IAEb,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/trace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TraceLogger = void 0;
|
|
4
|
+
var trace_logger_1 = require("./trace-logger");
|
|
5
|
+
Object.defineProperty(exports, "TraceLogger", { enumerable: true, get: function () { return trace_logger_1.TraceLogger; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/trace/index.ts"],"names":[],"mappings":";;;AAAA,+CAA6C;AAApC,2GAAA,WAAW,OAAA"}
|