@vibe-agent-toolkit/agent-skills 0.1.41-rc.7 → 0.1.41
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/content-type-routing.d.ts +18 -1
- package/dist/content-type-routing.d.ts.map +1 -1
- package/dist/content-type-routing.js +17 -0
- package/dist/content-type-routing.js.map +1 -1
- package/dist/evidence/build-evidence.d.ts +38 -0
- package/dist/evidence/build-evidence.d.ts.map +1 -0
- package/dist/evidence/build-evidence.js +60 -0
- package/dist/evidence/build-evidence.js.map +1 -0
- package/dist/evidence/index.d.ts +1 -0
- package/dist/evidence/index.d.ts.map +1 -1
- package/dist/evidence/index.js +1 -0
- package/dist/evidence/index.js.map +1 -1
- package/dist/files-config.d.ts +225 -31
- package/dist/files-config.d.ts.map +1 -1
- package/dist/files-config.js +445 -123
- package/dist/files-config.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/post-build-checks.d.ts +10 -1
- package/dist/post-build-checks.d.ts.map +1 -1
- package/dist/post-build-checks.js +55 -6
- package/dist/post-build-checks.js.map +1 -1
- package/dist/schemas/index.d.ts +3 -2
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +2 -2
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/installed-plugins-registry.d.ts +137 -63
- package/dist/schemas/installed-plugins-registry.d.ts.map +1 -1
- package/dist/schemas/installed-plugins-registry.js +94 -6
- package/dist/schemas/installed-plugins-registry.js.map +1 -1
- package/dist/schemas/known-marketplaces-registry.d.ts +165 -100
- package/dist/schemas/known-marketplaces-registry.d.ts.map +1 -1
- package/dist/schemas/known-marketplaces-registry.js +108 -21
- package/dist/schemas/known-marketplaces-registry.js.map +1 -1
- package/dist/schemas/registry-drift.d.ts +53 -0
- package/dist/schemas/registry-drift.d.ts.map +1 -0
- package/dist/schemas/registry-drift.js +50 -0
- package/dist/schemas/registry-drift.js.map +1 -0
- package/dist/skill-packager.d.ts +75 -5
- package/dist/skill-packager.d.ts.map +1 -1
- package/dist/skill-packager.js +304 -50
- package/dist/skill-packager.js.map +1 -1
- package/dist/skill-source/git-clone.d.ts.map +1 -1
- package/dist/skill-source/git-clone.js +32 -11
- package/dist/skill-source/git-clone.js.map +1 -1
- package/dist/skill-test/eval-inputs.js +2 -2
- package/dist/skill-test/eval-inputs.js.map +1 -1
- package/dist/skill-test/eval-lint.js +2 -2
- package/dist/skill-test/eval-lint.js.map +1 -1
- package/dist/skill-test/grader-prompt.js +2 -2
- package/dist/skill-test/grader-prompt.js.map +1 -1
- package/dist/test-input.d.ts +59 -24
- package/dist/test-input.d.ts.map +1 -1
- package/dist/test-input.js +77 -16
- package/dist/test-input.js.map +1 -1
- package/dist/validators/agent-instruction-presence.d.ts +41 -0
- package/dist/validators/agent-instruction-presence.d.ts.map +1 -0
- package/dist/validators/agent-instruction-presence.js +79 -0
- package/dist/validators/agent-instruction-presence.js.map +1 -0
- package/dist/validators/bundled-resource-link-detection.d.ts +20 -3
- package/dist/validators/bundled-resource-link-detection.d.ts.map +1 -1
- package/dist/validators/bundled-resource-link-detection.js +78 -34
- package/dist/validators/bundled-resource-link-detection.js.map +1 -1
- package/dist/validators/compat-detectors.d.ts +9 -4
- package/dist/validators/compat-detectors.d.ts.map +1 -1
- package/dist/validators/compat-detectors.js +18 -30
- package/dist/validators/compat-detectors.js.map +1 -1
- package/dist/validators/index.d.ts +1 -0
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +1 -0
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/packaging-validator.d.ts +68 -10
- package/dist/validators/packaging-validator.d.ts.map +1 -1
- package/dist/validators/packaging-validator.js +51 -10
- package/dist/validators/packaging-validator.js.map +1 -1
- package/dist/validators/registry-validator.d.ts.map +1 -1
- package/dist/validators/registry-validator.js +28 -7
- package/dist/validators/registry-validator.js.map +1 -1
- package/dist/validators/rule-engine/rule-context.d.ts +4 -2
- package/dist/validators/rule-engine/rule-context.d.ts.map +1 -1
- package/dist/validators/rule-engine/rule-context.js.map +1 -1
- package/dist/validators/rule-engine/rule-engine.d.ts.map +1 -1
- package/dist/validators/rule-engine/rule-engine.js +15 -3
- package/dist/validators/rule-engine/rule-engine.js.map +1 -1
- package/dist/validators/skill-validator.d.ts.map +1 -1
- package/dist/validators/skill-validator.js +16 -10
- package/dist/validators/skill-validator.js.map +1 -1
- package/dist/validators/source-only-codes.d.ts.map +1 -1
- package/dist/validators/source-only-codes.js +1 -0
- package/dist/validators/source-only-codes.js.map +1 -1
- package/dist/validators/validation-rules.d.ts +135 -17
- package/dist/validators/validation-rules.d.ts.map +1 -1
- package/dist/validators/validation-rules.js +192 -38
- package/dist/validators/validation-rules.js.map +1 -1
- package/dist/validators/walker-to-issues.d.ts.map +1 -1
- package/dist/validators/walker-to-issues.js +20 -7
- package/dist/validators/walker-to-issues.js.map +1 -1
- package/dist/walk-link-graph.d.ts +10 -1
- package/dist/walk-link-graph.d.ts.map +1 -1
- package/dist/walk-link-graph.js +124 -39
- package/dist/walk-link-graph.js.map +1 -1
- package/package.json +5 -5
|
@@ -1,13 +1,42 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
3
|
+
import { isRecord, recordDrift, recordUnknownKeys, } from './registry-drift.js';
|
|
4
|
+
/**
|
|
5
|
+
* `installed_plugins.json` is written and owned by Claude Code — VAT only reads it.
|
|
6
|
+
* Per VAT's Postel's Law rule (CLAUDE.md: "Reading outside world → liberal"), these
|
|
7
|
+
* schemas `.passthrough()` and keep `scope` open: an unrecognized field or install
|
|
8
|
+
* scope is drift in someone else's file, not an error in the user's setup.
|
|
9
|
+
*
|
|
10
|
+
* Modelling it strictly turned every shape Claude Code added — the `project` scope,
|
|
11
|
+
* its `projectPath` companion, the removal of `isLocal` — into a wall of false errors.
|
|
12
|
+
*
|
|
13
|
+
* Liberality alone would be blindness, so it is paired with
|
|
14
|
+
* {@link detectInstalledPluginsRegistryDrift}: what passthrough absorbs still gets
|
|
15
|
+
* reported, at `info`, as `REGISTRY_SHAPE_DRIFT`.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Install scopes VAT's model knows about. Not enforced by the schema — a scope
|
|
19
|
+
* outside this list parses fine and is reported as drift instead.
|
|
20
|
+
*/
|
|
21
|
+
export const KNOWN_INSTALLATION_SCOPES = [
|
|
22
|
+
'user',
|
|
23
|
+
'system',
|
|
24
|
+
'project',
|
|
25
|
+
'local',
|
|
26
|
+
];
|
|
27
|
+
const KNOWN_SCOPE_SET = new Set(KNOWN_INSTALLATION_SCOPES);
|
|
3
28
|
/**
|
|
4
29
|
* Single plugin installation entry
|
|
5
30
|
*/
|
|
6
31
|
const PluginInstallationSchema = z
|
|
7
32
|
.object({
|
|
8
33
|
scope: z
|
|
9
|
-
.
|
|
10
|
-
.describe(
|
|
34
|
+
.string()
|
|
35
|
+
.describe(`Installation scope (recognized: ${KNOWN_INSTALLATION_SCOPES.join(', ')}; others pass through as drift)`),
|
|
36
|
+
projectPath: z
|
|
37
|
+
.string()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe('Absolute path to the project a project-scoped installation belongs to'),
|
|
11
40
|
installPath: z
|
|
12
41
|
.string()
|
|
13
42
|
.describe('Absolute path to installed plugin directory'),
|
|
@@ -28,16 +57,17 @@ const PluginInstallationSchema = z
|
|
|
28
57
|
.describe('Git commit SHA for git-based installations'),
|
|
29
58
|
isLocal: z
|
|
30
59
|
.boolean()
|
|
31
|
-
.
|
|
60
|
+
.optional()
|
|
61
|
+
.describe('Whether plugin is installed locally (not from marketplace). Current Claude Code no longer writes this field.'),
|
|
32
62
|
})
|
|
33
|
-
.
|
|
63
|
+
.passthrough();
|
|
34
64
|
/**
|
|
35
65
|
* Schema for installed_plugins.json registry
|
|
36
66
|
* Tracks all installed plugins with version and path info
|
|
37
67
|
*
|
|
38
68
|
* Format: { "plugin-name@marketplace-name": [installation entries] }
|
|
39
69
|
*
|
|
40
|
-
* A single plugin can have multiple installations (e.g., both user and
|
|
70
|
+
* A single plugin can have multiple installations (e.g., both user and project scope).
|
|
41
71
|
*/
|
|
42
72
|
export const InstalledPluginsRegistrySchema = z
|
|
43
73
|
.object({
|
|
@@ -48,7 +78,65 @@ export const InstalledPluginsRegistrySchema = z
|
|
|
48
78
|
.regex(/^[^@]+@[^@]+$/, 'Key must be in format "plugin@marketplace"'), z.array(PluginInstallationSchema).min(1))
|
|
49
79
|
.describe('Map of plugin@marketplace to installation entries'),
|
|
50
80
|
})
|
|
51
|
-
.
|
|
81
|
+
.passthrough()
|
|
52
82
|
.describe('Installed plugins registry structure');
|
|
53
83
|
export const InstalledPluginsRegistryJsonSchema = zodToJsonSchema(InstalledPluginsRegistrySchema, { name: 'InstalledPluginsRegistry', $refStrategy: 'none' });
|
|
84
|
+
const KNOWN_REGISTRY_KEYS = new Set(['version', 'plugins']);
|
|
85
|
+
const KNOWN_INSTALLATION_KEYS = new Set([
|
|
86
|
+
'scope',
|
|
87
|
+
'projectPath',
|
|
88
|
+
'installPath',
|
|
89
|
+
'version',
|
|
90
|
+
'installedAt',
|
|
91
|
+
'lastUpdated',
|
|
92
|
+
'gitCommitSha',
|
|
93
|
+
'isLocal',
|
|
94
|
+
]);
|
|
95
|
+
/**
|
|
96
|
+
* Collect drift observations for one installation entry.
|
|
97
|
+
*
|
|
98
|
+
* @param entry - Candidate installation entry (may be any shape)
|
|
99
|
+
* @param pointer - Dotted pointer to the entry, e.g. `plugins.foo@bar.0`
|
|
100
|
+
* @param record - Accumulator, keyed by message so N entries sharing one unknown
|
|
101
|
+
* field produce one observation rather than N identical ones
|
|
102
|
+
*/
|
|
103
|
+
function collectEntryDrift(entry, pointer, record) {
|
|
104
|
+
if (!isRecord(entry)) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
recordUnknownKeys(entry, KNOWN_INSTALLATION_KEYS, pointer, (key) => `Installation entries carry unrecognized field '${key}'`, record);
|
|
108
|
+
const scope = entry['scope'];
|
|
109
|
+
if (typeof scope === 'string' && !KNOWN_SCOPE_SET.has(scope)) {
|
|
110
|
+
recordDrift(record, `${pointer}.scope`, `Installation scope '${scope}' is not one of the recognized scopes (${KNOWN_INSTALLATION_SCOPES.join(', ')})`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Report what `.passthrough()` absorbed: fields and scope values in an
|
|
115
|
+
* installed-plugins registry that VAT's model does not recognize.
|
|
116
|
+
*
|
|
117
|
+
* Deduplicated by message — the point is "Claude Code writes something new",
|
|
118
|
+
* not "it wrote it 28 times".
|
|
119
|
+
*
|
|
120
|
+
* @param data - Parsed registry JSON (any shape; non-objects yield no drift)
|
|
121
|
+
* @returns One observation per distinct unrecognized field or scope value
|
|
122
|
+
*/
|
|
123
|
+
export function detectInstalledPluginsRegistryDrift(data) {
|
|
124
|
+
const found = new Map();
|
|
125
|
+
if (!isRecord(data)) {
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
recordUnknownKeys(data, KNOWN_REGISTRY_KEYS, '', (key) => `Registry carries unrecognized top-level field '${key}'`, found);
|
|
129
|
+
const plugins = data['plugins'];
|
|
130
|
+
if (isRecord(plugins)) {
|
|
131
|
+
for (const [pluginKey, entries] of Object.entries(plugins)) {
|
|
132
|
+
if (!Array.isArray(entries)) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
for (const [index, entry] of entries.entries()) {
|
|
136
|
+
collectEntryDrift(entry, `plugins.${pluginKey}.${index}`, found);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return [...found.values()];
|
|
141
|
+
}
|
|
54
142
|
//# sourceMappingURL=installed-plugins-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installed-plugins-registry.js","sourceRoot":"","sources":["../../src/schemas/installed-plugins-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;GAEG;AACH,MAAM,wBAAwB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"installed-plugins-registry.js","sourceRoot":"","sources":["../../src/schemas/installed-plugins-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,72 +1,111 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { type RegistryShapeDrift } from './registry-drift.js';
|
|
2
3
|
/**
|
|
3
|
-
*
|
|
4
|
+
* `known_marketplaces.json` is written and owned by Claude Code — VAT only reads it.
|
|
5
|
+
* Per VAT's Postel's Law rule (CLAUDE.md: "Reading outside world → liberal"), these
|
|
6
|
+
* schemas `.passthrough()` and keep the source `kind` open: an unrecognized field or
|
|
7
|
+
* marketplace source kind is drift in someone else's file, not an error in the user's
|
|
8
|
+
* setup.
|
|
9
|
+
*
|
|
10
|
+
* Modelling it strictly turned every shape Claude Code added — the git `ref` on a
|
|
11
|
+
* github source, the `directory` source kind — into a hard error against a registry
|
|
12
|
+
* the user cannot edit.
|
|
13
|
+
*
|
|
14
|
+
* Liberality alone would be blindness, so it is paired with
|
|
15
|
+
* {@link detectKnownMarketplacesRegistryDrift}: what passthrough absorbs still gets
|
|
16
|
+
* reported, at `info`, under the same `REGISTRY_SHAPE_DRIFT` code the installed-plugins
|
|
17
|
+
* registry uses.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Marketplace source kinds VAT's model knows about. Not enforced by the schema — a
|
|
21
|
+
* kind outside this list parses fine and is reported as drift instead.
|
|
22
|
+
*/
|
|
23
|
+
export declare const KNOWN_MARKETPLACE_SOURCE_KINDS: readonly ["github", "file", "directory"];
|
|
24
|
+
/**
|
|
25
|
+
* Marketplace source location.
|
|
26
|
+
*
|
|
27
|
+
* Kind-specific fields are optional rather than required-per-kind: a github source
|
|
28
|
+
* carries `repo` (and optionally a `ref`), a file/directory source carries `path`.
|
|
29
|
+
* Requiring them per kind would re-create the false errors this schema exists to
|
|
30
|
+
* avoid the moment Claude Code renames one.
|
|
4
31
|
*/
|
|
5
|
-
declare const MarketplaceSourceSchema: z.
|
|
6
|
-
source: z.
|
|
7
|
-
repo: z.ZodString
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
path:
|
|
20
|
-
},
|
|
21
|
-
source: "file";
|
|
22
|
-
path: string;
|
|
23
|
-
}>]>;
|
|
32
|
+
declare const MarketplaceSourceSchema: z.ZodObject<{
|
|
33
|
+
source: z.ZodString;
|
|
34
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
35
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
36
|
+
path: z.ZodOptional<z.ZodString>;
|
|
37
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
38
|
+
source: z.ZodString;
|
|
39
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
40
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
41
|
+
path: z.ZodOptional<z.ZodString>;
|
|
42
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
43
|
+
source: z.ZodString;
|
|
44
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
45
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
46
|
+
path: z.ZodOptional<z.ZodString>;
|
|
47
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
24
48
|
/**
|
|
25
49
|
* Single marketplace registry entry
|
|
26
50
|
*/
|
|
27
51
|
declare const MarketplaceEntrySchema: z.ZodObject<{
|
|
28
|
-
source: z.
|
|
29
|
-
source: z.
|
|
30
|
-
repo: z.ZodString
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
path:
|
|
43
|
-
},
|
|
44
|
-
source: "file";
|
|
45
|
-
path: string;
|
|
46
|
-
}>]>;
|
|
52
|
+
source: z.ZodObject<{
|
|
53
|
+
source: z.ZodString;
|
|
54
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
55
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
56
|
+
path: z.ZodOptional<z.ZodString>;
|
|
57
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
58
|
+
source: z.ZodString;
|
|
59
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
60
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
61
|
+
path: z.ZodOptional<z.ZodString>;
|
|
62
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
63
|
+
source: z.ZodString;
|
|
64
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
65
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
66
|
+
path: z.ZodOptional<z.ZodString>;
|
|
67
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
47
68
|
installLocation: z.ZodString;
|
|
48
69
|
lastUpdated: z.ZodString;
|
|
49
|
-
}, "
|
|
50
|
-
source: {
|
|
51
|
-
source:
|
|
52
|
-
repo:
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
source:
|
|
62
|
-
repo:
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
lastUpdated:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
71
|
+
source: z.ZodObject<{
|
|
72
|
+
source: z.ZodString;
|
|
73
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
74
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
75
|
+
path: z.ZodOptional<z.ZodString>;
|
|
76
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
77
|
+
source: z.ZodString;
|
|
78
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
79
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
80
|
+
path: z.ZodOptional<z.ZodString>;
|
|
81
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
82
|
+
source: z.ZodString;
|
|
83
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
84
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
85
|
+
path: z.ZodOptional<z.ZodString>;
|
|
86
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
87
|
+
installLocation: z.ZodString;
|
|
88
|
+
lastUpdated: z.ZodString;
|
|
89
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
90
|
+
source: z.ZodObject<{
|
|
91
|
+
source: z.ZodString;
|
|
92
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
93
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
94
|
+
path: z.ZodOptional<z.ZodString>;
|
|
95
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
96
|
+
source: z.ZodString;
|
|
97
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
98
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
99
|
+
path: z.ZodOptional<z.ZodString>;
|
|
100
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
101
|
+
source: z.ZodString;
|
|
102
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
103
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
104
|
+
path: z.ZodOptional<z.ZodString>;
|
|
105
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
106
|
+
installLocation: z.ZodString;
|
|
107
|
+
lastUpdated: z.ZodString;
|
|
108
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
70
109
|
/**
|
|
71
110
|
* Schema for known_marketplaces.json registry
|
|
72
111
|
* Tracks all known marketplace sources
|
|
@@ -74,48 +113,63 @@ declare const MarketplaceEntrySchema: z.ZodObject<{
|
|
|
74
113
|
* Format: { "marketplace-name": { source, installLocation, lastUpdated } }
|
|
75
114
|
*/
|
|
76
115
|
export declare const KnownMarketplacesRegistrySchema: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
77
|
-
source: z.
|
|
78
|
-
source: z.
|
|
79
|
-
repo: z.ZodString
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
path:
|
|
92
|
-
},
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
116
|
+
source: z.ZodObject<{
|
|
117
|
+
source: z.ZodString;
|
|
118
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
119
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
120
|
+
path: z.ZodOptional<z.ZodString>;
|
|
121
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
122
|
+
source: z.ZodString;
|
|
123
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
124
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
125
|
+
path: z.ZodOptional<z.ZodString>;
|
|
126
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
127
|
+
source: z.ZodString;
|
|
128
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
129
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
130
|
+
path: z.ZodOptional<z.ZodString>;
|
|
131
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
132
|
+
installLocation: z.ZodString;
|
|
133
|
+
lastUpdated: z.ZodString;
|
|
134
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
135
|
+
source: z.ZodObject<{
|
|
136
|
+
source: z.ZodString;
|
|
137
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
138
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
139
|
+
path: z.ZodOptional<z.ZodString>;
|
|
140
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
141
|
+
source: z.ZodString;
|
|
142
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
143
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
144
|
+
path: z.ZodOptional<z.ZodString>;
|
|
145
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
146
|
+
source: z.ZodString;
|
|
147
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
148
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
149
|
+
path: z.ZodOptional<z.ZodString>;
|
|
150
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
151
|
+
installLocation: z.ZodString;
|
|
152
|
+
lastUpdated: z.ZodString;
|
|
153
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
154
|
+
source: z.ZodObject<{
|
|
155
|
+
source: z.ZodString;
|
|
156
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
157
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
158
|
+
path: z.ZodOptional<z.ZodString>;
|
|
159
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
160
|
+
source: z.ZodString;
|
|
161
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
162
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
163
|
+
path: z.ZodOptional<z.ZodString>;
|
|
164
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
165
|
+
source: z.ZodString;
|
|
166
|
+
repo: z.ZodOptional<z.ZodString>;
|
|
167
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
168
|
+
path: z.ZodOptional<z.ZodString>;
|
|
169
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
96
170
|
installLocation: z.ZodString;
|
|
97
171
|
lastUpdated: z.ZodString;
|
|
98
|
-
},
|
|
99
|
-
source: {
|
|
100
|
-
source: "github";
|
|
101
|
-
repo: string;
|
|
102
|
-
} | {
|
|
103
|
-
source: "file";
|
|
104
|
-
path: string;
|
|
105
|
-
};
|
|
106
|
-
lastUpdated: string;
|
|
107
|
-
installLocation: string;
|
|
108
|
-
}, {
|
|
109
|
-
source: {
|
|
110
|
-
source: "github";
|
|
111
|
-
repo: string;
|
|
112
|
-
} | {
|
|
113
|
-
source: "file";
|
|
114
|
-
path: string;
|
|
115
|
-
};
|
|
116
|
-
lastUpdated: string;
|
|
117
|
-
installLocation: string;
|
|
118
|
-
}>>;
|
|
172
|
+
}, z.ZodTypeAny, "passthrough">>>;
|
|
119
173
|
export type KnownMarketplacesRegistry = z.infer<typeof KnownMarketplacesRegistrySchema>;
|
|
120
174
|
export type MarketplaceEntry = z.infer<typeof MarketplaceEntrySchema>;
|
|
121
175
|
export type MarketplaceSource = z.infer<typeof MarketplaceSourceSchema>;
|
|
@@ -125,5 +179,16 @@ export declare const KnownMarketplacesRegistryJsonSchema: import("zod-to-json-sc
|
|
|
125
179
|
[key: string]: import("zod-to-json-schema").JsonSchema7Type;
|
|
126
180
|
} | undefined;
|
|
127
181
|
};
|
|
182
|
+
/**
|
|
183
|
+
* Report what `.passthrough()` absorbed: fields and source kinds in a
|
|
184
|
+
* known-marketplaces registry that VAT's model does not recognize.
|
|
185
|
+
*
|
|
186
|
+
* Deduplicated by message — the point is "Claude Code writes something new",
|
|
187
|
+
* not "it wrote it eight times".
|
|
188
|
+
*
|
|
189
|
+
* @param data - Parsed registry JSON (any shape; non-objects yield no drift)
|
|
190
|
+
* @returns One observation per distinct unrecognized field or source kind
|
|
191
|
+
*/
|
|
192
|
+
export declare function detectKnownMarketplacesRegistryDrift(data: unknown): RegistryShapeDrift[];
|
|
128
193
|
export {};
|
|
129
194
|
//# sourceMappingURL=known-marketplaces-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"known-marketplaces-registry.d.ts","sourceRoot":"","sources":["../../src/schemas/known-marketplaces-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB
|
|
1
|
+
{"version":3,"file":"known-marketplaces-registry.d.ts","sourceRoot":"","sources":["../../src/schemas/known-marketplaces-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAKN,KAAK,kBAAkB,EACvB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;GAeG;AAEH;;;GAGG;AACH,eAAO,MAAM,8BAA8B,0CAIjC,CAAC;AAMX;;;;;;;GAOG;AACH,QAAA,MAAM,uBAAuB;;;;;;;;;;;;;;;gCAyBY,CAAC;AAE1C;;GAEG;AACH,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAcmB,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAEO,CAAC;AAEpD,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,+BAA+B,CACtC,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,mCAAmC;;;;;CAG/C,CAAC;AA+DF;;;;;;;;;GASG;AACH,wBAAgB,oCAAoC,CACnD,IAAI,EAAE,OAAO,GACX,kBAAkB,EAAE,CAYtB"}
|
|
@@ -1,27 +1,60 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
3
|
+
import { isRecord, recordDrift, recordUnknownKeys, } from './registry-drift.js';
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
+
* `known_marketplaces.json` is written and owned by Claude Code — VAT only reads it.
|
|
6
|
+
* Per VAT's Postel's Law rule (CLAUDE.md: "Reading outside world → liberal"), these
|
|
7
|
+
* schemas `.passthrough()` and keep the source `kind` open: an unrecognized field or
|
|
8
|
+
* marketplace source kind is drift in someone else's file, not an error in the user's
|
|
9
|
+
* setup.
|
|
10
|
+
*
|
|
11
|
+
* Modelling it strictly turned every shape Claude Code added — the git `ref` on a
|
|
12
|
+
* github source, the `directory` source kind — into a hard error against a registry
|
|
13
|
+
* the user cannot edit.
|
|
14
|
+
*
|
|
15
|
+
* Liberality alone would be blindness, so it is paired with
|
|
16
|
+
* {@link detectKnownMarketplacesRegistryDrift}: what passthrough absorbs still gets
|
|
17
|
+
* reported, at `info`, under the same `REGISTRY_SHAPE_DRIFT` code the installed-plugins
|
|
18
|
+
* registry uses.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Marketplace source kinds VAT's model knows about. Not enforced by the schema — a
|
|
22
|
+
* kind outside this list parses fine and is reported as drift instead.
|
|
23
|
+
*/
|
|
24
|
+
export const KNOWN_MARKETPLACE_SOURCE_KINDS = [
|
|
25
|
+
'github',
|
|
26
|
+
'file',
|
|
27
|
+
'directory',
|
|
28
|
+
];
|
|
29
|
+
const KNOWN_SOURCE_KIND_SET = new Set(KNOWN_MARKETPLACE_SOURCE_KINDS);
|
|
30
|
+
/**
|
|
31
|
+
* Marketplace source location.
|
|
32
|
+
*
|
|
33
|
+
* Kind-specific fields are optional rather than required-per-kind: a github source
|
|
34
|
+
* carries `repo` (and optionally a `ref`), a file/directory source carries `path`.
|
|
35
|
+
* Requiring them per kind would re-create the false errors this schema exists to
|
|
36
|
+
* avoid the moment Claude Code renames one.
|
|
5
37
|
*/
|
|
6
38
|
const MarketplaceSourceSchema = z
|
|
7
|
-
.
|
|
8
|
-
z
|
|
9
|
-
.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
.
|
|
23
|
-
.describe('
|
|
24
|
-
|
|
39
|
+
.object({
|
|
40
|
+
source: z
|
|
41
|
+
.string()
|
|
42
|
+
.describe(`Source kind (recognized: ${KNOWN_MARKETPLACE_SOURCE_KINDS.join(', ')}; others pass through as drift)`),
|
|
43
|
+
repo: z
|
|
44
|
+
.string()
|
|
45
|
+
.regex(/^[^/]+\/[^/]+$/, 'Must be in format "owner/repo"')
|
|
46
|
+
.optional()
|
|
47
|
+
.describe('GitHub repository in "owner/repo" form'),
|
|
48
|
+
ref: z
|
|
49
|
+
.string()
|
|
50
|
+
.optional()
|
|
51
|
+
.describe('Git ref (branch, tag or commit) a github marketplace is pinned to'),
|
|
52
|
+
path: z
|
|
53
|
+
.string()
|
|
54
|
+
.optional()
|
|
55
|
+
.describe('Filesystem path for a file or directory marketplace'),
|
|
56
|
+
})
|
|
57
|
+
.passthrough()
|
|
25
58
|
.describe('Marketplace source location');
|
|
26
59
|
/**
|
|
27
60
|
* Single marketplace registry entry
|
|
@@ -34,10 +67,10 @@ const MarketplaceEntrySchema = z
|
|
|
34
67
|
.describe('Absolute path to marketplace installation'),
|
|
35
68
|
lastUpdated: z
|
|
36
69
|
.string()
|
|
37
|
-
.datetime()
|
|
70
|
+
.datetime({ offset: true })
|
|
38
71
|
.describe('ISO 8601 last update timestamp'),
|
|
39
72
|
})
|
|
40
|
-
.
|
|
73
|
+
.passthrough()
|
|
41
74
|
.describe('Single marketplace registry entry');
|
|
42
75
|
/**
|
|
43
76
|
* Schema for known_marketplaces.json registry
|
|
@@ -49,4 +82,58 @@ export const KnownMarketplacesRegistrySchema = z
|
|
|
49
82
|
.record(z.string().min(1), MarketplaceEntrySchema)
|
|
50
83
|
.describe('Known marketplaces registry structure');
|
|
51
84
|
export const KnownMarketplacesRegistryJsonSchema = zodToJsonSchema(KnownMarketplacesRegistrySchema, { name: 'KnownMarketplacesRegistry', $refStrategy: 'none' });
|
|
85
|
+
const KNOWN_ENTRY_KEYS = new Set([
|
|
86
|
+
'source',
|
|
87
|
+
'installLocation',
|
|
88
|
+
'lastUpdated',
|
|
89
|
+
]);
|
|
90
|
+
const KNOWN_SOURCE_KEYS = new Set([
|
|
91
|
+
'source',
|
|
92
|
+
'repo',
|
|
93
|
+
'ref',
|
|
94
|
+
'path',
|
|
95
|
+
]);
|
|
96
|
+
/**
|
|
97
|
+
* Collect drift observations for one marketplace entry.
|
|
98
|
+
*
|
|
99
|
+
* @param entry - Candidate marketplace entry (may be any shape)
|
|
100
|
+
* @param pointer - Dotted pointer to the entry, i.e. the marketplace name
|
|
101
|
+
* @param record - Accumulator, keyed by message so N marketplaces sharing one
|
|
102
|
+
* unknown field produce one observation rather than N identical ones
|
|
103
|
+
*/
|
|
104
|
+
function collectEntryDrift(entry, pointer, record) {
|
|
105
|
+
if (!isRecord(entry)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
recordUnknownKeys(entry, KNOWN_ENTRY_KEYS, pointer, (key) => `Marketplace entries carry unrecognized field '${key}'`, record);
|
|
109
|
+
const source = entry['source'];
|
|
110
|
+
if (!isRecord(source)) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
recordUnknownKeys(source, KNOWN_SOURCE_KEYS, `${pointer}.source`, (key) => `Marketplace sources carry unrecognized field '${key}'`, record);
|
|
114
|
+
const kind = source['source'];
|
|
115
|
+
if (typeof kind === 'string' && !KNOWN_SOURCE_KIND_SET.has(kind)) {
|
|
116
|
+
recordDrift(record, `${pointer}.source.source`, `Marketplace source kind '${kind}' is not one of the recognized kinds (${KNOWN_MARKETPLACE_SOURCE_KINDS.join(', ')})`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Report what `.passthrough()` absorbed: fields and source kinds in a
|
|
121
|
+
* known-marketplaces registry that VAT's model does not recognize.
|
|
122
|
+
*
|
|
123
|
+
* Deduplicated by message — the point is "Claude Code writes something new",
|
|
124
|
+
* not "it wrote it eight times".
|
|
125
|
+
*
|
|
126
|
+
* @param data - Parsed registry JSON (any shape; non-objects yield no drift)
|
|
127
|
+
* @returns One observation per distinct unrecognized field or source kind
|
|
128
|
+
*/
|
|
129
|
+
export function detectKnownMarketplacesRegistryDrift(data) {
|
|
130
|
+
const found = new Map();
|
|
131
|
+
if (!isRecord(data)) {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
for (const [marketplaceName, entry] of Object.entries(data)) {
|
|
135
|
+
collectEntryDrift(entry, marketplaceName, found);
|
|
136
|
+
}
|
|
137
|
+
return [...found.values()];
|
|
138
|
+
}
|
|
52
139
|
//# sourceMappingURL=known-marketplaces-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"known-marketplaces-registry.js","sourceRoot":"","sources":["../../src/schemas/known-marketplaces-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD
|
|
1
|
+
{"version":3,"file":"known-marketplaces-registry.js","sourceRoot":"","sources":["../../src/schemas/known-marketplaces-registry.ts"],"names":[],"mappings":"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"}
|