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.
@@ -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,CAuBpF"}
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
- validateSkillMetadata(parsed.frontmatter, basename(dir));
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
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.1176",
3
+ "version": "0.1.1177",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "minimumDependencyAge": {
@@ -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":"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"}
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: (typeof d.name === "string" ? d.name.trim() : undefined) || undefined,
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: metadata.name ?? input.id,
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.name === skill.id ? skill.id : `${skill.name} (\`${skill.id}\`)`;
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;AA4BD;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,uCAAuC,GAC7C,OAAO,CAAC,MAAM,EAAE,CAAC,CAwDnB"}
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,CAkF/B"}
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
- // Warn if metadata name differs from directory name, use directory name as ID
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): SkillMetadata;
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,EAAkD,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhG,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,GACpB,aAAa,CAkDf"}
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"}
@@ -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
- // Name: from frontmatter or directory name
65
- const rawName = typeof frontmatter.name === "string" ? frontmatter.name.trim() : directoryName;
66
- if (!SKILL_NAME_REGEX.test(rawName)) {
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 "${rawName}": must be lowercase alphanumeric with hyphens, 1-64 characters`,
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 "${rawName}" is missing a required "description" field`,
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, rawName);
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: rawName,
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,CA0C3E"}
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
- lines.push(`- **${id}**: ${skill.metadata.description}`);
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;AAa3E,KAAK,wBAAwB,GAAG;IAC9B,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,KAAK,SAAS,MAAM,EAAE,CAAC;CAC3F,CAAC;AA2KF;;;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"}
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"}
@@ -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 (!skill) {
67
- if (allowedSkillIds !== undefined) {
68
- throw createSkillUnavailableError();
69
- }
70
- const visible = skillRegistry.getVisibleSkillIds(scope).join(", ");
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: `Skill "${skillId}" not found. Available skills: ${visible || "none"}`,
79
+ message: `Invalid skill id "${skillId}": ${expectation}`,
74
80
  }));
75
81
  }
76
- assertSkillAllowedBySelector(skill, allowedSkillIds);
77
- return skill;
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({
@@ -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"}
@@ -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", (v) => String(v));
227
- extractToEntryField(entry, mergedContext, "traceId", (v) => String(v));
228
- extractToEntryField(entry, mergedContext, "spanId", (v) => String(v));
229
- extractToEntryField(entry, mergedContext, "projectSlug", (v) => String(v));
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", (v) => String(v));
241
- extractToEntryField(entry, mergedContext, "trace_id", (v) => String(v));
242
- extractToEntryField(entry, mergedContext, "span_id", (v) => String(v));
243
- extractToEntryField(entry, mergedContext, "project_slug", (v) => String(v));
244
- // request_url / domain are URL-shaped and lifted out of mergedContext
245
- // *before* redactSensitive runs, so they bypass the key-based redactor.
246
- // Scrub embedded credentials (userinfo, ?access_token=, …) here (#1989).
247
- extractToEntryField(entry, mergedContext, "request_url", (v) => sanitizeUrlCredentials(String(v)));
248
- extractToEntryField(entry, mergedContext, "domain", (v) => sanitizeUrlCredentials(String(v)));
249
- extractToEntryField(entry, mergedContext, "project_id", (v) => String(v));
250
- extractToEntryField(entry, mergedContext, "release_id", (v) => String(v));
251
- extractToEntryField(entry, mergedContext, "branch_id", (v) => String(v));
252
- extractToEntryField(entry, mergedContext, "branch_name", (v) => String(v));
253
- extractToEntryField(entry, mergedContext, "run_execution_id", (v) => String(v));
254
- extractToEntryField(entry, mergedContext, "run_id", (v) => String(v));
255
- extractToEntryField(entry, mergedContext, "agent_id", (v) => String(v));
256
- extractToEntryField(entry, mergedContext, "thread_id", (v) => String(v));
257
- extractToEntryField(entry, mergedContext, "schedule_id", (v) => String(v));
258
- extractToEntryField(entry, mergedContext, "schedule_name", (v) => String(v));
259
- extractToEntryField(entry, mergedContext, "tool_name", (v) => String(v));
260
- extractToEntryField(entry, mergedContext, "tool_call_id", (v) => String(v));
261
- extractToEntryField(entry, mergedContext, "batch_id", (v) => String(v));
262
- extractToEntryField(entry, mergedContext, "run_target", (v) => String(v));
263
- extractToEntryField(entry, mergedContext, "task", (v) => String(v));
264
- extractToEntryField(entry, mergedContext, "event_kind", (v) => String(v));
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", (v) => String(v));
268
- extractToEntryField(entry, mergedContext, "conversation_id", (v) => String(v));
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", (v) => String(v));
271
- extractToEntryField(entry, mergedContext, "conversationId", (v) => String(v));
272
- extractAliasToEntryField(entry, mergedContext, "runId", "run_id", (v) => String(v));
273
- extractAliasToEntryField(entry, mergedContext, "agentId", "agent_id", (v) => String(v));
274
- extractAliasToEntryField(entry, mergedContext, "threadId", "thread_id", (v) => String(v));
275
- extractAliasToEntryField(entry, mergedContext, "scheduleId", "schedule_id", (v) => String(v));
276
- extractAliasToEntryField(entry, mergedContext, "scheduleName", "schedule_name", (v) => String(v));
277
- extractAliasToEntryField(entry, mergedContext, "toolName", "tool_name", (v) => String(v));
278
- extractAliasToEntryField(entry, mergedContext, "toolCallId", "tool_call_id", (v) => String(v));
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;AA6ED;;;;;;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"}
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 can safely rewrite.
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
  /**
@@ -1,3 +1,3 @@
1
1
  /** Shared version value. */
2
- export declare const VERSION = "0.1.1176";
2
+ export declare const VERSION = "0.1.1177";
3
3
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
3
  /** Shared version value. */
4
- export const VERSION = "0.1.1176";
4
+ export const VERSION = "0.1.1177";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.1176",
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.1176",
348
- "@veryfront/ext-content-mdx": "0.1.1176",
349
- "@veryfront/ext-css-tailwind": "0.1.1176",
350
- "@veryfront/ext-parser-babel": "0.1.1176"
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"