@agentxm/extension-content 0.49.3 → 0.50.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/src/content/frontmatter.d.ts +16 -0
- package/dist/src/content/frontmatter.js +6 -4
- package/dist/src/content/skill-content.d.ts +13 -14
- package/dist/src/content/skill-content.js +8 -46
- package/dist/src/content/subagent-content.js +14 -10
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.js +3 -3
- package/dist/src/knowledge/index.d.ts +1 -1
- package/dist/src/knowledge/index.js +2 -2
- package/dist/src/knowledge/okf.d.ts +52 -1
- package/dist/src/knowledge/okf.js +86 -59
- package/dist/src/knowledge/package-inspection.d.ts +4 -7
- package/dist/src/knowledge/package-inspection.js +7 -19
- package/dist/src/lint/accessor/platform.d.ts +54 -0
- package/dist/src/lint/accessor/platform.js +89 -0
- package/dist/src/lint/{catalog/pack-accessor → accessor}/vft.d.ts +12 -14
- package/dist/src/lint/accessor/vft.js +83 -0
- package/dist/src/lint/catalog/hook/entrypoint-exists.d.ts +2 -2
- package/dist/src/lint/catalog/hook/entrypoint-exists.js +4 -3
- package/dist/src/lint/catalog/hook/envelope.d.ts +6 -6
- package/dist/src/lint/catalog/hook/envelope.js +5 -4
- package/dist/src/lint/catalog/hook/native-bindings-supported.d.ts +2 -2
- package/dist/src/lint/catalog/hook/native-bindings-supported.js +4 -3
- package/dist/src/lint/catalog/hook.d.ts +2 -2
- package/dist/src/lint/catalog/hook.js +1 -1
- package/dist/src/lint/catalog/knowledge/diagnostics.js +4 -3
- package/dist/src/lint/catalog/knowledge/envelope.d.ts +1 -1
- package/dist/src/lint/catalog/knowledge/envelope.js +4 -3
- package/dist/src/lint/catalog/mcp-server/envelope.d.ts +2 -2
- package/dist/src/lint/catalog/mcp-server/envelope.js +4 -3
- package/dist/src/lint/catalog/mcp-server.d.ts +2 -2
- package/dist/src/lint/catalog/{pack-accessor → pack}/contexts.d.ts +6 -6
- package/dist/src/lint/catalog/{pack-accessor → pack}/contexts.js +4 -4
- package/dist/src/lint/catalog/pack/envelope.d.ts +10 -0
- package/dist/src/lint/catalog/pack/envelope.js +20 -0
- package/dist/src/lint/catalog/pack.d.ts +9 -10
- package/dist/src/lint/catalog/pack.js +12 -15
- package/dist/src/lint/catalog/rule/envelope.d.ts +2 -2
- package/dist/src/lint/catalog/rule/envelope.js +4 -3
- package/dist/src/lint/catalog/rule.d.ts +2 -2
- package/dist/src/lint/catalog/shared/envelope-rules.d.ts +23 -12
- package/dist/src/lint/catalog/shared/envelope-rules.js +22 -13
- package/dist/src/lint/catalog/shared/manifest-present.d.ts +3 -4
- package/dist/src/lint/catalog/shared/recommended-packs-rules.js +5 -3
- package/dist/src/lint/catalog/shared/schema-rule.js +3 -3
- package/dist/src/lint/catalog/{skill-accessor → skill}/contexts.d.ts +5 -5
- package/dist/src/lint/catalog/{skill-accessor → skill}/contexts.js +3 -3
- package/dist/src/lint/catalog/skill/envelope.d.ts +11 -0
- package/dist/src/lint/catalog/skill/envelope.js +23 -0
- package/dist/src/lint/catalog/skill/frontmatter-parseable.d.ts +6 -4
- package/dist/src/lint/catalog/skill/frontmatter-parseable.js +17 -21
- package/dist/src/lint/catalog/skill/frontmatter-standard-valid.js +7 -12
- package/dist/src/lint/catalog/skill.d.ts +4 -5
- package/dist/src/lint/catalog/skill.js +11 -16
- package/dist/src/lint/catalog/subagent/envelope.d.ts +2 -2
- package/dist/src/lint/catalog/subagent/envelope.js +4 -3
- package/dist/src/lint/catalog/subagent.d.ts +2 -2
- package/dist/src/lint/context.d.ts +39 -115
- package/dist/src/lint/describe-document.d.ts +1 -1
- package/dist/src/lint/describe-document.js +4 -5
- package/dist/src/lint/index.d.ts +5 -7
- package/dist/src/lint/index.js +5 -7
- package/dist/src/packaging/archive-guardrails.d.ts +11 -0
- package/dist/src/packaging/archive-guardrails.js +111 -74
- package/dist/src/packaging/filtered-package-validation.js +3 -4
- package/dist/src/packaging/manifest-file.d.ts +7 -3
- package/dist/src/packaging/manifest-file.js +10 -11
- package/dist/src/packaging/manifest-policy.d.ts +0 -12
- package/dist/src/packaging/manifest-policy.js +12 -26
- package/dist/src/packaging/test-zip-helpers.js +4 -3
- package/package.json +8 -4
- package/dist/src/lint/catalog/pack/manifest-keys-recognized.d.ts +0 -28
- package/dist/src/lint/catalog/pack/manifest-keys-recognized.js +0 -38
- package/dist/src/lint/catalog/pack/manifest-present.d.ts +0 -17
- package/dist/src/lint/catalog/pack/manifest-present.js +0 -24
- package/dist/src/lint/catalog/pack/manifest-schema-valid.d.ts +0 -25
- package/dist/src/lint/catalog/pack/manifest-schema-valid.js +0 -33
- package/dist/src/lint/catalog/pack-accessor/platform.d.ts +0 -56
- package/dist/src/lint/catalog/pack-accessor/platform.js +0 -93
- package/dist/src/lint/catalog/pack-accessor/vft.js +0 -85
- package/dist/src/lint/catalog/skill/manifest-keys-recognized.d.ts +0 -26
- package/dist/src/lint/catalog/skill/manifest-keys-recognized.js +0 -41
- package/dist/src/lint/catalog/skill/manifest-present.d.ts +0 -23
- package/dist/src/lint/catalog/skill/manifest-present.js +0 -32
- package/dist/src/lint/catalog/skill/manifest-schema-valid.d.ts +0 -21
- package/dist/src/lint/catalog/skill/manifest-schema-valid.js +0 -36
- package/dist/src/lint/catalog/skill/recommended-packs-valid.d.ts +0 -8
- package/dist/src/lint/catalog/skill/recommended-packs-valid.js +0 -12
- package/dist/src/lint/catalog/skill/standalone-declaration-valid.d.ts +0 -8
- package/dist/src/lint/catalog/skill/standalone-declaration-valid.js +0 -12
- package/dist/src/lint/catalog/skill-accessor/platform.d.ts +0 -53
- package/dist/src/lint/catalog/skill-accessor/platform.js +0 -90
- package/dist/src/lint/catalog/skill-accessor/vft.d.ts +0 -77
- package/dist/src/lint/catalog/skill-accessor/vft.js +0 -135
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform-backed `ExtensionFileAccessor` for `axm lint` and the publish gate.
|
|
3
|
+
*
|
|
4
|
+
* Maps accessor-relative posix paths to on-disk absolute paths rooted at a
|
|
5
|
+
* caller-supplied directory. The caller picks the root per extension type
|
|
6
|
+
* and provenance; the accessor itself is type- and provenance-agnostic, so
|
|
7
|
+
* rules see one uniform contract:
|
|
8
|
+
*
|
|
9
|
+
* - **Skill content (`files`):** the native package's `src/` directory, or
|
|
10
|
+
* the selected directory of a portable Agent Skill.
|
|
11
|
+
* - **Skill package (`packageFiles`) and every other type:** the package
|
|
12
|
+
* directory holding the type's manifest (`skill.json`, `pack.json`,
|
|
13
|
+
* `hook.json`, ...). Packs and the other manifest-rooted types have no
|
|
14
|
+
* `src/` split at the accessor root.
|
|
15
|
+
*
|
|
16
|
+
* Bounds enforcement:
|
|
17
|
+
*
|
|
18
|
+
* - No `..` segments in accessor-relative paths.
|
|
19
|
+
* - No absolute paths (posix or Windows drive letters).
|
|
20
|
+
* - Resolved absolute paths are verified to stay under the accessor root.
|
|
21
|
+
*
|
|
22
|
+
* The accessor is built via a factory that captures pre-resolved
|
|
23
|
+
* `FileSystem.FileSystem` + `Path.Path` services and an absolute root, so
|
|
24
|
+
* `ExtensionFileAccessor` stays Layer-free at rule-evaluation time (per
|
|
25
|
+
* `lint-engine` spec "Rule contexts expose narrow caller-bound accessors").
|
|
26
|
+
* It mirrors the VFT-backed accessor in `./vft.ts`; the two are the only
|
|
27
|
+
* `ExtensionFileAccessor` implementations, one for on-disk roots and one for
|
|
28
|
+
* an extracted archive.
|
|
29
|
+
*
|
|
30
|
+
* @experimental This API is unstable and may change without notice.
|
|
31
|
+
* @packageDocumentation
|
|
32
|
+
*/
|
|
33
|
+
import type * as FileSystem from "effect/FileSystem";
|
|
34
|
+
import type * as Path from "effect/Path";
|
|
35
|
+
import type { ExtensionFileAccessor } from "../context.js";
|
|
36
|
+
/**
|
|
37
|
+
* Platform services needed by the platform-backed accessor.
|
|
38
|
+
*
|
|
39
|
+
* @experimental This API is unstable and may change without notice.
|
|
40
|
+
*/
|
|
41
|
+
export interface FileAccessorPlatform {
|
|
42
|
+
readonly fs: FileSystem.FileSystem;
|
|
43
|
+
readonly path: Path.Path;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build a platform-backed `ExtensionFileAccessor` rooted at `absoluteRoot`.
|
|
47
|
+
*
|
|
48
|
+
* `absoluteRoot` SHOULD be an absolute directory path; a relative one is
|
|
49
|
+
* resolved against the process working directory.
|
|
50
|
+
*
|
|
51
|
+
* @experimental This API is unstable and may change without notice.
|
|
52
|
+
*/
|
|
53
|
+
export declare const makePlatformFileAccessor: (platform: FileAccessorPlatform, absoluteRoot: string) => ExtensionFileAccessor;
|
|
54
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform-backed `ExtensionFileAccessor` for `axm lint` and the publish gate.
|
|
3
|
+
*
|
|
4
|
+
* Maps accessor-relative posix paths to on-disk absolute paths rooted at a
|
|
5
|
+
* caller-supplied directory. The caller picks the root per extension type
|
|
6
|
+
* and provenance; the accessor itself is type- and provenance-agnostic, so
|
|
7
|
+
* rules see one uniform contract:
|
|
8
|
+
*
|
|
9
|
+
* - **Skill content (`files`):** the native package's `src/` directory, or
|
|
10
|
+
* the selected directory of a portable Agent Skill.
|
|
11
|
+
* - **Skill package (`packageFiles`) and every other type:** the package
|
|
12
|
+
* directory holding the type's manifest (`skill.json`, `pack.json`,
|
|
13
|
+
* `hook.json`, ...). Packs and the other manifest-rooted types have no
|
|
14
|
+
* `src/` split at the accessor root.
|
|
15
|
+
*
|
|
16
|
+
* Bounds enforcement:
|
|
17
|
+
*
|
|
18
|
+
* - No `..` segments in accessor-relative paths.
|
|
19
|
+
* - No absolute paths (posix or Windows drive letters).
|
|
20
|
+
* - Resolved absolute paths are verified to stay under the accessor root.
|
|
21
|
+
*
|
|
22
|
+
* The accessor is built via a factory that captures pre-resolved
|
|
23
|
+
* `FileSystem.FileSystem` + `Path.Path` services and an absolute root, so
|
|
24
|
+
* `ExtensionFileAccessor` stays Layer-free at rule-evaluation time (per
|
|
25
|
+
* `lint-engine` spec "Rule contexts expose narrow caller-bound accessors").
|
|
26
|
+
* It mirrors the VFT-backed accessor in `./vft.ts`; the two are the only
|
|
27
|
+
* `ExtensionFileAccessor` implementations, one for on-disk roots and one for
|
|
28
|
+
* an extracted archive.
|
|
29
|
+
*
|
|
30
|
+
* @experimental This API is unstable and may change without notice.
|
|
31
|
+
* @packageDocumentation
|
|
32
|
+
*/
|
|
33
|
+
import * as Effect from "effect/Effect";
|
|
34
|
+
/**
|
|
35
|
+
* Build a platform-backed `ExtensionFileAccessor` rooted at `absoluteRoot`.
|
|
36
|
+
*
|
|
37
|
+
* `absoluteRoot` SHOULD be an absolute directory path; a relative one is
|
|
38
|
+
* resolved against the process working directory.
|
|
39
|
+
*
|
|
40
|
+
* @experimental This API is unstable and may change without notice.
|
|
41
|
+
*/
|
|
42
|
+
export const makePlatformFileAccessor = (platform, absoluteRoot) => {
|
|
43
|
+
const { fs, path } = platform;
|
|
44
|
+
const normalizedRoot = path.resolve(absoluteRoot);
|
|
45
|
+
const resolveWithinRoot = (input) => {
|
|
46
|
+
if (input === "" || input === "." || input === "./") {
|
|
47
|
+
return { kind: "ok", absolute: normalizedRoot };
|
|
48
|
+
}
|
|
49
|
+
if (/^[a-z]:[\\/]/i.test(input) || input.startsWith("/") || input.startsWith("\\")) {
|
|
50
|
+
return { kind: "escape" };
|
|
51
|
+
}
|
|
52
|
+
const normalized = input.replace(/\\/g, "/").replace(/^\.\//, "");
|
|
53
|
+
for (const segment of normalized.split("/")) {
|
|
54
|
+
if (segment === "..") {
|
|
55
|
+
return { kind: "escape" };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const absolute = path.resolve(normalizedRoot, normalized);
|
|
59
|
+
if (absolute !== normalizedRoot && !absolute.startsWith(`${normalizedRoot}${path.sep}`)) {
|
|
60
|
+
return { kind: "escape" };
|
|
61
|
+
}
|
|
62
|
+
return { kind: "ok", absolute };
|
|
63
|
+
};
|
|
64
|
+
const makeAccessError = (p, reason, message) => ({
|
|
65
|
+
_tag: "FileAccessError",
|
|
66
|
+
path: p,
|
|
67
|
+
reason,
|
|
68
|
+
message,
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
exists: (p) => {
|
|
72
|
+
const resolved = resolveWithinRoot(p);
|
|
73
|
+
if (resolved.kind !== "ok") {
|
|
74
|
+
return Effect.succeed(false);
|
|
75
|
+
}
|
|
76
|
+
return fs.exists(resolved.absolute).pipe(Effect.catch(() => Effect.succeed(false)));
|
|
77
|
+
},
|
|
78
|
+
readBytes: (p) => {
|
|
79
|
+
const resolved = resolveWithinRoot(p);
|
|
80
|
+
if (resolved.kind === "escape") {
|
|
81
|
+
return Effect.fail(makeAccessError(p, "path-escape", `path escapes the accessor root: ${p}`));
|
|
82
|
+
}
|
|
83
|
+
return fs
|
|
84
|
+
.readFile(resolved.absolute)
|
|
85
|
+
.pipe(Effect.mapError((cause) => makeAccessError(p, "read-error", `read failed at ${p}: ${String(cause)}`)));
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGludC9hY2Nlc3Nvci9wbGF0Zm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUVILE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBc0J4Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FDdEMsUUFBOEIsRUFDOUIsWUFBb0IsRUFDRyxFQUFFO0lBQ3pCLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDO0lBQzlCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFbEQsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQWEsRUFBaUIsRUFBRTtRQUN6RCxJQUFJLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEQsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQ2xELENBQUM7UUFDRCxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkYsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRSxLQUFLLE1BQU0sT0FBTyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFELElBQUksUUFBUSxLQUFLLGNBQWMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4RixPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNsQyxDQUFDLENBQUM7SUFFRixNQUFNLGVBQWUsR0FBRyxDQUN0QixDQUFTLEVBQ1QsTUFBaUMsRUFDakMsT0FBZSxFQUNFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLElBQUksRUFBRSxpQkFBMEI7UUFDaEMsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNO1FBQ04sT0FBTztLQUNSLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNaLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNmLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNoQixlQUFlLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLENBQUMsQ0FDMUUsQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPLEVBQUU7aUJBQ04sUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7aUJBQzNCLElBQUksQ0FDSCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDeEIsZUFBZSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUMxRSxDQUNGLENBQUM7UUFDTixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* VFT-backed `
|
|
2
|
+
* VFT-backed `ExtensionFileAccessor` for publish callers and fixture tests.
|
|
3
3
|
*
|
|
4
4
|
* A Virtual File Tree (VFT) is an in-memory representation of an extracted
|
|
5
5
|
* archive — the registry publish pipeline extracts an upload into a VFT, then
|
|
@@ -12,31 +12,29 @@
|
|
|
12
12
|
* Bounds enforcement here:
|
|
13
13
|
*
|
|
14
14
|
* - Paths are normalized to posix, `./` prefixes are stripped.
|
|
15
|
-
* - Empty path resolves to the accessor root itself
|
|
15
|
+
* - Empty path resolves to the accessor root itself (useful for
|
|
16
|
+
* `location.file = ""` findings but not currently exercised by the v1
|
|
17
|
+
* catalog).
|
|
16
18
|
* - Any path containing a `..` segment raises `FileAccessError {
|
|
17
19
|
* reason: "path-escape" }` from `readBytes` and resolves to `false` from
|
|
18
20
|
* `exists`.
|
|
19
21
|
* - Absolute paths (starting with `/` or a Windows drive letter) are
|
|
20
22
|
* treated as escape attempts.
|
|
21
23
|
*
|
|
22
|
-
* Mirrors the skill VFT accessor (`../skill-accessor/vft.ts`). The VFTNode
|
|
23
|
-
* interface is intentionally the same so a publish caller can extract a
|
|
24
|
-
* single archive once and pass the same tree to either accessor factory.
|
|
25
|
-
*
|
|
26
24
|
* @experimental This API is unstable and may change without notice.
|
|
27
25
|
* @packageDocumentation
|
|
28
26
|
*/
|
|
29
|
-
import type {
|
|
27
|
+
import type { ExtensionFileAccessor } from "../context.js";
|
|
30
28
|
/**
|
|
31
29
|
* Minimal shape of a Virtual File Tree consumed by the accessor.
|
|
32
30
|
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
31
|
+
* The registry VFT (Phase 4, this-repo) MUST satisfy this interface. The
|
|
32
|
+
* registry may (and will) expose additional methods — file count, archive
|
|
33
|
+
* bounds, iteration — but those are the extract phase's concern.
|
|
36
34
|
*
|
|
37
35
|
* @experimental This API is unstable and may change without notice.
|
|
38
36
|
*/
|
|
39
|
-
export interface
|
|
37
|
+
export interface VFTNode {
|
|
40
38
|
/**
|
|
41
39
|
* Whether the given posix path points to a file within the tree.
|
|
42
40
|
*/
|
|
@@ -48,13 +46,13 @@ export interface PackVFTNode {
|
|
|
48
46
|
readonly getFile: (posixPath: string) => Uint8Array | undefined;
|
|
49
47
|
}
|
|
50
48
|
/**
|
|
51
|
-
* Build a VFT-backed `
|
|
49
|
+
* Build a VFT-backed `ExtensionFileAccessor` rooted at the tree's root.
|
|
52
50
|
*
|
|
53
|
-
* Callers that root the
|
|
51
|
+
* Callers that root the extension at a sub-path of the archive should pre-strip
|
|
54
52
|
* that sub-path before constructing the tree — the accessor enforces no
|
|
55
53
|
* `..` escape above the root it was given.
|
|
56
54
|
*
|
|
57
55
|
* @experimental This API is unstable and may change without notice.
|
|
58
56
|
*/
|
|
59
|
-
export declare const
|
|
57
|
+
export declare const makeVftFileAccessor: (tree: VFTNode) => ExtensionFileAccessor;
|
|
60
58
|
//# sourceMappingURL=vft.d.ts.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VFT-backed `ExtensionFileAccessor` for publish callers and fixture tests.
|
|
3
|
+
*
|
|
4
|
+
* A Virtual File Tree (VFT) is an in-memory representation of an extracted
|
|
5
|
+
* archive — the registry publish pipeline extracts an upload into a VFT, then
|
|
6
|
+
* passes that tree into Phase 4 decode/lint. The VFT's schema and bounds
|
|
7
|
+
* (max size, file count, path depth) are owned by the registry extract phase
|
|
8
|
+
* (Phase 4 concern); this accessor treats the tree as a read-only
|
|
9
|
+
* `path -> Uint8Array` map and enforces its own rooted-read + no-`..`-escape
|
|
10
|
+
* invariants at the rule boundary.
|
|
11
|
+
*
|
|
12
|
+
* Bounds enforcement here:
|
|
13
|
+
*
|
|
14
|
+
* - Paths are normalized to posix, `./` prefixes are stripped.
|
|
15
|
+
* - Empty path resolves to the accessor root itself (useful for
|
|
16
|
+
* `location.file = ""` findings but not currently exercised by the v1
|
|
17
|
+
* catalog).
|
|
18
|
+
* - Any path containing a `..` segment raises `FileAccessError {
|
|
19
|
+
* reason: "path-escape" }` from `readBytes` and resolves to `false` from
|
|
20
|
+
* `exists`.
|
|
21
|
+
* - Absolute paths (starting with `/` or a Windows drive letter) are
|
|
22
|
+
* treated as escape attempts.
|
|
23
|
+
*
|
|
24
|
+
* @experimental This API is unstable and may change without notice.
|
|
25
|
+
* @packageDocumentation
|
|
26
|
+
*/
|
|
27
|
+
import * as Effect from "effect/Effect";
|
|
28
|
+
/**
|
|
29
|
+
* Build a VFT-backed `ExtensionFileAccessor` rooted at the tree's root.
|
|
30
|
+
*
|
|
31
|
+
* Callers that root the extension at a sub-path of the archive should pre-strip
|
|
32
|
+
* that sub-path before constructing the tree — the accessor enforces no
|
|
33
|
+
* `..` escape above the root it was given.
|
|
34
|
+
*
|
|
35
|
+
* @experimental This API is unstable and may change without notice.
|
|
36
|
+
*/
|
|
37
|
+
export const makeVftFileAccessor = (tree) => {
|
|
38
|
+
return {
|
|
39
|
+
exists: (path) => {
|
|
40
|
+
const normalized = normalizeAndCheck(path);
|
|
41
|
+
if (normalized.kind !== "ok") {
|
|
42
|
+
return Effect.succeed(false);
|
|
43
|
+
}
|
|
44
|
+
return Effect.succeed(tree.hasFile(normalized.path));
|
|
45
|
+
},
|
|
46
|
+
readBytes: (path) => {
|
|
47
|
+
const normalized = normalizeAndCheck(path);
|
|
48
|
+
if (normalized.kind === "escape") {
|
|
49
|
+
return failFileAccess(path, "path-escape", `path escapes the accessor root: ${path}`);
|
|
50
|
+
}
|
|
51
|
+
const bytes = tree.getFile(normalized.path);
|
|
52
|
+
if (bytes === undefined) {
|
|
53
|
+
return failFileAccess(path, "read-error", `file not found at ${path}`);
|
|
54
|
+
}
|
|
55
|
+
return Effect.succeed(bytes);
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
const normalizeAndCheck = (path) => {
|
|
60
|
+
if (path === "" || path === "." || path === "./") {
|
|
61
|
+
return { kind: "ok", path: "" };
|
|
62
|
+
}
|
|
63
|
+
// Windows drive letters (`C:/`) and absolute posix paths both count as
|
|
64
|
+
// escape attempts at a rooted accessor.
|
|
65
|
+
if (/^[a-z]:[\\/]/i.test(path) || path.startsWith("/") || path.startsWith("\\")) {
|
|
66
|
+
return { kind: "escape" };
|
|
67
|
+
}
|
|
68
|
+
const normalized = path.replace(/\\/g, "/").replace(/^\.\//, "");
|
|
69
|
+
const segments = normalized.split("/");
|
|
70
|
+
for (const segment of segments) {
|
|
71
|
+
if (segment === "..") {
|
|
72
|
+
return { kind: "escape" };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return { kind: "ok", path: normalized };
|
|
76
|
+
};
|
|
77
|
+
const failFileAccess = (path, reason, message) => Effect.fail({
|
|
78
|
+
_tag: "FileAccessError",
|
|
79
|
+
path,
|
|
80
|
+
reason,
|
|
81
|
+
message,
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpbnQvYWNjZXNzb3IvdmZ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBRUgsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUE0QnhDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxJQUFhLEVBQXlCLEVBQUU7SUFDMUUsT0FBTztRQUNMLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2YsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM3QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNsQixNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsbUNBQW1DLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEYsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN4QixPQUFPLGNBQWMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFRRixNQUFNLGlCQUFpQixHQUFHLENBQUMsSUFBWSxFQUFtQixFQUFFO0lBQzFELElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNqRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUNELHVFQUF1RTtJQUN2RSx3Q0FBd0M7SUFDeEMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hGLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakUsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLElBQUksT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDMUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUcsQ0FDckIsSUFBWSxFQUNaLE1BQWlDLEVBQ2pDLE9BQWUsRUFDNkIsRUFBRSxDQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ1YsSUFBSSxFQUFFLGlCQUEwQjtJQUNoQyxJQUFJO0lBQ0osTUFBTTtJQUNOLE9BQU87Q0FDUixDQUFDLENBQUMifQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ManifestRuleContext, HookContent } from "../../context.js";
|
|
2
2
|
import type { AdvisoryRule } from "../../rule.js";
|
|
3
|
-
export declare const entrypointExistsRule: AdvisoryRule<
|
|
3
|
+
export declare const entrypointExistsRule: AdvisoryRule<ManifestRuleContext<HookContent>>;
|
|
4
4
|
//# sourceMappingURL=entrypoint-exists.d.ts.map
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
2
|
import * as Result from "effect/Result";
|
|
3
3
|
import * as Schema from "effect/Schema";
|
|
4
|
-
import { HookManifestSchema,
|
|
4
|
+
import { HookManifestSchema, referencedHookPackageFiles, } from "@agentxm/extension-model/unstable/hooks/manifest-schema";
|
|
5
5
|
import { isManifestJsonParseFailure } from "../shared/manifest-json.js";
|
|
6
|
+
import { manifestFilenameForType } from "@agentxm/extension-model/unstable/extensions/common";
|
|
6
7
|
const RULE_ID = "hook/referenced-files-exist";
|
|
7
8
|
const decodeHookManifest = Schema.decodeUnknownResult(HookManifestSchema);
|
|
8
9
|
export const entrypointExistsRule = {
|
|
@@ -31,7 +32,7 @@ export const entrypointExistsRule = {
|
|
|
31
32
|
ruleId: RULE_ID,
|
|
32
33
|
severity: "error",
|
|
33
34
|
message: `hook.json references missing package file '${file}'. Add the file or update its reference.`,
|
|
34
|
-
location: { file:
|
|
35
|
+
location: { file: manifestFilenameForType("hook") },
|
|
35
36
|
});
|
|
36
37
|
}
|
|
37
38
|
}
|
|
@@ -39,4 +40,4 @@ export const entrypointExistsRule = {
|
|
|
39
40
|
});
|
|
40
41
|
},
|
|
41
42
|
};
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnlwb2ludC1leGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL2hvb2svZW50cnlwb2ludC1leGlzdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQiwwQkFBMEIsR0FDM0IsTUFBTSx5REFBeUQsQ0FBQztBQUNqRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUd4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUU5RixNQUFNLE9BQU8sR0FBRyw2QkFBNkIsQ0FBQztBQUU5QyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFtRDtJQUNsRixFQUFFLEVBQUUsT0FBTztJQUNYLFdBQVcsRUFBRSxtRkFBbUY7SUFDaEcsSUFBSSxFQUFFLFVBQVU7SUFDaEIsUUFBUSxFQUFFLE9BQU87SUFDakIsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDakIsSUFDRSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTO1lBQ3RDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQ3BELENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQzNELGdCQUFnQixFQUFFLFFBQVE7WUFDMUIsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDLENBQUM7UUFDSCxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDekIsTUFBTSxRQUFRLEdBQTJCLEVBQUUsQ0FBQztZQUM1QyxLQUFLLE1BQU0sSUFBSSxJQUFJLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMvRCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3pDLFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQ1osSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE1BQU0sRUFBRSxPQUFPO3dCQUNmLFFBQVEsRUFBRSxPQUFPO3dCQUNqQixPQUFPLEVBQUUsOENBQThDLElBQUksMENBQTBDO3dCQUNyRyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEVBQUU7cUJBQ3BELENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGLENBQUMifQ==
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `hook/*` manifest envelope — see `../shared/envelope-rules.ts`.
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
4
|
+
import type { ManifestRuleContext, HookContent } from "../../context.js";
|
|
5
5
|
import * as Effect from "effect/Effect";
|
|
6
6
|
export declare const hookEnvelopeRules: {
|
|
7
7
|
manifestSchemaValid: {
|
|
8
|
-
check: (context:
|
|
8
|
+
check: (context: ManifestRuleContext<HookContent>) => Effect.Effect<readonly import("../../rule.ts").AdvisoryFinding[], never, never>;
|
|
9
9
|
kind: "advisory";
|
|
10
10
|
enabledByDefault?: false;
|
|
11
11
|
id: string;
|
|
12
12
|
description: string;
|
|
13
13
|
severity: import("../../rule.ts").Severity;
|
|
14
14
|
};
|
|
15
|
-
manifestPresent: import("../../rule.ts").AdvisoryRule<
|
|
16
|
-
manifestKeysRecognized: import("../../rule.ts").AdvisoryRule<
|
|
17
|
-
standaloneDeclarationValid: import("../../rule.ts").AdvisoryRule<
|
|
18
|
-
recommendedPacksValid: import("../../rule.ts").AdvisoryRule<
|
|
15
|
+
manifestPresent: import("../../rule.ts").AdvisoryRule<ManifestRuleContext<HookContent>, never>;
|
|
16
|
+
manifestKeysRecognized: import("../../rule.ts").AdvisoryRule<ManifestRuleContext<HookContent>, never>;
|
|
17
|
+
standaloneDeclarationValid: import("../../rule.ts").AdvisoryRule<ManifestRuleContext<HookContent>, never>;
|
|
18
|
+
recommendedPacksValid: import("../../rule.ts").AdvisoryRule<ManifestRuleContext<HookContent>, never>;
|
|
19
19
|
};
|
|
20
20
|
//# sourceMappingURL=envelope.d.ts.map
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `hook/*` manifest envelope — see `../shared/envelope-rules.ts`.
|
|
3
3
|
*/
|
|
4
|
-
import { HookManifestSchema
|
|
4
|
+
import { HookManifestSchema } from "@agentxm/extension-model/unstable/hooks/manifest-schema";
|
|
5
5
|
import * as Effect from "effect/Effect";
|
|
6
6
|
import * as Result from "effect/Result";
|
|
7
7
|
import * as Schema from "effect/Schema";
|
|
8
8
|
import { issuesToFindings } from "../../issues-to-findings.js";
|
|
9
9
|
import { isManifestJsonParseFailure } from "../shared/manifest-json.js";
|
|
10
10
|
import { makeManifestEnvelopeRules } from "../shared/envelope-rules.js";
|
|
11
|
+
import { manifestFilenameForType } from "@agentxm/extension-model/unstable/extensions/common";
|
|
11
12
|
const envelope = makeManifestEnvelopeRules({
|
|
12
13
|
namespace: "hook",
|
|
13
|
-
manifestFile:
|
|
14
|
+
manifestFile: manifestFilenameForType("hook"),
|
|
14
15
|
schema: HookManifestSchema,
|
|
15
16
|
manifestJson: (context) => context.subject.hookJson,
|
|
16
17
|
presentDescription: "Hooks include a root hook.json manifest.",
|
|
@@ -31,8 +32,8 @@ export const hookEnvelopeRules = {
|
|
|
31
32
|
});
|
|
32
33
|
return Effect.succeed(Result.isSuccess(decoded)
|
|
33
34
|
? []
|
|
34
|
-
: issuesToFindings("hook/manifest-schema-valid", "error",
|
|
35
|
+
: issuesToFindings("hook/manifest-schema-valid", "error", manifestFilenameForType("hook"), decoded.failure.issue));
|
|
35
36
|
},
|
|
36
37
|
},
|
|
37
38
|
};
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL2hvb2svZW52ZWxvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUU3RixPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUU5RixNQUFNLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQztJQUN6QyxTQUFTLEVBQUUsTUFBTTtJQUNqQixZQUFZLEVBQUUsdUJBQXVCLENBQUMsTUFBTSxDQUFDO0lBQzdDLE1BQU0sRUFBRSxrQkFBa0I7SUFDMUIsWUFBWSxFQUFFLENBQUMsT0FBeUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRO0lBQ3JGLGtCQUFrQixFQUFFLDBDQUEwQztJQUM5RCxxQkFBcUIsRUFDbkIsbUlBQW1JO0lBQ3JJLGlCQUFpQixFQUFFLDBDQUEwQztDQUM5RCxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRztJQUMvQixHQUFHLFFBQVE7SUFDWCxtQkFBbUIsRUFBRTtRQUNuQixHQUFHLFFBQVEsQ0FBQyxtQkFBbUI7UUFDL0IsS0FBSyxFQUFFLENBQUMsT0FBeUMsRUFBRSxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ3ZDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSwwQkFBMEIsQ0FBQyxLQUFLLENBQUM7Z0JBQzFELE9BQU8sUUFBUSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3BFLGdCQUFnQixFQUFFLE9BQU87Z0JBQ3pCLE1BQU0sRUFBRSxLQUFLO2FBQ2QsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUNuQixNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLEVBQUU7Z0JBQ0osQ0FBQyxDQUFDLGdCQUFnQixDQUNkLDRCQUE0QixFQUM1QixPQUFPLEVBQ1AsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEVBQy9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUN0QixDQUNOLENBQUM7UUFDSixDQUFDO0tBQ0Y7Q0FDRixDQUFDIn0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ManifestRuleContext, HookContent } from "../../context.js";
|
|
2
2
|
import type { AdvisoryRule } from "../../rule.js";
|
|
3
|
-
export declare const nativeBindingsSupportedRule: AdvisoryRule<
|
|
3
|
+
export declare const nativeBindingsSupportedRule: AdvisoryRule<ManifestRuleContext<HookContent>>;
|
|
4
4
|
//# sourceMappingURL=native-bindings-supported.d.ts.map
|
|
@@ -2,8 +2,9 @@ import * as Effect from "effect/Effect";
|
|
|
2
2
|
import * as Result from "effect/Result";
|
|
3
3
|
import * as Schema from "effect/Schema";
|
|
4
4
|
import { AGENTS_BY_ID, installable } from "@agentxm/extension-model/unstable/agent-capabilities";
|
|
5
|
-
import { HookManifestSchema
|
|
5
|
+
import { HookManifestSchema } from "@agentxm/extension-model/unstable/hooks/manifest-schema";
|
|
6
6
|
import { isManifestJsonParseFailure } from "../shared/manifest-json.js";
|
|
7
|
+
import { manifestFilenameForType } from "@agentxm/extension-model/unstable/extensions/common";
|
|
7
8
|
const RULE_ID = "hook/native-bindings-supported";
|
|
8
9
|
export const nativeBindingsSupportedRule = {
|
|
9
10
|
id: RULE_ID,
|
|
@@ -29,11 +30,11 @@ export const nativeBindingsSupportedRule = {
|
|
|
29
30
|
ruleId: RULE_ID,
|
|
30
31
|
severity: "error",
|
|
31
32
|
message: `Implementation '${implementation.id}', binding '${binding.id}': ${verdict.reason}`,
|
|
32
|
-
location: { file:
|
|
33
|
+
location: { file: manifestFilenameForType("hook") },
|
|
33
34
|
});
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
return Effect.succeed(findings);
|
|
37
38
|
},
|
|
38
39
|
};
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWJpbmRpbmdzLXN1cHBvcnRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50L2NhdGFsb2cvaG9vay9uYXRpdmUtYmluZGluZ3Mtc3VwcG9ydGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDakcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDN0YsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFFOUYsTUFBTSxPQUFPLEdBQUcsZ0NBQWdDLENBQUM7QUFDakQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQW1EO0lBQ3pGLEVBQUUsRUFBRSxPQUFPO0lBQ1gsV0FBVyxFQUFFLGdGQUFnRjtJQUM3RixJQUFJLEVBQUUsVUFBVTtJQUNoQixRQUFRLEVBQUUsT0FBTztJQUNqQixLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNqQixJQUNFLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVM7WUFDdEMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFFcEQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3ZGLGdCQUFnQixFQUFFLE9BQU87U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLFFBQVEsR0FBMkIsRUFBRSxDQUFDO1FBQzVDLEtBQUssTUFBTSxjQUFjLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM3RCxLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzVFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVztvQkFDdEIsUUFBUSxDQUFDLElBQUksQ0FBQzt3QkFDWixJQUFJLEVBQUUsVUFBVTt3QkFDaEIsTUFBTSxFQUFFLE9BQU87d0JBQ2YsUUFBUSxFQUFFLE9BQU87d0JBQ2pCLE9BQU8sRUFBRSxtQkFBbUIsY0FBYyxDQUFDLEVBQUUsZUFBZSxPQUFPLENBQUMsRUFBRSxNQUFNLE9BQU8sQ0FBQyxNQUFNLEVBQUU7d0JBQzVGLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtxQkFDcEQsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNGLENBQUMifQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ManifestRuleContext, HookContent } from "../context.js";
|
|
2
2
|
import type { LintRule } from "../rule.js";
|
|
3
|
-
export declare const hookRules: ReadonlyArray<LintRule<
|
|
3
|
+
export declare const hookRules: ReadonlyArray<LintRule<ManifestRuleContext<HookContent>>>;
|
|
4
4
|
//# sourceMappingURL=hook.d.ts.map
|
|
@@ -10,4 +10,4 @@ export const hookRules = [
|
|
|
10
10
|
hookEnvelopeRules.standaloneDeclarationValid,
|
|
11
11
|
hookEnvelopeRules.recommendedPacksValid,
|
|
12
12
|
];
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50L2NhdGFsb2cvaG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQThEO0lBQ2xGLGlCQUFpQixDQUFDLGVBQWU7SUFDakMsaUJBQWlCLENBQUMsbUJBQW1CO0lBQ3JDLGlCQUFpQixDQUFDLHNCQUFzQjtJQUN4QywyQkFBMkI7SUFDM0Isb0JBQW9CO0lBQ3BCLGlCQUFpQixDQUFDLDBCQUEwQjtJQUM1QyxpQkFBaUIsQ0FBQyxxQkFBcUI7Q0FDeEMsQ0FBQyJ9
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
import {
|
|
2
|
+
import { KNOWLEDGE_SOURCE_DIR } from "@agentxm/extension-model/unstable/knowledge";
|
|
3
3
|
import {} from "../../../knowledge/index.js";
|
|
4
|
+
import { manifestFilenameForType } from "@agentxm/extension-model/unstable/extensions/common";
|
|
4
5
|
const makeDiagnosticRule = (definition) => {
|
|
5
6
|
const ruleId = `knowledge/${definition.code}`;
|
|
6
7
|
return {
|
|
@@ -19,7 +20,7 @@ const makeDiagnosticRule = (definition) => {
|
|
|
19
20
|
message: diagnostic.message,
|
|
20
21
|
location: {
|
|
21
22
|
file: diagnostic.code === "missing-manifest-description"
|
|
22
|
-
?
|
|
23
|
+
? manifestFilenameForType("knowledge")
|
|
23
24
|
: diagnostic.relativePath === "."
|
|
24
25
|
? KNOWLEDGE_SOURCE_DIR
|
|
25
26
|
: `${KNOWLEDGE_SOURCE_DIR}/${diagnostic.relativePath}`,
|
|
@@ -75,4 +76,4 @@ export const knowledgeDiagnosticRuleDefinitions = [
|
|
|
75
76
|
{ code: "invalid-attestation", severity: "error" },
|
|
76
77
|
];
|
|
77
78
|
export const knowledgeDiagnosticRules = knowledgeDiagnosticRuleDefinitions.map(makeDiagnosticRule);
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL2tub3dsZWRnZS9kaWFnbm9zdGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUV4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNuRixPQUFPLEVBQWdDLE1BQU0sNkJBQTZCLENBQUM7QUFHM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFPOUYsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixVQUFvQyxFQUNBLEVBQUU7SUFDdEMsTUFBTSxNQUFNLEdBQUcsYUFBYSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUMsT0FBTztRQUNMLEVBQUUsRUFBRSxNQUFNO1FBQ1YsV0FBVyxFQUFFLGtDQUFrQyxVQUFVLENBQUMsSUFBSSx3QkFBd0I7UUFDdEYsSUFBSSxFQUFFLFVBQVU7UUFDaEIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1FBQzdCLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDbEUsTUFBTSxRQUFRLEdBQW1DLFdBQVc7aUJBQ3pELE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDO2lCQUMzRCxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksRUFBRSxVQUFVO2dCQUNoQixNQUFNO2dCQUNOLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtnQkFDN0IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO2dCQUMzQixRQUFR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
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* `knowledge/*` manifest envelope — see `../shared/envelope-rules.ts`.
|
|
3
3
|
*/
|
|
4
4
|
import type { KnowledgeRuleContext } from "../../context.js";
|
|
5
|
-
export declare const knowledgeEnvelopeRules: import("../shared/envelope-rules.js").ManifestEnvelopeRules<KnowledgeRuleContext
|
|
5
|
+
export declare const knowledgeEnvelopeRules: import("../shared/envelope-rules.js").ManifestEnvelopeRules<KnowledgeRuleContext>;
|
|
6
6
|
//# sourceMappingURL=envelope.d.ts.map
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `knowledge/*` manifest envelope — see `../shared/envelope-rules.ts`.
|
|
3
3
|
*/
|
|
4
|
-
import { KnowledgeManifestSchema
|
|
4
|
+
import { KnowledgeManifestSchema } from "@agentxm/extension-model/unstable/knowledge/manifest-schema";
|
|
5
5
|
import { makeManifestEnvelopeRules } from "../shared/envelope-rules.js";
|
|
6
|
+
import { manifestFilenameForType } from "@agentxm/extension-model/unstable/extensions/common";
|
|
6
7
|
export const knowledgeEnvelopeRules = makeManifestEnvelopeRules({
|
|
7
8
|
namespace: "knowledge",
|
|
8
|
-
manifestFile:
|
|
9
|
+
manifestFile: manifestFilenameForType("knowledge"),
|
|
9
10
|
schema: KnowledgeManifestSchema,
|
|
10
11
|
manifestJson: (context) => context.subject.knowledgeJson,
|
|
11
12
|
presentDescription: "Knowledge bundles include a root knowledge.json manifest.",
|
|
12
13
|
presentMissingMessage: "knowledge.json is missing. Create knowledge.json with the required manifest fields (`owner`, `type`, `name`, `version`, `format`, `bundleRoot`).",
|
|
13
14
|
schemaDescription: "knowledge.json defines a valid knowledge manifest.",
|
|
14
15
|
});
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL2tub3dsZWRnZS9lbnZlbG9wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBRXRHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRTlGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLHlCQUF5QixDQUFDO0lBQzlELFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFlBQVksRUFBRSx1QkFBdUIsQ0FBQyxXQUFXLENBQUM7SUFDbEQsTUFBTSxFQUFFLHVCQUF1QjtJQUMvQixZQUFZLEVBQUUsQ0FBQyxPQUE2QixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWE7SUFDOUUsa0JBQWtCLEVBQUUsMkRBQTJEO0lBQy9FLHFCQUFxQixFQUNuQixrSkFBa0o7SUFDcEosaUJBQWlCLEVBQUUsb0RBQW9EO0NBQ3hFLENBQUMsQ0FBQyJ9
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `mcp-server/*` manifest envelope — see `../shared/envelope-rules.ts`.
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
5
|
-
export declare const mcpServerEnvelopeRules: import("../shared/envelope-rules.js").ManifestEnvelopeRules<
|
|
4
|
+
import type { ManifestRuleContext, McpServerContent } from "../../context.js";
|
|
5
|
+
export declare const mcpServerEnvelopeRules: import("../shared/envelope-rules.js").ManifestEnvelopeRules<ManifestRuleContext<McpServerContent>>;
|
|
6
6
|
//# sourceMappingURL=envelope.d.ts.map
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `mcp-server/*` manifest envelope — see `../shared/envelope-rules.ts`.
|
|
3
3
|
*/
|
|
4
|
-
import { McpServerManifestSchema
|
|
4
|
+
import { McpServerManifestSchema } from "@agentxm/extension-model/unstable/mcps/manifest-schema";
|
|
5
5
|
import { makeManifestEnvelopeRules } from "../shared/envelope-rules.js";
|
|
6
|
+
import { manifestFilenameForType } from "@agentxm/extension-model/unstable/extensions/common";
|
|
6
7
|
export const mcpServerEnvelopeRules = makeManifestEnvelopeRules({
|
|
7
8
|
namespace: "mcp-server",
|
|
8
|
-
manifestFile:
|
|
9
|
+
manifestFile: manifestFilenameForType("mcp-server"),
|
|
9
10
|
schema: McpServerManifestSchema,
|
|
10
11
|
manifestJson: (context) => context.subject.mcpServerJson,
|
|
11
12
|
presentDescription: "MCP servers include a root mcp.json manifest.",
|
|
12
13
|
presentMissingMessage: "mcp.json is missing. Create mcp.json with the required manifest fields (`owner`, `type`, `name`, `version`).",
|
|
13
14
|
schemaDescription: "mcp.json defines a valid MCP server manifest.",
|
|
14
15
|
});
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL21jcC1zZXJ2ZXIvZW52ZWxvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUVqRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUU5RixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyx5QkFBeUIsQ0FBQztJQUM5RCxTQUFTLEVBQUUsWUFBWTtJQUN2QixZQUFZLEVBQUUsdUJBQXVCLENBQUMsWUFBWSxDQUFDO0lBQ25ELE1BQU0sRUFBRSx1QkFBdUI7SUFDL0IsWUFBWSxFQUFFLENBQUMsT0FBOEMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhO0lBQy9GLGtCQUFrQixFQUFFLCtDQUErQztJQUNuRSxxQkFBcUIsRUFDbkIsOEdBQThHO0lBQ2hILGlCQUFpQixFQUFFLCtDQUErQztDQUNuRSxDQUFDLENBQUMifQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ManifestRuleContext, McpServerContent } from "../context.js";
|
|
2
2
|
import type { LintRule } from "../rule.js";
|
|
3
|
-
export declare const mcpServerRules: ReadonlyArray<LintRule<
|
|
3
|
+
export declare const mcpServerRules: ReadonlyArray<LintRule<ManifestRuleContext<McpServerContent>>>;
|
|
4
4
|
//# sourceMappingURL=mcp-server.d.ts.map
|