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.
- package/README.md +64 -0
- package/bin/fchek.js +107 -0
- package/lib/api.js +110 -0
- package/lib/audit.js +211 -0
- package/lib/bench.js +248 -0
- package/lib/config.js +191 -0
- package/lib/context.js +356 -0
- package/lib/convention.js +526 -0
- package/lib/coverage.js +604 -0
- package/lib/db.js +135 -0
- package/lib/deps-check.js +264 -0
- package/lib/deps.js +374 -0
- package/lib/docker.js +84 -0
- package/lib/doctor.js +149 -0
- package/lib/dom.js +226 -0
- package/lib/fuzz.js +470 -0
- package/lib/git.js +290 -0
- package/lib/goto.js +544 -0
- package/lib/launch.js +182 -0
- package/lib/lint.js +624 -0
- package/lib/new_features.test.js +181 -0
- package/lib/output.js +46 -0
- package/lib/port.js +173 -0
- package/lib/process.js +228 -0
- package/lib/profile.js +453 -0
- package/lib/python.js +41 -0
- package/lib/race.js +186 -0
- package/lib/registry.js +179 -0
- package/lib/repl.js +135 -0
- package/lib/run.js +403 -0
- package/lib/screenshot.js +152 -0
- package/lib/secrets.js +257 -0
- package/lib/state.js +219 -0
- package/lib/test.js +471 -0
- package/lib/vuln.js +253 -0
- package/lib/watch.js +240 -0
- package/lib/winlog.js +123 -0
- package/package.json +27 -0
- package/skills/ACTIVATE.md +274 -0
- package/skills/README.md +163 -0
- package/skills/agent.md +444 -0
- package/skills/api.md +47 -0
- package/skills/bench.md +117 -0
- package/skills/context.md +116 -0
- package/skills/convention.md +143 -0
- package/skills/coverage.md +99 -0
- package/skills/csharp.md +97 -0
- package/skills/db.md +66 -0
- package/skills/deps-check.md +135 -0
- package/skills/deps.md +143 -0
- package/skills/docker.md +61 -0
- package/skills/dom.md +56 -0
- package/skills/fuzz.md +167 -0
- package/skills/goto.md +111 -0
- package/skills/lint.md +123 -0
- package/skills/port.md +57 -0
- package/skills/profile.md +91 -0
- package/skills/race.md +117 -0
- package/skills/repl.md +81 -0
- package/skills/rules.md +318 -0
- package/skills/run.md +135 -0
- package/skills/secrets.md +170 -0
- package/skills/security.md +360 -0
- package/skills/state.md +261 -0
- package/skills/vuln.md +57 -0
- package/skills/windows.md +320 -0
package/skills/state.md
ADDED
|
@@ -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
|
+
```
|