@vibe-agent-toolkit/cli 0.2.0-rc.8 → 0.2.0-rc.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/commands/audit/provenance.d.ts.map +1 -1
  2. package/dist/commands/audit/provenance.js +4 -3
  3. package/dist/commands/audit/provenance.js.map +1 -1
  4. package/dist/commands/build.d.ts.map +1 -1
  5. package/dist/commands/build.js +2 -1
  6. package/dist/commands/build.js.map +1 -1
  7. package/dist/commands/cache/clear.d.ts +17 -3
  8. package/dist/commands/cache/clear.d.ts.map +1 -1
  9. package/dist/commands/cache/clear.js +17 -3
  10. package/dist/commands/cache/clear.js.map +1 -1
  11. package/dist/commands/cache/index.d.ts.map +1 -1
  12. package/dist/commands/cache/index.js +19 -10
  13. package/dist/commands/cache/index.js.map +1 -1
  14. package/dist/commands/claude/context.d.ts +2 -2
  15. package/dist/commands/claude/context.js +4 -4
  16. package/dist/commands/claude/context.js.map +1 -1
  17. package/dist/commands/claude/index.d.ts +12 -11
  18. package/dist/commands/claude/index.d.ts.map +1 -1
  19. package/dist/commands/claude/index.js +14 -16
  20. package/dist/commands/claude/index.js.map +1 -1
  21. package/dist/commands/claude/marketplace/git-publish.d.ts.map +1 -1
  22. package/dist/commands/claude/marketplace/git-publish.js +19 -10
  23. package/dist/commands/claude/marketplace/git-publish.js.map +1 -1
  24. package/dist/commands/claude/marketplace/validate.js +2 -2
  25. package/dist/commands/claude/marketplace/validate.js.map +1 -1
  26. package/dist/commands/claude/org/skills.js +8 -8
  27. package/dist/commands/claude/org/skills.js.map +1 -1
  28. package/dist/commands/claude/plugin/build.d.ts.map +1 -1
  29. package/dist/commands/claude/plugin/build.js +11 -21
  30. package/dist/commands/claude/plugin/build.js.map +1 -1
  31. package/dist/commands/claude/plugin/plugin-files.js +3 -3
  32. package/dist/commands/claude/plugin/plugin-files.js.map +1 -1
  33. package/dist/commands/consistency-check.d.ts +11 -5
  34. package/dist/commands/consistency-check.d.ts.map +1 -1
  35. package/dist/commands/consistency-check.js +113 -78
  36. package/dist/commands/consistency-check.js.map +1 -1
  37. package/dist/commands/resources/check-progress.d.ts +6 -0
  38. package/dist/commands/resources/check-progress.d.ts.map +1 -1
  39. package/dist/commands/resources/check-progress.js +10 -2
  40. package/dist/commands/resources/check-progress.js.map +1 -1
  41. package/dist/commands/resources/check.d.ts +182 -203
  42. package/dist/commands/resources/check.d.ts.map +1 -1
  43. package/dist/commands/resources/check.js +272 -248
  44. package/dist/commands/resources/check.js.map +1 -1
  45. package/dist/commands/resources/index.d.ts.map +1 -1
  46. package/dist/commands/resources/index.js +140 -23
  47. package/dist/commands/resources/index.js.map +1 -1
  48. package/dist/commands/resources/query.d.ts +2 -2
  49. package/dist/commands/resources/query.d.ts.map +1 -1
  50. package/dist/commands/resources/query.js +20 -10
  51. package/dist/commands/resources/query.js.map +1 -1
  52. package/dist/commands/skill/test/run.js +3 -3
  53. package/dist/commands/skill/test/run.js.map +1 -1
  54. package/dist/commands/skills/build.d.ts +34 -21
  55. package/dist/commands/skills/build.d.ts.map +1 -1
  56. package/dist/commands/skills/build.js +99 -50
  57. package/dist/commands/skills/build.js.map +1 -1
  58. package/dist/commands/skills/skill-discovery.d.ts +15 -13
  59. package/dist/commands/skills/skill-discovery.d.ts.map +1 -1
  60. package/dist/commands/skills/skill-discovery.js +23 -4
  61. package/dist/commands/skills/skill-discovery.js.map +1 -1
  62. package/dist/commands/validate.d.ts.map +1 -1
  63. package/dist/commands/validate.js +31 -8
  64. package/dist/commands/validate.js.map +1 -1
  65. package/dist/commands/verify.d.ts +10 -4
  66. package/dist/commands/verify.d.ts.map +1 -1
  67. package/dist/commands/verify.js +92 -65
  68. package/dist/commands/verify.js.map +1 -1
  69. package/dist/report-schemas.d.ts.map +1 -1
  70. package/dist/report-schemas.js +0 -2
  71. package/dist/report-schemas.js.map +1 -1
  72. package/dist/skill-resolution/classify.js +2 -2
  73. package/dist/skill-resolution/classify.js.map +1 -1
  74. package/dist/skill-resolution/resolve-skill-reference.d.ts.map +1 -1
  75. package/dist/skill-resolution/resolve-skill-reference.js +48 -52
  76. package/dist/skill-resolution/resolve-skill-reference.js.map +1 -1
  77. package/dist/utils/claude-context-lens.d.ts +34 -0
  78. package/dist/utils/claude-context-lens.d.ts.map +1 -0
  79. package/dist/utils/claude-context-lens.js +39 -0
  80. package/dist/utils/claude-context-lens.js.map +1 -0
  81. package/dist/utils/projection-lenses.d.ts +98 -0
  82. package/dist/utils/projection-lenses.d.ts.map +1 -0
  83. package/dist/utils/projection-lenses.js +203 -0
  84. package/dist/utils/projection-lenses.js.map +1 -0
  85. package/dist/utils/projection-query.d.ts +38 -14
  86. package/dist/utils/projection-query.d.ts.map +1 -1
  87. package/dist/utils/projection-query.js +78 -17
  88. package/dist/utils/projection-query.js.map +1 -1
  89. package/dist/utils/projection-store.d.ts +61 -42
  90. package/dist/utils/projection-store.d.ts.map +1 -1
  91. package/dist/utils/projection-store.js +155 -59
  92. package/dist/utils/projection-store.js.map +1 -1
  93. package/dist/utils/relation-limits.d.ts +50 -0
  94. package/dist/utils/relation-limits.d.ts.map +1 -0
  95. package/dist/utils/relation-limits.js +50 -0
  96. package/dist/utils/relation-limits.js.map +1 -0
  97. package/dist/utils/skill-discovery.d.ts.map +1 -1
  98. package/dist/utils/skill-discovery.js +2 -1
  99. package/dist/utils/skill-discovery.js.map +1 -1
  100. package/dist/utils/skill-packaging-config.d.ts +38 -3
  101. package/dist/utils/skill-packaging-config.d.ts.map +1 -1
  102. package/dist/utils/skill-packaging-config.js +28 -3
  103. package/dist/utils/skill-packaging-config.js.map +1 -1
  104. package/package.json +16 -16
  105. package/schemas/resources-check.json +43 -0
  106. package/dist/commands/claude/budget.d.ts +0 -269
  107. package/dist/commands/claude/budget.d.ts.map +0 -1
  108. package/dist/commands/claude/budget.js +0 -507
  109. package/dist/commands/claude/budget.js.map +0 -1
  110. package/dist/utils/context-budget-issues.d.ts +0 -108
  111. package/dist/utils/context-budget-issues.d.ts.map +0 -1
  112. package/dist/utils/context-budget-issues.js +0 -280
  113. package/dist/utils/context-budget-issues.js.map +0 -1
  114. package/schemas/claude-budget.json +0 -197
@@ -1,280 +0,0 @@
1
- /**
2
- * The always-loaded context budget sweep, rendered as validation findings.
3
- *
4
- * Pure: no I/O, no config, no severity resolution, no exit code. It takes the
5
- * {@link BudgetSweep} `@vibe-agent-toolkit/resources` produced and answers
6
- * "which of these does a reader need to be told about, and in what words". The
7
- * command that calls it stays a thin orchestrator, and this file is where the
8
- * decision worth testing lives.
9
- *
10
- * ## ONE issue per REPRESENTATIVE, never one per working location
11
- *
12
- * A sweep reports every working location, and locations sharing an instruction
13
- * chain share one budget — that is the whole point of the collapse. Re-measured
14
- * on VAT's own tree, after the context population began declining the
15
- * gitignored half: **366 of 589 directories** pay the single chain
16
- * `['CLAUDE.md']`, so emitting per location would print 366 byte-identical
17
- * findings, all blaming one file, the moment the root `CLAUDE.md` crossed the
18
- * budget. (It read *"553 of 819"* against the wider population; the ratio barely
19
- * moved, and the argument does not turn on it.) There are **9** distinct chains
20
- * on this tree either way, so per-representative emission caps the output at 9
21
- * findings at any threshold.
22
- *
23
- * That is not a formatting preference. A check that emits 366 findings for one
24
- * cause is a check an adopter silences with
25
- * `severity.ALWAYS_LOADED_CONTEXT_BUDGET: ignore` rather than fixes — and a
26
- * silenced check reports nothing forever, which is strictly worse than the
27
- * finding it was trying to deliver.
28
- *
29
- * ## What the message may and may not claim
30
- *
31
- * ⛔ Never "the total cost". A global `~/.claude/CLAUDE.md` and the enabled skill
32
- * index are real always-loaded cost that this TREE-ONLY projection cannot see, so
33
- * even a budget reporting zero exclusions is a floor — see the module doc of
34
- * `packages/resources/src/projection/claude-context-budget.ts`, which states the
35
- * bound precisely and which this wording must not contradict. The messages here
36
- * therefore say "estimated at", and the narrower, checkable claim carried by
37
- * {@link AlwaysLoadedBudget.lowerBound} — that rows VAT *did* see were left out
38
- * of the sum — is appended as its own sentence with the three counts behind it.
39
- *
40
- * 🔑 `excludedRuleRows` is deliberately NOT one of those counts. What it counts is
41
- * PATH-SCOPED rules — the ones carrying a `paths:` list — and those are excluded
42
- * by DESIGN: they are `selected`, not `always`, so their absence from the sum is a
43
- * decision rather than a gap in what we know, and only ignorance makes a sum a
44
- * lower bound.
45
- *
46
- * ⛔ Not "rules files" as a class. An UNSCOPED rule in the root `.claude/rules/`
47
- * is classed `always` and IS charged into the budget — nothing gates it on a path,
48
- * so it loads at launch exactly as a CLAUDE.md does. The blanket reading was true
49
- * while every rule was excluded and became a false statement about a check that
50
- * gates the moment the root-rule admission started qualifying. It matters here
51
- * because the largest contributor a message names may now be a rules file, which
52
- * is why the registry `fix` points at the named contributors rather than at a file
53
- * type.
54
- */
55
- import { createRegistryIssue } from '@vibe-agent-toolkit/schema';
56
- import { toForwardSlash } from '@vibe-agent-toolkit/utils';
57
- /**
58
- * How many contributors a message names before it starts counting them.
59
- *
60
- * The chain can be five files deep and the message is read in a terminal, beside
61
- * every other finding of the run. Three names the files worth opening; the tail
62
- * is a count so nothing is silently dropped.
63
- */
64
- const MAX_NAMED_CONTRIBUTORS = 3;
65
- /**
66
- * Narrow a sweep to the instruction chains the requested paths inherit.
67
- *
68
- * ## The retention rule, which is the whole design
69
- *
70
- * A scope selects CHAINS, never payers. Every location paying a selected chain
71
- * is retained even when it sits outside the scope, because the finding's message
72
- * says how many working locations pay it — and that number is a fact about the
73
- * TREE. Retaining only the in-scope payers would make `vat claude budget
74
- * docs/guides` report *"1 working location pays it"* for a chain 366 directories
75
- * pay: a confidently wrong number, which costs more than no number.
76
- *
77
- * ## Matching is on SEGMENT boundaries
78
- *
79
- * `'packages/cli-x'.startsWith('packages/cli')` is true, so a bare prefix test
80
- * hands a sibling directory its neighbour's scope. The same trap
81
- * `representativeFor` in `claude-context-budget-sweep.ts` exists to avoid, one
82
- * layer down.
83
- *
84
- * @param sweep - Every working location's budget, from `sweepAlwaysLoadedBudgets`
85
- * @param scope - Root-relative directories to report for. `''` is the corpus
86
- * root and selects the whole tree; an empty list selects nothing
87
- * @returns The narrowed sweep and the requested paths that matched no location
88
- */
89
- export function scopeSweepToPaths(sweep, scope) {
90
- const selected = new Set();
91
- const unmatched = [];
92
- for (const target of scope) {
93
- const matched = sweep.locations.filter((location) => coversDirectory(target, location.directory));
94
- if (matched.length === 0) {
95
- unmatched.push(target);
96
- continue;
97
- }
98
- for (const location of matched)
99
- selected.add(location.representative);
100
- }
101
- return {
102
- // Counters are carried through untouched: they describe the SWEEP, and a
103
- // scope narrows what is reported without changing what was measured.
104
- sweep: {
105
- ...sweep,
106
- locations: sweep.locations.filter((location) => selected.has(location.representative)),
107
- },
108
- unmatchedScope: unmatched,
109
- };
110
- }
111
- /**
112
- * Does a requested directory cover another one — itself included?
113
- *
114
- * @param target - The requested root-relative directory; `''` is the corpus root
115
- * @param directory - A working location
116
- * @returns True when `target` is `directory` or one of its ancestors
117
- */
118
- function coversDirectory(target, directory) {
119
- if (target === '')
120
- return true;
121
- // Both sides are already forward-slashed — the projection's `dir` column and
122
- // `safePath.relative`'s output both are — but normalizing anyway is what keeps
123
- // a Windows-separator string from silently matching nothing here.
124
- const normalizedScope = toForwardSlash(target);
125
- const normalizedLocation = toForwardSlash(directory);
126
- return normalizedLocation === normalizedScope
127
- || normalizedLocation.startsWith(`${normalizedScope}/`);
128
- }
129
- /**
130
- * One finding per over-budget instruction chain, ordered for a clean diff.
131
- *
132
- * @param sweep - Every working location's budget, from `sweepAlwaysLoadedBudgets`
133
- * @returns The issues, ascending by representative directory (code point)
134
- */
135
- export function contextBudgetIssues(sweep) {
136
- return [...groupByRepresentative(sweep).values()]
137
- .filter((group) => group.budget.overBudget)
138
- .sort((left, right) => comparePaths(left.representative, right.representative))
139
- .map(issueFor);
140
- }
141
- /**
142
- * Collapse the sweep's locations onto the representatives that produced them.
143
- *
144
- * Every location in a group carries the SAME `budget` object — the sweep memoizes
145
- * one answer per representative — so the first one seen is the group's budget and
146
- * the rest only add to the count.
147
- *
148
- * @param sweep - The sweep
149
- * @returns Representative directory → its budget and its location count
150
- */
151
- function groupByRepresentative(sweep) {
152
- const groups = new Map();
153
- for (const location of sweep.locations) {
154
- const existing = groups.get(location.representative);
155
- if (existing === undefined) {
156
- groups.set(location.representative, {
157
- representative: location.representative,
158
- budget: location.budget,
159
- locations: 1,
160
- });
161
- continue;
162
- }
163
- existing.locations += 1;
164
- }
165
- return groups;
166
- }
167
- /**
168
- * One group's finding, with severity, `fix` and `reference` taken from the
169
- * registry rather than restated here.
170
- *
171
- * ⛔ `location` is OMITTED entirely for the corpus root. `ValidationIssue.
172
- * location` is a project-relative POSIX path, and `''` is not one — the schema's
173
- * own refinements would be handed a value that means "nowhere", while the message
174
- * carries the same fact in words a reader can act on.
175
- *
176
- * @param group - The over-budget representative
177
- * @returns The issue
178
- */
179
- function issueFor(group) {
180
- return createRegistryIssue('ALWAYS_LOADED_CONTEXT_BUDGET', messageFor(group), group.representative === '' ? {} : { location: group.representative });
181
- }
182
- /**
183
- * The finding's prose: where, how much, against what, who pays it, and what is
184
- * biggest — in that order, because that is the order a reader needs them to
185
- * decide whether to open anything.
186
- *
187
- * @param group - The over-budget representative
188
- * @returns The message
189
- */
190
- function messageFor(group) {
191
- const { budget, locations } = group;
192
- const paying = locations === 1
193
- ? '1 working location pays it'
194
- : `${count(locations)} working locations pay it`;
195
- return `Always-loaded context at ${subjectOf(group.representative)} is estimated at`
196
- + ` ${count(budget.tokens)} tokens, over the ${count(budget.threshold)}-token budget;`
197
- + ` ${paying}. ${contributorsOf(budget)}${lowerBoundOf(budget)}`;
198
- }
199
- /**
200
- * How the representative is named in prose.
201
- *
202
- * The corpus root is `''`, which renders as nothing at all and reads like a bug —
203
- * and it is also the one case that carries no `location` field, so the prose is
204
- * the ONLY place a reader learns which directory the finding is about.
205
- *
206
- * @param representative - The representative directory
207
- * @returns Its display form
208
- */
209
- function subjectOf(representative) {
210
- return representative === '' ? 'the repository root' : representative;
211
- }
212
- /**
213
- * The largest contributors, capped, with the tail counted rather than dropped.
214
- *
215
- * The sweep already sorted contributors descending by tokens (ties broken on path
216
- * by code point), so "largest" is a prefix and this function does no ordering of
217
- * its own.
218
- *
219
- * @param budget - The over-budget answer
220
- * @returns The sentence, ending in a period
221
- */
222
- function contributorsOf(budget) {
223
- const { contributors } = budget;
224
- if (contributors.length === 0)
225
- return 'No contributor was charged.';
226
- const named = contributors
227
- .slice(0, MAX_NAMED_CONTRIBUTORS)
228
- .map((contributor) => `${contributor.path} (${count(contributor.tokens)} tokens)`);
229
- const remaining = contributors.length - named.length;
230
- const tail = remaining > 0 ? `, +${count(remaining)} more` : '';
231
- return `Largest contributors: ${named.join(', ')}${tail}.`;
232
- }
233
- /**
234
- * The bound sentence, when — and only when — rows VAT saw were left unsummed.
235
- *
236
- * All three counts are named even at zero, so a reader learns which kind of
237
- * ignorance is behind the bound rather than having to infer it from silence.
238
- *
239
- * @param budget - The over-budget answer
240
- * @returns The sentence with a leading space, or the empty string
241
- */
242
- function lowerBoundOf(budget) {
243
- if (!budget.lowerBound)
244
- return '';
245
- return ' That figure is a lower bound: '
246
- + `${count(budget.unknownTokenRows)} rows of unknown size, `
247
- + `${count(budget.excludedDeepImportRows)} import rows past one hop and `
248
- + `${count(budget.unattributedImportRows)} unattributed import rows`
249
- + ' were seen but left out of the sum.';
250
- }
251
- /**
252
- * A count as a reader reads it.
253
- *
254
- * Pinned to `en-US` rather than left to the host locale: the same finding must
255
- * render byte-identically on two developers' machines, for the same reason the
256
- * ordering below is code-point and not `localeCompare`.
257
- *
258
- * @param value - The number
259
- * @returns Its thousands-separated form
260
- */
261
- function count(value) {
262
- return value.toLocaleString('en-US');
263
- }
264
- /**
265
- * Order two root-relative directories by UTF-16 code point.
266
- *
267
- * ⛔ Not `localeCompare`: ICU collation is locale-dependent, so two developers
268
- * diffing the same run's findings would see churn neither of them caused. Matches
269
- * every other ordering in the projection lane.
270
- *
271
- * @param left - One representative
272
- * @param right - The other
273
- * @returns Negative, zero or positive, per the `Array#sort` contract
274
- */
275
- function comparePaths(left, right) {
276
- if (left === right)
277
- return 0;
278
- return left < right ? -1 : 1;
279
- }
280
- //# sourceMappingURL=context-budget-issues.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-budget-issues.js","sourceRoot":"","sources":["../../src/utils/context-budget-issues.ts"],"names":[],"mappings":"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"}
@@ -1,197 +0,0 @@
1
- {
2
- "$ref": "#/definitions/claude-budget",
3
- "definitions": {
4
- "claude-budget": {
5
- "type": "object",
6
- "properties": {
7
- "status": {
8
- "type": "string",
9
- "enum": [
10
- "ok",
11
- "findings",
12
- "error"
13
- ]
14
- },
15
- "examined": {
16
- "type": "integer",
17
- "minimum": 0
18
- },
19
- "findings": {
20
- "type": "array",
21
- "items": {
22
- "type": "object",
23
- "properties": {
24
- "code": {
25
- "type": "string"
26
- },
27
- "message": {
28
- "type": "string"
29
- },
30
- "location": {
31
- "type": "string"
32
- },
33
- "line": {
34
- "type": "integer",
35
- "exclusiveMinimum": 0
36
- },
37
- "field": {
38
- "type": "string"
39
- },
40
- "link": {
41
- "type": "string"
42
- },
43
- "fix": {
44
- "type": "string"
45
- },
46
- "reference": {
47
- "type": "string"
48
- },
49
- "suggestion": {
50
- "type": "string"
51
- },
52
- "severity": {
53
- "type": "string",
54
- "enum": [
55
- "error",
56
- "warning",
57
- "info"
58
- ]
59
- },
60
- "column": {
61
- "type": "integer",
62
- "exclusiveMinimum": 0
63
- }
64
- },
65
- "required": [
66
- "code",
67
- "message",
68
- "severity"
69
- ],
70
- "additionalProperties": false
71
- }
72
- },
73
- "summary": {
74
- "type": "object",
75
- "properties": {
76
- "errors": {
77
- "type": "integer",
78
- "minimum": 0
79
- },
80
- "warnings": {
81
- "type": "integer",
82
- "minimum": 0
83
- },
84
- "info": {
85
- "type": "integer",
86
- "minimum": 0
87
- }
88
- },
89
- "required": [
90
- "errors",
91
- "warnings",
92
- "info"
93
- ],
94
- "additionalProperties": false
95
- },
96
- "durationMs": {
97
- "type": "number",
98
- "minimum": 0
99
- },
100
- "error": {
101
- "type": "string"
102
- },
103
- "data": {
104
- "anyOf": [
105
- {
106
- "type": "object",
107
- "properties": {
108
- "root": {
109
- "type": "string"
110
- },
111
- "threshold": {
112
- "type": "integer",
113
- "minimum": 0
114
- },
115
- "scope": {
116
- "type": "array",
117
- "items": {
118
- "type": "string"
119
- }
120
- },
121
- "unmatchedScope": {
122
- "type": "array",
123
- "items": {
124
- "type": "string"
125
- }
126
- },
127
- "distinctChains": {
128
- "type": "integer",
129
- "minimum": 0
130
- },
131
- "skippedUnknownLocations": {
132
- "type": "integer",
133
- "minimum": 0
134
- },
135
- "boundsStatement": {
136
- "type": "string"
137
- },
138
- "limits": {
139
- "type": "array",
140
- "items": {
141
- "type": "object",
142
- "properties": {
143
- "id": {
144
- "type": "string"
145
- },
146
- "direction": {
147
- "type": "string",
148
- "enum": [
149
- "over-report",
150
- "under-report",
151
- "scope",
152
- "assumption"
153
- ]
154
- },
155
- "statement": {
156
- "type": "string"
157
- }
158
- },
159
- "required": [
160
- "id",
161
- "direction",
162
- "statement"
163
- ],
164
- "additionalProperties": false
165
- }
166
- }
167
- },
168
- "required": [
169
- "root",
170
- "threshold",
171
- "scope",
172
- "unmatchedScope",
173
- "distinctChains",
174
- "skippedUnknownLocations",
175
- "boundsStatement",
176
- "limits"
177
- ],
178
- "additionalProperties": false
179
- },
180
- {
181
- "type": "null"
182
- }
183
- ]
184
- }
185
- },
186
- "required": [
187
- "status",
188
- "examined",
189
- "findings",
190
- "summary",
191
- "data"
192
- ],
193
- "additionalProperties": false
194
- }
195
- },
196
- "$schema": "http://json-schema.org/draft-07/schema#"
197
- }