fchek 1.0.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.
Files changed (66) hide show
  1. package/README.md +64 -0
  2. package/bin/fchek.js +107 -0
  3. package/lib/api.js +110 -0
  4. package/lib/audit.js +211 -0
  5. package/lib/bench.js +248 -0
  6. package/lib/config.js +191 -0
  7. package/lib/context.js +356 -0
  8. package/lib/convention.js +526 -0
  9. package/lib/coverage.js +604 -0
  10. package/lib/db.js +135 -0
  11. package/lib/deps-check.js +264 -0
  12. package/lib/deps.js +374 -0
  13. package/lib/docker.js +84 -0
  14. package/lib/doctor.js +149 -0
  15. package/lib/dom.js +226 -0
  16. package/lib/fuzz.js +470 -0
  17. package/lib/git.js +290 -0
  18. package/lib/goto.js +544 -0
  19. package/lib/launch.js +182 -0
  20. package/lib/lint.js +624 -0
  21. package/lib/new_features.test.js +181 -0
  22. package/lib/output.js +46 -0
  23. package/lib/port.js +173 -0
  24. package/lib/process.js +228 -0
  25. package/lib/profile.js +453 -0
  26. package/lib/python.js +41 -0
  27. package/lib/race.js +186 -0
  28. package/lib/registry.js +179 -0
  29. package/lib/repl.js +135 -0
  30. package/lib/run.js +403 -0
  31. package/lib/screenshot.js +152 -0
  32. package/lib/secrets.js +257 -0
  33. package/lib/state.js +219 -0
  34. package/lib/test.js +471 -0
  35. package/lib/vuln.js +253 -0
  36. package/lib/watch.js +240 -0
  37. package/lib/winlog.js +123 -0
  38. package/package.json +27 -0
  39. package/skills/ACTIVATE.md +274 -0
  40. package/skills/README.md +163 -0
  41. package/skills/agent.md +444 -0
  42. package/skills/api.md +47 -0
  43. package/skills/bench.md +117 -0
  44. package/skills/context.md +116 -0
  45. package/skills/convention.md +143 -0
  46. package/skills/coverage.md +99 -0
  47. package/skills/csharp.md +97 -0
  48. package/skills/db.md +66 -0
  49. package/skills/deps-check.md +135 -0
  50. package/skills/deps.md +143 -0
  51. package/skills/docker.md +61 -0
  52. package/skills/dom.md +56 -0
  53. package/skills/fuzz.md +167 -0
  54. package/skills/goto.md +111 -0
  55. package/skills/lint.md +123 -0
  56. package/skills/port.md +57 -0
  57. package/skills/profile.md +91 -0
  58. package/skills/race.md +117 -0
  59. package/skills/repl.md +81 -0
  60. package/skills/rules.md +318 -0
  61. package/skills/run.md +135 -0
  62. package/skills/secrets.md +170 -0
  63. package/skills/security.md +360 -0
  64. package/skills/state.md +261 -0
  65. package/skills/vuln.md +57 -0
  66. package/skills/windows.md +320 -0
@@ -0,0 +1,261 @@
1
+ # state.md — Память агента: диск vs RAM
2
+
3
+ Агент имеет два инструмента памяти. Не путай их — у каждого своё назначение.
4
+
5
+ ---
6
+
7
+ ## Разграничение: state (диск) vs repl (RAM)
8
+
9
+ | | `fchek state` | `fchek repl` |
10
+ |---|---|---|
11
+ | **Где хранит** | Диск (`.fcheck_state.json`) | Память процесса |
12
+ | **Живёт после exit** | Да — навсегда | Нет — теряется при выходе |
13
+ | **Назначение** | Долгосрочная память проекта | Итеративная работа в одной сессии |
14
+ | **Что хранить** | Задача, решения, блокеры, прогресс | Черновики, промежуточные результаты |
15
+ | **Размер** | До ~10KB на ключ | Не ограничен |
16
+ | **Коммитится в git** | Нет (`.gitignore`) | Нет |
17
+
18
+ **Правило:** если информация нужна в следующей сессии — используй `state`. Если только сейчас — используй `repl`.
19
+
20
+ ---
21
+
22
+ ## Что хранить в state
23
+
24
+ Обязательные ключи для автономной работы:
25
+
26
+ ```bash
27
+ # Текущая задача (обязательно в начале каждой задачи)
28
+ fchek state set task "implement JWT refresh token rotation"
29
+ fchek state set status "in_progress" # todo | in_progress | done | blocked
30
+
31
+ # Файлы относящиеся к задаче
32
+ fchek state set files "src/auth.py src/middleware.py tests/test_auth.py"
33
+
34
+ # Следующий шаг (обновляй после каждого законченного подшага)
35
+ fchek state set next_step "написать тест для token expiry edge case"
36
+
37
+ # Блокер (если задача заблокирована)
38
+ fchek state set blocker "redis-server не установлен — нужен человек"
39
+
40
+ # Архитектурные решения (сохраняй причину, не только выбор)
41
+ fchek state set auth_lib "python-jose (выбрали вместо PyJWT — нужна поддержка JWE)"
42
+ fchek state set db_pattern "repository pattern (файлы: src/repos/)"
43
+ fchek state set error_style "Result[T, E] с custom exceptions (см. src/errors.py)"
44
+ fchek state set cache_backend "Redis с TTL 3600s (bench показал 8ms vs 42ms для N>1000)"
45
+ ```
46
+
47
+ ### Что НЕ хранить в state:
48
+ - Секреты, токены, пароли → только через env vars
49
+ - Данные больше 10KB → используй `snapshot` для файлов
50
+ - Временные результаты вычислений → используй `repl`
51
+
52
+ ---
53
+
54
+ ## Что хранить в repl
55
+
56
+ `fchek repl` — это рабочий стол **одной сессии**. Используй для итеративной работы:
57
+
58
+ ```
59
+ fchek> set hypothesis "LRU cache быстрее HashMap для N<100"
60
+ fchek> profile src/cache.py
61
+ fchek> set profile_result "HashMap: 42ms, Vec+linear: 8ms для N=50"
62
+ fchek> bench . --before=cache_v1.py --after=cache_v2.py
63
+ fchek> get hypothesis
64
+ ```
65
+
66
+ Если результат важен для будущего — сохрани в state:
67
+ ```
68
+ fchek> state set cache_decision "Vec+linear быстрее для N<100 (bench: 8ms vs 42ms)"
69
+ ```
70
+
71
+ ---
72
+
73
+ ## Команды state
74
+
75
+ ```bash
76
+ fchek state set <key> <value> # сохранить ключ
77
+ fchek state get <key> # прочитать один ключ
78
+ fchek state list # показать всё состояние
79
+ fchek state delete <key> # удалить ключ
80
+ fchek state clear --yes # сбросить всё состояние
81
+ fchek state snapshot # снапшот хешей файлов проекта
82
+ ```
83
+
84
+ Вывод `fchek state list`:
85
+ ```json
86
+ {
87
+ "status": "ok",
88
+ "data": {
89
+ "state": {
90
+ "task": "implement JWT refresh token rotation",
91
+ "status": "in_progress",
92
+ "files": "src/auth.py src/middleware.py tests/test_auth.py",
93
+ "next_step": "написать тест для token expiry edge case",
94
+ "blocker": null,
95
+ "auth_lib": "python-jose (выбрали вместо PyJWT — нужна поддержка JWE)"
96
+ }
97
+ }
98
+ }
99
+ ```
100
+
101
+ ---
102
+
103
+ ## Полный сценарий автономной сессии
104
+
105
+ **Задача:** Реализовать кэширование результатов SQL запросов через Redis
106
+
107
+ ---
108
+
109
+ **Сессия 1 — начало работы**
110
+
111
+ ```bash
112
+ # 1. Прочитать задачу, зафиксировать
113
+ fchek state set task "кэширование SQL запросов через Redis"
114
+ fchek state set status "in_progress"
115
+
116
+ # 2. Войти в проект
117
+ fchek audit .
118
+ # → verdict: "healthy"
119
+
120
+ fchek convention .
121
+ # → framework: FastAPI, naming_style: snake_case, error_handling: raise HTTPException
122
+
123
+ fchek context src/ --names-only
124
+ # → name_index: {UserService, get_user, list_users}
125
+ # → нет CacheService и нет cache_key — можно создавать
126
+
127
+ # 3. Проверить зависимость
128
+ fchek deps-check redis --lang=python
129
+ # → installed_version: "5.0.1", latest_version: "5.0.1", deprecation_notices: []
130
+
131
+ # 4. Зафиксировать архитектурное решение
132
+ fchek state set cache_backend "redis 5.0.1 — актуальная версия"
133
+ fchek state set files "src/cache.py src/services/user.py tests/test_cache.py"
134
+ fchek state set next_step "создать CacheService в src/cache.py"
135
+
136
+ # 5. Написать src/cache.py
137
+ # [создаёт файл с CacheService]
138
+
139
+ # 6. Проверить
140
+ fchek run src/cache.py
141
+ # → exit_code: 1, stderr: "redis.exceptions.ConnectionError: Error 111 connecting..."
142
+ # → Redis не запущен локально
143
+
144
+ # 7. Зафиксировать блокер
145
+ fchek state set blocker "redis-server не запущен: ConnectionError 111"
146
+ fchek state set next_step "запустить redis-server или использовать docker"
147
+ fchek state set status "blocked"
148
+ ```
149
+
150
+ Агент докладывает пользователю:
151
+ ```
152
+ Реализовал CacheService (src/cache.py). Код написан и синтаксически корректен.
153
+
154
+ Блокер: redis-server не запущен на хосте.
155
+ fchek run → ConnectionError: Error 111 connecting to localhost:6379
156
+
157
+ Запусти Redis:
158
+ redis-server # если установлен
159
+ docker run -p 6379:6379 redis # через Docker
160
+
161
+ Затем продолжу: fchek run src/cache.py → интеграция с UserService.
162
+ ```
163
+
164
+ ---
165
+
166
+ **Сессия 2 — пользователь запустил Redis, продолжаем**
167
+
168
+ ```bash
169
+ # 1. Восстановить контекст
170
+ fchek state list
171
+ # → task: "кэширование SQL запросов через Redis"
172
+ # → status: "blocked"
173
+ # → blocker: "redis-server не запущен: ConnectionError 111"
174
+ # → next_step: "запустить redis-server или использовать docker"
175
+ # → files: "src/cache.py src/services/user.py tests/test_cache.py"
176
+
177
+ # 2. Продолжить с next_step
178
+ fchek run src/cache.py
179
+ # → exit_code: 0, stdout: "CacheService initialized, connected to Redis"
180
+
181
+ # 3. Снять блокер
182
+ fchek state set blocker ""
183
+ fchek state set status "in_progress"
184
+ fchek state set next_step "интегрировать CacheService в UserService"
185
+
186
+ # 4. Интегрировать в UserService
187
+ # [изменяет src/services/user.py]
188
+
189
+ # 5. Написать тесты
190
+ # [создаёт tests/test_cache.py]
191
+
192
+ # 6. Полный цикл проверок
193
+ fchek run src/main.py
194
+ # → exit_code: 0
195
+
196
+ fchek test .
197
+ # → verdict: all_passed, passed: 18, failed: 0
198
+
199
+ fchek secrets .
200
+ # → verdict: clean
201
+
202
+ fchek lint .
203
+ # → issues_count: 0
204
+
205
+ # 7. Зафиксировать
206
+ fchek git stage src/cache.py src/services/user.py tests/test_cache.py
207
+ fchek git commit "feat: add Redis cache for SQL query results"
208
+
209
+ fchek state set status "done"
210
+ ```
211
+
212
+ Агент докладывает пользователю:
213
+ ```
214
+ Реализовал кэширование SQL запросов через Redis.
215
+
216
+ Изменённые файлы:
217
+ src/cache.py — CacheService (TTL, invalidation)
218
+ src/services/user.py — интеграция с кэшем в get_user(), list_users()
219
+ tests/test_cache.py — 6 тестов (mock Redis)
220
+
221
+ Проверки:
222
+ fchek run src/main.py → exit_code: 0
223
+ fchek test . → verdict: all_passed (18 passed, 0 failed)
224
+ fchek secrets . → verdict: clean
225
+ fchek lint . → issues_count: 0
226
+
227
+ Коммит: feat: add Redis cache for SQL query results (c7a4b2e)
228
+ ```
229
+
230
+ ---
231
+
232
+ ## Снапшот — сохранение состояния файлов
233
+
234
+ ```bash
235
+ fchek state snapshot
236
+ ```
237
+ ```json
238
+ {
239
+ "status": "ok",
240
+ "data": {
241
+ "file_count": 12,
242
+ "snapshot_time": "2026-07-08T11:06:51Z",
243
+ "__snapshot": {
244
+ "files": {
245
+ "src/cache.py": {"hash": "a3f9c2d", "lines": 87},
246
+ "src/services/user.py": {"hash": "b2e8a1f", "lines": 124}
247
+ }
248
+ }
249
+ }
250
+ }
251
+ ```
252
+
253
+ Используй перед большим рефакторингом — чтобы знать что именно изменилось.
254
+
255
+ ---
256
+
257
+ ## Безопасность
258
+
259
+ - `.fcheck_state.json` автоматически добавляется в `.gitignore`
260
+ - Файл не коммитится в git
261
+ - Никогда не сохраняй в state: пароли, API ключи, токены, connection strings
package/skills/vuln.md ADDED
@@ -0,0 +1,57 @@
1
+ # skill: fchek vuln — Безопасность и зависимости (Тайпосквоттинг)
2
+
3
+ ## Что делает
4
+
5
+ Сканирует файлы зависимостей (`package.json`, `requirements.txt`, `Cargo.toml`) на:
6
+ - **Уязвимости**: запускает `npm audit`, `pip-audit` или `cargo audit`.
7
+ - **Тайпосквоттинг**: сравнивает установленные пакеты с базой популярных библиотек с помощью расстояния Левенштейна. Обнаруживает опечатки, подменяющие легитимные пакеты вредоносными (например, `react-doom` вместо `react-dom`).
8
+
9
+ ## Синтаксис
10
+
11
+ ```bash
12
+ # Проверить текущую директорию
13
+ fchek vuln
14
+
15
+ # Проверить конкретную папку проекта
16
+ fchek vuln /path/to/project
17
+ ```
18
+
19
+ ## Вывод JSON
20
+
21
+ ```json
22
+ {
23
+ "status": "ok",
24
+ "command": "vuln",
25
+ "data": {
26
+ "packages_checked": 12,
27
+ "vulnerabilities": [
28
+ {
29
+ "package": "lodash",
30
+ "severity": "high",
31
+ "via": "CVE-2021-23337",
32
+ "effects": []
33
+ }
34
+ ],
35
+ "typosquatting_warnings": [
36
+ {
37
+ "package": "react-doom",
38
+ "type": "npm",
39
+ "suspectedTyposquatOf": "react-dom",
40
+ "distance": 1
41
+ }
42
+ ],
43
+ "audit_ran": ["npm"]
44
+ }
45
+ }
46
+ ```
47
+
48
+ ## КАК AI ДОЛЖЕН ИСПОЛЬЗОВАТЬ ЭТО
49
+
50
+ ### Сценарии
51
+
52
+ 1. **Добавление новой библиотеки**: всегда проверяй зависимости после их установки или перед фиксацией изменений:
53
+ ```bash
54
+ fchek vuln .
55
+ ```
56
+ 2. **Проверка уязвимостей**: используй результаты `vulnerabilities` для обновления пакетов на исправленные версии.
57
+ 3. **Обнаружение вредоносных опечаток**: при наличии предупреждений в `typosquatting_warnings` немедленно удали подозрительный пакет и установи правильный.
@@ -0,0 +1,320 @@
1
+ # skill: fchek — Windows & WPF автономная работа
2
+
3
+ ## Что доступно на Windows
4
+
5
+ | Команда | Что делает | Когда использовать |
6
+ |---|---|---|
7
+ | `fchek screenshot` | Скриншот окна или экрана → PNG | Проверить что UI открылся и выглядит правильно |
8
+ | `fchek launch` | Запустить .exe и ждать окна | Запустить WPF/WinForms и убедиться что открылось |
9
+ | `fchek winlog` | Читать Event Viewer | Найти crash/error после запуска |
10
+ | `fchek registry` | Читать/писать реестр | Проверить что установщик/скрипт записал ключи |
11
+ | `fchek process` | Список/kill/info процессов | Убить старый экземпляр, проверить память |
12
+ | `fchek watch` | Авто-rebuild при изменении файлов | WPF: изменил XAML → автоматически пересобирается |
13
+
14
+ ---
15
+
16
+ ## WORKFLOW: WPF / Windows приложение
17
+
18
+ ### Полный цикл от кода до проверки UI
19
+
20
+ ```bash
21
+ # 1. Понять проект
22
+ fchek convention .
23
+ fchek context src/ --names-only
24
+
25
+ # 2. Проверить что нет старых экземпляров
26
+ fchek process exists Vertex
27
+ # → если exists: true → убить
28
+ fchek process kill Vertex
29
+
30
+ # 3. Написать код, затем собрать
31
+ fchek run src/MainWindow.cs # dotnet build через fchek run
32
+ # или
33
+ fchek watch . --cmd="dotnet build" --launch=bin/Debug/net8.0-windows/Vertex.exe
34
+
35
+ # 4. Запустить и дождаться окна
36
+ fchek launch bin/Debug/net8.0-windows/Vertex.exe --title=Vertex --wait=8000
37
+ # → window_appeared: true? Да → дальше
38
+ # → window_appeared: false? → смотри winlog
39
+
40
+ # 5. Сделать скриншот и проверить UI
41
+ fchek screenshot --window=Vertex
42
+ # → { "file": "C:/tmp/fchek_screenshot_123.png", "width": 1200, "height": 800 }
43
+ # Прочитай изображение — правильно ли выглядит UI?
44
+
45
+ # 6. Если что-то не так — смотри логи
46
+ fchek winlog --source=Application --filter=Vertex --level=Error --since=5
47
+ # → события за последние 5 минут
48
+
49
+ # 7. Проверить реестр если нужно
50
+ fchek registry get HKCU\Software\Vertex
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Команды подробно
56
+
57
+ ### fchek screenshot
58
+
59
+ ```bash
60
+ fchek screenshot --screen # весь экран
61
+ fchek screenshot --window=Vertex # конкретное окно по заголовку
62
+ fchek screenshot --window=SpotlightWindow # partial match
63
+ fchek screenshot --region=0,0,800,600 # координаты x,y,ширина,высота
64
+ fchek screenshot --out=C:\tmp\ui_check.png # сохранить в конкретный файл
65
+ ```
66
+
67
+ Вывод:
68
+ ```json
69
+ {
70
+ "file": "C:\\Users\\...\\fchek_screenshot_1234.png",
71
+ "width": 1200,
72
+ "height": 800,
73
+ "window": "Vertex — Settings",
74
+ "pid": 12345,
75
+ "type": "window"
76
+ }
77
+ ```
78
+
79
+ **Как AI использует скриншот:**
80
+ 1. `fchek screenshot --window=Vertex` → получаю путь к PNG
81
+ 2. Читаю изображение — вижу реальный UI
82
+ 3. Проверяю: правильно ли расположены элементы, закруглены ли углы, появился ли popup
83
+
84
+ ---
85
+
86
+ ### fchek launch
87
+
88
+ ```bash
89
+ fchek launch bin/Vertex.exe
90
+ fchek launch bin/Vertex.exe --title=SpotlightWindow --wait=8000
91
+ fchek launch "C:\App\App.exe" --kill-existing --args="--debug"
92
+ ```
93
+
94
+ Вывод:
95
+ ```json
96
+ {
97
+ "launched": true,
98
+ "pid": 12345,
99
+ "window_appeared": true,
100
+ "window_title": "Vertex — Main",
101
+ "position": { "x": 100, "y": 100, "width": 1200, "height": 800 },
102
+ "elapsed_ms": 1240,
103
+ "next_step": "Window is visible. Run: fchek screenshot --window=\"Vertex — Main\""
104
+ }
105
+ ```
106
+
107
+ **Алгоритм:**
108
+ ```
109
+ window_appeared: true → делай screenshot → проверяй UI
110
+ window_appeared: false → смотри winlog --since=1 → ищи ошибку запуска
111
+ error: "Process exited with code 1" → fchek winlog → читай stderr
112
+ ```
113
+
114
+ ---
115
+
116
+ ### fchek winlog
117
+
118
+ ```bash
119
+ fchek winlog # последние 50 из Application
120
+ fchek winlog --source=Application --filter=Vertex # только твоё приложение
121
+ fchek winlog --level=Error --since=10 # ошибки за последние 10 минут
122
+ fchek winlog --source=System --level=Critical # системные критические
123
+ ```
124
+
125
+ Вывод:
126
+ ```json
127
+ {
128
+ "verdict": "errors_found",
129
+ "errors": 2,
130
+ "events": [
131
+ {
132
+ "time": "2026-07-09 19:00:00",
133
+ "level": "Error",
134
+ "provider": "Vertex",
135
+ "id": 1000,
136
+ "message": "NullReferenceException in MainWindow.cs:42"
137
+ }
138
+ ]
139
+ }
140
+ ```
141
+
142
+ **Алгоритм:**
143
+ ```
144
+ verdict: "clean" → нет ошибок в логах
145
+ verdict: "errors_found" → читай events[].message → найди строку с ошибкой
146
+ verdict: "warnings_found" → предупреждения, не критично
147
+
148
+ Типичные провайдеры:
149
+ ".NET Runtime" → NullReferenceException, StackOverflow
150
+ "Application Error" → необработанное исключение
151
+ "Windows Error Reporting" → crash dump
152
+ ```
153
+
154
+ ---
155
+
156
+ ### fchek registry
157
+
158
+ ```bash
159
+ fchek registry get HKCU\Software\Vertex
160
+ fchek registry get HKCU\Software\Vertex\Theme
161
+ fchek registry set HKCU\Software\Vertex Theme dark
162
+ fchek registry set HKCU\Software\Vertex AutoStart 1 --type=REG_DWORD
163
+ fchek registry exists HKCU\Software\Vertex
164
+ fchek registry delete HKCU\Software\Vertex\OldKey
165
+ ```
166
+
167
+ Проверяй что bat/инсталлятор реально записал нужные ключи:
168
+ ```bash
169
+ # После запуска bat-скрипта:
170
+ fchek registry exists HKCU\Software\MyApp
171
+ # → exists: true → скрипт отработал
172
+ # → exists: false → скрипт не выполнил запись
173
+ ```
174
+
175
+ ---
176
+
177
+ ### fchek process
178
+
179
+ ```bash
180
+ fchek process list # все процессы
181
+ fchek process list --filter=Vertex # фильтр по имени
182
+ fchek process info Vertex # детальная инфо: память, CPU, потоки
183
+ fchek process info 12345 # по PID
184
+ fchek process kill Vertex # убить процесс
185
+ fchek process exists Vertex # проверить запущен ли
186
+ fchek process wait-exit Vertex --timeout=10000 # ждать пока закроется
187
+ ```
188
+
189
+ Вывод info:
190
+ ```json
191
+ {
192
+ "found": true,
193
+ "pid": 12345,
194
+ "name": "Vertex",
195
+ "mem_mb": 145.3,
196
+ "peak_mem_mb": 198.7,
197
+ "cpu_s": 2.34,
198
+ "threads": 24,
199
+ "handles": 456,
200
+ "started": "2026-07-09 18:55:00"
201
+ }
202
+ ```
203
+
204
+ ---
205
+
206
+ ### fchek watch
207
+
208
+ ```bash
209
+ # WPF проект — авто-rebuild при изменении .cs или .xaml
210
+ fchek watch . --ext=cs,xaml --cmd="dotnet build" --launch=bin/Debug/net8.0-windows/Vertex.exe
211
+
212
+ # Python — авто-запуск тестов при изменении .py
213
+ fchek watch src/ --ext=py --cmd="python -m pytest" --debounce=500
214
+
215
+ # Только один раз (CI-режим)
216
+ fchek watch . --once
217
+ ```
218
+
219
+ При каждом успешном rebuild:
220
+ ```json
221
+ {
222
+ "build": 3,
223
+ "success": true,
224
+ "cmd": "dotnet build",
225
+ "built_at": "2026-07-09T19:00:00.000Z",
226
+ "launched": true
227
+ }
228
+ ```
229
+
230
+ ---
231
+
232
+ ## Типичные проблемы и решения
233
+
234
+ ### Приложение не запускается
235
+
236
+ ```bash
237
+ fchek launch bin/Vertex.exe --wait=10000
238
+ # → window_appeared: false
239
+
240
+ # Смотри логи
241
+ fchek winlog --source=Application --level=Error --since=2
242
+ # → читай message → находи строку с ошибкой
243
+
244
+ # Проверь что .NET установлен
245
+ fchek doctor
246
+ # → dotnet: ok / missing
247
+ ```
248
+
249
+ ### Окно открылось но UI неправильный
250
+
251
+ ```bash
252
+ fchek screenshot --window=Vertex
253
+ # → читаю PNG → вижу что popup открылся не там
254
+
255
+ # Смотрю позицию окна
256
+ fchek process info Vertex
257
+ # → координаты через fchek launch тоже возвращают x,y,width,height
258
+ ```
259
+
260
+ ### Реестр не записался
261
+
262
+ ```bash
263
+ fchek registry exists HKCU\Software\MyApp
264
+ # → exists: false → bat не отработал
265
+
266
+ # Проверяем права
267
+ fchek winlog --source=System --level=Error --since=5
268
+ # → ищем "Access Denied" или "Insufficient privileges"
269
+ ```
270
+
271
+ ### Завис старый экземпляр
272
+
273
+ ```bash
274
+ fchek process exists Vertex
275
+ # → exists: true, pid: 12345
276
+
277
+ fchek process kill Vertex
278
+ # → killed: true
279
+
280
+ # Ждём пока точно закроется
281
+ fchek process wait-exit Vertex --timeout=5000
282
+
283
+ # Теперь запускаем новый
284
+ fchek launch bin/Vertex.exe
285
+ ```
286
+
287
+ ---
288
+
289
+ ## Полный WPF цикл для AI-агента
290
+
291
+ ```bash
292
+ # Вход в проект
293
+ fchek audit .
294
+ fchek config show
295
+
296
+ # Понять структуру
297
+ fchek context src/ --names-only
298
+ fchek convention .
299
+
300
+ # Убить старый экземпляр
301
+ fchek process kill Vertex 2>/dev/null || true
302
+
303
+ # Написать код...
304
+
305
+ # Собрать
306
+ fchek run src/App.cs # dotnet build
307
+
308
+ # Запустить
309
+ fchek launch bin/Debug/net8.0-windows/Vertex.exe --title=Vertex --wait=8000
310
+
311
+ # Проверить UI визуально
312
+ fchek screenshot --window=Vertex
313
+
314
+ # Проверить логи на ошибки
315
+ fchek winlog --filter=Vertex --level=Error --since=2
316
+
317
+ # Зафиксировать
318
+ fchek git stage src/MainWindow.cs src/MainWindow.xaml
319
+ fchek git commit "fix: correct popup positioning in SpotlightWindow"
320
+ ```