@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.
- package/dist/execution/command.d.ts +38 -4
- package/dist/execution/command.d.ts.map +1 -1
- package/dist/execution/command.js +42 -8
- package/dist/execution/command.js.map +1 -1
- package/dist/execution/index.d.ts +1 -1
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js.map +1 -1
- package/dist/execution/types.d.ts +6 -0
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/manifest/index.d.ts +2 -2
- package/dist/manifest/index.d.ts.map +1 -1
- package/dist/manifest/index.js +1 -1
- package/dist/manifest/index.js.map +1 -1
- package/dist/manifest/loader.d.ts +14 -4
- package/dist/manifest/loader.d.ts.map +1 -1
- package/dist/manifest/loader.js +12 -8
- package/dist/manifest/loader.js.map +1 -1
- package/dist/manifest/validator.d.ts +21 -4
- package/dist/manifest/validator.d.ts.map +1 -1
- package/dist/manifest/validator.js +72 -47
- package/dist/manifest/validator.js.map +1 -1
- package/dist/resolver.d.ts +3 -0
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +12 -5
- package/dist/resolver.js.map +1 -1
- package/package.json +2 -2
- package/src/execution/command.ts +58 -7
- package/src/execution/index.ts +1 -0
- package/src/execution/types.ts +6 -0
- package/src/manifest/index.ts +3 -0
- package/src/manifest/loader.ts +29 -9
- package/src/manifest/validator.ts +102 -57
- package/src/resolver.ts +18 -6
- package/tests/execution/command.test.ts +231 -0
- package/tests/manifest/validator.test.ts +77 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -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
|
-
*
|
|
82
|
+
* Create a tool manifest schema with configurable name validation
|
|
78
83
|
*/
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
.
|
|
84
|
-
|
|
85
|
-
.
|
|
86
|
-
|
|
87
|
-
.string()
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
.string()
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
.string()
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
|
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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"}
|
package/dist/resolver.d.ts
CHANGED
|
@@ -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
|
package/dist/resolver.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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
|
}
|
package/dist/resolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,
|
|
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.
|
|
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.
|
|
21
|
+
"@enactprotocol/trust": "2.1.24",
|
|
22
22
|
"js-yaml": "^4.1.1",
|
|
23
23
|
"zod": "^4.1.13"
|
|
24
24
|
},
|
package/src/execution/command.ts
CHANGED
|
@@ -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 =
|
|
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
|
}
|
package/src/execution/index.ts
CHANGED
package/src/execution/types.ts
CHANGED
|
@@ -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
|
/**
|
package/src/manifest/index.ts
CHANGED
|
@@ -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";
|
package/src/manifest/loader.ts
CHANGED
|
@@ -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(
|
|
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(
|
|
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(
|
|
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
|
}
|