@skrun-dev/schema 0.7.0 → 1.0.0
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/bundle-tar.d.ts +43 -0
- package/dist/bundle-tar.d.ts.map +1 -0
- package/dist/bundle-tar.js +129 -0
- package/dist/bundle-tar.js.map +1 -0
- package/dist/generators/index.d.ts +1 -0
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +1 -0
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/outputs-to-zod.d.ts +24 -0
- package/dist/generators/outputs-to-zod.d.ts.map +1 -0
- package/dist/generators/outputs-to-zod.js +43 -0
- package/dist/generators/outputs-to-zod.js.map +1 -0
- package/dist/generators/skill-importer.js +1 -1
- package/dist/generators/skill-importer.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/schemas/agent-config.d.ts.map +1 -1
- package/dist/schemas/agent-config.js +3 -2
- package/dist/schemas/agent-config.js.map +1 -1
- package/dist/validators/combined.d.ts +1 -1
- package/dist/validators/combined.d.ts.map +1 -1
- package/dist/validators/combined.js +24 -8
- package/dist/validators/combined.js.map +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** A file entry to pack into a `.agent` bundle. */
|
|
2
|
+
export interface AgentTarEntry {
|
|
3
|
+
name: string;
|
|
4
|
+
content: Buffer;
|
|
5
|
+
}
|
|
6
|
+
/** A raw entry read out of a `.agent` bundle, content collected in memory. */
|
|
7
|
+
export interface UnpackedAgentEntry {
|
|
8
|
+
name: string;
|
|
9
|
+
/** tar entry type — `"file"`, `"symlink"`, `"directory"`, `"link"`, … */
|
|
10
|
+
type: string;
|
|
11
|
+
/** Present for symlink / hardlink entries. */
|
|
12
|
+
linkname?: string;
|
|
13
|
+
content: Buffer;
|
|
14
|
+
}
|
|
15
|
+
/** Directory / file names never included in a bundle. */
|
|
16
|
+
export declare const AGENT_BUNDLE_EXCLUDES: ReadonlySet<string>;
|
|
17
|
+
/**
|
|
18
|
+
* True if a single path segment (a file or directory name) must be excluded from
|
|
19
|
+
* a bundle: an explicit exclude, any dotfile, a `*.secret` file, or a built
|
|
20
|
+
* `*.agent` bundle (a build artifact — never ship a prior build's output).
|
|
21
|
+
*/
|
|
22
|
+
export declare function isExcludedEntry(name: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* True if a bundle entry is unsafe to extract: an absolute or parent-traversing
|
|
25
|
+
* name, or a symlink whose target escapes. Pure string analysis — callers decide
|
|
26
|
+
* the reaction (skip vs throw) and keep their own on-disk resolve guard.
|
|
27
|
+
*/
|
|
28
|
+
export declare function isUnsafeName(name: string, linkname?: string | null): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Pack file entries into a deterministic gzipped ustar `.agent` bundle. Entry
|
|
31
|
+
* names are normalised to POSIX separators; mtime/uid/gid/mode are pinned.
|
|
32
|
+
*/
|
|
33
|
+
export declare function packAgentTar(entries: AgentTarEntry[]): Promise<Buffer>;
|
|
34
|
+
/**
|
|
35
|
+
* Read every entry out of a gzipped ustar `.agent` bundle into memory. Enforces a
|
|
36
|
+
* caller-supplied decompression cap (gzip-bomb defense). Does not touch disk and
|
|
37
|
+
* applies no path policy — callers inspect `type`/`linkname` (via `isUnsafeName`)
|
|
38
|
+
* and choose to skip or throw.
|
|
39
|
+
*/
|
|
40
|
+
export declare function unpackAgentTar(gz: Buffer, opts: {
|
|
41
|
+
maxBytes: number;
|
|
42
|
+
}): Promise<UnpackedAgentEntry[]>;
|
|
43
|
+
//# sourceMappingURL=bundle-tar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-tar.d.ts","sourceRoot":"","sources":["../src/bundle-tar.ts"],"names":[],"mappings":"AAQA,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD,yDAAyD;AACzD,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAUpD,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMrD;AAQD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAE5E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBtE;AAmBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAiC/B"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { gunzipSync, gzipSync } from "node:zlib";
|
|
2
|
+
import { extract as tarExtract, pack as tarPack } from "tar-stream";
|
|
3
|
+
// Names/uid/gid/mode/mtime are pinned so identical inputs produce byte-identical
|
|
4
|
+
// bundles — required for a stable integrity hash over the bundle bytes.
|
|
5
|
+
const PINNED_MTIME = new Date(0);
|
|
6
|
+
const PINNED_MODE = 0o644;
|
|
7
|
+
/** Directory / file names never included in a bundle. */
|
|
8
|
+
export const AGENT_BUNDLE_EXCLUDES = new Set([
|
|
9
|
+
"node_modules",
|
|
10
|
+
".git",
|
|
11
|
+
"dist",
|
|
12
|
+
".env",
|
|
13
|
+
".DS_Store",
|
|
14
|
+
"__pycache__",
|
|
15
|
+
".pytest_cache",
|
|
16
|
+
"venv",
|
|
17
|
+
".venv",
|
|
18
|
+
]);
|
|
19
|
+
/**
|
|
20
|
+
* True if a single path segment (a file or directory name) must be excluded from
|
|
21
|
+
* a bundle: an explicit exclude, any dotfile, a `*.secret` file, or a built
|
|
22
|
+
* `*.agent` bundle (a build artifact — never ship a prior build's output).
|
|
23
|
+
*/
|
|
24
|
+
export function isExcludedEntry(name) {
|
|
25
|
+
if (AGENT_BUNDLE_EXCLUDES.has(name))
|
|
26
|
+
return true;
|
|
27
|
+
if (name.startsWith(".") && name !== ".")
|
|
28
|
+
return true;
|
|
29
|
+
if (name.endsWith(".secret"))
|
|
30
|
+
return true;
|
|
31
|
+
if (name.endsWith(".agent"))
|
|
32
|
+
return true;
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
function pathEscapes(p) {
|
|
36
|
+
if (p.startsWith("/") || p.startsWith("\\"))
|
|
37
|
+
return true; // absolute (posix / unc)
|
|
38
|
+
if (/^[a-zA-Z]:[\\/]/.test(p))
|
|
39
|
+
return true; // windows drive-absolute
|
|
40
|
+
return p.split(/[\\/]/).includes(".."); // any parent-dir traversal segment
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* True if a bundle entry is unsafe to extract: an absolute or parent-traversing
|
|
44
|
+
* name, or a symlink whose target escapes. Pure string analysis — callers decide
|
|
45
|
+
* the reaction (skip vs throw) and keep their own on-disk resolve guard.
|
|
46
|
+
*/
|
|
47
|
+
export function isUnsafeName(name, linkname) {
|
|
48
|
+
return pathEscapes(name) || (linkname != null && pathEscapes(linkname));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Pack file entries into a deterministic gzipped ustar `.agent` bundle. Entry
|
|
52
|
+
* names are normalised to POSIX separators; mtime/uid/gid/mode are pinned.
|
|
53
|
+
*/
|
|
54
|
+
export function packAgentTar(entries) {
|
|
55
|
+
const pack = tarPack();
|
|
56
|
+
const chunks = [];
|
|
57
|
+
const collected = new Promise((resolve, reject) => {
|
|
58
|
+
pack.on("data", (c) => chunks.push(c));
|
|
59
|
+
pack.on("end", () => resolve(Buffer.concat(chunks)));
|
|
60
|
+
pack.on("error", reject);
|
|
61
|
+
});
|
|
62
|
+
for (const { name, content } of entries) {
|
|
63
|
+
const header = {
|
|
64
|
+
name: name.split(/[\\/]/).join("/"),
|
|
65
|
+
size: content.length,
|
|
66
|
+
mtime: PINNED_MTIME,
|
|
67
|
+
mode: PINNED_MODE,
|
|
68
|
+
uid: 0,
|
|
69
|
+
gid: 0,
|
|
70
|
+
type: "file",
|
|
71
|
+
};
|
|
72
|
+
pack.entry(header, content);
|
|
73
|
+
}
|
|
74
|
+
pack.finalize();
|
|
75
|
+
return collected.then((tar) => gzipSync(tar));
|
|
76
|
+
}
|
|
77
|
+
function safeGunzip(gz, maxBytes) {
|
|
78
|
+
try {
|
|
79
|
+
return gunzipSync(gz, { maxOutputLength: maxBytes });
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
const code = err.code;
|
|
83
|
+
if (code === "ERR_BUFFER_TOO_LARGE" ||
|
|
84
|
+
(err instanceof RangeError && /maxOutputLength|too large/i.test(err.message))) {
|
|
85
|
+
throw new Error(`Decompressed bundle exceeds ${maxBytes} bytes (gzip-bomb defense — raise the cap if this is legitimate).`);
|
|
86
|
+
}
|
|
87
|
+
throw err;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Read every entry out of a gzipped ustar `.agent` bundle into memory. Enforces a
|
|
92
|
+
* caller-supplied decompression cap (gzip-bomb defense). Does not touch disk and
|
|
93
|
+
* applies no path policy — callers inspect `type`/`linkname` (via `isUnsafeName`)
|
|
94
|
+
* and choose to skip or throw.
|
|
95
|
+
*/
|
|
96
|
+
export function unpackAgentTar(gz, opts) {
|
|
97
|
+
return new Promise((resolve, reject) => {
|
|
98
|
+
// Decompress inside the executor so a gzip-bomb rejects the promise rather
|
|
99
|
+
// than throwing synchronously at the call site.
|
|
100
|
+
let tar;
|
|
101
|
+
try {
|
|
102
|
+
tar = safeGunzip(gz, opts.maxBytes);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
reject(err);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const extract = tarExtract();
|
|
109
|
+
const entries = [];
|
|
110
|
+
extract.on("entry", (header, entryStream, next) => {
|
|
111
|
+
const parts = [];
|
|
112
|
+
entryStream.on("data", (c) => parts.push(c));
|
|
113
|
+
entryStream.on("end", () => {
|
|
114
|
+
entries.push({
|
|
115
|
+
name: header.name,
|
|
116
|
+
type: header.type ?? "file",
|
|
117
|
+
linkname: header.linkname ?? undefined,
|
|
118
|
+
content: Buffer.concat(parts),
|
|
119
|
+
});
|
|
120
|
+
next();
|
|
121
|
+
});
|
|
122
|
+
entryStream.on("error", reject);
|
|
123
|
+
});
|
|
124
|
+
extract.on("finish", () => resolve(entries));
|
|
125
|
+
extract.on("error", reject);
|
|
126
|
+
extract.end(tar);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=bundle-tar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-tar.js","sourceRoot":"","sources":["../src/bundle-tar.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/generators/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAGL,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { OutputField } from "../schemas/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Build a Zod object schema from an agent's declared output fields.
|
|
5
|
+
*
|
|
6
|
+
* Mapping:
|
|
7
|
+
* - `string` → `z.string()`
|
|
8
|
+
* - `number` → `z.number()`
|
|
9
|
+
* - `boolean` → `z.boolean()`
|
|
10
|
+
* - `array` → `z.array(z.any())` (any element shape)
|
|
11
|
+
* - `object` → `z.record(z.string(), z.unknown())` (any internal shape, passthrough)
|
|
12
|
+
*
|
|
13
|
+
* Semantics:
|
|
14
|
+
* - All declared top-level keys are required.
|
|
15
|
+
* - Extra top-level keys are accepted (z.object default `strip` — extras don't fail validation).
|
|
16
|
+
* - Nested arrays/objects accept any internal shape (intentional looseness — agent authors
|
|
17
|
+
* declare top-level contract only; deep typing is out of scope for v0.9.0).
|
|
18
|
+
*
|
|
19
|
+
* Intended use: validate the parsed JSON output that the LLM produced at the end of an
|
|
20
|
+
* agentic loop, surfacing a missing-required-key as `OUTPUT_SCHEMA_INVALID` rather than
|
|
21
|
+
* silently emitting a broken `run_complete`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function outputsToZod(outputs: OutputField[]): z.ZodObject<z.ZodRawShape>;
|
|
24
|
+
//# sourceMappingURL=outputs-to-zod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputs-to-zod.d.ts","sourceRoot":"","sources":["../../src/generators/outputs-to-zod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAM/E"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Build a Zod object schema from an agent's declared output fields.
|
|
4
|
+
*
|
|
5
|
+
* Mapping:
|
|
6
|
+
* - `string` → `z.string()`
|
|
7
|
+
* - `number` → `z.number()`
|
|
8
|
+
* - `boolean` → `z.boolean()`
|
|
9
|
+
* - `array` → `z.array(z.any())` (any element shape)
|
|
10
|
+
* - `object` → `z.record(z.string(), z.unknown())` (any internal shape, passthrough)
|
|
11
|
+
*
|
|
12
|
+
* Semantics:
|
|
13
|
+
* - All declared top-level keys are required.
|
|
14
|
+
* - Extra top-level keys are accepted (z.object default `strip` — extras don't fail validation).
|
|
15
|
+
* - Nested arrays/objects accept any internal shape (intentional looseness — agent authors
|
|
16
|
+
* declare top-level contract only; deep typing is out of scope for v0.9.0).
|
|
17
|
+
*
|
|
18
|
+
* Intended use: validate the parsed JSON output that the LLM produced at the end of an
|
|
19
|
+
* agentic loop, surfacing a missing-required-key as `OUTPUT_SCHEMA_INVALID` rather than
|
|
20
|
+
* silently emitting a broken `run_complete`.
|
|
21
|
+
*/
|
|
22
|
+
export function outputsToZod(outputs) {
|
|
23
|
+
const shape = {};
|
|
24
|
+
for (const field of outputs) {
|
|
25
|
+
shape[field.name] = fieldToZod(field.type);
|
|
26
|
+
}
|
|
27
|
+
return z.object(shape);
|
|
28
|
+
}
|
|
29
|
+
function fieldToZod(type) {
|
|
30
|
+
switch (type) {
|
|
31
|
+
case "string":
|
|
32
|
+
return z.string();
|
|
33
|
+
case "number":
|
|
34
|
+
return z.number();
|
|
35
|
+
case "boolean":
|
|
36
|
+
return z.boolean();
|
|
37
|
+
case "array":
|
|
38
|
+
return z.array(z.any());
|
|
39
|
+
case "object":
|
|
40
|
+
return z.record(z.string(), z.unknown());
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=outputs-to-zod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputs-to-zod.js","sourceRoot":"","sources":["../../src/generators/outputs-to-zod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,MAAM,KAAK,GAAiC,EAAE,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,UAAU,CAAC,IAAyB;IAC3C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACrB,KAAK,OAAO;YACV,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1B,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
|
|
@@ -22,7 +22,7 @@ export function generateAgentYaml(skill) {
|
|
|
22
22
|
required: false,
|
|
23
23
|
}));
|
|
24
24
|
const config = {
|
|
25
|
-
// name
|
|
25
|
+
// name is set to skill.frontmatter.name (slug-only); namespace is assigned at push by the registry
|
|
26
26
|
version: "1.0.0",
|
|
27
27
|
tools,
|
|
28
28
|
mcp_servers: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-importer.js","sourceRoot":"","sources":["../../src/generators/skill-importer.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,iBAAiB,CAAC,KAAkB;IAClD,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IACxD,kFAAkF;IAClF,mFAAmF;IACnF,MAAM,SAAS,GAAG,YAAY;QAC5B,CAAC,CAAC;YACE,GAAG,IAAI,GAAG,CACR,YAAY;iBACT,KAAK,CAAC,KAAK,CAAC;iBACZ,MAAM,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3B,MAAM,CAAC,OAAO,CAAC,CACnB;SACF;QACH,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,KAAK,GAAiB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI;QACJ,WAAW,EAAE,WAAW,IAAI,SAAS;QACrC,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAyB;QACnC,
|
|
1
|
+
{"version":3,"file":"skill-importer.js","sourceRoot":"","sources":["../../src/generators/skill-importer.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,iBAAiB,CAAC,KAAkB;IAClD,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IACxD,kFAAkF;IAClF,mFAAmF;IACnF,MAAM,SAAS,GAAG,YAAY;QAC5B,CAAC,CAAC;YACE,GAAG,IAAI,GAAG,CACR,YAAY;iBACT,KAAK,CAAC,KAAK,CAAC;iBACZ,MAAM,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3B,MAAM,CAAC,OAAO,CAAC,CACnB;SACF;QACH,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,KAAK,GAAiB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI;QACJ,WAAW,EAAE,WAAW,IAAI,SAAS;QACrC,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAyB;QACnC,mGAAmG;QACnG,OAAO,EAAE,OAAO;QAChB,KAAK;QACL,WAAW,EAAE,EAAE;QACf,WAAW,EAAE;YACX,UAAU,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;YACjC,UAAU,EAAE,WAAW;YACvB,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,QAAQ;SAClB;QACD,YAAY,EAAE,OAAO;QACrB,KAAK,EAAE;YACL,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,KAAK;SACX;QACD,KAAK,EAAE,EAAE;KACV,CAAC;IAEF,MAAM,OAAO,GAAsB;QACjC;YACE,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,gCAAgC;YAC1C,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,sCAAsC;gBACtC,iBAAiB;gBACjB,gCAAgC;gBAChC,gCAAgC;gBAChC,gBAAgB;aACjB;YACD,OAAO,EAAE,sCAAsC;SAChD;QACD;YACE,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,0CAA0C;YACpD,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,cAAc;SACxB;QACD;YACE,KAAK,EAAE,sCAAsC;YAC7C,QAAQ,EAAE,uEAAuE;YACjF,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,EAAE;SACZ;KACF,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
export type { AgentTarEntry, UnpackedAgentEntry } from "./bundle-tar.js";
|
|
2
|
+
export { AGENT_BUNDLE_EXCLUDES, isExcludedEntry, isUnsafeName, packAgentTar, unpackAgentTar, } from "./bundle-tar.js";
|
|
1
3
|
export type { CapabilityValidationOutcome, ModelCapabilities } from "./capability.js";
|
|
2
4
|
export { getModelCapabilities, MODEL_CAPABILITIES, validateAgentCapabilities, } from "./capability.js";
|
|
3
5
|
export type { ValidationIssue } from "./errors.js";
|
|
4
6
|
export { SkrunError, ValidationError } from "./errors.js";
|
|
7
|
+
export { outputsToZod } from "./generators/outputs-to-zod.js";
|
|
5
8
|
export type { AgentYamlPrompt, GeneratedAgentYaml } from "./generators/skill-importer.js";
|
|
6
9
|
export { generateAgentYaml } from "./generators/skill-importer.js";
|
|
7
10
|
export { serializeAgentYaml } from "./generators/yaml-serializer.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEtF,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEtF,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACvE,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,UAAU,EACV,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
// @skrun-dev/schema — Parser & validator for Agent Skills format
|
|
2
|
+
// Bundle tar codec (.agent wire format)
|
|
3
|
+
export { AGENT_BUNDLE_EXCLUDES, isExcludedEntry, isUnsafeName, packAgentTar, unpackAgentTar, } from "./bundle-tar.js";
|
|
2
4
|
// Capability matrix
|
|
3
5
|
export { getModelCapabilities, MODEL_CAPABILITIES, validateAgentCapabilities, } from "./capability.js";
|
|
4
6
|
// Errors
|
|
5
7
|
export { SkrunError, ValidationError } from "./errors.js";
|
|
6
8
|
// Generators
|
|
9
|
+
export { outputsToZod } from "./generators/outputs-to-zod.js";
|
|
7
10
|
export { generateAgentYaml } from "./generators/skill-importer.js";
|
|
8
11
|
export { serializeAgentYaml } from "./generators/yaml-serializer.js";
|
|
9
12
|
// Manifest detection (script dependency resolution)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAGjE,oBAAoB;AACpB,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAGjE,wCAAwC;AACxC,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,oBAAoB;AACpB,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1D,aAAa;AACb,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAQrE,oDAAoD;AACpD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE1E,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAoBvE,UAAU;AACV,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,aAAa;AACb,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-config.d.ts","sourceRoot":"","sources":["../../src/schemas/agent-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"agent-config.d.ts","sourceRoot":"","sources":["../../src/schemas/agent-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAwCnB,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -6,14 +6,15 @@ import { ModelConfigSchema } from "./model-config.js";
|
|
|
6
6
|
import { StateConfigSchema } from "./state-config.js";
|
|
7
7
|
import { TestCaseSchema } from "./test-case.js";
|
|
8
8
|
import { ToolConfigSchema } from "./tool-config.js";
|
|
9
|
-
const AGENT_NAME_REGEX = /^[a-z0-9
|
|
9
|
+
const AGENT_NAME_REGEX = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/;
|
|
10
10
|
const SEMVER_REGEX = /^\d+\.\d+\.\d+$/;
|
|
11
11
|
export const AgentConfigSchema = z
|
|
12
12
|
.object({
|
|
13
13
|
name: z
|
|
14
14
|
.string()
|
|
15
15
|
.min(1, "Agent name is required")
|
|
16
|
-
.regex(AGENT_NAME_REGEX, 'Agent name must be
|
|
16
|
+
.regex(AGENT_NAME_REGEX, 'Agent name must be a slug like "email-drafter" (lowercase letters, digits, hyphens; no namespace prefix). The registry derives the namespace from your auth token at push — remove the prefix from your agent.yaml.')
|
|
17
|
+
.refine((s) => !s.includes("--"), "Agent name must not contain consecutive hyphens"),
|
|
17
18
|
version: z.string().regex(SEMVER_REGEX, 'Version must be semver format (e.g., "1.0.0")'),
|
|
18
19
|
model: ModelConfigSchema,
|
|
19
20
|
tools: z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-config.js","sourceRoot":"","sources":["../../src/schemas/agent-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,gBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"agent-config.js","sourceRoot":"","sources":["../../src/schemas/agent-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,gBAAgB,GAAG,iCAAiC,CAAC;AAC3D,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAEvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC;SAChC,KAAK,CACJ,gBAAgB,EAChB,qNAAqN,CACtN;SACA,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,iDAAiD,CAAC;IACtF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,+CAA+C,CAAC;IACxF,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,CAAC;SACL,KAAK,CACJ,CAAC;SACE,OAAO,EAAE;SACT,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EACL,8IAA8I;aACjJ,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;SACD,IAAI,CAAC,gBAAgB,CAAC,CAC1B;SACA,OAAO,CAAC,EAAE,CAAC;IACd,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACjD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IACvC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,gCAAgC,CAAC;IAC1E,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,iCAAiC,CAAC;IAC7E,WAAW,EAAE,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;IACjD,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9D,KAAK,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3C,CAAC;KACD,MAAM,EAAE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ValidationIssue } from "../errors.js";
|
|
2
2
|
import type { ParsedAgentYaml } from "../parsers/agent-yaml.js";
|
|
3
3
|
import type { ParsedAgentsMd } from "../parsers/agents-md.js";
|
|
4
4
|
import type { ParsedSkill } from "../parsers/skill-md.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combined.d.ts","sourceRoot":"","sources":["../../src/validators/combined.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"combined.d.ts","sourceRoot":"","sources":["../../src/validators/combined.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAErE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,EAAE;QACN,KAAK,EAAE,WAAW,CAAC;QACnB,WAAW,EAAE,eAAe,CAAC;QAC7B,QAAQ,CAAC,EAAE,cAAc,CAAC;KAC3B,GAAG,IAAI,CAAC;CACV;AAWD,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoK1E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { access, readFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
+
import { ValidationError } from "../errors.js";
|
|
3
4
|
import { detectManifest, hasNonStdlibImports } from "../manifests.js";
|
|
4
5
|
import { parseAgentYaml } from "../parsers/agent-yaml.js";
|
|
5
6
|
import { parseAgentsMd } from "../parsers/agents-md.js";
|
|
@@ -62,11 +63,26 @@ export async function validateAgent(dir) {
|
|
|
62
63
|
agentConfig.filePath = agentYamlPath;
|
|
63
64
|
}
|
|
64
65
|
catch (cause) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
// Surface every field-level issue from a ValidationError so the user sees
|
|
67
|
+
// the actual remediation hint (e.g., "drop the namespace prefix"). Without
|
|
68
|
+
// this, the CLI flattens to a generic "Invalid agent.yaml" and the Zod
|
|
69
|
+
// message gets lost.
|
|
70
|
+
if (cause instanceof ValidationError && cause.issues.length > 0) {
|
|
71
|
+
for (const issue of cause.issues) {
|
|
72
|
+
errors.push({
|
|
73
|
+
code: "INVALID_AGENT_YAML",
|
|
74
|
+
message: issue.message,
|
|
75
|
+
file: "agent.yaml",
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
errors.push({
|
|
81
|
+
code: "INVALID_AGENT_YAML",
|
|
82
|
+
message: `Failed to parse agent.yaml: ${cause instanceof Error ? cause.message : String(cause)}`,
|
|
83
|
+
file: "agent.yaml",
|
|
84
|
+
});
|
|
85
|
+
}
|
|
70
86
|
return { valid: false, errors, warnings, parsed: null };
|
|
71
87
|
}
|
|
72
88
|
// Check AGENTS.md if context_mode is persistent
|
|
@@ -96,11 +112,11 @@ export async function validateAgent(dir) {
|
|
|
96
112
|
}
|
|
97
113
|
// Cross-file warnings: name consistency
|
|
98
114
|
const skillName = skill.frontmatter.name;
|
|
99
|
-
const
|
|
100
|
-
if (
|
|
115
|
+
const agentName = agentConfig.config.name;
|
|
116
|
+
if (skillName !== agentName) {
|
|
101
117
|
warnings.push({
|
|
102
118
|
code: "NAME_MISMATCH",
|
|
103
|
-
message: `SKILL.md name "${skillName}" does not match agent.yaml
|
|
119
|
+
message: `SKILL.md name "${skillName}" does not match agent.yaml name "${agentName}"`,
|
|
104
120
|
});
|
|
105
121
|
}
|
|
106
122
|
// Cross-file warnings: tools alignment
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combined.js","sourceRoot":"","sources":["../../src/validators/combined.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"combined.js","sourceRoot":"","sources":["../../src/validators/combined.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skrun-dev/schema",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -14,11 +14,13 @@
|
|
|
14
14
|
"dist"
|
|
15
15
|
],
|
|
16
16
|
"dependencies": {
|
|
17
|
+
"tar-stream": "3.2.0",
|
|
17
18
|
"yaml": "^2.8.3",
|
|
18
19
|
"zod": "^4.4.1"
|
|
19
20
|
},
|
|
20
21
|
"devDependencies": {
|
|
21
22
|
"@types/node": "^25.6.0",
|
|
23
|
+
"@types/tar-stream": "3.1.4",
|
|
22
24
|
"typescript": "^6.0.3",
|
|
23
25
|
"vitest": "^4.1.5"
|
|
24
26
|
},
|