@agentxm/extension-content 0.49.2 → 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 (95) 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/catalog-metadata.js +13 -1
  59. package/dist/src/lint/context.d.ts +39 -115
  60. package/dist/src/lint/describe-document.d.ts +1 -1
  61. package/dist/src/lint/describe-document.js +4 -5
  62. package/dist/src/lint/index.d.ts +5 -7
  63. package/dist/src/lint/index.js +5 -7
  64. package/dist/src/packaging/archive-guardrails.d.ts +11 -0
  65. package/dist/src/packaging/archive-guardrails.js +111 -74
  66. package/dist/src/packaging/filtered-package-validation.js +3 -4
  67. package/dist/src/packaging/manifest-file.d.ts +7 -3
  68. package/dist/src/packaging/manifest-file.js +10 -11
  69. package/dist/src/packaging/manifest-policy.d.ts +0 -12
  70. package/dist/src/packaging/manifest-policy.js +12 -26
  71. package/dist/src/packaging/test-zip-helpers.js +4 -3
  72. package/package.json +8 -4
  73. package/dist/src/lint/catalog/pack/manifest-keys-recognized.d.ts +0 -28
  74. package/dist/src/lint/catalog/pack/manifest-keys-recognized.js +0 -38
  75. package/dist/src/lint/catalog/pack/manifest-present.d.ts +0 -17
  76. package/dist/src/lint/catalog/pack/manifest-present.js +0 -24
  77. package/dist/src/lint/catalog/pack/manifest-schema-valid.d.ts +0 -25
  78. package/dist/src/lint/catalog/pack/manifest-schema-valid.js +0 -33
  79. package/dist/src/lint/catalog/pack-accessor/platform.d.ts +0 -56
  80. package/dist/src/lint/catalog/pack-accessor/platform.js +0 -93
  81. package/dist/src/lint/catalog/pack-accessor/vft.js +0 -85
  82. package/dist/src/lint/catalog/skill/manifest-keys-recognized.d.ts +0 -26
  83. package/dist/src/lint/catalog/skill/manifest-keys-recognized.js +0 -41
  84. package/dist/src/lint/catalog/skill/manifest-present.d.ts +0 -23
  85. package/dist/src/lint/catalog/skill/manifest-present.js +0 -32
  86. package/dist/src/lint/catalog/skill/manifest-schema-valid.d.ts +0 -21
  87. package/dist/src/lint/catalog/skill/manifest-schema-valid.js +0 -36
  88. package/dist/src/lint/catalog/skill/recommended-packs-valid.d.ts +0 -8
  89. package/dist/src/lint/catalog/skill/recommended-packs-valid.js +0 -12
  90. package/dist/src/lint/catalog/skill/standalone-declaration-valid.d.ts +0 -8
  91. package/dist/src/lint/catalog/skill/standalone-declaration-valid.js +0 -12
  92. package/dist/src/lint/catalog/skill-accessor/platform.d.ts +0 -53
  93. package/dist/src/lint/catalog/skill-accessor/platform.js +0 -90
  94. package/dist/src/lint/catalog/skill-accessor/vft.d.ts +0 -77
  95. package/dist/src/lint/catalog/skill-accessor/vft.js +0 -135
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `buildPackRuleContexts` — build `PackRuleContext[]` from a structural
2
+ * `buildPackRuleContexts` — build pack rule contexts from a structural
3
3
  * `installedPacks` input. The full lint workspace view
4
4
  * (`LintWorkspaceView`) satisfies this by construction.
5
5
  *
@@ -10,7 +10,7 @@
10
10
  * decodes once per pack, so rules don't re-read + re-parse).
11
11
  * - `displayRoot` — posix-relative root used by the renderer; the caller
12
12
  * picks per provenance (see the table below).
13
- * - `files` — the pre-bound `PackFileAccessor`. The caller chooses VFT or
13
+ * - `files` — the pre-bound `ExtensionFileAccessor`. The caller chooses VFT or
14
14
  * platform-backed.
15
15
  *
16
16
  * Provenance → `displayRoot` table:
@@ -23,7 +23,7 @@
23
23
  * @experimental This API is unstable and may change without notice.
24
24
  * @packageDocumentation
25
25
  */
26
- import type { PackFileAccessor, PackRuleContext } from "../../context.js";
26
+ import type { ExtensionFileAccessor, ManifestRuleContext, PackContent } from "../../context.js";
27
27
  /**
28
28
  * Minimal structural shape `buildPackRuleContexts` needs per installed
29
29
  * pack. The full lint workspace view exposes
@@ -34,10 +34,10 @@ import type { PackFileAccessor, PackRuleContext } from "../../context.js";
34
34
  export interface InstalledPackInfo {
35
35
  readonly packJson: unknown;
36
36
  readonly displayRoot: string;
37
- readonly files: PackFileAccessor;
37
+ readonly files: ExtensionFileAccessor;
38
38
  }
39
39
  /**
40
- * Project an input's `installedPacks` into `PackRuleContext`s with their
40
+ * Project an input's `installedPacks` into pack rule contexts with their
41
41
  * `displayRoot` and `subject` fields pre-populated.
42
42
  *
43
43
  * Publish callers bypass this helper and construct a single context directly
@@ -47,5 +47,5 @@ export interface InstalledPackInfo {
47
47
  */
48
48
  export declare const buildPackRuleContexts: (input: {
49
49
  readonly installedPacks: ReadonlyArray<InstalledPackInfo>;
50
- }) => ReadonlyArray<PackRuleContext>;
50
+ }) => ReadonlyArray<ManifestRuleContext<PackContent>>;
51
51
  //# sourceMappingURL=contexts.d.ts.map
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `buildPackRuleContexts` — build `PackRuleContext[]` from a structural
2
+ * `buildPackRuleContexts` — build pack rule contexts from a structural
3
3
  * `installedPacks` input. The full lint workspace view
4
4
  * (`LintWorkspaceView`) satisfies this by construction.
5
5
  *
@@ -10,7 +10,7 @@
10
10
  * decodes once per pack, so rules don't re-read + re-parse).
11
11
  * - `displayRoot` — posix-relative root used by the renderer; the caller
12
12
  * picks per provenance (see the table below).
13
- * - `files` — the pre-bound `PackFileAccessor`. The caller chooses VFT or
13
+ * - `files` — the pre-bound `ExtensionFileAccessor`. The caller chooses VFT or
14
14
  * platform-backed.
15
15
  *
16
16
  * Provenance → `displayRoot` table:
@@ -27,7 +27,7 @@
27
27
  // buildPackRuleContexts
28
28
  // -----------------------------------------------------------------------------
29
29
  /**
30
- * Project an input's `installedPacks` into `PackRuleContext`s with their
30
+ * Project an input's `installedPacks` into pack rule contexts with their
31
31
  * `displayRoot` and `subject` fields pre-populated.
32
32
  *
33
33
  * Publish callers bypass this helper and construct a single context directly
@@ -42,4 +42,4 @@ export const buildPackRuleContexts = (input) => input.installedPacks.map((info)
42
42
  files: info.files,
43
43
  displayRoot: info.displayRoot,
44
44
  }));
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3BhY2stYWNjZXNzb3IvY29udGV4dHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQXFCSCxnRkFBZ0Y7QUFDaEYsd0JBQXdCO0FBQ3hCLGdGQUFnRjtBQUVoRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FFckMsRUFBa0MsRUFBRSxDQUNuQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBbUIsRUFBRSxDQUFDLENBQUM7SUFDbkQsT0FBTyxFQUFFO1FBQ1AsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO0tBQ3hCO0lBQ0QsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztDQUM5QixDQUFDLENBQUMsQ0FBQyJ9
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3BhY2svY29udGV4dHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQXFCSCxnRkFBZ0Y7QUFDaEYsd0JBQXdCO0FBQ3hCLGdGQUFnRjtBQUVoRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FFckMsRUFBbUQsRUFBRSxDQUNwRCxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBb0MsRUFBRSxDQUFDLENBQUM7SUFDcEUsT0FBTyxFQUFFO1FBQ1AsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO0tBQ3hCO0lBQ0QsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO0lBQ2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztDQUM5QixDQUFDLENBQUMsQ0FBQyJ9
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `pack/*` manifest envelope — see `../shared/envelope-rules.ts`.
3
+ *
4
+ * Packs are registry-only, so every pack context is expected to carry
5
+ * `pack.json`. A forbidden `packs:` dependency section (packs cannot depend
6
+ * on packs) surfaces as an unrecognized top-level key.
7
+ */
8
+ import type { ManifestRuleContext, PackContent } from "../../context.js";
9
+ export declare const packEnvelopeRules: import("../shared/envelope-rules.js").ManifestEnvelopeRules<ManifestRuleContext<PackContent>>;
10
+ //# sourceMappingURL=envelope.d.ts.map
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `pack/*` manifest envelope — see `../shared/envelope-rules.ts`.
3
+ *
4
+ * Packs are registry-only, so every pack context is expected to carry
5
+ * `pack.json`. A forbidden `packs:` dependency section (packs cannot depend
6
+ * on packs) surfaces as an unrecognized top-level key.
7
+ */
8
+ import { PackManifestSchema } from "@agentxm/extension-model/unstable/packs/manifest-schema";
9
+ import { makeManifestEnvelopeRules } from "../shared/envelope-rules.js";
10
+ import { manifestFilenameForType } from "@agentxm/extension-model/unstable/extensions/common";
11
+ export const packEnvelopeRules = makeManifestEnvelopeRules({
12
+ namespace: "pack",
13
+ manifestFile: manifestFilenameForType("pack"),
14
+ schema: PackManifestSchema,
15
+ manifestJson: (context) => context.subject.packJson,
16
+ presentDescription: "Packs include a root pack.json manifest.",
17
+ presentMissingMessage: "pack.json is missing. Create pack.json with the required manifest fields (`owner`, `type`, `name`, `version`).",
18
+ schemaDescription: "pack.json defines a valid pack manifest.",
19
+ });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3BhY2svZW52ZWxvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFFN0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFFOUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcseUJBQXlCLENBQUM7SUFDekQsU0FBUyxFQUFFLE1BQU07SUFDakIsWUFBWSxFQUFFLHVCQUF1QixDQUFDLE1BQU0sQ0FBQztJQUM3QyxNQUFNLEVBQUUsa0JBQWtCO0lBQzFCLFlBQVksRUFBRSxDQUFDLE9BQXlDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUTtJQUNyRixrQkFBa0IsRUFBRSwwQ0FBMEM7SUFDOUQscUJBQXFCLEVBQ25CLGdIQUFnSDtJQUNsSCxpQkFBaUIsRUFBRSwwQ0FBMEM7Q0FDOUQsQ0FBQyxDQUFDIn0=
@@ -1,8 +1,8 @@
1
1
  /**
2
- * `pack/*` rule catalog — the v1 three-rule set.
2
+ * `pack/*` rule catalog.
3
3
  *
4
- * Per the lint design, registry publish and `axm lint`
5
- * run exactly these rules against each pack context:
4
+ * Registry publish and `axm lint` run exactly these rules against each pack
5
+ * context:
6
6
  *
7
7
  * | ID | Severity | Autofix |
8
8
  * | ------------------------------- | -------- | ------- |
@@ -10,22 +10,21 @@
10
10
  * | `pack/manifest-schema-valid` | error | — |
11
11
  * | `pack/manifest-keys-recognized` | error | — |
12
12
  *
13
- * All three ship `kind: "advisory"`. Packs are registry-only at v1 (no
14
- * non-native arm), so there is no applicability discriminator — every pack
15
- * context runs every rule and the `check` body's early-return arms handle
16
- * manifest-absent cases.
13
+ * They are the first three rules of the shared manifest envelope
14
+ * (`./pack/envelope.ts`). Packs carry no `standalone` or `recommendedPacks`
15
+ * fields, so the envelope's two pack-membership rules do not apply.
17
16
  *
18
17
  * @experimental This API is unstable and may change without notice.
19
18
  * @packageDocumentation
20
19
  */
21
20
  import type { LintRule } from "../rule.js";
22
- import type { PackRuleContext } from "../context.js";
21
+ import type { ManifestRuleContext, PackContent } from "../context.js";
23
22
  /**
24
- * Ordered v1 `pack/*` rule catalog. Declaration order is the evaluation
23
+ * Ordered `pack/*` rule catalog. Declaration order is the evaluation
25
24
  * order within a single `evaluateContexts` call (deterministic ordering is
26
25
  * test-observable; see `evaluate.ts`).
27
26
  *
28
27
  * @experimental This API is unstable and may change without notice.
29
28
  */
30
- export declare const packRules: ReadonlyArray<LintRule<PackRuleContext>>;
29
+ export declare const packRules: ReadonlyArray<LintRule<ManifestRuleContext<PackContent>>>;
31
30
  //# sourceMappingURL=pack.d.ts.map
@@ -1,8 +1,8 @@
1
1
  /**
2
- * `pack/*` rule catalog — the v1 three-rule set.
2
+ * `pack/*` rule catalog.
3
3
  *
4
- * Per the lint design, registry publish and `axm lint`
5
- * run exactly these rules against each pack context:
4
+ * Registry publish and `axm lint` run exactly these rules against each pack
5
+ * context:
6
6
  *
7
7
  * | ID | Severity | Autofix |
8
8
  * | ------------------------------- | -------- | ------- |
@@ -10,27 +10,24 @@
10
10
  * | `pack/manifest-schema-valid` | error | — |
11
11
  * | `pack/manifest-keys-recognized` | error | — |
12
12
  *
13
- * All three ship `kind: "advisory"`. Packs are registry-only at v1 (no
14
- * non-native arm), so there is no applicability discriminator — every pack
15
- * context runs every rule and the `check` body's early-return arms handle
16
- * manifest-absent cases.
13
+ * They are the first three rules of the shared manifest envelope
14
+ * (`./pack/envelope.ts`). Packs carry no `standalone` or `recommendedPacks`
15
+ * fields, so the envelope's two pack-membership rules do not apply.
17
16
  *
18
17
  * @experimental This API is unstable and may change without notice.
19
18
  * @packageDocumentation
20
19
  */
21
- import { manifestPresentRule } from "./pack/manifest-present.js";
22
- import { manifestSchemaValidRule } from "./pack/manifest-schema-valid.js";
23
- import { manifestKeysRecognizedRule } from "./pack/manifest-keys-recognized.js";
20
+ import { packEnvelopeRules } from "./pack/envelope.js";
24
21
  /**
25
- * Ordered v1 `pack/*` rule catalog. Declaration order is the evaluation
22
+ * Ordered `pack/*` rule catalog. Declaration order is the evaluation
26
23
  * order within a single `evaluateContexts` call (deterministic ordering is
27
24
  * test-observable; see `evaluate.ts`).
28
25
  *
29
26
  * @experimental This API is unstable and may change without notice.
30
27
  */
31
28
  export const packRules = [
32
- manifestPresentRule,
33
- manifestSchemaValidRule,
34
- manifestKeysRecognizedRule,
29
+ packEnvelopeRules.manifestPresent,
30
+ packEnvelopeRules.manifestSchemaValid,
31
+ packEnvelopeRules.manifestKeysRecognized,
35
32
  ];
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50L2NhdGFsb2cvcGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUlILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWhGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBNkM7SUFDakUsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QiwwQkFBMEI7Q0FDM0IsQ0FBQyJ9
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50L2NhdGFsb2cvcGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBSUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUE4RDtJQUNsRixpQkFBaUIsQ0FBQyxlQUFlO0lBQ2pDLGlCQUFpQixDQUFDLG1CQUFtQjtJQUNyQyxpQkFBaUIsQ0FBQyxzQkFBc0I7Q0FDekMsQ0FBQyJ9
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * `rule/*` manifest envelope — see `../shared/envelope-rules.ts`.
3
3
  */
4
- import type { RuleRuleContext } from "../../context.js";
5
- export declare const ruleEnvelopeRules: import("../shared/envelope-rules.js").ManifestEnvelopeRules<RuleRuleContext<import("../../context.js").RuleContent>>;
4
+ import type { ManifestRuleContext, RuleContent } from "../../context.js";
5
+ export declare const ruleEnvelopeRules: import("../shared/envelope-rules.js").ManifestEnvelopeRules<ManifestRuleContext<RuleContent>>;
6
6
  //# sourceMappingURL=envelope.d.ts.map
@@ -1,15 +1,16 @@
1
1
  /**
2
2
  * `rule/*` manifest envelope — see `../shared/envelope-rules.ts`.
3
3
  */
4
- import { RuleManifestSchema, RULE_MANIFEST_FILENAME, } from "@agentxm/extension-model/unstable/rules/manifest-schema";
4
+ import { RuleManifestSchema } from "@agentxm/extension-model/unstable/rules/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 ruleEnvelopeRules = makeManifestEnvelopeRules({
7
8
  namespace: "rule",
8
- manifestFile: RULE_MANIFEST_FILENAME,
9
+ manifestFile: manifestFilenameForType("rule"),
9
10
  schema: RuleManifestSchema,
10
11
  manifestJson: (context) => context.subject.ruleJson,
11
12
  presentDescription: "Rules include a root rule.json manifest.",
12
13
  presentMissingMessage: "rule.json is missing. Create rule.json with the required manifest fields (`owner`, `type`, `name`, `version`).",
13
14
  schemaDescription: "rule.json defines a valid rule manifest.",
14
15
  });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3J1bGUvZW52ZWxvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHNCQUFzQixHQUN2QixNQUFNLHlEQUF5RCxDQUFDO0FBRWpFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLHlCQUF5QixDQUFDO0lBQ3pELFNBQVMsRUFBRSxNQUFNO0lBQ2pCLFlBQVksRUFBRSxzQkFBc0I7SUFDcEMsTUFBTSxFQUFFLGtCQUFrQjtJQUMxQixZQUFZLEVBQUUsQ0FBQyxPQUF3QixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVE7SUFDcEUsa0JBQWtCLEVBQUUsMENBQTBDO0lBQzlELHFCQUFxQixFQUNuQixnSEFBZ0g7SUFDbEgsaUJBQWlCLEVBQUUsMENBQTBDO0NBQzlELENBQUMsQ0FBQyJ9
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3J1bGUvZW52ZWxvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUU3RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUU5RixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyx5QkFBeUIsQ0FBQztJQUN6RCxTQUFTLEVBQUUsTUFBTTtJQUNqQixZQUFZLEVBQUUsdUJBQXVCLENBQUMsTUFBTSxDQUFDO0lBQzdDLE1BQU0sRUFBRSxrQkFBa0I7SUFDMUIsWUFBWSxFQUFFLENBQUMsT0FBeUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRO0lBQ3JGLGtCQUFrQixFQUFFLDBDQUEwQztJQUM5RCxxQkFBcUIsRUFDbkIsZ0hBQWdIO0lBQ2xILGlCQUFpQixFQUFFLDBDQUEwQztDQUM5RCxDQUFDLENBQUMifQ==
@@ -1,4 +1,4 @@
1
- import type { RuleRuleContext } from "../context.js";
1
+ import type { ManifestRuleContext, RuleContent } from "../context.js";
2
2
  import type { LintRule } from "../rule.js";
3
- export declare const ruleRules: ReadonlyArray<LintRule<RuleRuleContext>>;
3
+ export declare const ruleRules: ReadonlyArray<LintRule<ManifestRuleContext<RuleContent>>>;
4
4
  //# sourceMappingURL=rule.d.ts.map
@@ -1,8 +1,7 @@
1
1
  /**
2
- * The five-rule manifest envelope every non-pack per-extension catalog ships.
2
+ * The manifest envelope every per-extension catalog builds from.
3
3
  *
4
- * `skill`, `subagent`, `mcp-server`, `hook`, `rule`, and `knowledge` each
5
- * enforce the same five invariants against their own
4
+ * Every extension type enforces the same invariants against its own
6
5
  * manifest:
7
6
  *
8
7
  * 1. `<ns>/manifest-present` — the manifest file exists.
@@ -11,16 +10,18 @@
11
10
  * 4. `<ns>/standalone-declaration-valid` — `standalone: false` names its packs.
12
11
  * 5. `<ns>/recommended-packs-valid` — recommended packs are bare FQNs.
13
12
  *
14
- * Rules 1, 4, and 5 already had factories; rules 2 and 3 were hand-copied per
15
- * type. This module composes all five so a new extension type's envelope is
16
- * one call, and so the publish-safe barrel (`lint/publish.ts`) and the
17
- * `axm lint` catalog (`catalog/<type>.ts`) build from the same definitions.
13
+ * All seven catalogs (`skill`, `pack`, `subagent`, `mcp-server`, `hook`,
14
+ * `rule`, `knowledge`) take their envelope rules from
15
+ * {@link makeManifestEnvelopeRules}. Packs carry no `standalone` or
16
+ * `recommendedPacks` fields, so the pack catalog registers only rules 1-3.
17
+ * The named record lets a catalog interleave its own rules (the skill
18
+ * frontmatter rules, for example) without splicing an opaque array.
18
19
  *
19
20
  * @experimental This API is unstable and may change without notice.
20
21
  * @packageDocumentation
21
22
  */
22
- import * as Effect from "effect/Effect";
23
23
  import type * as Schema from "effect/Schema";
24
+ import type { ExtensionFileAccessor } from "../../context.js";
24
25
  import type { AdvisoryRule } from "../../rule.js";
25
26
  /**
26
27
  * A manifest schema usable by the envelope: decodable, and introspectable for
@@ -31,6 +32,7 @@ import type { AdvisoryRule } from "../../rule.js";
31
32
  export type ManifestEnvelopeSchema<A, I> = Schema.Codec<A, I> & {
32
33
  readonly fields: Readonly<Record<string, unknown>>;
33
34
  };
35
+ type ManifestFileAccessor = Pick<ExtensionFileAccessor, "exists">;
34
36
  /**
35
37
  * Per-catalog parameters for {@link makeManifestEnvelopeRules}.
36
38
  *
@@ -51,6 +53,14 @@ export interface ManifestEnvelopeOptions<C, A, I> {
51
53
  readonly presentMissingMessage: string;
52
54
  /** `description` for `<ns>/manifest-schema-valid`. */
53
55
  readonly schemaDescription: string;
56
+ /** Accessor rooted where the manifest lives; defaults to `context.files`. */
57
+ readonly getFiles?: (context: C) => ManifestFileAccessor;
58
+ /**
59
+ * Whether the context is expected to carry a manifest at all. Every
60
+ * envelope rule produces no findings for a context it does not apply to.
61
+ * Defaults to every context.
62
+ */
63
+ readonly applies?: (context: C) => boolean;
54
64
  }
55
65
  /**
56
66
  * The five envelope rules, named so callers can order them alongside their own
@@ -70,14 +80,14 @@ export interface ManifestEnvelopeRules<C> {
70
80
  *
71
81
  * The context only has to expose a `files` accessor with `exists`; the
72
82
  * manifest value itself is read through `options.manifestJson`, so the factory
73
- * never assumes a subject field name.
83
+ * never assumes a subject field name. A context outside `options.applies` is
84
+ * treated as carrying no manifest, which every rule after
85
+ * `<ns>/manifest-present` already skips.
74
86
  *
75
87
  * @experimental This API is unstable and may change without notice.
76
88
  */
77
89
  export declare const makeManifestEnvelopeRules: <C extends {
78
- readonly files: {
79
- readonly exists: (path: string) => Effect.Effect<boolean>;
80
- };
90
+ readonly files: ManifestFileAccessor;
81
91
  }, A, I>(options: ManifestEnvelopeOptions<C, A, I>) => ManifestEnvelopeRules<C>;
82
92
  /**
83
93
  * The envelope rules in canonical catalog order.
@@ -85,4 +95,5 @@ export declare const makeManifestEnvelopeRules: <C extends {
85
95
  * @experimental This API is unstable and may change without notice.
86
96
  */
87
97
  export declare const orderedEnvelopeRules: <C>(rules: ManifestEnvelopeRules<C>) => ReadonlyArray<AdvisoryRule<C>>;
98
+ export {};
88
99
  //# sourceMappingURL=envelope-rules.d.ts.map
@@ -1,8 +1,7 @@
1
1
  /**
2
- * The five-rule manifest envelope every non-pack per-extension catalog ships.
2
+ * The manifest envelope every per-extension catalog builds from.
3
3
  *
4
- * `skill`, `subagent`, `mcp-server`, `hook`, `rule`, and `knowledge` each
5
- * enforce the same five invariants against their own
4
+ * Every extension type enforces the same invariants against its own
6
5
  * manifest:
7
6
  *
8
7
  * 1. `<ns>/manifest-present` — the manifest file exists.
@@ -11,10 +10,12 @@
11
10
  * 4. `<ns>/standalone-declaration-valid` — `standalone: false` names its packs.
12
11
  * 5. `<ns>/recommended-packs-valid` — recommended packs are bare FQNs.
13
12
  *
14
- * Rules 1, 4, and 5 already had factories; rules 2 and 3 were hand-copied per
15
- * type. This module composes all five so a new extension type's envelope is
16
- * one call, and so the publish-safe barrel (`lint/publish.ts`) and the
17
- * `axm lint` catalog (`catalog/<type>.ts`) build from the same definitions.
13
+ * All seven catalogs (`skill`, `pack`, `subagent`, `mcp-server`, `hook`,
14
+ * `rule`, `knowledge`) take their envelope rules from
15
+ * {@link makeManifestEnvelopeRules}. Packs carry no `standalone` or
16
+ * `recommendedPacks` fields, so the pack catalog registers only rules 1-3.
17
+ * The named record lets a catalog interleave its own rules (the skill
18
+ * frontmatter rules, for example) without splicing an opaque array.
18
19
  *
19
20
  * @experimental This API is unstable and may change without notice.
20
21
  * @packageDocumentation
@@ -28,7 +29,9 @@ import { enumerateUnknownTopLevelKeys, schemaDecodeFindings, structFieldKeys, }
28
29
  *
29
30
  * The context only has to expose a `files` accessor with `exists`; the
30
31
  * manifest value itself is read through `options.manifestJson`, so the factory
31
- * never assumes a subject field name.
32
+ * never assumes a subject field name. A context outside `options.applies` is
33
+ * treated as carrying no manifest, which every rule after
34
+ * `<ns>/manifest-present` already skips.
32
35
  *
33
36
  * @experimental This API is unstable and may change without notice.
34
37
  */
@@ -36,36 +39,42 @@ export const makeManifestEnvelopeRules = (options) => {
36
39
  const schemaValidRuleId = `${options.namespace}/manifest-schema-valid`;
37
40
  const keysRecognizedRuleId = `${options.namespace}/manifest-keys-recognized`;
38
41
  const allowedKeys = structFieldKeys(options.schema);
42
+ const applies = options.applies;
43
+ const manifestJson = applies === undefined
44
+ ? options.manifestJson
45
+ : (context) => (applies(context) ? options.manifestJson(context) : undefined);
39
46
  return {
40
47
  manifestPresent: makeManifestPresentRule({
41
48
  ruleId: `${options.namespace}/manifest-present`,
42
49
  description: options.presentDescription,
43
50
  manifestFile: options.manifestFile,
44
51
  missingMessage: options.presentMissingMessage,
52
+ ...(options.getFiles === undefined ? {} : { getFiles: options.getFiles }),
53
+ ...(applies === undefined ? {} : { applies }),
45
54
  }),
46
55
  manifestSchemaValid: {
47
56
  id: schemaValidRuleId,
48
57
  description: options.schemaDescription,
49
58
  kind: "advisory",
50
59
  severity: "error",
51
- check: (context) => schemaDecodeFindings(schemaValidRuleId, "error", options.manifestFile, options.schema, options.manifestJson(context)),
60
+ check: (context) => schemaDecodeFindings(schemaValidRuleId, "error", options.manifestFile, options.schema, manifestJson(context)),
52
61
  },
53
62
  manifestKeysRecognized: {
54
63
  id: keysRecognizedRuleId,
55
64
  description: `${options.manifestFile} uses only supported top-level fields.`,
56
65
  kind: "advisory",
57
66
  severity: "error",
58
- check: (context) => Effect.succeed(enumerateUnknownTopLevelKeys(keysRecognizedRuleId, "error", options.manifestFile, allowedKeys, options.manifestJson(context))),
67
+ check: (context) => Effect.succeed(enumerateUnknownTopLevelKeys(keysRecognizedRuleId, "error", options.manifestFile, allowedKeys, manifestJson(context))),
59
68
  },
60
69
  standaloneDeclarationValid: makeStandaloneDeclarationValidRule({
61
70
  namespace: options.namespace,
62
71
  manifestFile: options.manifestFile,
63
- manifestJson: options.manifestJson,
72
+ manifestJson,
64
73
  }),
65
74
  recommendedPacksValid: makeRecommendedPacksValidRule({
66
75
  namespace: options.namespace,
67
76
  manifestFile: options.manifestFile,
68
- manifestJson: options.manifestJson,
77
+ manifestJson,
69
78
  }),
70
79
  };
71
80
  };
@@ -81,4 +90,4 @@ export const orderedEnvelopeRules = (rules) => [
81
90
  rules.standaloneDeclarationValid,
82
91
  rules.recommendedPacksValid,
83
92
  ];
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUtcnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3NoYXJlZC9lbnZlbG9wZS1ydWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUd4QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLGtDQUFrQyxHQUNuQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsb0JBQW9CLEVBQ3BCLGVBQWUsR0FDaEIsTUFBTSxrQkFBa0IsQ0FBQztBQWdEMUI7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUt2QyxPQUF5QyxFQUNmLEVBQUU7SUFDNUIsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLHdCQUF3QixDQUFDO0lBQ3ZFLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUywyQkFBMkIsQ0FBQztJQUM3RSxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXBELE9BQU87UUFDTCxlQUFlLEVBQUUsdUJBQXVCLENBQUk7WUFDMUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLFNBQVMsbUJBQW1CO1lBQy9DLFdBQVcsRUFBRSxPQUFPLENBQUMsa0JBQWtCO1lBQ3ZDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNsQyxjQUFjLEVBQUUsT0FBTyxDQUFDLHFCQUFxQjtTQUM5QyxDQUFDO1FBQ0YsbUJBQW1CLEVBQUU7WUFDbkIsRUFBRSxFQUFFLGlCQUFpQjtZQUNyQixXQUFXLEVBQUUsT0FBTyxDQUFDLGlCQUFpQjtZQUN0QyxJQUFJLEVBQUUsVUFBVTtZQUNoQixRQUFRLEVBQUUsT0FBTztZQUNqQixLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNqQixvQkFBb0IsQ0FDbEIsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxPQUFPLENBQUMsWUFBWSxFQUNwQixPQUFPLENBQUMsTUFBTSxFQUNkLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQzlCO1NBQ0o7UUFDRCxzQkFBc0IsRUFBRTtZQUN0QixFQUFFLEVBQUUsb0JBQW9CO1lBQ3hCLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxZQUFZLHdDQUF3QztZQUM1RSxJQUFJLEVBQUUsVUFBVTtZQUNoQixRQUFRLEVBQUUsT0FBTztZQUNqQixLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNqQixNQUFNLENBQUMsT0FBTyxDQUNaLDRCQUE0QixDQUMxQixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLE9BQU8sQ0FBQyxZQUFZLEVBQ3BCLFdBQVcsRUFDWCxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUM5QixDQUNGO1NBQ0o7UUFDRCwwQkFBMEIsRUFBRSxrQ0FBa0MsQ0FBSTtZQUNoRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDNUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1lBQ2xDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtTQUNuQyxDQUFDO1FBQ0YscUJBQXFCLEVBQUUsNkJBQTZCLENBQUk7WUFDdEQsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1lBQzVCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNsQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7U0FDbkMsQ0FBQztLQUNILENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FDbEMsS0FBK0IsRUFDQyxFQUFFLENBQUM7SUFDbkMsS0FBSyxDQUFDLGVBQWU7SUFDckIsS0FBSyxDQUFDLG1CQUFtQjtJQUN6QixLQUFLLENBQUMsc0JBQXNCO0lBQzVCLEtBQUssQ0FBQywwQkFBMEI7SUFDaEMsS0FBSyxDQUFDLHFCQUFxQjtDQUM1QixDQUFDIn0=
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUtcnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3NoYXJlZC9lbnZlbG9wZS1ydWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFJeEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEUsT0FBTyxFQUNMLDZCQUE2QixFQUM3QixrQ0FBa0MsR0FDbkMsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLG9CQUFvQixFQUNwQixlQUFlLEdBQ2hCLE1BQU0sa0JBQWtCLENBQUM7QUEwRDFCOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxPQUF5QyxFQUNmLEVBQUU7SUFDNUIsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLHdCQUF3QixDQUFDO0lBQ3ZFLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUywyQkFBMkIsQ0FBQztJQUM3RSxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDaEMsTUFBTSxZQUFZLEdBQ2hCLE9BQU8sS0FBSyxTQUFTO1FBQ25CLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWTtRQUN0QixDQUFDLENBQUMsQ0FBQyxPQUFVLEVBQVcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU5RixPQUFPO1FBQ0wsZUFBZSxFQUFFLHVCQUF1QixDQUFJO1lBQzFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxTQUFTLG1CQUFtQjtZQUMvQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGtCQUFrQjtZQUN2QyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7WUFDbEMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxxQkFBcUI7WUFDN0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6RSxHQUFHLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO1NBQzlDLENBQUM7UUFDRixtQkFBbUIsRUFBRTtZQUNuQixFQUFFLEVBQUUsaUJBQWlCO1lBQ3JCLFdBQVcsRUFBRSxPQUFPLENBQUMsaUJBQWlCO1lBQ3RDLElBQUksRUFBRSxVQUFVO1lBQ2hCLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ2pCLG9CQUFvQixDQUNsQixpQkFBaUIsRUFDakIsT0FBTyxFQUNQLE9BQU8sQ0FBQyxZQUFZLEVBQ3BCLE9BQU8sQ0FBQyxNQUFNLEVBQ2QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUN0QjtTQUNKO1FBQ0Qsc0JBQXNCLEVBQUU7WUFDdEIsRUFBRSxFQUFFLG9CQUFvQjtZQUN4QixXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsWUFBWSx3Q0FBd0M7WUFDNUUsSUFBSSxFQUFFLFVBQVU7WUFDaEIsUUFBUSxFQUFFLE9BQU87WUFDakIsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDakIsTUFBTSxDQUFDLE9BQU8sQ0FDWiw0QkFBNEIsQ0FDMUIsb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxPQUFPLENBQUMsWUFBWSxFQUNwQixXQUFXLEVBQ1gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUN0QixDQUNGO1NBQ0o7UUFDRCwwQkFBMEIsRUFBRSxrQ0FBa0MsQ0FBSTtZQUNoRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDNUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1lBQ2xDLFlBQVk7U0FDYixDQUFDO1FBQ0YscUJBQXFCLEVBQUUsNkJBQTZCLENBQUk7WUFDdEQsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1lBQzVCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNsQyxZQUFZO1NBQ2IsQ0FBQztLQUNILENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FDbEMsS0FBK0IsRUFDQyxFQUFFLENBQUM7SUFDbkMsS0FBSyxDQUFDLGVBQWU7SUFDckIsS0FBSyxDQUFDLG1CQUFtQjtJQUN6QixLQUFLLENBQUMsc0JBQXNCO0lBQzVCLEtBQUssQ0FBQywwQkFBMEI7SUFDaEMsS0FBSyxDQUFDLHFCQUFxQjtDQUM1QixDQUFDIn0=
@@ -3,11 +3,10 @@
3
3
  *
4
4
  * @experimental This API is unstable and may change without notice.
5
5
  */
6
- import * as Effect from "effect/Effect";
6
+ import type { ExtensionFileAccessor } from "../../context.js";
7
7
  import type { AdvisoryRule, Severity } from "../../rule.js";
8
- interface ManifestFileAccessor {
9
- readonly exists: (path: string) => Effect.Effect<boolean>;
10
- }
8
+ /** A manifest presence check only needs the accessor's `exists`. */
9
+ type ManifestFileAccessor = Pick<ExtensionFileAccessor, "exists">;
11
10
  interface ManifestPresentRuleContext {
12
11
  readonly files: ManifestFileAccessor;
13
12
  }
@@ -17,16 +17,18 @@
17
17
  * @packageDocumentation
18
18
  */
19
19
  import * as Effect from "effect/Effect";
20
+ import * as Predicate from "effect/Predicate";
20
21
  import { splitExtensionReference } from "@agentxm/extension-model/unstable/extensions/common";
21
22
  import { isManifestJsonParseFailure } from "./manifest-json.js";
22
- const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
23
23
  /**
24
24
  * Narrow a caller-decoded manifest value to a plain record, or `undefined`
25
25
  * when there is nothing for these rules to read. Absent manifests are the
26
26
  * `-present` rule's problem; unparseable ones are the `-schema-valid` rule's.
27
27
  */
28
28
  const manifestRecord = (input) => {
29
- if (input === undefined || isManifestJsonParseFailure(input) || !isRecord(input)) {
29
+ if (input === undefined ||
30
+ isManifestJsonParseFailure(input) ||
31
+ !Predicate.isReadonlyObject(input)) {
30
32
  return undefined;
31
33
  }
32
34
  return input;
@@ -121,4 +123,4 @@ export const makeRecommendedPacksValidRule = (options) => {
121
123
  },
122
124
  };
123
125
  };
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb21tZW5kZWQtcGFja3MtcnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3NoYXJlZC9yZWNvbW1lbmRlZC1wYWNrcy1ydWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUU5RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQWdCaEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFjLEVBQThDLEVBQUUsQ0FDOUUsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRXZFOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWMsRUFBaUQsRUFBRTtJQUN2RixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqRixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWMsRUFBeUIsRUFBRSxDQUM5RCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVsRyxnRkFBZ0Y7QUFDaEYsMkNBQTJDO0FBQzNDLGdGQUFnRjtBQUVo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
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb21tZW5kZWQtcGFja3MtcnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3NoYXJlZC9yZWNvbW1lbmRlZC1wYWNrcy1ydWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEtBQUssU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRTlGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBZ0JoRTs7OztHQUlHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFjLEVBQWlELEVBQUU7SUFDdkYsSUFDRSxLQUFLLEtBQUssU0FBUztRQUNuQiwwQkFBMEIsQ0FBQyxLQUFLLENBQUM7UUFDakMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQ2xDLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWMsRUFBeUIsRUFBRSxDQUM5RCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVsRyxnRkFBZ0Y7QUFDaEYsMkNBQTJDO0FBQzNDLGdGQUFnRjtBQUVoRjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxDQUNoRCxPQUF1QyxFQUN0QixFQUFFO0lBQ25CLE1BQU0sTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsK0JBQStCLENBQUM7SUFDbkUsT0FBTztRQUNMLEVBQUUsRUFBRSxNQUFNO1FBQ1YsV0FBVyxFQUFFLGlFQUFpRTtRQUM5RSxJQUFJLEVBQUUsVUFBVTtRQUNoQixRQUFRLEVBQUUsU0FBUztRQUNuQixLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNqQixNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQy9ELElBQUksUUFBUSxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQy9ELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQ0QsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUNwQjtvQkFDRSxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsTUFBTTtvQkFDTixRQUFRLEVBQUUsU0FBUztvQkFDbkIsT0FBTyxFQUNMLHFKQUFxSjt3QkFDckosMkhBQTJILE9BQU8sQ0FBQyxZQUFZLE1BQU07d0JBQ3JKLCtFQUErRSxPQUFPLENBQUMsWUFBWSxLQUFLO29CQUMxRyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRTtpQkFDZjthQUM1QixDQUFDLENBQUM7UUFDTCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGdGQUFnRjtBQUNoRixzQ0FBc0M7QUFDdEMsZ0ZBQWdGO0FBRWhGOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQzNDLE9BQXVDLEVBQ3RCLEVBQUU7SUFDbkIsTUFBTSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsU0FBUywwQkFBMEIsQ0FBQztJQUM5RCxPQUFPO1FBQ0wsRUFBRSxFQUFFLE1BQU07UUFDVixXQUFXLEVBQUUsbUVBQW1FO1FBQ2hGLElBQUksRUFBRSxVQUFVO1FBQ2hCLFFBQVEsRUFBRSxTQUFTO1FBQ25CLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pCLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDL0QsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQTJCLEVBQUUsQ0FBQztZQUM1QyxLQUFLLE1BQU0sS0FBSyxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3hCLFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNaLElBQUksRUFBRSxVQUFVO29CQUNoQixNQUFNO29CQUNOLFFBQVEsRUFBRSxTQUFTO29CQUNuQixPQUFPLEVBQ0wsK0JBQStCLEtBQUssbUdBQW1HO3dCQUN2SSw0Q0FBNEMsR0FBRyxxQ0FBcUMsT0FBTyxDQUFDLFlBQVksS0FBSztvQkFDL0csUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxZQUFZLEVBQUU7aUJBQ3pDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDLENBQUMifQ==
@@ -15,6 +15,7 @@
15
15
  import * as Effect from "effect/Effect";
16
16
  import * as Result from "effect/Result";
17
17
  import * as Schema from "effect/Schema";
18
+ import * as Predicate from "effect/Predicate";
18
19
  import { describeSchemaDocument } from "../../describe-document.js";
19
20
  import { issuesToFindings } from "../../issues-to-findings.js";
20
21
  import { isManifestJsonParseFailure, manifestJsonParseFailureToFinding } from "./manifest-json.js";
@@ -79,7 +80,7 @@ export const enumerateUnknownTopLevelKeys = (ruleId, severity, file, allowedKeys
79
80
  if (isManifestJsonParseFailure(input)) {
80
81
  return [];
81
82
  }
82
- if (!isPlainRecord(input)) {
83
+ if (!Predicate.isReadonlyObject(input)) {
83
84
  return [];
84
85
  }
85
86
  const findings = [];
@@ -98,5 +99,4 @@ export const enumerateUnknownTopLevelKeys = (ruleId, severity, file, allowedKeys
98
99
  }
99
100
  return findings;
100
101
  };
101
- const isPlainRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3NoYXJlZC9zY2hlbWEtcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLGlDQUFpQyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbkcsZ0ZBQWdGO0FBQ2hGLHVCQUF1QjtBQUN2QixnRkFBZ0Y7QUFFaEY7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUNsQyxNQUFjLEVBQ2QsUUFBa0IsRUFDbEIsSUFBWSxFQUNaLE1BQTBCLEVBQzFCLEtBQWMsRUFDaUMsRUFBRTtJQUNqRCxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN0QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUU7UUFDdkQsZ0JBQWdCLEVBQUUsUUFBUTtRQUMxQixNQUFNLEVBQUUsS0FBSztLQUNkLENBQUMsQ0FBQztJQUNILElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN4RixDQUFDLENBQUM7QUFFRixnRkFBZ0Y7QUFDaEYsK0JBQStCO0FBQy9CLGdGQUFnRjtBQUVoRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BRS9CLEVBQXVCLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRS9EOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxDQUMxQyxNQUFjLEVBQ2QsUUFBa0IsRUFDbEIsSUFBWSxFQUNaLFdBQWdDLEVBQ2hDLEtBQWMsRUFDa0IsRUFBRTtJQUNsQyxJQUFJLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE1BQU0sUUFBUSxHQUEyQixFQUFFLENBQUM7SUFDNUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckMsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsU0FBUztRQUNYLENBQUM7UUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ1osSUFBSSxFQUFFLFVBQVU7WUFDaEIsTUFBTTtZQUNOLFFBQVE7WUFDUixPQUFPLEVBQ0wsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEdBQUcsS0FBSztnQkFDN0UsbURBQW1EO1lBQ3JELFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRTtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFjLEVBQThDLEVBQUUsQ0FDbkYsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDIn0=
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3NoYXJlZC9zY2hlbWEtcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRyxnRkFBZ0Y7QUFDaEYsdUJBQXVCO0FBQ3ZCLGdGQUFnRjtBQUVoRjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQ2xDLE1BQWMsRUFDZCxRQUFrQixFQUNsQixJQUFZLEVBQ1osTUFBMEIsRUFDMUIsS0FBYyxFQUNpQyxFQUFFO0lBQ2pELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlDQUFpQyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRTtRQUN2RCxnQkFBZ0IsRUFBRSxRQUFRO1FBQzFCLE1BQU0sRUFBRSxLQUFLO0tBQ2QsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLENBQUMsQ0FBQztBQUVGLGdGQUFnRjtBQUNoRiwrQkFBK0I7QUFDL0IsZ0ZBQWdGO0FBRWhGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsTUFFL0IsRUFBdUIsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFL0Q7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQzFDLE1BQWMsRUFDZCxRQUFrQixFQUNsQixJQUFZLEVBQ1osV0FBZ0MsRUFDaEMsS0FBYyxFQUNrQixFQUFFO0lBQ2xDLElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQTJCLEVBQUUsQ0FBQztJQUM1QyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixTQUFTO1FBQ1gsQ0FBQztRQUNELFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDWixJQUFJLEVBQUUsVUFBVTtZQUNoQixNQUFNO1lBQ04sUUFBUTtZQUNSLE9BQU8sRUFDTCxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxzQ0FBc0MsR0FBRyxLQUFLO2dCQUM3RSxtREFBbUQ7WUFDckQsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDLENBQUMifQ==
@@ -12,10 +12,10 @@
12
12
  * once per skill, so rules don't re-read + re-parse).
13
13
  * - `displayRoot` — posix-relative root used by the renderer; the caller
14
14
  * picks per provenance (see the table below).
15
- * - `files` — the pre-bound content-root `SkillFileAccessor` (rooted at the
15
+ * - `files` — the pre-bound content-root `ExtensionFileAccessor` (rooted at the
16
16
  * directory containing `SKILL.md`). The caller chooses VFT or
17
17
  * platform-backed.
18
- * - `packageFiles` — the pre-bound package-root `SkillFileAccessor` (rooted
18
+ * - `packageFiles` — the pre-bound package-root `ExtensionFileAccessor` (rooted
19
19
  * at the directory containing `skill.json` for native skills). For
20
20
  * non-native skills, callers MAY alias `files`.
21
21
  *
@@ -30,7 +30,7 @@
30
30
  * @experimental This API is unstable and may change without notice.
31
31
  * @packageDocumentation
32
32
  */
33
- import type { SkillFileAccessor, SkillRuleContext } from "../../context.js";
33
+ import type { ExtensionFileAccessor, SkillRuleContext } from "../../context.js";
34
34
  /**
35
35
  * Minimal structural shape `buildSkillRuleContexts` needs per installed
36
36
  * skill. The full lint workspace view exposes
@@ -43,8 +43,8 @@ export interface InstalledSkillInfo {
43
43
  readonly skillJson: unknown;
44
44
  readonly expectedName?: string;
45
45
  readonly displayRoot: string;
46
- readonly files: SkillFileAccessor;
47
- readonly packageFiles: SkillFileAccessor;
46
+ readonly files: ExtensionFileAccessor;
47
+ readonly packageFiles: ExtensionFileAccessor;
48
48
  }
49
49
  /**
50
50
  * Project an input's `installedSkills` into `SkillRuleContext`s with their
@@ -12,10 +12,10 @@
12
12
  * once per skill, so rules don't re-read + re-parse).
13
13
  * - `displayRoot` — posix-relative root used by the renderer; the caller
14
14
  * picks per provenance (see the table below).
15
- * - `files` — the pre-bound content-root `SkillFileAccessor` (rooted at the
15
+ * - `files` — the pre-bound content-root `ExtensionFileAccessor` (rooted at the
16
16
  * directory containing `SKILL.md`). The caller chooses VFT or
17
17
  * platform-backed.
18
- * - `packageFiles` — the pre-bound package-root `SkillFileAccessor` (rooted
18
+ * - `packageFiles` — the pre-bound package-root `ExtensionFileAccessor` (rooted
19
19
  * at the directory containing `skill.json` for native skills). For
20
20
  * non-native skills, callers MAY alias `files`.
21
21
  *
@@ -52,4 +52,4 @@ export const buildSkillRuleContexts = (input) => input.installedSkills.map((info
52
52
  packageFiles: info.packageFiles,
53
53
  displayRoot: info.displayRoot,
54
54
  }));
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3NraWxsLWFjY2Vzc29yL2NvbnRleHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBd0JILGdGQUFnRjtBQUNoRix5QkFBeUI7QUFDekIsZ0ZBQWdGO0FBRWhGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUV0QyxFQUFtQyxFQUFFLENBQ3BDLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFvQixFQUFFLENBQUMsQ0FBQztJQUNyRCxPQUFPLEVBQUU7UUFDUCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7UUFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1FBQ3pCLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDaEY7SUFDRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7SUFDakIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO0lBQy9CLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztDQUM5QixDQUFDLENBQUMsQ0FBQyJ9
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3NraWxsL2NvbnRleHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBd0JILGdGQUFnRjtBQUNoRix5QkFBeUI7QUFDekIsZ0ZBQWdGO0FBRWhGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUV0QyxFQUFtQyxFQUFFLENBQ3BDLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFvQixFQUFFLENBQUMsQ0FBQztJQUNyRCxPQUFPLEVBQUU7UUFDUCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7UUFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1FBQ3pCLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDaEY7SUFDRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7SUFDakIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO0lBQy9CLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztDQUM5QixDQUFDLENBQUMsQ0FBQyJ9
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `skill/*` manifest envelope — see `../shared/envelope-rules.ts`.
3
+ *
4
+ * `skill.json` sits at the package root, which for native skills is the
5
+ * parent of the `src/` content root, so the envelope reads it through
6
+ * `context.packageFiles`. Non-native (managed external) skills carry no
7
+ * manifest; every envelope rule produces no findings for them.
8
+ */
9
+ import type { SkillRuleContext } from "../../context.js";
10
+ export declare const skillEnvelopeRules: import("../shared/envelope-rules.js").ManifestEnvelopeRules<SkillRuleContext>;
11
+ //# sourceMappingURL=envelope.d.ts.map
@@ -0,0 +1,23 @@
1
+ /**
2
+ * `skill/*` manifest envelope — see `../shared/envelope-rules.ts`.
3
+ *
4
+ * `skill.json` sits at the package root, which for native skills is the
5
+ * parent of the `src/` content root, so the envelope reads it through
6
+ * `context.packageFiles`. Non-native (managed external) skills carry no
7
+ * manifest; every envelope rule produces no findings for them.
8
+ */
9
+ import { SkillManifestSchema } from "@agentxm/extension-model/unstable/skills/manifest-schema";
10
+ import { makeManifestEnvelopeRules } from "../shared/envelope-rules.js";
11
+ import { manifestFilenameForType } from "@agentxm/extension-model/unstable/extensions/common";
12
+ export const skillEnvelopeRules = makeManifestEnvelopeRules({
13
+ namespace: "skill",
14
+ manifestFile: manifestFilenameForType("skill"),
15
+ schema: SkillManifestSchema,
16
+ manifestJson: (context) => context.subject.skillJson,
17
+ presentDescription: "Native skills include a root skill.json manifest.",
18
+ presentMissingMessage: "This AXM skill package is missing its required skill.json manifest. Restore the package manifest before managing it.",
19
+ schemaDescription: "skill.json defines a valid skill manifest.",
20
+ getFiles: (context) => context.packageFiles,
21
+ applies: (context) => context.subject.isNative,
22
+ });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3NraWxsL2VudmVsb3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUUvRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUU5RixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx5QkFBeUIsQ0FBQztJQUMxRCxTQUFTLEVBQUUsT0FBTztJQUNsQixZQUFZLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxDQUFDO0lBQzlDLE1BQU0sRUFBRSxtQkFBbUI7SUFDM0IsWUFBWSxFQUFFLENBQUMsT0FBeUIsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTO0lBQ3RFLGtCQUFrQixFQUFFLG1EQUFtRDtJQUN2RSxxQkFBcUIsRUFDbkIsc0hBQXNIO0lBQ3hILGlCQUFpQixFQUFFLDRDQUE0QztJQUMvRCxRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZO0lBQzNDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRO0NBQy9DLENBQUMsQ0FBQyJ9