@enactprotocol/shared 2.1.22 → 2.1.24

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.
@@ -66,56 +66,72 @@ const JsonSchemaSchema = z
66
66
  */
67
67
  const SEMVER_REGEX = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
68
68
  /**
69
- * Tool name regex - hierarchical path format
69
+ * Tool name regex - hierarchical path format (required for publishing)
70
70
  */
71
71
  const TOOL_NAME_REGEX = /^[a-z0-9_-]+(?:\/[a-z0-9_-]+)+$/;
72
+ /**
73
+ * Tool name regex - simple format (allowed for local tools)
74
+ * Allows both hierarchical (org/tool) and simple (my-tool) names
75
+ */
76
+ const TOOL_NAME_REGEX_LOCAL = /^[a-z0-9_-]+(?:\/[a-z0-9_-]+)*$/;
72
77
  /**
73
78
  * Go duration regex (used for timeout)
74
79
  */
75
80
  const GO_DURATION_REGEX = /^(\d+)(ns|us|µs|ms|s|m|h)$/;
76
81
  /**
77
- * Complete tool manifest schema
82
+ * Create a tool manifest schema with configurable name validation
78
83
  */
79
- const ToolManifestSchema = z
80
- .object({
81
- // Required fields
82
- name: z
83
- .string()
84
- .min(1, "Tool name is required")
85
- .regex(TOOL_NAME_REGEX, "Tool name must be hierarchical path format (e.g., 'org/tool' or 'org/category/tool')"),
86
- description: z
87
- .string()
88
- .min(1, "Description is required")
89
- .max(500, "Description should be 500 characters or less"),
90
- // Recommended fields
91
- enact: z.string().optional(),
92
- version: z
93
- .string()
94
- .regex(SEMVER_REGEX, "Version must be valid semver (e.g., '1.0.0')")
95
- .optional(),
96
- from: z.string().optional(),
97
- command: z.string().optional(),
98
- timeout: z
99
- .string()
100
- .regex(GO_DURATION_REGEX, "Timeout must be Go duration format (e.g., '30s', '5m', '1h')")
101
- .optional(),
102
- license: z.string().optional(),
103
- tags: z.array(z.string()).optional(),
104
- // Schema fields
105
- inputSchema: JsonSchemaSchema.optional(),
106
- outputSchema: JsonSchemaSchema.optional(),
107
- // Environment variables
108
- env: z.record(z.string(), EnvVariableSchema).optional(),
109
- // Behavior & Resources
110
- annotations: ToolAnnotationsSchema.optional(),
111
- resources: ResourceRequirementsSchema.optional(),
112
- // Documentation
113
- doc: z.string().optional(),
114
- authors: z.array(AuthorSchema).optional(),
115
- // Testing
116
- examples: z.array(ToolExampleSchema).optional(),
117
- })
118
- .passthrough(); // Allow x-* custom fields
84
+ function createToolManifestSchema(allowSimpleNames) {
85
+ const nameRegex = allowSimpleNames ? TOOL_NAME_REGEX_LOCAL : TOOL_NAME_REGEX;
86
+ const nameMessage = allowSimpleNames
87
+ ? "Tool name must contain only lowercase letters, numbers, hyphens, and underscores"
88
+ : "Tool name must be hierarchical path format (e.g., 'org/tool' or 'org/category/tool')";
89
+ return z
90
+ .object({
91
+ // Required fields
92
+ name: z.string().min(1, "Tool name is required").regex(nameRegex, nameMessage),
93
+ description: z
94
+ .string()
95
+ .min(1, "Description is required")
96
+ .max(500, "Description should be 500 characters or less"),
97
+ // Recommended fields
98
+ enact: z.string().optional(),
99
+ version: z
100
+ .string()
101
+ .regex(SEMVER_REGEX, "Version must be valid semver (e.g., '1.0.0')")
102
+ .optional(),
103
+ from: z.string().optional(),
104
+ command: z.string().optional(),
105
+ timeout: z
106
+ .string()
107
+ .regex(GO_DURATION_REGEX, "Timeout must be Go duration format (e.g., '30s', '5m', '1h')")
108
+ .optional(),
109
+ license: z.string().optional(),
110
+ tags: z.array(z.string()).optional(),
111
+ // Schema fields
112
+ inputSchema: JsonSchemaSchema.optional(),
113
+ outputSchema: JsonSchemaSchema.optional(),
114
+ // Environment variables
115
+ env: z.record(z.string(), EnvVariableSchema).optional(),
116
+ // Behavior & Resources
117
+ annotations: ToolAnnotationsSchema.optional(),
118
+ resources: ResourceRequirementsSchema.optional(),
119
+ // Documentation
120
+ doc: z.string().optional(),
121
+ authors: z.array(AuthorSchema).optional(),
122
+ // Testing
123
+ examples: z.array(ToolExampleSchema).optional(),
124
+ })
125
+ .passthrough(); // Allow x-* custom fields
126
+ }
127
+ /**
128
+ * Complete tool manifest schema (strict - requires hierarchical names)
129
+ */
130
+ const ToolManifestSchema = createToolManifestSchema(false);
131
+ /**
132
+ * Local tool manifest schema (relaxed - allows simple names)
133
+ */
134
+ const ToolManifestSchemaLocal = createToolManifestSchema(true);
119
135
  // ==================== Validation Functions ====================
120
136
  /**
121
137
  * Convert Zod error to our ValidationError format
@@ -201,10 +217,12 @@ function generateWarnings(manifest) {
201
217
  * Validate a tool manifest
202
218
  *
203
219
  * @param manifest - The manifest to validate (parsed but unvalidated)
220
+ * @param options - Validation options
204
221
  * @returns ValidationResult with valid flag, errors, and warnings
205
222
  */
206
- export function validateManifest(manifest) {
207
- const result = ToolManifestSchema.safeParse(manifest);
223
+ export function validateManifest(manifest, options = {}) {
224
+ const schema = options.allowSimpleNames ? ToolManifestSchemaLocal : ToolManifestSchema;
225
+ const result = schema.safeParse(manifest);
208
226
  if (!result.success) {
209
227
  return {
210
228
  valid: false,
@@ -224,11 +242,12 @@ export function validateManifest(manifest) {
224
242
  * Throws if validation fails
225
243
  *
226
244
  * @param manifest - The manifest to validate
245
+ * @param options - Validation options
227
246
  * @returns The validated ToolManifest
228
247
  * @throws Error if validation fails
229
248
  */
230
- export function validateManifestStrict(manifest) {
231
- const result = validateManifest(manifest);
249
+ export function validateManifestStrict(manifest, options = {}) {
250
+ const result = validateManifest(manifest, options);
232
251
  if (!result.valid) {
233
252
  const errorMessages = result.errors?.map((e) => `${e.path}: ${e.message}`).join(", ");
234
253
  throw new Error(`Manifest validation failed: ${errorMessages}`);
@@ -236,11 +255,17 @@ export function validateManifestStrict(manifest) {
236
255
  return manifest;
237
256
  }
238
257
  /**
239
- * Check if a string is a valid tool name
258
+ * Check if a string is a valid tool name (hierarchical format for publishing)
240
259
  */
241
260
  export function isValidToolName(name) {
242
261
  return TOOL_NAME_REGEX.test(name);
243
262
  }
263
+ /**
264
+ * Check if a string is a valid local tool name (allows simple names)
265
+ */
266
+ export function isValidLocalToolName(name) {
267
+ return TOOL_NAME_REGEX_LOCAL.test(name);
268
+ }
244
269
  /**
245
270
  * Check if a string is a valid semver version
246
271
  */
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/manifest/validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/manifest/validator.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,9 @@ export declare function getToolPath(toolsDir: string, toolName: string): string;
47
47
  /**
48
48
  * Resolve a tool from a file path
49
49
  *
50
+ * Local/file tools are allowed to have simple names (without hierarchy)
51
+ * since they don't need to be published.
52
+ *
50
53
  * @param filePath - Path to manifest file or directory containing manifest
51
54
  * @returns ToolResolution
52
55
  * @throws ToolResolveError if not found
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAErE;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,QAAQ,EAAE,MAAM;aAChB,iBAAiB,CAAC,EAAE,MAAM,EAAE;gBAF5C,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,CAAC,EAAE,MAAM,EAAE,YAAA;CAK/C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAkCD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CA8BpE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,cAAc,CAqE1F;AA6BD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,cAAmB,GAC3B,cAAc,GAAG,IAAI,CAiBvB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,cAAmB,GAC3B,cAAc,CAqBhB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,EAAE,CA2B3F"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAErE;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,QAAQ,EAAE,MAAM;aAChB,iBAAiB,CAAC,EAAE,MAAM,EAAE;gBAF5C,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,CAAC,EAAE,MAAM,EAAE,YAAA;CAK/C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAuCD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAiCpE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,cAAc,CAqE1F;AA6BD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,cAAmB,GAC3B,cAAc,GAAG,IAAI,CAiBvB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,cAAmB,GAC3B,cAAc,CAsBhB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,EAAE,CA2B3F"}
package/dist/resolver.js CHANGED
@@ -50,9 +50,10 @@ export function getToolPath(toolsDir, toolName) {
50
50
  *
51
51
  * @param dir - Directory to check
52
52
  * @param location - The location type for metadata
53
+ * @param options - Options for loading the manifest
53
54
  * @returns ToolResolution or null if not found/invalid
54
55
  */
55
- function tryLoadFromDir(dir, location) {
56
+ function tryLoadFromDir(dir, location, options = {}) {
56
57
  if (!existsSync(dir)) {
57
58
  return null;
58
59
  }
@@ -61,7 +62,7 @@ function tryLoadFromDir(dir, location) {
61
62
  return null;
62
63
  }
63
64
  try {
64
- const loaded = loadManifest(manifestPath);
65
+ const loaded = loadManifest(manifestPath, options);
65
66
  return {
66
67
  manifest: loaded.manifest,
67
68
  sourceDir: dir,
@@ -78,12 +79,17 @@ function tryLoadFromDir(dir, location) {
78
79
  /**
79
80
  * Resolve a tool from a file path
80
81
  *
82
+ * Local/file tools are allowed to have simple names (without hierarchy)
83
+ * since they don't need to be published.
84
+ *
81
85
  * @param filePath - Path to manifest file or directory containing manifest
82
86
  * @returns ToolResolution
83
87
  * @throws ToolResolveError if not found
84
88
  */
85
89
  export function resolveToolFromPath(filePath) {
86
90
  const absolutePath = isAbsolute(filePath) ? filePath : resolve(filePath);
91
+ // Local tools can have simple names (no hierarchy required)
92
+ const localOptions = { allowSimpleNames: true };
87
93
  // Check if it's a manifest file directly
88
94
  if (absolutePath.endsWith(".yaml") ||
89
95
  absolutePath.endsWith(".yml") ||
@@ -91,7 +97,7 @@ export function resolveToolFromPath(filePath) {
91
97
  if (!existsSync(absolutePath)) {
92
98
  throw new ToolResolveError(`Manifest file not found: ${absolutePath}`, filePath);
93
99
  }
94
- const loaded = loadManifest(absolutePath);
100
+ const loaded = loadManifest(absolutePath, localOptions);
95
101
  return {
96
102
  manifest: loaded.manifest,
97
103
  sourceDir: dirname(absolutePath),
@@ -101,7 +107,7 @@ export function resolveToolFromPath(filePath) {
101
107
  };
102
108
  }
103
109
  // Treat as directory
104
- const result = tryLoadFromDir(absolutePath, "file");
110
+ const result = tryLoadFromDir(absolutePath, "file", localOptions);
105
111
  if (result) {
106
112
  return result;
107
113
  }
@@ -240,7 +246,8 @@ export function resolveToolAuto(toolNameOrPath, options = {}) {
240
246
  }
241
247
  // Check if the path exists as-is (could be a relative directory without ./)
242
248
  if (existsSync(toolNameOrPath)) {
243
- const result = tryLoadFromDir(resolve(toolNameOrPath), "file");
249
+ // Local tools can have simple names (no hierarchy required)
250
+ const result = tryLoadFromDir(resolve(toolNameOrPath), "file", { allowSimpleNames: true });
244
251
  if (result) {
245
252
  return result;
246
253
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enactprotocol/shared",
3
- "version": "2.1.22",
3
+ "version": "2.1.24",
4
4
  "description": "Core business logic and utilities for Enact",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -18,7 +18,7 @@
18
18
  "typecheck": "tsc --noEmit"
19
19
  },
20
20
  "dependencies": {
21
- "@enactprotocol/trust": "2.1.22",
21
+ "@enactprotocol/trust": "2.1.24",
22
22
  "js-yaml": "^4.1.1",
23
23
  "zod": "^4.1.13"
24
24
  },
@@ -3,6 +3,17 @@
3
3
  *
4
4
  * Handles ${parameter} substitution in command templates with proper escaping.
5
5
  *
6
+ * ## Parameter Recognition
7
+ *
8
+ * Only `${...}` patterns that match parameters defined in the tool's inputSchema
9
+ * are substituted. Other `${...}` patterns (like bash variables, arrays, etc.)
10
+ * are passed through unchanged to the shell.
11
+ *
12
+ * This allows natural use of shell syntax:
13
+ * - `${name}` - Substituted if "name" is in inputSchema
14
+ * - `${MY_VAR}` - Passed through to bash (not in inputSchema)
15
+ * - `${array[$i]}` - Passed through to bash (not in inputSchema)
16
+ *
6
17
  * ## Quoting Behavior
7
18
  *
8
19
  * Enact automatically applies shell-escaping (quoting) to parameter values
@@ -34,6 +45,18 @@ import type { CommandToken, InterpolationOptions, ParsedCommand } from "./types"
34
45
  */
35
46
  const PARAM_PATTERN = /\$\{([^}:]+)(?::([^}]+))?\}/g;
36
47
 
48
+ /**
49
+ * Options for parsing a command template
50
+ */
51
+ export interface ParseCommandOptions {
52
+ /**
53
+ * Set of known parameter names from the inputSchema.
54
+ * Only ${...} patterns matching these names will be treated as parameters.
55
+ * If not provided, ALL ${...} patterns are treated as parameters (legacy behavior).
56
+ */
57
+ knownParameters?: Set<string>;
58
+ }
59
+
37
60
  /**
38
61
  * Parse a command template into tokens
39
62
  *
@@ -41,10 +64,16 @@ const PARAM_PATTERN = /\$\{([^}:]+)(?::([^}]+))?\}/g;
41
64
  * - Parameters with modifiers: ${param:raw}
42
65
  * - Parameters surrounded by quotes: '${param}' or "${param}"
43
66
  *
67
+ * When knownParameters is provided, only ${...} patterns matching known parameter
68
+ * names are treated as parameters. Other patterns are kept as literals, allowing
69
+ * natural shell syntax like ${MY_VAR} or ${array[$i]} to pass through.
70
+ *
44
71
  * @param command - Command template with ${parameter} placeholders
72
+ * @param options - Parse options including knownParameters
45
73
  * @returns Parsed command with tokens and parameter list
46
74
  */
47
- export function parseCommand(command: string): ParsedCommand {
75
+ export function parseCommand(command: string, options: ParseCommandOptions = {}): ParsedCommand {
76
+ const { knownParameters } = options;
48
77
  const tokens: CommandToken[] = [];
49
78
  const parameters: string[] = [];
50
79
 
@@ -60,6 +89,16 @@ export function parseCommand(command: string): ParsedCommand {
60
89
  const modifier = match[2]; // e.g., "raw"
61
90
  const isRaw = modifier === "raw";
62
91
 
92
+ // Check if this is a known parameter (or if we're in legacy mode with no filter)
93
+ const isKnownParameter = !knownParameters || (paramName && knownParameters.has(paramName));
94
+
95
+ if (!isKnownParameter) {
96
+ // Not a known parameter - skip and continue
97
+ // The text will be included in the next literal segment
98
+ match = PARAM_PATTERN.exec(command);
99
+ continue;
100
+ }
101
+
63
102
  // Check if preceded by a quote
64
103
  let startIndex = match.index;
65
104
  let surroundingQuotes: "single" | "double" | undefined;
@@ -198,6 +237,9 @@ export function valueToString(value: unknown, jsonifyObjects = true): string {
198
237
  * - Raw parameters: `${param:raw}` - no quoting applied
199
238
  * - Quoted parameters: `'${param}'` - quotes stripped, warning emitted
200
239
  *
240
+ * When knownParameters is provided in options, only matching ${...} patterns
241
+ * are substituted. Other patterns pass through unchanged for shell processing.
242
+ *
201
243
  * @param command - Command template or parsed command
202
244
  * @param params - Parameter values
203
245
  * @param options - Interpolation options
@@ -214,9 +256,13 @@ export function interpolateCommand(
214
256
  jsonifyObjects = true,
215
257
  onMissing = "error",
216
258
  onWarning,
259
+ knownParameters,
217
260
  } = options;
218
261
 
219
- const parsed = typeof command === "string" ? parseCommand(command) : command;
262
+ const parsed =
263
+ typeof command === "string"
264
+ ? parseCommand(command, knownParameters ? { knownParameters } : {})
265
+ : command;
220
266
 
221
267
  const parts: string[] = [];
222
268
 
@@ -354,10 +400,12 @@ export function needsShellWrap(command: string): boolean {
354
400
  * Prepare a command for execution
355
401
  *
356
402
  * Parses the command and determines if it needs shell wrapping.
403
+ * When knownParameters is provided, only matching ${...} patterns are
404
+ * substituted, allowing shell syntax to pass through unchanged.
357
405
  *
358
406
  * @param command - Command template
359
407
  * @param params - Parameter values for interpolation
360
- * @param options - Interpolation options
408
+ * @param options - Interpolation options (including knownParameters)
361
409
  * @returns Command ready for execution [program, ...args]
362
410
  */
363
411
  export function prepareCommand(
@@ -390,13 +438,15 @@ export function prepareCommand(
390
438
  *
391
439
  * @param command - Parsed command
392
440
  * @param params - Provided parameters
441
+ * @param options - Parse options including knownParameters
393
442
  * @returns Array of missing parameter names
394
443
  */
395
444
  export function getMissingParams(
396
445
  command: string | ParsedCommand,
397
- params: Record<string, unknown>
446
+ params: Record<string, unknown>,
447
+ options: ParseCommandOptions = {}
398
448
  ): string[] {
399
- const parsed = typeof command === "string" ? parseCommand(command) : command;
449
+ const parsed = typeof command === "string" ? parseCommand(command, options) : command;
400
450
 
401
451
  return parsed.parameters.filter((param) => params[param] === undefined);
402
452
  }
@@ -405,8 +455,9 @@ export function getMissingParams(
405
455
  * Get all parameters in a command template
406
456
  *
407
457
  * @param command - Command template
458
+ * @param options - Parse options including knownParameters
408
459
  * @returns Array of parameter names
409
460
  */
410
- export function getCommandParams(command: string): string[] {
411
- return parseCommand(command).parameters;
461
+ export function getCommandParams(command: string, options: ParseCommandOptions = {}): string[] {
462
+ return parseCommand(command, options).parameters;
412
463
  }
@@ -61,6 +61,7 @@ export {
61
61
  parseCommandArgs,
62
62
  prepareCommand,
63
63
  getMissingParams,
64
+ type ParseCommandOptions,
64
65
  } from "./command.js";
65
66
 
66
67
  // Input validation
@@ -324,6 +324,12 @@ export interface InterpolationOptions {
324
324
  onMissing?: "error" | "empty" | "keep";
325
325
  /** Callback for warnings (e.g., potential double-quoting) */
326
326
  onWarning?: (warning: CommandWarning) => void;
327
+ /**
328
+ * Set of known parameter names from the inputSchema.
329
+ * Only ${...} patterns matching these names will be substituted.
330
+ * If not provided, ALL ${...} patterns are treated as parameters (legacy behavior).
331
+ */
332
+ knownParameters?: Set<string>;
327
333
  }
328
334
 
329
335
  /**
@@ -18,9 +18,11 @@ export {
18
18
  validateManifest,
19
19
  validateManifestStrict,
20
20
  isValidToolName,
21
+ isValidLocalToolName,
21
22
  isValidVersion,
22
23
  isValidTimeout,
23
24
  ToolManifestSchema,
25
+ type ValidateManifestOptions,
24
26
  } from "./validator";
25
27
 
26
28
  // Loader
@@ -33,4 +35,5 @@ export {
33
35
  tryLoadManifest,
34
36
  tryLoadManifestFromDir,
35
37
  type LoadedManifest,
38
+ type LoadManifestOptions,
36
39
  } from "./loader";
@@ -9,7 +9,7 @@ import { basename, join } from "node:path";
9
9
  import type { ParsedManifest, ToolManifest, ValidationResult } from "../types/manifest";
10
10
  import { MANIFEST_FILES } from "../types/manifest";
11
11
  import { ManifestParseError, parseManifestAuto } from "./parser";
12
- import { validateManifest } from "./validator";
12
+ import { type ValidateManifestOptions, validateManifest } from "./validator";
13
13
 
14
14
  /**
15
15
  * Error thrown when loading a manifest fails
@@ -41,14 +41,22 @@ export interface LoadedManifest {
41
41
  warnings?: ValidationResult["warnings"];
42
42
  }
43
43
 
44
+ /**
45
+ * Options for loading a manifest
46
+ */
47
+ export interface LoadManifestOptions extends ValidateManifestOptions {
48
+ // Inherits allowSimpleNames from ValidateManifestOptions
49
+ }
50
+
44
51
  /**
45
52
  * Load a manifest from a file path
46
53
  *
47
54
  * @param filePath - Path to the manifest file (SKILL.md, enact.md, enact.yaml, or enact.yml)
55
+ * @param options - Options for loading and validation
48
56
  * @returns LoadedManifest with validated manifest and metadata
49
57
  * @throws ManifestLoadError if file doesn't exist, parse fails, or validation fails
50
58
  */
51
- export function loadManifest(filePath: string): LoadedManifest {
59
+ export function loadManifest(filePath: string, options: LoadManifestOptions = {}): LoadedManifest {
52
60
  // Check file exists
53
61
  if (!existsSync(filePath)) {
54
62
  throw new ManifestLoadError(`Manifest file not found: ${filePath}`, filePath);
@@ -82,7 +90,7 @@ export function loadManifest(filePath: string): LoadedManifest {
82
90
  }
83
91
 
84
92
  // Validate the manifest
85
- const validation = validateManifest(parsed.manifest);
93
+ const validation = validateManifest(parsed.manifest, options);
86
94
 
87
95
  if (!validation.valid) {
88
96
  const errorMessages =
@@ -114,15 +122,19 @@ export function loadManifest(filePath: string): LoadedManifest {
114
122
  * Searches for SKILL.md, enact.md, enact.yaml, or enact.yml in the given directory
115
123
  *
116
124
  * @param dir - Directory to search for manifest
125
+ * @param options - Options for loading and validation
117
126
  * @returns LoadedManifest if found
118
127
  * @throws ManifestLoadError if no manifest found or loading fails
119
128
  */
120
- export function loadManifestFromDir(dir: string): LoadedManifest {
129
+ export function loadManifestFromDir(
130
+ dir: string,
131
+ options: LoadManifestOptions = {}
132
+ ): LoadedManifest {
121
133
  // Try each manifest filename in order of preference
122
134
  for (const filename of MANIFEST_FILES) {
123
135
  const filePath = join(dir, filename);
124
136
  if (existsSync(filePath)) {
125
- return loadManifest(filePath);
137
+ return loadManifest(filePath, options);
126
138
  }
127
139
  }
128
140
 
@@ -162,11 +174,15 @@ export function hasManifest(dir: string): boolean {
162
174
  * Try to load a manifest, returning null instead of throwing
163
175
  *
164
176
  * @param filePath - Path to the manifest file
177
+ * @param options - Options for loading and validation
165
178
  * @returns LoadedManifest or null if loading fails
166
179
  */
167
- export function tryLoadManifest(filePath: string): LoadedManifest | null {
180
+ export function tryLoadManifest(
181
+ filePath: string,
182
+ options: LoadManifestOptions = {}
183
+ ): LoadedManifest | null {
168
184
  try {
169
- return loadManifest(filePath);
185
+ return loadManifest(filePath, options);
170
186
  } catch {
171
187
  return null;
172
188
  }
@@ -176,11 +192,15 @@ export function tryLoadManifest(filePath: string): LoadedManifest | null {
176
192
  * Try to load a manifest from a directory, returning null instead of throwing
177
193
  *
178
194
  * @param dir - Directory to search
195
+ * @param options - Options for loading and validation
179
196
  * @returns LoadedManifest or null if no manifest found or loading fails
180
197
  */
181
- export function tryLoadManifestFromDir(dir: string): LoadedManifest | null {
198
+ export function tryLoadManifestFromDir(
199
+ dir: string,
200
+ options: LoadManifestOptions = {}
201
+ ): LoadedManifest | null {
182
202
  try {
183
- return loadManifestFromDir(dir);
203
+ return loadManifestFromDir(dir, options);
184
204
  } catch {
185
205
  return null;
186
206
  }