@loomweaver/mcp 0.14.2 → 0.14.3

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 (3) hide show
  1. package/README.md +3 -1
  2. package/dist/main.mjs +67 -49
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -9,7 +9,9 @@ is not inside this repo (a chat assistant, a remote client) can scaffold and val
9
9
  - `list_generators` — the available generators.
10
10
  - `scaffold_weaver` · `scaffold_frame_plugin` · `scaffold_distribution` · `scaffold_auth_source` ·
11
11
  `scaffold_settings_store` · `scaffold_theme` · `scaffold_layout` — return a **file map**
12
- (`path -> content`); the client writes the files into its project.
12
+ (`path -> content`); the client writes the files into its project. The server cannot read that
13
+ project, so pass `scaffold_weaver` the selector prefix your application declares as `prefix`;
14
+ without it the components are named `app-…`.
13
15
  - `validate_manifest` · `validate_i18n` · `validate_catalog` · `validate_commands` — return structured `Finding[]`.
14
16
 
15
17
  ## Consume from npm (product repos)
package/dist/main.mjs CHANGED
@@ -31645,6 +31645,45 @@ function i18nFile(weaver) {
31645
31645
  return JSON.stringify(i18nBundle(weaver), null, 2) + "\n";
31646
31646
  }
31647
31647
 
31648
+ // ../devkit/src/lib/scaffolds/scaffold-values.ts
31649
+ var NEUTRAL_PREFIX = "app";
31650
+ function stringValue(values, name) {
31651
+ const value = values[name];
31652
+ return typeof value === "string" ? value : void 0;
31653
+ }
31654
+ function booleanValue(values, name) {
31655
+ const value = values[name];
31656
+ return typeof value === "boolean" ? value : void 0;
31657
+ }
31658
+ var PLACEMENT_OPTIONS = [
31659
+ {
31660
+ name: "directory",
31661
+ type: "string",
31662
+ description: "Project root, relative to the workspace root.",
31663
+ workspaceOnly: true
31664
+ },
31665
+ {
31666
+ name: "tags",
31667
+ type: "string",
31668
+ description: "Comma-separated Nx tags for the project.",
31669
+ workspaceOnly: true
31670
+ },
31671
+ {
31672
+ name: "unitTestRunner",
31673
+ type: "string",
31674
+ description: "Test wiring to emit. 'vitest' uses @nx/angular:unit-test; 'none' emits no test target.",
31675
+ choices: ["vitest", "none"],
31676
+ default: "vitest",
31677
+ workspaceOnly: true
31678
+ }
31679
+ ];
31680
+ var APP_OPTION = {
31681
+ name: "app",
31682
+ type: "string",
31683
+ description: "Application to drop into. Inferred when the workspace has exactly one.",
31684
+ workspaceOnly: true
31685
+ };
31686
+
31648
31687
  // ../devkit/src/lib/validate/manifest.ts
31649
31688
  var KNOWN_CAPABILITIES = [
31650
31689
  "contributions",
@@ -31804,6 +31843,18 @@ function deriveCapabilities(features) {
31804
31843
  }
31805
31844
  return KNOWN_CAPABILITIES.filter((capability) => set2.has(capability));
31806
31845
  }
31846
+ function resolvePrefix(prefix) {
31847
+ const trimmed = prefix?.trim();
31848
+ if (!trimmed) {
31849
+ return NEUTRAL_PREFIX;
31850
+ }
31851
+ if (!isKebabId(trimmed)) {
31852
+ throw new Error(
31853
+ `Selector prefix must be kebab-case (e.g. "acme"); got "${trimmed}".`
31854
+ );
31855
+ }
31856
+ return trimmed;
31857
+ }
31807
31858
  function resolveWeaverInput(input) {
31808
31859
  if (!isKebabId(input.id)) {
31809
31860
  throw new Error(
@@ -31819,7 +31870,7 @@ function resolveWeaverInput(input) {
31819
31870
  propertyName: toCamelCase(input.id),
31820
31871
  capabilities,
31821
31872
  features,
31822
- prefix: input.prefix?.trim() || "lw",
31873
+ prefix: resolvePrefix(input.prefix),
31823
31874
  importPath: input.importPath?.trim() || `@loomweaver/${input.id}-weaver`
31824
31875
  };
31825
31876
  }
@@ -32081,7 +32132,7 @@ function accessLine(weaver) {
32081
32132
  }
32082
32133
 
32083
32134
  // ../devkit/src/recipes/platform-version.ts
32084
- var PLATFORM_VERSION = "0.14.2";
32135
+ var PLATFORM_VERSION = "0.14.3";
32085
32136
 
32086
32137
  // ../devkit/src/recipes/readme-notes.ts
32087
32138
  var UNTAGGED_NOTE = [
@@ -33524,52 +33575,6 @@ var layout = {
33524
33575
  }
33525
33576
  };
33526
33577
 
33527
- // ../devkit/src/lib/scaffolds/scaffold-values.ts
33528
- function stringValue(values, name) {
33529
- const value = values[name];
33530
- return typeof value === "string" ? value : void 0;
33531
- }
33532
- function booleanValue(values, name) {
33533
- const value = values[name];
33534
- return typeof value === "boolean" ? value : void 0;
33535
- }
33536
- var PLACEMENT_OPTIONS = [
33537
- {
33538
- name: "directory",
33539
- type: "string",
33540
- description: "Project root, relative to the workspace root.",
33541
- workspaceOnly: true
33542
- },
33543
- {
33544
- name: "tags",
33545
- type: "string",
33546
- description: "Comma-separated Nx tags for the project.",
33547
- workspaceOnly: true
33548
- },
33549
- {
33550
- name: "prefix",
33551
- type: "string",
33552
- description: "Selector prefix for generated components and directives.",
33553
- default: "lw",
33554
- pattern: KEBAB_ID_PATTERN,
33555
- workspaceOnly: true
33556
- },
33557
- {
33558
- name: "unitTestRunner",
33559
- type: "string",
33560
- description: "Test wiring to emit. 'vitest' uses @nx/angular:unit-test; 'none' emits no test target.",
33561
- choices: ["vitest", "none"],
33562
- default: "vitest",
33563
- workspaceOnly: true
33564
- }
33565
- ];
33566
- var APP_OPTION = {
33567
- name: "app",
33568
- type: "string",
33569
- description: "Application to drop into. Inferred when the workspace has exactly one.",
33570
- workspaceOnly: true
33571
- };
33572
-
33573
33578
  // ../devkit/src/recipes/angular-distribution/scaffold.ts
33574
33579
  function distributionInput(values) {
33575
33580
  return {
@@ -33608,6 +33613,13 @@ var distributionScaffold = {
33608
33613
  description: "Compose into the application already at that path, replacing the bootstrap files this scaffold owns and merging its build targets. Without it an existing project is an error.",
33609
33614
  workspaceOnly: true
33610
33615
  },
33616
+ {
33617
+ name: "prefix",
33618
+ type: "string",
33619
+ description: "Selector prefix the application declares for its components, which a weaver generated into it takes. Defaults to 'app'.",
33620
+ pattern: KEBAB_ID_PATTERN,
33621
+ workspaceOnly: true
33622
+ },
33611
33623
  ...PLACEMENT_OPTIONS
33612
33624
  ],
33613
33625
  build: (values) => generate(angularDistribution, distributionInput(values)),
@@ -33771,6 +33783,12 @@ var weaverScaffold = {
33771
33783
  description: "Import path for the workspace alias. Defaults to the workspace scope plus the project name.",
33772
33784
  workspaceOnly: true
33773
33785
  },
33786
+ {
33787
+ name: "prefix",
33788
+ type: "string",
33789
+ description: "Selector prefix for the generated components: the one the application declares, as the prefix of its project in angular.json or project.json. Read from the workspace where it can be, else 'app'.",
33790
+ pattern: KEBAB_ID_PATTERN
33791
+ },
33774
33792
  APP_OPTION,
33775
33793
  ...PLACEMENT_OPTIONS
33776
33794
  ],
@@ -34570,7 +34588,7 @@ function inputSchema(descriptor) {
34570
34588
  function createMcpServer() {
34571
34589
  const server = new McpServer({
34572
34590
  name: "loomweaver-devkit",
34573
- version: "0.14.2"
34591
+ version: "0.14.3"
34574
34592
  });
34575
34593
  server.registerTool(
34576
34594
  "list_generators",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loomweaver/mcp",
3
- "version": "0.14.2",
3
+ "version": "0.14.3",
4
4
  "description": "LoomWeaver: open-source plugin platform for Angular workbenches. The MCP server: scaffolding and validation as tools, so an AI assistant in any product repo can build weavers without a checkout.",
5
5
  "keywords": [
6
6
  "loomweaver",