@angular/cli 22.0.0-next.7 → 22.0.0-rc.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/bin/ng.js +2 -2
- package/lib/config/schema.json +5 -0
- package/lib/config/workspace-schema.d.ts +4 -0
- package/package.json +27 -28
- package/src/commands/mcp/host.d.ts +5 -7
- package/src/commands/mcp/host.js +93 -3
- package/src/commands/mcp/host.js.map +1 -1
- package/src/commands/mcp/mcp-server.d.ts +0 -20
- package/src/commands/mcp/mcp-server.js +38 -9
- package/src/commands/mcp/mcp-server.js.map +1 -1
- package/src/commands/mcp/tools/build.js +1 -0
- package/src/commands/mcp/tools/build.js.map +1 -1
- package/src/commands/mcp/tools/devserver/devserver-start.js +1 -0
- package/src/commands/mcp/tools/devserver/devserver-start.js.map +1 -1
- package/src/commands/mcp/tools/devserver/devserver-stop.js +1 -0
- package/src/commands/mcp/tools/devserver/devserver-stop.js.map +1 -1
- package/src/commands/mcp/tools/devserver/devserver-wait-for-build.js +1 -0
- package/src/commands/mcp/tools/devserver/devserver-wait-for-build.js.map +1 -1
- package/src/commands/mcp/tools/e2e.js +1 -0
- package/src/commands/mcp/tools/e2e.js.map +1 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.js +2 -2
- package/src/commands/mcp/workspace-utils.d.ts +2 -1
- package/src/commands/mcp/workspace-utils.js +43 -1
- package/src/commands/mcp/workspace-utils.js.map +1 -1
- package/src/utilities/node-version.js +1 -1
- package/src/utilities/version.js +1 -1
- package/src/commands/mcp/tools/modernize.d.ts +0 -43
- package/src/commands/mcp/tools/modernize.js +0 -165
- 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
|
|
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
|
-
'
|
|
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
|
|
package/lib/config/schema.json
CHANGED
|
@@ -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
|
},
|
|
@@ -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-
|
|
3
|
+
"version": "22.0.0-rc.0",
|
|
4
4
|
"description": "CLI tool for Angular",
|
|
5
5
|
"main": "lib/cli/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -14,26 +14,16 @@
|
|
|
14
14
|
"devkit",
|
|
15
15
|
"sdk"
|
|
16
16
|
],
|
|
17
|
-
"repository": {
|
|
18
|
-
"type": "git",
|
|
19
|
-
"url": "git+https://github.com/angular/angular-cli.git"
|
|
20
|
-
},
|
|
21
|
-
"author": "Angular Authors",
|
|
22
|
-
"license": "MIT",
|
|
23
|
-
"bugs": {
|
|
24
|
-
"url": "https://github.com/angular/angular-cli/issues"
|
|
25
|
-
},
|
|
26
|
-
"homepage": "https://github.com/angular/angular-cli",
|
|
27
17
|
"dependencies": {
|
|
28
|
-
"@angular-devkit/architect": "0.2200.0-
|
|
29
|
-
"@angular-devkit/core": "22.0.0-
|
|
30
|
-
"@angular-devkit/schematics": "22.0.0-
|
|
18
|
+
"@angular-devkit/architect": "0.2200.0-rc.0",
|
|
19
|
+
"@angular-devkit/core": "22.0.0-rc.0",
|
|
20
|
+
"@angular-devkit/schematics": "22.0.0-rc.0",
|
|
31
21
|
"@inquirer/prompts": "8.4.2",
|
|
32
22
|
"@listr2/prompt-adapter-inquirer": "4.2.3",
|
|
33
23
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
34
|
-
"@schematics/angular": "22.0.0-
|
|
24
|
+
"@schematics/angular": "22.0.0-rc.0",
|
|
35
25
|
"@yarnpkg/lockfile": "1.1.0",
|
|
36
|
-
"algoliasearch": "5.
|
|
26
|
+
"algoliasearch": "5.52.0",
|
|
37
27
|
"ini": "6.0.0",
|
|
38
28
|
"jsonc-parser": "3.3.1",
|
|
39
29
|
"listr2": "10.2.1",
|
|
@@ -42,25 +32,34 @@
|
|
|
42
32
|
"parse5-html-rewriting-stream": "8.0.1",
|
|
43
33
|
"semver": "7.7.4",
|
|
44
34
|
"yargs": "18.0.0",
|
|
45
|
-
"zod": "4.
|
|
35
|
+
"zod": "4.4.2"
|
|
46
36
|
},
|
|
47
37
|
"ng-update": {
|
|
48
38
|
"migrations": "@schematics/angular/migrations/migration-collection.json",
|
|
49
39
|
"packageGroup": {
|
|
50
|
-
"@angular/cli": "22.0.0-
|
|
51
|
-
"@angular/build": "22.0.0-
|
|
52
|
-
"@angular/ssr": "22.0.0-
|
|
53
|
-
"@angular-devkit/architect": "0.2200.0-
|
|
54
|
-
"@angular-devkit/build-angular": "22.0.0-
|
|
55
|
-
"@angular-devkit/build-webpack": "0.2200.0-
|
|
56
|
-
"@angular-devkit/core": "22.0.0-
|
|
57
|
-
"@angular-devkit/schematics": "22.0.0-
|
|
40
|
+
"@angular/cli": "22.0.0-rc.0",
|
|
41
|
+
"@angular/build": "22.0.0-rc.0",
|
|
42
|
+
"@angular/ssr": "22.0.0-rc.0",
|
|
43
|
+
"@angular-devkit/architect": "0.2200.0-rc.0",
|
|
44
|
+
"@angular-devkit/build-angular": "22.0.0-rc.0",
|
|
45
|
+
"@angular-devkit/build-webpack": "0.2200.0-rc.0",
|
|
46
|
+
"@angular-devkit/core": "22.0.0-rc.0",
|
|
47
|
+
"@angular-devkit/schematics": "22.0.0-rc.0"
|
|
58
48
|
}
|
|
59
49
|
},
|
|
60
|
-
"
|
|
50
|
+
"repository": {
|
|
51
|
+
"type": "git",
|
|
52
|
+
"url": "git+https://github.com/angular/angular-cli.git"
|
|
53
|
+
},
|
|
61
54
|
"engines": {
|
|
62
|
-
"node": "^22.22.0 ||
|
|
55
|
+
"node": "^22.22.0 || ^24.13.1 || >=26.0.0",
|
|
63
56
|
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
|
|
64
57
|
"yarn": ">= 1.13.0"
|
|
65
|
-
}
|
|
58
|
+
},
|
|
59
|
+
"author": "Angular Authors",
|
|
60
|
+
"license": "MIT",
|
|
61
|
+
"bugs": {
|
|
62
|
+
"url": "https://github.com/angular/angular-cli/issues"
|
|
63
|
+
},
|
|
64
|
+
"homepage": "https://github.com/angular/angular-cli"
|
|
66
65
|
}
|
|
@@ -51,13 +51,6 @@ 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.
|
|
@@ -94,8 +87,13 @@ export interface Host {
|
|
|
94
87
|
* Checks whether a TCP port is available on the system.
|
|
95
88
|
*/
|
|
96
89
|
isPortAvailable(port: number): Promise<boolean>;
|
|
90
|
+
/**
|
|
91
|
+
* Sets the allowed roots for this host.
|
|
92
|
+
*/
|
|
93
|
+
setRoots(roots: string[]): void;
|
|
97
94
|
}
|
|
98
95
|
/**
|
|
99
96
|
* A concrete implementation of the `Host` interface that runs on a local workspace.
|
|
100
97
|
*/
|
|
101
98
|
export declare const LocalWorkspaceHost: Host;
|
|
99
|
+
export declare function createRootRestrictedHost(baseHost: Host, initialRoots?: string[]): Host;
|
package/src/commands/mcp/host.js
CHANGED
|
@@ -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");
|
|
@@ -65,9 +67,6 @@ exports.LocalWorkspaceHost = {
|
|
|
65
67
|
glob: function (pattern, options) {
|
|
66
68
|
return (0, promises_1.glob)(pattern, { ...options, withFileTypes: true });
|
|
67
69
|
},
|
|
68
|
-
resolveModule(request, from) {
|
|
69
|
-
return (0, node_module_1.createRequire)(from).resolve(request);
|
|
70
|
-
},
|
|
71
70
|
runCommand: async (command, args, options = {}) => {
|
|
72
71
|
const resolved = resolveCommand(command, args, options.cwd);
|
|
73
72
|
const signal = options.timeout ? AbortSignal.timeout(options.timeout) : undefined;
|
|
@@ -150,5 +149,96 @@ exports.LocalWorkspaceHost = {
|
|
|
150
149
|
});
|
|
151
150
|
});
|
|
152
151
|
},
|
|
152
|
+
setRoots(roots) {
|
|
153
|
+
// LocalWorkspaceHost does not enforce roots, so this is a no-op.
|
|
154
|
+
},
|
|
153
155
|
};
|
|
156
|
+
function createRootRestrictedHost(baseHost, initialRoots = [process.cwd()]) {
|
|
157
|
+
let roots = initialRoots;
|
|
158
|
+
function checkPath(path) {
|
|
159
|
+
const resolvedPath = (0, node_path_1.resolve)(path);
|
|
160
|
+
let realPath;
|
|
161
|
+
try {
|
|
162
|
+
realPath = (0, node_fs_1.realpathSync)(resolvedPath);
|
|
163
|
+
}
|
|
164
|
+
catch (e) {
|
|
165
|
+
if (e.code === 'ENOENT') {
|
|
166
|
+
// Path does not exist. Find the first existing ancestor.
|
|
167
|
+
let current = resolvedPath;
|
|
168
|
+
while (current) {
|
|
169
|
+
try {
|
|
170
|
+
realPath = (0, node_fs_1.realpathSync)(current);
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
if (err.code !== 'ENOENT') {
|
|
175
|
+
throw err;
|
|
176
|
+
}
|
|
177
|
+
const parent = (0, node_path_1.dirname)(current);
|
|
178
|
+
if (parent === current) {
|
|
179
|
+
// Reached filesystem root
|
|
180
|
+
throw err;
|
|
181
|
+
}
|
|
182
|
+
current = parent;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
throw e;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const isAllowed = roots.some((root) => {
|
|
191
|
+
const rel = (0, node_path_1.relative)(root, realPath);
|
|
192
|
+
return !rel.startsWith('..') && !(0, node_path_1.isAbsolute)(rel);
|
|
193
|
+
});
|
|
194
|
+
if (!isAllowed) {
|
|
195
|
+
throw new Error(`Access denied: path '${path}' is outside allowed roots.`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
...baseHost,
|
|
200
|
+
setRoots(newRoots) {
|
|
201
|
+
roots = newRoots;
|
|
202
|
+
},
|
|
203
|
+
stat(path) {
|
|
204
|
+
checkPath(path);
|
|
205
|
+
return baseHost.stat(path);
|
|
206
|
+
},
|
|
207
|
+
existsSync(path) {
|
|
208
|
+
checkPath(path);
|
|
209
|
+
return baseHost.existsSync(path);
|
|
210
|
+
},
|
|
211
|
+
readFile(path, encoding) {
|
|
212
|
+
checkPath(path);
|
|
213
|
+
return baseHost.readFile(path, encoding);
|
|
214
|
+
},
|
|
215
|
+
glob(pattern, options) {
|
|
216
|
+
if (pattern.includes('..')) {
|
|
217
|
+
throw new Error(`Access denied: glob pattern '${pattern}' contains path traversal sequences.`);
|
|
218
|
+
}
|
|
219
|
+
checkPath(options.cwd);
|
|
220
|
+
const firstWildcardIndex = pattern.search(/[*?[{]/);
|
|
221
|
+
const basePath = firstWildcardIndex >= 0 ? pattern.substring(0, firstWildcardIndex) : pattern;
|
|
222
|
+
const targetDir = (0, node_path_1.resolve)(options.cwd, basePath);
|
|
223
|
+
checkPath(targetDir);
|
|
224
|
+
return baseHost.glob(pattern, options);
|
|
225
|
+
},
|
|
226
|
+
runCommand(command, args, options = {}) {
|
|
227
|
+
const effectiveCwd = options.cwd ?? process.cwd();
|
|
228
|
+
checkPath(effectiveCwd);
|
|
229
|
+
if (command.includes('/') || command.includes('\\')) {
|
|
230
|
+
checkPath((0, node_path_1.resolve)(effectiveCwd, command));
|
|
231
|
+
}
|
|
232
|
+
return baseHost.runCommand(command, args, options);
|
|
233
|
+
},
|
|
234
|
+
spawn(command, args, options = {}) {
|
|
235
|
+
const effectiveCwd = options.cwd ?? process.cwd();
|
|
236
|
+
checkPath(effectiveCwd);
|
|
237
|
+
if (command.includes('/') || command.includes('\\')) {
|
|
238
|
+
checkPath((0, node_path_1.resolve)(effectiveCwd, command));
|
|
239
|
+
}
|
|
240
|
+
return baseHost.spawn(command, args, options);
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
}
|
|
154
244
|
//# 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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"}
|
|
@@ -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,7 +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 modernize_1 = require("./tools/modernize");
|
|
27
28
|
const zoneless_migration_1 = require("./tools/onpush-zoneless-migration/zoneless-migration");
|
|
28
29
|
const projects_1 = require("./tools/projects");
|
|
29
30
|
const test_1 = require("./tools/test");
|
|
@@ -47,13 +48,7 @@ const STABLE_TOOLS = [
|
|
|
47
48
|
* The set of tools that are available but not enabled by default.
|
|
48
49
|
* These tools are considered experimental and may have limitations.
|
|
49
50
|
*/
|
|
50
|
-
exports.EXPERIMENTAL_TOOLS = [
|
|
51
|
-
build_1.BUILD_TOOL,
|
|
52
|
-
e2e_1.E2E_TOOL,
|
|
53
|
-
modernize_1.MODERNIZE_TOOL,
|
|
54
|
-
test_1.TEST_TOOL,
|
|
55
|
-
...DEVSERVER_TOOLS,
|
|
56
|
-
];
|
|
51
|
+
exports.EXPERIMENTAL_TOOLS = [build_1.BUILD_TOOL, e2e_1.E2E_TOOL, test_1.TEST_TOOL, ...DEVSERVER_TOOLS];
|
|
57
52
|
/**
|
|
58
53
|
* Experimental tools that are grouped together under a single name.
|
|
59
54
|
*
|
|
@@ -92,6 +87,12 @@ equivalent actions.
|
|
|
92
87
|
|
|
93
88
|
* **3. Answer User Questions:**
|
|
94
89
|
- For conceptual questions ("what is..."), use \`search_documentation\`.
|
|
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\`).
|
|
95
96
|
</Core Workflows & Tool Guide>
|
|
96
97
|
|
|
97
98
|
<Key Concepts>
|
|
@@ -107,12 +108,40 @@ equivalent actions.
|
|
|
107
108
|
...options,
|
|
108
109
|
logger,
|
|
109
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
|
+
};
|
|
110
139
|
await (0, tool_registry_1.registerTools)(server, {
|
|
111
140
|
workspace: options.workspace,
|
|
112
141
|
logger,
|
|
113
142
|
exampleDatabasePath: (0, node_path_1.join)(__dirname, '../../../lib/code-examples.db'),
|
|
114
143
|
devservers: new Map(),
|
|
115
|
-
host:
|
|
144
|
+
host: restrictedHost,
|
|
116
145
|
}, toolDeclarations);
|
|
117
146
|
return server;
|
|
118
147
|
}
|
|
@@ -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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"}
|
|
@@ -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,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["build.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AA+BH,
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["build.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AA+BH,4BAsCC;AAnED,6BAAwB;AACxB,sDAA+D;AAC/D,oCAA8E;AAC9E,wDAAgE;AAChE,mDAA4F;AAE5F,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAE5C,MAAM,iBAAiB,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAGzD,MAAM,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IACpC,GAAG,2CAA0B;IAC7B,aAAa,EAAE,OAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8DAA8D,CAAC;CAC5E,CAAC,CAAC;AAIH,MAAM,qBAAqB,GAAG,OAAC,CAAC,MAAM,CAAC;IACrC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,eAAe,CAAC;IACnD,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC7E,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CAC1F,CAAC,CAAC;AAII,KAAK,UAAU,QAAQ,CAAC,KAAqB,EAAE,OAAuB;IAC3E,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,4CAA0B,EAAC;QACtE,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,kBAAkB,EAAE,KAAK,CAAC,SAAS;QACnC,gBAAgB,EAAE,KAAK,CAAC,OAAO;QAC/B,YAAY,EAAE,OAAO,CAAC,SAAS;KAChC,CAAC,CAAC;IAEH,6BAA6B;IAC7B,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,IAAI,qBAAqB,CAAC,CAAC;IAExF,IAAI,MAAM,GAAgB,SAAS,CAAC;IACpC,IAAI,IAAc,CAAC;IACnB,IAAI,UAA8B,CAAC;IAEnC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAClF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,SAAS,CAAC;QACnB,IAAI,GAAG,IAAA,2BAAmB,EAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAClD,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,iBAAiB,GAAoB;QACzC,MAAM;QACN,IAAI;QACJ,IAAI,EAAE,UAAU;KACjB,CAAC;IAEF,OAAO,IAAA,qCAA6B,EAAC,iBAAiB,CAAC,CAAC;AAC1D,CAAC;AAEY,QAAA,UAAU,GAGnB,IAAA,2BAAW,EAAC;IACd,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE;;;;;;;;;;;;;;;CAed;IACC,UAAU,EAAE,KAAK;IACjB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,oBAAoB,CAAC,KAAK;IACvC,YAAY,EAAE,qBAAqB,CAAC,KAAK;IACzC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CAC1D,CAAC,CAAC"}
|
|
@@ -36,6 +36,7 @@ function localhostAddress(port) {
|
|
|
36
36
|
async function startDevserver(input, context) {
|
|
37
37
|
const { workspacePath, projectName } = await (0, workspace_utils_1.resolveWorkspaceAndProject)({
|
|
38
38
|
host: context.host,
|
|
39
|
+
server: context.server,
|
|
39
40
|
workspacePathInput: input.workspace,
|
|
40
41
|
projectNameInput: input.project,
|
|
41
42
|
mcpWorkspace: context.workspace,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devserver-start.js","sourceRoot":"","sources":["devserver-start.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAsCH,
|
|
1
|
+
{"version":3,"file":"devserver-start.js","sourceRoot":"","sources":["devserver-start.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@ const devserverStopToolOutputSchema = zod_1.z.object({
|
|
|
25
25
|
async function stopDevserver(input, context) {
|
|
26
26
|
const { workspacePath, projectName } = await (0, workspace_utils_1.resolveWorkspaceAndProject)({
|
|
27
27
|
host: context.host,
|
|
28
|
+
server: context.server,
|
|
28
29
|
workspacePathInput: input.workspace,
|
|
29
30
|
projectNameInput: input.project,
|
|
30
31
|
mcpWorkspace: context.workspace,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devserver-stop.js","sourceRoot":"","sources":["devserver-stop.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAsBH,
|
|
1
|
+
{"version":3,"file":"devserver-stop.js","sourceRoot":"","sources":["devserver-stop.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAsBH,sCAsBC;AA1CD,6BAAwB;AACxB,+CAAgF;AAChF,yDAAkE;AAClE,uCAA4D;AAC5D,2DAAmE;AACnE,oDAA6F;AAE7F,MAAM,4BAA4B,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5C,GAAG,2CAA0B;CAC9B,CAAC,CAAC;AAIH,MAAM,6BAA6B,GAAG,OAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IACjF,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CACpF,CAAC,CAAC;AAII,KAAK,UAAU,aAAa,CAAC,KAA6B,EAAE,OAAuB;IACxF,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,4CAA0B,EAAC;QACtE,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,kBAAkB,EAAE,KAAK,CAAC,SAAS;QACnC,gBAAgB,EAAE,KAAK,CAAC,OAAO;QAC/B,YAAY,EAAE,OAAO,CAAC,SAAS;KAChC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,IAAA,2BAAe,EAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAE9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAA,wCAA4B,EAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,SAAS,CAAC,IAAI,EAAE,CAAC;IACjB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE/B,OAAO,IAAA,qCAA6B,EAAC;QACnC,OAAO,EAAE,mCAAmC,WAAW,YAAY;QACnE,IAAI,EAAE,SAAS,CAAC,aAAa,EAAE;KAChC,CAAC,CAAC;AACL,CAAC;AAEY,QAAA,mBAAmB,GAG5B,IAAA,2BAAW,EAAC;IACd,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,yBAAyB;IAChC,WAAW,EAAE;;;;;;;;;;;;CAYd;IACC,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,4BAA4B,CAAC,KAAK;IAC/C,YAAY,EAAE,6BAA6B,CAAC,KAAK;IACjD,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9B,OAAO,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -45,6 +45,7 @@ function wait(ms) {
|
|
|
45
45
|
async function waitForDevserverBuild(input, context) {
|
|
46
46
|
const { workspacePath, projectName } = await (0, workspace_utils_1.resolveWorkspaceAndProject)({
|
|
47
47
|
host: context.host,
|
|
48
|
+
server: context.server,
|
|
48
49
|
workspacePathInput: input.workspace,
|
|
49
50
|
projectNameInput: input.project,
|
|
50
51
|
mcpWorkspace: context.workspace,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devserver-wait-for-build.js","sourceRoot":"","sources":["devserver-wait-for-build.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAiDH,
|
|
1
|
+
{"version":3,"file":"devserver-wait-for-build.js","sourceRoot":"","sources":["devserver-wait-for-build.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@ const e2eToolOutputSchema = zod_1.z.object({
|
|
|
25
25
|
async function runE2e(input, host, context) {
|
|
26
26
|
const { workspacePath, workspace, projectName } = await (0, workspace_utils_1.resolveWorkspaceAndProject)({
|
|
27
27
|
host,
|
|
28
|
+
server: context.server,
|
|
28
29
|
workspacePathInput: input.workspace,
|
|
29
30
|
projectNameInput: input.project,
|
|
30
31
|
mcpWorkspace: context.workspace,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e2e.js","sourceRoot":"","sources":["e2e.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAyBH,
|
|
1
|
+
{"version":3,"file":"e2e.js","sourceRoot":"","sources":["e2e.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAyBH,wBA6CC;AApED,6BAAwB;AAExB,sDAA+D;AAC/D,oCAA8E;AAC9E,wDAAgE;AAChE,mDAA4F;AAE5F,MAAM,eAAe,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAGvD,MAAM,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IAClC,GAAG,2CAA0B;CAC9B,CAAC,CAAC;AAIH,MAAM,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACzD,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CAC5E,CAAC,CAAC;AAII,KAAK,UAAU,MAAM,CAAC,KAAmB,EAAE,IAAU,EAAE,OAAuB;IACnF,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,4CAA0B,EAAC;QACjF,IAAI;QACJ,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,kBAAkB,EAAE,KAAK,CAAC,SAAS;QACnC,gBAAgB,EAAE,KAAK,CAAC,OAAO;QAC/B,YAAY,EAAE,OAAO,CAAC,SAAS;KAChC,CAAC,CAAC;IAEH,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;QAC7B,+EAA+E;QAC/E,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,OAAO,IAAA,qCAA6B,EAAC;oBACnC,MAAM,EAAE,SAAS;oBACjB,IAAI,EAAE;wBACJ,yCAAyC,WAAW,8BAA8B;4BAChF,uDAAuD;4BACvD,gDAAgD;qBACnD;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAElC,IAAI,MAAM,GAAc,SAAS,CAAC;IAClC,IAAI,IAAc,CAAC;IAEnB,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,SAAS,CAAC;QACnB,IAAI,GAAG,IAAA,2BAAmB,EAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,iBAAiB,GAAkB;QACvC,MAAM;QACN,IAAI;KACL,CAAC;IAEF,OAAO,IAAA,qCAA6B,EAAC,iBAAiB,CAAC,CAAC;AAC1D,CAAC;AAEY,QAAA,QAAQ,GAGjB,IAAA,2BAAW,EAAC;IACd,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,UAAU;IACjB,WAAW,EAAE;;;;;;;;;;;;CAYd;IACC,UAAU,EAAE,KAAK;IACjB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,kBAAkB,CAAC,KAAK;IACrC,YAAY,EAAE,mBAAmB,CAAC,KAAK;IACvC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;CACtE,CAAC,CAAC"}
|
|
@@ -43,8 +43,8 @@ most important action to take in the migration journey.
|
|
|
43
43
|
* **Iterative Process:** The migration process is iterative. You must call this tool repeatedly,
|
|
44
44
|
applying the suggested fix after each call, until the tool indicates that no more actions are
|
|
45
45
|
needed.
|
|
46
|
-
* **Relationship to
|
|
47
|
-
migration. For other migrations (like signal inputs), you should
|
|
46
|
+
* **Relationship to other migrations:** This tool is the specialized starting point for the zoneless/OnPush
|
|
47
|
+
migration. For other migrations (like signal inputs), you should run the corresponding schematics first,
|
|
48
48
|
as the zoneless migration may depend on them as prerequisites.
|
|
49
49
|
* **Input:** The tool can operate on either a single file or an entire directory. Provide the
|
|
50
50
|
absolute path.
|
|
@@ -41,8 +41,9 @@ export declare function getDefaultProjectName(workspace: AngularWorkspace | unde
|
|
|
41
41
|
* current directory as the workspace.
|
|
42
42
|
* If `projectNameInput` is absent, uses the default project in the workspace.
|
|
43
43
|
*/
|
|
44
|
-
export declare function resolveWorkspaceAndProject({ host, workspacePathInput, projectNameInput, mcpWorkspace, }: {
|
|
44
|
+
export declare function resolveWorkspaceAndProject({ host, server, workspacePathInput, projectNameInput, mcpWorkspace, }: {
|
|
45
45
|
host: Host;
|
|
46
|
+
server?: McpToolContext['server'];
|
|
46
47
|
workspacePathInput?: string;
|
|
47
48
|
projectNameInput?: string;
|
|
48
49
|
mcpWorkspace?: AngularWorkspace;
|
|
@@ -11,7 +11,9 @@ exports.findAngularJsonDir = findAngularJsonDir;
|
|
|
11
11
|
exports.getProject = getProject;
|
|
12
12
|
exports.getDefaultProjectName = getDefaultProjectName;
|
|
13
13
|
exports.resolveWorkspaceAndProject = resolveWorkspaceAndProject;
|
|
14
|
+
const node_fs_1 = require("node:fs");
|
|
14
15
|
const node_path_1 = require("node:path");
|
|
16
|
+
const node_url_1 = require("node:url");
|
|
15
17
|
const config_1 = require("../../utilities/config");
|
|
16
18
|
const host_1 = require("./host");
|
|
17
19
|
/**
|
|
@@ -71,6 +73,36 @@ function getDefaultProjectName(workspace) {
|
|
|
71
73
|
}
|
|
72
74
|
return undefined;
|
|
73
75
|
}
|
|
76
|
+
function isWithinAllowedRoot(root, targetPath) {
|
|
77
|
+
const rel = (0, node_path_1.relative)(root, targetPath);
|
|
78
|
+
return !rel.startsWith('..') && !(0, node_path_1.isAbsolute)(rel);
|
|
79
|
+
}
|
|
80
|
+
async function getAllowedWorkspaceRoots(server) {
|
|
81
|
+
let roots;
|
|
82
|
+
const clientCapabilities = server.server.getClientCapabilities();
|
|
83
|
+
if (clientCapabilities?.roots) {
|
|
84
|
+
const { roots: clientRoots } = await server.server.listRoots();
|
|
85
|
+
roots = clientRoots?.map((root) => (0, node_url_1.fileURLToPath)(root.uri)) ?? [];
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
roots = [process.cwd()];
|
|
89
|
+
}
|
|
90
|
+
return roots
|
|
91
|
+
.map((root) => {
|
|
92
|
+
try {
|
|
93
|
+
return (0, node_fs_1.realpathSync)(root);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
})
|
|
99
|
+
.filter((root) => root !== null);
|
|
100
|
+
}
|
|
101
|
+
async function isAllowedWorkspacePath(server, workspacePath) {
|
|
102
|
+
const allowedRoots = await getAllowedWorkspaceRoots(server);
|
|
103
|
+
const resolvedWorkspacePath = (0, node_fs_1.realpathSync)(workspacePath);
|
|
104
|
+
return allowedRoots.some((root) => isWithinAllowedRoot(root, resolvedWorkspacePath));
|
|
105
|
+
}
|
|
74
106
|
/**
|
|
75
107
|
* Resolves workspace and project for tools to operate on.
|
|
76
108
|
*
|
|
@@ -78,7 +110,7 @@ function getDefaultProjectName(workspace) {
|
|
|
78
110
|
* current directory as the workspace.
|
|
79
111
|
* If `projectNameInput` is absent, uses the default project in the workspace.
|
|
80
112
|
*/
|
|
81
|
-
async function resolveWorkspaceAndProject({ host, workspacePathInput, projectNameInput, mcpWorkspace, }) {
|
|
113
|
+
async function resolveWorkspaceAndProject({ host, server, workspacePathInput, projectNameInput, mcpWorkspace, }) {
|
|
82
114
|
let workspacePath;
|
|
83
115
|
let workspace;
|
|
84
116
|
if (workspacePathInput) {
|
|
@@ -90,6 +122,12 @@ async function resolveWorkspaceAndProject({ host, workspacePathInput, projectNam
|
|
|
90
122
|
throw new Error(`No angular.json found at ${workspacePathInput}. ` +
|
|
91
123
|
"You can use 'list_projects' to find available workspaces.");
|
|
92
124
|
}
|
|
125
|
+
if (server) {
|
|
126
|
+
if (!(await isAllowedWorkspacePath(server, workspacePathInput))) {
|
|
127
|
+
throw new Error(`Workspace path is outside the allowed MCP roots: ${workspacePathInput}. ` +
|
|
128
|
+
"You can use 'list_projects' to find available workspaces.");
|
|
129
|
+
}
|
|
130
|
+
}
|
|
93
131
|
workspacePath = workspacePathInput;
|
|
94
132
|
const configPath = (0, node_path_1.join)(workspacePath, 'angular.json');
|
|
95
133
|
try {
|
|
@@ -109,6 +147,10 @@ async function resolveWorkspaceAndProject({ host, workspacePathInput, projectNam
|
|
|
109
147
|
throw new Error('Could not find an Angular workspace (angular.json) in the current directory. ' +
|
|
110
148
|
"You can use 'list_projects' to find available workspaces.");
|
|
111
149
|
}
|
|
150
|
+
if (server && !(await isAllowedWorkspacePath(server, found))) {
|
|
151
|
+
throw new Error(`The current directory resolves to a workspace outside the allowed MCP roots: ${found}. ` +
|
|
152
|
+
"You can use 'list_projects' to find available workspaces.");
|
|
153
|
+
}
|
|
112
154
|
workspacePath = found;
|
|
113
155
|
const configPath = (0, node_path_1.join)(workspacePath, 'angular.json');
|
|
114
156
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-utils.js","sourceRoot":"","sources":["workspace-utils.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"workspace-utils.js","sourceRoot":"","sources":["workspace-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ exports.isNodeVersionMinSupported = isNodeVersionMinSupported;
|
|
|
17
17
|
/**
|
|
18
18
|
* The supported Node.js version for the Angular CLI.
|
|
19
19
|
*/
|
|
20
|
-
const SUPPORTED_NODE_VERSIONS = '^22.22.0 ||
|
|
20
|
+
const SUPPORTED_NODE_VERSIONS = '^22.22.0 || ^24.13.1 || >=26.0.0';
|
|
21
21
|
/**
|
|
22
22
|
* The supported Node.js versions.
|
|
23
23
|
*/
|
package/src/utilities/version.js
CHANGED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.dev/license
|
|
7
|
-
*/
|
|
8
|
-
import { z } from 'zod';
|
|
9
|
-
import { type McpToolContext, type McpToolDeclaration } from './tool-registry';
|
|
10
|
-
declare const modernizeInputSchema: z.ZodObject<{
|
|
11
|
-
transformations: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
12
|
-
[x: string]: string;
|
|
13
|
-
}>>>;
|
|
14
|
-
path: z.ZodOptional<z.ZodString>;
|
|
15
|
-
workspace: z.ZodOptional<z.ZodString>;
|
|
16
|
-
project: z.ZodOptional<z.ZodString>;
|
|
17
|
-
}, z.core.$strip>;
|
|
18
|
-
declare const modernizeOutputSchema: z.ZodObject<{
|
|
19
|
-
instructions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
20
|
-
logs: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
21
|
-
}, z.core.$strip>;
|
|
22
|
-
export type ModernizeInput = z.infer<typeof modernizeInputSchema>;
|
|
23
|
-
export type ModernizeOutput = z.infer<typeof modernizeOutputSchema>;
|
|
24
|
-
export declare function runModernization(input: ModernizeInput, context: McpToolContext): Promise<{
|
|
25
|
-
content: {
|
|
26
|
-
type: "text";
|
|
27
|
-
text: string;
|
|
28
|
-
}[];
|
|
29
|
-
structuredContent: {
|
|
30
|
-
instructions: string[];
|
|
31
|
-
};
|
|
32
|
-
} | {
|
|
33
|
-
content: {
|
|
34
|
-
type: "text";
|
|
35
|
-
text: string;
|
|
36
|
-
}[];
|
|
37
|
-
structuredContent: {
|
|
38
|
-
instructions: string[] | undefined;
|
|
39
|
-
logs: string[];
|
|
40
|
-
};
|
|
41
|
-
}>;
|
|
42
|
-
export declare const MODERNIZE_TOOL: McpToolDeclaration<typeof modernizeInputSchema.shape, typeof modernizeOutputSchema.shape>;
|
|
43
|
-
export {};
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.MODERNIZE_TOOL = void 0;
|
|
11
|
-
exports.runModernization = runModernization;
|
|
12
|
-
const zod_1 = require("zod");
|
|
13
|
-
const shared_options_1 = require("../shared-options");
|
|
14
|
-
const utils_1 = require("../utils");
|
|
15
|
-
const workspace_utils_1 = require("../workspace-utils");
|
|
16
|
-
const tool_registry_1 = require("./tool-registry");
|
|
17
|
-
const TRANSFORMATIONS = [
|
|
18
|
-
{
|
|
19
|
-
name: 'control-flow',
|
|
20
|
-
description: 'Migrates from `*ngIf`, `*ngFor`, and `*ngSwitch` to the new `@if`, `@for`, and `@switch` block syntax in templates.',
|
|
21
|
-
documentationUrl: 'https://angular.dev/reference/migrations/control-flow',
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
name: 'self-closing-tag',
|
|
25
|
-
description: 'Converts tags for elements with no content to be self-closing (e.g., `<app-foo></app-foo>` becomes `<app-foo />`).',
|
|
26
|
-
documentationUrl: 'https://angular.dev/reference/migrations/self-closing-tags',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
name: 'inject',
|
|
30
|
-
description: 'Converts usages of constructor-based injection to the inject() function.',
|
|
31
|
-
documentationUrl: 'https://angular.dev/reference/migrations/inject-function',
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
name: 'output-migration',
|
|
35
|
-
description: 'Converts `@Output` declarations to the new functional `output()` syntax.',
|
|
36
|
-
documentationUrl: 'https://angular.dev/reference/migrations/outputs',
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
name: 'signal-input-migration',
|
|
40
|
-
description: 'Migrates `@Input` declarations to the new signal-based `input()` syntax.',
|
|
41
|
-
documentationUrl: 'https://angular.dev/reference/migrations/signal-inputs',
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
name: 'signal-queries-migration',
|
|
45
|
-
description: 'Migrates `@ViewChild` and `@ContentChild` queries to their signal-based `viewChild` and `contentChild` versions.',
|
|
46
|
-
documentationUrl: 'https://angular.dev/reference/migrations/signal-queries',
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
name: 'standalone',
|
|
50
|
-
description: 'Converts the application to use standalone components, directives, and pipes. This is a ' +
|
|
51
|
-
'three-step process. After each step, you should verify that your application builds and ' +
|
|
52
|
-
'runs correctly.',
|
|
53
|
-
instructions: 'This migration requires running a cli schematic multiple times. Run the commands in the ' +
|
|
54
|
-
'order listed below, verifying that your code builds and runs between each step:\n\n' +
|
|
55
|
-
'1. Run `ng g @angular/core:standalone` and select "Convert all components, directives and pipes to standalone"\n' +
|
|
56
|
-
'2. Run `ng g @angular/core:standalone` and select "Remove unnecessary NgModule classes"\n' +
|
|
57
|
-
'3. Run `ng g @angular/core:standalone` and select "Bootstrap the project using standalone APIs"',
|
|
58
|
-
documentationUrl: 'https://angular.dev/reference/migrations/standalone',
|
|
59
|
-
},
|
|
60
|
-
];
|
|
61
|
-
const modernizeInputSchema = zod_1.z.object({
|
|
62
|
-
...shared_options_1.workspaceAndProjectOptions,
|
|
63
|
-
transformations: zod_1.z
|
|
64
|
-
.array(zod_1.z.enum(TRANSFORMATIONS.map((t) => t.name)))
|
|
65
|
-
.optional()
|
|
66
|
-
.describe('A list of specific transformations to apply.'),
|
|
67
|
-
path: zod_1.z
|
|
68
|
-
.string()
|
|
69
|
-
.optional()
|
|
70
|
-
.describe('The path to the file or directory to modernize, relative to the workspace root.'),
|
|
71
|
-
});
|
|
72
|
-
const modernizeOutputSchema = zod_1.z.object({
|
|
73
|
-
instructions: zod_1.z
|
|
74
|
-
.array(zod_1.z.string())
|
|
75
|
-
.optional()
|
|
76
|
-
.describe('Migration summary, as well as any instructions that need to be performed to complete the migrations.'),
|
|
77
|
-
logs: zod_1.z.array(zod_1.z.string()).optional().describe('All logs from all executed commands.'),
|
|
78
|
-
});
|
|
79
|
-
async function runModernization(input, context) {
|
|
80
|
-
const transformationNames = input.transformations ?? [];
|
|
81
|
-
if (transformationNames.length === 0) {
|
|
82
|
-
return (0, utils_1.createStructuredContentOutput)({
|
|
83
|
-
instructions: [
|
|
84
|
-
'Call this tool with the specific transformations you want to run. See the tool description for more info. Also call the' +
|
|
85
|
-
' `get_best_practices` tool for general Angular best practices.',
|
|
86
|
-
],
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
const { workspacePath, projectName } = await (0, workspace_utils_1.resolveWorkspaceAndProject)({
|
|
90
|
-
host: context.host,
|
|
91
|
-
workspacePathInput: input.workspace,
|
|
92
|
-
projectNameInput: input.project,
|
|
93
|
-
mcpWorkspace: context.workspace,
|
|
94
|
-
});
|
|
95
|
-
const instructions = [];
|
|
96
|
-
let logs = [];
|
|
97
|
-
const transformationsToRun = TRANSFORMATIONS.filter((t) => transformationNames.includes(t.name));
|
|
98
|
-
for (const transformation of transformationsToRun) {
|
|
99
|
-
if (transformation.instructions) {
|
|
100
|
-
// This is a complex case, return instructions.
|
|
101
|
-
let transformationInstructions = transformation.instructions;
|
|
102
|
-
if (transformation.documentationUrl) {
|
|
103
|
-
transformationInstructions += `\nFor more information, see ${transformation.documentationUrl}.`;
|
|
104
|
-
}
|
|
105
|
-
instructions.push(transformationInstructions);
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
// Simple case, run the command.
|
|
109
|
-
const command = 'ng';
|
|
110
|
-
const args = ['generate', `@angular/core:${transformation.name}`, '--project', projectName];
|
|
111
|
-
if (input.path) {
|
|
112
|
-
args.push('--path', input.path);
|
|
113
|
-
}
|
|
114
|
-
try {
|
|
115
|
-
logs = (await context.host.runCommand(command, args, {
|
|
116
|
-
cwd: workspacePath,
|
|
117
|
-
})).logs;
|
|
118
|
-
instructions.push(`Migration ${transformation.name} completed successfully.`);
|
|
119
|
-
}
|
|
120
|
-
catch (e) {
|
|
121
|
-
logs = (0, utils_1.getCommandErrorLogs)(e);
|
|
122
|
-
instructions.push(`Migration ${transformation.name} failed.`);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return (0, utils_1.createStructuredContentOutput)({
|
|
127
|
-
instructions: instructions.length > 0 ? instructions : undefined,
|
|
128
|
-
logs,
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
exports.MODERNIZE_TOOL = (0, tool_registry_1.declareTool)({
|
|
132
|
-
name: 'modernize',
|
|
133
|
-
title: 'Modernize Angular Code',
|
|
134
|
-
description: `
|
|
135
|
-
<Purpose>
|
|
136
|
-
Provides instructions and commands for modernizing Angular code to align with the latest best
|
|
137
|
-
practices and syntax. This tool helps ensure code is idiomatic, readable, and maintainable by
|
|
138
|
-
generating the exact steps needed to perform specific migrations.
|
|
139
|
-
</Purpose>
|
|
140
|
-
<Use Cases>
|
|
141
|
-
* **Applying Specific Migrations:** Get the precise commands to update code to modern patterns
|
|
142
|
-
(e.g., selecting 'control-flow-migration' to replace *ngIf with @if).
|
|
143
|
-
* **Upgrading Existing Code:** Modernize an entire project by running the 'standalone' migration,
|
|
144
|
-
which provides a multi-step command sequence.
|
|
145
|
-
* **Discovering Available Migrations:** Call the tool with no transformations to get a link to the
|
|
146
|
-
general best practices guide.
|
|
147
|
-
</Use Cases>
|
|
148
|
-
<Operational Notes>
|
|
149
|
-
* **Execution:** This tool executes 'ng generate' commands for simple migrations in a temporary
|
|
150
|
-
environment using the provided file content. For complex migrations like 'standalone', it
|
|
151
|
-
provides instructions which you **MUST** then execute as shell commands.
|
|
152
|
-
* **File Modifications:** This tool has been fixed and now correctly finds the node_modules directory in a Bazel environment.
|
|
153
|
-
* **Standalone Migration:** The 'standalone' transformation is a special, multi-step process.
|
|
154
|
-
The tool will provide instructions. You **MUST** execute the commands in the exact order
|
|
155
|
-
provided and validate your application between each step.
|
|
156
|
-
* **Transformation List:** The following transformations are available:
|
|
157
|
-
${TRANSFORMATIONS.map((t) => ` * ${t.name}: ${t.description}`).join('\n')}
|
|
158
|
-
</Operational Notes>`,
|
|
159
|
-
inputSchema: modernizeInputSchema.shape,
|
|
160
|
-
outputSchema: modernizeOutputSchema.shape,
|
|
161
|
-
isLocalOnly: true,
|
|
162
|
-
isReadOnly: false,
|
|
163
|
-
factory: (context) => (input) => runModernization(input, context),
|
|
164
|
-
});
|
|
165
|
-
//# sourceMappingURL=modernize.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modernize.js","sourceRoot":"","sources":["modernize.ts"],"names":[],"mappings":"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"}
|