@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.
Files changed (94) hide show
  1. package/dist/src/content/frontmatter.d.ts +16 -0
  2. package/dist/src/content/frontmatter.js +6 -4
  3. package/dist/src/content/skill-content.d.ts +13 -14
  4. package/dist/src/content/skill-content.js +8 -46
  5. package/dist/src/content/subagent-content.js +14 -10
  6. package/dist/src/index.d.ts +2 -2
  7. package/dist/src/index.js +3 -3
  8. package/dist/src/knowledge/index.d.ts +1 -1
  9. package/dist/src/knowledge/index.js +2 -2
  10. package/dist/src/knowledge/okf.d.ts +52 -1
  11. package/dist/src/knowledge/okf.js +86 -59
  12. package/dist/src/knowledge/package-inspection.d.ts +4 -7
  13. package/dist/src/knowledge/package-inspection.js +7 -19
  14. package/dist/src/lint/accessor/platform.d.ts +54 -0
  15. package/dist/src/lint/accessor/platform.js +89 -0
  16. package/dist/src/lint/{catalog/pack-accessor → accessor}/vft.d.ts +12 -14
  17. package/dist/src/lint/accessor/vft.js +83 -0
  18. package/dist/src/lint/catalog/hook/entrypoint-exists.d.ts +2 -2
  19. package/dist/src/lint/catalog/hook/entrypoint-exists.js +4 -3
  20. package/dist/src/lint/catalog/hook/envelope.d.ts +6 -6
  21. package/dist/src/lint/catalog/hook/envelope.js +5 -4
  22. package/dist/src/lint/catalog/hook/native-bindings-supported.d.ts +2 -2
  23. package/dist/src/lint/catalog/hook/native-bindings-supported.js +4 -3
  24. package/dist/src/lint/catalog/hook.d.ts +2 -2
  25. package/dist/src/lint/catalog/hook.js +1 -1
  26. package/dist/src/lint/catalog/knowledge/diagnostics.js +4 -3
  27. package/dist/src/lint/catalog/knowledge/envelope.d.ts +1 -1
  28. package/dist/src/lint/catalog/knowledge/envelope.js +4 -3
  29. package/dist/src/lint/catalog/mcp-server/envelope.d.ts +2 -2
  30. package/dist/src/lint/catalog/mcp-server/envelope.js +4 -3
  31. package/dist/src/lint/catalog/mcp-server.d.ts +2 -2
  32. package/dist/src/lint/catalog/{pack-accessor → pack}/contexts.d.ts +6 -6
  33. package/dist/src/lint/catalog/{pack-accessor → pack}/contexts.js +4 -4
  34. package/dist/src/lint/catalog/pack/envelope.d.ts +10 -0
  35. package/dist/src/lint/catalog/pack/envelope.js +20 -0
  36. package/dist/src/lint/catalog/pack.d.ts +9 -10
  37. package/dist/src/lint/catalog/pack.js +12 -15
  38. package/dist/src/lint/catalog/rule/envelope.d.ts +2 -2
  39. package/dist/src/lint/catalog/rule/envelope.js +4 -3
  40. package/dist/src/lint/catalog/rule.d.ts +2 -2
  41. package/dist/src/lint/catalog/shared/envelope-rules.d.ts +23 -12
  42. package/dist/src/lint/catalog/shared/envelope-rules.js +22 -13
  43. package/dist/src/lint/catalog/shared/manifest-present.d.ts +3 -4
  44. package/dist/src/lint/catalog/shared/recommended-packs-rules.js +5 -3
  45. package/dist/src/lint/catalog/shared/schema-rule.js +3 -3
  46. package/dist/src/lint/catalog/{skill-accessor → skill}/contexts.d.ts +5 -5
  47. package/dist/src/lint/catalog/{skill-accessor → skill}/contexts.js +3 -3
  48. package/dist/src/lint/catalog/skill/envelope.d.ts +11 -0
  49. package/dist/src/lint/catalog/skill/envelope.js +23 -0
  50. package/dist/src/lint/catalog/skill/frontmatter-parseable.d.ts +6 -4
  51. package/dist/src/lint/catalog/skill/frontmatter-parseable.js +17 -21
  52. package/dist/src/lint/catalog/skill/frontmatter-standard-valid.js +7 -12
  53. package/dist/src/lint/catalog/skill.d.ts +4 -5
  54. package/dist/src/lint/catalog/skill.js +11 -16
  55. package/dist/src/lint/catalog/subagent/envelope.d.ts +2 -2
  56. package/dist/src/lint/catalog/subagent/envelope.js +4 -3
  57. package/dist/src/lint/catalog/subagent.d.ts +2 -2
  58. package/dist/src/lint/context.d.ts +39 -115
  59. package/dist/src/lint/describe-document.d.ts +1 -1
  60. package/dist/src/lint/describe-document.js +4 -5
  61. package/dist/src/lint/index.d.ts +5 -7
  62. package/dist/src/lint/index.js +5 -7
  63. package/dist/src/packaging/archive-guardrails.d.ts +11 -0
  64. package/dist/src/packaging/archive-guardrails.js +111 -74
  65. package/dist/src/packaging/filtered-package-validation.js +3 -4
  66. package/dist/src/packaging/manifest-file.d.ts +7 -3
  67. package/dist/src/packaging/manifest-file.js +10 -11
  68. package/dist/src/packaging/manifest-policy.d.ts +0 -12
  69. package/dist/src/packaging/manifest-policy.js +12 -26
  70. package/dist/src/packaging/test-zip-helpers.js +4 -3
  71. package/package.json +8 -4
  72. package/dist/src/lint/catalog/pack/manifest-keys-recognized.d.ts +0 -28
  73. package/dist/src/lint/catalog/pack/manifest-keys-recognized.js +0 -38
  74. package/dist/src/lint/catalog/pack/manifest-present.d.ts +0 -17
  75. package/dist/src/lint/catalog/pack/manifest-present.js +0 -24
  76. package/dist/src/lint/catalog/pack/manifest-schema-valid.d.ts +0 -25
  77. package/dist/src/lint/catalog/pack/manifest-schema-valid.js +0 -33
  78. package/dist/src/lint/catalog/pack-accessor/platform.d.ts +0 -56
  79. package/dist/src/lint/catalog/pack-accessor/platform.js +0 -93
  80. package/dist/src/lint/catalog/pack-accessor/vft.js +0 -85
  81. package/dist/src/lint/catalog/skill/manifest-keys-recognized.d.ts +0 -26
  82. package/dist/src/lint/catalog/skill/manifest-keys-recognized.js +0 -41
  83. package/dist/src/lint/catalog/skill/manifest-present.d.ts +0 -23
  84. package/dist/src/lint/catalog/skill/manifest-present.js +0 -32
  85. package/dist/src/lint/catalog/skill/manifest-schema-valid.d.ts +0 -21
  86. package/dist/src/lint/catalog/skill/manifest-schema-valid.js +0 -36
  87. package/dist/src/lint/catalog/skill/recommended-packs-valid.d.ts +0 -8
  88. package/dist/src/lint/catalog/skill/recommended-packs-valid.js +0 -12
  89. package/dist/src/lint/catalog/skill/standalone-declaration-valid.d.ts +0 -8
  90. package/dist/src/lint/catalog/skill/standalone-declaration-valid.js +0 -12
  91. package/dist/src/lint/catalog/skill-accessor/platform.d.ts +0 -53
  92. package/dist/src/lint/catalog/skill-accessor/platform.js +0 -90
  93. package/dist/src/lint/catalog/skill-accessor/vft.d.ts +0 -77
  94. 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 `PackFileAccessor` for publish callers.
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 { PackFileAccessor } from "../../context.js";
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
- * Shape-compatible with `../skill-accessor/vft.ts#VFTNode`; kept as a local
34
- * declaration to avoid a cross-subfolder import and to document what this
35
- * accessor uses.
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 PackVFTNode {
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 `PackFileAccessor` rooted at the tree's root.
49
+ * Build a VFT-backed `ExtensionFileAccessor` rooted at the tree's root.
52
50
  *
53
- * Callers that root the pack at a sub-path of the archive should pre-strip
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 makeVftPackFileAccessor: (tree: PackVFTNode) => PackFileAccessor;
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 { HookRuleContext } from "../../context.js";
1
+ import type { ManifestRuleContext, HookContent } from "../../context.js";
2
2
  import type { AdvisoryRule } from "../../rule.js";
3
- export declare const entrypointExistsRule: AdvisoryRule<HookRuleContext>;
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, HOOK_MANIFEST_FILENAME, referencedHookPackageFiles, } from "@agentxm/extension-model/unstable/hooks/manifest-schema";
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: HOOK_MANIFEST_FILENAME },
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnlwb2ludC1leGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL2hvb2svZW50cnlwb2ludC1leGlzdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsMEJBQTBCLEdBQzNCLE1BQU0seURBQXlELENBQUM7QUFDakUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJeEUsTUFBTSxPQUFPLEdBQUcsNkJBQTZCLENBQUM7QUFFOUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUUxRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBa0M7SUFDakUsRUFBRSxFQUFFLE9BQU87SUFDWCxXQUFXLEVBQUUsbUZBQW1GO0lBQ2hHLElBQUksRUFBRSxVQUFVO0lBQ2hCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2pCLElBQ0UsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUztZQUN0QywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUNwRCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUMzRCxnQkFBZ0IsRUFBRSxRQUFRO1lBQzFCLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ3pCLE1BQU0sUUFBUSxHQUEyQixFQUFFLENBQUM7WUFDNUMsS0FBSyxNQUFNLElBQUksSUFBSSwwQkFBMEIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN6QyxRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUNaLElBQUksRUFBRSxVQUFVO3dCQUNoQixNQUFNLEVBQUUsT0FBTzt3QkFDZixRQUFRLEVBQUUsT0FBTzt3QkFDakIsT0FBTyxFQUFFLDhDQUE4QyxJQUFJLDBDQUEwQzt3QkFDckcsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFO3FCQUMzQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFDIn0=
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 { HookRuleContext } from "../../context.js";
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: HookRuleContext) => Effect.Effect<readonly import("../../rule.ts").AdvisoryFinding[], never, never>;
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<HookRuleContext<import("../../context.js").HookContent>, never>;
16
- manifestKeysRecognized: import("../../rule.ts").AdvisoryRule<HookRuleContext<import("../../context.js").HookContent>, never>;
17
- standaloneDeclarationValid: import("../../rule.ts").AdvisoryRule<HookRuleContext<import("../../context.js").HookContent>, never>;
18
- recommendedPacksValid: import("../../rule.ts").AdvisoryRule<HookRuleContext<import("../../context.js").HookContent>, never>;
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, HOOK_MANIFEST_FILENAME, } from "@agentxm/extension-model/unstable/hooks/manifest-schema";
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: HOOK_MANIFEST_FILENAME,
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", HOOK_MANIFEST_FILENAME, decoded.failure.issue));
35
+ : issuesToFindings("hook/manifest-schema-valid", "error", manifestFilenameForType("hook"), decoded.failure.issue));
35
36
  },
36
37
  },
37
38
  };
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL2hvb2svZW52ZWxvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHNCQUFzQixHQUN2QixNQUFNLHlEQUF5RCxDQUFDO0FBRWpFLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXhFLE1BQU0sUUFBUSxHQUFHLHlCQUF5QixDQUFDO0lBQ3pDLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLFlBQVksRUFBRSxzQkFBc0I7SUFDcEMsTUFBTSxFQUFFLGtCQUFrQjtJQUMxQixZQUFZLEVBQUUsQ0FBQyxPQUF3QixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVE7SUFDcEUsa0JBQWtCLEVBQUUsMENBQTBDO0lBQzlELHFCQUFxQixFQUNuQixtSUFBbUk7SUFDckksaUJBQWlCLEVBQUUsMENBQTBDO0NBQzlELENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHO0lBQy9CLEdBQUcsUUFBUTtJQUNYLG1CQUFtQixFQUFFO1FBQ25CLEdBQUcsUUFBUSxDQUFDLG1CQUFtQjtRQUMvQixLQUFLLEVBQUUsQ0FBQyxPQUF3QixFQUFFLEVBQUU7WUFDbEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDdkMsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLDBCQUEwQixDQUFDLEtBQUssQ0FBQztnQkFDMUQsT0FBTyxRQUFRLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDcEUsZ0JBQWdCLEVBQUUsT0FBTztnQkFDekIsTUFBTSxFQUFFLEtBQUs7YUFDZCxDQUFDLENBQUM7WUFDSCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQ25CLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO2dCQUN2QixDQUFDLENBQUMsRUFBRTtnQkFDSixDQUFDLENBQUMsZ0JBQWdCLENBQ2QsNEJBQTRCLEVBQzVCLE9BQU8sRUFDUCxzQkFBc0IsRUFDdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQ3RCLENBQ04sQ0FBQztRQUNKLENBQUM7S0FDRjtDQUNGLENBQUMifQ==
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL2hvb2svZW52ZWxvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUU3RixPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUU5RixNQUFNLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQztJQUN6QyxTQUFTLEVBQUUsTUFBTTtJQUNqQixZQUFZLEVBQUUsdUJBQXVCLENBQUMsTUFBTSxDQUFDO0lBQzdDLE1BQU0sRUFBRSxrQkFBa0I7SUFDMUIsWUFBWSxFQUFFLENBQUMsT0FBeUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRO0lBQ3JGLGtCQUFrQixFQUFFLDBDQUEwQztJQUM5RCxxQkFBcUIsRUFDbkIsbUlBQW1JO0lBQ3JJLGlCQUFpQixFQUFFLDBDQUEwQztDQUM5RCxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRztJQUMvQixHQUFHLFFBQVE7SUFDWCxtQkFBbUIsRUFBRTtRQUNuQixHQUFHLFFBQVEsQ0FBQyxtQkFBbUI7UUFDL0IsS0FBSyxFQUFFLENBQUMsT0FBeUMsRUFBRSxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ3ZDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSwwQkFBMEIsQ0FBQyxLQUFLLENBQUM7Z0JBQzFELE9BQU8sUUFBUSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3BFLGdCQUFnQixFQUFFLE9BQU87Z0JBQ3pCLE1BQU0sRUFBRSxLQUFLO2FBQ2QsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUNuQixNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLEVBQUU7Z0JBQ0osQ0FBQyxDQUFDLGdCQUFnQixDQUNkLDRCQUE0QixFQUM1QixPQUFPLEVBQ1AsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEVBQy9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUN0QixDQUNOLENBQUM7UUFDSixDQUFDO0tBQ0Y7Q0FDRixDQUFDIn0=
@@ -1,4 +1,4 @@
1
- import type { HookRuleContext } from "../../context.js";
1
+ import type { ManifestRuleContext, HookContent } from "../../context.js";
2
2
  import type { AdvisoryRule } from "../../rule.js";
3
- export declare const nativeBindingsSupportedRule: AdvisoryRule<HookRuleContext>;
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, HOOK_MANIFEST_FILENAME, } from "@agentxm/extension-model/unstable/hooks/manifest-schema";
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: HOOK_MANIFEST_FILENAME },
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWJpbmRpbmdzLXN1cHBvcnRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50L2NhdGFsb2cvaG9vay9uYXRpdmUtYmluZGluZ3Mtc3VwcG9ydGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDakcsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixzQkFBc0IsR0FDdkIsTUFBTSx5REFBeUQsQ0FBQztBQUNqRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUl4RSxNQUFNLE9BQU8sR0FBRyxnQ0FBZ0MsQ0FBQztBQUNqRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBa0M7SUFDeEUsRUFBRSxFQUFFLE9BQU87SUFDWCxXQUFXLEVBQUUsZ0ZBQWdGO0lBQzdGLElBQUksRUFBRSxVQUFVO0lBQ2hCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2pCLElBQ0UsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUztZQUN0QywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUVwRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDdkYsZ0JBQWdCLEVBQUUsT0FBTztTQUMxQixDQUFDLENBQUM7UUFDSCxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sUUFBUSxHQUEyQixFQUFFLENBQUM7UUFDNUMsS0FBSyxNQUFNLGNBQWMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzdELEtBQUssTUFBTSxPQUFPLElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDNUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXO29CQUN0QixRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUNaLElBQUksRUFBRSxVQUFVO3dCQUNoQixNQUFNLEVBQUUsT0FBTzt3QkFDZixRQUFRLEVBQUUsT0FBTzt3QkFDakIsT0FBTyxFQUFFLG1CQUFtQixjQUFjLENBQUMsRUFBRSxlQUFlLE9BQU8sQ0FBQyxFQUFFLE1BQU0sT0FBTyxDQUFDLE1BQU0sRUFBRTt3QkFDNUYsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFO3FCQUMzQyxDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0YsQ0FBQyJ9
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWJpbmRpbmdzLXN1cHBvcnRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50L2NhdGFsb2cvaG9vay9uYXRpdmUtYmluZGluZ3Mtc3VwcG9ydGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDakcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDN0YsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFFOUYsTUFBTSxPQUFPLEdBQUcsZ0NBQWdDLENBQUM7QUFDakQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQW1EO0lBQ3pGLEVBQUUsRUFBRSxPQUFPO0lBQ1gsV0FBVyxFQUFFLGdGQUFnRjtJQUM3RixJQUFJLEVBQUUsVUFBVTtJQUNoQixRQUFRLEVBQUUsT0FBTztJQUNqQixLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNqQixJQUNFLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVM7WUFDdEMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFFcEQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3ZGLGdCQUFnQixFQUFFLE9BQU87U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLFFBQVEsR0FBMkIsRUFBRSxDQUFDO1FBQzVDLEtBQUssTUFBTSxjQUFjLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM3RCxLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzVFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVztvQkFDdEIsUUFBUSxDQUFDLElBQUksQ0FBQzt3QkFDWixJQUFJLEVBQUUsVUFBVTt3QkFDaEIsTUFBTSxFQUFFLE9BQU87d0JBQ2YsUUFBUSxFQUFFLE9BQU87d0JBQ2pCLE9BQU8sRUFBRSxtQkFBbUIsY0FBYyxDQUFDLEVBQUUsZUFBZSxPQUFPLENBQUMsRUFBRSxNQUFNLE9BQU8sQ0FBQyxNQUFNLEVBQUU7d0JBQzVGLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtxQkFDcEQsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNGLENBQUMifQ==
@@ -1,4 +1,4 @@
1
- import type { HookRuleContext } from "../context.js";
1
+ import type { ManifestRuleContext, HookContent } from "../context.js";
2
2
  import type { LintRule } from "../rule.js";
3
- export declare const hookRules: ReadonlyArray<LintRule<HookRuleContext>>;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50L2NhdGFsb2cvaG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQTZDO0lBQ2pFLGlCQUFpQixDQUFDLGVBQWU7SUFDakMsaUJBQWlCLENBQUMsbUJBQW1CO0lBQ3JDLGlCQUFpQixDQUFDLHNCQUFzQjtJQUN4QywyQkFBMkI7SUFDM0Isb0JBQW9CO0lBQ3BCLGlCQUFpQixDQUFDLDBCQUEwQjtJQUM1QyxpQkFBaUIsQ0FBQyxxQkFBcUI7Q0FDeEMsQ0FBQyJ9
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50L2NhdGFsb2cvaG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQThEO0lBQ2xGLGlCQUFpQixDQUFDLGVBQWU7SUFDakMsaUJBQWlCLENBQUMsbUJBQW1CO0lBQ3JDLGlCQUFpQixDQUFDLHNCQUFzQjtJQUN4QywyQkFBMkI7SUFDM0Isb0JBQW9CO0lBQ3BCLGlCQUFpQixDQUFDLDBCQUEwQjtJQUM1QyxpQkFBaUIsQ0FBQyxxQkFBcUI7Q0FDeEMsQ0FBQyJ9
@@ -1,6 +1,7 @@
1
1
  import * as Effect from "effect/Effect";
2
- import { KNOWLEDGE_MANIFEST_FILENAME, KNOWLEDGE_SOURCE_DIR, } from "@agentxm/extension-model/unstable/knowledge";
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
- ? KNOWLEDGE_MANIFEST_FILENAME
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL2tub3dsZWRnZS9kaWFnbm9zdGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUV4QyxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLG9CQUFvQixHQUNyQixNQUFNLDZDQUE2QyxDQUFDO0FBQ3JELE9BQU8sRUFBZ0MsTUFBTSw2QkFBNkIsQ0FBQztBQVMzRSxNQUFNLGtCQUFrQixHQUFHLENBQ3pCLFVBQW9DLEVBQ0EsRUFBRTtJQUN0QyxNQUFNLE1BQU0sR0FBRyxhQUFhLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QyxPQUFPO1FBQ0wsRUFBRSxFQUFFLE1BQU07UUFDVixXQUFXLEVBQUUsa0NBQWtDLFVBQVUsQ0FBQyxJQUFJLHdCQUF3QjtRQUN0RixJQUFJLEVBQUUsVUFBVTtRQUNoQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7UUFDN0IsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDakIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQztZQUNsRSxNQUFNLFFBQVEsR0FBbUMsV0FBVztpQkFDekQsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUM7aUJBQzNELEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLE1BQU07Z0JBQ04sUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO2dCQUM3QixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87Z0JBQzNCLFFBQVEsRUFBRTtvQkFDUixJQUFJLEVBQ0YsVUFBVSxDQUFD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
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL2tub3dsZWRnZS9kaWFnbm9zdGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUV4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNuRixPQUFPLEVBQWdDLE1BQU0sNkJBQTZCLENBQUM7QUFHM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFPOUYsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixVQUFvQyxFQUNBLEVBQUU7SUFDdEMsTUFBTSxNQUFNLEdBQUcsYUFBYSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUMsT0FBTztRQUNMLEVBQUUsRUFBRSxNQUFNO1FBQ1YsV0FBVyxFQUFFLGtDQUFrQyxVQUFVLENBQUMsSUFBSSx3QkFBd0I7UUFDdEYsSUFBSSxFQUFFLFVBQVU7UUFDaEIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1FBQzdCLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDbEUsTUFBTSxRQUFRLEdBQW1DLFdBQVc7aUJBQ3pELE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDO2lCQUMzRCxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksRUFBRSxVQUFVO2dCQUNoQixNQUFNO2dCQUNOLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtnQkFDN0IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO2dCQUMzQixRQUFRLEVBQUU7b0JBQ1IsSUFBSSxFQUNGLFVBQVUsQ0FBQyxJQUFJLEtBQUssOEJBQThCO3dCQUNoRCxDQUFDLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDO3dCQUN0QyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksS0FBSyxHQUFHOzRCQUMvQixDQUFDLENBQUMsb0JBQW9COzRCQUN0QixDQUFDLENBQUMsR0FBRyxvQkFBb0IsSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFO29CQUM1RCxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNuRSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUMxRTthQUNGLENBQUMsQ0FBQyxDQUFDO1lBQ04sT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUc7SUFDaEQsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtJQUMvQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0lBQzdDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0lBQzNDLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7SUFDakQsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtJQUNsRCxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtJQUM5QyxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0lBQ3BELEVBQUUsSUFBSSxFQUFFLDhCQUE4QixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7SUFDN0QsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7SUFDN0MsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7SUFDN0MsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7SUFDNUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtJQUM3QyxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0lBQ3RELEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0lBQzNDLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7SUFDbEQsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtJQUM3QyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtJQUM1QyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0lBQzlDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0lBQzFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0lBQzVDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0lBQzFDLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7SUFDL0MsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtJQUNoRCxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0lBQ3BELEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7SUFDckQsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7SUFDOUMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtJQUNwRCxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0lBQ3BELEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7SUFDbEQsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7SUFDOUMsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRTtJQUNuRCxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0lBQ2xELEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0lBQzlDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0lBQzVDLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7SUFDbkQsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtJQUM5QyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0lBQ2hELEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7SUFDL0MsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtJQUM3QyxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0lBQ2xELEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7Q0FDUSxDQUFDO0FBRTdELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUNuQyxrQ0FBa0MsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyJ9
@@ -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<import("../../context.js").KnowledgeContent>>;
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, KNOWLEDGE_MANIFEST_FILENAME, } from "@agentxm/extension-model/unstable/knowledge/manifest-schema";
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: KNOWLEDGE_MANIFEST_FILENAME,
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL2tub3dsZWRnZS9lbnZlbG9wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsMkJBQTJCLEdBQzVCLE1BQU0sNkRBQTZELENBQUM7QUFFckUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFeEUsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcseUJBQXlCLENBQUM7SUFDOUQsU0FBUyxFQUFFLFdBQVc7SUFDdEIsWUFBWSxFQUFFLDJCQUEyQjtJQUN6QyxNQUFNLEVBQUUsdUJBQXVCO0lBQy9CLFlBQVksRUFBRSxDQUFDLE9BQTZCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYTtJQUM5RSxrQkFBa0IsRUFBRSwyREFBMkQ7SUFDL0UscUJBQXFCLEVBQ25CLGtKQUFrSjtJQUNwSixpQkFBaUIsRUFBRSxvREFBb0Q7Q0FDeEUsQ0FBQyxDQUFDIn0=
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 { McpServerRuleContext } from "../../context.js";
5
- export declare const mcpServerEnvelopeRules: import("../shared/envelope-rules.js").ManifestEnvelopeRules<McpServerRuleContext<import("../../context.js").McpServerContent>>;
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, MCP_SERVER_MANIFEST_FILENAME, } from "@agentxm/extension-model/unstable/mcps/manifest-schema";
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: MCP_SERVER_MANIFEST_FILENAME,
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL21jcC1zZXJ2ZXIvZW52ZWxvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDRCQUE0QixHQUM3QixNQUFNLHdEQUF3RCxDQUFDO0FBRWhFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLHlCQUF5QixDQUFDO0lBQzlELFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLFlBQVksRUFBRSw0QkFBNEI7SUFDMUMsTUFBTSxFQUFFLHVCQUF1QjtJQUMvQixZQUFZLEVBQUUsQ0FBQyxPQUE2QixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWE7SUFDOUUsa0JBQWtCLEVBQUUsK0NBQStDO0lBQ25FLHFCQUFxQixFQUNuQiw4R0FBOEc7SUFDaEgsaUJBQWlCLEVBQUUsK0NBQStDO0NBQ25FLENBQUMsQ0FBQyJ9
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL21jcC1zZXJ2ZXIvZW52ZWxvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUVqRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUU5RixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyx5QkFBeUIsQ0FBQztJQUM5RCxTQUFTLEVBQUUsWUFBWTtJQUN2QixZQUFZLEVBQUUsdUJBQXVCLENBQUMsWUFBWSxDQUFDO0lBQ25ELE1BQU0sRUFBRSx1QkFBdUI7SUFDL0IsWUFBWSxFQUFFLENBQUMsT0FBOEMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhO0lBQy9GLGtCQUFrQixFQUFFLCtDQUErQztJQUNuRSxxQkFBcUIsRUFDbkIsOEdBQThHO0lBQ2hILGlCQUFpQixFQUFFLCtDQUErQztDQUNuRSxDQUFDLENBQUMifQ==
@@ -1,4 +1,4 @@
1
- import type { McpServerRuleContext } from "../context.js";
1
+ import type { ManifestRuleContext, McpServerContent } from "../context.js";
2
2
  import type { LintRule } from "../rule.js";
3
- export declare const mcpServerRules: ReadonlyArray<LintRule<McpServerRuleContext>>;
3
+ export declare const mcpServerRules: ReadonlyArray<LintRule<ManifestRuleContext<McpServerContent>>>;
4
4
  //# sourceMappingURL=mcp-server.d.ts.map