create-vuetify 0.0.6-beta.4 → 0.0.6-beta.6

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/dist/index.mjs CHANGED
@@ -10182,6 +10182,10 @@ var en_default = {
10182
10182
  "vuetify_nuxt_module": {
10183
10183
  "label": "Vuetify Nuxt Module",
10184
10184
  "hint": "Use vuetify-nuxt-module instead of local plugin"
10185
+ },
10186
+ "mcp": {
10187
+ "label": "MCP",
10188
+ "hint": "Use official MCP Vuetify integration"
10185
10189
  }
10186
10190
  },
10187
10191
  "client_hints": { "enable": "Enable Client Hints? (Requires SSR)" },
@@ -10363,6 +10367,10 @@ var ru_default = {
10363
10367
  "vuetify_nuxt_module": {
10364
10368
  "label": "Vuetify Nuxt Module",
10365
10369
  "hint": "Использовать vuetify-nuxt-module вместо локального плагина"
10370
+ },
10371
+ "mcp": {
10372
+ "label": "MCP",
10373
+ "hint": "Добавить официальный MCP Vuetify сервер"
10366
10374
  }
10367
10375
  },
10368
10376
  "package_manager": { "select": "Какой менеджер пакетов вы хотите использовать?" },
@@ -28403,7 +28411,7 @@ const banner = createBanner();
28403
28411
 
28404
28412
  //#endregion
28405
28413
  //#region package.json
28406
- var version = "0.0.6-beta.4";
28414
+ var version = "0.0.6-beta.6";
28407
28415
 
28408
28416
  //#endregion
28409
28417
  //#region src/commands/upgrade.ts
@@ -28424,7 +28432,8 @@ var dependencies = {
28424
28432
  "unplugin-vue-router": "^0.19.1",
28425
28433
  "vite-plugin-vuetify": "^2.1.2",
28426
28434
  "pathe": "^2.0.3",
28427
- "@vuetify/loader-shared": "^2.1.1"
28435
+ "@vuetify/loader-shared": "^2.1.1",
28436
+ "@intellectronica/ruler": "^0.3.18"
28428
28437
  };
28429
28438
 
28430
28439
  //#endregion
@@ -28560,6 +28569,44 @@ function getNuxtI18nConfig(_ts) {
28560
28569
  `;
28561
28570
  }
28562
28571
 
28572
+ //#endregion
28573
+ //#region src/features/mcp.ts
28574
+ const mcp = {
28575
+ name: "mcp",
28576
+ apply: async ({ cwd: cwd$1, pkg }) => {
28577
+ pkg.devDependencies = pkg.devDependencies || {};
28578
+ pkg.devDependencies["@intellectronica/ruler"] = dependencies["@intellectronica/ruler"];
28579
+ pkg.scripts = pkg.scripts || {};
28580
+ pkg.scripts["mcp"] = "ruler apply";
28581
+ pkg.scripts["mcp:revert"] = "ruler revert";
28582
+ const rulerDir = join(cwd$1, ".ruler");
28583
+ await mkdir(rulerDir, { recursive: true });
28584
+ await writeFile(join(rulerDir, "ruler.toml"), getRulerToml());
28585
+ await writeFile(join(rulerDir, "AGENTS.md"), getAgentsMd());
28586
+ }
28587
+ };
28588
+ function getRulerToml() {
28589
+ return `# For a complete example, see: https://okigu.com/ruler#complete-example
28590
+
28591
+ # List of agents to configure
28592
+ default_agents = ["copilot", "claude", "trae"]
28593
+
28594
+ [mcp_servers.vuetify]
28595
+ url = "https://mcp.vuetifyjs.com/mcp"
28596
+
28597
+ # https://github.com/vuetifyjs/mcp#authentication
28598
+ # [mcp_servers.vuetify.headers]
28599
+ # Authorization = "Bearer <YOUR_API_KEY>"
28600
+ `;
28601
+ }
28602
+ function getAgentsMd() {
28603
+ return `# Project Rules
28604
+
28605
+ ## General
28606
+ - Follow the existing code style and patterns.
28607
+ `;
28608
+ }
28609
+
28563
28610
  //#endregion
28564
28611
  //#region src/features/pinia.ts
28565
28612
  const pinia = {
@@ -28774,6 +28821,7 @@ const features = {
28774
28821
  pinia,
28775
28822
  i18n: i18n$1,
28776
28823
  eslint,
28824
+ mcp,
28777
28825
  "vuetify-nuxt-module": vuetifyNuxtModule
28778
28826
  };
28779
28827
  async function applyFeatures(cwd$1, featureNames, pkg, isTypescript, clientHints) {
@@ -28902,32 +28950,32 @@ async function prompt(args$2, cwd$1 = process.cwd()) {
28902
28950
  return (results.type || args$2.type) === "vue" ? Lt({
28903
28951
  message: i18n.t("prompts.features.select", { hint: dim("↑/↓ to navigate, space to select, a to toggle all, enter to confirm") }),
28904
28952
  options: [
28905
- {
28906
- label: i18n.t("prompts.features.pinia.label"),
28907
- value: "pinia",
28908
- hint: i18n.t("prompts.features.pinia.hint")
28909
- },
28910
28953
  {
28911
28954
  label: i18n.t("prompts.features.eslint.label"),
28912
28955
  value: "eslint",
28913
28956
  hint: i18n.t("prompts.features.eslint.hint")
28914
28957
  },
28958
+ {
28959
+ label: i18n.t("prompts.features.mcp.label"),
28960
+ value: "mcp",
28961
+ hint: i18n.t("prompts.features.mcp.hint")
28962
+ },
28963
+ {
28964
+ label: i18n.t("prompts.features.pinia.label"),
28965
+ value: "pinia",
28966
+ hint: i18n.t("prompts.features.pinia.hint")
28967
+ },
28915
28968
  {
28916
28969
  label: i18n.t("prompts.features.i18n.label"),
28917
28970
  value: "i18n",
28918
28971
  hint: i18n.t("prompts.features.i18n.hint")
28919
28972
  }
28920
28973
  ],
28921
- initialValues: ["eslint"],
28974
+ initialValues: ["eslint", "mcp"],
28922
28975
  required: false
28923
28976
  }) : Lt({
28924
28977
  message: i18n.t("prompts.features.select", { hint: dim("↑/↓ to navigate, space to select, a to toggle all, enter to confirm") }),
28925
28978
  options: [
28926
- {
28927
- label: i18n.t("prompts.features.pinia.label"),
28928
- value: "pinia",
28929
- hint: i18n.t("prompts.features.pinia.hint")
28930
- },
28931
28979
  {
28932
28980
  label: i18n.t("prompts.features.eslint.label"),
28933
28981
  value: "eslint",
@@ -28938,13 +28986,27 @@ async function prompt(args$2, cwd$1 = process.cwd()) {
28938
28986
  value: "vuetify-nuxt-module",
28939
28987
  hint: i18n.t("prompts.features.vuetify_nuxt_module.hint")
28940
28988
  },
28989
+ {
28990
+ label: i18n.t("prompts.features.mcp.label"),
28991
+ value: "mcp",
28992
+ hint: i18n.t("prompts.features.mcp.hint")
28993
+ },
28994
+ {
28995
+ label: i18n.t("prompts.features.pinia.label"),
28996
+ value: "pinia",
28997
+ hint: i18n.t("prompts.features.pinia.hint")
28998
+ },
28941
28999
  {
28942
29000
  label: i18n.t("prompts.features.i18n.label"),
28943
29001
  value: "i18n",
28944
29002
  hint: i18n.t("prompts.features.i18n.hint")
28945
29003
  }
28946
29004
  ],
28947
- initialValues: ["eslint", "vuetify-nuxt-module"],
29005
+ initialValues: [
29006
+ "eslint",
29007
+ "vuetify-nuxt-module",
29008
+ "mcp"
29009
+ ],
28948
29010
  required: false
28949
29011
  });
28950
29012
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-vuetify",
3
- "version": "0.0.6-beta.4",
3
+ "version": "0.0.6-beta.6",
4
4
  "description": "Create a new Vuetify project",
5
5
  "type": "module",
6
6
  "bin": {
@@ -19,7 +19,7 @@
19
19
  "pathe": "^2.0.3",
20
20
  "tsdown": "^0.16.6",
21
21
  "vitest": "^4.0.16",
22
- "@vuetify/cli-shared": "0.0.6-beta.4"
22
+ "@vuetify/cli-shared": "0.0.6-beta.6"
23
23
  },
24
24
  "main": "./dist/index.mjs",
25
25
  "module": "./dist/index.mjs",
@@ -12,6 +12,7 @@
12
12
  "unplugin-vue-router": "^0.19.1",
13
13
  "vite-plugin-vuetify": "^2.1.2",
14
14
  "pathe": "^2.0.3",
15
- "@vuetify/loader-shared": "^2.1.1"
15
+ "@vuetify/loader-shared": "^2.1.1",
16
+ "@intellectronica/ruler": "^0.3.18"
16
17
  }
17
18
  }
@@ -2,6 +2,7 @@ import type { PackageJson } from 'pkg-types'
2
2
  import type { Feature } from './types'
3
3
  import { eslint } from './eslint'
4
4
  import { i18n } from './i18n'
5
+ import { mcp } from './mcp'
5
6
  import { pinia } from './pinia'
6
7
  import { fileRouter, router } from './router'
7
8
  import { vuetifyNuxtModule } from './vuetify-nuxt-module'
@@ -12,6 +13,7 @@ export const features: Record<string, Feature> = {
12
13
  pinia,
13
14
  i18n,
14
15
  eslint,
16
+ mcp,
15
17
  'vuetify-nuxt-module': vuetifyNuxtModule,
16
18
  }
17
19
 
@@ -0,0 +1,45 @@
1
+ import type { Feature } from './types'
2
+ import { mkdir, writeFile } from 'node:fs/promises'
3
+ import { join } from 'node:path'
4
+ import rootPkg from './dependencies/package.json' with { type: 'json' }
5
+
6
+ export const mcp: Feature = {
7
+ name: 'mcp',
8
+ apply: async ({ cwd, pkg }) => {
9
+ pkg.devDependencies = pkg.devDependencies || {}
10
+ pkg.devDependencies['@intellectronica/ruler'] = rootPkg.dependencies['@intellectronica/ruler']
11
+
12
+ pkg.scripts = pkg.scripts || {}
13
+ pkg.scripts['mcp'] = 'ruler apply'
14
+ pkg.scripts['mcp:revert'] = 'ruler revert'
15
+
16
+ const rulerDir = join(cwd, '.ruler')
17
+ await mkdir(rulerDir, { recursive: true })
18
+
19
+ await writeFile(join(rulerDir, 'ruler.toml'), getRulerToml())
20
+ await writeFile(join(rulerDir, 'AGENTS.md'), getAgentsMd())
21
+ },
22
+ }
23
+
24
+ function getRulerToml () {
25
+ return `# For a complete example, see: https://okigu.com/ruler#complete-example
26
+
27
+ # List of agents to configure
28
+ default_agents = ["copilot", "claude", "trae"]
29
+
30
+ [mcp_servers.vuetify]
31
+ url = "https://mcp.vuetifyjs.com/mcp"
32
+
33
+ # https://github.com/vuetifyjs/mcp#authentication
34
+ # [mcp_servers.vuetify.headers]
35
+ # Authorization = "Bearer <YOUR_API_KEY>"
36
+ `
37
+ }
38
+
39
+ function getAgentsMd () {
40
+ return `# Project Rules
41
+
42
+ ## General
43
+ - Follow the existing code style and patterns.
44
+ `
45
+ }
package/src/prompts.ts CHANGED
@@ -116,22 +116,24 @@ export async function prompt (args: Partial<ProjectOptions>, cwd = process.cwd()
116
116
  ? multiselect({
117
117
  message: i18n.t('prompts.features.select', { hint: dim('↑/↓ to navigate, space to select, a to toggle all, enter to confirm') }),
118
118
  options: [
119
- { label: i18n.t('prompts.features.pinia.label'), value: 'pinia', hint: i18n.t('prompts.features.pinia.hint') },
120
119
  { label: i18n.t('prompts.features.eslint.label'), value: 'eslint', hint: i18n.t('prompts.features.eslint.hint') },
120
+ { label: i18n.t('prompts.features.mcp.label'), value: 'mcp', hint: i18n.t('prompts.features.mcp.hint') },
121
+ { label: i18n.t('prompts.features.pinia.label'), value: 'pinia', hint: i18n.t('prompts.features.pinia.hint') },
121
122
  { label: i18n.t('prompts.features.i18n.label'), value: 'i18n', hint: i18n.t('prompts.features.i18n.hint') },
122
123
  ],
123
- initialValues: ['eslint'],
124
+ initialValues: ['eslint', 'mcp'],
124
125
  required: false,
125
126
  })
126
127
  : multiselect({
127
128
  message: i18n.t('prompts.features.select', { hint: dim('↑/↓ to navigate, space to select, a to toggle all, enter to confirm') }),
128
129
  options: [
129
- { label: i18n.t('prompts.features.pinia.label'), value: 'pinia', hint: i18n.t('prompts.features.pinia.hint') },
130
130
  { label: i18n.t('prompts.features.eslint.label'), value: 'eslint', hint: i18n.t('prompts.features.eslint.hint') },
131
131
  { label: i18n.t('prompts.features.vuetify_nuxt_module.label'), value: 'vuetify-nuxt-module', hint: i18n.t('prompts.features.vuetify_nuxt_module.hint') },
132
+ { label: i18n.t('prompts.features.mcp.label'), value: 'mcp', hint: i18n.t('prompts.features.mcp.hint') },
133
+ { label: i18n.t('prompts.features.pinia.label'), value: 'pinia', hint: i18n.t('prompts.features.pinia.hint') },
132
134
  { label: i18n.t('prompts.features.i18n.label'), value: 'i18n', hint: i18n.t('prompts.features.i18n.hint') },
133
135
  ],
134
- initialValues: ['eslint', 'vuetify-nuxt-module'],
136
+ initialValues: ['eslint', 'vuetify-nuxt-module', 'mcp'],
135
137
  required: false,
136
138
  })
137
139
  },