@vibe-agent-toolkit/agent-skills 0.1.42 → 0.2.0-rc.2
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/post-build-checks.js +3 -3
- package/dist/post-build-checks.js.map +1 -1
- package/dist/skill-packager.d.ts +13 -0
- package/dist/skill-packager.d.ts.map +1 -1
- package/dist/skill-packager.js +66 -21
- package/dist/skill-packager.js.map +1 -1
- package/dist/skill-test/run-harness.d.ts.map +1 -1
- package/dist/skill-test/run-harness.js +17 -1
- package/dist/skill-test/run-harness.js.map +1 -1
- package/dist/test-input.d.ts.map +1 -1
- package/dist/test-input.js +30 -7
- package/dist/test-input.js.map +1 -1
- package/dist/validators/packaging-validator.d.ts +12 -1
- package/dist/validators/packaging-validator.d.ts.map +1 -1
- package/dist/validators/packaging-validator.js +53 -20
- package/dist/validators/packaging-validator.js.map +1 -1
- package/dist/validators/rule-engine/rule-context.d.ts +17 -0
- package/dist/validators/rule-engine/rule-context.d.ts.map +1 -1
- package/dist/validators/rule-engine/rule-context.js +2 -0
- 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 +28 -0
- package/dist/validators/rule-engine/rule-engine.js.map +1 -1
- package/dist/validators/skill-validator.js +2 -2
- package/dist/validators/skill-validator.js.map +1 -1
- package/dist/validators/walker-to-issues.d.ts.map +1 -1
- package/dist/validators/walker-to-issues.js +11 -0
- package/dist/validators/walker-to-issues.js.map +1 -1
- package/dist/walk-link-graph.d.ts +38 -4
- package/dist/walk-link-graph.d.ts.map +1 -1
- package/dist/walk-link-graph.js +292 -84
- package/dist/walk-link-graph.js.map +1 -1
- package/package.json +6 -6
package/dist/walk-link-graph.js
CHANGED
|
@@ -8,11 +8,33 @@
|
|
|
8
8
|
* Non-markdown assets (images, JSON, etc.) won't be in the registry and still
|
|
9
9
|
* require `existsSync()` checks — this is acceptable since the goal is eliminating
|
|
10
10
|
* redundant I/O for markdown files that are already parsed.
|
|
11
|
+
*
|
|
12
|
+
* ## Membership is not traversability
|
|
13
|
+
*
|
|
14
|
+
* A registry MEMBER is a file VAT has parsed: its links are known, so the
|
|
15
|
+
* packager's rewriter can reach inside it and repoint them at bundled copies. A
|
|
16
|
+
* ROUTABLE file is one the walker walks THROUGH — it enqueues that file's link
|
|
17
|
+
* targets as further bundle members. Routing is markdown-only
|
|
18
|
+
* ({@link isRoutable}); HTML is "a leaf we can read, not a door we walk
|
|
19
|
+
* through".
|
|
20
|
+
*
|
|
21
|
+
* These used to be the same thing, by accident: any link target that
|
|
22
|
+
* `getResourceById` found was queued, so a registry's include globs silently
|
|
23
|
+
* WERE the routability policy. The two production registries disagreed as a
|
|
24
|
+
* result. `crawlAndResolveRegistry` includes HTML, so `vat audit` and
|
|
25
|
+
* post-build validation walked THROUGH a bundled page and counted its targets
|
|
26
|
+
* as bundled; the packager's `createProjectRegistry` is markdown-only, so at
|
|
27
|
+
* walk time the same page was an opaque asset and its targets were dropped.
|
|
28
|
+
* Same tree, two answers to "is HTML a door" — and audit's answer described a
|
|
29
|
+
* bundle the build never produced.
|
|
30
|
+
*
|
|
31
|
+
* Links out of a non-routable member are not silently dropped: each one whose
|
|
32
|
+
* target the walk never bundled by some other route is reported as a
|
|
33
|
+
* `non-routable-source` exclusion (`LINK_FROM_NON_ROUTABLE_FILE`).
|
|
11
34
|
*/
|
|
12
|
-
import { existsSync, statSync } from 'node:fs';
|
|
13
35
|
import { basename, dirname } from 'node:path';
|
|
14
|
-
import { isLocalFileLink, resolveLocalHref } from '@vibe-agent-toolkit/resources';
|
|
15
|
-
import { isGitIgnored, toForwardSlash, safePath } from '@vibe-agent-toolkit/utils';
|
|
36
|
+
import { isLocalFileLink, parserKindForPath, resolveLocalHref } from '@vibe-agent-toolkit/resources';
|
|
37
|
+
import { FsLookupCache, isGitIgnored, toForwardSlash, safePath } from '@vibe-agent-toolkit/utils';
|
|
16
38
|
import picomatch from 'picomatch';
|
|
17
39
|
import { isAgentInstructionBasename, isNavigationBasename } from './validators/validation-rules.js';
|
|
18
40
|
// ============================================================================
|
|
@@ -69,15 +91,28 @@ function makeExclusion(targetPath, sourcePath, targetExists, reason, link, match
|
|
|
69
91
|
};
|
|
70
92
|
}
|
|
71
93
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
94
|
+
* Build the pass-1′ row for one link target.
|
|
95
|
+
*
|
|
96
|
+
* The two syscalls come from {@link FsLookupCache.probe}, which memoizes them
|
|
97
|
+
* across links, so repeated calls for the same path are free of I/O.
|
|
98
|
+
*/
|
|
99
|
+
function fillPathFacts(targetPath, options, state) {
|
|
100
|
+
const { exists, isDirectory } = state.pathProbe.probe(targetPath);
|
|
101
|
+
return {
|
|
102
|
+
exists,
|
|
103
|
+
isDirectory,
|
|
104
|
+
insideProject: !isOutsideProject(targetPath, options.projectRoot),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check if a target path is a not-yet-materialized deferred build artifact.
|
|
109
|
+
* Must run BEFORE any directory check to avoid classifying a missing path.
|
|
75
110
|
*
|
|
76
111
|
* This check is gated on the target NOT existing on disk: it classifies the
|
|
77
112
|
* "hasn't been built yet" half of the deferred-artifact lifecycle. An
|
|
78
113
|
* existing real file at a covered files: dest (or source) is NOT deferred by
|
|
79
114
|
* THIS check — it falls through to the directory-target check and beyond.
|
|
80
|
-
* The gitignore branch further down
|
|
115
|
+
* The gitignore branch further down ({@link classifyGitignored}) carries its
|
|
81
116
|
* OWN, unconditional `deferredArtifacts` exemption (existing or not) for the
|
|
82
117
|
* "already built, and gitignored as expected" half — see the comment there.
|
|
83
118
|
* So an existing-but-gitignored covered path still ends up classified as
|
|
@@ -85,17 +120,12 @@ function makeExclusion(targetPath, sourcePath, targetExists, reason, link, match
|
|
|
85
120
|
* existing-and-NOT-gitignored covered path (or an uncovered path) reaches
|
|
86
121
|
* normal handling. {@link DeferredArtifacts.covers} does the exact-OR-
|
|
87
122
|
* directory-prefix membership test (pure, no filesystem access); the
|
|
88
|
-
* existence answer
|
|
89
|
-
* for the whole classifier.
|
|
123
|
+
* existence answer comes from the target's pass-1′ row.
|
|
90
124
|
*
|
|
91
125
|
* @returns true if the path was classified as deferred
|
|
92
126
|
*/
|
|
93
|
-
function checkDeferred(targetPath, targetExists, deferredArtifacts
|
|
94
|
-
|
|
95
|
-
deferredAssetSet.add(toForwardSlash(targetPath));
|
|
96
|
-
return true;
|
|
97
|
-
}
|
|
98
|
-
return false;
|
|
127
|
+
function checkDeferred(targetPath, targetExists, deferredArtifacts) {
|
|
128
|
+
return deferredArtifacts.covers(targetPath) && !targetExists;
|
|
99
129
|
}
|
|
100
130
|
/**
|
|
101
131
|
* Does the walker refuse to bundle this target because it is a repo-internal
|
|
@@ -141,8 +171,8 @@ function refusesAgentInstructionFile(targetPath, options) {
|
|
|
141
171
|
return !declaredSources.has(toForwardSlash(safePath.relative(options.projectRoot, targetPath)));
|
|
142
172
|
}
|
|
143
173
|
/**
|
|
144
|
-
*
|
|
145
|
-
* artifact — the
|
|
174
|
+
* Classify a target already known to be gitignored as either a leak or an
|
|
175
|
+
* exempted `files:` build artifact — the walk excludes it either way; only
|
|
146
176
|
* the record differs.
|
|
147
177
|
*
|
|
148
178
|
* A files:-declared DEST is exempt from the leak rule EVEN WHEN it already
|
|
@@ -161,18 +191,13 @@ function refusesAgentInstructionFile(targetPath, options) {
|
|
|
161
191
|
* coverage must NOT exempt it. An uncovered path, or a path covered only via
|
|
162
192
|
* `sourcePaths`, still reports the leak normally.
|
|
163
193
|
*/
|
|
164
|
-
function
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
// `targetExists: true` is not an assumption here — the caller only reaches
|
|
170
|
-
// this function for a target it has already stat'ed and found present.
|
|
171
|
-
excludedReferences.push(makeExclusion(targetPath, sourcePath, true, 'gitignored', link));
|
|
194
|
+
function classifyGitignoredTarget(targetPath, deferredArtifacts) {
|
|
195
|
+
return deferredArtifacts?.coversDest(targetPath)
|
|
196
|
+
? { kind: 'deferred' }
|
|
197
|
+
: { kind: 'excluded', reason: 'gitignored' };
|
|
172
198
|
}
|
|
173
199
|
/**
|
|
174
|
-
* The
|
|
175
|
-
* classifier within its cognitive-complexity budget.
|
|
200
|
+
* The `files:`-dest exemption for a target already known to be gitignored.
|
|
176
201
|
*
|
|
177
202
|
* GATED ON EXISTENCE, and the gate is the point. A path that is not there
|
|
178
203
|
* cannot leak anything, and neither ignore oracle can be trusted to say so:
|
|
@@ -187,69 +212,118 @@ function recordGitignoredTarget(targetPath, sourcePath, link, deferredArtifacts,
|
|
|
187
212
|
* Prefer the pre-populated GitTracker when the caller plumbed one through: it
|
|
188
213
|
* answers in O(1) against the active set, no `git check-ignore` spawn.
|
|
189
214
|
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
215
|
+
* **Memoized per walk**, so a target named by many documents costs one answer
|
|
216
|
+
* rather than one per reference. The memo cannot change the answer: both
|
|
217
|
+
* oracles are pure functions of the tree, and the memo's lifetime is one walk.
|
|
218
|
+
*
|
|
219
|
+
* ⛔ **Measured on VAT's own tree, 2026-08-09, and the result is a NEGATIVE —
|
|
220
|
+
* do not sell this as a performance win.** Counting asks vs. memo misses in the
|
|
221
|
+
* built lane: `vat audit .` = 3 asks / 2 distinct, `vat skills build` = 0 / 0,
|
|
222
|
+
* `vat inventory .` = 0 / 0. **One** oracle call avoided across all three.
|
|
223
|
+
*
|
|
224
|
+
* The reason is structural, not incidental: this branch is LAST in the cascade,
|
|
225
|
+
* so a target only reaches it after surviving all seven earlier discriminators
|
|
226
|
+
* *and* existing on disk. Nearly every link target is classified before then —
|
|
227
|
+
* bundled markdown, a directory, a navigation file, a pattern match. The memo's
|
|
228
|
+
* real justification is therefore **shape, not speed**: it is what lets the
|
|
229
|
+
* oracle read sit outside {@link classifyExclusion} so that function can be a
|
|
230
|
+
* pure predicate over the row. Any future claim of a spawn-count win needs its
|
|
231
|
+
* own measurement on a corpus where this branch is actually hot.
|
|
232
|
+
*
|
|
233
|
+
* Two further bounds, so nobody reads more into it than it does:
|
|
234
|
+
*
|
|
235
|
+
* - **The collapse is within-ONE-walk fan-in only.** `collectLinkedFiles` calls
|
|
236
|
+
* {@link walkLinkGraph} once per skill, so a target shared across skills is
|
|
237
|
+
* still asked about once per skill. That per-walk lifetime is exactly what
|
|
238
|
+
* makes the memo safe against `packageSkill` writing `dist/` between skills,
|
|
239
|
+
* so it is a deliberate ceiling, not a missed optimization.
|
|
240
|
+
* - **Not every repeat was a subprocess.** {@link isGitIgnored} settles "is
|
|
241
|
+
* there a repository here?" from the filesystem and returns early when there
|
|
242
|
+
* is none, so on a tree with no `.git` ancestor the repeats were ancestor
|
|
243
|
+
* walks rather than `git check-ignore` spawns. Inside a real repository they
|
|
244
|
+
* were spawns.
|
|
245
|
+
*
|
|
246
|
+
* @returns whether the target is gitignored
|
|
192
247
|
*/
|
|
193
|
-
function
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
248
|
+
function readGitignored(targetPath, options, state) {
|
|
249
|
+
const cached = state.gitignoreFacts.get(targetPath);
|
|
250
|
+
if (cached !== undefined)
|
|
251
|
+
return cached;
|
|
197
252
|
const isIgnored = options.gitTracker === undefined
|
|
198
253
|
? isGitIgnored(targetPath, options.projectRoot)
|
|
199
254
|
: options.gitTracker.isIgnoredByActiveSet(targetPath);
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}
|
|
203
|
-
recordGitignoredTarget(targetPath, sourcePath, link, options.deferredArtifacts, excludedReferences, deferredAssetSet);
|
|
204
|
-
return true;
|
|
255
|
+
state.gitignoreFacts.set(targetPath, isIgnored);
|
|
256
|
+
return isIgnored;
|
|
205
257
|
}
|
|
206
258
|
/**
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
* pattern match).
|
|
259
|
+
* The `exists` × `isDirectory` corner of the cascade — the only place the row's
|
|
260
|
+
* three-state `isDirectory` is read.
|
|
210
261
|
*
|
|
211
|
-
*
|
|
262
|
+
* `null` means *no answer about the kind*: the path is present to `existsSync`
|
|
263
|
+
* and unstattable anyway (a permissions problem, or a change racing the two
|
|
264
|
+
* calls). The classifier can say nothing about WHAT the target is — but it can
|
|
265
|
+
* say that the target is there and could not be read, and that is the report.
|
|
266
|
+
*
|
|
267
|
+
* ✅ **This used to skip silently, and that was D6 in the spec's deferred-fixes
|
|
268
|
+
* ledger — now fixed.** `{ kind: 'skipped' }` recorded nothing at all, so an
|
|
269
|
+
* unreadable link target vanished from the report entirely: no exclusion, no
|
|
270
|
+
* bundling, no issue. It survived the pass-1′ refactor only because that
|
|
271
|
+
* refactor was held to byte-identical output (it is what the pre-refactor
|
|
272
|
+
* `catch { return true }` did). Meanwhile the resources lane turned the
|
|
273
|
+
* IDENTICAL class of read failure into a `RESOURCE_UNREADABLE` finding, so one
|
|
274
|
+
* unreadable file got two answers depending on which lane found it. It is now
|
|
275
|
+
* an `unreadable-target` exclusion, which the verdict engine reports as
|
|
276
|
+
* `LINK_TARGET_UNREADABLE` — the resources code's skill-packaging sibling.
|
|
277
|
+
*
|
|
278
|
+
* @returns a verdict when the path's kind decides the outcome, else `undefined`
|
|
279
|
+
*/
|
|
280
|
+
function classifyPathKind(facts) {
|
|
281
|
+
if (!facts.exists)
|
|
282
|
+
return undefined;
|
|
283
|
+
if (facts.isDirectory === true)
|
|
284
|
+
return { kind: 'excluded', reason: 'directory-target' };
|
|
285
|
+
if (facts.isDirectory === null)
|
|
286
|
+
return { kind: 'excluded', reason: 'unreadable-target' };
|
|
287
|
+
return undefined;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* The first-match-wins exclusion cascade, as a **pure function of the pass-1′
|
|
291
|
+
* row**. No filesystem access, no walk-state mutation, no recording.
|
|
292
|
+
*
|
|
293
|
+
* ⚠️ **The order IS the behaviour.** This is a cascade, not a set of
|
|
294
|
+
* independent predicates: a directory that is also pattern-matched is reported
|
|
295
|
+
* as `directory-target`, and rewriting it as `reasons.find(...)` over
|
|
296
|
+
* independently-evaluated conditions would silently repick which reason wins.
|
|
297
|
+
* Every branch below sits exactly where it sat when the classifier did its own
|
|
298
|
+
* I/O inline; only the source of the facts changed.
|
|
299
|
+
*
|
|
300
|
+
* The one branch that is not a column is the last one — see
|
|
301
|
+
* {@link readGitignored} for why the gitignore oracle is demand-read at the
|
|
302
|
+
* point the cascade reaches it rather than filled for every row.
|
|
303
|
+
*
|
|
304
|
+
* @returns the verdict, or `undefined` when nothing excludes the target
|
|
212
305
|
*/
|
|
213
|
-
function
|
|
214
|
-
// ONE existence probe for the whole classifier. Several branches below are
|
|
215
|
-
// meaningful only for a target that is actually there, and one of them
|
|
216
|
-
// (gitignore) is actively WRONG without it — see the comment on that branch.
|
|
217
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename -- Path from parsed markdown
|
|
218
|
-
const targetExists = existsSync(targetPath);
|
|
306
|
+
function classifyExclusion(targetPath, options, excludeMatchers, facts) {
|
|
219
307
|
// The deferred check is the FIRST discriminator: a not-yet-materialized target
|
|
220
308
|
// must be classified before any check that would read it off disk.
|
|
221
|
-
if (options.deferredArtifacts && checkDeferred(targetPath,
|
|
222
|
-
return
|
|
309
|
+
if (options.deferredArtifacts && checkDeferred(targetPath, facts.exists, options.deferredArtifacts)) {
|
|
310
|
+
return { kind: 'deferred' };
|
|
223
311
|
}
|
|
224
312
|
// Check if target is a directory
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
if (statSync(targetPath).isDirectory()) {
|
|
229
|
-
excludedReferences.push(makeExclusion(targetPath, sourcePath, targetExists, 'directory-target', link));
|
|
230
|
-
return true;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
catch {
|
|
234
|
-
// statSync failure = skip
|
|
235
|
-
return true;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
313
|
+
const kindVerdict = classifyPathKind(facts);
|
|
314
|
+
if (kindVerdict)
|
|
315
|
+
return kindVerdict;
|
|
238
316
|
// Check project boundary
|
|
239
|
-
if (
|
|
240
|
-
|
|
241
|
-
return true;
|
|
242
|
-
}
|
|
317
|
+
if (!facts.insideProject)
|
|
318
|
+
return { kind: 'excluded', reason: 'outside-project' };
|
|
243
319
|
// Check navigation file exclusion
|
|
244
320
|
if (options.excludeNavigationFiles && isNavigationBasename(basename(targetPath))) {
|
|
245
|
-
|
|
246
|
-
return true;
|
|
321
|
+
return { kind: 'excluded', reason: 'navigation-file' };
|
|
247
322
|
}
|
|
248
323
|
// Repo-internal agent-instruction files — see {@link refusesAgentInstructionFile}
|
|
249
324
|
// for why they cannot travel, and for the explicit-`files:` escape hatch.
|
|
250
325
|
if (refusesAgentInstructionFile(targetPath, options)) {
|
|
251
|
-
|
|
252
|
-
return true;
|
|
326
|
+
return { kind: 'excluded', reason: 'agent-instruction-file' };
|
|
253
327
|
}
|
|
254
328
|
// Check for cross-skill SKILL.md links — a SKILL.md is a skill definition marker,
|
|
255
329
|
// not a resource. Bundling another skill's SKILL.md creates duplicate skill definitions
|
|
@@ -260,21 +334,78 @@ function checkExclusions(targetPath, sourcePath, link, options, excludeMatchers,
|
|
|
260
334
|
// prevents re-traversal, and the duplicate-definition risk does not apply to the
|
|
261
335
|
// current skill itself.
|
|
262
336
|
if (basename(targetPath) === 'SKILL.md') {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
return true;
|
|
337
|
+
return safePath.resolve(targetPath) === safePath.resolve(options.skillRootPath)
|
|
338
|
+
? { kind: 'skipped' }
|
|
339
|
+
: { kind: 'excluded', reason: 'skill-definition' };
|
|
267
340
|
}
|
|
268
341
|
// Check exclude patterns (relative to projectRoot)
|
|
269
342
|
const relativePath = toForwardSlash(safePath.relative(options.projectRoot, targetPath));
|
|
270
343
|
const matchedExclude = excludeMatchers.find((m) => m.isMatch(relativePath));
|
|
271
344
|
if (matchedExclude) {
|
|
272
|
-
|
|
273
|
-
|
|
345
|
+
return { kind: 'excluded', reason: 'pattern-matched', matchedRule: matchedExclude.rule };
|
|
346
|
+
}
|
|
347
|
+
// Falls through to the cascade's final branch, which is the one that needs an
|
|
348
|
+
// oracle rather than a column — see {@link classifyGitignored}.
|
|
349
|
+
return undefined;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* The cascade's LAST branch, kept out of {@link classifyExclusion} so that
|
|
353
|
+
* function can stay a pure function of the row.
|
|
354
|
+
*
|
|
355
|
+
* Its position at the end is not an implementation detail — it is why the
|
|
356
|
+
* demand-read is safe. Every earlier discriminator has already declined, so the
|
|
357
|
+
* set of paths this asks the oracle about is exactly the set the shipped
|
|
358
|
+
* classifier asked about, link for link.
|
|
359
|
+
*
|
|
360
|
+
* Existence-gated, and the gate is the point: a path that is not there cannot
|
|
361
|
+
* leak anything, and neither oracle can be trusted to say so — see
|
|
362
|
+
* {@link readGitignored}.
|
|
363
|
+
*/
|
|
364
|
+
function classifyGitignored(targetPath, options, facts, state) {
|
|
365
|
+
if (!facts.exists)
|
|
366
|
+
return undefined;
|
|
367
|
+
if (!readGitignored(targetPath, options, state))
|
|
368
|
+
return undefined;
|
|
369
|
+
return classifyGitignoredTarget(targetPath, options.deferredArtifacts);
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Apply a verdict to the walk state — the only place the classifier's decision
|
|
373
|
+
* becomes a mutation.
|
|
374
|
+
*
|
|
375
|
+
* @returns true if the caller should stop processing this link
|
|
376
|
+
*/
|
|
377
|
+
function applyExclusionVerdict(verdict, targetPath, sourcePath, link, facts, state) {
|
|
378
|
+
switch (verdict.kind) {
|
|
379
|
+
case 'deferred': {
|
|
380
|
+
state.deferredAssetSet.add(toForwardSlash(targetPath));
|
|
381
|
+
return true;
|
|
382
|
+
}
|
|
383
|
+
case 'excluded': {
|
|
384
|
+
state.excludedReferences.push(makeExclusion(targetPath, sourcePath, facts.exists, verdict.reason, link, verdict.matchedRule));
|
|
385
|
+
return true;
|
|
386
|
+
}
|
|
387
|
+
case 'skipped': {
|
|
388
|
+
return true;
|
|
389
|
+
}
|
|
274
390
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Check if a target path should be excluded for structural reasons
|
|
394
|
+
* (deferred build artifact, directory, outside project, navigation file, or
|
|
395
|
+
* pattern match).
|
|
396
|
+
*
|
|
397
|
+
* Pass 1′ fills the row, pass 4 judges it, and the recording is a third step —
|
|
398
|
+
* the three used to be one interleaved function that stat'ed paths mid-cascade.
|
|
399
|
+
*
|
|
400
|
+
* @returns true if the link was excluded or deferred (caller should skip to next link)
|
|
401
|
+
*/
|
|
402
|
+
function checkExclusions(targetPath, sourcePath, link, options, excludeMatchers, state) {
|
|
403
|
+
const facts = fillPathFacts(targetPath, options, state);
|
|
404
|
+
const verdict = classifyExclusion(targetPath, options, excludeMatchers, facts)
|
|
405
|
+
?? classifyGitignored(targetPath, options, facts, state);
|
|
406
|
+
if (verdict === undefined)
|
|
407
|
+
return false;
|
|
408
|
+
return applyExclusionVerdict(verdict, targetPath, sourcePath, link, facts, state);
|
|
278
409
|
}
|
|
279
410
|
/**
|
|
280
411
|
* Process a single local_file link during the graph walk.
|
|
@@ -292,7 +423,7 @@ function processLink(link, currentResource, currentDepth, registry, options, exc
|
|
|
292
423
|
// Resolve the target path from the link href
|
|
293
424
|
const targetPath = resolveHrefToPath(hrefWithoutAnchor, currentResource.filePath, options.projectRoot);
|
|
294
425
|
// Check structural exclusions (deferred, directory, boundary, navigation, pattern, gitignore)
|
|
295
|
-
if (checkExclusions(targetPath, currentResource.filePath, link, options, excludeMatchers, state
|
|
426
|
+
if (checkExclusions(targetPath, currentResource.filePath, link, options, excludeMatchers, state)) {
|
|
296
427
|
return;
|
|
297
428
|
}
|
|
298
429
|
// Try to find the target in the registry (markdown files)
|
|
@@ -301,9 +432,13 @@ function processLink(link, currentResource, currentDepth, registry, options, exc
|
|
|
301
432
|
: registry.getResource(targetPath);
|
|
302
433
|
if (targetResource) {
|
|
303
434
|
processRegistryResource(targetResource, targetPath, currentResource.filePath, link, currentDepth, options, state);
|
|
304
|
-
//
|
|
435
|
+
// Straight to the probe, not through `fillPathFacts`: this site wants one
|
|
436
|
+
// column, and building a whole row to read it would compute an
|
|
437
|
+
// `insideProject` the caller immediately discards. The probe memo is what
|
|
438
|
+
// makes it free — this used to be a second `existsSync` of the identical
|
|
439
|
+
// path in the same tick.
|
|
305
440
|
}
|
|
306
|
-
else if (
|
|
441
|
+
else if (state.pathProbe.probe(targetPath).exists) {
|
|
307
442
|
// Not in registry — non-markdown asset that exists on disk
|
|
308
443
|
state.bundledAssetSet.add(toForwardSlash(targetPath));
|
|
309
444
|
}
|
|
@@ -314,9 +449,65 @@ function processLink(link, currentResource, currentDepth, registry, options, exc
|
|
|
314
449
|
}
|
|
315
450
|
}
|
|
316
451
|
/**
|
|
317
|
-
*
|
|
452
|
+
* Is this file one the walker walks THROUGH, enqueuing its link targets as
|
|
453
|
+
* further bundle members?
|
|
454
|
+
*
|
|
455
|
+
* Routing is markdown-only. HTML may be a registry member — parsed, links
|
|
456
|
+
* known, reachable by the rewriter — without being a door: the decision is
|
|
457
|
+
* "a leaf we can read, not a door we walk through", and it is spec-backed
|
|
458
|
+
* (Anthropic's skill guidance is markdown throughout, and VAT's own stance docs
|
|
459
|
+
* mention HTML nowhere).
|
|
460
|
+
*
|
|
461
|
+
* Keyed on {@link parserKindForPath} rather than a local extension test, so
|
|
462
|
+
* VAT keeps ONE parser discriminator: a format that gains a parser gains a
|
|
463
|
+
* routability answer in the same edit.
|
|
464
|
+
*/
|
|
465
|
+
function isRoutable(filePath) {
|
|
466
|
+
return parserKindForPath(filePath) === 'markdown';
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Record every local-file link out of a bundled non-routable member as a
|
|
470
|
+
* candidate `non-routable-source` exclusion.
|
|
471
|
+
*
|
|
472
|
+
* Without this the targets simply vanish: `SKILL.md → guide.html →
|
|
473
|
+
* diagram.svg` bundles the HTML, never looks inside it, and ships a bundled
|
|
474
|
+
* page whose `<img src>` points at a file that is not there. A silent drop
|
|
475
|
+
* becomes a reported one.
|
|
476
|
+
*/
|
|
477
|
+
function recordUnfollowedLinks(member, options, state) {
|
|
478
|
+
for (const link of member.links) {
|
|
479
|
+
if (!isLocalFileLink(link.type))
|
|
480
|
+
continue;
|
|
481
|
+
const hrefWithoutAnchor = link.href.split('#')[0] ?? link.href;
|
|
482
|
+
if (hrefWithoutAnchor === '')
|
|
483
|
+
continue;
|
|
484
|
+
const targetPath = resolveHrefToPath(hrefWithoutAnchor, member.filePath, options.projectRoot);
|
|
485
|
+
const targetExists = state.pathProbe.probe(targetPath).exists;
|
|
486
|
+
state.unfollowedFromNonRoutable.push(makeExclusion(targetPath, member.filePath, targetExists, 'non-routable-source', link));
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Process a registry resource link: check routability, depth, cycle, and either
|
|
491
|
+
* bundle or exclude.
|
|
318
492
|
*/
|
|
319
493
|
function processRegistryResource(targetResource, targetPath, sourcePath, link, currentDepth, options, state) {
|
|
494
|
+
// A non-routable member is a leaf, and leaves are bundled on the same terms
|
|
495
|
+
// as plain assets — which bypass `maxDepth` entirely. Checking routability
|
|
496
|
+
// BEFORE depth is what makes adding HTML to a registry a pure gain: the file
|
|
497
|
+
// still travels exactly as it did when it was an unparsed asset, it is merely
|
|
498
|
+
// parsed now so the rewriter can reach its links. Applying the depth limit
|
|
499
|
+
// here instead would silently DROP HTML that a markdown-only registry shipped.
|
|
500
|
+
if (!isRoutable(targetResource.filePath)) {
|
|
501
|
+
if (state.visitedResourceIds.has(targetResource.id)) {
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
state.visitedResourceIds.add(targetResource.id);
|
|
505
|
+
state.bundledResourceMap.set(targetResource.id, targetResource);
|
|
506
|
+
// `maxBundledDepth` describes how far the walk ROUTED. A leaf does not
|
|
507
|
+
// extend that, any more than a bundled PNG does.
|
|
508
|
+
recordUnfollowedLinks(targetResource, options, state);
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
320
511
|
// Check depth limit. A registry resource came from a disk crawl, so it
|
|
321
512
|
// exists by construction — `targetExists: true` is a fact here, not a guess.
|
|
322
513
|
if (currentDepth >= options.maxDepth) {
|
|
@@ -374,6 +565,9 @@ export function walkLinkGraph(skillResourceId, registry, options) {
|
|
|
374
565
|
excludedReferences: [],
|
|
375
566
|
maxBundledDepth: 0,
|
|
376
567
|
queue: [[skillResource, 0]],
|
|
568
|
+
unfollowedFromNonRoutable: [],
|
|
569
|
+
pathProbe: options.pathProbe ?? new FsLookupCache(),
|
|
570
|
+
gitignoreFacts: new Map(),
|
|
377
571
|
};
|
|
378
572
|
while (state.queue.length > 0) {
|
|
379
573
|
const entry = state.queue.shift();
|
|
@@ -387,6 +581,20 @@ export function walkLinkGraph(skillResourceId, registry, options) {
|
|
|
387
581
|
}
|
|
388
582
|
}
|
|
389
583
|
}
|
|
584
|
+
// Promote only the unfollowed links whose targets the walk never bundled by
|
|
585
|
+
// any other route. Deferred artifacts count as accounted-for: the target will
|
|
586
|
+
// exist once the build materializes it, which is the same reason they are not
|
|
587
|
+
// `missing-target`.
|
|
588
|
+
const bundledPaths = new Set([
|
|
589
|
+
...state.bundledAssetSet,
|
|
590
|
+
...state.deferredAssetSet,
|
|
591
|
+
...[...state.bundledResourceMap.values()].map(r => toForwardSlash(r.filePath)),
|
|
592
|
+
]);
|
|
593
|
+
for (const unfollowed of state.unfollowedFromNonRoutable) {
|
|
594
|
+
if (!bundledPaths.has(toForwardSlash(unfollowed.path))) {
|
|
595
|
+
state.excludedReferences.push(unfollowed);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
390
598
|
return {
|
|
391
599
|
bundledResources: [...state.bundledResourceMap.values()],
|
|
392
600
|
bundledAssets: [...state.bundledAssetSet],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walk-link-graph.js","sourceRoot":"","sources":["../src/walk-link-graph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"walk-link-graph.js","sourceRoot":"","sources":["../src/walk-link-graph.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibe-agent-toolkit/agent-skills",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0-rc.2",
|
|
4
4
|
"description": "Build, validate, and package agent skills in the Agent Skills format",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"README.md"
|
|
20
20
|
],
|
|
21
21
|
"scripts": {
|
|
22
|
-
"build": "tsc --build && bun run generate:schemas",
|
|
22
|
+
"build": "tsx ../dev-tools/src/tsc-clean-build.ts --build && bun run generate:schemas",
|
|
23
23
|
"build:watch": "tsc --build --watch",
|
|
24
24
|
"clean": "rm -rf dist *.tsbuildinfo schemas/",
|
|
25
25
|
"generate:schemas": "tsx scripts/generate-json-schemas.ts",
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
"typecheck": "tsc --noEmit"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@vibe-agent-toolkit/agent-config": "0.
|
|
34
|
-
"@vibe-agent-toolkit/agent-schema": "0.
|
|
35
|
-
"@vibe-agent-toolkit/resources": "0.
|
|
36
|
-
"@vibe-agent-toolkit/utils": "0.
|
|
33
|
+
"@vibe-agent-toolkit/agent-config": "0.2.0-rc.2",
|
|
34
|
+
"@vibe-agent-toolkit/agent-schema": "0.2.0-rc.2",
|
|
35
|
+
"@vibe-agent-toolkit/resources": "0.2.0-rc.2",
|
|
36
|
+
"@vibe-agent-toolkit/utils": "0.2.0-rc.2",
|
|
37
37
|
"adm-zip": "^0.6.0",
|
|
38
38
|
"glob": "^10.3.10",
|
|
39
39
|
"picomatch": "^4.0.3",
|