@vibe-agent-toolkit/cli 0.1.41-rc.6 → 0.1.41-rc.8
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/README.md +4 -3
- package/dist/bin/vat +25 -2
- package/dist/bin/vat.js +25 -2
- package/dist/bin/vat.js.map +1 -1
- package/dist/bin.js +12 -1
- package/dist/bin.js.map +1 -1
- package/dist/commands/agent/list.d.ts +11 -0
- package/dist/commands/agent/list.d.ts.map +1 -1
- package/dist/commands/agent/list.js +30 -11
- package/dist/commands/agent/list.js.map +1 -1
- package/dist/commands/audit/hierarchical-output.d.ts +6 -2
- package/dist/commands/audit/hierarchical-output.d.ts.map +1 -1
- package/dist/commands/audit/hierarchical-output.js +93 -50
- package/dist/commands/audit/hierarchical-output.js.map +1 -1
- package/dist/commands/audit-settings.d.ts +35 -0
- package/dist/commands/audit-settings.d.ts.map +1 -1
- package/dist/commands/audit-settings.js +121 -51
- package/dist/commands/audit-settings.js.map +1 -1
- package/dist/commands/audit.d.ts +97 -2
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +505 -231
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/build.d.ts +14 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +126 -32
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/claude/marketplace/license-utils.d.ts +39 -2
- package/dist/commands/claude/marketplace/license-utils.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/license-utils.js +114 -68
- package/dist/commands/claude/marketplace/license-utils.js.map +1 -1
- package/dist/commands/claude/marketplace/publish.js +5 -4
- package/dist/commands/claude/marketplace/publish.js.map +1 -1
- package/dist/commands/claude/marketplace/validate.d.ts +97 -0
- package/dist/commands/claude/marketplace/validate.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/validate.js +157 -49
- package/dist/commands/claude/marketplace/validate.js.map +1 -1
- package/dist/commands/claude/org/skills.d.ts +11 -3
- package/dist/commands/claude/org/skills.d.ts.map +1 -1
- package/dist/commands/claude/org/skills.js +70 -20
- package/dist/commands/claude/org/skills.js.map +1 -1
- package/dist/commands/claude/org/stubs.d.ts +9 -1
- package/dist/commands/claude/org/stubs.d.ts.map +1 -1
- package/dist/commands/claude/org/stubs.js +11 -3
- package/dist/commands/claude/org/stubs.js.map +1 -1
- package/dist/commands/claude/plugin/build.d.ts +116 -0
- package/dist/commands/claude/plugin/build.d.ts.map +1 -1
- package/dist/commands/claude/plugin/build.js +173 -40
- package/dist/commands/claude/plugin/build.js.map +1 -1
- package/dist/commands/claude/plugin/marketplace-json.d.ts +36 -0
- package/dist/commands/claude/plugin/marketplace-json.d.ts.map +1 -0
- package/dist/commands/claude/plugin/marketplace-json.js +34 -0
- package/dist/commands/claude/plugin/marketplace-json.js.map +1 -0
- package/dist/commands/claude/plugin/plugin-json-merge.d.ts +30 -1
- package/dist/commands/claude/plugin/plugin-json-merge.d.ts.map +1 -1
- package/dist/commands/claude/plugin/plugin-json-merge.js +107 -14
- package/dist/commands/claude/plugin/plugin-json-merge.js.map +1 -1
- package/dist/commands/claude/plugin/tree-copy.d.ts.map +1 -1
- package/dist/commands/claude/plugin/tree-copy.js +0 -1
- package/dist/commands/claude/plugin/tree-copy.js.map +1 -1
- package/dist/commands/corpus/report.d.ts +22 -4
- package/dist/commands/corpus/report.d.ts.map +1 -1
- package/dist/commands/corpus/report.js +1 -0
- package/dist/commands/corpus/report.js.map +1 -1
- package/dist/commands/corpus/runner.d.ts +16 -1
- package/dist/commands/corpus/runner.d.ts.map +1 -1
- package/dist/commands/corpus/runner.js +55 -48
- package/dist/commands/corpus/runner.js.map +1 -1
- package/dist/commands/doctor.d.ts +57 -8
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +142 -67
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/inventory.d.ts +2 -0
- package/dist/commands/inventory.d.ts.map +1 -1
- package/dist/commands/inventory.js +45 -4
- package/dist/commands/inventory.js.map +1 -1
- package/dist/commands/phase-utils.d.ts +240 -11
- package/dist/commands/phase-utils.d.ts.map +1 -1
- package/dist/commands/phase-utils.js +352 -15
- package/dist/commands/phase-utils.js.map +1 -1
- package/dist/commands/rag/query-command.d.ts +40 -0
- package/dist/commands/rag/query-command.d.ts.map +1 -1
- package/dist/commands/rag/query-command.js +47 -20
- package/dist/commands/rag/query-command.js.map +1 -1
- package/dist/commands/resources/index.d.ts.map +1 -1
- package/dist/commands/resources/index.js +38 -13
- package/dist/commands/resources/index.js.map +1 -1
- package/dist/commands/resources/scan.d.ts +37 -0
- package/dist/commands/resources/scan.d.ts.map +1 -1
- package/dist/commands/resources/scan.js +47 -32
- package/dist/commands/resources/scan.js.map +1 -1
- package/dist/commands/resources/validate.d.ts +136 -1
- package/dist/commands/resources/validate.d.ts.map +1 -1
- package/dist/commands/resources/validate.js +121 -68
- package/dist/commands/resources/validate.js.map +1 -1
- package/dist/commands/skill/review.d.ts.map +1 -1
- package/dist/commands/skill/review.js +40 -23
- package/dist/commands/skill/review.js.map +1 -1
- package/dist/commands/skill/test/run.d.ts +1 -1
- package/dist/commands/skill/test/run.d.ts.map +1 -1
- package/dist/commands/skill/test/run.js +8 -6
- package/dist/commands/skill/test/run.js.map +1 -1
- package/dist/commands/skills/build.d.ts +140 -0
- package/dist/commands/skills/build.d.ts.map +1 -1
- package/dist/commands/skills/build.js +348 -94
- package/dist/commands/skills/build.js.map +1 -1
- package/dist/commands/skills/command-helpers.d.ts +6 -10
- package/dist/commands/skills/command-helpers.d.ts.map +1 -1
- package/dist/commands/skills/command-helpers.js +6 -22
- package/dist/commands/skills/command-helpers.js.map +1 -1
- package/dist/commands/skills/list.d.ts +18 -0
- package/dist/commands/skills/list.d.ts.map +1 -1
- package/dist/commands/skills/list.js +41 -15
- package/dist/commands/skills/list.js.map +1 -1
- package/dist/commands/skills/package.d.ts +17 -0
- package/dist/commands/skills/package.d.ts.map +1 -1
- package/dist/commands/skills/package.js +72 -43
- package/dist/commands/skills/package.js.map +1 -1
- package/dist/commands/skills/skill-discovery.d.ts.map +1 -1
- package/dist/commands/skills/skill-discovery.js +9 -1
- package/dist/commands/skills/skill-discovery.js.map +1 -1
- package/dist/commands/skills/validate-command.d.ts.map +1 -1
- package/dist/commands/skills/validate-command.js +22 -6
- package/dist/commands/skills/validate-command.js.map +1 -1
- package/dist/commands/skills/validate.d.ts +79 -0
- package/dist/commands/skills/validate.d.ts.map +1 -1
- package/dist/commands/skills/validate.js +268 -79
- package/dist/commands/skills/validate.js.map +1 -1
- package/dist/commands/validate.d.ts +18 -0
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +79 -66
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/verify.d.ts +38 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +247 -84
- package/dist/commands/verify.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/skill-resolution/index.d.ts +1 -1
- package/dist/skill-resolution/index.d.ts.map +1 -1
- package/dist/skill-resolution/index.js +1 -1
- package/dist/skill-resolution/index.js.map +1 -1
- package/dist/skill-resolution/packaging-config.d.ts +15 -2
- package/dist/skill-resolution/packaging-config.d.ts.map +1 -1
- package/dist/skill-resolution/packaging-config.js +39 -2
- package/dist/skill-resolution/packaging-config.js.map +1 -1
- package/dist/utils/command-error.d.ts +34 -1
- package/dist/utils/command-error.d.ts.map +1 -1
- package/dist/utils/command-error.js +32 -1
- package/dist/utils/command-error.js.map +1 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +0 -2
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/help-loader.d.ts +6 -2
- package/dist/utils/help-loader.d.ts.map +1 -1
- package/dist/utils/help-loader.js +9 -16
- package/dist/utils/help-loader.js.map +1 -1
- package/dist/utils/issue-anchor.d.ts +26 -0
- package/dist/utils/issue-anchor.d.ts.map +1 -0
- package/dist/utils/issue-anchor.js +39 -0
- package/dist/utils/issue-anchor.js.map +1 -0
- package/dist/utils/issue-rendering.d.ts +149 -0
- package/dist/utils/issue-rendering.d.ts.map +1 -0
- package/dist/utils/issue-rendering.js +229 -0
- package/dist/utils/issue-rendering.js.map +1 -0
- package/dist/utils/output.d.ts +80 -9
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +138 -23
- package/dist/utils/output.js.map +1 -1
- package/dist/utils/project-root-policy.d.ts +2 -2
- package/dist/utils/project-root-policy.js +2 -2
- package/dist/utils/relativize-paths.d.ts +45 -0
- package/dist/utils/relativize-paths.d.ts.map +1 -0
- package/dist/utils/relativize-paths.js +67 -0
- package/dist/utils/relativize-paths.js.map +1 -0
- package/dist/utils/resource-loader.d.ts +21 -2
- package/dist/utils/resource-loader.d.ts.map +1 -1
- package/dist/utils/resource-loader.js +85 -11
- package/dist/utils/resource-loader.js.map +1 -1
- package/dist/utils/skill-packaging-config.d.ts +22 -1
- package/dist/utils/skill-packaging-config.d.ts.map +1 -1
- package/dist/utils/skill-packaging-config.js +26 -0
- package/dist/utils/skill-packaging-config.js.map +1 -1
- package/dist/utils/validate-help-files.d.ts +3 -2
- package/dist/utils/validate-help-files.d.ts.map +1 -1
- package/dist/utils/validate-help-files.js +48 -5
- package/dist/utils/validate-help-files.js.map +1 -1
- package/dist/utils/verdict-helpers.d.ts +14 -5
- package/dist/utils/verdict-helpers.d.ts.map +1 -1
- package/dist/utils/verdict-helpers.js +19 -16
- package/dist/utils/verdict-helpers.js.map +1 -1
- package/docs/audit.md +40 -14
- package/docs/doctor.md +46 -10
- package/docs/index.md +1 -1
- package/docs/rag.md +9 -4
- package/docs/resources.md +54 -22
- package/docs/skills.md +11 -7
- package/package.json +12 -12
|
@@ -1,12 +1,49 @@
|
|
|
1
1
|
import { findProjectRoot, safePath } from '@vibe-agent-toolkit/utils';
|
|
2
2
|
import { discoverSkillsFromConfig } from '../commands/skills/skill-discovery.js';
|
|
3
3
|
import { loadConfigCached } from '../utils/config-loader.js';
|
|
4
|
-
import { mergeSkillPackagingConfig } from '../utils/skill-packaging-config.js';
|
|
4
|
+
import { collectDeclaredEvalSuites, mergeSkillPackagingConfig } from '../utils/skill-packaging-config.js';
|
|
5
5
|
/** configRoot → (abs SKILL.md path → declared skill name). One expansion per root. */
|
|
6
6
|
const skillDiscoveryCache = new Map();
|
|
7
|
-
/**
|
|
7
|
+
/** configRoot → the project's declared eval suites. One discovery + merge per root. */
|
|
8
|
+
const declaredEvalSuiteCache = new Map();
|
|
9
|
+
/** Clear the per-root discovery caches (call when fixtures mutate between in-process runs). */
|
|
8
10
|
export function resetSkillDiscoveryCache() {
|
|
9
11
|
skillDiscoveryCache.clear();
|
|
12
|
+
declaredEvalSuiteCache.clear();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The project's declared eval suites for the config root governing `skillPath`.
|
|
16
|
+
*
|
|
17
|
+
* The single-skill counterpart to `collectDeclaredEvalSuites`: commands that resolve one
|
|
18
|
+
* SKILL.md at a time (`vat audit`, `vat skill review`, `vat skill test`) still need the
|
|
19
|
+
* WHOLE project's declarations, because test input is a project-wide rule — another
|
|
20
|
+
* skill's eval suite is an answer key no matter whose bundle is being built.
|
|
21
|
+
*
|
|
22
|
+
* Memoized per config root so a run over N skills under one root pays for discovery
|
|
23
|
+
* once, not N times. Returns `[]` when there is no governing config or no skills
|
|
24
|
+
* section — wild mode, where there is no project to enumerate.
|
|
25
|
+
*/
|
|
26
|
+
export async function resolveProjectDeclaredEvalSuites(skillPath) {
|
|
27
|
+
const projectRoot = findProjectRoot(safePath.resolve(safePath.join(skillPath, '..')));
|
|
28
|
+
if (projectRoot === null)
|
|
29
|
+
return [];
|
|
30
|
+
const cached = declaredEvalSuiteCache.get(projectRoot);
|
|
31
|
+
if (cached !== undefined)
|
|
32
|
+
return cached;
|
|
33
|
+
let suites = [];
|
|
34
|
+
try {
|
|
35
|
+
const config = loadConfigCached(projectRoot);
|
|
36
|
+
if (config?.skills !== undefined) {
|
|
37
|
+
suites = collectDeclaredEvalSuites(config.skills, await discoverSkillsFromConfig(config.skills, projectRoot));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// A broken or unreadable config is already reported by the caller's own config
|
|
42
|
+
// load; degrade to the subject's own declaration rather than aborting the run.
|
|
43
|
+
suites = [];
|
|
44
|
+
}
|
|
45
|
+
declaredEvalSuiteCache.set(projectRoot, suites);
|
|
46
|
+
return suites;
|
|
10
47
|
}
|
|
11
48
|
export async function getDiscoveredSkillsByPath(skillsSection, configRoot) {
|
|
12
49
|
const cached = skillDiscoveryCache.get(configRoot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packaging-config.js","sourceRoot":"","sources":["../../src/skill-resolution/packaging-config.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAEtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAmB,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"packaging-config.js","sourceRoot":"","sources":["../../src/skill-resolution/packaging-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Shared command error handling utilities
|
|
2
|
+
* Shared command error handling utilities.
|
|
3
|
+
*
|
|
4
|
+
* THE single implementation of each failure exit. `commands/skills/` used to
|
|
5
|
+
* carry its own `handleCommandError` that logged to stderr and exited 2 having
|
|
6
|
+
* written nothing to stdout — same name, same signature, same documented
|
|
7
|
+
* contract, silently different behaviour. Every command family routes here.
|
|
3
8
|
*/
|
|
9
|
+
import { type SeverityCounts, type ValidationIssue } from '@vibe-agent-toolkit/agent-schema';
|
|
4
10
|
import type { Logger } from './logger.js';
|
|
5
11
|
/**
|
|
6
12
|
* Format duration for human readability
|
|
@@ -16,4 +22,31 @@ export declare function formatDuration(ms: number): string;
|
|
|
16
22
|
* @param commandName - Name of the command (for error message)
|
|
17
23
|
*/
|
|
18
24
|
export declare function handleCommandError(error: unknown, logger: Logger, startTime: number, commandName: string): never;
|
|
25
|
+
/** The payload a command publishes when its own validation gate stops it. */
|
|
26
|
+
export interface ValidationGateFailure {
|
|
27
|
+
status: 'error';
|
|
28
|
+
issueCounts: SeverityCounts;
|
|
29
|
+
/** What was being validated — a skill name or a path, whichever the lane has. */
|
|
30
|
+
skill: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Pure: the document {@link handleValidationGateFailure} writes.
|
|
34
|
+
*
|
|
35
|
+
* The per-severity distribution rides beside the status because `status: error`
|
|
36
|
+
* alone cannot say whether the run also carried warnings and info — and the
|
|
37
|
+
* findings themselves went to stderr, where a piped consumer never sees them.
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildValidationGateFailure(subject: string, issues: readonly ValidationIssue[]): ValidationGateFailure;
|
|
40
|
+
/**
|
|
41
|
+
* Publish the documented failure payload for a command stopped by its OWN
|
|
42
|
+
* validation gate, then exit 1.
|
|
43
|
+
*
|
|
44
|
+
* {@link handleCommandError} above covers the UNEXPECTED failure (exit 2). This
|
|
45
|
+
* covers the expected one, and `vat skills build` / `vat skills package` both
|
|
46
|
+
* exited it after writing zero bytes to stdout — while their `--help` texts
|
|
47
|
+
* document a YAML summary on stdout and reserve exit 1 for exactly this case.
|
|
48
|
+
* A consumer running `vat skills build | jq .status` got an empty document and
|
|
49
|
+
* a bare non-zero code.
|
|
50
|
+
*/
|
|
51
|
+
export declare function handleValidationGateFailure(subject: string, issues: readonly ValidationIssue[]): never;
|
|
19
52
|
//# sourceMappingURL=command-error.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-error.d.ts","sourceRoot":"","sources":["../../src/utils/command-error.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"command-error.d.ts","sourceRoot":"","sources":["../../src/utils/command-error.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAE9G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,KAAK,CAWP;AAED,6EAA6E;AAC7E,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,cAAc,CAAC;IAC5B,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,eAAe,EAAE,GACjC,qBAAqB,CAEvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,eAAe,EAAE,GACjC,KAAK,CAGP"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Shared command error handling utilities
|
|
2
|
+
* Shared command error handling utilities.
|
|
3
|
+
*
|
|
4
|
+
* THE single implementation of each failure exit. `commands/skills/` used to
|
|
5
|
+
* carry its own `handleCommandError` that logged to stderr and exited 2 having
|
|
6
|
+
* written nothing to stdout — same name, same signature, same documented
|
|
7
|
+
* contract, silently different behaviour. Every command family routes here.
|
|
3
8
|
*/
|
|
9
|
+
import { countBySeverity } from '@vibe-agent-toolkit/agent-schema';
|
|
4
10
|
import { writeYamlOutput } from './output.js';
|
|
5
11
|
/**
|
|
6
12
|
* Format duration for human readability
|
|
@@ -33,4 +39,29 @@ export function handleCommandError(error, logger, startTime, commandName) {
|
|
|
33
39
|
});
|
|
34
40
|
process.exit(2);
|
|
35
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Pure: the document {@link handleValidationGateFailure} writes.
|
|
44
|
+
*
|
|
45
|
+
* The per-severity distribution rides beside the status because `status: error`
|
|
46
|
+
* alone cannot say whether the run also carried warnings and info — and the
|
|
47
|
+
* findings themselves went to stderr, where a piped consumer never sees them.
|
|
48
|
+
*/
|
|
49
|
+
export function buildValidationGateFailure(subject, issues) {
|
|
50
|
+
return { status: 'error', issueCounts: countBySeverity(issues), skill: subject };
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Publish the documented failure payload for a command stopped by its OWN
|
|
54
|
+
* validation gate, then exit 1.
|
|
55
|
+
*
|
|
56
|
+
* {@link handleCommandError} above covers the UNEXPECTED failure (exit 2). This
|
|
57
|
+
* covers the expected one, and `vat skills build` / `vat skills package` both
|
|
58
|
+
* exited it after writing zero bytes to stdout — while their `--help` texts
|
|
59
|
+
* document a YAML summary on stdout and reserve exit 1 for exactly this case.
|
|
60
|
+
* A consumer running `vat skills build | jq .status` got an empty document and
|
|
61
|
+
* a bare non-zero code.
|
|
62
|
+
*/
|
|
63
|
+
export function handleValidationGateFailure(subject, issues) {
|
|
64
|
+
writeYamlOutput(buildValidationGateFailure(subject, issues));
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
36
67
|
//# sourceMappingURL=command-error.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-error.js","sourceRoot":"","sources":["../../src/utils/command-error.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"command-error.js","sourceRoot":"","sources":["../../src/utils/command-error.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAA6C,MAAM,kCAAkC,CAAC;AAG9G,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;QACd,OAAO,GAAG,EAAE,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAc,EACd,MAAc,EACd,SAAiB,EACjB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IAEnG,eAAe,CAAC;QACd,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;QAC/D,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;KACnC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAUD;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAe,EACf,MAAkC;IAElC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACnF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAAe,EACf,MAAkC;IAElC,eAAe,CAAC,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAMxF;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBACjB,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAMhD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CA8BzE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAMxF;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBACjB,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAMhD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CA8BzE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAqBD;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAgB/E"}
|
|
@@ -90,8 +90,6 @@ export function getConfigDir(configPath) {
|
|
|
90
90
|
*
|
|
91
91
|
* Tests that mutate fixtures between runs must call
|
|
92
92
|
* {@link resetLoadedConfigCache} to invalidate this cache.
|
|
93
|
-
*
|
|
94
|
-
* See spec docs/superpowers/specs/2026-05-17-root-model-and-leading-slash-design.md §8.
|
|
95
93
|
*/
|
|
96
94
|
const loadedConfigCache = new Map();
|
|
97
95
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAsB,MAAM,+BAA+B,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,eAAe,GAAG,gCAAgC,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,WAAW,CAAS;IAC7B,YAAY,WAAmB,EAAE,KAAc;QAC7C,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,KAAK,YAAY,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACjD,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,sEAAsE;IACtE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAEjG,uIAAuI;IACvI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,uHAAuH;QACvH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnC,wDAAwD;QACxD,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,+BAA+B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CACtD,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;AAC7B,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,8 +21,12 @@ export declare function loadVerboseHelp(section?: string): string;
|
|
|
21
21
|
* That directly violates this package's own rule that help must survive piping.
|
|
22
22
|
*
|
|
23
23
|
* `writeSync` in a drain loop is the fix: it cannot return before the bytes are
|
|
24
|
-
* handed to the pipe, so `process.exit` has nothing left to lose.
|
|
25
|
-
*
|
|
24
|
+
* handed to the pipe, so `process.exit` has nothing left to lose.
|
|
25
|
+
*
|
|
26
|
+
* The loop itself now lives in `output.ts` as `writeStdoutSync`, because the very
|
|
27
|
+
* same defect was later found in `writeYamlOutput` — every command's YAML summary
|
|
28
|
+
* was being truncated at one pipe buffer. Two copies of this reasoning is exactly
|
|
29
|
+
* how the second lane went unfixed for so long, so there is one.
|
|
26
30
|
*/
|
|
27
31
|
export declare function writeHelpSync(content: string): void;
|
|
28
32
|
//# sourceMappingURL=help-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help-loader.d.ts","sourceRoot":"","sources":["../../src/utils/help-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"help-loader.d.ts","sourceRoot":"","sources":["../../src/utils/help-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBxD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEnD"}
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
* Help loader - reads verbose help from markdown files
|
|
3
3
|
* Markdown docs are the source of truth for CLI help
|
|
4
4
|
*/
|
|
5
|
-
import { readFileSync
|
|
5
|
+
import { readFileSync } from 'node:fs';
|
|
6
6
|
import { dirname } from 'node:path';
|
|
7
7
|
import { fileURLToPath } from 'node:url';
|
|
8
8
|
import { safePath } from '@vibe-agent-toolkit/utils';
|
|
9
|
+
import { writeStdoutSync } from './output.js';
|
|
9
10
|
/**
|
|
10
11
|
* Load verbose help from markdown files in packages/cli/docs/
|
|
11
12
|
*
|
|
@@ -49,22 +50,14 @@ Please report this issue at: https://github.com/jdutton/vibe-agent-toolkit/issue
|
|
|
49
50
|
* That directly violates this package's own rule that help must survive piping.
|
|
50
51
|
*
|
|
51
52
|
* `writeSync` in a drain loop is the fix: it cannot return before the bytes are
|
|
52
|
-
* handed to the pipe, so `process.exit` has nothing left to lose.
|
|
53
|
-
*
|
|
53
|
+
* handed to the pipe, so `process.exit` has nothing left to lose.
|
|
54
|
+
*
|
|
55
|
+
* The loop itself now lives in `output.ts` as `writeStdoutSync`, because the very
|
|
56
|
+
* same defect was later found in `writeYamlOutput` — every command's YAML summary
|
|
57
|
+
* was being truncated at one pipe buffer. Two copies of this reasoning is exactly
|
|
58
|
+
* how the second lane went unfixed for so long, so there is one.
|
|
54
59
|
*/
|
|
55
60
|
export function writeHelpSync(content) {
|
|
56
|
-
|
|
57
|
-
let written = 0;
|
|
58
|
-
while (written < buffer.length) {
|
|
59
|
-
try {
|
|
60
|
-
written += writeSync(1, buffer, written, buffer.length - written);
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
// A non-blocking pipe whose buffer is momentarily full raises EAGAIN; the
|
|
64
|
-
// reader will drain it, so retry. Anything else is a genuine write failure.
|
|
65
|
-
if (error.code !== 'EAGAIN')
|
|
66
|
-
throw error;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
61
|
+
writeStdoutSync(content.endsWith('\n') ? content : `${content}\n`);
|
|
69
62
|
}
|
|
70
63
|
//# sourceMappingURL=help-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help-loader.js","sourceRoot":"","sources":["../../src/utils/help-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"help-loader.js","sourceRoot":"","sources":["../../src/utils/help-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,mCAAmC;IACnC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEtD,wCAAwC;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;IACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE9D,IAAI,CAAC;QACH,qHAAqH;QACrH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sCAAsC;QACtC,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO;;0BAEe,QAAQ;;EAEhC,YAAY;;;CAGb,CAAC;IACA,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rendering for the four `ValidationIssue` anchors.
|
|
3
|
+
*
|
|
4
|
+
* `location` / `line` / `field` are independent fields on the issue (see the
|
|
5
|
+
* anchor contract on `ValidationIssue` in `@vibe-agent-toolkit/agent-schema`).
|
|
6
|
+
* Splitting them apart in the producers only pays off if the renderers put
|
|
7
|
+
* them back together — a `line` that no output surface prints is a `line` that,
|
|
8
|
+
* from the user's side, was deleted. This is the one place that join happens,
|
|
9
|
+
* so every command spells an anchor the same way.
|
|
10
|
+
*/
|
|
11
|
+
import type { ValidationIssue } from '@vibe-agent-toolkit/agent-schema';
|
|
12
|
+
/**
|
|
13
|
+
* Render an issue's anchor as a single human/tool-readable string.
|
|
14
|
+
*
|
|
15
|
+
* - `docs/guide.md` — file only
|
|
16
|
+
* - `docs/guide.md:24` — file + line, the `file:line` convention every editor
|
|
17
|
+
* and `grep -n` consumer already knows how to jump to
|
|
18
|
+
* - `SKILL.md (frontmatter.description)` — file + document-internal field
|
|
19
|
+
* - `(frontmatter.description)` — field with no known file (should not happen
|
|
20
|
+
* for skills-lane issues, but the renderer must not silently drop it)
|
|
21
|
+
*
|
|
22
|
+
* Returns `undefined` when the issue carries no anchor at all, so callers can
|
|
23
|
+
* skip the line entirely rather than print an empty label.
|
|
24
|
+
*/
|
|
25
|
+
export declare function formatIssueAnchor(issue: ValidationIssue): string | undefined;
|
|
26
|
+
//# sourceMappingURL=issue-anchor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-anchor.d.ts","sourceRoot":"","sources":["../../src/utils/issue-anchor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAe5E"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rendering for the four `ValidationIssue` anchors.
|
|
3
|
+
*
|
|
4
|
+
* `location` / `line` / `field` are independent fields on the issue (see the
|
|
5
|
+
* anchor contract on `ValidationIssue` in `@vibe-agent-toolkit/agent-schema`).
|
|
6
|
+
* Splitting them apart in the producers only pays off if the renderers put
|
|
7
|
+
* them back together — a `line` that no output surface prints is a `line` that,
|
|
8
|
+
* from the user's side, was deleted. This is the one place that join happens,
|
|
9
|
+
* so every command spells an anchor the same way.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Render an issue's anchor as a single human/tool-readable string.
|
|
13
|
+
*
|
|
14
|
+
* - `docs/guide.md` — file only
|
|
15
|
+
* - `docs/guide.md:24` — file + line, the `file:line` convention every editor
|
|
16
|
+
* and `grep -n` consumer already knows how to jump to
|
|
17
|
+
* - `SKILL.md (frontmatter.description)` — file + document-internal field
|
|
18
|
+
* - `(frontmatter.description)` — field with no known file (should not happen
|
|
19
|
+
* for skills-lane issues, but the renderer must not silently drop it)
|
|
20
|
+
*
|
|
21
|
+
* Returns `undefined` when the issue carries no anchor at all, so callers can
|
|
22
|
+
* skip the line entirely rather than print an empty label.
|
|
23
|
+
*/
|
|
24
|
+
export function formatIssueAnchor(issue) {
|
|
25
|
+
const hasLocation = issue.location !== undefined && issue.location !== '';
|
|
26
|
+
const hasField = issue.field !== undefined && issue.field !== '';
|
|
27
|
+
if (!hasLocation && !hasField) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
let anchor = hasLocation ? issue.location : '';
|
|
31
|
+
if (issue.line !== undefined) {
|
|
32
|
+
anchor = `${anchor}:${String(issue.line)}`;
|
|
33
|
+
}
|
|
34
|
+
if (hasField) {
|
|
35
|
+
anchor = anchor === '' ? `(${issue.field})` : `${anchor} (${issue.field})`;
|
|
36
|
+
}
|
|
37
|
+
return anchor;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=issue-anchor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-anchor.js","sourceRoot":"","sources":["../../src/utils/issue-anchor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAsB;IACtD,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE,CAAC;IAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;IACjE,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,GAAG,WAAW,CAAC,CAAC,CAAE,KAAK,CAAC,QAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7C,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAe,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,KAAe,GAAG,CAAC;IACjG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rendering for SETS of `ValidationIssue`s — the severity label, the set's
|
|
3
|
+
* heading, and the per-issue block.
|
|
4
|
+
*
|
|
5
|
+
* `issue-anchor.ts` answers "where is this issue?"; this module answers "what
|
|
6
|
+
* severity is it, and what is in this set?". Both exist because the answer has
|
|
7
|
+
* to be spelled identically by every command: two renderers that each invent
|
|
8
|
+
* their own severity prefix is exactly how `info` findings came to be printed
|
|
9
|
+
* as `[WARNING]` in `vat skills build` AND `vat claude plugin build`, and how a
|
|
10
|
+
* mixed set came to be labelled "post-build error(s)" wholesale.
|
|
11
|
+
*
|
|
12
|
+
* The failure mode these helpers exist to prevent is directional: every
|
|
13
|
+
* hand-rolled severity collapse in this codebase mapped the case it could not
|
|
14
|
+
* represent onto the REASSURING one (info ⇒ "warning", warnings ⇒ "all
|
|
15
|
+
* passed"). That is why none of it was ever reported — it produces silence, not
|
|
16
|
+
* a false alarm.
|
|
17
|
+
*/
|
|
18
|
+
import { type SeverityCounts, type ValidationIssue } from '@vibe-agent-toolkit/agent-schema';
|
|
19
|
+
import type { PackageSkillResult } from '@vibe-agent-toolkit/agent-skills';
|
|
20
|
+
/** Render an issue's own severity as itself. */
|
|
21
|
+
export declare function severityLabel(severity: ValidationIssue['severity']): string;
|
|
22
|
+
/**
|
|
23
|
+
* The severity distribution in prose: `1 error, 2 warnings, 3 info`.
|
|
24
|
+
*
|
|
25
|
+
* Zero buckets are omitted so the phrase names only what is present. An
|
|
26
|
+
* all-zero set returns `no findings` rather than an empty string, because an
|
|
27
|
+
* empty string silently disappears into whatever sentence embeds it.
|
|
28
|
+
*/
|
|
29
|
+
export declare function formatSeverityBreakdown(counts: SeverityCounts): string;
|
|
30
|
+
/**
|
|
31
|
+
* Heading for a set of issues: `3 post-build issues (1 error, 2 info)`.
|
|
32
|
+
*
|
|
33
|
+
* The breakdown is not decoration — it is the only part of the heading that
|
|
34
|
+
* cannot be wrong about a mixed set. `noun` qualifies the set ("post-build"),
|
|
35
|
+
* and is omitted entirely when empty.
|
|
36
|
+
*/
|
|
37
|
+
export declare function formatIssueSetHeading(issues: readonly ValidationIssue[], noun?: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Render one issue as its own lines, each prefixed with `indent`.
|
|
40
|
+
*
|
|
41
|
+
* Returns an array rather than writing, so a caller can pick its own stream and
|
|
42
|
+
* a unit test can assert over every line without capturing output.
|
|
43
|
+
*/
|
|
44
|
+
export declare function formatIssueLines(issue: ValidationIssue, indent?: string): string[];
|
|
45
|
+
/**
|
|
46
|
+
* Render the run-level findings section — findings that belong to the whole
|
|
47
|
+
* invocation rather than to any one skill (ALLOW_UNUSED is the only producer).
|
|
48
|
+
*
|
|
49
|
+
* Shared by `vat skills validate` and `vat skills build` so the two commands
|
|
50
|
+
* name the same concept the same way. Attributing these to a skill is the
|
|
51
|
+
* misreading the heading exists to prevent: `validation.allow` is declared once
|
|
52
|
+
* for the package, so an entry that matched nothing is a fact about the run.
|
|
53
|
+
*
|
|
54
|
+
* Returns `[]` for an empty set; callers own their surrounding blank lines.
|
|
55
|
+
*/
|
|
56
|
+
export declare function formatRunIssueLines(runIssues: readonly ValidationIssue[]): string[];
|
|
57
|
+
/**
|
|
58
|
+
* Every post-build finding a `PackageSkillResult` carries, from BOTH channels.
|
|
59
|
+
*
|
|
60
|
+
* `hasErrors` is the OR of two independent sets — the packager's own framework
|
|
61
|
+
* run (`postBuildIssues`: link exclusions, unreferenced files, broken packaged
|
|
62
|
+
* links) and the full validation of the built tree (`postBuildValidation`). A
|
|
63
|
+
* renderer that walks only `postBuildIssues` therefore prints NOTHING for a
|
|
64
|
+
* build that failed purely on `postBuildValidation`: the user is told the build
|
|
65
|
+
* failed and shown no reason. Reading both is the whole point of this helper.
|
|
66
|
+
*
|
|
67
|
+
* `postBuildValidation.allErrors` is the full emitted set including `info`
|
|
68
|
+
* (see its doc comment — the name lies), so info findings survive here.
|
|
69
|
+
*/
|
|
70
|
+
export declare function collectPostBuildIssues(result: PackageSkillResult): ValidationIssue[];
|
|
71
|
+
/**
|
|
72
|
+
* A compact count-only projection of one asset's findings, for summary output.
|
|
73
|
+
*
|
|
74
|
+
* Deliberately does NOT carry the asset's name: the three commands that publish
|
|
75
|
+
* these rows (`vat skills validate`, `vat claude marketplace validate`,
|
|
76
|
+
* `vat resources validate`) each key their row by a different identity — a skill
|
|
77
|
+
* name, a plugin name, a file path. A projection that named the asset would have
|
|
78
|
+
* to pick one, and the two lanes it did not fit would fork their own copy, which
|
|
79
|
+
* is how the severity collapse came to be spelled five different ways.
|
|
80
|
+
*
|
|
81
|
+
* A zero bucket is an ABSENT key, never `0`. Serialized as YAML, three zero
|
|
82
|
+
* columns per asset is what makes a summary unreadable at corpus scale, and
|
|
83
|
+
* `errors: 0` beside a red exit code reads as a contradiction rather than as the
|
|
84
|
+
* "this asset is not the one" it means. `exactOptionalPropertyTypes` is on, so
|
|
85
|
+
* these are built by spread — assigning `undefined` would emit the key.
|
|
86
|
+
*/
|
|
87
|
+
export interface FindingCountSummary {
|
|
88
|
+
errors?: number;
|
|
89
|
+
warnings?: number;
|
|
90
|
+
info?: number;
|
|
91
|
+
/** Per-code tally, ordered descending by count then by code name. */
|
|
92
|
+
codes: Record<string, number>;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Project a set of issues onto its counts: severity buckets plus a per-code tally.
|
|
96
|
+
*
|
|
97
|
+
* Severity counting delegates to `countBySeverity` — there must be exactly one
|
|
98
|
+
* severity collapse in this codebase (see this module's header). That delegation
|
|
99
|
+
* carries its rule with it: `ignore` findings land in NO severity bucket, because
|
|
100
|
+
* the adopter's `validation.allow` config silenced them.
|
|
101
|
+
*
|
|
102
|
+
* They do still appear in `codes`, because they were emitted — a code the adopter
|
|
103
|
+
* allow-listed would otherwise be invisible in every summary, which is the one
|
|
104
|
+
* place a reviewer would look to notice an allow-list that has quietly grown.
|
|
105
|
+
*
|
|
106
|
+
* `codes` is ordered descending by count, ties broken by code name ascending.
|
|
107
|
+
* Insertion order is the YAML serialization order, so the ordering is the feature:
|
|
108
|
+
* the first row names the dominant finding without the reader tallying anything.
|
|
109
|
+
*/
|
|
110
|
+
export declare function summarizeFindings(issues: readonly ValidationIssue[]): FindingCountSummary;
|
|
111
|
+
/**
|
|
112
|
+
* The findings a human-facing report renders IN FULL at a given verbosity.
|
|
113
|
+
*
|
|
114
|
+
* One policy, spelled once, because the three verbs that report findings —
|
|
115
|
+
* `vat skills validate`, `vat skills build`, `vat audit` — each grew their own
|
|
116
|
+
* answer and landed on three different ones: validate collapsed every severity
|
|
117
|
+
* into a per-skill count line, while build and audit printed every occurrence.
|
|
118
|
+
* On a 90-skill adopter that read as 804 lines against 6,552 and 26,480, for
|
|
119
|
+
* the same corpus.
|
|
120
|
+
*
|
|
121
|
+
* The rule is asymmetric on purpose, and the asymmetry is the whole point:
|
|
122
|
+
*
|
|
123
|
+
* - **`error` is always rendered in full**, at every verbosity. An error is what
|
|
124
|
+
* failed the run, there are few of them, and every one is actionable. Collapsing
|
|
125
|
+
* an error into a count means the reader must re-run with a flag to learn what
|
|
126
|
+
* broke — which is strictly worse than the verbosity it was meant to fix. This
|
|
127
|
+
* is the direction the module header warns about: a collapse that hides the
|
|
128
|
+
* thing you needed produces silence, not a false alarm.
|
|
129
|
+
* - **`warning` and `info` collapse into the caller's summary line** unless
|
|
130
|
+
* `verbose`. These are the high-cardinality findings (one adopter skill carries
|
|
131
|
+
* 348 `LINK_DROPPED_BY_DEPTH` warnings alone), and a count plus a per-code tally
|
|
132
|
+
* answers "what is going on here?" without the reader scrolling past 348 near-
|
|
133
|
+
* identical blocks.
|
|
134
|
+
* - **`ignore` never renders**, at any verbosity: the adopter's `validation.allow`
|
|
135
|
+
* config silenced it deliberately. It stays visible in `summarizeFindings`'
|
|
136
|
+
* `codes` tally, which is where a quietly-growing allow-list is noticed.
|
|
137
|
+
*
|
|
138
|
+
* This decides only WHICH findings are rendered, never HOW. Each lane keeps its
|
|
139
|
+
* own heading and summary line — those legitimately differ — so this can be shared
|
|
140
|
+
* without forcing one layout onto three commands.
|
|
141
|
+
*
|
|
142
|
+
* The machine-readable document is NOT filtered by this. `vat audit`'s YAML and
|
|
143
|
+
* `vat skills build`'s `issueCounts` carry every finding at every verbosity;
|
|
144
|
+
* anything else would silently break consumers that parse them.
|
|
145
|
+
*/
|
|
146
|
+
export declare function issuesToRenderAtVerbosity(issues: readonly ValidationIssue[], verbose: boolean): readonly ValidationIssue[];
|
|
147
|
+
/** Sum severity counts across lanes (per-skill → per-plugin → per-run). */
|
|
148
|
+
export declare function sumSeverityCounts(counts: readonly SeverityCounts[]): SeverityCounts;
|
|
149
|
+
//# sourceMappingURL=issue-rendering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-rendering.d.ts","sourceRoot":"","sources":["../../src/utils/issue-rendering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAiB3E,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,MAAM,CAE3E;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAYtE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAKR;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,SAAK,GAAG,MAAM,EAAE,CAY9E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,EAAE,CAUnF;AAcD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,GAAG,eAAe,EAAE,CAapF;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,GAAG,mBAAmB,CAuBzF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,OAAO,EAAE,OAAO,GACf,SAAS,eAAe,EAAE,CAI5B;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,GAAG,cAAc,CASnF"}
|