@agentxm/extension-content 0.49.3 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/content/frontmatter.d.ts +16 -0
- package/dist/src/content/frontmatter.js +6 -4
- package/dist/src/content/skill-content.d.ts +13 -14
- package/dist/src/content/skill-content.js +8 -46
- package/dist/src/content/subagent-content.js +14 -10
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.js +3 -3
- package/dist/src/knowledge/index.d.ts +1 -1
- package/dist/src/knowledge/index.js +2 -2
- package/dist/src/knowledge/okf.d.ts +52 -1
- package/dist/src/knowledge/okf.js +86 -59
- package/dist/src/knowledge/package-inspection.d.ts +4 -7
- package/dist/src/knowledge/package-inspection.js +7 -19
- package/dist/src/lint/accessor/platform.d.ts +54 -0
- package/dist/src/lint/accessor/platform.js +89 -0
- package/dist/src/lint/{catalog/pack-accessor → accessor}/vft.d.ts +12 -14
- package/dist/src/lint/accessor/vft.js +83 -0
- package/dist/src/lint/catalog/hook/entrypoint-exists.d.ts +2 -2
- package/dist/src/lint/catalog/hook/entrypoint-exists.js +4 -3
- package/dist/src/lint/catalog/hook/envelope.d.ts +6 -6
- package/dist/src/lint/catalog/hook/envelope.js +5 -4
- package/dist/src/lint/catalog/hook/native-bindings-supported.d.ts +2 -2
- package/dist/src/lint/catalog/hook/native-bindings-supported.js +4 -3
- package/dist/src/lint/catalog/hook.d.ts +2 -2
- package/dist/src/lint/catalog/hook.js +1 -1
- package/dist/src/lint/catalog/knowledge/diagnostics.js +4 -3
- package/dist/src/lint/catalog/knowledge/envelope.d.ts +1 -1
- package/dist/src/lint/catalog/knowledge/envelope.js +4 -3
- package/dist/src/lint/catalog/mcp-server/envelope.d.ts +2 -2
- package/dist/src/lint/catalog/mcp-server/envelope.js +4 -3
- package/dist/src/lint/catalog/mcp-server.d.ts +2 -2
- package/dist/src/lint/catalog/{pack-accessor → pack}/contexts.d.ts +6 -6
- package/dist/src/lint/catalog/{pack-accessor → pack}/contexts.js +4 -4
- package/dist/src/lint/catalog/pack/envelope.d.ts +10 -0
- package/dist/src/lint/catalog/pack/envelope.js +20 -0
- package/dist/src/lint/catalog/pack.d.ts +9 -10
- package/dist/src/lint/catalog/pack.js +12 -15
- package/dist/src/lint/catalog/rule/envelope.d.ts +2 -2
- package/dist/src/lint/catalog/rule/envelope.js +4 -3
- package/dist/src/lint/catalog/rule.d.ts +2 -2
- package/dist/src/lint/catalog/shared/envelope-rules.d.ts +23 -12
- package/dist/src/lint/catalog/shared/envelope-rules.js +22 -13
- package/dist/src/lint/catalog/shared/manifest-present.d.ts +3 -4
- package/dist/src/lint/catalog/shared/recommended-packs-rules.js +5 -3
- package/dist/src/lint/catalog/shared/schema-rule.js +3 -3
- package/dist/src/lint/catalog/{skill-accessor → skill}/contexts.d.ts +5 -5
- package/dist/src/lint/catalog/{skill-accessor → skill}/contexts.js +3 -3
- package/dist/src/lint/catalog/skill/envelope.d.ts +11 -0
- package/dist/src/lint/catalog/skill/envelope.js +23 -0
- package/dist/src/lint/catalog/skill/frontmatter-parseable.d.ts +6 -4
- package/dist/src/lint/catalog/skill/frontmatter-parseable.js +17 -21
- package/dist/src/lint/catalog/skill/frontmatter-standard-valid.js +7 -12
- package/dist/src/lint/catalog/skill.d.ts +4 -5
- package/dist/src/lint/catalog/skill.js +11 -16
- package/dist/src/lint/catalog/subagent/envelope.d.ts +2 -2
- package/dist/src/lint/catalog/subagent/envelope.js +4 -3
- package/dist/src/lint/catalog/subagent.d.ts +2 -2
- package/dist/src/lint/context.d.ts +39 -115
- package/dist/src/lint/describe-document.d.ts +1 -1
- package/dist/src/lint/describe-document.js +4 -5
- package/dist/src/lint/index.d.ts +5 -7
- package/dist/src/lint/index.js +5 -7
- package/dist/src/packaging/archive-guardrails.d.ts +11 -0
- package/dist/src/packaging/archive-guardrails.js +111 -74
- package/dist/src/packaging/filtered-package-validation.js +3 -4
- package/dist/src/packaging/manifest-file.d.ts +7 -3
- package/dist/src/packaging/manifest-file.js +10 -11
- package/dist/src/packaging/manifest-policy.d.ts +0 -12
- package/dist/src/packaging/manifest-policy.js +12 -26
- package/dist/src/packaging/test-zip-helpers.js +4 -3
- package/package.json +8 -4
- package/dist/src/lint/catalog/pack/manifest-keys-recognized.d.ts +0 -28
- package/dist/src/lint/catalog/pack/manifest-keys-recognized.js +0 -38
- package/dist/src/lint/catalog/pack/manifest-present.d.ts +0 -17
- package/dist/src/lint/catalog/pack/manifest-present.js +0 -24
- package/dist/src/lint/catalog/pack/manifest-schema-valid.d.ts +0 -25
- package/dist/src/lint/catalog/pack/manifest-schema-valid.js +0 -33
- package/dist/src/lint/catalog/pack-accessor/platform.d.ts +0 -56
- package/dist/src/lint/catalog/pack-accessor/platform.js +0 -93
- package/dist/src/lint/catalog/pack-accessor/vft.js +0 -85
- package/dist/src/lint/catalog/skill/manifest-keys-recognized.d.ts +0 -26
- package/dist/src/lint/catalog/skill/manifest-keys-recognized.js +0 -41
- package/dist/src/lint/catalog/skill/manifest-present.d.ts +0 -23
- package/dist/src/lint/catalog/skill/manifest-present.js +0 -32
- package/dist/src/lint/catalog/skill/manifest-schema-valid.d.ts +0 -21
- package/dist/src/lint/catalog/skill/manifest-schema-valid.js +0 -36
- package/dist/src/lint/catalog/skill/recommended-packs-valid.d.ts +0 -8
- package/dist/src/lint/catalog/skill/recommended-packs-valid.js +0 -12
- package/dist/src/lint/catalog/skill/standalone-declaration-valid.d.ts +0 -8
- package/dist/src/lint/catalog/skill/standalone-declaration-valid.js +0 -12
- package/dist/src/lint/catalog/skill-accessor/platform.d.ts +0 -53
- package/dist/src/lint/catalog/skill-accessor/platform.js +0 -90
- package/dist/src/lint/catalog/skill-accessor/vft.d.ts +0 -77
- package/dist/src/lint/catalog/skill-accessor/vft.js +0 -135
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `buildPackRuleContexts` — build
|
|
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 `
|
|
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 {
|
|
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:
|
|
37
|
+
readonly files: ExtensionFileAccessor;
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
|
-
* Project an input's `installedPacks` into
|
|
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<
|
|
50
|
+
}) => ReadonlyArray<ManifestRuleContext<PackContent>>;
|
|
51
51
|
//# sourceMappingURL=contexts.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `buildPackRuleContexts` — build
|
|
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 `
|
|
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
|
|
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,
|
|
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
|
|
2
|
+
* `pack/*` rule catalog.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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 {
|
|
21
|
+
import type { ManifestRuleContext, PackContent } from "../context.js";
|
|
23
22
|
/**
|
|
24
|
-
* Ordered
|
|
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<
|
|
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
|
|
2
|
+
* `pack/*` rule catalog.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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 {
|
|
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
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
packEnvelopeRules.manifestPresent,
|
|
30
|
+
packEnvelopeRules.manifestSchemaValid,
|
|
31
|
+
packEnvelopeRules.manifestKeysRecognized,
|
|
35
32
|
];
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
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 {
|
|
5
|
-
export declare const ruleEnvelopeRules: import("../shared/envelope-rules.js").ManifestEnvelopeRules<
|
|
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
|
|
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:
|
|
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,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3J1bGUvZW52ZWxvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUU3RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUU5RixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyx5QkFBeUIsQ0FBQztJQUN6RCxTQUFTLEVBQUUsTUFBTTtJQUNqQixZQUFZLEVBQUUsdUJBQXVCLENBQUMsTUFBTSxDQUFDO0lBQzdDLE1BQU0sRUFBRSxrQkFBa0I7SUFDMUIsWUFBWSxFQUFFLENBQUMsT0FBeUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRO0lBQ3JGLGtCQUFrQixFQUFFLDBDQUEwQztJQUM5RCxxQkFBcUIsRUFDbkIsZ0hBQWdIO0lBQ2xILGlCQUFpQixFQUFFLDBDQUEwQztDQUM5RCxDQUFDLENBQUMifQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ManifestRuleContext, RuleContent } from "../context.js";
|
|
2
2
|
import type { LintRule } from "../rule.js";
|
|
3
|
-
export declare const ruleRules: ReadonlyArray<LintRule<
|
|
3
|
+
export declare const ruleRules: ReadonlyArray<LintRule<ManifestRuleContext<RuleContent>>>;
|
|
4
4
|
//# sourceMappingURL=rule.d.ts.map
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
2
|
+
* The manifest envelope every per-extension catalog builds from.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
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
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* `
|
|
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
|
|
2
|
+
* The manifest envelope every per-extension catalog builds from.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
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
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* `
|
|
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,
|
|
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,
|
|
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
|
|
72
|
+
manifestJson,
|
|
64
73
|
}),
|
|
65
74
|
recommendedPacksValid: makeRecommendedPacksValidRule({
|
|
66
75
|
namespace: options.namespace,
|
|
67
76
|
manifestFile: options.manifestFile,
|
|
68
|
-
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,
|
|
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
|
|
6
|
+
import type { ExtensionFileAccessor } from "../../context.js";
|
|
7
7
|
import type { AdvisoryRule, Severity } from "../../rule.js";
|
|
8
|
-
|
|
9
|
-
|
|
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 ||
|
|
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,
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb21tZW5kZWQtcGFja3MtcnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGludC9jYXRhbG9nL3NoYXJlZC9yZWNvbW1lbmRlZC1wYWNrcy1ydWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEtBQUssU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRTlGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBZ0JoRTs7OztHQUlHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFjLEVBQWlELEVBQUU7SUFDdkYsSUFDRSxLQUFLLEtBQUssU0FBUztRQUNuQiwwQkFBMEIsQ0FBQyxLQUFLLENBQUM7UUFDakMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQ2xDLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWMsRUFBeUIsRUFBRSxDQUM5RCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVsRyxnRkFBZ0Y7QUFDaEYsMkNBQTJDO0FBQzNDLGdGQUFnRjtBQUVoRjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxDQUNoRCxPQUF1QyxFQUN0QixFQUFFO0lBQ25CLE1BQU0s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
|
|
@@ -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 (!
|
|
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
|
-
|
|
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 `
|
|
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 `
|
|
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 {
|
|
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:
|
|
47
|
-
readonly packageFiles:
|
|
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 `
|
|
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 `
|
|
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,
|
|
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
|