@vibe-agent-toolkit/cli 0.1.0-rc.10

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 (162) hide show
  1. package/README.md +125 -0
  2. package/dist/bin/vat.d.ts +18 -0
  3. package/dist/bin/vat.d.ts.map +1 -0
  4. package/dist/bin/vat.js +174 -0
  5. package/dist/bin/vat.js.map +1 -0
  6. package/dist/bin.d.ts +7 -0
  7. package/dist/bin.d.ts.map +1 -0
  8. package/dist/bin.js +108 -0
  9. package/dist/bin.js.map +1 -0
  10. package/dist/commands/agent/audit.d.ts +9 -0
  11. package/dist/commands/agent/audit.d.ts.map +1 -0
  12. package/dist/commands/agent/audit.js +139 -0
  13. package/dist/commands/agent/audit.js.map +1 -0
  14. package/dist/commands/agent/build.d.ts +13 -0
  15. package/dist/commands/agent/build.d.ts.map +1 -0
  16. package/dist/commands/agent/build.js +52 -0
  17. package/dist/commands/agent/build.js.map +1 -0
  18. package/dist/commands/agent/help.d.ts +5 -0
  19. package/dist/commands/agent/help.d.ts.map +1 -0
  20. package/dist/commands/agent/help.js +10 -0
  21. package/dist/commands/agent/help.js.map +1 -0
  22. package/dist/commands/agent/import.d.ts +10 -0
  23. package/dist/commands/agent/import.d.ts.map +1 -0
  24. package/dist/commands/agent/import.js +50 -0
  25. package/dist/commands/agent/import.js.map +1 -0
  26. package/dist/commands/agent/index.d.ts +7 -0
  27. package/dist/commands/agent/index.d.ts.map +1 -0
  28. package/dist/commands/agent/index.js +293 -0
  29. package/dist/commands/agent/index.js.map +1 -0
  30. package/dist/commands/agent/install.d.ts +15 -0
  31. package/dist/commands/agent/install.d.ts.map +1 -0
  32. package/dist/commands/agent/install.js +107 -0
  33. package/dist/commands/agent/install.js.map +1 -0
  34. package/dist/commands/agent/installed.d.ts +13 -0
  35. package/dist/commands/agent/installed.d.ts.map +1 -0
  36. package/dist/commands/agent/installed.js +106 -0
  37. package/dist/commands/agent/installed.js.map +1 -0
  38. package/dist/commands/agent/list.d.ts +8 -0
  39. package/dist/commands/agent/list.d.ts.map +1 -0
  40. package/dist/commands/agent/list.js +41 -0
  41. package/dist/commands/agent/list.js.map +1 -0
  42. package/dist/commands/agent/run.d.ts +17 -0
  43. package/dist/commands/agent/run.d.ts.map +1 -0
  44. package/dist/commands/agent/run.js +44 -0
  45. package/dist/commands/agent/run.js.map +1 -0
  46. package/dist/commands/agent/uninstall.d.ts +13 -0
  47. package/dist/commands/agent/uninstall.d.ts.map +1 -0
  48. package/dist/commands/agent/uninstall.js +48 -0
  49. package/dist/commands/agent/uninstall.js.map +1 -0
  50. package/dist/commands/agent/validate.d.ts +8 -0
  51. package/dist/commands/agent/validate.d.ts.map +1 -0
  52. package/dist/commands/agent/validate.js +51 -0
  53. package/dist/commands/agent/validate.js.map +1 -0
  54. package/dist/commands/rag/clear-command.d.ts +10 -0
  55. package/dist/commands/rag/clear-command.d.ts.map +1 -0
  56. package/dist/commands/rag/clear-command.js +22 -0
  57. package/dist/commands/rag/clear-command.js.map +1 -0
  58. package/dist/commands/rag/command-helpers.d.ts +27 -0
  59. package/dist/commands/rag/command-helpers.d.ts.map +1 -0
  60. package/dist/commands/rag/command-helpers.js +58 -0
  61. package/dist/commands/rag/command-helpers.js.map +1 -0
  62. package/dist/commands/rag/help.d.ts +5 -0
  63. package/dist/commands/rag/help.d.ts.map +1 -0
  64. package/dist/commands/rag/help.js +10 -0
  65. package/dist/commands/rag/help.js.map +1 -0
  66. package/dist/commands/rag/index-command.d.ts +10 -0
  67. package/dist/commands/rag/index-command.d.ts.map +1 -0
  68. package/dist/commands/rag/index-command.js +49 -0
  69. package/dist/commands/rag/index-command.js.map +1 -0
  70. package/dist/commands/rag/index.d.ts +7 -0
  71. package/dist/commands/rag/index.d.ts.map +1 -0
  72. package/dist/commands/rag/index.js +168 -0
  73. package/dist/commands/rag/index.js.map +1 -0
  74. package/dist/commands/rag/query-command.d.ts +11 -0
  75. package/dist/commands/rag/query-command.d.ts.map +1 -0
  76. package/dist/commands/rag/query-command.js +54 -0
  77. package/dist/commands/rag/query-command.js.map +1 -0
  78. package/dist/commands/rag/stats-command.d.ts +10 -0
  79. package/dist/commands/rag/stats-command.d.ts.map +1 -0
  80. package/dist/commands/rag/stats-command.js +25 -0
  81. package/dist/commands/rag/stats-command.js.map +1 -0
  82. package/dist/commands/resources/command-helpers.d.ts +5 -0
  83. package/dist/commands/resources/command-helpers.d.ts.map +1 -0
  84. package/dist/commands/resources/command-helpers.js +6 -0
  85. package/dist/commands/resources/command-helpers.js.map +1 -0
  86. package/dist/commands/resources/help.d.ts +5 -0
  87. package/dist/commands/resources/help.d.ts.map +1 -0
  88. package/dist/commands/resources/help.js +10 -0
  89. package/dist/commands/resources/help.js.map +1 -0
  90. package/dist/commands/resources/index.d.ts +7 -0
  91. package/dist/commands/resources/index.d.ts.map +1 -0
  92. package/dist/commands/resources/index.js +64 -0
  93. package/dist/commands/resources/index.js.map +1 -0
  94. package/dist/commands/resources/scan.d.ts +9 -0
  95. package/dist/commands/resources/scan.d.ts.map +1 -0
  96. package/dist/commands/resources/scan.js +47 -0
  97. package/dist/commands/resources/scan.js.map +1 -0
  98. package/dist/commands/resources/validate.d.ts +9 -0
  99. package/dist/commands/resources/validate.d.ts.map +1 -0
  100. package/dist/commands/resources/validate.js +61 -0
  101. package/dist/commands/resources/validate.js.map +1 -0
  102. package/dist/index.d.ts +14 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +15 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/schemas/config.d.ts +1034 -0
  107. package/dist/schemas/config.d.ts.map +1 -0
  108. package/dist/schemas/config.js +135 -0
  109. package/dist/schemas/config.js.map +1 -0
  110. package/dist/utils/agent-discovery.d.ts +32 -0
  111. package/dist/utils/agent-discovery.d.ts.map +1 -0
  112. package/dist/utils/agent-discovery.js +108 -0
  113. package/dist/utils/agent-discovery.js.map +1 -0
  114. package/dist/utils/agent-runner.d.ts +22 -0
  115. package/dist/utils/agent-runner.d.ts.map +1 -0
  116. package/dist/utils/agent-runner.js +120 -0
  117. package/dist/utils/agent-runner.js.map +1 -0
  118. package/dist/utils/command-error.d.ts +19 -0
  119. package/dist/utils/command-error.d.ts.map +1 -0
  120. package/dist/utils/command-error.js +36 -0
  121. package/dist/utils/command-error.js.map +1 -0
  122. package/dist/utils/config-loader.d.ts +12 -0
  123. package/dist/utils/config-loader.d.ts.map +1 -0
  124. package/dist/utils/config-loader.js +39 -0
  125. package/dist/utils/config-loader.js.map +1 -0
  126. package/dist/utils/help-loader.d.ts +12 -0
  127. package/dist/utils/help-loader.d.ts.map +1 -0
  128. package/dist/utils/help-loader.js +39 -0
  129. package/dist/utils/help-loader.js.map +1 -0
  130. package/dist/utils/logger.d.ts +14 -0
  131. package/dist/utils/logger.d.ts.map +1 -0
  132. package/dist/utils/logger.js +21 -0
  133. package/dist/utils/logger.js.map +1 -0
  134. package/dist/utils/output.d.ts +20 -0
  135. package/dist/utils/output.d.ts.map +1 -0
  136. package/dist/utils/output.js +40 -0
  137. package/dist/utils/output.js.map +1 -0
  138. package/dist/utils/project-root.d.ts +11 -0
  139. package/dist/utils/project-root.d.ts.map +1 -0
  140. package/dist/utils/project-root.js +35 -0
  141. package/dist/utils/project-root.js.map +1 -0
  142. package/dist/utils/resource-loader.d.ts +30 -0
  143. package/dist/utils/resource-loader.d.ts.map +1 -0
  144. package/dist/utils/resource-loader.js +63 -0
  145. package/dist/utils/resource-loader.js.map +1 -0
  146. package/dist/utils/scope-locations.d.ts +17 -0
  147. package/dist/utils/scope-locations.d.ts.map +1 -0
  148. package/dist/utils/scope-locations.js +40 -0
  149. package/dist/utils/scope-locations.js.map +1 -0
  150. package/dist/utils/validate-help-files.d.ts +14 -0
  151. package/dist/utils/validate-help-files.d.ts.map +1 -0
  152. package/dist/utils/validate-help-files.js +61 -0
  153. package/dist/utils/validate-help-files.js.map +1 -0
  154. package/dist/version.d.ts +13 -0
  155. package/dist/version.d.ts.map +1 -0
  156. package/dist/version.js +27 -0
  157. package/dist/version.js.map +1 -0
  158. package/docs/agent.md +100 -0
  159. package/docs/index.md +309 -0
  160. package/docs/rag.md +449 -0
  161. package/docs/resources.md +158 -0
  162. package/package.json +68 -0
package/README.md ADDED
@@ -0,0 +1,125 @@
1
+ # @vibe-agent-toolkit/cli
2
+
3
+ Command-line interface for the Vibe Agent Toolkit.
4
+
5
+ ## Installation
6
+
7
+ Install the umbrella package globally:
8
+
9
+ ```bash
10
+ npm install -g vibe-agent-toolkit
11
+ ```
12
+
13
+ Or install CLI package directly in a project:
14
+
15
+ ```bash
16
+ npm install @vibe-agent-toolkit/cli
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ### Basic Commands
22
+
23
+ ```bash
24
+ # Show version (with context)
25
+ vat --version
26
+
27
+ # Show help
28
+ vat --help
29
+
30
+ # Show comprehensive help
31
+ vat --help --verbose
32
+ ```
33
+
34
+ ### Resources Commands
35
+
36
+ ```bash
37
+ # Scan markdown resources
38
+ vat resources scan docs/
39
+
40
+ # Validate link integrity
41
+ vat resources validate docs/
42
+
43
+ # Show resources help
44
+ vat resources --help --verbose
45
+ ```
46
+
47
+ ### RAG Commands
48
+
49
+ Index and query markdown documents using vector search:
50
+
51
+ ```bash
52
+ # Index markdown files into RAG database
53
+ vat rag index docs/
54
+
55
+ # Search the database
56
+ vat rag query "authentication methods"
57
+
58
+ # View database statistics
59
+ vat rag stats
60
+
61
+ # Clear database (rebuild required after)
62
+ vat rag clear
63
+ ```
64
+
65
+ **Database Options:**
66
+ - Default: `.rag-db` in project root
67
+ - Custom: `--db <path>` flag on any command
68
+
69
+ **Embedding Model:**
70
+ - Uses transformers.js with `all-MiniLM-L6-v2` (local, fast, free)
71
+ - 384-dimensional embeddings
72
+ - No API key required
73
+
74
+ ### Configuration
75
+
76
+ Create `vibe-agent-toolkit.config.yaml` at project root:
77
+
78
+ ```yaml
79
+ version: 1
80
+ resources:
81
+ include:
82
+ - "docs/**/*.md"
83
+ - "agents/**/README.md"
84
+ exclude:
85
+ - "node_modules/**"
86
+ - "**/test/fixtures/**"
87
+ validation:
88
+ checkLinks: true
89
+ checkAnchors: true
90
+ allowExternal: true
91
+ ```
92
+
93
+ ### Development Mode
94
+
95
+ Set `VAT_ROOT_DIR` to run from source:
96
+
97
+ ```bash
98
+ export VAT_ROOT_DIR=/path/to/vibe-agent-toolkit
99
+ vat --version # Shows: 0.1.0-dev (/path/to/vibe-agent-toolkit)
100
+ ```
101
+
102
+ ## Documentation
103
+
104
+ - [CLI Reference](./docs/) - Complete command documentation (markdown source)
105
+ - Run `vat --help --verbose` for the same documentation at runtime
106
+ - [Architecture](../../docs/architecture/README.md) - Package structure
107
+
108
+ ## Development
109
+
110
+ ```bash
111
+ # Build
112
+ bun run build
113
+
114
+ # Test
115
+ bun test
116
+ bun test:integration
117
+ bun test:system
118
+
119
+ # Prepare binaries after build
120
+ bun run prepare-cli-bin
121
+ ```
122
+
123
+ ## License
124
+
125
+ MIT © Jeff Dutton
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Smart vat wrapper with context-aware execution
4
+ *
5
+ * Automatically detects execution context and delegates to appropriate binary:
6
+ * - Developer mode: Inside vibe-agent-toolkit repo → packages/cli/dist/bin.js (unpackaged dev build)
7
+ * - Local install: Project has vibe-agent-toolkit → node_modules version (packaged)
8
+ * - Global install: Fallback → globally installed version (packaged)
9
+ *
10
+ * Features:
11
+ * - Version detection and comparison
12
+ * - Debug mode (VAT_DEBUG=1) shows resolution details
13
+ * - Works from any subdirectory within the repo
14
+ *
15
+ * Works in both git and non-git directories.
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=vat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vat.d.ts","sourceRoot":"","sources":["../../src/bin/vat.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG"}
@@ -0,0 +1,174 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Smart vat wrapper with context-aware execution
4
+ *
5
+ * Automatically detects execution context and delegates to appropriate binary:
6
+ * - Developer mode: Inside vibe-agent-toolkit repo → packages/cli/dist/bin.js (unpackaged dev build)
7
+ * - Local install: Project has vibe-agent-toolkit → node_modules version (packaged)
8
+ * - Global install: Fallback → globally installed version (packaged)
9
+ *
10
+ * Features:
11
+ * - Version detection and comparison
12
+ * - Debug mode (VAT_DEBUG=1) shows resolution details
13
+ * - Works from any subdirectory within the repo
14
+ *
15
+ * Works in both git and non-git directories.
16
+ */
17
+ import { spawnSync } from 'node:child_process';
18
+ import { existsSync, readFileSync } from 'node:fs';
19
+ import { resolve, dirname, join } from 'node:path';
20
+ import { fileURLToPath } from 'node:url';
21
+ import { findProjectRoot } from '../utils/project-root.js';
22
+ const __dirname = dirname(fileURLToPath(import.meta.url));
23
+ function spawnCli(binPath, context, contextPath) {
24
+ const env = {
25
+ ...process.env,
26
+ VAT_CONTEXT: context,
27
+ VAT_CONTEXT_PATH: contextPath,
28
+ };
29
+ // eslint-disable-next-line sonarjs/no-os-command-from-path -- node is always in PATH for CLI usage
30
+ const result = spawnSync('node', [binPath, ...process.argv.slice(2)], {
31
+ stdio: 'inherit',
32
+ env,
33
+ });
34
+ process.exit(result.status ?? 1);
35
+ }
36
+ /**
37
+ * Check if we're in vibe-agent-toolkit repo (developer mode)
38
+ * Simple detection: both wrapper and bin.js must exist in project structure
39
+ *
40
+ * @param projectRoot - Root directory of the project
41
+ * @returns Path to bin.js if detected, null otherwise
42
+ */
43
+ function getDevModeBinary(projectRoot) {
44
+ const wrapperPath = join(projectRoot, 'packages/cli/dist/bin/vat.js');
45
+ const binPath = join(projectRoot, 'packages/cli/dist/bin.js');
46
+ if (process.env['VAT_DEBUG'] === '1') {
47
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- checking project structure files for debug
48
+ console.error(`[vat debug] Dev check - wrapper: ${wrapperPath} (${existsSync(wrapperPath)})`);
49
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- checking project structure files for debug
50
+ console.error(`[vat debug] Dev check - bin: ${binPath} (${existsSync(binPath)})`);
51
+ }
52
+ // Both files must exist to confirm we're in vibe-agent-toolkit repo
53
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- checking project structure files
54
+ if (existsSync(wrapperPath) && existsSync(binPath)) {
55
+ return binPath;
56
+ }
57
+ return null;
58
+ }
59
+ /**
60
+ * Find local vibe-agent-toolkit installation in node_modules
61
+ * Walks up directory tree from project root
62
+ *
63
+ * @param projectRoot - Root directory to start searching from
64
+ * @returns Path to local bin.js if found, null otherwise
65
+ */
66
+ function findLocalInstall(projectRoot) {
67
+ let current = projectRoot;
68
+ while (true) {
69
+ const localBin = join(current, 'node_modules/@vibe-agent-toolkit/cli/dist/bin.js');
70
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- checking for local install
71
+ if (existsSync(localBin)) {
72
+ return localBin;
73
+ }
74
+ const parent = dirname(current);
75
+ if (parent === current) {
76
+ // Reached filesystem root
77
+ break;
78
+ }
79
+ current = parent;
80
+ }
81
+ return null;
82
+ }
83
+ /**
84
+ * Read version from package.json
85
+ * @param packageJsonPath - Path to package.json file
86
+ * @returns Version string or null if not found
87
+ */
88
+ function readVersion(packageJsonPath) {
89
+ try {
90
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- reading version from package.json
91
+ if (!existsSync(packageJsonPath)) {
92
+ return null;
93
+ }
94
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- reading version from package.json
95
+ const content = readFileSync(packageJsonPath, 'utf-8');
96
+ const pkg = JSON.parse(content);
97
+ return pkg.version ?? null;
98
+ }
99
+ catch {
100
+ return null;
101
+ }
102
+ }
103
+ /**
104
+ * Main entry point - detects context and executes appropriate binary
105
+ */
106
+ function main() {
107
+ const cwd = process.cwd();
108
+ const args = process.argv.slice(2);
109
+ const debug = process.env['VAT_DEBUG'] === '1';
110
+ // Priority 1: Explicit override via VAT_ROOT_DIR
111
+ if (process.env['VAT_ROOT_DIR']) {
112
+ const binPath = join(process.env['VAT_ROOT_DIR'], 'packages/cli/dist/bin.js');
113
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- dynamic path from env is expected
114
+ if (existsSync(binPath)) {
115
+ if (debug) {
116
+ console.error('[vat debug] Using VAT_ROOT_DIR override');
117
+ console.error(`[vat debug] Binary: ${binPath}`);
118
+ }
119
+ spawnCli(binPath, 'dev', process.env['VAT_ROOT_DIR']);
120
+ }
121
+ }
122
+ // Find project root from current working directory
123
+ const projectRoot = findProjectRoot(cwd) ?? cwd;
124
+ let binPath;
125
+ let context;
126
+ let binDir;
127
+ // Priority 2: Check for developer mode (inside vibe-agent-toolkit repo)
128
+ const devBin = getDevModeBinary(projectRoot);
129
+ if (devBin) {
130
+ binPath = devBin;
131
+ context = 'dev';
132
+ binDir = dirname(dirname(devBin)); // packages/cli/dist -> packages/cli
133
+ }
134
+ // Priority 3: Check for local install (node_modules)
135
+ else {
136
+ const localBin = findLocalInstall(projectRoot);
137
+ if (localBin) {
138
+ binPath = localBin;
139
+ context = 'local';
140
+ binDir = dirname(dirname(localBin)); // node_modules/@vibe-agent-toolkit/cli/dist -> node_modules/@vibe-agent-toolkit/cli
141
+ }
142
+ // Priority 4: Use global install (this script's location)
143
+ else {
144
+ binPath = resolve(__dirname, '../bin.js');
145
+ context = 'global';
146
+ binDir = dirname(__dirname); // dist -> cli root
147
+ }
148
+ }
149
+ // Read versions for comparison
150
+ // __dirname = dist/bin, so go up twice to reach package.json at cli root
151
+ const globalPkgPath = join(dirname(dirname(__dirname)), 'package.json');
152
+ const globalVersion = readVersion(globalPkgPath);
153
+ let localVersion = null;
154
+ if (context === 'local') {
155
+ const localPkgPath = join(binDir, 'package.json');
156
+ localVersion = readVersion(localPkgPath);
157
+ }
158
+ // Debug output
159
+ if (debug) {
160
+ console.error(`[vat debug] CWD: ${cwd}`);
161
+ console.error(`[vat debug] Project root: ${projectRoot}`);
162
+ console.error(`[vat debug] Context: ${context}`);
163
+ console.error(`[vat debug] Binary: ${binPath}`);
164
+ console.error(`[vat debug] Global version: ${globalVersion ?? 'unknown'}`);
165
+ console.error(`[vat debug] Local version: ${localVersion ?? 'N/A'}`);
166
+ console.error(`[vat debug] Args: ${args.join(' ')}`);
167
+ }
168
+ // Execute the binary with all arguments (only pass projectRoot for dev context)
169
+ const contextPath = context === 'dev' ? projectRoot : undefined;
170
+ spawnCli(binPath, context, contextPath);
171
+ }
172
+ // Run main function
173
+ main();
174
+ //# sourceMappingURL=vat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vat.js","sourceRoot":"","sources":["../../src/bin/vat.ts"],"names":[],"mappings":"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"}
package/dist/bin.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Main entry point for vat CLI
4
+ * Uses Commander.js for command structure
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
package/dist/bin.js ADDED
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Main entry point for vat CLI
4
+ * Uses Commander.js for command structure
5
+ */
6
+ import { Command } from 'commander';
7
+ import { createAgentCommand, showAgentVerboseHelp } from './commands/agent/index.js';
8
+ import { createRagCommand, showRagVerboseHelp } from './commands/rag/index.js';
9
+ import { createResourcesCommand, showResourcesVerboseHelp } from './commands/resources/index.js';
10
+ import { loadVerboseHelp } from './utils/help-loader.js';
11
+ import { createLogger } from './utils/logger.js';
12
+ import { version, getVersionString } from './version.js';
13
+ const program = new Command();
14
+ // Context detection from environment
15
+ const context = process.env['VAT_CONTEXT']
16
+ ? {
17
+ type: process.env['VAT_CONTEXT'],
18
+ path: process.env['VAT_CONTEXT_PATH'],
19
+ }
20
+ : null;
21
+ program
22
+ .name('vat')
23
+ .description('Agent-friendly toolkit for building, testing, and deploying portable AI agents')
24
+ .version(getVersionString(version, context), '-v, --version', 'Output version number')
25
+ .option('--debug', 'Enable debug logging')
26
+ .option('--verbose', 'Show verbose help (markdown format)')
27
+ .helpCommand(false) // Disable redundant 'help' command, use --help instead
28
+ .showHelpAfterError()
29
+ .configureOutput({
30
+ writeOut: (str) => process.stdout.write(str), // Help goes to stdout (pipeable)
31
+ writeErr: (str) => process.stderr.write(str), // Errors go to stderr
32
+ })
33
+ .addHelpText('after', `
34
+ Example:
35
+ $ vat resources validate docs/ # Validate markdown links (run before commit)
36
+
37
+ Environment:
38
+ VAT_DEBUG=1 # Show context detection details
39
+
40
+ For command details: vat resources --help
41
+ For comprehensive help: vat --help --verbose
42
+ For agent guidance: docs/cli/CLAUDE.md
43
+ `);
44
+ // Handle --help --verbose at root level only
45
+ // Don't handle --verbose if a subcommand was specified
46
+ const hasSubcommand = process.argv.slice(2).some(arg => !arg.startsWith('-'));
47
+ program.on('option:verbose', () => {
48
+ const opts = program.opts();
49
+ // Only show root verbose help if no subcommand is present
50
+ if (opts['verbose'] && !hasSubcommand && program.args.length === 0) {
51
+ showVerboseHelp();
52
+ process.exit(0);
53
+ }
54
+ });
55
+ // Special handling for "resources --verbose" before parsing
56
+ if (process.argv.includes('resources') && process.argv.includes('--verbose')) {
57
+ const argv = process.argv.slice(2);
58
+ const resourcesIndex = argv.indexOf('resources');
59
+ // Check if there's no subcommand after 'resources'
60
+ const afterResources = argv.slice(resourcesIndex + 1);
61
+ const hasSubcommand = afterResources.some(arg => !arg.startsWith('-'));
62
+ if (!hasSubcommand) {
63
+ showResourcesVerboseHelp();
64
+ process.exit(0);
65
+ }
66
+ }
67
+ // Special handling for "rag --verbose" before parsing
68
+ if (process.argv.includes('rag') && process.argv.includes('--verbose')) {
69
+ const argv = process.argv.slice(2);
70
+ const ragIndex = argv.indexOf('rag');
71
+ // Check if there's no subcommand after 'rag'
72
+ const afterRag = argv.slice(ragIndex + 1);
73
+ const hasSubcommand = afterRag.some(arg => !arg.startsWith('-'));
74
+ if (!hasSubcommand) {
75
+ showRagVerboseHelp();
76
+ process.exit(0);
77
+ }
78
+ }
79
+ // Special handling for "agent --verbose" before parsing
80
+ if (process.argv.includes('agent') && process.argv.includes('--verbose')) {
81
+ const argv = process.argv.slice(2);
82
+ const agentIndex = argv.indexOf('agent');
83
+ // Check if there's no subcommand after 'agent'
84
+ const afterAgent = argv.slice(agentIndex + 1);
85
+ const hasSubcommand = afterAgent.some(arg => !arg.startsWith('-'));
86
+ if (!hasSubcommand) {
87
+ showAgentVerboseHelp();
88
+ process.exit(0);
89
+ }
90
+ }
91
+ // Add command groups
92
+ program.addCommand(createResourcesCommand());
93
+ program.addCommand(createRagCommand());
94
+ program.addCommand(createAgentCommand());
95
+ // Handle unknown commands
96
+ program.on('command:*', (operands) => {
97
+ const logger = createLogger();
98
+ logger.error(`error: unknown command '${operands[0]}'`);
99
+ logger.error('');
100
+ program.help({ error: true });
101
+ });
102
+ program.parse();
103
+ function showVerboseHelp() {
104
+ const helpContent = loadVerboseHelp(); // Loads from docs/cli/index.md
105
+ process.stdout.write(helpContent);
106
+ process.stdout.write('\n');
107
+ }
108
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Agent audit command - audits Claude Skills for quality and compatibility
3
+ */
4
+ export interface AuditCommandOptions {
5
+ debug?: boolean;
6
+ recursive?: boolean;
7
+ }
8
+ export declare function auditCommand(targetPath: string | undefined, options: AuditCommandOptions): Promise<void>;
9
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/audit.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoBf"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Agent audit command - audits Claude Skills for quality and compatibility
3
+ */
4
+ import * as path from 'node:path';
5
+ import { detectFormat } from '@vibe-agent-toolkit/discovery';
6
+ import { validateSkill } from '@vibe-agent-toolkit/runtime-claude-skills';
7
+ import { handleCommandError } from '../../utils/command-error.js';
8
+ import { createLogger } from '../../utils/logger.js';
9
+ import { writeYamlOutput } from '../../utils/output.js';
10
+ export async function auditCommand(targetPath, options) {
11
+ const logger = createLogger(options.debug ? { debug: true } : {});
12
+ const startTime = Date.now();
13
+ try {
14
+ const scanPath = targetPath ? path.resolve(targetPath) : process.cwd();
15
+ logger.debug(`Auditing Claude Skills at: ${scanPath}`);
16
+ // Get validation results
17
+ const results = await getValidationResults(scanPath, options.recursive ?? false, logger);
18
+ // Calculate and output summary
19
+ const summary = calculateSummary(results, startTime);
20
+ writeYamlOutput(summary);
21
+ // Log human-readable output and exit
22
+ handleAuditResults(results, summary, logger);
23
+ }
24
+ catch (error) {
25
+ handleCommandError(error, logger, startTime, 'AgentAudit');
26
+ }
27
+ }
28
+ async function getValidationResults(scanPath, recursive, logger) {
29
+ const format = detectFormat(scanPath);
30
+ if (format === 'claude-skill') {
31
+ logger.debug('Detected single Claude Skill');
32
+ const result = await validateSkill({ skillPath: scanPath });
33
+ return [result];
34
+ }
35
+ if (format === 'vat-agent') {
36
+ const skillPath = path.join(scanPath, 'SKILL.md');
37
+ logger.debug('Detected VAT agent, validating SKILL.md');
38
+ const result = await validateSkill({ skillPath, isVATGenerated: true });
39
+ return [result];
40
+ }
41
+ logger.debug('Scanning directory for Claude Skills');
42
+ return scanDirectory(scanPath, recursive, logger);
43
+ }
44
+ function calculateSummary(results, startTime) {
45
+ const successCount = results.filter((r) => r.status === 'success').length;
46
+ const warningCount = results.filter((r) => r.status === 'warning').length;
47
+ const errorCount = results.filter((r) => r.status === 'error').length;
48
+ const totalErrors = results.reduce((sum, r) => sum + r.issues.filter(i => i.severity === 'error').length, 0);
49
+ const totalWarnings = results.reduce((sum, r) => sum + r.issues.filter(i => i.severity === 'warning').length, 0);
50
+ const totalInfo = results.reduce((sum, r) => sum + r.issues.filter(i => i.severity === 'info').length, 0);
51
+ let status;
52
+ if (errorCount > 0) {
53
+ status = 'error';
54
+ }
55
+ else if (warningCount > 0) {
56
+ status = 'warning';
57
+ }
58
+ else {
59
+ status = 'success';
60
+ }
61
+ return {
62
+ status,
63
+ summary: {
64
+ filesScanned: results.length,
65
+ success: successCount,
66
+ warnings: warningCount,
67
+ errors: errorCount,
68
+ },
69
+ issues: {
70
+ errors: totalErrors,
71
+ warnings: totalWarnings,
72
+ info: totalInfo,
73
+ },
74
+ files: results,
75
+ duration: `${Date.now() - startTime}ms`,
76
+ };
77
+ }
78
+ function handleAuditResults(results, summary, logger) {
79
+ const { errors: errorCount, warnings: warningCount, success: successCount } = summary.summary;
80
+ if (errorCount > 0) {
81
+ logErrors(results, errorCount, logger);
82
+ process.exit(1);
83
+ }
84
+ if (warningCount > 0) {
85
+ logWarnings(results, warningCount, logger);
86
+ }
87
+ else {
88
+ logger.info(`Audit successful: ${successCount} file(s) passed`);
89
+ }
90
+ process.exit(0);
91
+ }
92
+ function logErrors(results, errorCount, logger) {
93
+ logger.error(`Audit failed: ${errorCount} file(s) with errors`);
94
+ const errorResults = results.filter((r) => r.status === 'error');
95
+ for (const result of errorResults) {
96
+ logger.error(`\n${result.path}:`);
97
+ const errorIssues = result.issues.filter((i) => i.severity === 'error');
98
+ logIssues(errorIssues, logger.error.bind(logger));
99
+ }
100
+ }
101
+ function logWarnings(results, warningCount, logger) {
102
+ logger.info(`Audit passed with warnings: ${warningCount} file(s)`);
103
+ const warningResults = results.filter((r) => r.status === 'warning');
104
+ for (const result of warningResults) {
105
+ logger.info(`\n${result.path}:`);
106
+ const warningIssues = result.issues.filter((i) => i.severity === 'warning');
107
+ logIssues(warningIssues, logger.info.bind(logger));
108
+ }
109
+ }
110
+ function logIssues(issues, logFn) {
111
+ for (const issue of issues) {
112
+ logFn(` [${issue.code}] ${issue.message}`);
113
+ if (issue.location) {
114
+ logFn(` at: ${issue.location}`);
115
+ }
116
+ if (issue.fix) {
117
+ logFn(` fix: ${issue.fix}`);
118
+ }
119
+ }
120
+ }
121
+ async function scanDirectory(dirPath, recursive, logger) {
122
+ const fs = await import('node:fs/promises');
123
+ const results = [];
124
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
125
+ for (const entry of entries) {
126
+ const fullPath = path.join(dirPath, entry.name);
127
+ if (entry.isFile() && entry.name === 'SKILL.md') {
128
+ logger.debug(`Validating: ${fullPath}`);
129
+ const result = await validateSkill({ skillPath: fullPath });
130
+ results.push(result);
131
+ }
132
+ else if (entry.isDirectory() && recursive) {
133
+ const subResults = await scanDirectory(fullPath, recursive, logger);
134
+ results.push(...subResults);
135
+ }
136
+ }
137
+ return results;
138
+ }
139
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/commands/agent/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Agent build command - Package agents for deployment targets
3
+ */
4
+ export interface BuildCommandOptions {
5
+ target?: string;
6
+ output?: string;
7
+ debug?: boolean;
8
+ }
9
+ /**
10
+ * Build an agent for a specific deployment target
11
+ */
12
+ export declare function buildCommand(pathOrName: string, options: BuildCommandOptions): Promise<void>;
13
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/build.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA2Cf"}