@angular/cli 22.2.1 → 22.3.0-next.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 +7 -10
- package/bin/version.js +98 -0
- package/index.d.ts +19 -0
- package/lib/chunk-5AASRQKS.js +85 -0
- package/lib/chunk-A2VIYA2E.js +165 -0
- package/lib/chunk-CAZUOCTC.js +225 -0
- package/lib/chunk-DHWVZMLH.js +206 -0
- package/lib/chunk-FZ5GFCWU.js +483 -0
- package/lib/chunk-G7TRU43D.js +42 -0
- package/lib/chunk-GHUUJYOY.js +40 -0
- package/lib/chunk-JBLF2TH3.js +267 -0
- package/lib/chunk-Q67GOPL7.js +380 -0
- package/lib/chunk-SN4KY4Z3.js +24 -0
- package/lib/chunk-XFL2J3CJ.js +24 -0
- package/lib/chunk-XG3HVNIL.js +59 -0
- package/lib/chunk-YM7ILCS5.js +2573 -0
- package/lib/cli/index.js +353 -105
- package/lib/cli-4CMZ6KMR.js +48 -0
- package/lib/cli-4Q7DGTBA.js +33 -0
- package/lib/cli-6AHY7ADW.js +96 -0
- package/lib/cli-A5UAJDO6.js +135 -0
- package/lib/cli-ACLGUIBI.js +2531 -0
- package/lib/cli-BQRFWIMG.js +35 -0
- package/lib/cli-CWICUPZW.js +42 -0
- package/lib/cli-DWQUM3M2.js +29 -0
- package/lib/cli-L4TM4JH3.js +88 -0
- package/lib/cli-LYBZEMDR.js +96 -0
- package/lib/cli-PDCEX7HQ.js +605 -0
- package/lib/cli-PJVTDBQM.js +51 -0
- package/lib/cli-PRIRL3WP.js +185 -0
- package/lib/cli-PU5VH7JB.js +189 -0
- package/lib/cli-QUH44NUB.js +68 -0
- package/lib/cli-VVITNTBC.js +50 -0
- package/lib/cli-XM4L4PP4.js +1651 -0
- package/lib/cli-Y2ECUR33.js +33 -0
- package/lib/cli-YDSMJOSO.js +182 -0
- package/lib/color-SJPGXZVA.js +8 -0
- package/lib/config/schema.json +204 -0
- package/lib/config-QXK7SSVG.js +22 -0
- package/lib/init.js +91 -180
- package/package.json +20 -15
- package/lib/cli/index.d.ts +0 -11
- package/lib/cli/index.js.map +0 -1
- package/lib/config/workspace-schema.d.ts +0 -1025
- package/lib/config/workspace-schema.js +0 -131
- package/lib/config/workspace-schema.js.map +0 -1
- package/lib/init.d.ts +0 -8
- package/lib/init.js.map +0 -1
- package/src/analytics/analytics-collector.d.ts +0 -35
- package/src/analytics/analytics-collector.js +0 -195
- package/src/analytics/analytics-collector.js.map +0 -1
- package/src/analytics/analytics-parameters.d.ts +0 -101
- package/src/analytics/analytics-parameters.js +0 -107
- package/src/analytics/analytics-parameters.js.map +0 -1
- package/src/analytics/analytics.d.ts +0 -27
- package/src/analytics/analytics.js +0 -183
- package/src/analytics/analytics.js.map +0 -1
- package/src/command-builder/architect-base-command-module.d.ts +0 -30
- package/src/command-builder/architect-base-command-module.js +0 -244
- package/src/command-builder/architect-base-command-module.js.map +0 -1
- package/src/command-builder/architect-command-module.d.ts +0 -28
- package/src/command-builder/architect-command-module.js +0 -218
- package/src/command-builder/architect-command-module.js.map +0 -1
- package/src/command-builder/command-module.d.ts +0 -73
- package/src/command-builder/command-module.js +0 -260
- package/src/command-builder/command-module.js.map +0 -1
- package/src/command-builder/command-runner.d.ts +0 -9
- package/src/command-builder/command-runner.js +0 -202
- package/src/command-builder/command-runner.js.map +0 -1
- package/src/command-builder/definitions.d.ts +0 -41
- package/src/command-builder/definitions.js +0 -20
- package/src/command-builder/definitions.js.map +0 -1
- package/src/command-builder/schematics-command-module.d.ts +0 -41
- package/src/command-builder/schematics-command-module.js +0 -408
- package/src/command-builder/schematics-command-module.js.map +0 -1
- package/src/command-builder/utilities/command.d.ts +0 -13
- package/src/command-builder/utilities/command.js +0 -39
- package/src/command-builder/utilities/command.js.map +0 -1
- package/src/command-builder/utilities/json-help.d.ts +0 -37
- package/src/command-builder/utilities/json-help.js +0 -92
- package/src/command-builder/utilities/json-help.js.map +0 -1
- package/src/command-builder/utilities/json-schema.d.ts +0 -64
- package/src/command-builder/utilities/json-schema.js +0 -349
- package/src/command-builder/utilities/json-schema.js.map +0 -1
- package/src/command-builder/utilities/normalize-options-middleware.d.ts +0 -18
- package/src/command-builder/utilities/normalize-options-middleware.js +0 -37
- package/src/command-builder/utilities/normalize-options-middleware.js.map +0 -1
- package/src/command-builder/utilities/schematic-engine-host.d.ts +0 -15
- package/src/command-builder/utilities/schematic-engine-host.js +0 -179
- package/src/command-builder/utilities/schematic-engine-host.js.map +0 -1
- package/src/command-builder/utilities/schematic-workflow.d.ts +0 -14
- package/src/command-builder/utilities/schematic-workflow.js +0 -70
- package/src/command-builder/utilities/schematic-workflow.js.map +0 -1
- package/src/commands/add/cli.d.ts +0 -41
- package/src/commands/add/cli.js +0 -705
- package/src/commands/add/cli.js.map +0 -1
- package/src/commands/add/long-description.md +0 -7
- package/src/commands/analytics/cli.d.ts +0 -16
- package/src/commands/analytics/cli.js +0 -34
- package/src/commands/analytics/cli.js.map +0 -1
- package/src/commands/analytics/info/cli.d.ts +0 -16
- package/src/commands/analytics/info/cli.js +0 -25
- package/src/commands/analytics/info/cli.js.map +0 -1
- package/src/commands/analytics/long-description.md +0 -20
- package/src/commands/analytics/settings/cli.d.ts +0 -35
- package/src/commands/analytics/settings/cli.js +0 -54
- package/src/commands/analytics/settings/cli.js.map +0 -1
- package/src/commands/build/cli.d.ts +0 -16
- package/src/commands/build/cli.js +0 -21
- package/src/commands/build/cli.js.map +0 -1
- package/src/commands/build/long-description.md +0 -18
- package/src/commands/cache/clean/cli.d.ts +0 -17
- package/src/commands/cache/clean/cli.js +0 -32
- package/src/commands/cache/clean/cli.js.map +0 -1
- package/src/commands/cache/cli.d.ts +0 -17
- package/src/commands/cache/cli.js +0 -36
- package/src/commands/cache/cli.js.map +0 -1
- package/src/commands/cache/info/cli.d.ts +0 -20
- package/src/commands/cache/info/cli.js +0 -139
- package/src/commands/cache/info/cli.js.map +0 -1
- package/src/commands/cache/long-description.md +0 -53
- package/src/commands/cache/settings/cli.d.ts +0 -27
- package/src/commands/cache/settings/cli.js +0 -41
- package/src/commands/cache/settings/cli.js.map +0 -1
- package/src/commands/cache/utilities.d.ts +0 -11
- package/src/commands/cache/utilities.js +0 -90
- package/src/commands/cache/utilities.js.map +0 -1
- package/src/commands/command-config.d.ts +0 -17
- package/src/commands/command-config.js +0 -116
- package/src/commands/command-config.js.map +0 -1
- package/src/commands/completion/cli.d.ts +0 -16
- package/src/commands/completion/cli.js +0 -61
- package/src/commands/completion/cli.js.map +0 -1
- package/src/commands/completion/long-description.md +0 -67
- package/src/commands/config/cli.d.ts +0 -24
- package/src/commands/config/cli.js +0 -150
- package/src/commands/config/cli.js.map +0 -1
- package/src/commands/config/long-description.md +0 -13
- package/src/commands/deploy/cli.d.ts +0 -17
- package/src/commands/deploy/cli.js +0 -38
- package/src/commands/deploy/cli.js.map +0 -1
- package/src/commands/deploy/long-description.md +0 -22
- package/src/commands/e2e/cli.d.ts +0 -18
- package/src/commands/e2e/cli.js +0 -42
- package/src/commands/e2e/cli.js.map +0 -1
- package/src/commands/extract-i18n/cli.d.ts +0 -17
- package/src/commands/extract-i18n/cli.js +0 -48
- package/src/commands/extract-i18n/cli.js.map +0 -1
- package/src/commands/generate/cli.d.ts +0 -47
- package/src/commands/generate/cli.js +0 -189
- package/src/commands/generate/cli.js.map +0 -1
- package/src/commands/lint/cli.d.ts +0 -17
- package/src/commands/lint/cli.js +0 -25
- package/src/commands/lint/cli.js.map +0 -1
- package/src/commands/lint/long-description.md +0 -20
- package/src/commands/make-this-awesome/cli.d.ts +0 -17
- package/src/commands/make-this-awesome/cli.js +0 -36
- package/src/commands/make-this-awesome/cli.js.map +0 -1
- package/src/commands/mcp/cli.d.ts +0 -21
- package/src/commands/mcp/cli.js +0 -74
- package/src/commands/mcp/cli.js.map +0 -1
- package/src/commands/mcp/constants.d.ts +0 -10
- package/src/commands/mcp/constants.js +0 -16
- package/src/commands/mcp/constants.js.map +0 -1
- package/src/commands/mcp/devserver.d.ts +0 -85
- package/src/commands/mcp/devserver.js +0 -109
- package/src/commands/mcp/devserver.js.map +0 -1
- package/src/commands/mcp/host.d.ts +0 -103
- package/src/commands/mcp/host.js +0 -270
- package/src/commands/mcp/host.js.map +0 -1
- package/src/commands/mcp/mcp-server.d.ts +0 -38
- package/src/commands/mcp/mcp-server.js +0 -176
- package/src/commands/mcp/mcp-server.js.map +0 -1
- package/src/commands/mcp/resources/ai-tutor.md +0 -822
- package/src/commands/mcp/resources/best-practices.md +0 -59
- package/src/commands/mcp/resources/instructions.d.ts +0 -9
- package/src/commands/mcp/resources/instructions.js +0 -26
- package/src/commands/mcp/resources/instructions.js.map +0 -1
- package/src/commands/mcp/shared-options.d.ts +0 -12
- package/src/commands/mcp/shared-options.js +0 -22
- package/src/commands/mcp/shared-options.js.map +0 -1
- package/src/commands/mcp/tools/ai-tutor.d.ts +0 -12
- package/src/commands/mcp/tools/ai-tutor.js +0 -59
- package/src/commands/mcp/tools/ai-tutor.js.map +0 -1
- package/src/commands/mcp/tools/best-practices.d.ts +0 -13
- package/src/commands/mcp/tools/best-practices.js +0 -196
- package/src/commands/mcp/tools/best-practices.js.map +0 -1
- package/src/commands/mcp/tools/devserver/devserver-start.d.ts +0 -32
- package/src/commands/mcp/tools/devserver/devserver-start.js +0 -110
- package/src/commands/mcp/tools/devserver/devserver-start.js.map +0 -1
- package/src/commands/mcp/tools/devserver/devserver-stop.d.ts +0 -31
- package/src/commands/mcp/tools/devserver/devserver-stop.js +0 -69
- package/src/commands/mcp/tools/devserver/devserver-stop.js.map +0 -1
- package/src/commands/mcp/tools/devserver/devserver-wait-for-build.d.ts +0 -41
- package/src/commands/mcp/tools/devserver/devserver-wait-for-build.js +0 -105
- package/src/commands/mcp/tools/devserver/devserver-wait-for-build.js.map +0 -1
- package/src/commands/mcp/tools/doc-search.d.ts +0 -21
- package/src/commands/mcp/tools/doc-search.js +0 -307
- package/src/commands/mcp/tools/doc-search.js.map +0 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/analyze-for-unsupported-zone-uses.d.ts +0 -17
- package/src/commands/mcp/tools/onpush-zoneless-migration/analyze-for-unsupported-zone-uses.js +0 -62
- package/src/commands/mcp/tools/onpush-zoneless-migration/analyze-for-unsupported-zone-uses.js.map +0 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.d.ts +0 -12
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.js +0 -70
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.js.map +0 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-test-file.d.ts +0 -12
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-test-file.js +0 -60
- package/src/commands/mcp/tools/onpush-zoneless-migration/migrate-test-file.js.map +0 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/prompts.d.ts +0 -15
- package/src/commands/mcp/tools/onpush-zoneless-migration/prompts.js +0 -238
- package/src/commands/mcp/tools/onpush-zoneless-migration/prompts.js.map +0 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/send-debug-message.d.ts +0 -9
- package/src/commands/mcp/tools/onpush-zoneless-migration/send-debug-message.js +0 -14
- package/src/commands/mcp/tools/onpush-zoneless-migration/send-debug-message.js.map +0 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/ts-utils.d.ts +0 -36
- package/src/commands/mcp/tools/onpush-zoneless-migration/ts-utils.js +0 -135
- package/src/commands/mcp/tools/onpush-zoneless-migration/ts-utils.js.map +0 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/types.d.ts +0 -13
- package/src/commands/mcp/tools/onpush-zoneless-migration/types.js +0 -10
- package/src/commands/mcp/tools/onpush-zoneless-migration/types.js.map +0 -1
- package/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.d.ts +0 -16
- package/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.js +0 -215
- package/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.js.map +0 -1
- package/src/commands/mcp/tools/projects.d.ts +0 -48
- package/src/commands/mcp/tools/projects.js +0 -541
- package/src/commands/mcp/tools/projects.js.map +0 -1
- package/src/commands/mcp/tools/run-target/build-target-strategy.d.ts +0 -14
- package/src/commands/mcp/tools/run-target/build-target-strategy.js +0 -53
- package/src/commands/mcp/tools/run-target/build-target-strategy.js.map +0 -1
- package/src/commands/mcp/tools/run-target/generic-target-strategy.d.ts +0 -14
- package/src/commands/mcp/tools/run-target/generic-target-strategy.js +0 -63
- package/src/commands/mcp/tools/run-target/generic-target-strategy.js.map +0 -1
- package/src/commands/mcp/tools/run-target/options-serializer.d.ts +0 -13
- package/src/commands/mcp/tools/run-target/options-serializer.js +0 -41
- package/src/commands/mcp/tools/run-target/options-serializer.js.map +0 -1
- package/src/commands/mcp/tools/run-target/run-target.d.ts +0 -34
- package/src/commands/mcp/tools/run-target/run-target.js +0 -69
- package/src/commands/mcp/tools/run-target/run-target.js.map +0 -1
- package/src/commands/mcp/tools/run-target/strategy.d.ts +0 -15
- package/src/commands/mcp/tools/run-target/strategy.js +0 -10
- package/src/commands/mcp/tools/run-target/strategy.js.map +0 -1
- package/src/commands/mcp/tools/run-target/types.d.ts +0 -39
- package/src/commands/mcp/tools/run-target/types.js +0 -41
- package/src/commands/mcp/tools/run-target/types.js.map +0 -1
- package/src/commands/mcp/tools/run-target/unit-test-strategy.d.ts +0 -14
- package/src/commands/mcp/tools/run-target/unit-test-strategy.js +0 -56
- package/src/commands/mcp/tools/run-target/unit-test-strategy.js.map +0 -1
- package/src/commands/mcp/tools/tool-registry.d.ts +0 -40
- package/src/commands/mcp/tools/tool-registry.js +0 -40
- package/src/commands/mcp/tools/tool-registry.js.map +0 -1
- package/src/commands/mcp/utils.d.ts +0 -25
- package/src/commands/mcp/utils.js +0 -44
- package/src/commands/mcp/utils.js.map +0 -1
- package/src/commands/mcp/workspace-utils.d.ts +0 -55
- package/src/commands/mcp/workspace-utils.js +0 -181
- package/src/commands/mcp/workspace-utils.js.map +0 -1
- package/src/commands/new/cli.d.ts +0 -27
- package/src/commands/new/cli.js +0 -76
- package/src/commands/new/cli.js.map +0 -1
- package/src/commands/new/long-description.md +0 -15
- package/src/commands/run/cli.d.ts +0 -25
- package/src/commands/run/cli.js +0 -89
- package/src/commands/run/cli.js.map +0 -1
- package/src/commands/run/long-description.md +0 -10
- package/src/commands/serve/cli.d.ts +0 -16
- package/src/commands/serve/cli.js +0 -20
- package/src/commands/serve/cli.js.map +0 -1
- package/src/commands/test/cli.d.ts +0 -16
- package/src/commands/test/cli.js +0 -21
- package/src/commands/test/cli.js.map +0 -1
- package/src/commands/test/long-description.md +0 -2
- package/src/commands/update/cli.d.ts +0 -50
- package/src/commands/update/cli.js +0 -586
- package/src/commands/update/cli.js.map +0 -1
- package/src/commands/update/long-description.md +0 -22
- package/src/commands/update/update-resolver.d.ts +0 -75
- package/src/commands/update/update-resolver.js +0 -918
- package/src/commands/update/update-resolver.js.map +0 -1
- package/src/commands/update/utilities/cli-version.d.ts +0 -48
- package/src/commands/update/utilities/cli-version.js +0 -196
- package/src/commands/update/utilities/cli-version.js.map +0 -1
- package/src/commands/update/utilities/constants.d.ts +0 -12
- package/src/commands/update/utilities/constants.js +0 -16
- package/src/commands/update/utilities/constants.js.map +0 -1
- package/src/commands/update/utilities/git.d.ts +0 -36
- package/src/commands/update/utilities/git.js +0 -148
- package/src/commands/update/utilities/git.js.map +0 -1
- package/src/commands/update/utilities/migration.d.ts +0 -32
- package/src/commands/update/utilities/migration.js +0 -271
- package/src/commands/update/utilities/migration.js.map +0 -1
- package/src/commands/version/cli.d.ts +0 -36
- package/src/commands/version/cli.js +0 -117
- package/src/commands/version/cli.js.map +0 -1
- package/src/commands/version/version-info.d.ts +0 -46
- package/src/commands/version/version-info.js +0 -101
- package/src/commands/version/version-info.js.map +0 -1
- package/src/package-managers/discovery.d.ts +0 -23
- package/src/package-managers/discovery.js +0 -104
- package/src/package-managers/discovery.js.map +0 -1
- package/src/package-managers/error.d.ts +0 -43
- package/src/package-managers/error.js +0 -41
- package/src/package-managers/error.js.map +0 -1
- package/src/package-managers/factory.d.ts +0 -30
- package/src/package-managers/factory.js +0 -137
- package/src/package-managers/factory.js.map +0 -1
- package/src/package-managers/host.d.ts +0 -86
- package/src/package-managers/host.js +0 -91
- package/src/package-managers/host.js.map +0 -1
- package/src/package-managers/index.d.ts +0 -13
- package/src/package-managers/index.js +0 -17
- package/src/package-managers/index.js.map +0 -1
- package/src/package-managers/logger.d.ts +0 -27
- package/src/package-managers/logger.js +0 -10
- package/src/package-managers/logger.js.map +0 -1
- package/src/package-managers/package-manager-descriptor.d.ts +0 -269
- package/src/package-managers/package-manager-descriptor.js +0 -210
- package/src/package-managers/package-manager-descriptor.js.map +0 -1
- package/src/package-managers/package-manager.d.ts +0 -200
- package/src/package-managers/package-manager.js +0 -720
- package/src/package-managers/package-manager.js.map +0 -1
- package/src/package-managers/package-metadata.d.ts +0 -91
- package/src/package-managers/package-metadata.js +0 -10
- package/src/package-managers/package-metadata.js.map +0 -1
- package/src/package-managers/package-tree.d.ts +0 -23
- package/src/package-managers/package-tree.js +0 -10
- package/src/package-managers/package-tree.js.map +0 -1
- package/src/package-managers/parsers.d.ts +0 -167
- package/src/package-managers/parsers.js +0 -674
- package/src/package-managers/parsers.js.map +0 -1
- package/src/utilities/color.d.ts +0 -23
- package/src/utilities/color.js +0 -41
- package/src/utilities/color.js.map +0 -1
- package/src/utilities/completion.d.ts +0 -30
- package/src/utilities/completion.js +0 -270
- package/src/utilities/completion.js.map +0 -1
- package/src/utilities/config.d.ts +0 -38
- package/src/utilities/config.js +0 -368
- package/src/utilities/config.js.map +0 -1
- package/src/utilities/environment-options.d.ts +0 -25
- package/src/utilities/environment-options.js +0 -60
- package/src/utilities/environment-options.js.map +0 -1
- package/src/utilities/eol.d.ts +0 -20
- package/src/utilities/eol.js +0 -35
- package/src/utilities/eol.js.map +0 -1
- package/src/utilities/error.d.ts +0 -18
- package/src/utilities/error.js +0 -41
- package/src/utilities/error.js.map +0 -1
- package/src/utilities/find-up.d.ts +0 -21
- package/src/utilities/find-up.js +0 -67
- package/src/utilities/find-up.js.map +0 -1
- package/src/utilities/json-file.d.ts +0 -24
- package/src/utilities/json-file.js +0 -179
- package/src/utilities/json-file.js.map +0 -1
- package/src/utilities/log-file.d.ts +0 -13
- package/src/utilities/log-file.js +0 -28
- package/src/utilities/log-file.js.map +0 -1
- package/src/utilities/memoize.d.ts +0 -15
- package/src/utilities/memoize.js +0 -64
- package/src/utilities/memoize.js.map +0 -1
- package/src/utilities/node-version.d.ts +0 -21
- package/src/utilities/node-version.js +0 -65
- package/src/utilities/node-version.js.map +0 -1
- package/src/utilities/prettier.d.ts +0 -19
- package/src/utilities/prettier.js +0 -105
- package/src/utilities/prettier.js.map +0 -1
- package/src/utilities/project.d.ts +0 -8
- package/src/utilities/project.js +0 -81
- package/src/utilities/project.js.map +0 -1
- package/src/utilities/prompt.d.ts +0 -17
- package/src/utilities/prompt.js +0 -90
- package/src/utilities/prompt.js.map +0 -1
- package/src/utilities/tty.d.ts +0 -16
- package/src/utilities/tty.js +0 -23
- package/src/utilities/tty.js.map +0 -1
- package/src/utilities/version.d.ts +0 -16
- package/src/utilities/version.js +0 -26
- package/src/utilities/version.js.map +0 -1
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
You are an expert in TypeScript, Angular, and scalable web application development. You write functional, maintainable, performant, and accessible code following Angular and TypeScript best practices.
|
|
2
|
-
|
|
3
|
-
## TypeScript Best Practices
|
|
4
|
-
|
|
5
|
-
- Use strict type checking
|
|
6
|
-
- Prefer type inference when the type is obvious
|
|
7
|
-
- Avoid the `any` type; use `unknown` when type is uncertain
|
|
8
|
-
|
|
9
|
-
## Angular Best Practices
|
|
10
|
-
|
|
11
|
-
- Always use standalone components over NgModules
|
|
12
|
-
- Must NOT set `standalone: true` inside Angular decorators. It's the default in Angular v20+.
|
|
13
|
-
- Do NOT set `changeDetection: ChangeDetectionStrategy.OnPush` explicitly. `OnPush` is the default in Angular v22+.
|
|
14
|
-
- Use signals for state management
|
|
15
|
-
- Implement lazy loading for feature routes
|
|
16
|
-
- Do NOT use the `@HostBinding` and `@HostListener` decorators. Put host bindings inside the `host` object of the `@Component` or `@Directive` decorator instead
|
|
17
|
-
- Use `NgOptimizedImage` for all static images.
|
|
18
|
-
- `NgOptimizedImage` does not work for inline base64 images.
|
|
19
|
-
|
|
20
|
-
## Accessibility Requirements
|
|
21
|
-
|
|
22
|
-
- It MUST pass all AXE checks.
|
|
23
|
-
- It MUST follow all WCAG AA minimums, including focus management, color contrast, and ARIA attributes.
|
|
24
|
-
|
|
25
|
-
### Components
|
|
26
|
-
|
|
27
|
-
- Keep components small and focused on a single responsibility
|
|
28
|
-
- Use `input()` and `output()` functions instead of decorators
|
|
29
|
-
- Use `model()` for two-way bound properties with `[(prop)]` syntax instead of pairing `input()` with `output()`
|
|
30
|
-
- Use `computed()` for derived state
|
|
31
|
-
- Use `linkedSignal()` for state derived from multiple reactive sources that must stay synchronized
|
|
32
|
-
- Prefer inline templates for small components
|
|
33
|
-
- Prefer Signal Forms (`@angular/forms/signals`) for new forms. They are stable in Angular v22+ and provide signal-based state, type-safe field access, and schema-based validation
|
|
34
|
-
- When not using Signal Forms, prefer Reactive forms instead of Template-driven ones
|
|
35
|
-
- Do NOT use `ngClass`, use `class` bindings instead
|
|
36
|
-
- Do NOT use `ngStyle`, use `style` bindings instead
|
|
37
|
-
- Do NOT import `CommonModule`, import only the directives and pipes the template uses, such as `AsyncPipe` or `DatePipe`
|
|
38
|
-
- When using external templates/styles, use paths relative to the component TS file.
|
|
39
|
-
|
|
40
|
-
## State Management
|
|
41
|
-
|
|
42
|
-
- Use signals for local component state
|
|
43
|
-
- Use `computed()` for derived state
|
|
44
|
-
- Keep state transformations pure and predictable
|
|
45
|
-
- Do NOT use `mutate` on signals, use `update` or `set` instead
|
|
46
|
-
|
|
47
|
-
## Templates
|
|
48
|
-
|
|
49
|
-
- Keep templates simple and avoid complex logic
|
|
50
|
-
- Use native control flow (`@if`, `@for`, `@switch`) instead of `*ngIf`, `*ngFor`, `*ngSwitch`
|
|
51
|
-
- Use the async pipe to handle observables
|
|
52
|
-
- Do not assume globals like (`new Date()`) are available.
|
|
53
|
-
|
|
54
|
-
## Services
|
|
55
|
-
|
|
56
|
-
- Design services around a single responsibility
|
|
57
|
-
- Use the `providedIn: 'root'` option for singleton services
|
|
58
|
-
- Prefer the `@Service` decorator over `@Injectable({providedIn: 'root'})` for new singleton services (Angular v22+)
|
|
59
|
-
- Use the `inject()` function instead of constructor injection
|
|
@@ -1,9 +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 type { McpServer } from '@modelcontextprotocol/server';
|
|
9
|
-
export declare function registerInstructionsResource(server: McpServer): void;
|
|
@@ -1,26 +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.registerInstructionsResource = registerInstructionsResource;
|
|
11
|
-
const promises_1 = require("node:fs/promises");
|
|
12
|
-
const node_path_1 = require("node:path");
|
|
13
|
-
function registerInstructionsResource(server) {
|
|
14
|
-
server.registerResource('instructions', 'instructions://best-practices', {
|
|
15
|
-
title: 'Angular Best Practices and Code Generation Guide',
|
|
16
|
-
description: "A comprehensive guide detailing Angular's best practices for code generation and development." +
|
|
17
|
-
' This guide should be used as a reference by an LLM to ensure any generated code' +
|
|
18
|
-
' adheres to modern Angular standards, including the use of standalone components,' +
|
|
19
|
-
' typed forms, modern control flow syntax, and other current conventions.',
|
|
20
|
-
mimeType: 'text/markdown',
|
|
21
|
-
}, async () => {
|
|
22
|
-
const text = await (0, promises_1.readFile)((0, node_path_1.join)(__dirname, 'best-practices.md'), 'utf-8');
|
|
23
|
-
return { contents: [{ uri: 'instructions://best-practices', text }] };
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=instructions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["instructions.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAMH,oEAmBC;AAtBD,+CAA4C;AAC5C,yCAAiC;AAEjC,SAAgB,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,gBAAgB,CACrB,cAAc,EACd,+BAA+B,EAC/B;QACE,KAAK,EAAE,kDAAkD;QACzD,WAAW,EACT,+FAA+F;YAC/F,kFAAkF;YAClF,mFAAmF;YACnF,0EAA0E;QAC5E,QAAQ,EAAE,eAAe;KAC1B,EACD,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC,CAAC;QAE3E,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,+BAA+B,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACxE,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,12 +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
|
-
export declare const workspaceAndProjectOptions: {
|
|
10
|
-
workspace: z.ZodOptional<z.ZodString>;
|
|
11
|
-
project: z.ZodOptional<z.ZodString>;
|
|
12
|
-
};
|
|
@@ -1,22 +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.workspaceAndProjectOptions = void 0;
|
|
11
|
-
const zod_1 = require("zod");
|
|
12
|
-
exports.workspaceAndProjectOptions = {
|
|
13
|
-
workspace: zod_1.z
|
|
14
|
-
.string()
|
|
15
|
-
.optional()
|
|
16
|
-
.describe('The path to the workspace directory (containing angular.json). If not provided, uses the current directory.'),
|
|
17
|
-
project: zod_1.z
|
|
18
|
-
.string()
|
|
19
|
-
.optional()
|
|
20
|
-
.describe('Which project to target in a monorepo context. If not provided, targets the default project.'),
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=shared-options.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared-options.js","sourceRoot":"","sources":["shared-options.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,6BAAwB;AAEX,QAAA,0BAA0B,GAAG;IACxC,SAAS,EAAE,OAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,6GAA6G,CAC9G;IACH,OAAO,EAAE,OAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,8FAA8F,CAC/F;CACJ,CAAC"}
|
|
@@ -1,12 +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
|
-
export declare const AI_TUTOR_TOOL: import("./tool-registry").McpToolDeclaration<Readonly<{
|
|
9
|
-
[k: string]: import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>;
|
|
10
|
-
}>, Readonly<{
|
|
11
|
-
[k: string]: import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>;
|
|
12
|
-
}>>;
|
|
@@ -1,59 +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.AI_TUTOR_TOOL = void 0;
|
|
11
|
-
const promises_1 = require("node:fs/promises");
|
|
12
|
-
const node_path_1 = require("node:path");
|
|
13
|
-
const tool_registry_1 = require("./tool-registry");
|
|
14
|
-
exports.AI_TUTOR_TOOL = (0, tool_registry_1.declareTool)({
|
|
15
|
-
name: 'ai_tutor',
|
|
16
|
-
title: 'Start Angular AI Tutor',
|
|
17
|
-
description: `
|
|
18
|
-
<Purpose>
|
|
19
|
-
Loads the core instructions, curriculum, and persona for the Angular AI Tutor.
|
|
20
|
-
This tool acts as a RAG (Retrieval-Augmented Generation) source, effectively
|
|
21
|
-
reprogramming the assistant to become a specialized Angular tutor by providing it
|
|
22
|
-
with a new core identity and knowledge base.
|
|
23
|
-
</Purpose>
|
|
24
|
-
<Use Cases>
|
|
25
|
-
* The user asks to start a guided, step-by-step tutorial for learning Angular (e.g., "teach me Angular," "start the tutorial").
|
|
26
|
-
* The user asks to resume a previous tutoring session.
|
|
27
|
-
</Use Cases>
|
|
28
|
-
<Operational Notes>
|
|
29
|
-
* The text returned by this tool is a new set of instructions and rules for you, the LLM. It is NOT meant to be displayed to the user.
|
|
30
|
-
* After invoking this tool, you MUST adopt the persona of the Angular AI Tutor and follow the curriculum provided in the text.
|
|
31
|
-
* Be aware that the tutor persona supports special user commands, such as "skip this section," "show the table of contents,"
|
|
32
|
-
or "set my experience level to beginner." The curriculum text will provide the full details on how to handle these.
|
|
33
|
-
* Your subsequent responses should be governed by these new instructions, leading the user through the "Smart Recipe Box"
|
|
34
|
-
application tutorial.
|
|
35
|
-
* As the tutor, you will use your other tools to access the user's project files to verify their solutions as instructed by the curriculum.
|
|
36
|
-
</Operational Notes>
|
|
37
|
-
`,
|
|
38
|
-
isReadOnly: true,
|
|
39
|
-
isLocalOnly: true,
|
|
40
|
-
factory: () => {
|
|
41
|
-
let aiTutorText;
|
|
42
|
-
return async () => {
|
|
43
|
-
aiTutorText ??= await (0, promises_1.readFile)((0, node_path_1.join)(__dirname, '../resources/ai-tutor.md'), 'utf-8');
|
|
44
|
-
return {
|
|
45
|
-
content: [
|
|
46
|
-
{
|
|
47
|
-
type: 'text',
|
|
48
|
-
text: aiTutorText,
|
|
49
|
-
annotations: {
|
|
50
|
-
audience: ['assistant'],
|
|
51
|
-
priority: 1.0,
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
],
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
},
|
|
58
|
-
});
|
|
59
|
-
//# sourceMappingURL=ai-tutor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-tutor.js","sourceRoot":"","sources":["ai-tutor.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,+CAA4C;AAC5C,yCAAiC;AACjC,mDAA8C;AAEjC,QAAA,aAAa,GAAG,IAAA,2BAAW,EAAC;IACvC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;CAoBd;IACC,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,GAAG,EAAE;QACZ,IAAI,WAAmB,CAAC;QAExB,OAAO,KAAK,IAAI,EAAE;YAChB,WAAW,KAAK,MAAM,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,0BAA0B,CAAC,EAAE,OAAO,CAAC,CAAC;YAErF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,WAAW;wBACjB,WAAW,EAAE;4BACX,QAAQ,EAAE,CAAC,WAAW,CAAC;4BACvB,QAAQ,EAAE,GAAG;yBACd;qBACF;iBACF;aACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,13 +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
|
-
export declare const BEST_PRACTICES_TOOL: import("./tool-registry").McpToolDeclaration<{
|
|
10
|
-
workspacePath: z.ZodOptional<z.ZodString>;
|
|
11
|
-
}, Readonly<{
|
|
12
|
-
[k: string]: z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
13
|
-
}>>;
|
|
@@ -1,196 +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.BEST_PRACTICES_TOOL = void 0;
|
|
11
|
-
/**
|
|
12
|
-
* @fileoverview
|
|
13
|
-
* This file defines the `get_best_practices` MCP tool. The tool is designed to be version-aware,
|
|
14
|
-
* dynamically resolving the best practices guide from the user's installed version of
|
|
15
|
-
* `@angular/core`. It achieves this by reading a custom `angular` metadata block in the
|
|
16
|
-
* framework's `package.json`. If this resolution fails, it gracefully falls back to a generic
|
|
17
|
-
* guide bundled with the Angular CLI.
|
|
18
|
-
*/
|
|
19
|
-
const promises_1 = require("node:fs/promises");
|
|
20
|
-
const node_module_1 = require("node:module");
|
|
21
|
-
const node_path_1 = require("node:path");
|
|
22
|
-
const zod_1 = require("zod");
|
|
23
|
-
const version_1 = require("../../../utilities/version");
|
|
24
|
-
const workspace_utils_1 = require("../workspace-utils");
|
|
25
|
-
const tool_registry_1 = require("./tool-registry");
|
|
26
|
-
const bestPracticesInputSchema = zod_1.z.object({
|
|
27
|
-
workspacePath: zod_1.z
|
|
28
|
-
.string()
|
|
29
|
-
.optional()
|
|
30
|
-
.describe('Absolute path to the angular.json workspace directory (obtained via list_projects). ' +
|
|
31
|
-
'If omitted, returns the generic best practices guide.'),
|
|
32
|
-
});
|
|
33
|
-
exports.BEST_PRACTICES_TOOL = (0, tool_registry_1.declareTool)({
|
|
34
|
-
name: 'get_best_practices',
|
|
35
|
-
title: 'Get Angular Coding Best Practices Guide',
|
|
36
|
-
description: `
|
|
37
|
-
<Purpose>
|
|
38
|
-
Retrieves the official Angular Best Practices Guide. This guide contains the essential rules and conventions
|
|
39
|
-
that must be followed for any task involving the creation, analysis, or modification of Angular code.
|
|
40
|
-
</Purpose>
|
|
41
|
-
<Use Cases>
|
|
42
|
-
* Mandatory first step before writing or modifying Angular code to ensure modern framework standards.
|
|
43
|
-
* Learn about standalone components, typed forms, and modern control flow syntax (@if, @for, @switch).
|
|
44
|
-
* Verify existing code aligns with current conventions before making edits.
|
|
45
|
-
</Use Cases>
|
|
46
|
-
<Operational Notes>
|
|
47
|
-
* Provide the 'workspacePath' argument (obtained via 'list_projects') to load the version-specific
|
|
48
|
-
guide matching the project's Angular framework.
|
|
49
|
-
* Omit 'workspacePath' only for general learning queries or when no project context is available to load the latest generic guide.
|
|
50
|
-
</Operational Notes>`,
|
|
51
|
-
inputSchema: bestPracticesInputSchema.shape,
|
|
52
|
-
isReadOnly: true,
|
|
53
|
-
isLocalOnly: true,
|
|
54
|
-
factory: createBestPracticesHandler,
|
|
55
|
-
});
|
|
56
|
-
/**
|
|
57
|
-
* Retrieves the content of the generic best practices guide that is bundled with the CLI.
|
|
58
|
-
* This serves as a fallback when a version-specific guide cannot be found.
|
|
59
|
-
* @returns A promise that resolves to the string content of the bundled markdown file.
|
|
60
|
-
*/
|
|
61
|
-
async function getBundledBestPractices() {
|
|
62
|
-
return (0, promises_1.readFile)((0, node_path_1.join)(__dirname, '../resources/best-practices.md'), 'utf-8');
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Attempts to find and read a version-specific best practices guide from the user's installed
|
|
66
|
-
* version of `@angular/core`. It looks for a custom `angular` metadata property in the
|
|
67
|
-
* framework's `package.json` to locate the guide.
|
|
68
|
-
*
|
|
69
|
-
* @example A sample `package.json` `angular` field:
|
|
70
|
-
* ```json
|
|
71
|
-
* {
|
|
72
|
-
* "angular": {
|
|
73
|
-
* "bestPractices": {
|
|
74
|
-
* "format": "markdown",
|
|
75
|
-
* "path": "./resources/best-practices.md"
|
|
76
|
-
* }
|
|
77
|
-
* }
|
|
78
|
-
* }
|
|
79
|
-
* ```
|
|
80
|
-
*
|
|
81
|
-
* @param workspacePath The absolute path to the user's `angular.json` file.
|
|
82
|
-
* @param logger The MCP tool context logger for reporting warnings.
|
|
83
|
-
* @param server The MCP server context, used to enforce the client's declared roots.
|
|
84
|
-
* @returns A promise that resolves to an object containing the guide's content and source,
|
|
85
|
-
* or `undefined` if the guide could not be resolved.
|
|
86
|
-
*/
|
|
87
|
-
async function getVersionSpecificBestPractices(workspacePath, logger, server) {
|
|
88
|
-
if (server) {
|
|
89
|
-
let isAllowed;
|
|
90
|
-
try {
|
|
91
|
-
isAllowed = await (0, workspace_utils_1.isAllowedWorkspacePath)(server, workspacePath);
|
|
92
|
-
}
|
|
93
|
-
catch (e) {
|
|
94
|
-
logger.warn(`Failed to verify workspace path '${workspacePath}': ` +
|
|
95
|
-
`${e instanceof Error ? e.message : e}. Falling back to the bundled guide.`);
|
|
96
|
-
return undefined;
|
|
97
|
-
}
|
|
98
|
-
if (!isAllowed) {
|
|
99
|
-
throw new Error(`Workspace path is outside the allowed MCP roots: ${workspacePath}. ` +
|
|
100
|
-
"You can use 'list_projects' to find available workspaces.");
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
// 1. Resolve the path to package.json
|
|
104
|
-
let pkgJsonPath;
|
|
105
|
-
try {
|
|
106
|
-
const workspaceRequire = (0, node_module_1.createRequire)(workspacePath);
|
|
107
|
-
pkgJsonPath = workspaceRequire.resolve('@angular/core/package.json');
|
|
108
|
-
}
|
|
109
|
-
catch (e) {
|
|
110
|
-
logger.warn(`Could not resolve '@angular/core/package.json' from '${workspacePath}'. ` +
|
|
111
|
-
'Is Angular installed in this project? Falling back to the bundled guide.');
|
|
112
|
-
return undefined;
|
|
113
|
-
}
|
|
114
|
-
// 2. Read and parse package.json, then find and read the guide.
|
|
115
|
-
try {
|
|
116
|
-
const pkgJsonContent = await (0, promises_1.readFile)(pkgJsonPath, 'utf-8');
|
|
117
|
-
const pkgJson = JSON.parse(pkgJsonContent);
|
|
118
|
-
const bestPracticesInfo = pkgJson['angular']?.bestPractices;
|
|
119
|
-
if (bestPracticesInfo &&
|
|
120
|
-
bestPracticesInfo.format === 'markdown' &&
|
|
121
|
-
typeof bestPracticesInfo.path === 'string') {
|
|
122
|
-
const packageDirectory = (0, node_path_1.dirname)(pkgJsonPath);
|
|
123
|
-
const guidePath = (0, node_path_1.resolve)(packageDirectory, bestPracticesInfo.path);
|
|
124
|
-
// Ensure the resolved guide path is within the package boundary.
|
|
125
|
-
// Uses path.relative to create a cross-platform, case-insensitive check.
|
|
126
|
-
// If the relative path starts with '..' or is absolute, it is a traversal attempt.
|
|
127
|
-
const relativePath = (0, node_path_1.relative)(packageDirectory, guidePath);
|
|
128
|
-
if (relativePath.startsWith('..') || (0, node_path_1.isAbsolute)(relativePath)) {
|
|
129
|
-
logger.warn(`Detected a potential path traversal attempt in '${pkgJsonPath}'. ` +
|
|
130
|
-
`The path '${bestPracticesInfo.path}' escapes the package boundary. ` +
|
|
131
|
-
'Falling back to the bundled guide.');
|
|
132
|
-
return undefined;
|
|
133
|
-
}
|
|
134
|
-
// Check the file size to prevent reading a very large file.
|
|
135
|
-
const stats = await (0, promises_1.stat)(guidePath);
|
|
136
|
-
if (stats.size > 1024 * 1024) {
|
|
137
|
-
// 1MB
|
|
138
|
-
logger.warn(`The best practices guide at '${guidePath}' is larger than 1MB (${stats.size} bytes). ` +
|
|
139
|
-
'This is unexpected and the file will not be read. Falling back to the bundled guide.');
|
|
140
|
-
return undefined;
|
|
141
|
-
}
|
|
142
|
-
const content = await (0, promises_1.readFile)(guidePath, 'utf-8');
|
|
143
|
-
const source = `framework version ${pkgJson.version}`;
|
|
144
|
-
return { content, source };
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
logger.warn(`Did not find valid 'angular.bestPractices' metadata in '${pkgJsonPath}'. ` +
|
|
148
|
-
'Falling back to the bundled guide.');
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
catch (e) {
|
|
152
|
-
logger.warn(`Failed to read or parse version-specific best practices referenced in '${pkgJsonPath}': ${e instanceof Error ? e.message : e}. Falling back to the bundled guide.`);
|
|
153
|
-
}
|
|
154
|
-
return undefined;
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Creates the handler function for the `get_best_practices` tool.
|
|
158
|
-
* The handler orchestrates the process of first attempting to get a version-specific guide
|
|
159
|
-
* and then falling back to the bundled guide if necessary.
|
|
160
|
-
* @param context The MCP tool context, containing the logger.
|
|
161
|
-
* @returns An async function that serves as the tool's executor.
|
|
162
|
-
*/
|
|
163
|
-
function createBestPracticesHandler({ logger, server }) {
|
|
164
|
-
let bundledBestPractices;
|
|
165
|
-
return async (input) => {
|
|
166
|
-
let content;
|
|
167
|
-
let source;
|
|
168
|
-
// First, try to get the version-specific guide.
|
|
169
|
-
if (input.workspacePath) {
|
|
170
|
-
const versionSpecific = await getVersionSpecificBestPractices(input.workspacePath, logger, server);
|
|
171
|
-
if (versionSpecific) {
|
|
172
|
-
content = versionSpecific.content;
|
|
173
|
-
source = versionSpecific.source;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
// If the version-specific guide was not found for any reason, fall back to the bundled version.
|
|
177
|
-
if (content === undefined) {
|
|
178
|
-
content = await (bundledBestPractices ??= getBundledBestPractices());
|
|
179
|
-
source = `bundled (CLI v${version_1.VERSION.full})`;
|
|
180
|
-
}
|
|
181
|
-
return {
|
|
182
|
-
content: [
|
|
183
|
-
{
|
|
184
|
-
type: 'text',
|
|
185
|
-
text: content,
|
|
186
|
-
annotations: {
|
|
187
|
-
audience: ['assistant'],
|
|
188
|
-
priority: 0.9,
|
|
189
|
-
source,
|
|
190
|
-
},
|
|
191
|
-
},
|
|
192
|
-
],
|
|
193
|
-
};
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
//# sourceMappingURL=best-practices.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,wDAA4D;AAC5D,mDAAmE;AAEnE,MAAM,wBAAwB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,aAAa,EAAE,OAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sFAAsF;QACpF,uDAAuD,CAC1D;CACJ,CAAC,CAAC;AAIU,QAAA,mBAAmB,GAAG,IAAA,2BAAW,EAAC;IAC7C,IAAI,EAAE,oBAAoB;IAC1B,KAAK,EAAE,yCAAyC;IAChD,WAAW,EAAE;;;;;;;;;;;;;;qBAcM;IACnB,WAAW,EAAE,wBAAwB,CAAC,KAAK;IAC3C,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,0BAA0B;CACpC,CAAC,CAAC;AAEH;;;;GAIG;AACH,KAAK,UAAU,uBAAuB;IACpC,OAAO,IAAA,mBAAQ,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,gCAAgC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,KAAK,UAAU,+BAA+B,CAC5C,aAAqB,EACrB,MAAgC,EAChC,MAAgC;IAEhC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,SAAkB,CAAC;QACvB,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,IAAA,wCAAsB,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CACT,oCAAoC,aAAa,KAAK;gBACpD,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,sCAAsC,CAC9E,CAAC;YAEF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,oDAAoD,aAAa,IAAI;gBACnE,2DAA2D,CAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,IAAA,2BAAa,EAAC,aAAa,CAAC,CAAC;QACtD,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CACT,wDAAwD,aAAa,KAAK;YACxE,0EAA0E,CAC7E,CAAC;QAEF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,gEAAgE;IAChE,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,IAAA,mBAAQ,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC3C,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;QAE5D,IACE,iBAAiB;YACjB,iBAAiB,CAAC,MAAM,KAAK,UAAU;YACvC,OAAO,iBAAiB,CAAC,IAAI,KAAK,QAAQ,EAC1C,CAAC;YACD,MAAM,gBAAgB,GAAG,IAAA,mBAAO,EAAC,WAAW,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,IAAA,mBAAO,EAAC,gBAAgB,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpE,iEAAiE;YACjE,yEAAyE;YACzE,mFAAmF;YACnF,MAAM,YAAY,GAAG,IAAA,oBAAQ,EAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;YAC3D,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAA,sBAAU,EAAC,YAAY,CAAC,EAAE,CAAC;gBAC9D,MAAM,CAAC,IAAI,CACT,mDAAmD,WAAW,KAAK;oBACjE,aAAa,iBAAiB,CAAC,IAAI,kCAAkC;oBACrE,oCAAoC,CACvC,CAAC;gBAEF,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,4DAA4D;YAC5D,MAAM,KAAK,GAAG,MAAM,IAAA,eAAI,EAAC,SAAS,CAAC,CAAC;YACpC,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;gBAC7B,MAAM;gBACN,MAAM,CAAC,IAAI,CACT,gCAAgC,SAAS,yBAAyB,KAAK,CAAC,IAAI,WAAW;oBACrF,sFAAsF,CACzF,CAAC;gBAEF,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,qBAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;YAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CACT,2DAA2D,WAAW,KAAK;gBACzE,oCAAoC,CACvC,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CACT,0EAA0E,WAAW,MACnF,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACnC,sCAAsC,CACvC,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,0BAA0B,CAAC,EAAE,MAAM,EAAE,MAAM,EAAkB;IACpE,IAAI,oBAAqC,CAAC;IAE1C,OAAO,KAAK,EAAE,KAAyB,EAAE,EAAE;QACzC,IAAI,OAA2B,CAAC;QAChC,IAAI,MAA0B,CAAC;QAE/B,gDAAgD;QAChD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,MAAM,+BAA+B,CAC3D,KAAK,CAAC,aAAa,EACnB,MAAM,EACN,MAAM,CACP,CAAC;YACF,IAAI,eAAe,EAAE,CAAC;gBACpB,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;gBAClC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;YAClC,CAAC;QACH,CAAC;QAED,gGAAgG;QAChG,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,MAAM,CAAC,oBAAoB,KAAK,uBAAuB,EAAE,CAAC,CAAC;YACrE,MAAM,GAAG,iBAAiB,iBAAO,CAAC,IAAI,GAAG,CAAC;QAC5C,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE;wBACX,QAAQ,EAAE,CAAC,WAAoB,CAAC;wBAChC,QAAQ,EAAE,GAAG;wBACb,MAAM;qBACP;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,32 +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 devserverStartToolInputSchema: z.ZodObject<{
|
|
11
|
-
port: z.ZodOptional<z.ZodNumber>;
|
|
12
|
-
workspace: z.ZodOptional<z.ZodString>;
|
|
13
|
-
project: z.ZodOptional<z.ZodString>;
|
|
14
|
-
}, z.core.$strip>;
|
|
15
|
-
export type DevserverStartToolInput = z.infer<typeof devserverStartToolInputSchema>;
|
|
16
|
-
declare const devserverStartToolOutputSchema: z.ZodObject<{
|
|
17
|
-
message: z.ZodString;
|
|
18
|
-
address: z.ZodOptional<z.ZodString>;
|
|
19
|
-
}, z.core.$strip>;
|
|
20
|
-
export type DevserverStartToolOutput = z.infer<typeof devserverStartToolOutputSchema>;
|
|
21
|
-
export declare function startDevserver(input: DevserverStartToolInput, context: McpToolContext): Promise<{
|
|
22
|
-
content: {
|
|
23
|
-
type: "text";
|
|
24
|
-
text: string;
|
|
25
|
-
}[];
|
|
26
|
-
structuredContent: {
|
|
27
|
-
message: string;
|
|
28
|
-
address: string;
|
|
29
|
-
};
|
|
30
|
-
}>;
|
|
31
|
-
export declare const DEVSERVER_START_TOOL: McpToolDeclaration<typeof devserverStartToolInputSchema.shape, typeof devserverStartToolOutputSchema.shape>;
|
|
32
|
-
export {};
|
|
@@ -1,110 +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.DEVSERVER_START_TOOL = void 0;
|
|
11
|
-
exports.startDevserver = startDevserver;
|
|
12
|
-
const zod_1 = require("zod");
|
|
13
|
-
const devserver_1 = require("../../devserver");
|
|
14
|
-
const shared_options_1 = require("../../shared-options");
|
|
15
|
-
const utils_1 = require("../../utils");
|
|
16
|
-
const workspace_utils_1 = require("../../workspace-utils");
|
|
17
|
-
const tool_registry_1 = require("../tool-registry");
|
|
18
|
-
const devserverStartToolInputSchema = zod_1.z.object({
|
|
19
|
-
...shared_options_1.workspaceAndProjectOptions,
|
|
20
|
-
port: zod_1.z
|
|
21
|
-
.number()
|
|
22
|
-
.optional()
|
|
23
|
-
.describe('The port number to run the server on. If not provided, a random available port will be chosen. ' +
|
|
24
|
-
'It is recommended to reuse port numbers across calls within the same workspace to maintain consistency.'),
|
|
25
|
-
});
|
|
26
|
-
const devserverStartToolOutputSchema = zod_1.z.object({
|
|
27
|
-
message: zod_1.z.string().describe('A message indicating the result of the operation.'),
|
|
28
|
-
address: zod_1.z
|
|
29
|
-
.string()
|
|
30
|
-
.optional()
|
|
31
|
-
.describe('If the operation was successful, this is the HTTP address that the server can be found at.'),
|
|
32
|
-
});
|
|
33
|
-
function localhostAddress(port) {
|
|
34
|
-
return `http://localhost:${port}/`;
|
|
35
|
-
}
|
|
36
|
-
async function startDevserver(input, context) {
|
|
37
|
-
const { workspacePath, projectName } = await (0, workspace_utils_1.resolveWorkspaceAndProject)({
|
|
38
|
-
host: context.host,
|
|
39
|
-
server: context.server,
|
|
40
|
-
workspacePathInput: input.workspace,
|
|
41
|
-
projectNameInput: input.project,
|
|
42
|
-
mcpWorkspace: context.workspace,
|
|
43
|
-
});
|
|
44
|
-
const key = (0, devserver_1.getDevserverKey)(workspacePath, projectName);
|
|
45
|
-
let devserver = context.devservers.get(key);
|
|
46
|
-
if (devserver) {
|
|
47
|
-
return (0, utils_1.createStructuredContentOutput)({
|
|
48
|
-
message: `Development server for project '${projectName}' is already running.`,
|
|
49
|
-
address: localhostAddress(devserver.port),
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
let port;
|
|
53
|
-
if (input.port) {
|
|
54
|
-
if (!(await context.host.isPortAvailable(input.port))) {
|
|
55
|
-
throw new Error(`Port ${input.port} is unavailable. Try calling this tool again without the 'port' parameter to auto-assign a free port.`);
|
|
56
|
-
}
|
|
57
|
-
port = input.port;
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
port = await context.host.getAvailablePort();
|
|
61
|
-
}
|
|
62
|
-
devserver = new devserver_1.LocalDevserver({
|
|
63
|
-
host: context.host,
|
|
64
|
-
project: projectName,
|
|
65
|
-
port,
|
|
66
|
-
workspacePath,
|
|
67
|
-
});
|
|
68
|
-
devserver.start();
|
|
69
|
-
context.devservers.set(key, devserver);
|
|
70
|
-
return (0, utils_1.createStructuredContentOutput)({
|
|
71
|
-
message: `Development server for project '${projectName}' started and watching for workspace changes.`,
|
|
72
|
-
address: localhostAddress(port),
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
exports.DEVSERVER_START_TOOL = (0, tool_registry_1.declareTool)({
|
|
76
|
-
name: 'devserver_start',
|
|
77
|
-
title: 'Start Development Server',
|
|
78
|
-
description: `
|
|
79
|
-
<Purpose>
|
|
80
|
-
Starts the Angular development server ("ng serve") as a background process. Follow this up with "devserver_wait_for_build" to wait until
|
|
81
|
-
the first build completes.
|
|
82
|
-
</Purpose>
|
|
83
|
-
<Use Cases>
|
|
84
|
-
* **Starting the Server:** Use this tool to begin serving the application. The tool will return immediately while the server runs in the
|
|
85
|
-
background.
|
|
86
|
-
* **Get Initial Build Logs:** Once a dev server has started, use the "devserver_wait_for_build" tool to ensure it's alive. If there are any
|
|
87
|
-
build errors, "devserver_wait_for_build" would provide them back and you can give them to the user or rely on them to propose a fix.
|
|
88
|
-
* **Get Updated Build Logs:** Important: as long as a devserver is alive (i.e. "devserver_stop" wasn't called), after every time you
|
|
89
|
-
make a change to the workspace, re-run "devserver_wait_for_build" to see whether the change was successfully built and wait for the
|
|
90
|
-
devserver to be updated.
|
|
91
|
-
</Use Cases>
|
|
92
|
-
<Operational Notes>
|
|
93
|
-
* This tool manages development servers by itself. It maintains at most a single dev server instance for each project in the monorepo.
|
|
94
|
-
* This is an asynchronous operation. Subsequent commands can be ran while the server is active.
|
|
95
|
-
* Use 'devserver_stop' to gracefully shut down the server and access the full log output.
|
|
96
|
-
* **Keeping the Server Alive**: It is often better to keep the server alive between tool calls if you expect the user to request more
|
|
97
|
-
changes or run more tests, as it saves time on restarts and maintains the file watcher state. You must still call
|
|
98
|
-
'devserver_wait_for_build' after every change to see whether the change was successfully built and be sure that the app was updated.
|
|
99
|
-
* **Consistent Ports**: If making multiple calls, it is recommended to reuse the port you got from the first call for subsequent ones.
|
|
100
|
-
</Operational Notes>
|
|
101
|
-
`,
|
|
102
|
-
isReadOnly: false,
|
|
103
|
-
isLocalOnly: true,
|
|
104
|
-
inputSchema: devserverStartToolInputSchema.shape,
|
|
105
|
-
outputSchema: devserverStartToolOutputSchema.shape,
|
|
106
|
-
factory: (context) => (input) => {
|
|
107
|
-
return startDevserver(input, context);
|
|
108
|
-
},
|
|
109
|
-
});
|
|
110
|
-
//# sourceMappingURL=devserver-start.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"devserver-start.js","sourceRoot":"","sources":["devserver-start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +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 devserverStopToolInputSchema: z.ZodObject<{
|
|
11
|
-
workspace: z.ZodOptional<z.ZodString>;
|
|
12
|
-
project: z.ZodOptional<z.ZodString>;
|
|
13
|
-
}, z.core.$strip>;
|
|
14
|
-
export type DevserverStopToolInput = z.infer<typeof devserverStopToolInputSchema>;
|
|
15
|
-
declare const devserverStopToolOutputSchema: z.ZodObject<{
|
|
16
|
-
message: z.ZodString;
|
|
17
|
-
logs: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
18
|
-
}, z.core.$strip>;
|
|
19
|
-
export type DevserverStopToolOutput = z.infer<typeof devserverStopToolOutputSchema>;
|
|
20
|
-
export declare function stopDevserver(input: DevserverStopToolInput, context: McpToolContext): Promise<{
|
|
21
|
-
content: {
|
|
22
|
-
type: "text";
|
|
23
|
-
text: string;
|
|
24
|
-
}[];
|
|
25
|
-
structuredContent: {
|
|
26
|
-
message: string;
|
|
27
|
-
logs: string[];
|
|
28
|
-
};
|
|
29
|
-
}>;
|
|
30
|
-
export declare const DEVSERVER_STOP_TOOL: McpToolDeclaration<typeof devserverStopToolInputSchema.shape, typeof devserverStopToolOutputSchema.shape>;
|
|
31
|
-
export {};
|