@angular/cli 22.0.0-rc.0 → 22.0.0-rc.1
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/bin/ng.js +1 -1
- package/package.json +14 -14
- package/src/commands/mcp/devserver.d.ts +1 -1
- package/src/commands/mcp/devserver.js +5 -8
- package/src/commands/mcp/devserver.js.map +1 -1
- package/src/commands/mcp/host.d.ts +9 -5
- package/src/commands/mcp/host.js +37 -22
- package/src/commands/mcp/host.js.map +1 -1
- package/src/commands/mcp/mcp-server.d.ts +8 -42
- package/src/commands/mcp/mcp-server.js +20 -25
- package/src/commands/mcp/mcp-server.js.map +1 -1
- package/src/commands/mcp/tools/best-practices.js +9 -17
- package/src/commands/mcp/tools/best-practices.js.map +1 -1
- package/src/commands/mcp/tools/doc-search.js +11 -33
- package/src/commands/mcp/tools/doc-search.js.map +1 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.d.ts +2 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.js +2 -2
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.js.map +1 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-test-file.d.ts +3 -2
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-test-file.js +8 -8
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-test-file.js.map +1 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/ts-utils.d.ts +2 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/ts-utils.js +2 -3
- package/src/commands/mcp/tools/onpush-zoneless-migration/ts-utils.js.map +1 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.d.ts +2 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.js +29 -41
- package/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.js.map +1 -1
- package/src/commands/mcp/tools/projects.d.ts +1 -0
- package/src/commands/mcp/tools/projects.js +15 -18
- package/src/commands/mcp/tools/projects.js.map +1 -1
- package/src/commands/mcp/tools/run-target/build-target-strategy.d.ts +14 -0
- package/src/commands/mcp/tools/run-target/build-target-strategy.js +53 -0
- package/src/commands/mcp/tools/run-target/build-target-strategy.js.map +1 -0
- package/src/commands/mcp/tools/run-target/generic-target-strategy.d.ts +14 -0
- package/src/commands/mcp/tools/run-target/generic-target-strategy.js +63 -0
- package/src/commands/mcp/tools/run-target/generic-target-strategy.js.map +1 -0
- package/src/commands/mcp/tools/run-target/options-serializer.d.ts +13 -0
- package/src/commands/mcp/tools/run-target/options-serializer.js +41 -0
- package/src/commands/mcp/tools/run-target/options-serializer.js.map +1 -0
- package/src/commands/mcp/tools/run-target/run-target.d.ts +34 -0
- package/src/commands/mcp/tools/run-target/run-target.js +69 -0
- package/src/commands/mcp/tools/run-target/run-target.js.map +1 -0
- package/src/commands/mcp/tools/run-target/strategy.d.ts +15 -0
- package/src/commands/mcp/tools/run-target/strategy.js +10 -0
- package/src/commands/mcp/tools/run-target/strategy.js.map +1 -0
- package/src/commands/mcp/tools/run-target/types.d.ts +39 -0
- package/src/commands/mcp/tools/run-target/types.js +41 -0
- package/src/commands/mcp/tools/run-target/types.js.map +1 -0
- package/src/commands/mcp/tools/run-target/unit-test-strategy.d.ts +14 -0
- package/src/commands/mcp/tools/run-target/unit-test-strategy.js +56 -0
- package/src/commands/mcp/tools/run-target/unit-test-strategy.js.map +1 -0
- package/src/utilities/node-version.js +1 -1
- package/src/utilities/version.js +1 -1
- package/src/commands/mcp/tools/build.d.ts +0 -37
- package/src/commands/mcp/tools/build.js +0 -90
- package/src/commands/mcp/tools/build.js.map +0 -1
- package/src/commands/mcp/tools/e2e.d.ts +0 -44
- package/src/commands/mcp/tools/e2e.js +0 -88
- package/src/commands/mcp/tools/e2e.js.map +0 -1
- package/src/commands/mcp/tools/test.d.ts +0 -35
- package/src/commands/mcp/tools/test.js +0 -88
- package/src/commands/mcp/tools/test.js.map +0 -1
package/bin/ng.js
CHANGED
|
@@ -57,7 +57,7 @@ if (major === 23 || major === 25) {
|
|
|
57
57
|
|
|
58
58
|
require('./bootstrap');
|
|
59
59
|
} else if (!nodeUtils.isNodeVersionSupported()) {
|
|
60
|
-
// Error and exit if less than
|
|
60
|
+
// Error and exit if less than the supported versions.
|
|
61
61
|
console.error(
|
|
62
62
|
'Node.js version ' +
|
|
63
63
|
process.version +
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular/cli",
|
|
3
|
-
"version": "22.0.0-rc.
|
|
3
|
+
"version": "22.0.0-rc.1",
|
|
4
4
|
"description": "CLI tool for Angular",
|
|
5
5
|
"main": "lib/cli/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
"sdk"
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@angular-devkit/architect": "0.2200.0-rc.
|
|
19
|
-
"@angular-devkit/core": "22.0.0-rc.
|
|
20
|
-
"@angular-devkit/schematics": "22.0.0-rc.
|
|
18
|
+
"@angular-devkit/architect": "0.2200.0-rc.1",
|
|
19
|
+
"@angular-devkit/core": "22.0.0-rc.1",
|
|
20
|
+
"@angular-devkit/schematics": "22.0.0-rc.1",
|
|
21
21
|
"@inquirer/prompts": "8.4.2",
|
|
22
22
|
"@listr2/prompt-adapter-inquirer": "4.2.3",
|
|
23
23
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
24
|
-
"@schematics/angular": "22.0.0-rc.
|
|
24
|
+
"@schematics/angular": "22.0.0-rc.1",
|
|
25
25
|
"@yarnpkg/lockfile": "1.1.0",
|
|
26
26
|
"algoliasearch": "5.52.0",
|
|
27
27
|
"ini": "6.0.0",
|
|
@@ -37,14 +37,14 @@
|
|
|
37
37
|
"ng-update": {
|
|
38
38
|
"migrations": "@schematics/angular/migrations/migration-collection.json",
|
|
39
39
|
"packageGroup": {
|
|
40
|
-
"@angular/cli": "22.0.0-rc.
|
|
41
|
-
"@angular/build": "22.0.0-rc.
|
|
42
|
-
"@angular/ssr": "22.0.0-rc.
|
|
43
|
-
"@angular-devkit/architect": "0.2200.0-rc.
|
|
44
|
-
"@angular-devkit/build-angular": "22.0.0-rc.
|
|
45
|
-
"@angular-devkit/build-webpack": "0.2200.0-rc.
|
|
46
|
-
"@angular-devkit/core": "22.0.0-rc.
|
|
47
|
-
"@angular-devkit/schematics": "22.0.0-rc.
|
|
40
|
+
"@angular/cli": "22.0.0-rc.1",
|
|
41
|
+
"@angular/build": "22.0.0-rc.1",
|
|
42
|
+
"@angular/ssr": "22.0.0-rc.1",
|
|
43
|
+
"@angular-devkit/architect": "0.2200.0-rc.1",
|
|
44
|
+
"@angular-devkit/build-angular": "22.0.0-rc.1",
|
|
45
|
+
"@angular-devkit/build-webpack": "0.2200.0-rc.1",
|
|
46
|
+
"@angular-devkit/core": "22.0.0-rc.1",
|
|
47
|
+
"@angular-devkit/schematics": "22.0.0-rc.1"
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
50
|
"repository": {
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"url": "git+https://github.com/angular/angular-cli.git"
|
|
53
53
|
},
|
|
54
54
|
"engines": {
|
|
55
|
-
"node": "^22.22.
|
|
55
|
+
"node": "^22.22.3 || ^24.15.0 || >=26.0.0",
|
|
56
56
|
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
|
|
57
57
|
"yarn": ">= 1.13.0"
|
|
58
58
|
},
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
6
|
* found in the LICENSE file at https://angular.dev/license
|
|
7
7
|
*/
|
|
8
|
-
import type
|
|
8
|
+
import { type Host } from './host';
|
|
9
9
|
export type BuildStatus = 'success' | 'failure' | 'unknown';
|
|
10
10
|
/**
|
|
11
11
|
* An Angular development server managed by the MCP server.
|
|
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
10
10
|
exports.LocalDevserver = void 0;
|
|
11
11
|
exports.getDevserverKey = getDevserverKey;
|
|
12
12
|
exports.createDevServerNotFoundError = createDevServerNotFoundError;
|
|
13
|
+
const host_1 = require("./host");
|
|
13
14
|
// Log messages that we want to catch to identify the build status.
|
|
14
15
|
const BUILD_SUCCEEDED_MESSAGE = 'Application bundle generation complete.';
|
|
15
16
|
const BUILD_FAILED_MESSAGE = 'Application bundle generation failed.';
|
|
@@ -51,17 +52,13 @@ class LocalDevserver {
|
|
|
51
52
|
args.push(this.project);
|
|
52
53
|
}
|
|
53
54
|
args.push(`--port=${this.port}`);
|
|
54
|
-
this.devserverProcess = this.host.
|
|
55
|
+
this.devserverProcess = this.host.startNgProcess(args, {
|
|
55
56
|
stdio: 'pipe',
|
|
56
57
|
cwd: this.workspacePath,
|
|
57
58
|
});
|
|
58
|
-
this.devserverProcess.stdout
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
this.devserverProcess.stderr?.on('data', (data) => {
|
|
62
|
-
this.addLog(data.toString());
|
|
63
|
-
});
|
|
64
|
-
this.devserverProcess.stderr?.on('close', () => {
|
|
59
|
+
(0, host_1.processStreamLines)(this.devserverProcess.stdout, (line) => this.addLog(line));
|
|
60
|
+
(0, host_1.processStreamLines)(this.devserverProcess.stderr, (line) => this.addLog(line));
|
|
61
|
+
this.devserverProcess.on('close', () => {
|
|
65
62
|
this.stop();
|
|
66
63
|
});
|
|
67
64
|
this.buildInProgress = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devserver.js","sourceRoot":"","sources":["devserver.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;
|
|
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:
|
|
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.
|
|
@@ -54,12 +54,11 @@ export interface Host {
|
|
|
54
54
|
/**
|
|
55
55
|
* Spawns a child process and returns a promise that resolves with the process's
|
|
56
56
|
* output or rejects with a structured error.
|
|
57
|
-
* @param command The command to run.
|
|
58
57
|
* @param args The arguments to pass to the command.
|
|
59
58
|
* @param options Options for the child process.
|
|
60
59
|
* @returns A promise that resolves with the standard output and standard error of the command.
|
|
61
60
|
*/
|
|
62
|
-
|
|
61
|
+
executeNgCommand(args: readonly string[], options?: {
|
|
63
62
|
timeout?: number;
|
|
64
63
|
stdio?: 'pipe' | 'ignore';
|
|
65
64
|
cwd?: string;
|
|
@@ -69,12 +68,11 @@ export interface Host {
|
|
|
69
68
|
}>;
|
|
70
69
|
/**
|
|
71
70
|
* Spawns a long-running child process and returns the `ChildProcess` object.
|
|
72
|
-
* @param command The command to run.
|
|
73
71
|
* @param args The arguments to pass to the command.
|
|
74
72
|
* @param options Options for the child process.
|
|
75
73
|
* @returns The spawned `ChildProcess` instance.
|
|
76
74
|
*/
|
|
77
|
-
|
|
75
|
+
startNgProcess(args: readonly string[], options?: {
|
|
78
76
|
stdio?: 'pipe' | 'ignore';
|
|
79
77
|
cwd?: string;
|
|
80
78
|
env?: Record<string, string>;
|
|
@@ -97,3 +95,9 @@ export interface Host {
|
|
|
97
95
|
*/
|
|
98
96
|
export declare const LocalWorkspaceHost: Host;
|
|
99
97
|
export declare function createRootRestrictedHost(baseHost: Host, initialRoots?: string[]): Host;
|
|
98
|
+
/**
|
|
99
|
+
* Binds a readline interface to the given stream to process each line.
|
|
100
|
+
* Sanitizes lines by removing VT/ANSI control characters, trimming trailing whitespace,
|
|
101
|
+
* and preserving leading indentation.
|
|
102
|
+
*/
|
|
103
|
+
export declare function processStreamLines(stream: NodeJS.ReadableStream | undefined | null, lineCallback: (line: string) => void): void;
|
package/src/commands/mcp/host.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.LocalWorkspaceHost = exports.CommandError = void 0;
|
|
11
11
|
exports.createRootRestrictedHost = createRootRestrictedHost;
|
|
12
|
+
exports.processStreamLines = processStreamLines;
|
|
12
13
|
/**
|
|
13
14
|
* @fileoverview
|
|
14
15
|
* This file defines an abstraction layer for operating-system or file-system operations, such as
|
|
@@ -22,6 +23,8 @@ const promises_1 = require("node:fs/promises");
|
|
|
22
23
|
const node_module_1 = require("node:module");
|
|
23
24
|
const node_net_1 = require("node:net");
|
|
24
25
|
const node_path_1 = require("node:path");
|
|
26
|
+
const node_readline_1 = require("node:readline");
|
|
27
|
+
const node_util_1 = require("node:util");
|
|
25
28
|
/**
|
|
26
29
|
* An error thrown when a command fails to execute.
|
|
27
30
|
*/
|
|
@@ -35,9 +38,10 @@ class CommandError extends Error {
|
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
exports.CommandError = CommandError;
|
|
38
|
-
function
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
function resolveNgCommand(args, cwd) {
|
|
42
|
+
const defaultCommand = { command: 'ng', args };
|
|
43
|
+
if (!cwd) {
|
|
44
|
+
return defaultCommand;
|
|
41
45
|
}
|
|
42
46
|
try {
|
|
43
47
|
const workspaceRequire = (0, node_module_1.createRequire)((0, node_path_1.join)(cwd, 'package.json'));
|
|
@@ -55,7 +59,7 @@ function resolveCommand(command, args, cwd) {
|
|
|
55
59
|
catch {
|
|
56
60
|
// Failed to resolve the CLI binary, fall back to assuming `ng` is on PATH.
|
|
57
61
|
}
|
|
58
|
-
return
|
|
62
|
+
return defaultCommand;
|
|
59
63
|
}
|
|
60
64
|
/**
|
|
61
65
|
* A concrete implementation of the `Host` interface that runs on a local workspace.
|
|
@@ -67,8 +71,8 @@ exports.LocalWorkspaceHost = {
|
|
|
67
71
|
glob: function (pattern, options) {
|
|
68
72
|
return (0, promises_1.glob)(pattern, { ...options, withFileTypes: true });
|
|
69
73
|
},
|
|
70
|
-
|
|
71
|
-
const resolved =
|
|
74
|
+
executeNgCommand: async (args, options = {}) => {
|
|
75
|
+
const resolved = resolveNgCommand(args, options.cwd);
|
|
72
76
|
const signal = options.timeout ? AbortSignal.timeout(options.timeout) : undefined;
|
|
73
77
|
return new Promise((resolve, reject) => {
|
|
74
78
|
const childProcess = (0, node_child_process_1.spawn)(resolved.command, resolved.args, {
|
|
@@ -82,8 +86,8 @@ exports.LocalWorkspaceHost = {
|
|
|
82
86
|
},
|
|
83
87
|
});
|
|
84
88
|
const logs = [];
|
|
85
|
-
childProcess.stdout
|
|
86
|
-
childProcess.stderr
|
|
89
|
+
processStreamLines(childProcess.stdout, (line) => logs.push(line));
|
|
90
|
+
processStreamLines(childProcess.stderr, (line) => logs.push(line));
|
|
87
91
|
childProcess.on('close', (code) => {
|
|
88
92
|
if (code === 0) {
|
|
89
93
|
resolve({ logs });
|
|
@@ -104,8 +108,8 @@ exports.LocalWorkspaceHost = {
|
|
|
104
108
|
});
|
|
105
109
|
});
|
|
106
110
|
},
|
|
107
|
-
|
|
108
|
-
const resolved =
|
|
111
|
+
startNgProcess(args, options = {}) {
|
|
112
|
+
const resolved = resolveNgCommand(args, options.cwd);
|
|
109
113
|
return (0, node_child_process_1.spawn)(resolved.command, resolved.args, {
|
|
110
114
|
shell: false,
|
|
111
115
|
stdio: options.stdio ?? 'pipe',
|
|
@@ -223,22 +227,33 @@ function createRootRestrictedHost(baseHost, initialRoots = [process.cwd()]) {
|
|
|
223
227
|
checkPath(targetDir);
|
|
224
228
|
return baseHost.glob(pattern, options);
|
|
225
229
|
},
|
|
226
|
-
|
|
227
|
-
const effectiveCwd = options
|
|
230
|
+
executeNgCommand(args, options = {}) {
|
|
231
|
+
const effectiveCwd = options?.cwd ?? process.cwd();
|
|
228
232
|
checkPath(effectiveCwd);
|
|
229
|
-
|
|
230
|
-
checkPath((0, node_path_1.resolve)(effectiveCwd, command));
|
|
231
|
-
}
|
|
232
|
-
return baseHost.runCommand(command, args, options);
|
|
233
|
+
return baseHost.executeNgCommand(args, options);
|
|
233
234
|
},
|
|
234
|
-
|
|
235
|
-
const effectiveCwd = options
|
|
235
|
+
startNgProcess(args, options = {}) {
|
|
236
|
+
const effectiveCwd = options?.cwd ?? process.cwd();
|
|
236
237
|
checkPath(effectiveCwd);
|
|
237
|
-
|
|
238
|
-
checkPath((0, node_path_1.resolve)(effectiveCwd, command));
|
|
239
|
-
}
|
|
240
|
-
return baseHost.spawn(command, args, options);
|
|
238
|
+
return baseHost.startNgProcess(args, options);
|
|
241
239
|
},
|
|
242
240
|
};
|
|
243
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Binds a readline interface to the given stream to process each line.
|
|
244
|
+
* Sanitizes lines by removing VT/ANSI control characters, trimming trailing whitespace,
|
|
245
|
+
* and preserving leading indentation.
|
|
246
|
+
*/
|
|
247
|
+
function processStreamLines(stream, lineCallback) {
|
|
248
|
+
if (!stream) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
const rl = (0, node_readline_1.createInterface)({ input: stream, terminal: false });
|
|
252
|
+
rl.on('line', (line) => {
|
|
253
|
+
const cleanLine = (0, node_util_1.stripVTControlCharacters)(line).trimEnd();
|
|
254
|
+
if (cleanLine.length > 0) {
|
|
255
|
+
lineCallback(cleanLine);
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
}
|
|
244
259
|
//# sourceMappingURL=host.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["host.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["host.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,9 @@ import { type AnyMcpToolDeclaration } from './tools/tool-registry';
|
|
|
13
13
|
* These tools are considered experimental and may have limitations.
|
|
14
14
|
*/
|
|
15
15
|
export declare const EXPERIMENTAL_TOOLS: readonly [import("./tools/tool-registry").McpToolDeclaration<{
|
|
16
|
+
target: import("zod").ZodString;
|
|
16
17
|
configuration: import("zod").ZodOptional<import("zod").ZodString>;
|
|
18
|
+
options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodBoolean, import("zod").ZodArray<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>]>>>;
|
|
17
19
|
workspace: import("zod").ZodOptional<import("zod").ZodString>;
|
|
18
20
|
project: import("zod").ZodOptional<import("zod").ZodString>;
|
|
19
21
|
}, {
|
|
@@ -21,27 +23,8 @@ export declare const EXPERIMENTAL_TOOLS: readonly [import("./tools/tool-registry
|
|
|
21
23
|
success: "success";
|
|
22
24
|
failure: "failure";
|
|
23
25
|
}>;
|
|
24
|
-
logs: import("zod").
|
|
25
|
-
|
|
26
|
-
}>, import("./tools/tool-registry").McpToolDeclaration<{
|
|
27
|
-
workspace: import("zod").ZodOptional<import("zod").ZodString>;
|
|
28
|
-
project: import("zod").ZodOptional<import("zod").ZodString>;
|
|
29
|
-
}, {
|
|
30
|
-
status: import("zod").ZodEnum<{
|
|
31
|
-
success: "success";
|
|
32
|
-
failure: "failure";
|
|
33
|
-
}>;
|
|
34
|
-
logs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
|
|
35
|
-
}>, import("./tools/tool-registry").McpToolDeclaration<{
|
|
36
|
-
filter: import("zod").ZodOptional<import("zod").ZodString>;
|
|
37
|
-
workspace: import("zod").ZodOptional<import("zod").ZodString>;
|
|
38
|
-
project: import("zod").ZodOptional<import("zod").ZodString>;
|
|
39
|
-
}, {
|
|
40
|
-
status: import("zod").ZodEnum<{
|
|
41
|
-
success: "success";
|
|
42
|
-
failure: "failure";
|
|
43
|
-
}>;
|
|
44
|
-
logs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
|
|
26
|
+
logs: import("zod").ZodArray<import("zod").ZodString>;
|
|
27
|
+
extensions: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
|
|
45
28
|
}>, ...(import("./tools/tool-registry").McpToolDeclaration<{
|
|
46
29
|
port: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
47
30
|
workspace: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -75,7 +58,9 @@ export declare const EXPERIMENTAL_TOOLS: readonly [import("./tools/tool-registry
|
|
|
75
58
|
*/
|
|
76
59
|
export declare const EXPERIMENTAL_TOOL_GROUPS: {
|
|
77
60
|
all: readonly [import("./tools/tool-registry").McpToolDeclaration<{
|
|
61
|
+
target: import("zod").ZodString;
|
|
78
62
|
configuration: import("zod").ZodOptional<import("zod").ZodString>;
|
|
63
|
+
options: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodBoolean, import("zod").ZodArray<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>]>>>;
|
|
79
64
|
workspace: import("zod").ZodOptional<import("zod").ZodString>;
|
|
80
65
|
project: import("zod").ZodOptional<import("zod").ZodString>;
|
|
81
66
|
}, {
|
|
@@ -83,27 +68,8 @@ export declare const EXPERIMENTAL_TOOL_GROUPS: {
|
|
|
83
68
|
success: "success";
|
|
84
69
|
failure: "failure";
|
|
85
70
|
}>;
|
|
86
|
-
logs: import("zod").
|
|
87
|
-
|
|
88
|
-
}>, import("./tools/tool-registry").McpToolDeclaration<{
|
|
89
|
-
workspace: import("zod").ZodOptional<import("zod").ZodString>;
|
|
90
|
-
project: import("zod").ZodOptional<import("zod").ZodString>;
|
|
91
|
-
}, {
|
|
92
|
-
status: import("zod").ZodEnum<{
|
|
93
|
-
success: "success";
|
|
94
|
-
failure: "failure";
|
|
95
|
-
}>;
|
|
96
|
-
logs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
|
|
97
|
-
}>, import("./tools/tool-registry").McpToolDeclaration<{
|
|
98
|
-
filter: import("zod").ZodOptional<import("zod").ZodString>;
|
|
99
|
-
workspace: import("zod").ZodOptional<import("zod").ZodString>;
|
|
100
|
-
project: import("zod").ZodOptional<import("zod").ZodString>;
|
|
101
|
-
}, {
|
|
102
|
-
status: import("zod").ZodEnum<{
|
|
103
|
-
success: "success";
|
|
104
|
-
failure: "failure";
|
|
105
|
-
}>;
|
|
106
|
-
logs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
|
|
71
|
+
logs: import("zod").ZodArray<import("zod").ZodString>;
|
|
72
|
+
extensions: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
|
|
107
73
|
}>, ...(import("./tools/tool-registry").McpToolDeclaration<{
|
|
108
74
|
port: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
109
75
|
workspace: import("zod").ZodOptional<import("zod").ZodString>;
|
|
@@ -19,15 +19,13 @@ const host_1 = require("./host");
|
|
|
19
19
|
const instructions_1 = require("./resources/instructions");
|
|
20
20
|
const ai_tutor_1 = require("./tools/ai-tutor");
|
|
21
21
|
const best_practices_1 = require("./tools/best-practices");
|
|
22
|
-
const build_1 = require("./tools/build");
|
|
23
22
|
const devserver_start_1 = require("./tools/devserver/devserver-start");
|
|
24
23
|
const devserver_stop_1 = require("./tools/devserver/devserver-stop");
|
|
25
24
|
const devserver_wait_for_build_1 = require("./tools/devserver/devserver-wait-for-build");
|
|
26
25
|
const doc_search_1 = require("./tools/doc-search");
|
|
27
|
-
const e2e_1 = require("./tools/e2e");
|
|
28
26
|
const zoneless_migration_1 = require("./tools/onpush-zoneless-migration/zoneless-migration");
|
|
29
27
|
const projects_1 = require("./tools/projects");
|
|
30
|
-
const
|
|
28
|
+
const run_target_1 = require("./tools/run-target/run-target");
|
|
31
29
|
const tool_registry_1 = require("./tools/tool-registry");
|
|
32
30
|
/**
|
|
33
31
|
* Tools to manage devservers. Should be bundled together, then added to experimental or stable as a group.
|
|
@@ -48,7 +46,7 @@ const STABLE_TOOLS = [
|
|
|
48
46
|
* The set of tools that are available but not enabled by default.
|
|
49
47
|
* These tools are considered experimental and may have limitations.
|
|
50
48
|
*/
|
|
51
|
-
exports.EXPERIMENTAL_TOOLS = [
|
|
49
|
+
exports.EXPERIMENTAL_TOOLS = [run_target_1.RUN_TARGET_TOOL, ...DEVSERVER_TOOLS];
|
|
52
50
|
/**
|
|
53
51
|
* Experimental tools that are grouped together under a single name.
|
|
54
52
|
*
|
|
@@ -70,36 +68,33 @@ async function createMcpServer(options, logger) {
|
|
|
70
68
|
},
|
|
71
69
|
instructions: `
|
|
72
70
|
<General Purpose>
|
|
73
|
-
This server provides a safe, programmatic interface to the Angular CLI
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
equivalent actions.
|
|
71
|
+
This server provides a safe, programmatic interface to the Angular CLI. You MUST prefer
|
|
72
|
+
the tools provided by this server over using 'run_shell_command' or general shell execution
|
|
73
|
+
for equivalent actions.
|
|
77
74
|
</General Purpose>
|
|
78
75
|
|
|
79
76
|
<Core Workflows & Tool Guide>
|
|
80
|
-
* **1. Discover
|
|
81
|
-
|
|
82
|
-
is a required input for other tools.
|
|
77
|
+
* **1. Discover Workspace (Mandatory First Step):** Always begin by calling 'list_projects'
|
|
78
|
+
to discover workspaces, projects, and allowed paths. The 'path' field of the relevant
|
|
79
|
+
workspace is a required input for other tools (passed as 'workspace' or 'workspacePath').
|
|
83
80
|
|
|
84
|
-
* **2. Get Coding Standards:** Before writing or
|
|
85
|
-
|
|
86
|
-
version-specific standards. For general knowledge, you can call the tool without this path.
|
|
81
|
+
* **2. Get Coding Standards:** Before writing or modifying code, you MUST call
|
|
82
|
+
'get_best_practices' with the workspace 'path' to load version-specific coding standards.
|
|
87
83
|
|
|
88
|
-
* **3. Answer
|
|
89
|
-
|
|
84
|
+
* **3. Answer Conceptual Questions:** Use 'search_documentation' to answer conceptual
|
|
85
|
+
or API syntax questions.
|
|
90
86
|
|
|
91
|
-
* **4. Discover Schematics
|
|
92
|
-
|
|
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\`).
|
|
87
|
+
* **4. Discover Schematics:** To discover available package migrations, use a shell command
|
|
88
|
+
(if available) with 'ng generate <package-name>: --help' (e.g., 'ng generate @angular/core: --help').
|
|
96
89
|
</Core Workflows & Tool Guide>
|
|
97
90
|
|
|
98
91
|
<Key Concepts>
|
|
99
|
-
* **Workspace vs. Project:** A 'workspace' contains an
|
|
100
|
-
(applications or libraries). A monorepo can
|
|
101
|
-
|
|
102
|
-
|
|
92
|
+
* **Workspace vs. Project:** A 'workspace' contains an 'angular.json' file and defines
|
|
93
|
+
'projects' (applications or libraries). A monorepo can contain multiple workspaces.
|
|
94
|
+
|
|
95
|
+
* **Targeting Projects:** Always use the workspace 'path' and the specific project 'name'
|
|
96
|
+
returned by 'list_projects' when calling other tools to ensure you target the correct
|
|
97
|
+
project context.
|
|
103
98
|
</Key Concepts>
|
|
104
99
|
`,
|
|
105
100
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["mcp-server.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,10 +26,8 @@ const bestPracticesInputSchema = zod_1.z.object({
|
|
|
26
26
|
workspacePath: zod_1.z
|
|
27
27
|
.string()
|
|
28
28
|
.optional()
|
|
29
|
-
.describe('
|
|
30
|
-
'
|
|
31
|
-
'Angular framework. You **MUST** get this path from the `list_projects` tool. If omitted, ' +
|
|
32
|
-
'the tool will return the generic best practices guide bundled with the CLI.'),
|
|
29
|
+
.describe('Absolute path to the angular.json workspace directory (obtained via list_projects). ' +
|
|
30
|
+
'If omitted, returns the generic best practices guide.'),
|
|
33
31
|
});
|
|
34
32
|
exports.BEST_PRACTICES_TOOL = (0, tool_registry_1.declareTool)({
|
|
35
33
|
name: 'get_best_practices',
|
|
@@ -37,23 +35,17 @@ exports.BEST_PRACTICES_TOOL = (0, tool_registry_1.declareTool)({
|
|
|
37
35
|
description: `
|
|
38
36
|
<Purpose>
|
|
39
37
|
Retrieves the official Angular Best Practices Guide. This guide contains the essential rules and conventions
|
|
40
|
-
that
|
|
38
|
+
that must be followed for any task involving the creation, analysis, or modification of Angular code.
|
|
41
39
|
</Purpose>
|
|
42
40
|
<Use Cases>
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
41
|
+
* Mandatory first step before writing or modifying Angular code to ensure modern framework standards.
|
|
42
|
+
* Learn about standalone components, typed forms, and modern control flow syntax (@if, @for, @switch).
|
|
43
|
+
* Verify existing code aligns with current conventions before making edits.
|
|
46
44
|
</Use Cases>
|
|
47
45
|
<Operational Notes>
|
|
48
|
-
*
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
* **General Use:** If no project context is available (e.g., for general questions or learning),
|
|
52
|
-
you can call the tool without the \`workspacePath\` argument. It will return the latest
|
|
53
|
-
generic best practices guide.
|
|
54
|
-
* The content of this guide is non-negotiable and reflects the official, up-to-date standards for Angular development.
|
|
55
|
-
* You **MUST** internalize and apply the principles from this guide in all subsequent Angular-related tasks.
|
|
56
|
-
* Failure to adhere to these best practices will result in suboptimal and outdated code.
|
|
46
|
+
* Provide the 'workspacePath' argument (obtained via 'list_projects') to load the version-specific
|
|
47
|
+
guide matching the project's Angular framework.
|
|
48
|
+
* Omit 'workspacePath' only for general learning queries or when no project context is available to load the latest generic guide.
|
|
57
49
|
</Operational Notes>`,
|
|
58
50
|
inputSchema: bestPracticesInputSchema.shape,
|
|
59
51
|
isReadOnly: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"best-practices.js","sourceRoot":"","sources":["best-practices.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH;;;;;;;GAOG;AAEH,+CAAkD;AAClD,6CAA4C;AAC5C,yCAAyE;AACzE,6BAAwB;AACxB,wDAAqD;AACrD,mDAAmE;AAEnE,MAAM,wBAAwB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,aAAa,EAAE,OAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,
|
|
1
|
+
{"version":3,"file":"best-practices.js","sourceRoot":"","sources":["best-practices.ts"],"names":[],"mappings":"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"}
|