@enactprotocol/shared 2.2.4 → 2.3.4
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/README.md +1 -18
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +32 -6
- package/dist/config.js.map +1 -1
- package/dist/execution/action-command.d.ts +131 -0
- package/dist/execution/action-command.d.ts.map +1 -0
- package/dist/execution/action-command.js +300 -0
- package/dist/execution/action-command.js.map +1 -0
- package/dist/execution/command.d.ts +8 -8
- package/dist/execution/command.js +6 -6
- package/dist/execution/index.d.ts +1 -0
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +2 -0
- package/dist/execution/index.js.map +1 -1
- package/dist/execution/types.d.ts +5 -2
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/execution/types.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -4
- package/dist/index.js.map +1 -1
- package/dist/manifest/actions-loader.d.ts +29 -0
- package/dist/manifest/actions-loader.d.ts.map +1 -0
- package/dist/manifest/actions-loader.js +34 -0
- package/dist/manifest/actions-loader.js.map +1 -0
- package/dist/manifest/actions-parser.d.ts +69 -0
- package/dist/manifest/actions-parser.d.ts.map +1 -0
- package/dist/manifest/actions-parser.js +265 -0
- package/dist/manifest/actions-parser.js.map +1 -0
- package/dist/manifest/index.d.ts +2 -0
- package/dist/manifest/index.d.ts.map +1 -1
- package/dist/manifest/index.js +4 -0
- package/dist/manifest/index.js.map +1 -1
- package/dist/manifest/loader.d.ts +7 -2
- package/dist/manifest/loader.d.ts.map +1 -1
- package/dist/manifest/loader.js +71 -4
- package/dist/manifest/loader.js.map +1 -1
- package/dist/manifest/parser.d.ts +1 -0
- package/dist/manifest/parser.d.ts.map +1 -1
- package/dist/manifest/parser.js +1 -0
- package/dist/manifest/parser.js.map +1 -1
- package/dist/manifest/scripts.d.ts +19 -0
- package/dist/manifest/scripts.d.ts.map +1 -0
- package/dist/manifest/scripts.js +102 -0
- package/dist/manifest/scripts.js.map +1 -0
- package/dist/manifest/validator.d.ts +1 -8
- package/dist/manifest/validator.d.ts.map +1 -1
- package/dist/manifest/validator.js +14 -13
- package/dist/manifest/validator.js.map +1 -1
- package/dist/mcp-registry.js +5 -5
- package/dist/mcp-registry.js.map +1 -1
- package/dist/paths.d.ts +9 -2
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +12 -3
- package/dist/paths.js.map +1 -1
- package/dist/registry.d.ts +3 -2
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +5 -5
- package/dist/registry.js.map +1 -1
- package/dist/resolver.d.ts +55 -4
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +133 -75
- package/dist/resolver.js.map +1 -1
- package/dist/types/actions.d.ts +194 -0
- package/dist/types/actions.d.ts.map +1 -0
- package/dist/types/actions.js +32 -0
- package/dist/types/actions.js.map +1 -0
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/manifest.d.ts +50 -5
- package/dist/types/manifest.d.ts.map +1 -1
- package/dist/types/manifest.js +10 -2
- package/dist/types/manifest.js.map +1 -1
- package/package.json +2 -2
- package/src/config.ts +48 -6
- package/src/execution/action-command.ts +417 -0
- package/src/execution/command.ts +8 -8
- package/src/execution/index.ts +17 -0
- package/src/execution/types.ts +13 -2
- package/src/index.ts +37 -0
- package/src/manifest/actions-loader.ts +49 -0
- package/src/manifest/index.ts +12 -0
- package/src/manifest/loader.ts +77 -4
- package/src/manifest/parser.ts +1 -0
- package/src/manifest/scripts.ts +116 -0
- package/src/manifest/validator.ts +15 -14
- package/src/mcp-registry.ts +5 -5
- package/src/paths.ts +13 -3
- package/src/registry.ts +5 -5
- package/src/resolver.ts +172 -77
- package/src/types/actions.ts +223 -0
- package/src/types/index.ts +11 -0
- package/src/types/manifest.ts +67 -6
- package/tests/action-command.test.ts +249 -0
- package/tests/config-normalization.test.ts +279 -0
- package/tests/config.test.ts +4 -1
- package/tests/effective-input-schema.test.ts +86 -0
- package/tests/fixtures/valid-tool.md +5 -12
- package/tests/fixtures/valid-tool.yaml +3 -10
- package/tests/hooks.test.ts +177 -0
- package/tests/manifest/loader.test.ts +34 -20
- package/tests/manifest/parser.test.ts +11 -15
- package/tests/manifest/validator.test.ts +7 -17
- package/tests/manifest-types.test.ts +9 -11
- package/tests/paths.test.ts +11 -4
- package/tests/registry.test.ts +12 -11
- package/tests/resolver.test.ts +11 -7
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser and validator for ACTIONS.yaml files
|
|
3
|
+
*
|
|
4
|
+
* ACTIONS.yaml defines executable actions for Agent Skills with typed inputs,
|
|
5
|
+
* validated outputs, and secure credential handling.
|
|
6
|
+
*
|
|
7
|
+
* @see RFC-001-AGENT-ACTIONS.md
|
|
8
|
+
*/
|
|
9
|
+
import yaml from "js-yaml";
|
|
10
|
+
/**
|
|
11
|
+
* Error thrown when parsing ACTIONS.yaml fails
|
|
12
|
+
*/
|
|
13
|
+
export class ActionsParseError extends Error {
|
|
14
|
+
originalError;
|
|
15
|
+
constructor(message, originalError) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = "ActionsParseError";
|
|
18
|
+
this.originalError = originalError;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Regex to detect {{param}} template syntax in a string
|
|
23
|
+
*/
|
|
24
|
+
const TEMPLATE_REGEX = /\{\{([^}]+)\}\}/g;
|
|
25
|
+
/**
|
|
26
|
+
* Check if a string contains {{param}} templates
|
|
27
|
+
*/
|
|
28
|
+
export function containsTemplates(str) {
|
|
29
|
+
return TEMPLATE_REGEX.test(str);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Extract template variable names from a command
|
|
33
|
+
*/
|
|
34
|
+
export function extractTemplateVars(command) {
|
|
35
|
+
const vars = new Set();
|
|
36
|
+
const strings = Array.isArray(command) ? command : [command];
|
|
37
|
+
for (const str of strings) {
|
|
38
|
+
// Reset regex lastIndex for each string
|
|
39
|
+
const regex = /\{\{([^}]+)\}\}/g;
|
|
40
|
+
let match;
|
|
41
|
+
while ((match = regex.exec(str)) !== null) {
|
|
42
|
+
const captured = match[1];
|
|
43
|
+
if (captured) {
|
|
44
|
+
vars.add(captured.trim());
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return Array.from(vars);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Parse YAML content into an ActionsManifest object
|
|
52
|
+
*
|
|
53
|
+
* @param content - Raw YAML string from ACTIONS.yaml
|
|
54
|
+
* @returns Parsed ActionsManifest (not yet validated)
|
|
55
|
+
* @throws ActionsParseError if YAML parsing fails
|
|
56
|
+
*/
|
|
57
|
+
export function parseActionsYaml(content) {
|
|
58
|
+
if (!content || content.trim() === "") {
|
|
59
|
+
throw new ActionsParseError("ACTIONS.yaml content is empty");
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const parsed = yaml.load(content);
|
|
63
|
+
if (parsed === null || parsed === undefined) {
|
|
64
|
+
throw new ActionsParseError("ACTIONS.yaml content is empty or null");
|
|
65
|
+
}
|
|
66
|
+
if (typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
67
|
+
throw new ActionsParseError("ACTIONS.yaml content must be an object, not an array or primitive");
|
|
68
|
+
}
|
|
69
|
+
return parsed;
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
if (error instanceof ActionsParseError) {
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
const yamlError = error;
|
|
76
|
+
throw new ActionsParseError(`Failed to parse ACTIONS.yaml: ${yamlError.message}`, yamlError);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Validate an ActionsManifest
|
|
81
|
+
*
|
|
82
|
+
* Checks:
|
|
83
|
+
* - Required fields present (actions map with at least one action)
|
|
84
|
+
* - Each action has description, command (inputSchema is optional)
|
|
85
|
+
* - String-form commands do not contain {{}} templates
|
|
86
|
+
* - inputSchema and outputSchema are valid objects (if present)
|
|
87
|
+
*
|
|
88
|
+
* @param manifest - The parsed manifest to validate
|
|
89
|
+
* @returns Validation result with any errors
|
|
90
|
+
*/
|
|
91
|
+
export function validateActionsManifest(manifest) {
|
|
92
|
+
const errors = [];
|
|
93
|
+
// Check actions map exists
|
|
94
|
+
if (!manifest.actions) {
|
|
95
|
+
errors.push({
|
|
96
|
+
path: "actions",
|
|
97
|
+
message: "actions field is required",
|
|
98
|
+
code: "MISSING_REQUIRED_FIELD",
|
|
99
|
+
});
|
|
100
|
+
return { valid: false, errors };
|
|
101
|
+
}
|
|
102
|
+
// Must be an object (map), not an array
|
|
103
|
+
if (typeof manifest.actions !== "object" || Array.isArray(manifest.actions)) {
|
|
104
|
+
errors.push({
|
|
105
|
+
path: "actions",
|
|
106
|
+
message: "actions must be an object (map of action names to definitions)",
|
|
107
|
+
code: "MISSING_REQUIRED_FIELD",
|
|
108
|
+
});
|
|
109
|
+
return { valid: false, errors };
|
|
110
|
+
}
|
|
111
|
+
const actionNames = Object.keys(manifest.actions);
|
|
112
|
+
if (actionNames.length === 0) {
|
|
113
|
+
errors.push({
|
|
114
|
+
path: "actions",
|
|
115
|
+
message: "actions must contain at least one action",
|
|
116
|
+
code: "EMPTY_ACTIONS_ARRAY",
|
|
117
|
+
});
|
|
118
|
+
return { valid: false, errors };
|
|
119
|
+
}
|
|
120
|
+
// Validate each action
|
|
121
|
+
for (const actionName of actionNames) {
|
|
122
|
+
const action = manifest.actions[actionName];
|
|
123
|
+
const prefix = `actions.${actionName}`;
|
|
124
|
+
if (!action || typeof action !== "object") {
|
|
125
|
+
errors.push({
|
|
126
|
+
path: prefix,
|
|
127
|
+
message: "action must be an object",
|
|
128
|
+
code: "MISSING_REQUIRED_FIELD",
|
|
129
|
+
});
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
// Validate action name format (the key)
|
|
133
|
+
if (!actionName || typeof actionName !== "string") {
|
|
134
|
+
errors.push({
|
|
135
|
+
path: prefix,
|
|
136
|
+
message: "action name (key) must be a non-empty string",
|
|
137
|
+
code: "MISSING_REQUIRED_FIELD",
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
// Validate required fields
|
|
141
|
+
if (!action.description || typeof action.description !== "string") {
|
|
142
|
+
errors.push({
|
|
143
|
+
path: `${prefix}.description`,
|
|
144
|
+
message: "action description is required and must be a string",
|
|
145
|
+
code: "MISSING_REQUIRED_FIELD",
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
if (!action.command) {
|
|
149
|
+
errors.push({
|
|
150
|
+
path: `${prefix}.command`,
|
|
151
|
+
message: "action command is required",
|
|
152
|
+
code: "MISSING_REQUIRED_FIELD",
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// Validate command format
|
|
157
|
+
const commandError = validateCommand(action.command, prefix);
|
|
158
|
+
if (commandError) {
|
|
159
|
+
errors.push(commandError);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// inputSchema is optional - but if present, validate it
|
|
163
|
+
if (action.inputSchema !== undefined &&
|
|
164
|
+
(typeof action.inputSchema !== "object" || Array.isArray(action.inputSchema))) {
|
|
165
|
+
errors.push({
|
|
166
|
+
path: `${prefix}.inputSchema`,
|
|
167
|
+
message: "inputSchema must be a JSON Schema object",
|
|
168
|
+
code: "INVALID_INPUT_SCHEMA",
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
// Validate optional outputSchema if present
|
|
172
|
+
if (action.outputSchema !== undefined &&
|
|
173
|
+
(typeof action.outputSchema !== "object" || Array.isArray(action.outputSchema))) {
|
|
174
|
+
errors.push({
|
|
175
|
+
path: `${prefix}.outputSchema`,
|
|
176
|
+
message: "outputSchema must be a JSON Schema object",
|
|
177
|
+
code: "INVALID_OUTPUT_SCHEMA",
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (errors.length > 0) {
|
|
182
|
+
return { valid: false, errors };
|
|
183
|
+
}
|
|
184
|
+
return { valid: true };
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Validate a command field
|
|
188
|
+
*
|
|
189
|
+
* - String form is allowed only without {{}} templates
|
|
190
|
+
* - Array form is required when using {{}} templates
|
|
191
|
+
*
|
|
192
|
+
* @param command - The command to validate
|
|
193
|
+
* @param prefix - Path prefix for error messages
|
|
194
|
+
* @returns Validation error if invalid, undefined if valid
|
|
195
|
+
*/
|
|
196
|
+
function validateCommand(command, prefix) {
|
|
197
|
+
if (typeof command === "string") {
|
|
198
|
+
// String form: check for templates (not allowed)
|
|
199
|
+
if (containsTemplates(command)) {
|
|
200
|
+
return {
|
|
201
|
+
path: `${prefix}.command`,
|
|
202
|
+
message: "string-form commands cannot contain {{}} templates. Use array form instead: " +
|
|
203
|
+
'["cmd", "arg", "{{param}}"]',
|
|
204
|
+
code: "STRING_COMMAND_WITH_TEMPLATE",
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
|
+
if (Array.isArray(command)) {
|
|
210
|
+
// Array form: validate each element is a string
|
|
211
|
+
for (let i = 0; i < command.length; i++) {
|
|
212
|
+
if (typeof command[i] !== "string") {
|
|
213
|
+
return {
|
|
214
|
+
path: `${prefix}.command[${i}]`,
|
|
215
|
+
message: "command array elements must be strings",
|
|
216
|
+
code: "INVALID_COMMAND_FORMAT",
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return undefined;
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
path: `${prefix}.command`,
|
|
224
|
+
message: "command must be a string or array of strings",
|
|
225
|
+
code: "INVALID_COMMAND_FORMAT",
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Parse and validate ACTIONS.yaml content in one step
|
|
230
|
+
*
|
|
231
|
+
* @param content - Raw YAML string from ACTIONS.yaml
|
|
232
|
+
* @returns Parsed and validated ActionsManifest
|
|
233
|
+
* @throws ActionsParseError if parsing or validation fails
|
|
234
|
+
*/
|
|
235
|
+
export function parseAndValidateActions(content) {
|
|
236
|
+
const manifest = parseActionsYaml(content);
|
|
237
|
+
const validation = validateActionsManifest(manifest);
|
|
238
|
+
if (!validation.valid && validation.errors) {
|
|
239
|
+
const errorMessages = validation.errors
|
|
240
|
+
.map((e) => ` - ${e.path}: ${e.message}`)
|
|
241
|
+
.join("\n");
|
|
242
|
+
throw new ActionsParseError(`ACTIONS.yaml validation failed:\n${errorMessages}`);
|
|
243
|
+
}
|
|
244
|
+
return manifest;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get action by name from a manifest
|
|
248
|
+
*
|
|
249
|
+
* @param manifest - The actions manifest
|
|
250
|
+
* @param name - The action name to find
|
|
251
|
+
* @returns The action or undefined if not found
|
|
252
|
+
*/
|
|
253
|
+
export function getAction(manifest, name) {
|
|
254
|
+
return manifest.actions[name];
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Get all action names from a manifest
|
|
258
|
+
*
|
|
259
|
+
* @param manifest - The actions manifest
|
|
260
|
+
* @returns Array of action names
|
|
261
|
+
*/
|
|
262
|
+
export function getActionNames(manifest) {
|
|
263
|
+
return Object.keys(manifest.actions);
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=actions-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions-parser.js","sourceRoot":"","sources":["../../src/manifest/actions-parser.ts"],"names":[],"mappings":"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"}
|
package/dist/manifest/index.d.ts
CHANGED
|
@@ -4,4 +4,6 @@
|
|
|
4
4
|
export { ManifestParseError, parseManifest, parseManifestAuto, parseYaml, extractFrontmatter, detectFormat, type ManifestFormat, } from "./parser";
|
|
5
5
|
export { validateManifest, validateManifestStrict, isValidToolName, isValidLocalToolName, isValidVersion, isValidTimeout, ToolManifestSchema, type ValidateManifestOptions, } from "./validator";
|
|
6
6
|
export { ManifestLoadError, loadManifest, loadManifestFromDir, findManifestFile, hasManifest, tryLoadManifest, tryLoadManifestFromDir, type LoadedManifest, type LoadManifestOptions, } from "./loader";
|
|
7
|
+
export { loadManifestWithActions, type LoadedManifestWithActions, } from "./actions-loader";
|
|
8
|
+
export { scriptToAction, manifestScriptsToActionsManifest, } from "./scripts";
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manifest/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,KAAK,cAAc,GACpB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manifest/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,KAAK,cAAc,GACpB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,uBAAuB,EACvB,KAAK,yBAAyB,GAC/B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,cAAc,EACd,gCAAgC,GACjC,MAAM,WAAW,CAAC"}
|
package/dist/manifest/index.js
CHANGED
|
@@ -7,4 +7,8 @@ export { ManifestParseError, parseManifest, parseManifestAuto, parseYaml, extrac
|
|
|
7
7
|
export { validateManifest, validateManifestStrict, isValidToolName, isValidLocalToolName, isValidVersion, isValidTimeout, ToolManifestSchema, } from "./validator";
|
|
8
8
|
// Loader
|
|
9
9
|
export { ManifestLoadError, loadManifest, loadManifestFromDir, findManifestFile, hasManifest, tryLoadManifest, tryLoadManifestFromDir, } from "./loader";
|
|
10
|
+
// Manifest with scripts
|
|
11
|
+
export { loadManifestWithActions, } from "./actions-loader";
|
|
12
|
+
// Scripts (inline scripts → Action bridge)
|
|
13
|
+
export { scriptToAction, manifestScriptsToActionsManifest, } from "./scripts";
|
|
10
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/manifest/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS;AACT,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,YAAY,GAEb,MAAM,UAAU,CAAC;AAElB,YAAY;AACZ,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,kBAAkB,GAEnB,MAAM,aAAa,CAAC;AAErB,SAAS;AACT,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,sBAAsB,GAGvB,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/manifest/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS;AACT,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,YAAY,GAEb,MAAM,UAAU,CAAC;AAElB,YAAY;AACZ,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,kBAAkB,GAEnB,MAAM,aAAa,CAAC;AAErB,SAAS;AACT,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,sBAAsB,GAGvB,MAAM,UAAU,CAAC;AAElB,wBAAwB;AACxB,OAAO,EACL,uBAAuB,GAExB,MAAM,kBAAkB,CAAC;AAE1B,2CAA2C;AAC3C,OAAO,EACL,cAAc,EACd,gCAAgC,GACjC,MAAM,WAAW,CAAC"}
|
|
@@ -36,7 +36,7 @@ export interface LoadManifestOptions extends ValidateManifestOptions {
|
|
|
36
36
|
/**
|
|
37
37
|
* Load a manifest from a file path
|
|
38
38
|
*
|
|
39
|
-
* @param filePath - Path to the manifest file (SKILL.md, enact.md, enact.yaml, or enact.yml)
|
|
39
|
+
* @param filePath - Path to the manifest file (SKILL.md, skill.yaml, skill.yml, enact.md, enact.yaml, or enact.yml)
|
|
40
40
|
* @param options - Options for loading and validation
|
|
41
41
|
* @returns LoadedManifest with validated manifest and metadata
|
|
42
42
|
* @throws ManifestLoadError if file doesn't exist, parse fails, or validation fails
|
|
@@ -45,7 +45,12 @@ export declare function loadManifest(filePath: string, options?: LoadManifestOpt
|
|
|
45
45
|
/**
|
|
46
46
|
* Find and load a manifest from a directory
|
|
47
47
|
*
|
|
48
|
-
*
|
|
48
|
+
* Supports two modes:
|
|
49
|
+
* 1. **Two-file model**: If both `skill.yaml` and `SKILL.md` exist, `skill.yaml` is
|
|
50
|
+
* the package manifest and `SKILL.md` provides agent-facing documentation (body → `doc`).
|
|
51
|
+
* Also supports legacy `enact.yaml` in place of `skill.yaml`.
|
|
52
|
+
* 2. **Single-file fallback**: Searches for SKILL.md, skill.yaml, skill.yml, enact.md, enact.yaml, or enact.yml
|
|
53
|
+
* and uses the first match as the complete manifest.
|
|
49
54
|
*
|
|
50
55
|
* @param dir - Directory to search for manifest
|
|
51
56
|
* @param options - Options for loading and validation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/manifest/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/manifest/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAkB,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGxF,OAAO,EAAE,KAAK,uBAAuB,EAAoB,MAAM,aAAa,CAAC;AAE7E;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,QAAQ,EAAE,MAAM;aAChB,aAAa,CAAC,EAAE,KAAK;gBAFrC,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,KAAK,YAAA;CAKxC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,QAAQ,EAAE,YAAY,CAAC;IACvB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,uBAAuB;CAEnE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,cAAc,CA0DhG;AAuBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,mBAAwB,GAChC,cAAc,CA2DhB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ3D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,mBAAwB,GAChC,cAAc,GAAG,IAAI,CAMvB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,mBAAwB,GAChC,cAAc,GAAG,IAAI,CAMvB"}
|
package/dist/manifest/loader.js
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { existsSync, readFileSync } from "node:fs";
|
|
7
7
|
import { basename, join } from "node:path";
|
|
8
|
+
import yaml from "js-yaml";
|
|
8
9
|
import { MANIFEST_FILES } from "../types/manifest";
|
|
9
|
-
import { ManifestParseError, parseManifestAuto } from "./parser";
|
|
10
|
+
import { ManifestParseError, extractFrontmatter, parseManifestAuto } from "./parser";
|
|
10
11
|
import { validateManifest } from "./validator";
|
|
11
12
|
/**
|
|
12
13
|
* Error thrown when loading a manifest fails
|
|
@@ -24,7 +25,7 @@ export class ManifestLoadError extends Error {
|
|
|
24
25
|
/**
|
|
25
26
|
* Load a manifest from a file path
|
|
26
27
|
*
|
|
27
|
-
* @param filePath - Path to the manifest file (SKILL.md, enact.md, enact.yaml, or enact.yml)
|
|
28
|
+
* @param filePath - Path to the manifest file (SKILL.md, skill.yaml, skill.yml, enact.md, enact.yaml, or enact.yml)
|
|
28
29
|
* @param options - Options for loading and validation
|
|
29
30
|
* @returns LoadedManifest with validated manifest and metadata
|
|
30
31
|
* @throws ManifestLoadError if file doesn't exist, parse fails, or validation fails
|
|
@@ -73,10 +74,35 @@ export function loadManifest(filePath, options = {}) {
|
|
|
73
74
|
}
|
|
74
75
|
return result;
|
|
75
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Load SKILL.md for its body content and frontmatter fields.
|
|
79
|
+
* Does NOT validate as a full ToolManifest — used only to extract
|
|
80
|
+
* agent-facing documentation in two-file mode (skill.yaml + SKILL.md).
|
|
81
|
+
*/
|
|
82
|
+
function loadSkillDoc(filePath) {
|
|
83
|
+
try {
|
|
84
|
+
const content = readFileSync(filePath, "utf-8");
|
|
85
|
+
const extracted = extractFrontmatter(content);
|
|
86
|
+
if (!extracted)
|
|
87
|
+
return null;
|
|
88
|
+
const frontmatter = extracted.frontmatter
|
|
89
|
+
? (yaml.load(extracted.frontmatter) ?? {})
|
|
90
|
+
: {};
|
|
91
|
+
return { body: extracted.body, frontmatter };
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
76
97
|
/**
|
|
77
98
|
* Find and load a manifest from a directory
|
|
78
99
|
*
|
|
79
|
-
*
|
|
100
|
+
* Supports two modes:
|
|
101
|
+
* 1. **Two-file model**: If both `skill.yaml` and `SKILL.md` exist, `skill.yaml` is
|
|
102
|
+
* the package manifest and `SKILL.md` provides agent-facing documentation (body → `doc`).
|
|
103
|
+
* Also supports legacy `enact.yaml` in place of `skill.yaml`.
|
|
104
|
+
* 2. **Single-file fallback**: Searches for SKILL.md, skill.yaml, skill.yml, enact.md, enact.yaml, or enact.yml
|
|
105
|
+
* and uses the first match as the complete manifest.
|
|
80
106
|
*
|
|
81
107
|
* @param dir - Directory to search for manifest
|
|
82
108
|
* @param options - Options for loading and validation
|
|
@@ -84,7 +110,48 @@ export function loadManifest(filePath, options = {}) {
|
|
|
84
110
|
* @throws ManifestLoadError if no manifest found or loading fails
|
|
85
111
|
*/
|
|
86
112
|
export function loadManifestFromDir(dir, options = {}) {
|
|
87
|
-
|
|
113
|
+
const skillMdPath = join(dir, "SKILL.md");
|
|
114
|
+
const hasSkillMd = existsSync(skillMdPath);
|
|
115
|
+
// Find config file (skill.yaml, skill.yml, or legacy enact.yaml/enact.yml)
|
|
116
|
+
let enactConfigPath = null;
|
|
117
|
+
for (const f of ["skill.yaml", "skill.yml", "enact.yaml", "enact.yml"]) {
|
|
118
|
+
const p = join(dir, f);
|
|
119
|
+
if (existsSync(p)) {
|
|
120
|
+
enactConfigPath = p;
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Two-file model: skill.yaml + SKILL.md
|
|
125
|
+
if (enactConfigPath && hasSkillMd) {
|
|
126
|
+
const loaded = loadManifest(enactConfigPath, options);
|
|
127
|
+
const skillDoc = loadSkillDoc(skillMdPath);
|
|
128
|
+
if (skillDoc) {
|
|
129
|
+
// Merge SKILL.md body into manifest.doc and LoadedManifest.body
|
|
130
|
+
loaded.manifest = { ...loaded.manifest };
|
|
131
|
+
if (skillDoc.body) {
|
|
132
|
+
if (!loaded.manifest.doc) {
|
|
133
|
+
loaded.manifest.doc = skillDoc.body;
|
|
134
|
+
}
|
|
135
|
+
loaded.body = skillDoc.body;
|
|
136
|
+
}
|
|
137
|
+
// Use SKILL.md frontmatter as fallbacks for shared fields
|
|
138
|
+
const fm = skillDoc.frontmatter;
|
|
139
|
+
if (!loaded.manifest.description && typeof fm.description === "string") {
|
|
140
|
+
loaded.manifest.description = fm.description;
|
|
141
|
+
}
|
|
142
|
+
if (!loaded.manifest.license && typeof fm.license === "string") {
|
|
143
|
+
loaded.manifest.license = fm.license;
|
|
144
|
+
}
|
|
145
|
+
if (!loaded.manifest.compatibility && typeof fm.compatibility === "string") {
|
|
146
|
+
loaded.manifest.compatibility = fm.compatibility;
|
|
147
|
+
}
|
|
148
|
+
if (!loaded.manifest.metadata && fm.metadata && typeof fm.metadata === "object") {
|
|
149
|
+
loaded.manifest.metadata = fm.metadata;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return loaded;
|
|
153
|
+
}
|
|
154
|
+
// Single-file fallback (existing behavior)
|
|
88
155
|
for (const filename of MANIFEST_FILES) {
|
|
89
156
|
const filePath = join(dir, filename);
|
|
90
157
|
if (existsSync(filePath)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/manifest/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/manifest/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Handles parsing of:
|
|
5
5
|
* - SKILL.md files (YAML frontmatter + Markdown body) - primary format
|
|
6
|
+
* - skill.yaml/yml files (pure YAML) - package manifest
|
|
6
7
|
* - enact.yaml/yml files (pure YAML) - legacy format
|
|
7
8
|
* - enact.md files (YAML frontmatter + Markdown body) - legacy format
|
|
8
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/manifest/parser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/manifest/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,mBAAmB,CAAC;AAEtE;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAgB,aAAa,EAAE,KAAK,GAAG,SAAS,CAAC;gBAErC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK;CAKnD;AAQD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,IAAI,CAAC;AAE3C;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAcP;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBtE;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,cAAc,CAsCrF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAc7D;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAGnF"}
|
package/dist/manifest/parser.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Handles parsing of:
|
|
5
5
|
* - SKILL.md files (YAML frontmatter + Markdown body) - primary format
|
|
6
|
+
* - skill.yaml/yml files (pure YAML) - package manifest
|
|
6
7
|
* - enact.yaml/yml files (pure YAML) - legacy format
|
|
7
8
|
* - enact.md files (YAML frontmatter + Markdown body) - legacy format
|
|
8
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/manifest/parser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/manifest/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3B,aAAa,CAAoB;IAEjD,YAAY,OAAe,EAAE,aAAqB;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,iBAAiB,GAAG,6CAA6C,CAAC;AAOxE;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAIhD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAE/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtB,OAAO;QACL,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;QAClD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,WAAmB;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEtC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,kBAAkB,CAAC,+BAA+B,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,kBAAkB,CAAC,2DAA2D,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,MAAiC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;YACxC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,KAAc,CAAC;QACjC,MAAM,IAAI,kBAAkB,CAAC,yBAAyB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,MAAsB;IACnE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,kBAAkB,CAAC,2BAA2B,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO;YACL,QAAQ,EAAE,MAAiC;YAC3C,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,kBAAkB,CAC1B,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,IAAI,kBAAkB,CAAC,2BAA2B,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAmB;QAC7B,QAAQ,EAAE,MAAiC;QAC3C,MAAM,EAAE,IAAI;KACb,CAAC;IAEF,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAErC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,kBAAkB,CAC1B,gDAAgD,QAAQ,2CAA2C,CACpG,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAAgB;IACjE,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Script-to-Action bridge
|
|
3
|
+
*
|
|
4
|
+
* Converts inline `scripts` from ToolManifest into Action/ActionsManifest
|
|
5
|
+
* objects so the existing execution pipeline works unchanged.
|
|
6
|
+
*/
|
|
7
|
+
import type { Action, ActionsManifest } from "../types/actions";
|
|
8
|
+
import type { ScriptDefinition, ToolManifest } from "../types/manifest";
|
|
9
|
+
/**
|
|
10
|
+
* Convert a single script entry to an Action object
|
|
11
|
+
*/
|
|
12
|
+
export declare function scriptToAction(name: string, script: ScriptDefinition): Action;
|
|
13
|
+
/**
|
|
14
|
+
* Convert all inline scripts from a manifest to an ActionsManifest
|
|
15
|
+
*
|
|
16
|
+
* Returns null if the manifest has no scripts.
|
|
17
|
+
*/
|
|
18
|
+
export declare function manifestScriptsToActionsManifest(manifest: ToolManifest): ActionsManifest | null;
|
|
19
|
+
//# sourceMappingURL=scripts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../../src/manifest/scripts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAiB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAmCxE;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAmB7E;AAwBD;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI,CAmB/F"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Script-to-Action bridge
|
|
3
|
+
*
|
|
4
|
+
* Converts inline `scripts` from ToolManifest into Action/ActionsManifest
|
|
5
|
+
* objects so the existing execution pipeline works unchanged.
|
|
6
|
+
*/
|
|
7
|
+
import { getActionCommandParams } from "../execution/action-command";
|
|
8
|
+
/**
|
|
9
|
+
* Convert a script command string to array form
|
|
10
|
+
*
|
|
11
|
+
* Splits on whitespace while preserving {{param}} tokens as single elements.
|
|
12
|
+
*/
|
|
13
|
+
function scriptCommandToArray(command) {
|
|
14
|
+
return command.split(/\s+/).filter((s) => s.length > 0);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Auto-infer an inputSchema from {{param}} patterns in a command array
|
|
18
|
+
*
|
|
19
|
+
* Every parameter found becomes a required string property.
|
|
20
|
+
*/
|
|
21
|
+
function inferInputSchema(commandArray) {
|
|
22
|
+
const params = getActionCommandParams(commandArray);
|
|
23
|
+
if (params.length === 0) {
|
|
24
|
+
return { type: "object", properties: {} };
|
|
25
|
+
}
|
|
26
|
+
const properties = {};
|
|
27
|
+
for (const param of params) {
|
|
28
|
+
properties[param] = { type: "string" };
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
type: "object",
|
|
32
|
+
required: params,
|
|
33
|
+
properties,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Convert a single script entry to an Action object
|
|
38
|
+
*/
|
|
39
|
+
export function scriptToAction(name, script) {
|
|
40
|
+
if (typeof script === "string") {
|
|
41
|
+
const commandArray = scriptCommandToArray(script);
|
|
42
|
+
return {
|
|
43
|
+
description: name,
|
|
44
|
+
command: commandArray,
|
|
45
|
+
inputSchema: inferInputSchema(commandArray),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Expanded form
|
|
49
|
+
const commandArray = scriptCommandToArray(script.command);
|
|
50
|
+
return {
|
|
51
|
+
description: script.description ?? name,
|
|
52
|
+
command: commandArray,
|
|
53
|
+
inputSchema: script.inputSchema ?? inferInputSchema(commandArray),
|
|
54
|
+
...(script.outputSchema && { outputSchema: script.outputSchema }),
|
|
55
|
+
...(script.annotations && { annotations: script.annotations }),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Convert manifest env (EnvVariables) to action env (ActionEnvVars)
|
|
60
|
+
*/
|
|
61
|
+
function convertEnv(env) {
|
|
62
|
+
if (!env || Object.keys(env).length === 0)
|
|
63
|
+
return undefined;
|
|
64
|
+
const actionEnv = {};
|
|
65
|
+
for (const [key, value] of Object.entries(env)) {
|
|
66
|
+
const envVar = {
|
|
67
|
+
description: value.description,
|
|
68
|
+
};
|
|
69
|
+
if (value.secret !== undefined) {
|
|
70
|
+
envVar.secret = value.secret;
|
|
71
|
+
}
|
|
72
|
+
if (value.default !== undefined) {
|
|
73
|
+
envVar.default = value.default;
|
|
74
|
+
}
|
|
75
|
+
actionEnv[key] = envVar;
|
|
76
|
+
}
|
|
77
|
+
return actionEnv;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Convert all inline scripts from a manifest to an ActionsManifest
|
|
81
|
+
*
|
|
82
|
+
* Returns null if the manifest has no scripts.
|
|
83
|
+
*/
|
|
84
|
+
export function manifestScriptsToActionsManifest(manifest) {
|
|
85
|
+
if (!manifest.scripts || Object.keys(manifest.scripts).length === 0) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
const actions = {};
|
|
89
|
+
for (const [name, script] of Object.entries(manifest.scripts)) {
|
|
90
|
+
actions[name] = scriptToAction(name, script);
|
|
91
|
+
}
|
|
92
|
+
const result = { actions };
|
|
93
|
+
const env = convertEnv(manifest.env);
|
|
94
|
+
if (env) {
|
|
95
|
+
result.env = env;
|
|
96
|
+
}
|
|
97
|
+
if (manifest.hooks?.build) {
|
|
98
|
+
result.build = manifest.hooks.build;
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=scripts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../src/manifest/scripts.ts"],"names":[],"mappings":"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"}
|