@angular/cli 22.0.0-next.6 → 22.0.0-next.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.
Files changed (79) hide show
  1. package/bin/ng.js +2 -2
  2. package/lib/config/schema.json +10 -1
  3. package/lib/config/workspace-schema.d.ts +4 -0
  4. package/package.json +17 -17
  5. package/src/commands/mcp/devserver.js +1 -1
  6. package/src/commands/mcp/devserver.js.map +1 -1
  7. package/src/commands/mcp/host.d.ts +8 -12
  8. package/src/commands/mcp/host.js +96 -11
  9. package/src/commands/mcp/host.js.map +1 -1
  10. package/src/commands/mcp/mcp-server.d.ts +0 -20
  11. package/src/commands/mcp/mcp-server.js +38 -15
  12. package/src/commands/mcp/mcp-server.js.map +1 -1
  13. package/src/commands/mcp/resources/ai-tutor.md +5 -7
  14. package/src/commands/mcp/tools/build.js +2 -1
  15. package/src/commands/mcp/tools/build.js.map +1 -1
  16. package/src/commands/mcp/tools/devserver/devserver-start.js +1 -0
  17. package/src/commands/mcp/tools/devserver/devserver-start.js.map +1 -1
  18. package/src/commands/mcp/tools/devserver/devserver-stop.js +1 -0
  19. package/src/commands/mcp/tools/devserver/devserver-stop.js.map +1 -1
  20. package/src/commands/mcp/tools/devserver/devserver-wait-for-build.js +1 -0
  21. package/src/commands/mcp/tools/devserver/devserver-wait-for-build.js.map +1 -1
  22. package/src/commands/mcp/tools/e2e.js +2 -1
  23. package/src/commands/mcp/tools/e2e.js.map +1 -1
  24. package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.d.ts +2 -1
  25. package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.js +2 -2
  26. package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.js.map +1 -1
  27. package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-test-file.d.ts +3 -2
  28. package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-test-file.js +8 -8
  29. package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-test-file.js.map +1 -1
  30. package/src/commands/mcp/tools/onpush-zoneless-migration/ts-utils.d.ts +2 -1
  31. package/src/commands/mcp/tools/onpush-zoneless-migration/ts-utils.js +2 -3
  32. package/src/commands/mcp/tools/onpush-zoneless-migration/ts-utils.js.map +1 -1
  33. package/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.d.ts +2 -1
  34. package/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.js +21 -21
  35. package/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.js.map +1 -1
  36. package/src/commands/mcp/tools/test.js +1 -1
  37. package/src/commands/mcp/tools/test.js.map +1 -1
  38. package/src/commands/mcp/workspace-utils.d.ts +2 -1
  39. package/src/commands/mcp/workspace-utils.js +43 -1
  40. package/src/commands/mcp/workspace-utils.js.map +1 -1
  41. package/src/package-managers/package-manager-descriptor.d.ts +7 -1
  42. package/src/package-managers/package-manager-descriptor.js +2 -0
  43. package/src/package-managers/package-manager-descriptor.js.map +1 -1
  44. package/src/package-managers/package-manager.d.ts +4 -0
  45. package/src/package-managers/package-manager.js +26 -1
  46. package/src/package-managers/package-manager.js.map +1 -1
  47. package/src/package-managers/parsers.d.ts +3 -6
  48. package/src/package-managers/parsers.js +84 -7
  49. package/src/package-managers/parsers.js.map +1 -1
  50. package/src/utilities/node-version.js +1 -1
  51. package/src/utilities/package-metadata.d.ts +0 -10
  52. package/src/utilities/package-metadata.js +0 -49
  53. package/src/utilities/package-metadata.js.map +1 -1
  54. package/src/utilities/version.js +1 -1
  55. package/lib/code-examples.db +0 -0
  56. package/src/commands/mcp/tools/examples/database-discovery.d.ts +0 -34
  57. package/src/commands/mcp/tools/examples/database-discovery.js +0 -87
  58. package/src/commands/mcp/tools/examples/database-discovery.js.map +0 -1
  59. package/src/commands/mcp/tools/examples/database.d.ts +0 -35
  60. package/src/commands/mcp/tools/examples/database.js +0 -125
  61. package/src/commands/mcp/tools/examples/database.js.map +0 -1
  62. package/src/commands/mcp/tools/examples/index.d.ts +0 -26
  63. package/src/commands/mcp/tools/examples/index.js +0 -149
  64. package/src/commands/mcp/tools/examples/index.js.map +0 -1
  65. package/src/commands/mcp/tools/examples/query-escaper.d.ts +0 -20
  66. package/src/commands/mcp/tools/examples/query-escaper.js +0 -68
  67. package/src/commands/mcp/tools/examples/query-escaper.js.map +0 -1
  68. package/src/commands/mcp/tools/examples/runtime-database.d.ts +0 -10
  69. package/src/commands/mcp/tools/examples/runtime-database.js +0 -192
  70. package/src/commands/mcp/tools/examples/runtime-database.js.map +0 -1
  71. package/src/commands/mcp/tools/examples/schemas.d.ts +0 -29
  72. package/src/commands/mcp/tools/examples/schemas.js +0 -101
  73. package/src/commands/mcp/tools/examples/schemas.js.map +0 -1
  74. package/src/commands/mcp/tools/examples/utils.d.ts +0 -14
  75. package/src/commands/mcp/tools/examples/utils.js +0 -31
  76. package/src/commands/mcp/tools/examples/utils.js.map +0 -1
  77. package/src/commands/mcp/tools/modernize.d.ts +0 -43
  78. package/src/commands/mcp/tools/modernize.js +0 -165
  79. package/src/commands/mcp/tools/modernize.js.map +0 -1
package/bin/ng.js CHANGED
@@ -45,13 +45,13 @@ if (rawCommandName === '--get-yargs-completions' || rawCommandName === 'completi
45
45
  // These would then crash with a hard to diagnose error message.
46
46
  const [major] = process.versions.node.split('.', 1).map((part) => Number(part));
47
47
 
48
- if (major % 2 === 1) {
48
+ if (major === 23 || major === 25) {
49
49
  // Allow new odd numbered releases with a warning.
50
50
  console.warn(
51
51
  'Node.js version ' +
52
52
  process.version +
53
53
  ' detected.\n' +
54
- 'Odd numbered Node.js versions will not enter LTS status and should not be used for production.' +
54
+ 'Prior to version 27, odd numbered Node.js versions will not enter LTS status and should not be used for production.' +
55
55
  ' For more information, please see https://nodejs.org/en/about/previous-releases/.',
56
56
  );
57
57
 
@@ -1948,6 +1948,11 @@
1948
1948
  "type": "boolean",
1949
1949
  "default": true,
1950
1950
  "description": "When true, the 'type' option will be appended to the generated class name. When false, only the file name will include the type."
1951
+ },
1952
+ "injectable": {
1953
+ "type": "boolean",
1954
+ "default": false,
1955
+ "description": "When true, generates an `@Injectable` instead of `@Service`."
1951
1956
  }
1952
1957
  }
1953
1958
  },
@@ -4322,7 +4327,7 @@
4322
4327
  "string",
4323
4328
  "boolean"
4324
4329
  ],
4325
- "description": "Specifies the configuration file for the selected test runner. If a string is provided, it will be used as the path to the configuration file. If `true`, the builder will search for a default configuration file (e.g., `vitest.config.ts` or `karma.conf.js`). If `false`, no external configuration file will be used.\\nFor Vitest, this enables advanced options and the use of custom plugins. Please note that while the file is loaded, the Angular team does not provide direct support for its specific contents or any third-party plugins used within it.",
4330
+ "description": "Specifies the configuration file for the selected test runner. If a string is provided, it will be used as the path to the configuration file. If `true`, the builder will search for a default configuration file (e.g., `vitest-base.config.ts` or `karma.conf.js`). If `false`, no external configuration file will be used.\\nFor Vitest, this enables advanced options and the use of custom plugins. Please note that while the file is loaded, the Angular team does not provide direct support for its specific contents or any third-party plugins used within it.",
4326
4331
  "default": false
4327
4332
  },
4328
4333
  "browsers": {
@@ -4377,6 +4382,10 @@
4377
4382
  "type": "boolean",
4378
4383
  "description": "Enables the Vitest UI for interactive test execution. This option is only available for the Vitest runner."
4379
4384
  },
4385
+ "isolate": {
4386
+ "type": "boolean",
4387
+ "description": "Enables isolation for test execution. When true, Vitest runs tests in separate threads or processes. This option is only available for the Vitest runner. Defaults to false to align with the Karma/Jasmine experience."
4388
+ },
4380
4389
  "quiet": {
4381
4390
  "type": "boolean",
4382
4391
  "description": "Suppresses the verbose build summary and stats table on each rebuild. Defaults to `true` locally and `false` in CI environments."
@@ -969,6 +969,10 @@ export type AngularServiceOptionsSchema = {
969
969
  * folder with the service's name will be created to contain the files.
970
970
  */
971
971
  flat?: boolean;
972
+ /**
973
+ * When true, generates an `@Injectable` instead of `@Service`.
974
+ */
975
+ injectable?: boolean;
972
976
  /**
973
977
  * The name for the new service. This will be used to create the service's class and spec
974
978
  * files (e.g., `my-service.service.ts` and `my-service.service.spec.ts`).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/cli",
3
- "version": "22.0.0-next.6",
3
+ "version": "22.0.0-next.8",
4
4
  "description": "CLI tool for Angular",
5
5
  "main": "lib/cli/index.js",
6
6
  "bin": {
@@ -25,15 +25,15 @@
25
25
  },
26
26
  "homepage": "https://github.com/angular/angular-cli",
27
27
  "dependencies": {
28
- "@angular-devkit/architect": "0.2200.0-next.6",
29
- "@angular-devkit/core": "22.0.0-next.6",
30
- "@angular-devkit/schematics": "22.0.0-next.6",
28
+ "@angular-devkit/architect": "0.2200.0-next.8",
29
+ "@angular-devkit/core": "22.0.0-next.8",
30
+ "@angular-devkit/schematics": "22.0.0-next.8",
31
31
  "@inquirer/prompts": "8.4.2",
32
32
  "@listr2/prompt-adapter-inquirer": "4.2.3",
33
33
  "@modelcontextprotocol/sdk": "1.29.0",
34
- "@schematics/angular": "22.0.0-next.6",
34
+ "@schematics/angular": "22.0.0-next.8",
35
35
  "@yarnpkg/lockfile": "1.1.0",
36
- "algoliasearch": "5.50.2",
36
+ "algoliasearch": "5.52.1",
37
37
  "ini": "6.0.0",
38
38
  "jsonc-parser": "3.3.1",
39
39
  "listr2": "10.2.1",
@@ -42,24 +42,24 @@
42
42
  "parse5-html-rewriting-stream": "8.0.1",
43
43
  "semver": "7.7.4",
44
44
  "yargs": "18.0.0",
45
- "zod": "4.3.6"
45
+ "zod": "4.4.3"
46
46
  },
47
47
  "ng-update": {
48
48
  "migrations": "@schematics/angular/migrations/migration-collection.json",
49
49
  "packageGroup": {
50
- "@angular/cli": "22.0.0-next.6",
51
- "@angular/build": "22.0.0-next.6",
52
- "@angular/ssr": "22.0.0-next.6",
53
- "@angular-devkit/architect": "0.2200.0-next.6",
54
- "@angular-devkit/build-angular": "22.0.0-next.6",
55
- "@angular-devkit/build-webpack": "0.2200.0-next.6",
56
- "@angular-devkit/core": "22.0.0-next.6",
57
- "@angular-devkit/schematics": "22.0.0-next.6"
50
+ "@angular/cli": "22.0.0-next.8",
51
+ "@angular/build": "22.0.0-next.8",
52
+ "@angular/ssr": "22.0.0-next.8",
53
+ "@angular-devkit/architect": "0.2200.0-next.8",
54
+ "@angular-devkit/build-angular": "22.0.0-next.8",
55
+ "@angular-devkit/build-webpack": "0.2200.0-next.8",
56
+ "@angular-devkit/core": "22.0.0-next.8",
57
+ "@angular-devkit/schematics": "22.0.0-next.8"
58
58
  }
59
59
  },
60
- "packageManager": "pnpm@10.33.0",
60
+ "packageManager": "pnpm@10.33.2",
61
61
  "engines": {
62
- "node": "^22.22.0 || >=24.13.1",
62
+ "node": "^22.22.0 || ^24.13.1 || >=26.0.0",
63
63
  "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
64
64
  "yarn": ">= 1.13.0"
65
65
  }
@@ -51,7 +51,7 @@ class LocalDevserver {
51
51
  args.push(this.project);
52
52
  }
53
53
  args.push(`--port=${this.port}`);
54
- this.devserverProcess = this.host.spawn('ng', args, {
54
+ this.devserverProcess = this.host.startNgProcess(args, {
55
55
  stdio: 'pipe',
56
56
  cwd: this.workspacePath,
57
57
  });
@@ -1 +1 @@
1
- {"version":3,"file":"devserver.js","sourceRoot":"","sources":["devserver.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAoKH,0CAEC;AAED,oEAeC;AAlLD,mEAAmE;AAEnE,MAAM,uBAAuB,GAAG,yCAAyC,CAAC;AAC1E,MAAM,oBAAoB,GAAG,uCAAuC,CAAC;AACrE,MAAM,2BAA2B,GAAG,kDAAkD,CAAC;AACvF,MAAM,8BAA8B,GAAG,mCAAmC,CAAC;AAC3E,MAAM,gCAAgC,GAAG,mCAAmC,CAAC;AAE7E,MAAM,oBAAoB,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC9D,MAAM,kBAAkB,GAAG;IACzB,uBAAuB;IACvB,oBAAoB;IACpB,2BAA2B;IAC3B,gCAAgC;CACjC,CAAC;AAmDF;;GAEG;AACH,MAAa,cAAc;IAChB,IAAI,CAAO;IACX,IAAI,CAAS;IACb,aAAa,CAAS;IACtB,OAAO,CAAS;IAEjB,gBAAgB,GAAwB,IAAI,CAAC;IAC7C,UAAU,GAAa,EAAE,CAAC;IAC1B,eAAe,GAAG,KAAK,CAAC;IACxB,wBAAwB,GAAY,SAAS,CAAC;IAC9C,iBAAiB,GAAgB,SAAS,CAAC;IAEnD,YAAY,EACV,IAAI,EACJ,IAAI,EACJ,aAAa,EACb,OAAO,GAMR;QACC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;YAClD,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,IAAI,CAAC,aAAa;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAEO,MAAM,CAAC,GAAW;QACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE1B,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,4EAA4E;YAC5E,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,kBAAkB;QAChB,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,iBAAiB;YAC9B,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC;SAC3D,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;CACF;AAzFD,wCAyFC;AAED,SAAgB,eAAe,CAAC,aAAqB,EAAE,WAAmB;IACxE,OAAO,GAAG,aAAa,IAAI,WAAW,EAAE,CAAC;AAC3C,CAAC;AAED,SAAgB,4BAA4B,CAC1C,UAAmE;IAEnE,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;SACnD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,MAAM,CAAC,OAAO,wBAAwB,MAAM,CAAC,aAAa,GAAG,CAAC;SAC5F,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,IAAI,KAAK,CACd,qDAAqD,cAAc,IAAI;QACrE,6DAA6D,CAChE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"devserver.js","sourceRoot":"","sources":["devserver.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ export interface Host {
37
37
  * @param encoding The encoding to use.
38
38
  * @returns A promise that resolves to the file content.
39
39
  */
40
- readFile(path: string, encoding: 'utf-8'): Promise<string>;
40
+ readFile(path: string, encoding: BufferEncoding): Promise<string>;
41
41
  /**
42
42
  * Finds files matching a glob pattern.
43
43
  * @param pattern The glob pattern.
@@ -51,22 +51,14 @@ export interface Host {
51
51
  parentPath: string;
52
52
  isFile(): boolean;
53
53
  }>;
54
- /**
55
- * Resolves a module request from a given path.
56
- * @param request The module request to resolve.
57
- * @param from The path from which to resolve the request.
58
- * @returns The resolved module path.
59
- */
60
- resolveModule(request: string, from: string): string;
61
54
  /**
62
55
  * Spawns a child process and returns a promise that resolves with the process's
63
56
  * output or rejects with a structured error.
64
- * @param command The command to run.
65
57
  * @param args The arguments to pass to the command.
66
58
  * @param options Options for the child process.
67
59
  * @returns A promise that resolves with the standard output and standard error of the command.
68
60
  */
69
- runCommand(command: string, args: readonly string[], options?: {
61
+ executeNgCommand(args: readonly string[], options?: {
70
62
  timeout?: number;
71
63
  stdio?: 'pipe' | 'ignore';
72
64
  cwd?: string;
@@ -76,12 +68,11 @@ export interface Host {
76
68
  }>;
77
69
  /**
78
70
  * Spawns a long-running child process and returns the `ChildProcess` object.
79
- * @param command The command to run.
80
71
  * @param args The arguments to pass to the command.
81
72
  * @param options Options for the child process.
82
73
  * @returns The spawned `ChildProcess` instance.
83
74
  */
84
- spawn(command: string, args: readonly string[], options?: {
75
+ startNgProcess(args: readonly string[], options?: {
85
76
  stdio?: 'pipe' | 'ignore';
86
77
  cwd?: string;
87
78
  env?: Record<string, string>;
@@ -94,8 +85,13 @@ export interface Host {
94
85
  * Checks whether a TCP port is available on the system.
95
86
  */
96
87
  isPortAvailable(port: number): Promise<boolean>;
88
+ /**
89
+ * Sets the allowed roots for this host.
90
+ */
91
+ setRoots(roots: string[]): void;
97
92
  }
98
93
  /**
99
94
  * A concrete implementation of the `Host` interface that runs on a local workspace.
100
95
  */
101
96
  export declare const LocalWorkspaceHost: Host;
97
+ export declare function createRootRestrictedHost(baseHost: Host, initialRoots?: string[]): Host;
@@ -8,6 +8,7 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.LocalWorkspaceHost = exports.CommandError = void 0;
11
+ exports.createRootRestrictedHost = createRootRestrictedHost;
11
12
  /**
12
13
  * @fileoverview
13
14
  * This file defines an abstraction layer for operating-system or file-system operations, such as
@@ -16,6 +17,7 @@ exports.LocalWorkspaceHost = exports.CommandError = void 0;
16
17
  */
17
18
  const fs_1 = require("fs");
18
19
  const node_child_process_1 = require("node:child_process");
20
+ const node_fs_1 = require("node:fs");
19
21
  const promises_1 = require("node:fs/promises");
20
22
  const node_module_1 = require("node:module");
21
23
  const node_net_1 = require("node:net");
@@ -33,9 +35,10 @@ class CommandError extends Error {
33
35
  }
34
36
  }
35
37
  exports.CommandError = CommandError;
36
- function resolveCommand(command, args, cwd) {
37
- if (command !== 'ng' || !cwd) {
38
- return { command, args };
38
+ function resolveNgCommand(args, cwd) {
39
+ const defaultCommand = { command: 'ng', args };
40
+ if (!cwd) {
41
+ return defaultCommand;
39
42
  }
40
43
  try {
41
44
  const workspaceRequire = (0, node_module_1.createRequire)((0, node_path_1.join)(cwd, 'package.json'));
@@ -53,7 +56,7 @@ function resolveCommand(command, args, cwd) {
53
56
  catch {
54
57
  // Failed to resolve the CLI binary, fall back to assuming `ng` is on PATH.
55
58
  }
56
- return { command, args };
59
+ return defaultCommand;
57
60
  }
58
61
  /**
59
62
  * A concrete implementation of the `Host` interface that runs on a local workspace.
@@ -65,11 +68,8 @@ exports.LocalWorkspaceHost = {
65
68
  glob: function (pattern, options) {
66
69
  return (0, promises_1.glob)(pattern, { ...options, withFileTypes: true });
67
70
  },
68
- resolveModule(request, from) {
69
- return (0, node_module_1.createRequire)(from).resolve(request);
70
- },
71
- runCommand: async (command, args, options = {}) => {
72
- const resolved = resolveCommand(command, args, options.cwd);
71
+ executeNgCommand: async (args, options = {}) => {
72
+ const resolved = resolveNgCommand(args, options.cwd);
73
73
  const signal = options.timeout ? AbortSignal.timeout(options.timeout) : undefined;
74
74
  return new Promise((resolve, reject) => {
75
75
  const childProcess = (0, node_child_process_1.spawn)(resolved.command, resolved.args, {
@@ -105,8 +105,8 @@ exports.LocalWorkspaceHost = {
105
105
  });
106
106
  });
107
107
  },
108
- spawn(command, args, options = {}) {
109
- const resolved = resolveCommand(command, args, options.cwd);
108
+ startNgProcess(args, options = {}) {
109
+ const resolved = resolveNgCommand(args, options.cwd);
110
110
  return (0, node_child_process_1.spawn)(resolved.command, resolved.args, {
111
111
  shell: false,
112
112
  stdio: options.stdio ?? 'pipe',
@@ -150,5 +150,90 @@ exports.LocalWorkspaceHost = {
150
150
  });
151
151
  });
152
152
  },
153
+ setRoots(roots) {
154
+ // LocalWorkspaceHost does not enforce roots, so this is a no-op.
155
+ },
153
156
  };
157
+ function createRootRestrictedHost(baseHost, initialRoots = [process.cwd()]) {
158
+ let roots = initialRoots;
159
+ function checkPath(path) {
160
+ const resolvedPath = (0, node_path_1.resolve)(path);
161
+ let realPath;
162
+ try {
163
+ realPath = (0, node_fs_1.realpathSync)(resolvedPath);
164
+ }
165
+ catch (e) {
166
+ if (e.code === 'ENOENT') {
167
+ // Path does not exist. Find the first existing ancestor.
168
+ let current = resolvedPath;
169
+ while (current) {
170
+ try {
171
+ realPath = (0, node_fs_1.realpathSync)(current);
172
+ break;
173
+ }
174
+ catch (err) {
175
+ if (err.code !== 'ENOENT') {
176
+ throw err;
177
+ }
178
+ const parent = (0, node_path_1.dirname)(current);
179
+ if (parent === current) {
180
+ // Reached filesystem root
181
+ throw err;
182
+ }
183
+ current = parent;
184
+ }
185
+ }
186
+ }
187
+ else {
188
+ throw e;
189
+ }
190
+ }
191
+ const isAllowed = roots.some((root) => {
192
+ const rel = (0, node_path_1.relative)(root, realPath);
193
+ return !rel.startsWith('..') && !(0, node_path_1.isAbsolute)(rel);
194
+ });
195
+ if (!isAllowed) {
196
+ throw new Error(`Access denied: path '${path}' is outside allowed roots.`);
197
+ }
198
+ }
199
+ return {
200
+ ...baseHost,
201
+ setRoots(newRoots) {
202
+ roots = newRoots;
203
+ },
204
+ stat(path) {
205
+ checkPath(path);
206
+ return baseHost.stat(path);
207
+ },
208
+ existsSync(path) {
209
+ checkPath(path);
210
+ return baseHost.existsSync(path);
211
+ },
212
+ readFile(path, encoding) {
213
+ checkPath(path);
214
+ return baseHost.readFile(path, encoding);
215
+ },
216
+ glob(pattern, options) {
217
+ if (pattern.includes('..')) {
218
+ throw new Error(`Access denied: glob pattern '${pattern}' contains path traversal sequences.`);
219
+ }
220
+ checkPath(options.cwd);
221
+ const firstWildcardIndex = pattern.search(/[*?[{]/);
222
+ const basePath = firstWildcardIndex >= 0 ? pattern.substring(0, firstWildcardIndex) : pattern;
223
+ const targetDir = (0, node_path_1.resolve)(options.cwd, basePath);
224
+ checkPath(targetDir);
225
+ return baseHost.glob(pattern, options);
226
+ },
227
+ executeNgCommand(args, options = {}) {
228
+ const effectiveCwd = options?.cwd ?? process.cwd();
229
+ checkPath(effectiveCwd);
230
+ return baseHost.executeNgCommand(args, options);
231
+ },
232
+ startNgProcess(args, options = {}) {
233
+ const effectiveCwd = options?.cwd ?? process.cwd();
234
+ checkPath(effectiveCwd);
235
+ return baseHost.startNgProcess(args, options);
236
+ },
237
+ };
238
+ }
154
239
  //# sourceMappingURL=host.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"host.js","sourceRoot":"","sources":["host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["host.ts"],"names":[],"mappings":"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"}
@@ -32,16 +32,6 @@ export declare const EXPERIMENTAL_TOOLS: readonly [import("./tools/tool-registry
32
32
  failure: "failure";
33
33
  }>;
34
34
  logs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
35
- }>, import("./tools/tool-registry").McpToolDeclaration<{
36
- transformations: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodEnum<{
37
- [x: string]: string;
38
- }>>>;
39
- path: import("zod").ZodOptional<import("zod").ZodString>;
40
- workspace: import("zod").ZodOptional<import("zod").ZodString>;
41
- project: import("zod").ZodOptional<import("zod").ZodString>;
42
- }, {
43
- instructions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
44
- logs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
45
35
  }>, import("./tools/tool-registry").McpToolDeclaration<{
46
36
  filter: import("zod").ZodOptional<import("zod").ZodString>;
47
37
  workspace: import("zod").ZodOptional<import("zod").ZodString>;
@@ -104,16 +94,6 @@ export declare const EXPERIMENTAL_TOOL_GROUPS: {
104
94
  failure: "failure";
105
95
  }>;
106
96
  logs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
107
- }>, import("./tools/tool-registry").McpToolDeclaration<{
108
- transformations: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodEnum<{
109
- [x: string]: string;
110
- }>>>;
111
- path: import("zod").ZodOptional<import("zod").ZodString>;
112
- workspace: import("zod").ZodOptional<import("zod").ZodString>;
113
- project: import("zod").ZodOptional<import("zod").ZodString>;
114
- }, {
115
- instructions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
116
- logs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
117
97
  }>, import("./tools/tool-registry").McpToolDeclaration<{
118
98
  filter: import("zod").ZodOptional<import("zod").ZodString>;
119
99
  workspace: import("zod").ZodOptional<import("zod").ZodString>;
@@ -11,7 +11,9 @@ exports.EXPERIMENTAL_TOOL_GROUPS = exports.EXPERIMENTAL_TOOLS = void 0;
11
11
  exports.createMcpServer = createMcpServer;
12
12
  exports.assembleToolDeclarations = assembleToolDeclarations;
13
13
  const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
14
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
14
15
  const node_path_1 = require("node:path");
16
+ const node_url_1 = require("node:url");
15
17
  const version_1 = require("../../utilities/version");
16
18
  const host_1 = require("./host");
17
19
  const instructions_1 = require("./resources/instructions");
@@ -23,8 +25,6 @@ const devserver_stop_1 = require("./tools/devserver/devserver-stop");
23
25
  const devserver_wait_for_build_1 = require("./tools/devserver/devserver-wait-for-build");
24
26
  const doc_search_1 = require("./tools/doc-search");
25
27
  const e2e_1 = require("./tools/e2e");
26
- const index_1 = require("./tools/examples/index");
27
- const modernize_1 = require("./tools/modernize");
28
28
  const zoneless_migration_1 = require("./tools/onpush-zoneless-migration/zoneless-migration");
29
29
  const projects_1 = require("./tools/projects");
30
30
  const test_1 = require("./tools/test");
@@ -41,7 +41,6 @@ const STABLE_TOOLS = [
41
41
  ai_tutor_1.AI_TUTOR_TOOL,
42
42
  best_practices_1.BEST_PRACTICES_TOOL,
43
43
  doc_search_1.DOC_SEARCH_TOOL,
44
- index_1.FIND_EXAMPLE_TOOL,
45
44
  projects_1.LIST_PROJECTS_TOOL,
46
45
  zoneless_migration_1.ZONELESS_MIGRATION_TOOL,
47
46
  ];
@@ -49,13 +48,7 @@ const STABLE_TOOLS = [
49
48
  * The set of tools that are available but not enabled by default.
50
49
  * These tools are considered experimental and may have limitations.
51
50
  */
52
- exports.EXPERIMENTAL_TOOLS = [
53
- build_1.BUILD_TOOL,
54
- e2e_1.E2E_TOOL,
55
- modernize_1.MODERNIZE_TOOL,
56
- test_1.TEST_TOOL,
57
- ...DEVSERVER_TOOLS,
58
- ];
51
+ exports.EXPERIMENTAL_TOOLS = [build_1.BUILD_TOOL, e2e_1.E2E_TOOL, test_1.TEST_TOOL, ...DEVSERVER_TOOLS];
59
52
  /**
60
53
  * Experimental tools that are grouped together under a single name.
61
54
  *
@@ -94,7 +87,12 @@ equivalent actions.
94
87
 
95
88
  * **3. Answer User Questions:**
96
89
  - For conceptual questions ("what is..."), use \`search_documentation\`.
97
- - For code examples ("show me how to..."), use \`find_examples\`.
90
+
91
+ * **4. Discover Schematics for Modernization:** Since this server does not provide a
92
+ specific tool for listing available schematics, you can use a shell command (if
93
+ available) with \`ng generate <package-name>: --help\` to discover what migrations
94
+ are available in a package (e.g., running \`ng generate @angular/core: --help\`
95
+ will list migrations like \`control-flow\` and \`standalone\`).
98
96
  </Core Workflows & Tool Guide>
99
97
 
100
98
  <Key Concepts>
@@ -110,12 +108,40 @@ equivalent actions.
110
108
  ...options,
111
109
  logger,
112
110
  });
111
+ const restrictedHost = (0, host_1.createRootRestrictedHost)(host_1.LocalWorkspaceHost);
112
+ server.server.oninitialized = () => {
113
+ void (async () => {
114
+ try {
115
+ const clientCapabilities = server.server.getClientCapabilities();
116
+ if (clientCapabilities?.roots) {
117
+ const { roots } = await server.server.listRoots();
118
+ const searchRoots = roots?.map((r) => (0, node_path_1.normalize)((0, node_url_1.fileURLToPath)(r.uri))) ?? [];
119
+ restrictedHost.setRoots(searchRoots);
120
+ if (clientCapabilities.roots.listChanged) {
121
+ server.server.setNotificationHandler(types_js_1.RootsListChangedNotificationSchema, async () => {
122
+ try {
123
+ const { roots: updatedRoots } = await server.server.listRoots();
124
+ const updatedSearchRoots = updatedRoots?.map((r) => (0, node_path_1.normalize)((0, node_url_1.fileURLToPath)(r.uri))) ?? [];
125
+ restrictedHost.setRoots(updatedSearchRoots);
126
+ }
127
+ catch (e) {
128
+ logger.warn(`Failed to update roots on notification: ${e instanceof Error ? e.message : e}`);
129
+ }
130
+ });
131
+ }
132
+ }
133
+ }
134
+ catch (e) {
135
+ logger.warn(`Failed to initialize roots on connection: ${e instanceof Error ? e.message : e}`);
136
+ }
137
+ })();
138
+ };
113
139
  await (0, tool_registry_1.registerTools)(server, {
114
140
  workspace: options.workspace,
115
141
  logger,
116
142
  exampleDatabasePath: (0, node_path_1.join)(__dirname, '../../../lib/code-examples.db'),
117
143
  devservers: new Map(),
118
- host: host_1.LocalWorkspaceHost,
144
+ host: restrictedHost,
119
145
  }, toolDeclarations);
120
146
  return server;
121
147
  }
@@ -128,9 +154,6 @@ function assembleToolDeclarations(stableDeclarations, experimentalDeclarations,
128
154
  toolDeclarations = toolDeclarations.filter((tool) => tool.isLocalOnly);
129
155
  }
130
156
  const enabledExperimentalTools = new Set(options.experimentalTools);
131
- if (process.env['NG_MCP_CODE_EXAMPLES'] === '1') {
132
- enabledExperimentalTools.add('find_examples');
133
- }
134
157
  for (const [toolGroupName, toolGroup] of Object.entries(exports.EXPERIMENTAL_TOOL_GROUPS)) {
135
158
  if (enabledExperimentalTools.delete(toolGroupName)) {
136
159
  for (const tool of toolGroup) {
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["mcp-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["mcp-server.ts"],"names":[],"mappings":"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"}
@@ -361,7 +361,6 @@ When teaching or generating code for Phase 5 (Signal Forms), you **must** strict
361
361
 
362
362
  @Component({
363
363
  selector: 'app-example',
364
- standalone: true,
365
364
  imports: [Field],
366
365
  template: `
367
366
  <form (submit)="save($event)">
@@ -661,7 +660,7 @@ touch src/app/mock-recipes.ts
661
660
  id: 1,
662
661
  name: 'Spaghetti Carbonara',
663
662
  description: 'A classic Italian pasta dish.',
664
- imgUrl: '[https://via.placeholder.com/300x200.png?text=Spaghetti+Carbonara](https://via.placeholder.com/300x200.png?text=Spaghetti+Carbonara)',
663
+ imgUrl: 'INSERT_IMAGE_URL',
665
664
  ingredients: [
666
665
  { name: 'Spaghetti', quantity: 200, unit: 'g' },
667
666
  { name: 'Guanciale', quantity: 100, unit: 'g' },
@@ -674,7 +673,7 @@ touch src/app/mock-recipes.ts
674
673
  id: 2,
675
674
  name: 'Caprese Salad',
676
675
  description: 'A simple and refreshing Italian salad.',
677
- imgUrl: '[https://via.placeholder.com/300x200.png?text=Caprese+Salad](https://via.placeholder.com/300x200.png?text=Caprese+Salad)',
676
+ imgUrl: 'INSERT_IMAGE_URL',
678
677
  ingredients: [
679
678
  { name: 'Tomatoes', quantity: 4, unit: 'each' },
680
679
  { name: 'Fresh Mozzarella', quantity: 200, unit: 'g' },
@@ -718,7 +717,7 @@ touch src/app/mock-recipes.ts
718
717
  id: 1,
719
718
  name: 'Spaghetti Carbonara',
720
719
  description: 'A classic Italian pasta dish.',
721
- imgUrl: '[https://via.placeholder.com/300x200.png?text=Spaghetti+Carbonara](https://via.placeholder.com/300x200.png?text=Spaghetti+Carbonara)',
720
+ imgUrl: 'INSERT_IMAGE_URL',
722
721
  isFavorite: true,
723
722
  ingredients: [
724
723
  { name: 'Spaghetti', quantity: 200, unit: 'g' },
@@ -732,7 +731,7 @@ touch src/app/mock-recipes.ts
732
731
  id: 2,
733
732
  name: 'Caprese Salad',
734
733
  description: 'A simple and refreshing Italian salad.',
735
- imgUrl: '[https://via.placeholder.com/300x200.png?text=Caprese+Salad](https://via.placeholder.com/300x200.png?text=Caprese+Salad)',
734
+ imgUrl: 'INSERT_IMAGE_URL',
736
735
  isFavorite: false,
737
736
  ingredients: [
738
737
  { name: 'Tomatoes', quantity: 4, unit: 'each' },
@@ -787,8 +786,7 @@ touch src/app/mock-recipes.ts
787
786
  name: 'Spaghetti Carbonara',
788
787
  description: 'A classic Italian pasta dish.',
789
788
  authorEmail: 'mario@italy.com', // Add this
790
- imgUrl:
791
- '[https://via.placeholder.com/300x200.png?text=Spaghetti+Carbonara](https://via.placeholder.com/300x200.png?text=Spaghetti+Carbonara)',
789
+ imgUrl: 'INSERT_IMAGE_URL',
792
790
  isFavorite: true,
793
791
  ingredients: [
794
792
  { name: 'Spaghetti', quantity: 200, unit: 'g' },
@@ -31,6 +31,7 @@ const buildToolOutputSchema = zod_1.z.object({
31
31
  async function runBuild(input, context) {
32
32
  const { workspacePath, projectName } = await (0, workspace_utils_1.resolveWorkspaceAndProject)({
33
33
  host: context.host,
34
+ server: context.server,
34
35
  workspacePathInput: input.workspace,
35
36
  projectNameInput: input.project,
36
37
  mcpWorkspace: context.workspace,
@@ -41,7 +42,7 @@ async function runBuild(input, context) {
41
42
  let logs;
42
43
  let outputPath;
43
44
  try {
44
- logs = (await context.host.runCommand('ng', args, { cwd: workspacePath })).logs;
45
+ logs = (await context.host.executeNgCommand(args, { cwd: workspacePath })).logs;
45
46
  }
46
47
  catch (e) {
47
48
  status = 'failure';
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["build.ts"],"names":[],"mappings":"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"}