veryfront 0.1.1176 → 0.1.1177
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/esm/cli/commands/skills/validate.d.ts.map +1 -1
- package/esm/cli/commands/skills/validate.js +16 -3
- package/esm/deno.js +1 -1
- package/esm/src/agent/runtime/skill-metadata.d.ts +3 -0
- package/esm/src/agent/runtime/skill-metadata.d.ts.map +1 -1
- package/esm/src/agent/runtime/skill-metadata.js +46 -2
- package/esm/src/agent/runtime/skill-prompt.js +1 -1
- package/esm/src/discovery/agent-scoped-capabilities.d.ts.map +1 -1
- package/esm/src/discovery/agent-scoped-capabilities.js +3 -1
- package/esm/src/discovery/handlers/skill-handler.d.ts.map +1 -1
- package/esm/src/discovery/handlers/skill-handler.js +2 -4
- package/esm/src/skill/parser.d.ts +3 -1
- package/esm/src/skill/parser.d.ts.map +1 -1
- package/esm/src/skill/parser.js +21 -9
- package/esm/src/skill/prompt-augmentation.d.ts.map +1 -1
- package/esm/src/skill/prompt-augmentation.js +2 -1
- package/esm/src/skill/tools.d.ts.map +1 -1
- package/esm/src/skill/tools.js +24 -9
- package/esm/src/skill/types.d.ts +4 -0
- package/esm/src/skill/types.d.ts.map +1 -1
- package/esm/src/skill/types.js +2 -0
- package/esm/src/utils/logger/logger.d.ts.map +1 -1
- package/esm/src/utils/logger/logger.js +43 -41
- package/esm/src/utils/logger/redact.d.ts.map +1 -1
- package/esm/src/utils/logger/redact.js +8 -1
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/skills/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAOxD,UAAU,eAAe;IACvB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAKnE;AAED,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/skills/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAOxD,UAAU,eAAe;IACvB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAKnE;AAED,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAyBpF"}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
import { createSuccessEnvelope, isJsonMode, outputJson } from "../../shared/json-output.js";
|
|
7
7
|
import { exitProcess, logError, logSuccess, logWarning } from "../../utils/index.js";
|
|
8
8
|
import { createFileSystem } from "../../../src/platform/index.js";
|
|
9
|
-
import { basename } from "../../../deps/jsr.io/@std/path/1.1.4/mod.js";
|
|
10
|
-
import { parseSkillFrontmatter, validateSkillMetadata } from "../../../src/skill/index.js";
|
|
9
|
+
import { basename, resolve } from "../../../deps/jsr.io/@std/path/1.1.4/mod.js";
|
|
10
|
+
import { parseSkillFrontmatter, SKILL_NAME_REGEX, validateSkillMetadata } from "../../../src/skill/index.js";
|
|
11
11
|
export async function validateSkill(args) {
|
|
12
12
|
const dir = args._[2] ?? ".";
|
|
13
13
|
const issues = await validateSkillDirectory(dir);
|
|
@@ -25,7 +25,9 @@ export async function validateSkillDirectory(dir) {
|
|
|
25
25
|
}
|
|
26
26
|
try {
|
|
27
27
|
const parsed = await parseSkillFrontmatter(content);
|
|
28
|
-
|
|
28
|
+
const directoryName = basename(resolve(dir));
|
|
29
|
+
validateCanonicalFrontmatterName(parsed.frontmatter, directoryName);
|
|
30
|
+
validateSkillMetadata(parsed.frontmatter, directoryName);
|
|
29
31
|
if (!parsed.body.trim()) {
|
|
30
32
|
issues.push({ severity: "warning", message: "SKILL.md body is empty" });
|
|
31
33
|
}
|
|
@@ -36,6 +38,17 @@ export async function validateSkillDirectory(dir) {
|
|
|
36
38
|
}
|
|
37
39
|
return issues;
|
|
38
40
|
}
|
|
41
|
+
function validateCanonicalFrontmatterName(frontmatter, directoryName) {
|
|
42
|
+
if (typeof frontmatter.name !== "string")
|
|
43
|
+
return;
|
|
44
|
+
const name = frontmatter.name.trim();
|
|
45
|
+
if (!SKILL_NAME_REGEX.test(name)) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (name !== directoryName) {
|
|
49
|
+
throw new Error(`Skill name "${name}" does not match directory name "${directoryName}"`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
39
52
|
async function outputResults(dir, issues) {
|
|
40
53
|
const hasErrors = issues.some((i) => i.severity === "error");
|
|
41
54
|
if (isJsonMode()) {
|
package/esm/deno.js
CHANGED
|
@@ -4,6 +4,7 @@ export interface RuntimeSkillFrontmatter {
|
|
|
4
4
|
name: string | undefined;
|
|
5
5
|
description: string | undefined;
|
|
6
6
|
allowedTools: string[];
|
|
7
|
+
metadata: Record<string, string> | undefined;
|
|
7
8
|
model: string | undefined;
|
|
8
9
|
thinking: false | number | undefined;
|
|
9
10
|
maxSteps: number | undefined;
|
|
@@ -17,9 +18,11 @@ export declare const RuntimeSkillFrontmatterSchema: import("../../internal-agent
|
|
|
17
18
|
export type RuntimeSkillDefinition = {
|
|
18
19
|
id: string;
|
|
19
20
|
name: string;
|
|
21
|
+
displayName?: string;
|
|
20
22
|
description: string;
|
|
21
23
|
instructions: string;
|
|
22
24
|
allowedTools: string[];
|
|
25
|
+
metadata?: Record<string, string>;
|
|
23
26
|
model?: string;
|
|
24
27
|
thinking?: false | number;
|
|
25
28
|
maxSteps?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-metadata.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/skill-metadata.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,6BAA6B,EAEnC,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-metadata.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/skill-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { extract } from "../../platform/compat/std/front-matter-yaml.js";
|
|
2
2
|
import { defineSchema, lazySchema } from "../../schemas/index.js";
|
|
3
3
|
import { assertResolvedSkillSelector, resolveSkillSelector, } from "../../skill/selector.js";
|
|
4
|
+
import { SKILL_NAME_REGEX, SKILL_PROVIDER_SAFE_ID_REGEX } from "../../skill/types.js";
|
|
4
5
|
function normalizeAllowedTools(value) {
|
|
5
6
|
if (value === undefined) {
|
|
6
7
|
return [];
|
|
@@ -19,22 +20,42 @@ export const getRuntimeSkillFrontmatterSchema = defineSchema((v) => v
|
|
|
19
20
|
"allowed-tools": v.union([v.string(), v.array(v.string())]).optional(),
|
|
20
21
|
allowed_tools: v.union([v.string(), v.array(v.string())]).optional(),
|
|
21
22
|
model: v.string().optional(),
|
|
23
|
+
metadata: v.record(v.string(), v.unknown()).optional(),
|
|
22
24
|
thinking: v.union([v.literal(false), v.coerce.number().int().positive()]).optional(),
|
|
23
25
|
"max-steps": v.coerce.number().int().positive().optional(),
|
|
24
26
|
})
|
|
25
27
|
.passthrough()
|
|
26
28
|
.transform((data) => {
|
|
27
29
|
const d = data;
|
|
30
|
+
const metadata = normalizeMetadata(d.metadata);
|
|
28
31
|
return {
|
|
29
|
-
name: (
|
|
32
|
+
name: normalizeOptionalString(d.name),
|
|
30
33
|
description: (typeof d.description === "string" ? d.description.trim() : undefined) ||
|
|
31
34
|
undefined,
|
|
32
35
|
allowedTools: normalizeAllowedTools((d["allowed-tools"] ?? d.allowed_tools)),
|
|
36
|
+
metadata,
|
|
33
37
|
model: (typeof d.model === "string" ? d.model.trim() : undefined) || undefined,
|
|
34
38
|
thinking: d.thinking,
|
|
35
39
|
maxSteps: d["max-steps"],
|
|
36
40
|
};
|
|
37
41
|
}));
|
|
42
|
+
function normalizeOptionalString(value) {
|
|
43
|
+
return (typeof value === "string" ? value.trim() : undefined) || undefined;
|
|
44
|
+
}
|
|
45
|
+
function normalizeMetadata(value) {
|
|
46
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
const entries = Object.entries(value);
|
|
50
|
+
if (entries.length === 0) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
const metadata = {};
|
|
54
|
+
for (const [key, rawValue] of entries) {
|
|
55
|
+
metadata[key] = String(rawValue);
|
|
56
|
+
}
|
|
57
|
+
return metadata;
|
|
58
|
+
}
|
|
38
59
|
/** Schema for runtime skill frontmatter.
|
|
39
60
|
* @deprecated Use getRuntimeSkillFrontmatterSchema()
|
|
40
61
|
*/
|
|
@@ -150,17 +171,34 @@ export function parseRuntimeSkillMetadata(content, options = {}) {
|
|
|
150
171
|
}
|
|
151
172
|
/** Definition for build runtime skill. */
|
|
152
173
|
export function buildRuntimeSkillDefinition(input) {
|
|
174
|
+
if (!isRuntimeSkillIdValid(input)) {
|
|
175
|
+
input.logger?.error?.("Invalid skill id; skipping skill", {
|
|
176
|
+
id: input.id,
|
|
177
|
+
error: input.ownerAgentId === undefined && input.shortName === undefined
|
|
178
|
+
? "must be lowercase alphanumeric with hyphens, 1-64 characters"
|
|
179
|
+
: "must be provider-safe letters, numbers, underscores, or hyphens, 1-64 characters",
|
|
180
|
+
});
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
153
183
|
const document = parseRuntimeSkillDocument(input.content, { logger: input.logger });
|
|
154
184
|
if (!document) {
|
|
155
185
|
return null;
|
|
156
186
|
}
|
|
157
187
|
const { metadata, body } = document;
|
|
188
|
+
const canonicalName = input.id;
|
|
189
|
+
const explicitDisplayName = metadata.metadata?.display_name?.trim() || undefined;
|
|
190
|
+
const legacyDisplayName = metadata.name && metadata.name !== canonicalName
|
|
191
|
+
? metadata.name
|
|
192
|
+
: undefined;
|
|
193
|
+
const displayName = explicitDisplayName ?? legacyDisplayName;
|
|
158
194
|
return {
|
|
159
195
|
id: input.id,
|
|
160
|
-
name:
|
|
196
|
+
name: canonicalName,
|
|
197
|
+
...(displayName ? { displayName } : {}),
|
|
161
198
|
description: metadata.description ?? extractDescriptionFromMarkdown(body, input.id),
|
|
162
199
|
instructions: input.content,
|
|
163
200
|
allowedTools: metadata.allowedTools,
|
|
201
|
+
...(metadata.metadata ? { metadata: metadata.metadata } : {}),
|
|
164
202
|
...(metadata.model ? { model: metadata.model } : {}),
|
|
165
203
|
...(metadata.thinking !== undefined ? { thinking: metadata.thinking } : {}),
|
|
166
204
|
...(metadata.maxSteps !== undefined ? { maxSteps: metadata.maxSteps } : {}),
|
|
@@ -172,6 +210,12 @@ export function buildRuntimeSkillDefinition(input) {
|
|
|
172
210
|
...(input.sourcePath === undefined ? {} : { sourcePath: input.sourcePath }),
|
|
173
211
|
};
|
|
174
212
|
}
|
|
213
|
+
function isRuntimeSkillIdValid(input) {
|
|
214
|
+
if (input.ownerAgentId !== undefined || input.shortName !== undefined) {
|
|
215
|
+
return SKILL_PROVIDER_SAFE_ID_REGEX.test(input.id);
|
|
216
|
+
}
|
|
217
|
+
return SKILL_NAME_REGEX.test(input.id);
|
|
218
|
+
}
|
|
175
219
|
/** Normalizes runtime skill reference path. */
|
|
176
220
|
export function normalizeRuntimeSkillReferencePath(path) {
|
|
177
221
|
const normalized = path.trim().replaceAll("\\", "/");
|
|
@@ -43,7 +43,7 @@ export function formatRuntimeSkillMetadata(skill) {
|
|
|
43
43
|
return details.length > 0 ? ` (${details.join("; ")})` : "";
|
|
44
44
|
}
|
|
45
45
|
function formatRuntimeSkillLabel(skill) {
|
|
46
|
-
return skill.
|
|
46
|
+
return skill.displayName ? `${skill.displayName} (\`${skill.id}\`)` : skill.id;
|
|
47
47
|
}
|
|
48
48
|
/** Builds runtime available skills prompt block. */
|
|
49
49
|
export function buildRuntimeAvailableSkillsPromptBlock(skills, options = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-scoped-capabilities.d.ts","sourceRoot":"","sources":["../../../src/src/discovery/agent-scoped-capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAkBH,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIxE,2EAA2E;AAC3E,eAAO,MAAM,oCAAoC,OAAO,CAAC;AAIzD,uEAAuE;AACvE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAID;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,oEAAoE;AACpE,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,iEAAiE;AACjE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAInF;AAoDD,uEAAuE;AACvE,MAAM,MAAM,uCAAuC,GAAG;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,uCAAuC,GAC7C,OAAO,CAAC,MAAM,EAAE,CAAC,CAgEnB;
|
|
1
|
+
{"version":3,"file":"agent-scoped-capabilities.d.ts","sourceRoot":"","sources":["../../../src/src/discovery/agent-scoped-capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAkBH,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIxE,2EAA2E;AAC3E,eAAO,MAAM,oCAAoC,OAAO,CAAC;AAIzD,uEAAuE;AACvE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAID;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,oEAAoE;AACpE,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,iEAAiE;AACjE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAInF;AAoDD,uEAAuE;AACvE,MAAM,MAAM,uCAAuC,GAAG;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,uCAAuC,GAC7C,OAAO,CAAC,MAAM,EAAE,CAAC,CAgEnB;AA8BD;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,uCAAuC,GAC7C,OAAO,CAAC,MAAM,EAAE,CAAC,CAwDnB"}
|
|
@@ -158,7 +158,9 @@ async function buildSkillFromDir(input) {
|
|
|
158
158
|
}
|
|
159
159
|
const content = await readDiscoveryTextFile(skillMdPath, input.context);
|
|
160
160
|
const parsed = await parseSkillFrontmatter(content);
|
|
161
|
-
const metadata = validateSkillMetadata(parsed.frontmatter, input.id
|
|
161
|
+
const metadata = validateSkillMetadata(parsed.frontmatter, input.id, {
|
|
162
|
+
providerSafeName: true,
|
|
163
|
+
});
|
|
162
164
|
return {
|
|
163
165
|
id: input.id,
|
|
164
166
|
metadata,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/discovery/handlers/skill-handler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAIxD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;CACd;AAED,UAAU,oBAAoB;IAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3B,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,oBAAoB,EAC7B,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"skill-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/discovery/handlers/skill-handler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAIxD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;CACd;AAED,UAAU,oBAAoB;IAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3B,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,oBAAoB,EAC7B,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,oBAAoB,CAAC,CA8E/B"}
|
|
@@ -55,11 +55,9 @@ export async function discoverSkills(dir, context, verbose) {
|
|
|
55
55
|
const parsed = await parseSkillFrontmatter(content);
|
|
56
56
|
// Validate metadata (directory name as fallback for skill name)
|
|
57
57
|
const metadata = validateSkillMetadata(parsed.frontmatter, entry.name);
|
|
58
|
-
//
|
|
58
|
+
// The directory is the canonical identity; legacy/display-style names
|
|
59
|
+
// are preserved only as display metadata.
|
|
59
60
|
const skillId = entry.name;
|
|
60
|
-
if (metadata.name !== entry.name) {
|
|
61
|
-
logger.warn(`Skill "${metadata.name}" in directory "${entry.name}" — using directory name as ID`);
|
|
62
|
-
}
|
|
63
61
|
// Check for duplicate IDs (first wins)
|
|
64
62
|
if (skills.has(skillId)) {
|
|
65
63
|
logger.warn(`Duplicate skill "${skillId}" — keeping first registration`);
|
|
@@ -26,6 +26,8 @@ export declare function parseSkillFrontmatter(content: string): Promise<ParsedSk
|
|
|
26
26
|
* @param frontmatter - Parsed frontmatter object
|
|
27
27
|
* @param directoryName - Directory name used as fallback for skill name
|
|
28
28
|
*/
|
|
29
|
-
export declare function validateSkillMetadata(frontmatter: Record<string, unknown>, directoryName: string
|
|
29
|
+
export declare function validateSkillMetadata(frontmatter: Record<string, unknown>, directoryName: string, options?: {
|
|
30
|
+
providerSafeName?: boolean;
|
|
31
|
+
}): SkillMetadata;
|
|
30
32
|
export {};
|
|
31
33
|
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/src/skill/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/src/skill/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAEpB,wCAAwC;AACxC,UAAU,kBAAkB;IAC1B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAYxF;AA+BD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3C,aAAa,CA0Df"}
|
package/esm/src/skill/parser.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { createError, toError } from "../errors/index.js";
|
|
11
11
|
import { validateAllowedToolPatterns } from "./allowed-tools.js";
|
|
12
|
-
import { SKILL_DESCRIPTION_MAX_LENGTH, SKILL_NAME_REGEX } from "./types.js";
|
|
12
|
+
import { SKILL_DESCRIPTION_MAX_LENGTH, SKILL_NAME_REGEX, SKILL_PROVIDER_SAFE_ID_REGEX, } from "./types.js";
|
|
13
13
|
/**
|
|
14
14
|
* Parse SKILL.md content into frontmatter + body.
|
|
15
15
|
*
|
|
@@ -60,27 +60,31 @@ function parseFrontmatterFallback(content) {
|
|
|
60
60
|
* @param frontmatter - Parsed frontmatter object
|
|
61
61
|
* @param directoryName - Directory name used as fallback for skill name
|
|
62
62
|
*/
|
|
63
|
-
export function validateSkillMetadata(frontmatter, directoryName) {
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
|
|
63
|
+
export function validateSkillMetadata(frontmatter, directoryName, options = {}) {
|
|
64
|
+
const canonicalName = directoryName;
|
|
65
|
+
const nameRegex = options.providerSafeName ? SKILL_PROVIDER_SAFE_ID_REGEX : SKILL_NAME_REGEX;
|
|
66
|
+
const nameExpectation = options.providerSafeName
|
|
67
|
+
? "must be provider-safe letters, numbers, underscores, or hyphens, 1-64 characters"
|
|
68
|
+
: "must be lowercase alphanumeric with hyphens, 1-64 characters";
|
|
69
|
+
if (!nameRegex.test(canonicalName)) {
|
|
67
70
|
throw toError(createError({
|
|
68
71
|
type: "agent",
|
|
69
|
-
message: `Invalid skill name "${
|
|
72
|
+
message: `Invalid skill name "${canonicalName}": ${nameExpectation}`,
|
|
70
73
|
}));
|
|
71
74
|
}
|
|
75
|
+
const rawName = typeof frontmatter.name === "string" ? frontmatter.name.trim() : undefined;
|
|
72
76
|
// Description: required
|
|
73
77
|
const rawDescription = frontmatter.description;
|
|
74
78
|
if (!rawDescription || typeof rawDescription !== "string" || !rawDescription.trim()) {
|
|
75
79
|
throw toError(createError({
|
|
76
80
|
type: "agent",
|
|
77
|
-
message: `Skill "${
|
|
81
|
+
message: `Skill "${canonicalName}" is missing a required "description" field`,
|
|
78
82
|
}));
|
|
79
83
|
}
|
|
80
84
|
const description = rawDescription.trim().slice(0, SKILL_DESCRIPTION_MAX_LENGTH);
|
|
81
85
|
// Allowed-tools: parse from space-delimited string or array
|
|
82
86
|
const allowedToolPatterns = frontmatter["allowed-tools"] ?? frontmatter.allowed_tools;
|
|
83
|
-
const allowedTools = parseAllowedTools(allowedToolPatterns,
|
|
87
|
+
const allowedTools = parseAllowedTools(allowedToolPatterns, canonicalName);
|
|
84
88
|
// License: optional string passthrough
|
|
85
89
|
const license = typeof frontmatter.license === "string" ? frontmatter.license.trim() : undefined;
|
|
86
90
|
// Compatibility: optional string passthrough
|
|
@@ -89,8 +93,12 @@ export function validateSkillMetadata(frontmatter, directoryName) {
|
|
|
89
93
|
: undefined;
|
|
90
94
|
// Metadata: convert nested object values to strings
|
|
91
95
|
const metadata = parseMetadata(frontmatter.metadata);
|
|
96
|
+
const explicitDisplayName = getMetadataDisplayName(metadata);
|
|
97
|
+
const legacyDisplayName = rawName && rawName !== canonicalName ? rawName : undefined;
|
|
98
|
+
const displayName = explicitDisplayName ?? legacyDisplayName;
|
|
92
99
|
return {
|
|
93
|
-
name:
|
|
100
|
+
name: canonicalName,
|
|
101
|
+
...(displayName && { displayName }),
|
|
94
102
|
description,
|
|
95
103
|
...(allowedTools && { allowedTools }),
|
|
96
104
|
...(license && { license }),
|
|
@@ -98,6 +106,10 @@ export function validateSkillMetadata(frontmatter, directoryName) {
|
|
|
98
106
|
...(metadata && { metadata }),
|
|
99
107
|
};
|
|
100
108
|
}
|
|
109
|
+
function getMetadataDisplayName(metadata) {
|
|
110
|
+
const displayName = metadata?.display_name?.trim();
|
|
111
|
+
return displayName ? displayName : undefined;
|
|
112
|
+
}
|
|
101
113
|
/**
|
|
102
114
|
* Parse `allowed-tools` from frontmatter.
|
|
103
115
|
* Accepts a space-delimited string or an array of strings.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-augmentation.d.ts","sourceRoot":"","sources":["../../../src/src/skill/prompt-augmentation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,mEAAmE;AACnE,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAEpD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"prompt-augmentation.d.ts","sourceRoot":"","sources":["../../../src/src/skill/prompt-augmentation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,mEAAmE;AACnE,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAEpD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,CA2C3E"}
|
|
@@ -27,7 +27,8 @@ export function buildSkillManifestPrompt(skills) {
|
|
|
27
27
|
];
|
|
28
28
|
let displayedSkillCount = 0;
|
|
29
29
|
for (const [id, skill] of skills) {
|
|
30
|
-
|
|
30
|
+
const label = skill.metadata.displayName ? `${skill.metadata.displayName} (\`${id}\`)` : id;
|
|
31
|
+
lines.push(`- **${label}**: ${skill.metadata.description}`);
|
|
31
32
|
displayedSkillCount += 1;
|
|
32
33
|
if (displayedSkillCount === MAX_SKILL_MANIFEST_PROMPT_ENTRIES) {
|
|
33
34
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/src/skill/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAQnE,OAAO,KAAK,EAAuB,mBAAmB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/src/skill/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAQnE,OAAO,KAAK,EAAuB,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAe3E,KAAK,wBAAwB,GAAG;IAC9B,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,KAAK,SAAS,MAAM,EAAE,CAAC;CAC3F,CAAC;AAgMF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,wBAA6B,GAAG,IAAI,CAkDhF;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,GAAE,wBAA6B,GAAG,IAAI,CA+BzF;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,mBAAmB,CAAA;CAAE,GAAG,wBAA6B,GAC1E,IAAI,CAuCN"}
|
package/esm/src/skill/tools.js
CHANGED
|
@@ -17,7 +17,7 @@ import { skillRegistry } from "./registry.js";
|
|
|
17
17
|
import { parseSkillFrontmatter } from "./parser.js";
|
|
18
18
|
import { listSkillSubdir, validateSkillPath } from "./path-safety.js";
|
|
19
19
|
import { getSkillScriptExecutor } from "./executor.js";
|
|
20
|
-
import { SKILL_ASSETS_DIR, SKILL_MD_FILENAME, SKILL_REFERENCES_DIR, SKILL_RESOURCES_DIR, SKILL_SCRIPTS_DIR, } from "./types.js";
|
|
20
|
+
import { SKILL_ASSETS_DIR, SKILL_MD_FILENAME, SKILL_NAME_REGEX, SKILL_PROVIDER_SAFE_ID_REGEX, SKILL_REFERENCES_DIR, SKILL_RESOURCES_DIR, SKILL_SCRIPTS_DIR, } from "./types.js";
|
|
21
21
|
/** Maximum allowed script execution timeout in milliseconds (5 minutes) */
|
|
22
22
|
const MAX_SCRIPT_TIMEOUT_MS = 300_000;
|
|
23
23
|
const getLoadSkillInputSchema = defineSchema((v) => v.object({
|
|
@@ -63,18 +63,33 @@ function resolveVisibleSkillOrThrow(skillId, context, options = {}) {
|
|
|
63
63
|
const scope = { agentId: context?.agentId };
|
|
64
64
|
const allowedSkillIds = getSelectorAllowedSkillIds(context, options);
|
|
65
65
|
const skill = skillRegistry.resolveVisibleSkill(skillId, scope);
|
|
66
|
-
if (
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
66
|
+
if (skill) {
|
|
67
|
+
assertSkillAllowedBySelector(skill, allowedSkillIds);
|
|
68
|
+
return skill;
|
|
69
|
+
}
|
|
70
|
+
if (allowedSkillIds !== undefined) {
|
|
71
|
+
throw createSkillUnavailableError();
|
|
72
|
+
}
|
|
73
|
+
if (!isUnresolvedSkillSelectorValid(skillId)) {
|
|
74
|
+
const expectation = skillId.includes("--")
|
|
75
|
+
? "must be provider-safe letters, numbers, underscores, or hyphens, 1-64 characters"
|
|
76
|
+
: "must be lowercase alphanumeric with hyphens, 1-64 characters";
|
|
71
77
|
throw toError(createError({
|
|
72
78
|
type: "agent",
|
|
73
|
-
message: `
|
|
79
|
+
message: `Invalid skill id "${skillId}": ${expectation}`,
|
|
74
80
|
}));
|
|
75
81
|
}
|
|
76
|
-
|
|
77
|
-
|
|
82
|
+
const visible = skillRegistry.getVisibleSkillIds(scope).join(", ");
|
|
83
|
+
throw toError(createError({
|
|
84
|
+
type: "agent",
|
|
85
|
+
message: `Skill "${skillId}" not found. Available skills: ${visible || "none"}`,
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
function isUnresolvedSkillSelectorValid(skillId) {
|
|
89
|
+
if (SKILL_NAME_REGEX.test(skillId)) {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
return skillId.includes("--") && SKILL_PROVIDER_SAFE_ID_REGEX.test(skillId);
|
|
78
93
|
}
|
|
79
94
|
function createSkillUnavailableError() {
|
|
80
95
|
return toError(createError({
|
package/esm/src/skill/types.d.ts
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
import type { FileSystemAdapter } from "../platform/adapters/base.js";
|
|
10
10
|
/** Valid skill name: lowercase alphanumeric + hyphens, 1-64 chars */
|
|
11
11
|
export declare const SKILL_NAME_REGEX: RegExp;
|
|
12
|
+
/** Provider-safe owned skill id: sanitized namespace + short name, max 64 chars */
|
|
13
|
+
export declare const SKILL_PROVIDER_SAFE_ID_REGEX: RegExp;
|
|
12
14
|
/** Valid allowed-tool pattern: exact ID or prefix wildcard (e.g. "api:*") */
|
|
13
15
|
export declare const SKILL_ALLOWED_TOOL_PATTERN_REGEX: RegExp;
|
|
14
16
|
/** Maximum description length in characters */
|
|
@@ -26,6 +28,8 @@ export declare const SKILL_ASSETS_DIR = "assets";
|
|
|
26
28
|
export interface SkillMetadata {
|
|
27
29
|
/** Skill identifier (lowercase, hyphenated) */
|
|
28
30
|
name: string;
|
|
31
|
+
/** Optional human-readable label; never used for skill lookup/reference. */
|
|
32
|
+
displayName?: string;
|
|
29
33
|
/** Human-readable description */
|
|
30
34
|
description: string;
|
|
31
35
|
/** Tool access restrictions (space-delimited in YAML, parsed to array) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/skill/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAItE,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,QAA8B,CAAC;AAE5D,6EAA6E;AAC7E,eAAO,MAAM,gCAAgC,QACiB,CAAC;AAE/D,+CAA+C;AAC/C,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAE5C,wEAAwE;AACxE,eAAO,MAAM,cAAc,aAIzB,CAAC;AAEH,sCAAsC;AACtC,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAC3C,eAAO,MAAM,oBAAoB,eAAe,CAAC;AACjD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,gBAAgB,WAAW,CAAC;AAIzC,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qCAAqC;IACrC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kCAAkC;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,gCAAgC;AAChC,MAAM,WAAW,KAAK;IACpB,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,QAAQ,EAAE,aAAa,CAAC;IACxB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,oCAAoC;AACpC,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,gCAAgC;AAChC,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACtE;AAED,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/skill/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAItE,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,QAA8B,CAAC;AAE5D,mFAAmF;AACnF,eAAO,MAAM,4BAA4B,QAA0B,CAAC;AAEpE,6EAA6E;AAC7E,eAAO,MAAM,gCAAgC,QACiB,CAAC;AAE/D,+CAA+C;AAC/C,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAE5C,wEAAwE;AACxE,eAAO,MAAM,cAAc,aAIzB,CAAC;AAEH,sCAAsC;AACtC,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAC3C,eAAO,MAAM,oBAAoB,eAAe,CAAC;AACjD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,gBAAgB,WAAW,CAAC;AAIzC,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qCAAqC;IACrC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kCAAkC;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,gCAAgC;AAChC,MAAM,WAAW,KAAK;IACpB,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,QAAQ,EAAE,aAAa,CAAC;IACxB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,oCAAoC;AACpC,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,gCAAgC;AAChC,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACtE;AAED,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB"}
|
package/esm/src/skill/types.js
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
// ── Constants ───────────────────────────────────────────────────────────
|
|
10
10
|
/** Valid skill name: lowercase alphanumeric + hyphens, 1-64 chars */
|
|
11
11
|
export const SKILL_NAME_REGEX = /^[a-z0-9][a-z0-9-]{0,63}$/;
|
|
12
|
+
/** Provider-safe owned skill id: sanitized namespace + short name, max 64 chars */
|
|
13
|
+
export const SKILL_PROVIDER_SAFE_ID_REGEX = /^[A-Za-z0-9_-]{1,64}$/;
|
|
12
14
|
/** Valid allowed-tool pattern: exact ID or prefix wildcard (e.g. "api:*") */
|
|
13
15
|
export const SKILL_ALLOWED_TOOL_PATTERN_REGEX = /^[A-Za-z][A-Za-z0-9._-]*(:[A-Za-z][A-Za-z0-9._-]*)*(:\*)?$/;
|
|
14
16
|
/** Maximum description length in characters */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/logger/logger.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/logger/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -193,6 +193,9 @@ function extractAliasToEntryField(entry, context, sourceKey, targetKey, coerce)
|
|
|
193
193
|
entry[targetKey] = coerce(context[sourceKey]);
|
|
194
194
|
delete context[sourceKey];
|
|
195
195
|
}
|
|
196
|
+
function sanitizeStringFieldValue(value) {
|
|
197
|
+
return sanitizeUrlCredentials(String(value));
|
|
198
|
+
}
|
|
196
199
|
class ConsoleLogger {
|
|
197
200
|
prefix;
|
|
198
201
|
options;
|
|
@@ -223,10 +226,10 @@ class ConsoleLogger {
|
|
|
223
226
|
if (this.componentName)
|
|
224
227
|
entry.component = this.componentName;
|
|
225
228
|
// Extract known fields to top level for easier Grafana filtering
|
|
226
|
-
extractToEntryField(entry, mergedContext, "requestId",
|
|
227
|
-
extractToEntryField(entry, mergedContext, "traceId",
|
|
228
|
-
extractToEntryField(entry, mergedContext, "spanId",
|
|
229
|
-
extractToEntryField(entry, mergedContext, "projectSlug",
|
|
229
|
+
extractToEntryField(entry, mergedContext, "requestId", sanitizeStringFieldValue);
|
|
230
|
+
extractToEntryField(entry, mergedContext, "traceId", sanitizeStringFieldValue);
|
|
231
|
+
extractToEntryField(entry, mergedContext, "spanId", sanitizeStringFieldValue);
|
|
232
|
+
extractToEntryField(entry, mergedContext, "projectSlug", sanitizeStringFieldValue);
|
|
230
233
|
extractToEntryField(entry, mergedContext, "durationMs", (v) => Number(v));
|
|
231
234
|
// Auto-inject trace context from OTel when not already set
|
|
232
235
|
if ((this.options.injectTraceContext ?? true) && traceContextGetter && !entry.traceId) {
|
|
@@ -237,45 +240,44 @@ class ConsoleLogger {
|
|
|
237
240
|
}
|
|
238
241
|
}
|
|
239
242
|
// Extract standard snake_case fields for Loki filtering
|
|
240
|
-
extractToEntryField(entry, mergedContext, "request_id",
|
|
241
|
-
extractToEntryField(entry, mergedContext, "trace_id",
|
|
242
|
-
extractToEntryField(entry, mergedContext, "span_id",
|
|
243
|
-
extractToEntryField(entry, mergedContext, "project_slug",
|
|
244
|
-
//
|
|
245
|
-
//
|
|
246
|
-
|
|
247
|
-
extractToEntryField(entry, mergedContext, "
|
|
248
|
-
extractToEntryField(entry, mergedContext, "
|
|
249
|
-
extractToEntryField(entry, mergedContext, "
|
|
250
|
-
extractToEntryField(entry, mergedContext, "
|
|
251
|
-
extractToEntryField(entry, mergedContext, "
|
|
252
|
-
extractToEntryField(entry, mergedContext, "
|
|
253
|
-
extractToEntryField(entry, mergedContext, "
|
|
254
|
-
extractToEntryField(entry, mergedContext, "
|
|
255
|
-
extractToEntryField(entry, mergedContext, "
|
|
256
|
-
extractToEntryField(entry, mergedContext, "
|
|
257
|
-
extractToEntryField(entry, mergedContext, "
|
|
258
|
-
extractToEntryField(entry, mergedContext, "
|
|
259
|
-
extractToEntryField(entry, mergedContext, "
|
|
260
|
-
extractToEntryField(entry, mergedContext, "
|
|
261
|
-
extractToEntryField(entry, mergedContext, "
|
|
262
|
-
extractToEntryField(entry, mergedContext, "
|
|
263
|
-
extractToEntryField(entry, mergedContext, "
|
|
264
|
-
extractToEntryField(entry, mergedContext, "
|
|
265
|
-
extractToEntryField(entry, mergedContext, "user_visible", (v) => String(v));
|
|
243
|
+
extractToEntryField(entry, mergedContext, "request_id", sanitizeStringFieldValue);
|
|
244
|
+
extractToEntryField(entry, mergedContext, "trace_id", sanitizeStringFieldValue);
|
|
245
|
+
extractToEntryField(entry, mergedContext, "span_id", sanitizeStringFieldValue);
|
|
246
|
+
extractToEntryField(entry, mergedContext, "project_slug", sanitizeStringFieldValue);
|
|
247
|
+
// Lifted string fields are removed from mergedContext before redactSensitive
|
|
248
|
+
// runs, so scrub credential-shaped text while preserving the field value.
|
|
249
|
+
extractToEntryField(entry, mergedContext, "request_url", sanitizeStringFieldValue);
|
|
250
|
+
extractToEntryField(entry, mergedContext, "domain", sanitizeStringFieldValue);
|
|
251
|
+
extractToEntryField(entry, mergedContext, "project_id", sanitizeStringFieldValue);
|
|
252
|
+
extractToEntryField(entry, mergedContext, "release_id", sanitizeStringFieldValue);
|
|
253
|
+
extractToEntryField(entry, mergedContext, "branch_id", sanitizeStringFieldValue);
|
|
254
|
+
extractToEntryField(entry, mergedContext, "branch_name", sanitizeStringFieldValue);
|
|
255
|
+
extractToEntryField(entry, mergedContext, "run_execution_id", sanitizeStringFieldValue);
|
|
256
|
+
extractToEntryField(entry, mergedContext, "run_id", sanitizeStringFieldValue);
|
|
257
|
+
extractToEntryField(entry, mergedContext, "agent_id", sanitizeStringFieldValue);
|
|
258
|
+
extractToEntryField(entry, mergedContext, "thread_id", sanitizeStringFieldValue);
|
|
259
|
+
extractToEntryField(entry, mergedContext, "schedule_id", sanitizeStringFieldValue);
|
|
260
|
+
extractToEntryField(entry, mergedContext, "schedule_name", sanitizeStringFieldValue);
|
|
261
|
+
extractToEntryField(entry, mergedContext, "tool_name", sanitizeStringFieldValue);
|
|
262
|
+
extractToEntryField(entry, mergedContext, "tool_call_id", sanitizeStringFieldValue);
|
|
263
|
+
extractToEntryField(entry, mergedContext, "batch_id", sanitizeStringFieldValue);
|
|
264
|
+
extractToEntryField(entry, mergedContext, "run_target", sanitizeStringFieldValue);
|
|
265
|
+
extractToEntryField(entry, mergedContext, "task", sanitizeStringFieldValue);
|
|
266
|
+
extractToEntryField(entry, mergedContext, "event_kind", sanitizeStringFieldValue);
|
|
267
|
+
extractToEntryField(entry, mergedContext, "user_visible", sanitizeStringFieldValue);
|
|
266
268
|
extractToEntryField(entry, mergedContext, "duration_ms", (v) => Number(v));
|
|
267
|
-
extractToEntryField(entry, mergedContext, "user_id",
|
|
268
|
-
extractToEntryField(entry, mergedContext, "conversation_id",
|
|
269
|
+
extractToEntryField(entry, mergedContext, "user_id", sanitizeStringFieldValue);
|
|
270
|
+
extractToEntryField(entry, mergedContext, "conversation_id", sanitizeStringFieldValue);
|
|
269
271
|
// Also extract camelCase variants so callers can use either convention
|
|
270
|
-
extractToEntryField(entry, mergedContext, "userId",
|
|
271
|
-
extractToEntryField(entry, mergedContext, "conversationId",
|
|
272
|
-
extractAliasToEntryField(entry, mergedContext, "runId", "run_id",
|
|
273
|
-
extractAliasToEntryField(entry, mergedContext, "agentId", "agent_id",
|
|
274
|
-
extractAliasToEntryField(entry, mergedContext, "threadId", "thread_id",
|
|
275
|
-
extractAliasToEntryField(entry, mergedContext, "scheduleId", "schedule_id",
|
|
276
|
-
extractAliasToEntryField(entry, mergedContext, "scheduleName", "schedule_name",
|
|
277
|
-
extractAliasToEntryField(entry, mergedContext, "toolName", "tool_name",
|
|
278
|
-
extractAliasToEntryField(entry, mergedContext, "toolCallId", "tool_call_id",
|
|
272
|
+
extractToEntryField(entry, mergedContext, "userId", sanitizeStringFieldValue);
|
|
273
|
+
extractToEntryField(entry, mergedContext, "conversationId", sanitizeStringFieldValue);
|
|
274
|
+
extractAliasToEntryField(entry, mergedContext, "runId", "run_id", sanitizeStringFieldValue);
|
|
275
|
+
extractAliasToEntryField(entry, mergedContext, "agentId", "agent_id", sanitizeStringFieldValue);
|
|
276
|
+
extractAliasToEntryField(entry, mergedContext, "threadId", "thread_id", sanitizeStringFieldValue);
|
|
277
|
+
extractAliasToEntryField(entry, mergedContext, "scheduleId", "schedule_id", sanitizeStringFieldValue);
|
|
278
|
+
extractAliasToEntryField(entry, mergedContext, "scheduleName", "schedule_name", sanitizeStringFieldValue);
|
|
279
|
+
extractAliasToEntryField(entry, mergedContext, "toolName", "tool_name", sanitizeStringFieldValue);
|
|
280
|
+
extractAliasToEntryField(entry, mergedContext, "toolCallId", "tool_call_id", sanitizeStringFieldValue);
|
|
279
281
|
// Emit snake_case aliases for camelCase fields (transition period)
|
|
280
282
|
if (entry.requestId && !entry.request_id)
|
|
281
283
|
entry.request_id = entry.requestId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/logger/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,6DAA6D;AAC7D,eAAO,MAAM,QAAQ,eAAe,CAAC;AAmDrC;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAcnD;
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/logger/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,6DAA6D;AAC7D,eAAO,MAAM,QAAQ,eAAe,CAAC;AAmDrC;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAcnD;AAoFD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAEhD;AA6BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAyB5D;AAqBD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBxD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,CAAC,SAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,EAC5D,KAAK,EAAE,CAAC,GAAG,CAAC,CAMb"}
|
|
@@ -98,6 +98,8 @@ function hasToJson(value) {
|
|
|
98
98
|
return typeof value.toJSON === "function";
|
|
99
99
|
}
|
|
100
100
|
function redactValue(value, depth, seen) {
|
|
101
|
+
if (typeof value === "string")
|
|
102
|
+
return sanitizeUrlCredentials(value);
|
|
101
103
|
if (Array.isArray(value)) {
|
|
102
104
|
if (depth >= MAX_DEPTH || seen.has(value))
|
|
103
105
|
return REDACTED;
|
|
@@ -127,6 +129,10 @@ function redactValue(value, depth, seen) {
|
|
|
127
129
|
if (isRecord(serialized) || Array.isArray(serialized)) {
|
|
128
130
|
return redactValue(serialized, depth + 1, seen);
|
|
129
131
|
}
|
|
132
|
+
if (typeof serialized === "string") {
|
|
133
|
+
const sanitized = sanitizeUrlCredentials(serialized);
|
|
134
|
+
return sanitized === serialized ? value : sanitized;
|
|
135
|
+
}
|
|
130
136
|
// Scalar result (string/number/…): the object serializes safely as-is.
|
|
131
137
|
return value;
|
|
132
138
|
}
|
|
@@ -160,7 +166,8 @@ function redactValue(value, depth, seen) {
|
|
|
160
166
|
}
|
|
161
167
|
}
|
|
162
168
|
// Primitives and scalar-serializing objects (Date, URL, …) are returned
|
|
163
|
-
// untouched: they are not key/value bags we
|
|
169
|
+
// untouched: except for string values above, they are not key/value bags we
|
|
170
|
+
// can safely rewrite.
|
|
164
171
|
return value;
|
|
165
172
|
}
|
|
166
173
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "veryfront",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1177",
|
|
4
4
|
"description": "The simplest way to build AI-powered apps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -344,10 +344,10 @@
|
|
|
344
344
|
"@types/react": "19.2.14",
|
|
345
345
|
"@types/react-dom": "19.2.3",
|
|
346
346
|
"ws": "8.21.0",
|
|
347
|
-
"@veryfront/ext-bundler-esbuild": "0.1.
|
|
348
|
-
"@veryfront/ext-content-mdx": "0.1.
|
|
349
|
-
"@veryfront/ext-css-tailwind": "0.1.
|
|
350
|
-
"@veryfront/ext-parser-babel": "0.1.
|
|
347
|
+
"@veryfront/ext-bundler-esbuild": "0.1.1177",
|
|
348
|
+
"@veryfront/ext-content-mdx": "0.1.1177",
|
|
349
|
+
"@veryfront/ext-css-tailwind": "0.1.1177",
|
|
350
|
+
"@veryfront/ext-parser-babel": "0.1.1177"
|
|
351
351
|
},
|
|
352
352
|
"devDependencies": {
|
|
353
353
|
"@types/node": "20.9.0"
|