@dxtmisha/scripts 0.10.12 → 0.10.14

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/CHANGELOG.md CHANGED
@@ -2,7 +2,13 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- ## [0.10.12] - 2026-08-05
5
+ ## [0.10.13] - 2026-08-06
6
+
7
+ ### Changed
8
+ - **AI Workspace Memory**: Updated `aiCodeGlobalPrompt` templates (EN & RU) and root `ai-prompt.md` to restrict `ai-memory.md` updates strictly to explicit developer requests or critical architectural rules.
9
+ - **DesignTypes**: Refined AI prompt summary generation in `toAiPromptName` to produce high-density topic and trigger criteria descriptions, and fixed prompt string joining formatting.
10
+
11
+
6
12
 
7
13
  ### Changed
8
14
  - **AI Generators & Design Types**: Added support for generating `ai-mcp.json` resources in `LibraryAiPrompt`, updated `DesignTypes.toAiEdit` JSDoc instructions, updated `AiZAiLite` prompt parameters, and updated package metadata (`ai-memory.md`).
@@ -2,8 +2,10 @@
2
2
 
3
3
  import { DesignTypes } from '../src/classes/Design/DesignTypes'
4
4
 
5
- const dir: string = process.argv?.[2] ?? 'dist'
5
+ const isRaw: boolean = process.argv?.[2] === 'raw' || process.argv?.[2] === '1' || process.argv?.[2] === 'true'
6
+ const dir: string = process.argv?.[3]
7
+ const resourcesDir: string = process.argv?.[4]
6
8
 
7
- new DesignTypes(dir)
9
+ new DesignTypes(dir, resourcesDir, isRaw)
8
10
  .make()
9
11
  .then()
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dxtmisha/scripts",
3
3
  "private": false,
4
- "version": "0.10.12",
4
+ "version": "0.10.14",
5
5
  "type": "module",
6
6
  "description": "CLI tools, AI integration scripts, and automation utilities for DXT UI — automated component scaffolding, Figma layout generation, library packaging, documentation building, screenshot captures, and AI prompt processing.",
7
7
  "keywords": [
@@ -14,7 +14,7 @@
14
14
  "component-generator",
15
15
  "figma-sync",
16
16
  "ai-tools",
17
- "ai-prompts",
17
+ "ai-resources",
18
18
  "storybook",
19
19
  "documentation",
20
20
  "typescript",
@@ -89,6 +89,7 @@
89
89
  "puppeteer": "*",
90
90
  "sass": "*",
91
91
  "typescript": "*",
92
+ "vite-node": "*",
92
93
  "vue": "*"
93
94
  },
94
95
  "devDependencies": {
@@ -106,4 +106,3 @@ export class AiClaudeCliLite extends AiAbstract<{}> {
106
106
  })
107
107
  }
108
108
  }
109
-
@@ -1,9 +1,25 @@
1
1
  import { FigmaApi } from '../FigmaApi'
2
2
  import { PropertiesConfig } from '../Properties/PropertiesConfig.ts'
3
3
 
4
+ /**
5
+ * Class for downloading and processing design assets from Figma API.
6
+ * Serves as an abstraction for initializing SVG graphics and frame exports from specified Figma files.
7
+ *
8
+ * Класс для скачивания и обработки дизайн-ассетов из Figma API.
9
+ * Служит абстракцией для инициализации SVG-графики и экспорта кадров из указанных файлов Figma.
10
+ */
4
11
  export class DesignFigma {
12
+ /** Figma REST API client instance / Экземпляр клиента REST API Figma */
5
13
  protected readonly api: FigmaApi
6
14
 
15
+ /**
16
+ * Creates an instance of DesignFigma.
17
+ *
18
+ * Создает экземпляр DesignFigma.
19
+ * @param fileKey unique Figma file identifier / уникальный идентификатор файла Figma
20
+ * @param nodeId target node or frame identifier in Figma file / идентификатор целевого узла или кадра в файле Figma
21
+ * @param token Figma API access token / токен доступа к API Figma
22
+ */
7
23
  constructor(
8
24
  protected readonly fileKey: string,
9
25
  protected readonly nodeId?: string,
@@ -12,10 +28,21 @@ export class DesignFigma {
12
28
  this.api = new FigmaApi(token, fileKey, nodeId)
13
29
  }
14
30
 
31
+ /**
32
+ * Executes the main workflow for retrieving and logging Figma design image assets.
33
+ *
34
+ * Выполняет основной процесс получения и логирования графических ассетов дизайна Figma.
35
+ */
15
36
  async make(): Promise<void> {
16
37
  console.log('Design Figma', await this.initImage())
17
38
  }
18
39
 
40
+ /**
41
+ * Requests SVG image export URLs for the specified node from Figma API.
42
+ *
43
+ * Запрашивает URL-адреса экспорта SVG-изображений для указанного узла через API Figma.
44
+ * @returns map of node IDs to SVG image URLs, or undefined on error / карта ID узлов к URL SVG-изображений или undefined в случае ошибки
45
+ */
19
46
  async initImage(): Promise<Record<string, string> | undefined> {
20
47
  const image = await this.api.fileImages({
21
48
  ids: this.nodeId as string,
@@ -29,10 +29,12 @@ export class DesignTypes {
29
29
  * Конструктор для DesignTypes.
30
30
  * @param dir input directory path containing declaration files / входной путь к директории, содержащей файлы деклараций
31
31
  * @param promptsDir input directory path containing prompt files / входной путь к директории, содержащей файлы промптов
32
+ * @param isRaw flag disabling AI processing to create raw types and empty description / флаг отключения ИИ обработки для создания сырых типов и пустого описания
32
33
  */
33
34
  constructor(
34
35
  protected readonly dir: string = 'dist',
35
- protected readonly promptsDir: string = 'ai-prompts'
36
+ protected readonly promptsDir: string = 'ai-resources',
37
+ protected readonly isRaw: boolean = false
36
38
  ) {
37
39
  ServerStorage.setErrorStatus(true)
38
40
  this.dirArray = this.dir.split('/')
@@ -49,38 +51,43 @@ export class DesignTypes {
49
51
  const files = this.getListByFilter()
50
52
  const jsFiles = this.getListByFilterJs()
51
53
 
52
- const fullContent = this.toOneFile(files)
54
+ const fullContent = this.cleanContent(this.toOneFile(files))
53
55
  const fullJsContent = this.toOneFile(jsFiles)
54
56
 
55
- const aiContent = await this.toAiEdit(fullContent, fullJsContent)
57
+ const aiContent = this.isRaw
58
+ ? fullContent
59
+ : await this.toAiEdit(fullContent, fullJsContent)
60
+ let fullDescription = ''
61
+ let mcpPrompts: DesignMcpResources | undefined
62
+
56
63
  this.save(aiContent)
57
64
 
58
- const aiDescription = await this.toAiDescription(fullContent, fullJsContent)
65
+ if (!this.isRaw) {
66
+ const aiDescription = await this.toAiDescription(fullContent, fullJsContent)
59
67
 
60
- const promptList = this.getListPrompts()
61
- const prompts = await this.toAiPrompts(promptList)
68
+ const promptList = this.getListPrompts()
69
+ const prompts = await this.toAiPrompts(promptList)
62
70
 
63
- const fullDescription = `${aiDescription}\n${prompts}`
64
- this.saveDescription(fullDescription)
71
+ fullDescription = `${aiDescription}\n${prompts}`
72
+
73
+ const mcpList: DesignTypesList = [
74
+ {
75
+ path: UI_FILE_AI_TYPES,
76
+ content: aiContent
77
+ },
78
+ {
79
+ path: UI_FILE_AI_DESCRIPTION,
80
+ content: fullDescription
81
+ },
82
+ ...promptList
83
+ ]
65
84
 
66
- const mcpList: DesignTypesList = [
67
- {
68
- path: UI_FILE_AI_TYPES,
69
- content: aiContent
70
- },
71
- {
72
- path: UI_FILE_AI_DESCRIPTION,
73
- content: fullDescription
74
- },
75
- ...promptList
76
- ]
77
-
78
- const mcpPrompts = await this.toAiMcpPrompts(mcpList)
79
-
80
- if (mcpPrompts) {
81
- this.saveMcp(mcpPrompts)
85
+ mcpPrompts = await this.toAiMcpPrompts(mcpList)
82
86
  }
83
87
 
88
+ this.saveDescription(fullDescription)
89
+ this.saveMcp(mcpPrompts ?? [])
90
+
84
91
  console.log('DesignTypes: AI types saved.')
85
92
  }
86
93
 
@@ -243,10 +250,11 @@ export class DesignTypes {
243
250
  const packageJson = getPackageJson()
244
251
 
245
252
  if (packageJson) {
253
+ const versionStr = packageJson.version ? ` (v${packageJson.version})` : ''
246
254
  PropertiesFile.writeByPath(
247
255
  UI_FILE_AI_TYPES,
248
256
  [
249
- `All these methods are in the ${packageJson.name} library.`,
257
+ `All these methods are in the ${packageJson.name}${versionStr} library.`,
250
258
  '',
251
259
  content
252
260
  ].join('\n')
@@ -307,10 +315,15 @@ export class DesignTypes {
307
315
  prompt: string,
308
316
  code?: string
309
317
  ): Promise<string | undefined> {
318
+ if (this.isRaw) {
319
+ return undefined
320
+ }
321
+
310
322
  const ai = useAi()
311
323
 
312
324
  if (ai) {
313
325
  ai.addPrompt('You are a world-class senior developer and an exceptional technical writer.')
326
+ ai.addPrompt('CRITICAL DIRECTIVE: No data stored in history, previous chat messages, or prior conversation context must influence the result. Process strictly and exclusively the data provided in the text below.')
314
327
  ai.addPrompt(prompt)
315
328
  ai.addPrompt(`File Content: ${content}`)
316
329
 
@@ -328,6 +341,28 @@ export class DesignTypes {
328
341
  return undefined
329
342
  }
330
343
 
344
+ /**
345
+ * Cleans up the content by removing imports, local exports, and empty lines.
346
+ *
347
+ * Очищает контент, удаляя импорты, локальные экспорты и пустые строки.
348
+ * @param content content to clean / контент для очистки
349
+ */
350
+ protected cleanContent(content: string): string {
351
+ return content
352
+ // Remove multi-line and single-line imports (only local files)
353
+ .replace(/^import\s+(?:{[^}]+}|[^{]+)\s+from\s+['"]\.[^'"]+['"];?/gm, '')
354
+ .replace(/^import\s+['"]\.[^'"]+['"];?/gm, '')
355
+ // Remove local internal re-exports (e.g., export * from "./...")
356
+ .replace(/^export\s+(?:\*|{[^}]+})\s+from\s+['"]\.[^'"]+['"];?/gm, '')
357
+ // Remove single-line private and protected properties
358
+ .replace(/^\s*(?:private|protected)\s+[^({]+;/gm, '')
359
+ // Remove lines that only contain inline comments
360
+ .replace(/^\s*\/\/.*$/gm, '')
361
+ // Remove empty lines
362
+ .replace(/^\s*[\r\n]/gm, '')
363
+ .trim()
364
+ }
365
+
331
366
  /**
332
367
  * Sends content to AI for optimization.
333
368
  *
@@ -408,24 +443,20 @@ export class DesignTypes {
408
443
  */
409
444
  protected async toAiPrompts(list: DesignTypesList): Promise<string> {
410
445
  const projectName = this.getProjectName()
411
- const promptList = await Promise.all(
412
- forEach(list, async (item) => {
413
- const content = await this.toAiPromptName(item.content)
414
-
415
- if (isFilled(content)) {
416
- return `- '${UI_MODULES}/${projectName}/${item.path}': ${content}`
417
- }
446
+ const prompts: string[] = []
418
447
 
419
- return ''
420
- })
421
- )
448
+ for (const item of list) {
449
+ const content = await this.toAiPromptName(item.content)
422
450
 
423
- const prompts = promptList.filter(Boolean).join('\n')
451
+ if (isFilled(content)) {
452
+ prompts.push(`- '${UI_MODULES}/${projectName}/${item.path}': ${content}`)
453
+ }
454
+ }
424
455
 
425
- if (prompts) {
456
+ if (prompts.length > 0) {
426
457
  return '## Mandatory Rules\n'
427
458
  + 'Read the corresponding file ONLY when working on a task related to (even if not working directly with this package):\n'
428
- + `${prompts}`
459
+ + `${prompts.join('\n')}`
429
460
  }
430
461
 
431
462
  return ''
@@ -440,18 +471,19 @@ export class DesignTypes {
440
471
  protected async toAiPromptName(content: string): Promise<string> {
441
472
  const generate = await this.toAi(
442
473
  content,
443
- 'Goal: Generate an EXTREMELY SHORT, high-density topic summary for an AI coding assistant describing what rules/topics are covered in this prompt document.\n\n'
474
+ 'Goal: Generate an EXTREMELY SHORT, high-density trigger and topic summary for an AI coding assistant describing what rules/topics are covered AND under what specific tasks, conditions, or use cases this document must be studied.\n\n'
444
475
  + 'CRITICAL RESTRICTIONS:\n'
445
- + '- The output MUST be EXTREMELY CONCISE: 1 short sentence or clause (maximum 10-15 words).\n'
446
- + '- Do NOT include repetitive filler like "When working with...", "you MUST study this document", or "in order to follow...".\n'
476
+ + '- The output MUST be EXTREMELY CONCISE: 1-2 short sentence or clause (maximum 30-35 words).\n'
477
+ + '- Clearly specify BOTH the key topics/rules AND the specific scenarios, tasks, or triggers when this document must be read.\n'
478
+ + '- Do NOT include repetitive filler like "you MUST study this document", "in order to follow...", or "when working with...".\n'
447
479
  + '- Analyze ONLY the text explicitly provided in this prompt.\n'
448
480
  + '- Do NOT include file paths, URLs, quotes, or markdown syntax.\n\n'
449
481
  + 'EXAMPLES OF GOOD OUTPUT:\n'
450
- + '- "Class structure, typing standards, SSR safety, and primitive helpers"\n'
451
- + '- "HTTP client, storage management, localization, and DOM event helpers"\n'
452
- + '- "MDX documentation generation rules for TypeScript classes"\n\n'
482
+ + '- "Class structure, typing standards, SSR safety, and primitive utility functions"\n'
483
+ + '- "HTTP client, storage management, localization formatting, and DOM event helpers"\n'
484
+ + '- "Implementing or wrapping D1 components, slot/event types, or customizing theme variables"\n\n'
453
485
  + 'OUTPUT REQUIREMENTS:\n'
454
- + 'Return ONLY the resulting short topic summary. No markdown code blocks (```), no labels, no quotes, and no conversational text.'
486
+ + 'Return ONLY the resulting short trigger and topic summary. No markdown code blocks (```), no labels, no quotes, and no conversational text.'
455
487
  )
456
488
 
457
489
  return generate ?? ''
@@ -43,12 +43,12 @@ export class DesignWikiStorm {
43
43
 
44
44
  if (packageFile) {
45
45
  const data: WebTypesVueJson = {
46
- $schema: 'https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json',
47
- framework: 'vue',
48
- name: toCamelCaseFirst(PropertiesConfig.getDesignName()),
49
- version: packageFile.version,
46
+ '$schema': 'https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json',
47
+ 'framework': 'vue',
48
+ 'name': toCamelCaseFirst(PropertiesConfig.getDesignName()),
49
+ 'version': packageFile.version,
50
50
  'js-types-syntax': 'typescript',
51
- contributions: {
51
+ 'contributions': {
52
52
  html: {
53
53
  'description-markup': 'markdown',
54
54
  'vue-components': await this.getComponents()
@@ -127,7 +127,7 @@ export class DesignWikiStormItem {
127
127
  const slots: WebTypesSlots = []
128
128
 
129
129
  data.slots.forEach(
130
- slot => {
130
+ (slot) => {
131
131
  const vueProperties: WebTypesProperty[] = (slot.properties ?? []).map(p => ({
132
132
  name: p.name,
133
133
  type: p.type ? this.cleanType(p.type) : undefined,
@@ -160,7 +160,7 @@ export class DesignWikiStormItem {
160
160
  const events: WebTypesEventItem[] = []
161
161
 
162
162
  data.events.forEach(
163
- event => {
163
+ (event) => {
164
164
  let typeString = '() => void'
165
165
  if (event.properties && event.properties.length > 0) {
166
166
  const args = event.properties
@@ -6,10 +6,10 @@ import {
6
6
 
7
7
  /**
8
8
  * Class representing an MCP item in the AI prompt generation process.
9
- * Handles reading `ai-mcp.json` configuration files for a package directory.
9
+ * Handles reading `ai-mcp-resources.json` configuration files for a package directory.
10
10
  *
11
11
  * Класс, представляющий элемент MCP в процессе создания промпта для ИИ.
12
- * Управляет чтением конфигурационных файлов `ai-mcp.json` для директории пакета.
12
+ * Управляет чтением конфигурационных файлов `ai-mcp-resources.json` для директории пакета.
13
13
  */
14
14
  export class LibraryAiMcpItem {
15
15
  /**
@@ -23,19 +23,19 @@ export class LibraryAiMcpItem {
23
23
  ) { }
24
24
 
25
25
  /**
26
- * Checks if the ai-mcp.json file exists in the directory.
26
+ * Checks if the ai-mcp-resources.json file exists in the directory.
27
27
  *
28
- * Проверяет, существует ли файл ai-mcp.json в директории.
29
- * @returns true if ai-mcp.json file exists / true, если файл ai-mcp.json существует
28
+ * Проверяет, существует ли файл ai-mcp-resources.json в директории.
29
+ * @returns true if ai-mcp-resources.json file exists / true, если файл ai-mcp-resources.json существует
30
30
  */
31
31
  isMcp(): boolean {
32
32
  return PropertiesFile.is(this.getPath(UI_FILE_AI_MCP))
33
33
  }
34
34
 
35
35
  /**
36
- * Reads and returns the list of MCP resource definitions from ai-mcp.json.
36
+ * Reads and returns the list of MCP resource definitions from ai-mcp-resources.json.
37
37
  *
38
- * Читает и возвращает список определений ресурсов MCP из ai-mcp.json.
38
+ * Читает и возвращает список определений ресурсов MCP из ai-mcp-resources.json.
39
39
  * @returns list of MCP resource items or undefined / список элементов ресурсов MCP или undefined
40
40
  */
41
41
  make(): Record<string, any>[] | undefined {
@@ -1,5 +1,5 @@
1
1
  import {
2
- UI_FILE_AI_MCP,
2
+ UI_FILE_AI_MCP_ALL,
3
3
  UI_FILE_AI_PROMPT_INSTRUCTION,
4
4
  UI_FILE_AI_PROMPT_PROMPT,
5
5
  UI_MODULES
@@ -243,7 +243,7 @@ ${globalPromptText}
243
243
  */
244
244
  protected writeMcp(mcpData: Record<string, any>[]): this {
245
245
  PropertiesFile.writeByPath(
246
- UI_FILE_AI_MCP,
246
+ UI_FILE_AI_MCP_ALL,
247
247
  mcpData
248
248
  )
249
249
 
@@ -46,9 +46,9 @@ export class LibraryAiPromptItem {
46
46
  }
47
47
 
48
48
  /**
49
- * Reads and returns the list of MCP resource definitions from ai-mcp.json.
49
+ * Reads and returns the list of MCP resource definitions from ai-mcp-resources.json.
50
50
  *
51
- * Читает и возвращает список определений ресурсов MCP из ai-mcp.json.
51
+ * Читает и возвращает список определений ресурсов MCP из ai-mcp-resources.json.
52
52
  * @returns list of MCP resource items or undefined / список элементов ресурсов MCP или undefined
53
53
  */
54
54
  getMcp(): Record<string, any>[] | undefined {
@@ -111,10 +111,10 @@ export class LibraryAiPromptItem {
111
111
  }
112
112
 
113
113
  /**
114
- * Checks if the ai-mcp.json file exists.
114
+ * Checks if the ai-mcp-resources.json file exists.
115
115
  *
116
- * Проверяет, существует ли файл ai-mcp.json.
117
- * @returns true if ai-mcp.json file exists / true, если файл ai-mcp.json существует
116
+ * Проверяет, существует ли файл ai-mcp-resources.json.
117
+ * @returns true if ai-mcp-resources.json file exists / true, если файл ai-mcp-resources.json существует
118
118
  */
119
119
  isMcp(): boolean {
120
120
  return this.itemMcp.isMcp()
package/src/config.ts CHANGED
@@ -121,7 +121,9 @@ export const UI_FILE_AI_TYPES = 'ai-types.md'
121
121
  /** AI description file name / Название файла с описанием AI */
122
122
  export const UI_FILE_AI_DESCRIPTION = 'ai-description.md'
123
123
  /** AI MCP resources file name / Название файла с ресурсами MCP AI */
124
- export const UI_FILE_AI_MCP = 'ai-mcp.json'
124
+ export const UI_FILE_AI_MCP = 'ai-mcp-resources.json'
125
+ /** AI MCP all resources file name / Название файла со всеми ресурсами MCP AI */
126
+ export const UI_FILE_AI_MCP_ALL = 'ai-mcp-all-resources.json'
125
127
  /** Style SCSS file name / Название файла стилей SCSS */
126
128
  export const UI_FILE_STYLE_SCSS = 'style.scss'
127
129
  /** UI properties SCSS file name / Название файла свойств UI в SCSS */
@@ -17,12 +17,12 @@
17
17
  "publish-to-npm": "npm publish --access public"
18
18
  },
19
19
  "files": [
20
- "ai-prompts/",
20
+ "ai-resources/",
21
21
  "ai-screenshot/",
22
22
  "dist",
23
23
  "ai-description.md",
24
24
  "ai-doc.md",
25
- "ai-mcp.json",
25
+ "ai-mcp-resources.json",
26
26
  "ai-types.md",
27
27
  "CHANGELOG.md",
28
28
  "LICENSE",
@@ -17,5 +17,5 @@ Strictly follow these rules for flawless dxt-ui code:
17
17
  7. **Security & Performance**: Error-proof code (`?.`, `??`, guard clauses). Use explicit `try-catch` for async. Never swallow errors. Avoid heavy ops in loops/reactivity.
18
18
  8. **Aesthetics & Conciseness**: Group logically. Save tokens by avoiding redundant comments if code is self-explanatory.
19
19
  9. **Strict Adherence & Optimization**: Follow instructions precisely without guessing. Propose relevant technical optimizations while strictly adhering to plans.
20
- 10. **AI Workspace Memory (`ai-memory.md`)**: Actively APPLY its rules (highest priority). Update it on developer feedback. **CRITICAL**: Any remark from the developer that has value for the future (e.g., code style, dos and don'ts) MUST be saved here. If the developer explicitly asks to save or remember something, you MUST save it. Do NOT store change logs or absolute paths (use relative). Keep it focused strictly on architectural constraints and developer preferences.
20
+ 10. **AI Workspace Memory (`ai-memory.md`)**: Actively APPLY its rules (highest priority). Update local `ai-memory.md` **ONLY** upon explicit developer command (e.g., "remember", "save to memory") or for critical architectural rules/fixes. **STRICTLY FORBIDDEN** to overwrite or delete existing file contents: you MUST **ONLY append** new directives to the end of the file. Do NOT add routine edits indiscriminately, change logs, or absolute paths (use relative only). Keep it focused strictly on critical architectural constraints and explicit developer instructions.
21
21
  11. **Mandatory Full-File Self-Audit**: When creating new entities, you MUST audit the ENTIRE file (not just modified parts) to ensure no logic duplication (DRY) and full compliance with project rules. *Exception: minor bug fixes to existing code do not require a full audit.*
@@ -17,5 +17,5 @@
17
17
  7. **Безопасность и Производительность**: Защищенный код (`?.`, `??`, guard clauses). Явный `try-catch` для асинхронности. Не скрывай ошибки. Избегай тяжелых операций в циклах/реактивности.
18
18
  8. **Эстетика и Лаконичность**: Логическая группировка. Экономь токены, избегая избыточных комментариев, если код очевиден.
19
19
  9. **Строгое следование инструкциям**: Выполняй команды без додумывания, но предлагай уместные технические оптимизации, придерживаясь плана.
20
- 10. **Память ИИ (`ai-memory.md`)**: Активно ПРИМЕНЯЙ ее правила (высший приоритет). Обновляй при правках от разработчика. **ВАЖНО**: Любое замечание от разработчика, которое имеет ценность для будущего (например, стиль кода, что надо делать, а что нет), ДОЛЖНО быть сохранено здесь. Также, если разработчик просит сохранить или запомнить какую-либо информацию, ты ОБЯЗАН это сделать. ЗАПРЕЩЕНО хранить историю изменений (changelogs) и абсолютные пути (только относительные). Только актуальные стандарты и предпочтения разработчика.
20
+ 10. **Память ИИ (`ai-memory.md`)**: Активно ПРИМЕНЯЙ ее правила (высший приоритет). Обновляй локальный `ai-memory.md` **ТОЛЬКО** по явной команде разработчика (напр., «запомни», «сохрани в память») или при критических архитектурных правках/правилах. **СТРОГО ЗАПРЕЩЕНО** полностью переписывать или удалять содержимое файла: записи разрешено **ТОЛЬКО дополнять** (append) в конец существующего содержимого. ЗАПРЕЩЕНО добавлять всё подряд, историю изменений (changelogs) и абсолютные пути (только относительные). Храни только действительно важные архитектурные ограничения и явные указания разработчика.
21
21
  11. **Обязательный полный самоаудит**: При создании новых сущностей ОБЯЗАТЕЛЬНО проверяй ВЕСЬ файл целиком. Строго контролируй отсутствие дублирования (DRY) и соблюдение всех правил проекта. *Исключение: мелкие правки существующего кода не требуют полного аудита.*
@@ -120,12 +120,12 @@ export type WebTypesVueComponentItem = WebTypesInfo & {
120
120
  * Корневой объект для JSON Web Types.
121
121
  */
122
122
  export type WebTypesVueJson = {
123
- $schema: string
124
- framework: 'vue'
125
- name: string
126
- version: string
123
+ '$schema': string
124
+ 'framework': 'vue'
125
+ 'name': string
126
+ 'version': string
127
127
  'js-types-syntax'?: 'typescript'
128
- contributions: {
128
+ 'contributions': {
129
129
  html: {
130
130
  'description-markup': 'markdown'
131
131
  'vue-components': WebTypesVueComponentItem[]