psadk 1.3.6 → 1.4.1
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/CHANGELOG.md +52 -0
- package/README.md +150 -0
- package/build/main/lib/PSAI.d.ts +8 -1
- package/build/main/lib/PSAI.js +128 -75
- package/build/main/lib/PSAgent.js +77 -60
- package/build/main/lib/PSAgentConfig.d.ts +3 -0
- package/build/main/lib/PSAgentLogger.js +12 -9
- package/build/main/lib/PSAgentTask.js +4 -1
- package/build/main/lib/PSAgentTool.js +12 -2
- package/build/main/lib/agent-core/agent-loop.d.ts +23 -0
- package/build/main/lib/agent-core/agent-loop.js +479 -0
- package/build/main/lib/agent-core/agent.d.ts +124 -0
- package/build/main/lib/agent-core/agent.js +402 -0
- package/build/main/lib/agent-core/harness/agent-harness.d.ts +84 -0
- package/build/main/lib/agent-core/harness/agent-harness.js +728 -0
- package/build/main/lib/agent-core/harness/compaction/branch-summarization.d.ts +87 -0
- package/build/main/lib/agent-core/harness/compaction/branch-summarization.js +243 -0
- package/build/main/lib/agent-core/harness/compaction/compaction.d.ts +121 -0
- package/build/main/lib/agent-core/harness/compaction/compaction.js +616 -0
- package/build/main/lib/agent-core/harness/compaction/utils.d.ts +37 -0
- package/build/main/lib/agent-core/harness/compaction/utils.js +153 -0
- package/build/main/lib/agent-core/harness/env/nodejs.d.ts +43 -0
- package/build/main/lib/agent-core/harness/env/nodejs.js +348 -0
- package/build/main/lib/agent-core/harness/execution-env.d.ts +3 -0
- package/build/main/lib/agent-core/harness/execution-env.js +3 -0
- package/build/main/lib/agent-core/harness/messages.d.ts +50 -0
- package/build/main/lib/agent-core/harness/messages.js +102 -0
- package/build/main/lib/agent-core/harness/prompt-templates.d.ts +44 -0
- package/build/main/lib/agent-core/harness/prompt-templates.js +200 -0
- package/build/main/lib/agent-core/harness/session/repo/jsonl.d.ts +19 -0
- package/build/main/lib/agent-core/harness/session/repo/jsonl.js +92 -0
- package/build/main/lib/agent-core/harness/session/repo/memory.d.ts +17 -0
- package/build/main/lib/agent-core/harness/session/repo/memory.js +42 -0
- package/build/main/lib/agent-core/harness/session/repo/shared.d.ts +9 -0
- package/build/main/lib/agent-core/harness/session/repo/shared.js +31 -0
- package/build/main/lib/agent-core/harness/session/session.d.ts +31 -0
- package/build/main/lib/agent-core/harness/session/session.js +196 -0
- package/build/main/lib/agent-core/harness/session/storage/jsonl.d.ts +29 -0
- package/build/main/lib/agent-core/harness/session/storage/jsonl.js +170 -0
- package/build/main/lib/agent-core/harness/session/storage/memory.d.ts +25 -0
- package/build/main/lib/agent-core/harness/session/storage/memory.js +90 -0
- package/build/main/lib/agent-core/harness/skills.d.ts +40 -0
- package/build/main/lib/agent-core/harness/skills.js +259 -0
- package/build/main/lib/agent-core/harness/system-prompt.d.ts +2 -0
- package/build/main/lib/agent-core/harness/system-prompt.js +30 -0
- package/build/main/lib/agent-core/harness/types.d.ts +524 -0
- package/build/main/lib/agent-core/harness/types.js +16 -0
- package/build/main/lib/agent-core/harness/utils/shell-output.d.ts +13 -0
- package/build/main/lib/agent-core/harness/utils/shell-output.js +97 -0
- package/build/main/lib/agent-core/harness/utils/truncate.d.ts +69 -0
- package/build/main/lib/agent-core/harness/utils/truncate.js +205 -0
- package/build/main/lib/agent-core/index.d.ts +19 -0
- package/build/main/lib/agent-core/index.js +25 -0
- package/build/main/lib/agent-core/package.json +3 -0
- package/build/main/lib/agent-core/proxy.d.ts +68 -0
- package/build/main/lib/agent-core/proxy.js +278 -0
- package/build/main/lib/agent-core/types.d.ts +385 -0
- package/build/main/lib/agent-core/types.js +2 -0
- package/build/main/lib/skills/constants.js +6 -4
- package/build/main/lib/skills/skillParser.js +2 -2
- package/build/main/lib/skills/utils.js +8 -10
- package/build/main/lib/tools/BraveWebSearchTool.js +4 -3
- package/build/main/lib/tools/PSArtifactTool.js +3 -3
- package/build/main/lib/tools/PSClarifyTool.js +3 -2
- package/build/main/lib/tools/PSCommandLineTool.js +8 -7
- package/build/main/lib/tools/PSMemoryTool.js +9 -7
- package/build/main/lib/tools/PSReadFileTool.js +3 -3
- package/build/main/lib/tools/PSSkillTool.js +6 -4
- package/build/main/lib/tools/PSSubAgentTool.js +4 -5
- package/build/main/lib/tools/PSWriteFileTool.js +3 -3
- package/build/main/lib/tools/TodoTool.js +8 -4
- package/build/main/lib/utils/helpers.js +2 -13
- package/build/module/lib/PSAI.d.ts +8 -1
- package/build/module/lib/PSAI.js +115 -81
- package/build/module/lib/PSAgentConfig.d.ts +3 -0
- package/build/module/lib/agent-core/agent-loop.d.ts +23 -0
- package/build/module/lib/agent-core/agent-loop.js +479 -0
- package/build/module/lib/agent-core/agent.d.ts +124 -0
- package/build/module/lib/agent-core/agent.js +402 -0
- package/build/module/lib/agent-core/harness/agent-harness.d.ts +84 -0
- package/build/module/lib/agent-core/harness/agent-harness.js +728 -0
- package/build/module/lib/agent-core/harness/compaction/branch-summarization.d.ts +87 -0
- package/build/module/lib/agent-core/harness/compaction/branch-summarization.js +243 -0
- package/build/module/lib/agent-core/harness/compaction/compaction.d.ts +121 -0
- package/build/module/lib/agent-core/harness/compaction/compaction.js +616 -0
- package/build/module/lib/agent-core/harness/compaction/utils.d.ts +37 -0
- package/build/module/lib/agent-core/harness/compaction/utils.js +153 -0
- package/build/module/lib/agent-core/harness/env/nodejs.d.ts +43 -0
- package/build/module/lib/agent-core/harness/env/nodejs.js +348 -0
- package/build/module/lib/agent-core/harness/execution-env.d.ts +3 -0
- package/build/module/lib/agent-core/harness/execution-env.js +3 -0
- package/build/module/lib/agent-core/harness/messages.d.ts +50 -0
- package/build/module/lib/agent-core/harness/messages.js +102 -0
- package/build/module/lib/agent-core/harness/prompt-templates.d.ts +44 -0
- package/build/module/lib/agent-core/harness/prompt-templates.js +200 -0
- package/build/module/lib/agent-core/harness/session/repo/jsonl.d.ts +19 -0
- package/build/module/lib/agent-core/harness/session/repo/jsonl.js +92 -0
- package/build/module/lib/agent-core/harness/session/repo/memory.d.ts +17 -0
- package/build/module/lib/agent-core/harness/session/repo/memory.js +42 -0
- package/build/module/lib/agent-core/harness/session/repo/shared.d.ts +9 -0
- package/build/module/lib/agent-core/harness/session/repo/shared.js +31 -0
- package/build/module/lib/agent-core/harness/session/session.d.ts +31 -0
- package/build/module/lib/agent-core/harness/session/session.js +196 -0
- package/build/module/lib/agent-core/harness/session/storage/jsonl.d.ts +29 -0
- package/build/module/lib/agent-core/harness/session/storage/jsonl.js +170 -0
- package/build/module/lib/agent-core/harness/session/storage/memory.d.ts +25 -0
- package/build/module/lib/agent-core/harness/session/storage/memory.js +90 -0
- package/build/module/lib/agent-core/harness/skills.d.ts +40 -0
- package/build/module/lib/agent-core/harness/skills.js +259 -0
- package/build/module/lib/agent-core/harness/system-prompt.d.ts +2 -0
- package/build/module/lib/agent-core/harness/system-prompt.js +30 -0
- package/build/module/lib/agent-core/harness/types.d.ts +524 -0
- package/build/module/lib/agent-core/harness/types.js +16 -0
- package/build/module/lib/agent-core/harness/utils/shell-output.d.ts +13 -0
- package/build/module/lib/agent-core/harness/utils/shell-output.js +97 -0
- package/build/module/lib/agent-core/harness/utils/truncate.d.ts +69 -0
- package/build/module/lib/agent-core/harness/utils/truncate.js +205 -0
- package/build/module/lib/agent-core/index.d.ts +19 -0
- package/build/module/lib/agent-core/index.js +25 -0
- package/build/module/lib/agent-core/proxy.d.ts +68 -0
- package/build/module/lib/agent-core/proxy.js +278 -0
- package/build/module/lib/agent-core/types.d.ts +385 -0
- package/build/module/lib/agent-core/types.js +2 -0
- package/build/module/lib/tools/PSSkillTool.js +1 -1
- package/package.json +20 -3
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import ignore from "ignore";
|
|
2
|
+
import { parse } from "yaml";
|
|
3
|
+
const MAX_NAME_LENGTH = 64;
|
|
4
|
+
const MAX_DESCRIPTION_LENGTH = 1024;
|
|
5
|
+
const IGNORE_FILE_NAMES = [".gitignore", ".ignore", ".fdignore"];
|
|
6
|
+
/** Format a skill invocation prompt, optionally appending additional user instructions. */
|
|
7
|
+
export function formatSkillInvocation(skill, additionalInstructions) {
|
|
8
|
+
const skillBlock = `<skill name="${skill.name}" location="${skill.filePath}">\nReferences are relative to ${dirnameEnvPath(skill.filePath)}.\n\n${skill.content}\n</skill>`;
|
|
9
|
+
return additionalInstructions ? `${skillBlock}\n\n${additionalInstructions}` : skillBlock;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Load skills from one or more directories.
|
|
13
|
+
*
|
|
14
|
+
* Traverses directories recursively, loads `SKILL.md` files, loads direct root `.md` files as skills, honors ignore files,
|
|
15
|
+
* and returns diagnostics for invalid skill files. Missing input directories are skipped.
|
|
16
|
+
*/
|
|
17
|
+
export async function loadSkills(env, dirs) {
|
|
18
|
+
const skills = [];
|
|
19
|
+
const diagnostics = [];
|
|
20
|
+
for (const dir of Array.isArray(dirs) ? dirs : [dirs]) {
|
|
21
|
+
const rootInfo = await safeFileInfo(env, dir);
|
|
22
|
+
if (!rootInfo || (await resolveKind(env, rootInfo)) !== "directory")
|
|
23
|
+
continue;
|
|
24
|
+
const result = await loadSkillsFromDirInternal(env, rootInfo.path, true, ignore(), rootInfo.path);
|
|
25
|
+
skills.push(...result.skills);
|
|
26
|
+
diagnostics.push(...result.diagnostics);
|
|
27
|
+
}
|
|
28
|
+
return { skills, diagnostics };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Load skills from source-tagged directories.
|
|
32
|
+
*
|
|
33
|
+
* Source values are preserved exactly and attached to every loaded skill and diagnostic. The agent package does not
|
|
34
|
+
* interpret source values; applications define their own provenance shape.
|
|
35
|
+
*/
|
|
36
|
+
export async function loadSourcedSkills(env, inputs, mapSkill) {
|
|
37
|
+
const skills = [];
|
|
38
|
+
const diagnostics = [];
|
|
39
|
+
for (const input of inputs) {
|
|
40
|
+
const result = await loadSkills(env, input.path);
|
|
41
|
+
for (const skill of result.skills) {
|
|
42
|
+
skills.push({ skill: mapSkill ? mapSkill(skill, input.source) : skill, source: input.source });
|
|
43
|
+
}
|
|
44
|
+
for (const diagnostic of result.diagnostics)
|
|
45
|
+
diagnostics.push({ ...diagnostic, source: input.source });
|
|
46
|
+
}
|
|
47
|
+
return { skills, diagnostics };
|
|
48
|
+
}
|
|
49
|
+
async function loadSkillsFromDirInternal(env, dir, includeRootFiles, ignoreMatcher, rootDir) {
|
|
50
|
+
const skills = [];
|
|
51
|
+
const diagnostics = [];
|
|
52
|
+
if (!(await env.exists(dir)))
|
|
53
|
+
return { skills, diagnostics };
|
|
54
|
+
const dirInfo = await safeFileInfo(env, dir);
|
|
55
|
+
if (!dirInfo || (await resolveKind(env, dirInfo)) !== "directory")
|
|
56
|
+
return { skills, diagnostics };
|
|
57
|
+
await addIgnoreRules(env, ignoreMatcher, dir, rootDir);
|
|
58
|
+
let entries;
|
|
59
|
+
try {
|
|
60
|
+
entries = await env.listDir(dir);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return { skills, diagnostics };
|
|
64
|
+
}
|
|
65
|
+
for (const entry of entries) {
|
|
66
|
+
if (entry.name !== "SKILL.md")
|
|
67
|
+
continue;
|
|
68
|
+
const fullPath = entry.path;
|
|
69
|
+
const kind = await resolveKind(env, entry);
|
|
70
|
+
if (kind !== "file")
|
|
71
|
+
continue;
|
|
72
|
+
const relPath = relativeEnvPath(rootDir, fullPath);
|
|
73
|
+
if (ignoreMatcher.ignores(relPath))
|
|
74
|
+
continue;
|
|
75
|
+
const result = await loadSkillFromFile(env, fullPath);
|
|
76
|
+
if (result.skill)
|
|
77
|
+
skills.push(result.skill);
|
|
78
|
+
diagnostics.push(...result.diagnostics);
|
|
79
|
+
return { skills, diagnostics };
|
|
80
|
+
}
|
|
81
|
+
for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
82
|
+
if (entry.name.startsWith(".") || entry.name === "node_modules")
|
|
83
|
+
continue;
|
|
84
|
+
const fullPath = entry.path;
|
|
85
|
+
const kind = await resolveKind(env, entry);
|
|
86
|
+
if (!kind)
|
|
87
|
+
continue;
|
|
88
|
+
const relPath = relativeEnvPath(rootDir, fullPath);
|
|
89
|
+
const ignorePath = kind === "directory" ? `${relPath}/` : relPath;
|
|
90
|
+
if (ignoreMatcher.ignores(ignorePath))
|
|
91
|
+
continue;
|
|
92
|
+
if (kind === "directory") {
|
|
93
|
+
const result = await loadSkillsFromDirInternal(env, fullPath, false, ignoreMatcher, rootDir);
|
|
94
|
+
skills.push(...result.skills);
|
|
95
|
+
diagnostics.push(...result.diagnostics);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (kind !== "file" || !includeRootFiles || !entry.name.endsWith(".md"))
|
|
99
|
+
continue;
|
|
100
|
+
const result = await loadSkillFromFile(env, fullPath);
|
|
101
|
+
if (result.skill)
|
|
102
|
+
skills.push(result.skill);
|
|
103
|
+
diagnostics.push(...result.diagnostics);
|
|
104
|
+
}
|
|
105
|
+
return { skills, diagnostics };
|
|
106
|
+
}
|
|
107
|
+
async function addIgnoreRules(env, ig, dir, rootDir) {
|
|
108
|
+
const relativeDir = relativeEnvPath(rootDir, dir);
|
|
109
|
+
const prefix = relativeDir ? `${relativeDir}/` : "";
|
|
110
|
+
for (const filename of IGNORE_FILE_NAMES) {
|
|
111
|
+
const ignorePath = joinEnvPath(dir, filename);
|
|
112
|
+
const info = await safeFileInfo(env, ignorePath);
|
|
113
|
+
if (info?.kind !== "file")
|
|
114
|
+
continue;
|
|
115
|
+
try {
|
|
116
|
+
const content = await env.readTextFile(ignorePath);
|
|
117
|
+
const patterns = content
|
|
118
|
+
.split(/\r?\n/)
|
|
119
|
+
.map((line) => prefixIgnorePattern(line, prefix))
|
|
120
|
+
.filter((line) => Boolean(line));
|
|
121
|
+
if (patterns.length > 0)
|
|
122
|
+
ig.add(patterns);
|
|
123
|
+
}
|
|
124
|
+
catch { }
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function prefixIgnorePattern(line, prefix) {
|
|
128
|
+
const trimmed = line.trim();
|
|
129
|
+
if (!trimmed)
|
|
130
|
+
return null;
|
|
131
|
+
if (trimmed.startsWith("#") && !trimmed.startsWith("\\#"))
|
|
132
|
+
return null;
|
|
133
|
+
let pattern = line;
|
|
134
|
+
let negated = false;
|
|
135
|
+
if (pattern.startsWith("!")) {
|
|
136
|
+
negated = true;
|
|
137
|
+
pattern = pattern.slice(1);
|
|
138
|
+
}
|
|
139
|
+
else if (pattern.startsWith("\\!")) {
|
|
140
|
+
pattern = pattern.slice(1);
|
|
141
|
+
}
|
|
142
|
+
if (pattern.startsWith("/"))
|
|
143
|
+
pattern = pattern.slice(1);
|
|
144
|
+
const prefixed = prefix ? `${prefix}${pattern}` : pattern;
|
|
145
|
+
return negated ? `!${prefixed}` : prefixed;
|
|
146
|
+
}
|
|
147
|
+
async function loadSkillFromFile(env, filePath) {
|
|
148
|
+
const diagnostics = [];
|
|
149
|
+
try {
|
|
150
|
+
const rawContent = await env.readTextFile(filePath);
|
|
151
|
+
const { frontmatter, body } = parseFrontmatter(rawContent);
|
|
152
|
+
const skillDir = dirnameEnvPath(filePath);
|
|
153
|
+
const parentDirName = basenameEnvPath(skillDir);
|
|
154
|
+
for (const error of validateDescription(frontmatter.description)) {
|
|
155
|
+
diagnostics.push({ type: "warning", message: error, path: filePath });
|
|
156
|
+
}
|
|
157
|
+
const name = frontmatter.name || parentDirName;
|
|
158
|
+
for (const error of validateName(name, parentDirName)) {
|
|
159
|
+
diagnostics.push({ type: "warning", message: error, path: filePath });
|
|
160
|
+
}
|
|
161
|
+
if (!frontmatter.description || frontmatter.description.trim() === "") {
|
|
162
|
+
return { skill: null, diagnostics };
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
skill: {
|
|
166
|
+
name,
|
|
167
|
+
description: frontmatter.description,
|
|
168
|
+
content: body,
|
|
169
|
+
filePath,
|
|
170
|
+
disableModelInvocation: frontmatter["disable-model-invocation"] === true,
|
|
171
|
+
},
|
|
172
|
+
diagnostics,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
const message = error instanceof Error ? error.message : "failed to parse skill file";
|
|
177
|
+
diagnostics.push({ type: "warning", message, path: filePath });
|
|
178
|
+
return { skill: null, diagnostics };
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function validateName(name, parentDirName) {
|
|
182
|
+
const errors = [];
|
|
183
|
+
if (name !== parentDirName)
|
|
184
|
+
errors.push(`name "${name}" does not match parent directory "${parentDirName}"`);
|
|
185
|
+
if (name.length > MAX_NAME_LENGTH)
|
|
186
|
+
errors.push(`name exceeds ${MAX_NAME_LENGTH} characters (${name.length})`);
|
|
187
|
+
if (!/^[a-z0-9-]+$/.test(name)) {
|
|
188
|
+
errors.push("name contains invalid characters (must be lowercase a-z, 0-9, hyphens only)");
|
|
189
|
+
}
|
|
190
|
+
if (name.startsWith("-") || name.endsWith("-"))
|
|
191
|
+
errors.push("name must not start or end with a hyphen");
|
|
192
|
+
if (name.includes("--"))
|
|
193
|
+
errors.push("name must not contain consecutive hyphens");
|
|
194
|
+
return errors;
|
|
195
|
+
}
|
|
196
|
+
function validateDescription(description) {
|
|
197
|
+
const errors = [];
|
|
198
|
+
if (!description || description.trim() === "") {
|
|
199
|
+
errors.push("description is required");
|
|
200
|
+
}
|
|
201
|
+
else if (description.length > MAX_DESCRIPTION_LENGTH) {
|
|
202
|
+
errors.push(`description exceeds ${MAX_DESCRIPTION_LENGTH} characters (${description.length})`);
|
|
203
|
+
}
|
|
204
|
+
return errors;
|
|
205
|
+
}
|
|
206
|
+
function parseFrontmatter(content) {
|
|
207
|
+
const normalized = content.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
208
|
+
if (!normalized.startsWith("---"))
|
|
209
|
+
return { frontmatter: {}, body: normalized };
|
|
210
|
+
const endIndex = normalized.indexOf("\n---", 3);
|
|
211
|
+
if (endIndex === -1)
|
|
212
|
+
return { frontmatter: {}, body: normalized };
|
|
213
|
+
const yamlString = normalized.slice(4, endIndex);
|
|
214
|
+
const body = normalized.slice(endIndex + 4).trim();
|
|
215
|
+
return { frontmatter: (parse(yamlString) ?? {}), body };
|
|
216
|
+
}
|
|
217
|
+
async function safeFileInfo(env, path) {
|
|
218
|
+
try {
|
|
219
|
+
return await env.fileInfo(path);
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
async function resolveKind(env, info) {
|
|
226
|
+
if (info.kind === "file" || info.kind === "directory")
|
|
227
|
+
return info.kind;
|
|
228
|
+
try {
|
|
229
|
+
const realPath = await env.realPath(info.path);
|
|
230
|
+
const target = await env.fileInfo(realPath);
|
|
231
|
+
return target.kind === "file" || target.kind === "directory" ? target.kind : undefined;
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
return undefined;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function joinEnvPath(base, child) {
|
|
238
|
+
return `${base.replace(/\/+$/, "")}/${child.replace(/^\/+/, "")}`;
|
|
239
|
+
}
|
|
240
|
+
function dirnameEnvPath(path) {
|
|
241
|
+
const normalized = path.replace(/\/+$/, "");
|
|
242
|
+
const slashIndex = normalized.lastIndexOf("/");
|
|
243
|
+
return slashIndex <= 0 ? "/" : normalized.slice(0, slashIndex);
|
|
244
|
+
}
|
|
245
|
+
function basenameEnvPath(path) {
|
|
246
|
+
const normalized = path.replace(/\/+$/, "");
|
|
247
|
+
const slashIndex = normalized.lastIndexOf("/");
|
|
248
|
+
return slashIndex === -1 ? normalized : normalized.slice(slashIndex + 1);
|
|
249
|
+
}
|
|
250
|
+
function relativeEnvPath(root, path) {
|
|
251
|
+
const normalizedRoot = root.replace(/\/+$/, "");
|
|
252
|
+
const normalizedPath = path.replace(/\/+$/, "");
|
|
253
|
+
if (normalizedPath === normalizedRoot)
|
|
254
|
+
return "";
|
|
255
|
+
return normalizedPath.startsWith(`${normalizedRoot}/`)
|
|
256
|
+
? normalizedPath.slice(normalizedRoot.length + 1)
|
|
257
|
+
: normalizedPath.replace(/^\/+/, "");
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tpbGxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hZ2VudC1jb3JlL2hhcm5lc3Mvc2tpbGxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzdCLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQXFCakUsMkZBQTJGO0FBQzNGLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFZLEVBQUUsc0JBQStCO0lBQ2xGLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixLQUFLLENBQUMsSUFBSSxlQUFlLEtBQUssQ0FBQyxRQUFRLGtDQUFrQyxjQUFjLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxPQUFPLFlBQVksQ0FBQztJQUM1SyxPQUFPLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsT0FBTyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDM0YsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQy9CLEdBQWlCLEVBQ2pCLElBQXVCO0lBRXZCLE1BQU0sTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUMzQixNQUFNLFdBQVcsR0FBc0IsRUFBRSxDQUFDO0lBQzFDLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxZQUFZLENB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
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export function formatSkillsForSystemPrompt(skills) {
|
|
2
|
+
const visibleSkills = skills.filter((skill) => !skill.disableModelInvocation);
|
|
3
|
+
if (visibleSkills.length === 0)
|
|
4
|
+
return "";
|
|
5
|
+
const lines = [
|
|
6
|
+
"The following skills provide specialized instructions for specific tasks.",
|
|
7
|
+
"Read the full skill file when the task matches its description.",
|
|
8
|
+
"When a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.",
|
|
9
|
+
"",
|
|
10
|
+
"<available_skills>",
|
|
11
|
+
];
|
|
12
|
+
for (const skill of visibleSkills) {
|
|
13
|
+
lines.push(" <skill>");
|
|
14
|
+
lines.push(` <name>${escapeXml(skill.name)}</name>`);
|
|
15
|
+
lines.push(` <description>${escapeXml(skill.description)}</description>`);
|
|
16
|
+
lines.push(` <location>${escapeXml(skill.filePath)}</location>`);
|
|
17
|
+
lines.push(" </skill>");
|
|
18
|
+
}
|
|
19
|
+
lines.push("</available_skills>");
|
|
20
|
+
return lines.join("\n");
|
|
21
|
+
}
|
|
22
|
+
function escapeXml(value) {
|
|
23
|
+
return value
|
|
24
|
+
.replace(/&/g, "&")
|
|
25
|
+
.replace(/</g, "<")
|
|
26
|
+
.replace(/>/g, ">")
|
|
27
|
+
.replace(/"/g, """)
|
|
28
|
+
.replace(/'/g, "'");
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLXByb21wdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWdlbnQtY29yZS9oYXJuZXNzL3N5c3RlbS1wcm9tcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE1BQWU7SUFDMUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM5RSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRTFDLE1BQU0sS0FBSyxHQUFHO1FBQ2IsMkVBQTJFO1FBQzNFLGlFQUFpRTtRQUNqRSw4S0FBOEs7UUFDOUssRUFBRTtRQUNGLG9CQUFvQjtLQUNwQixDQUFDO0lBRUYsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNuQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdFLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNsQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQWE7SUFDL0IsT0FBTyxLQUFLO1NBQ1YsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7U0FDdEIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7U0FDckIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7U0FDckIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7U0FDdkIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMzQixDQUFDIn0=
|