@cl-mcp/cli 2.0.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Marcin Milewicz
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # `@cl-mcp/cli` — MCP tools over the shell
2
+
3
+ Command-line access to component library metadata. A thin shell adapter over
4
+ `@cl-mcp/core`: every query command calls the **exact same tool handlers**
5
+ the MCP server dispatches to, so CLI and MCP output can never drift. Designed
6
+ for LLM agents with shell access — no MCP client required — as much as for
7
+ humans.
8
+
9
+ ## Help is written for agents
10
+
11
+ `cl-mcp --help` prints the global usage with a **recommended agent workflow**
12
+ (overview → find → get → validate) and the output/exit-code contract.
13
+ `cl-mcp help <command>` (or `cl-mcp <command> --help`) prints detailed,
14
+ example-driven help per command — including the semantics an agent must know
15
+ (e.g. `validate` checks prop *names* not values, spread props skip
16
+ required-prop checks, both `Dialog.Root` and `DialogRoot` name forms resolve).
17
+
18
+ ## Commands
19
+
20
+ ```bash
21
+ cl-mcp generate --config ./cl-mcp.yaml # run the analyzer (forwards to cl-mcp-analyze)
22
+ cl-mcp list-libraries [--json] # loaded libraries + frameworks
23
+ cl-mcp overview [--library ui] [--json] # quick reference (per-library sections when unscoped)
24
+ cl-mcp find "date picker" [--library ui] # semantic search; no query = list all [--list-all]
25
+ cl-mcp get Button forms:input [--detail api|full|examples|types]
26
+ cl-mcp validate --components Button --code '<Button disabled={true} />'
27
+ cl-mcp validate --components input --file snippet.html # or pipe via stdin
28
+ ```
29
+
30
+ `validate` dispatches by the library's framework: JSX validation for React
31
+ libraries, Angular template validation for Angular libraries. Component names
32
+ accept a `lib:Name` qualifier on multi-library data, and React compound names
33
+ work in both forms — `cl-mcp get Dialog.Root` and `cl-mcp get DialogRoot`
34
+ reach the same component; `validate` accepts both `<Dialog.Root>` and
35
+ `<DialogRoot>` tags.
36
+
37
+ ## Contract
38
+
39
+ - **stdout** — results (markdown by default, JSON via `--json`)
40
+ - **stderr** — logs and diagnostics
41
+ - **exit codes** — `0` ok, `1` tool rejected (validation errors, unknown component), `2` operational error (bad usage, missing metadata)
42
+
43
+ ## Metadata resolution
44
+
45
+ 1. `--metadata <path>` — a single `component-metadata.json`
46
+ 2. `--data-dir <path>` — a directory of per-library metadata (multi-library)
47
+ 3. `CL_MCP_METADATA_PATH` / `CL_MCP_DATA_DIR` environment variables
48
+ 4. `cl-mcp.yaml`'s `outputDir` (config discovered upward from cwd)
49
+ 5. `./data` convention relative to the monorepo root
50
+
51
+ ## Agent workflow
52
+
53
+ The recommended flow mirrors the MCP tools: `overview` → `find` → `get` →
54
+ `validate` before emitting any component code. Example:
55
+
56
+ ```bash
57
+ cl-mcp get Button --detail api # ground the API before writing JSX
58
+ cl-mcp validate --components Button --code '<Button disabled={true} variant="primary" />'
59
+ echo $? # 0 → safe to return the snippet
60
+ ```
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * `cl-mcp` bin entry — see main.ts for the command surface.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;GAEG"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * `cl-mcp` bin entry — see main.ts for the command surface.
4
+ */
5
+ import { runCli } from "./main.js";
6
+ runCli(process.argv.slice(2))
7
+ .then((code) => {
8
+ process.exit(code);
9
+ })
10
+ .catch((error) => {
11
+ console.error("Fatal:", error);
12
+ process.exit(2);
13
+ });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC1B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;IACb,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ /**
2
+ * `cl-mcp` CLI — command-line access to component library metadata.
3
+ *
4
+ * A thin shell adapter over `@cl-mcp/core`: every query command calls the
5
+ * EXACT same tool handlers the MCP server dispatches to, so CLI and MCP
6
+ * output can never drift. Designed for LLM agents with shell access (no MCP
7
+ * client required) as much as for humans.
8
+ *
9
+ * Contract:
10
+ * - results go to stdout (markdown by default, JSON via --json)
11
+ * - logs/diagnostics go to stderr
12
+ * - exit 0 = success, 1 = tool rejected (validation errors, unknown
13
+ * component), 2 = operational error (bad usage, missing metadata)
14
+ */
15
+ export interface CliIo {
16
+ out(text: string): void;
17
+ err(text: string): void;
18
+ }
19
+ export declare const USAGE = "cl-mcp \u2014 grounded component-library knowledge for LLM agents and humans\n\nUsage: cl-mcp <command> [options]\n cl-mcp help <command> # detailed help with examples (also: <command> --help)\n\nCommands:\n list-libraries What libraries are loaded (names, frameworks, component counts)\n overview Quick reference of ALL components \u2014 selectors/JSX names + main props\n find Search components by name, keyword, or intent (\"date picker\")\n get Full API of one or more components (props, callbacks, slots, types)\n validate Check a template/JSX snippet against the REAL component APIs\n generate Produce component-metadata.json from library sources (analyzer)\n\nRECOMMENDED AGENT WORKFLOW (before writing any component code):\n 1. cl-mcp overview # learn what exists\n 2. cl-mcp find \"searchable dropdown\" # narrow down by intent\n 3. cl-mcp get Select.Root # ground the exact API\n 4. cl-mcp validate --components Select.Root --code '<Select.Root ...>'\n \u2192 exit 0 means every prop is real; exit 1 lists what is hallucinated.\n\nOutput contract (script/agent friendly):\n stdout = the result (markdown by default, JSON via --json where supported)\n stderr = logs and diagnostics only\n exit 0 = success | 1 = tool rejected (validation failed, unknown component)\n | 2 = operational error (bad usage, metadata not found)\n\nMetadata resolution (all query commands, first match wins):\n --metadata <path> a single component-metadata.json\n --data-dir <path> directory with per-library metadata (multi-library mode)\n CL_MCP_METADATA_PATH / CL_MCP_DATA_DIR environment variables\n cl-mcp.yaml outputDir (config discovered upward from cwd), then ./data\n\nComponent names: use the public name (\"Dialog.Root\", \"mat-button\", \"button\").\nInternal/alternate forms resolve too (\"DialogRoot\" \u2192 Dialog.Root). On\nmulti-library data, qualify with the library (\"ui:Button\") or pass --library.";
20
+ /** Per-command help — written for LLM consumption: exact examples, semantics, pitfalls. */
21
+ export declare const COMMAND_HELP: Record<string, string>;
22
+ /** Test-only: allow reloading against a different data dir. */
23
+ export declare function __resetCliForTests(): void;
24
+ export declare function runCli(argv: string[], io?: CliIo): Promise<number>;
25
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAgBH,MAAM,WAAW,KAAK;IACpB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAOD,eAAO,MAAM,KAAK,k/DAkC4D,CAAC;AAE/E,2FAA2F;AAC3F,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyG/C,CAAC;AAsEF,+DAA+D;AAC/D,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AA8HD,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAE,KAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8DnF"}
package/dist/main.js ADDED
@@ -0,0 +1,388 @@
1
+ /**
2
+ * `cl-mcp` CLI — command-line access to component library metadata.
3
+ *
4
+ * A thin shell adapter over `@cl-mcp/core`: every query command calls the
5
+ * EXACT same tool handlers the MCP server dispatches to, so CLI and MCP
6
+ * output can never drift. Designed for LLM agents with shell access (no MCP
7
+ * client required) as much as for humans.
8
+ *
9
+ * Contract:
10
+ * - results go to stdout (markdown by default, JSON via --json)
11
+ * - logs/diagnostics go to stderr
12
+ * - exit 0 = success, 1 = tool rejected (validation errors, unknown
13
+ * component), 2 = operational error (bad usage, missing metadata)
14
+ */
15
+ import { spawnSync } from "node:child_process";
16
+ import fs from "node:fs";
17
+ import { createRequire } from "node:module";
18
+ import path from "node:path";
19
+ import { findWorkspaceConfig, loadWorkspaceConfig } from "@cl-mcp/analyzer";
20
+ import { TOOL_HANDLERS, getActiveLibrary, getLibraryNames, loadPreloadedMetadata, withLibrary, } from "@cl-mcp/core";
21
+ const defaultIo = {
22
+ out: (text) => process.stdout.write(`${text}\n`),
23
+ err: (text) => process.stderr.write(`${text}\n`),
24
+ };
25
+ export const USAGE = `cl-mcp — grounded component-library knowledge for LLM agents and humans
26
+
27
+ Usage: cl-mcp <command> [options]
28
+ cl-mcp help <command> # detailed help with examples (also: <command> --help)
29
+
30
+ Commands:
31
+ list-libraries What libraries are loaded (names, frameworks, component counts)
32
+ overview Quick reference of ALL components — selectors/JSX names + main props
33
+ find Search components by name, keyword, or intent ("date picker")
34
+ get Full API of one or more components (props, callbacks, slots, types)
35
+ validate Check a template/JSX snippet against the REAL component APIs
36
+ generate Produce component-metadata.json from library sources (analyzer)
37
+
38
+ RECOMMENDED AGENT WORKFLOW (before writing any component code):
39
+ 1. cl-mcp overview # learn what exists
40
+ 2. cl-mcp find "searchable dropdown" # narrow down by intent
41
+ 3. cl-mcp get Select.Root # ground the exact API
42
+ 4. cl-mcp validate --components Select.Root --code '<Select.Root ...>'
43
+ → exit 0 means every prop is real; exit 1 lists what is hallucinated.
44
+
45
+ Output contract (script/agent friendly):
46
+ stdout = the result (markdown by default, JSON via --json where supported)
47
+ stderr = logs and diagnostics only
48
+ exit 0 = success | 1 = tool rejected (validation failed, unknown component)
49
+ | 2 = operational error (bad usage, metadata not found)
50
+
51
+ Metadata resolution (all query commands, first match wins):
52
+ --metadata <path> a single component-metadata.json
53
+ --data-dir <path> directory with per-library metadata (multi-library mode)
54
+ CL_MCP_METADATA_PATH / CL_MCP_DATA_DIR environment variables
55
+ cl-mcp.yaml outputDir (config discovered upward from cwd), then ./data
56
+
57
+ Component names: use the public name ("Dialog.Root", "mat-button", "button").
58
+ Internal/alternate forms resolve too ("DialogRoot" → Dialog.Root). On
59
+ multi-library data, qualify with the library ("ui:Button") or pass --library.`;
60
+ /** Per-command help — written for LLM consumption: exact examples, semantics, pitfalls. */
61
+ export const COMMAND_HELP = {
62
+ "list-libraries": `cl-mcp list-libraries — what metadata is loaded
63
+
64
+ Usage: cl-mcp list-libraries [--json] [--metadata <path> | --data-dir <path>]
65
+
66
+ Returns one row per library: name (the qualifier for lib:Name), package,
67
+ framework (angular|react), component count. Start here on multi-library data
68
+ to learn the valid --library values.
69
+
70
+ Examples:
71
+ cl-mcp list-libraries --data-dir ./data
72
+ cl-mcp list-libraries --json # [{"name":"ui","framework":"react",...}]`,
73
+ overview: `cl-mcp overview — compact reference of every component
74
+
75
+ Usage: cl-mcp overview [--library <lib>] [--json] [--metadata <path> | --data-dir <path>]
76
+
77
+ Markdown table: selector/JSX name, type, main props (* = required), outputs,
78
+ notes (slots/deprecated). Multi-library data renders one section per library
79
+ unless --library scopes it. Use this FIRST — it prevents inventing components
80
+ that don't exist. --json returns the raw selector map + import cheatsheet.
81
+
82
+ Examples:
83
+ cl-mcp overview --library ui
84
+ cl-mcp overview --json --metadata ./data/ui/component-metadata.json`,
85
+ find: `cl-mcp find — search components by name, keyword, or intent
86
+
87
+ Usage: cl-mcp find [query words...] [--library <lib>] [--list-all]
88
+
89
+ Semantic search over names, selectors, and summaries; returns the top matches
90
+ with match reasons. No query = flat listing of everything (--list-all for a
91
+ compact version). Query can be natural language — synonyms like "dropdown"
92
+ expand to select/autocomplete-style components.
93
+
94
+ Examples:
95
+ cl-mcp find date picker
96
+ cl-mcp find "notification toast" --library ui
97
+ cl-mcp find --list-all`,
98
+ get: `cl-mcp get — the exact API of one or more components
99
+
100
+ Usage: cl-mcp get <name...> [--detail api|full|examples|types] [--library <lib>]
101
+
102
+ THE grounding step: returns every real prop/input (type, required, default,
103
+ literal-union values), callback/output, and content slot. Do NOT guess props —
104
+ if it is not listed here, it does not exist.
105
+
106
+ Names: public form preferred ("Dialog.Root", "button", "mat-card"); internal
107
+ ("DialogRoot") and selector forms resolve too; qualify as "lib:Name" on
108
+ multi-library data. Multiple names = one batched response.
109
+
110
+ Detail levels:
111
+ api (default) strict inputs/outputs/slots reference
112
+ full + inheritance, config tokens, related components, README
113
+ examples usage patterns and Storybook examples
114
+ types exported TypeScript types verbatim
115
+
116
+ Examples:
117
+ cl-mcp get Dialog.Root
118
+ cl-mcp get Button forms:input --detail full
119
+ cl-mcp get select --detail examples`,
120
+ validate: `cl-mcp validate — reject hallucinated props BEFORE returning code
121
+
122
+ Usage: cl-mcp validate --components <a,b,...> (--code '<...>' | --file <path> | stdin)
123
+ [--library <lib>]
124
+
125
+ Framework-dispatched: JSX validation for React libraries, Angular template
126
+ validation for Angular libraries. Checks prop/input NAMES (with spelling
127
+ suggestions) and required props. List EVERY component used in the snippet in
128
+ --components (comma-separated; both "Dialog.Root" and "DialogRoot" forms work).
129
+
130
+ Semantics an agent must know:
131
+ - exit 0 = all props exist; exit 1 = violations listed on stdout
132
+ - {...spread} props: required-prop checks are skipped for that element
133
+ - prop VALUES are not checked (variant="nonsense" passes; use \`get\` for
134
+ the allowed literal values)
135
+ - unregistered/DOM elements are ignored, never flagged
136
+ - Angular validation needs the optional \`@angular/compiler\` peer dependency
137
+ installed; without it the result is a single angular-compiler-unavailable
138
+ error (React/JSX validation is unaffected)
139
+
140
+ Examples:
141
+ cl-mcp validate --components Dialog.Root --code '<Dialog.Root defaultOpen={true} />'
142
+ cl-mcp validate --components button,card --file snippet.html
143
+ echo '<Button variant="ghost" />' | cl-mcp validate --components Button`,
144
+ generate: `cl-mcp generate — produce component-metadata.json from sources
145
+
146
+ Usage: cl-mcp generate [analyzer args...] (forwards to cl-mcp-analyze)
147
+
148
+ Single library:
149
+ cl-mcp generate --framework angular|react --path <src> --package <name>
150
+ [--prefix <sel-prefix>] [--storybook <dir>] [--docs <file>]
151
+ [--output <file>]
152
+ Workspace (multi-library):
153
+ cl-mcp generate --config ./cl-mcp.yaml
154
+ cl-mcp generate --lib libs/ui --lib libs/forms --output-dir ./data
155
+ cl-mcp generate --scan libs --output-dir ./data
156
+
157
+ Workspace mode auto-detects each library's framework and writes one metadata
158
+ file per library plus workspace-manifest.json (cross-library import graph).
159
+ React tip: have react + @types/react resolvable from the analyzed sources,
160
+ or prop-type resolution degrades sharply.`,
161
+ };
162
+ const BOOLEAN_FLAGS = new Set(["json", "list-all", "help"]);
163
+ function parseCliArgs(argv) {
164
+ const positionals = [];
165
+ const flags = new Map();
166
+ for (let i = 0; i < argv.length; i++) {
167
+ const token = argv[i];
168
+ if (!token.startsWith("--")) {
169
+ positionals.push(token);
170
+ continue;
171
+ }
172
+ const key = token.slice(2);
173
+ if (BOOLEAN_FLAGS.has(key)) {
174
+ flags.set(key, true);
175
+ continue;
176
+ }
177
+ const next = argv[i + 1];
178
+ if (next === undefined || next.startsWith("--")) {
179
+ throw new UsageError(`--${key} requires a value`);
180
+ }
181
+ flags.set(key, next);
182
+ i++;
183
+ }
184
+ return { positionals, flags };
185
+ }
186
+ class UsageError extends Error {
187
+ }
188
+ // ── Metadata loading ────────────────────────────────────────────────
189
+ let loaded = false;
190
+ function ensureMetadataLoaded(flags) {
191
+ if (loaded)
192
+ return;
193
+ const metadata = flags.get("metadata");
194
+ const dataDir = flags.get("data-dir");
195
+ if (typeof metadata === "string") {
196
+ process.env.CL_MCP_METADATA_PATH = path.resolve(metadata);
197
+ }
198
+ else if (typeof dataDir === "string") {
199
+ process.env.CL_MCP_DATA_DIR = path.resolve(dataDir);
200
+ }
201
+ else if (!process.env.CL_MCP_METADATA_PATH && !process.env.CL_MCP_DATA_DIR) {
202
+ // Fall back to the workspace config's outputDir when discoverable.
203
+ const configPath = findWorkspaceConfig(process.cwd());
204
+ if (configPath) {
205
+ try {
206
+ const { config, rootDir } = loadWorkspaceConfig(configPath);
207
+ const outputDir = path.resolve(rootDir, config.outputDir ?? "./data");
208
+ if (fs.existsSync(outputDir)) {
209
+ process.env.CL_MCP_DATA_DIR = outputDir;
210
+ }
211
+ }
212
+ catch {
213
+ // Invalid config — let the server-side resolution report the miss.
214
+ }
215
+ }
216
+ }
217
+ loadPreloadedMetadata();
218
+ loaded = true;
219
+ }
220
+ /** Test-only: allow reloading against a different data dir. */
221
+ export function __resetCliForTests() {
222
+ loaded = false;
223
+ }
224
+ // ── Tool invocation ─────────────────────────────────────────────────
225
+ function emit(response, io) {
226
+ io.out(response.content.map((c) => c.text).join("\n"));
227
+ return response.isError ? 1 : 0;
228
+ }
229
+ function callTool(name, args, io) {
230
+ const handler = TOOL_HANDLERS[name];
231
+ if (!handler)
232
+ throw new Error(`Unknown tool: ${name}`);
233
+ return emit(handler(args), io);
234
+ }
235
+ // ── Commands ────────────────────────────────────────────────────────
236
+ function commandGenerate(argv) {
237
+ const require = createRequire(import.meta.url);
238
+ const analyzerPkgPath = require.resolve("@cl-mcp/analyzer/package.json");
239
+ const analyzerPkg = JSON.parse(fs.readFileSync(analyzerPkgPath, "utf-8"));
240
+ const binRel = analyzerPkg.bin?.["cl-mcp-analyze"];
241
+ if (!binRel)
242
+ throw new Error("@cl-mcp/analyzer does not expose the cl-mcp-analyze bin");
243
+ const binPath = path.join(path.dirname(analyzerPkgPath), binRel);
244
+ const result = spawnSync(process.execPath, [binPath, ...argv], { stdio: "inherit" });
245
+ return result.status ?? 2;
246
+ }
247
+ function commandListLibraries(parsed, io) {
248
+ ensureMetadataLoaded(parsed.flags);
249
+ const rows = getLibraryNames().map((name) => withLibrary(name, () => {
250
+ const lib = getActiveLibrary();
251
+ return {
252
+ name,
253
+ packageName: lib.config.packageName,
254
+ framework: lib.config.framework ?? "angular",
255
+ components: Object.keys(lib.metadata.components).length,
256
+ metadataPath: lib.metadataPath,
257
+ };
258
+ }));
259
+ if (parsed.flags.has("json")) {
260
+ io.out(JSON.stringify(rows, null, 2));
261
+ }
262
+ else {
263
+ io.out("| Library | Package | Framework | Components |");
264
+ io.out("|---------|---------|-----------|------------|");
265
+ for (const row of rows) {
266
+ io.out(`| ${row.name} | ${row.packageName} | ${row.framework} | ${row.components} |`);
267
+ }
268
+ }
269
+ return 0;
270
+ }
271
+ function commandOverview(parsed, io) {
272
+ ensureMetadataLoaded(parsed.flags);
273
+ return callTool("get_library_overview", {
274
+ format: parsed.flags.has("json") ? "json" : "text",
275
+ library: parsed.flags.get("library"),
276
+ }, io);
277
+ }
278
+ function commandFind(parsed, io) {
279
+ ensureMetadataLoaded(parsed.flags);
280
+ const query = parsed.positionals.join(" ").trim();
281
+ return callTool("find_components", {
282
+ query: query || undefined,
283
+ list_all: parsed.flags.has("list-all") || undefined,
284
+ library: parsed.flags.get("library"),
285
+ }, io);
286
+ }
287
+ function commandGet(parsed, io) {
288
+ if (parsed.positionals.length === 0) {
289
+ throw new UsageError("get requires at least one component name");
290
+ }
291
+ ensureMetadataLoaded(parsed.flags);
292
+ const detail = parsed.flags.get("detail");
293
+ const shared = {
294
+ detail_level: typeof detail === "string" ? detail : undefined,
295
+ library: parsed.flags.get("library"),
296
+ };
297
+ if (parsed.positionals.length === 1) {
298
+ return callTool("get_component", { componentName: parsed.positionals[0], ...shared }, io);
299
+ }
300
+ return callTool("get_components_batch", { componentNames: parsed.positionals, ...shared }, io);
301
+ }
302
+ function commandValidate(parsed, io) {
303
+ const componentsFlag = parsed.flags.get("components");
304
+ if (typeof componentsFlag !== "string" || componentsFlag.trim() === "") {
305
+ throw new UsageError('validate requires --components "a,b,c"');
306
+ }
307
+ const componentNames = componentsFlag
308
+ .split(",")
309
+ .map((s) => s.trim())
310
+ .filter(Boolean);
311
+ let code;
312
+ const codeFlag = parsed.flags.get("code");
313
+ const fileFlag = parsed.flags.get("file");
314
+ if (typeof codeFlag === "string") {
315
+ code = codeFlag;
316
+ }
317
+ else if (typeof fileFlag === "string") {
318
+ code = fs.readFileSync(path.resolve(fileFlag), "utf-8");
319
+ }
320
+ else {
321
+ code = fs.readFileSync(0, "utf-8"); // stdin
322
+ }
323
+ ensureMetadataLoaded(parsed.flags);
324
+ return callTool("validate_usage", { code, componentNames, library: parsed.flags.get("library") }, io);
325
+ }
326
+ // ── Entry point ─────────────────────────────────────────────────────
327
+ export async function runCli(argv, io = defaultIo) {
328
+ const [command, ...rest] = argv;
329
+ if (!command || command === "--help") {
330
+ io.out(USAGE);
331
+ return command ? 0 : 2;
332
+ }
333
+ // `help` / `help <command>` — detailed, example-driven help per command.
334
+ if (command === "help") {
335
+ const topic = rest[0];
336
+ if (topic && COMMAND_HELP[topic]) {
337
+ io.out(COMMAND_HELP[topic]);
338
+ }
339
+ else if (topic) {
340
+ io.err(`Unknown command: ${topic}\n\n${USAGE}`);
341
+ return 2;
342
+ }
343
+ else {
344
+ io.out(USAGE);
345
+ }
346
+ return 0;
347
+ }
348
+ try {
349
+ // `generate` forwards argv verbatim (the analyzer CLI has its own parser) —
350
+ // except --help, which shows our generate help instead of spawning.
351
+ if (command === "generate") {
352
+ if (rest.includes("--help")) {
353
+ io.out(COMMAND_HELP.generate);
354
+ return 0;
355
+ }
356
+ return commandGenerate(rest);
357
+ }
358
+ const parsed = parseCliArgs(rest);
359
+ if (parsed.flags.has("help")) {
360
+ io.out(COMMAND_HELP[command] ?? USAGE);
361
+ return 0;
362
+ }
363
+ switch (command) {
364
+ case "list-libraries":
365
+ return commandListLibraries(parsed, io);
366
+ case "overview":
367
+ return commandOverview(parsed, io);
368
+ case "find":
369
+ return commandFind(parsed, io);
370
+ case "get":
371
+ return commandGet(parsed, io);
372
+ case "validate":
373
+ return commandValidate(parsed, io);
374
+ default:
375
+ io.err(`Unknown command: ${command}\n\n${USAGE}`);
376
+ return 2;
377
+ }
378
+ }
379
+ catch (error) {
380
+ if (error instanceof UsageError) {
381
+ io.err(`Error: ${error.message}\n\n${USAGE}`);
382
+ return 2;
383
+ }
384
+ io.err(`Error: ${error instanceof Error ? error.message : String(error)}`);
385
+ return 2;
386
+ }
387
+ }
388
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@cl-mcp/cli",
3
+ "version": "2.0.0",
4
+ "description": "Command-line access to component library metadata — the same tools as the MCP server, for agents and humans without an MCP client",
5
+ "keywords": ["mcp", "cli", "component-library", "metadata", "angular", "react"],
6
+ "license": "MIT",
7
+ "author": "Marcin Milewicz",
8
+ "homepage": "https://github.com/marcinmilewicz/cl-mcp/tree/main/packages/cli#readme",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/marcinmilewicz/cl-mcp.git",
12
+ "directory": "packages/cli"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/marcinmilewicz/cl-mcp/issues"
16
+ },
17
+ "type": "module",
18
+ "main": "./dist/main.js",
19
+ "types": "./dist/main.d.ts",
20
+ "bin": {
21
+ "cl-mcp": "./dist/index.js"
22
+ },
23
+ "files": ["dist", "README.md", "LICENSE"],
24
+ "engines": {
25
+ "node": ">=18"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "scripts": {
31
+ "build": "tsc",
32
+ "test": "vitest run",
33
+ "prepublishOnly": "npm run build"
34
+ },
35
+ "dependencies": {
36
+ "@cl-mcp/analyzer": "^2.0.0",
37
+ "@cl-mcp/core": "^2.0.0"
38
+ }
39
+ }