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,116 @@
1
+ # skill: fchek context — дамп символов проекта
2
+
3
+ ## Что делает
4
+
5
+ Извлекает все функции, классы, методы и типы из кодовой базы через AST (Python)
6
+ или regex (JS/TS/Rust/C/Go). Строит `name_index` для быстрого поиска дублей.
7
+
8
+ **Вызывай ДО написания нового кода** — чтобы не создавать функцию которая уже существует.
9
+
10
+ ## Поддерживаемые языки
11
+
12
+ | Язык | Метод | Что извлекает |
13
+ |---|---|---|
14
+ | Python | AST (точный) | functions, async_functions, classes + methods |
15
+ | JS/TS | regex | functions, arrow_functions, classes, methods, exports |
16
+ | Rust | regex | fn, struct, enum, trait, impl, type, const |
17
+ | C/C++ | regex | functions, classes, structs, macros |
18
+ | Go | regex | functions, structs, interfaces |
19
+ | **C#** | **regex** | **classes, methods, properties, interfaces, enum, record** |
20
+
21
+ ## Синтаксис
22
+
23
+ ```bash
24
+ fchek context <file_or_dir> [--names-only] [--depth=N]
25
+ ```
26
+
27
+ - `--names-only` — только список имён (компактно, без деталей)
28
+ - `--depth=N` — глубина обхода папок (default: 5)
29
+
30
+ ## Вывод JSON
31
+
32
+ ### Полный
33
+ ```json
34
+ {
35
+ "status": "ok",
36
+ "command": "context",
37
+ "data": {
38
+ "target": "/project/src",
39
+ "total_files": 12,
40
+ "total_symbols": 87,
41
+ "files": [
42
+ {
43
+ "file": "/project/src/auth.py",
44
+ "lang": "python",
45
+ "symbols": [
46
+ { "kind": "function", "name": "validate_token", "line": 15, "args": ["token", "secret"] },
47
+ { "kind": "class", "name": "AuthManager", "line": 42, "methods": ["login", "logout"] }
48
+ ]
49
+ }
50
+ ],
51
+ "name_index": {
52
+ "validate_token": [{ "file": "src/auth.py", "kind": "function", "line": 15 }]
53
+ },
54
+ "duplicates": []
55
+ }
56
+ }
57
+ ```
58
+
59
+ ### С --names-only
60
+ ```json
61
+ {
62
+ "data": {
63
+ "total_symbols": 87,
64
+ "names": ["AuthManager", "login", "logout", "validate_token", ...],
65
+ "duplicates": []
66
+ }
67
+ }
68
+ ```
69
+
70
+ ## Как AI должен использовать это
71
+
72
+ ### Сценарий: "Хочу добавить функцию parse_config()"
73
+
74
+ ```bash
75
+ # 1. Проверить — уже есть такая функция?
76
+ fchek context src/ --names-only
77
+
78
+ # 2. Смотрю data.names — есть ли "parse_config"?
79
+ # Нашёл → НЕ создаю дубль → использую существующую или выбираю другое имя
80
+
81
+ # 3. Если нет — смотрю data.name_index на похожие имена
82
+ # ("parse_cfg", "loadConfig", "read_config" — может быть уже есть аналог)
83
+ ```
84
+
85
+ ### Сценарий: "Рефакторинг — найти всё что использует старое имя"
86
+
87
+ ```bash
88
+ fchek context src/
89
+ # data.name_index["old_function_name"] → все файлы где оно есть
90
+ # Потом: fchek goto src/auth.py:42 → все ссылки
91
+ ```
92
+
93
+ ### Алгоритм принятия решений
94
+
95
+ ```
96
+ ЕСЛИ name_index содержит имя которое собираюсь создать:
97
+ → НЕ создаю дубль
98
+ → Читаю существующую реализацию: fchek goto <file:line>
99
+ → Решаю: использовать существующую ИЛИ выбрать другое имя
100
+
101
+ ЕСЛИ duplicates не пустой:
102
+ → В проекте уже есть конфликты имён
103
+ → Сообщаю об этом перед добавлением нового кода
104
+
105
+ ЕСЛИ total_symbols = 0:
106
+ → Папка пустая или нет поддерживаемых файлов
107
+ ```
108
+
109
+ ### Ключевые поля
110
+
111
+ | Поле | Что означает |
112
+ |---|---|
113
+ | `name_index` | Словарь имя → [{file, kind, line}] |
114
+ | `duplicates` | Имена встречающиеся в нескольких файлах |
115
+ | `total_symbols` | Общее число найденных символов |
116
+ | `files[].symbols` | Полный список символов в каждом файле |
@@ -0,0 +1,143 @@
1
+ # skill: fchek convention — паттерны проекта
2
+
3
+ ## Что делает
4
+
5
+ Сканирует проект и извлекает его неписаные правила:
6
+ как обрабатываются ошибки, какой стиль именования, где лежат тесты, что используется для логирования.
7
+
8
+ **Вызывай при первом входе в незнакомый проект** — чтобы новый код не выбивался из общего стиля.
9
+
10
+ ## Поддерживаемые языки
11
+
12
+ | Язык | Инструменты | Что анализирует |
13
+ |---|---|---|
14
+ | Python | ruff check | error_handling, naming, async, imports, logging, test_locations |
15
+ | JS/TS | regex | error_handling, naming, async, imports, logging, test_locations |
16
+ | Rust | regex | error_handling, error_style_summary, async (tokio/async-std), logging |
17
+ | C/C++ | regex | error_handling (errno/throw/assert), naming, logging |
18
+ | Go | regex | error_handling (if err!=nil / panic), async (goroutines), logging |
19
+ | **C#** | **regex** | **framework detection, error_handling, async (Task/CancellationToken), logging (ILogger/Serilog/NLog)** |
20
+
21
+ ## Синтаксис
22
+
23
+ ```bash
24
+ fchek convention <project_dir>
25
+ ```
26
+
27
+ ## Вывод JSON
28
+
29
+ ```json
30
+ {
31
+ "status": "ok",
32
+ "command": "convention",
33
+ "data": {
34
+ "project": "/project",
35
+ "languages": ["python", "javascript"],
36
+ "structure": {
37
+ "has_tests_dir": true,
38
+ "has_src_dir": true,
39
+ "has_ci": true,
40
+ "has_linter_config": true,
41
+ "config_files": ["package.json", "pyproject.toml"]
42
+ },
43
+ "conventions": [
44
+ {
45
+ "lang": "python",
46
+ "naming_style": "snake",
47
+ "test_files": 8,
48
+ "test_locations": ["tests/test_auth.py", "tests/test_utils.py"],
49
+ "error_handling": [
50
+ { "pattern": "try/except", "occurrences": 24 },
51
+ { "pattern": "raise custom", "occurrences": 11 }
52
+ ],
53
+ "async_patterns": [
54
+ { "pattern": "async def", "occurrences": 15 },
55
+ { "pattern": "await", "occurrences": 31 }
56
+ ],
57
+ "logging_style": [
58
+ { "pattern": "logging module", "occurrences": 42 }
59
+ ]
60
+ }
61
+ ],
62
+ "summary": "Project uses: python. python: naming=snake"
63
+ }
64
+ }
65
+ ```
66
+
67
+ ## Как AI должен использовать это
68
+
69
+ ### При первом входе в проект — обязательно
70
+
71
+ ```bash
72
+ fchek convention .
73
+ ```
74
+
75
+ Затем применяй правила при написании кода:
76
+
77
+ ```
78
+ naming_style = "snake" → пиши get_user_data(), не getUserData()
79
+ naming_style = "camel" → пиши getUserData(), не get_user_data()
80
+
81
+ error_handling[0] = "try/except" → используй try/except, не коды возврата
82
+ error_handling[0] = "Result<T,E>" → возвращай Result, не паникуй
83
+
84
+ logging_style[0] = "logging module" → используй logging.info(), не print()
85
+ logging_style[0] = "console.log" → используй console.log()
86
+
87
+ async_patterns[0] = "async def" → проект асинхронный, используй async/await
88
+ ```
89
+
90
+ ### Тесты — где их создавать
91
+
92
+ ```
93
+ test_locations[0] = "tests/test_auth.py"
94
+ → новые тесты кладу в tests/
95
+ → файлы называю test_<module>.py
96
+
97
+ test_locations[0] = "src/__tests__/auth.test.ts"
98
+ → тесты рядом с кодом в __tests__/
99
+ → файлы <module>.test.ts
100
+ ```
101
+
102
+ ### Rust — error_style_summary
103
+
104
+ ```
105
+ "unwrap-heavy (consider ? operator)"
106
+ → проект использует .unwrap() — спорный стиль
107
+ → для нового кода используй ? оператор и Result<T,E>
108
+
109
+ "Result<T,E> with ? operator"
110
+ → правильный стиль — продолжай в том же духе
111
+ ```
112
+
113
+ ### C# — уникальные поля
114
+
115
+ `framework` — автоопределение по импортам:
116
+ ```
117
+ "ASP.NET Core" → Microsoft.AspNetCore в using
118
+ "WPF" → System.Windows или .xaml файлы
119
+ "MAUI/Xamarin" → Xamarin или MAUI namespace
120
+ "Unity" → UnityEngine namespace
121
+ "Blazor" → Blazor namespace
122
+ ```
123
+
124
+ Используй `framework` чтобы понять контекст — в WPF не нужен HttpClient, в ASP.NET не нужен DispatcherTimer.
125
+
126
+ `logging_style` для C#:
127
+ ```
128
+ "ILogger" → Microsoft.Extensions.Logging (ASP.NET Core стандарт)
129
+ "Serilog" → структурированное логирование
130
+ "NLog" → классический логгер
131
+ ```
132
+ Никогда не вводи новую logging библиотеку если уже есть существующая.
133
+
134
+ ### Ключевые поля
135
+
136
+ | Поле | Что означает |
137
+ |---|---|
138
+ | `naming_style` | snake / camel / pascal |
139
+ | `error_handling[0]` | Самый частый паттерн обработки ошибок |
140
+ | `test_locations` | Куда класть новые тесты |
141
+ | `logging_style[0]` | Какую библиотеку логирования использует проект |
142
+ | `structure.has_linter_config` | Есть ли конфиг линтера — если да, линтер строже |
143
+ | `async_patterns` | Какой async-стиль использует проект |
@@ -0,0 +1,99 @@
1
+ # skill: fchek coverage — покрытие кода тестами
2
+
3
+ ## Что делает
4
+
5
+ Запускает тесты и показывает, какие строки кода **не покрыты** ни одним тестом.
6
+ Незаменимо перед рефакторингом — не трогай то, что не проверено.
7
+
8
+ ## Поддерживаемые языки
9
+
10
+ | Язык | Инструмент | Установка |
11
+ |---|---|---|
12
+ | Python (.py) | coverage.py | `pip install coverage` |
13
+ | C/C++ (.c .cpp) | gcov | `apt install gcc` |
14
+ | Rust (Cargo.toml) | cargo-tarpaulin (Linux) / cargo-llvm-cov | `cargo install cargo-tarpaulin` |
15
+ | JS/TS (package.json) | c8 | `npm install -g c8` |
16
+
17
+ ## Синтаксис
18
+
19
+ ```bash
20
+ fchek coverage <file_or_dir> [--html] [--threshold=<0-100>]
21
+ ```
22
+
23
+ - `--html` — сгенерировать HTML-отчёт в `./coverage_html/`
24
+ - `--threshold=80` — если покрытие ниже N% → `status: "error"`
25
+
26
+ ## Вывод JSON
27
+
28
+ ```json
29
+ {
30
+ "status": "ok",
31
+ "command": "coverage",
32
+ "data": {
33
+ "file": "/project/test_auth.py",
34
+ "lang": "python",
35
+ "tool": "coverage.py",
36
+ "total_pct": 74,
37
+ "threshold": 80,
38
+ "passed_threshold": false,
39
+ "files": [
40
+ { "file": "src/auth.py", "stmts": 120, "missed": 31, "coverage_pct": 74, "missing_lines": "45-52, 88-95" }
41
+ ],
42
+ "uncovered_files": [ ... ],
43
+ "html_report": "/project/coverage_html/index.html"
44
+ }
45
+ }
46
+ ```
47
+
48
+ ## Как AI должен использовать это
49
+
50
+ ### Сценарий: "Перед рефакторингом — найти непокрытый код"
51
+
52
+ ```bash
53
+ # 1. Запусти coverage
54
+ fchek coverage tests/
55
+
56
+ # 2. Смотри data.uncovered_files — это зоны без тестов
57
+ # 3. Для каждого файла смотри missing_lines
58
+ # 4. Перейди к непокрытой строке через goto
59
+ fchek goto src/auth.py:45
60
+ # 5. Оцени риск изменения непокрытого кода
61
+ ```
62
+
63
+ ### Сценарий: "Поставить gates для CI"
64
+
65
+ ```bash
66
+ fchek coverage . --threshold=80
67
+ # status: "error" если coverage < 80% → CI должен упасть
68
+ ```
69
+
70
+ ### Алгоритм принятия решений
71
+
72
+ ```
73
+ ЕСЛИ total_pct < threshold:
74
+ → status будет "error"
75
+ → смотри uncovered_files → предложи добавить тесты
76
+
77
+ ЕСЛИ total_pct = 100:
78
+ → полное покрытие, но не значит что тесты хорошие
79
+
80
+ ЕСЛИ coverage.py не нашёл файлы:
81
+ → убедись что передаёшь файл с тестами, а не с кодом
82
+ ```
83
+
84
+ ### Ключевые поля для AI
85
+
86
+ | Поле | Что означает |
87
+ |---|---|
88
+ | `total_pct` | Общее покрытие в процентах |
89
+ | `uncovered_files[]` | Файлы с покрытием < 100% |
90
+ | `missing_lines` | Строки которые не выполнялись ни разу |
91
+ | `passed_threshold` | true/false — прошёл ли threshold |
92
+ | `html_report` | Путь к HTML — можно открыть для визуализации |
93
+
94
+ ## Платформенные ограничения
95
+
96
+ - `gcov` — только Linux (нужен gcc с `-fprofile-arcs`)
97
+ - `cargo-tarpaulin` — только Linux; на macOS/Windows используй `cargo-llvm-cov`
98
+ - `c8` — работает везде где есть Node.js и npm test
99
+ - `coverage.py` — работает везде
@@ -0,0 +1,97 @@
1
+ # skill: fchek + C# — полная поддержка
2
+
3
+ ## Поддержка по командам
4
+
5
+ | Команда | Статус | Инструмент |
6
+ |---|---|---|
7
+ | `fchek context .` | ✓ | regex AST — классы, методы, properties, интерфейсы |
8
+ | `fchek convention .` | ✓ | Анализ паттернов — framework, errors, async, logging |
9
+ | `fchek run File.cs` | ✓ | `dotnet run` |
10
+ | `fchek secrets .` | ✓ | Regex, .dll/bin/obj игнорируются |
11
+ | `fchek lint .` | ✓ | `dotnet format` + `dotnet build` warnings |
12
+ | `fchek coverage .` | ✓ | `dotnet test` + coverlet (XPlat Code Coverage) |
13
+ | `fchek deps .` | ✓ | `dotnet list package` — outdated + vulnerable |
14
+ | `fchek goto File.cs:42` | ✓ | Grep-based symbol search по всему проекту |
15
+ | `fchek profile` | — | Нет (используй dotnet-trace / VS Profiler) |
16
+ | `fchek race` | — | Нет (используй VS Diagnostic Tools) |
17
+ | `fchek fuzz` | — | Нет (используй SharpFuzz вручную) |
18
+
19
+ **Требует:** .NET SDK установлен (`fchek doctor` покажет статус `dotnet`).
20
+
21
+ ## Workflow для C# проекта
22
+
23
+ ```bash
24
+ # 1. Узнать стиль проекта
25
+ fchek convention .
26
+ # → framework: ASP.NET Core / WPF / Unity / Blazor / MAUI
27
+ # → error_handling, async_patterns, logging_style
28
+
29
+ # 2. Проверить существующие символы (избежать дублей)
30
+ fchek context src/ --names-only
31
+
32
+ # 3. Написать код, затем:
33
+ fchek run Program.cs # dotnet run — exit_code = 0?
34
+
35
+ # 4. Линт и форматирование
36
+ fchek lint . # dotnet format + build warnings
37
+
38
+ # 5. Покрытие тестами
39
+ fchek coverage . # dotnet test + coverlet
40
+
41
+ # 6. NuGet зависимости
42
+ fchek deps . # outdated + vulnerable packages
43
+
44
+ # 7. Поиск символа
45
+ fchek goto Services/UserService.cs:42
46
+
47
+ # 8. Секреты перед коммитом
48
+ fchek secrets . # .dll/bin/obj игнорируются
49
+ ```
50
+
51
+ ## Как читать вывод fchek convention для C#
52
+
53
+ `framework` — автоопределение по using/namespace:
54
+ - `ASP.NET Core` → DI через constructor, `ILogger<T>`, `IConfiguration`
55
+ - `WPF` → MVVM, `INotifyPropertyChanged`, `DispatcherTimer`
56
+ - `Unity` → `MonoBehaviour`, lifecycle methods
57
+ - `Blazor` → компонентный подход
58
+
59
+ `logging_style[0]`:
60
+ - `ILogger` → продолжай использовать `_logger.LogInformation(...)`
61
+ - `Console.Write` → проект использует Console — вероятно legacy или CLI app
62
+
63
+ ## Правила для C# кода
64
+
65
+ ### Секреты
66
+ ```csharp
67
+ // ❌
68
+ var connStr = "Server=prod;Password=Secret123;";
69
+
70
+ // ✅
71
+ var connStr = _configuration.GetConnectionString("DefaultConnection");
72
+ // или
73
+ var connStr = Environment.GetEnvironmentVariable("DB_CONNECTION_STRING");
74
+ ```
75
+
76
+ ### Async
77
+ ```csharp
78
+ // ❌ Sync внутри async context
79
+ var result = GetDataAsync().Result;
80
+
81
+ // ✅
82
+ var result = await GetDataAsync(cancellationToken);
83
+ ```
84
+
85
+ ### Error handling
86
+ ```csharp
87
+ // ❌ Глотать исключения
88
+ try { DoSomething(); } catch { }
89
+
90
+ // ✅ Логировать + пробрасывать или custom exception
91
+ try { await DoSomethingAsync(ct); }
92
+ catch (Exception ex) when (ex is not OperationCanceledException)
93
+ {
94
+ _logger.LogError(ex, "Failed to do something");
95
+ throw new MyDomainException("...", ex);
96
+ }
97
+ ```
package/skills/db.md ADDED
@@ -0,0 +1,66 @@
1
+ # skill: fchek db — Инспекция и запросы к БД (SQLite)
2
+
3
+ ## Что делает
4
+
5
+ Позволяет просматривать схему таблиц SQLite баз данных и выполнять произвольные SQL-запросы прямо из командной строки.
6
+
7
+ ## Синтаксис
8
+
9
+ ```bash
10
+ # Получить схему базы данных (таблицы, колонки, индексы)
11
+ fchek db schema <db_path>
12
+
13
+ # Выполнить SQL запрос
14
+ fchek db query <db_path> "<sql_query>"
15
+ ```
16
+
17
+ ## Вывод JSON
18
+
19
+ ### db schema
20
+ ```json
21
+ {
22
+ "status": "ok",
23
+ "command": "db",
24
+ "data": {
25
+ "database": "data.db",
26
+ "tables": [
27
+ {
28
+ "name": "users",
29
+ "columns": [
30
+ { "name": "id", "type": "INTEGER", "notnull": false, "dflt_value": null, "pk": true },
31
+ { "name": "email", "type": "TEXT", "notnull": true, "dflt_value": null, "pk": false }
32
+ ],
33
+ "indexes": ["sqlite_autoindex_users_1"]
34
+ }
35
+ ]
36
+ }
37
+ }
38
+ ```
39
+
40
+ ### db query
41
+ ```json
42
+ {
43
+ "status": "ok",
44
+ "command": "db",
45
+ "data": {
46
+ "query": "SELECT * FROM users",
47
+ "count": 1,
48
+ "rows": [
49
+ { "id": 1, "email": "alice@example.com" }
50
+ ]
51
+ }
52
+ }
53
+ ```
54
+
55
+ ## КАК AI ДОЛЖЕН ИСПОЛЬЗОВАТЬ ЭТО
56
+
57
+ ### Сценарии
58
+
59
+ 1. **Проверка схемы**: если код падает с ошибкой базы данных (например, `no such column`), исследуй схему:
60
+ ```bash
61
+ fchek db schema app.db
62
+ ```
63
+ 2. **Проверка данных**: убедись, что транзакция или миграция сработала корректно:
64
+ ```bash
65
+ fchek db query app.db "SELECT * FROM migrations"
66
+ ```
@@ -0,0 +1,135 @@
1
+ # skill: fchek deps-check — актуальность API библиотеки
2
+
3
+ ## Что делает
4
+
5
+ Делает live-запрос к реестру пакетов (npm / PyPI / crates.io) и возвращает:
6
+ - установленную версию vs последнюю
7
+ - deprecated флаги на версиях
8
+ - yanked версии (Rust)
9
+ - предупреждения о deprecated методах из changelog
10
+
11
+ **Закрывает проблему галлюцинаций API** — данные из реального реестра, не из памяти модели.
12
+
13
+ ## Поддерживаемые реестры
14
+
15
+ | Язык | Реестр | Авто-определение |
16
+ |---|---|---|
17
+ | Node.js | registry.npmjs.org | `package.json` в папке |
18
+ | Python | pypi.org | `requirements.txt` / `pyproject.toml` |
19
+ | Rust | crates.io | `Cargo.toml` в папке |
20
+
21
+ ## Синтаксис
22
+
23
+ ```bash
24
+ fchek deps-check <lib> [--lang=node|python|rust] [--show-changelog]
25
+ ```
26
+
27
+ - `--lang` — принудительно указать язык (если авто-определение не сработало)
28
+ - `--show-changelog` — добавить ссылку на changelog
29
+
30
+ ## Вывод JSON
31
+
32
+ ### Online (есть сеть)
33
+ ```json
34
+ {
35
+ "status": "ok",
36
+ "command": "deps-check",
37
+ "data": {
38
+ "lib": "requests",
39
+ "registry": "pypi",
40
+ "installed_version": "2.28.0",
41
+ "latest_version": "2.34.2",
42
+ "up_to_date": false,
43
+ "is_deprecated": false,
44
+ "deprecation_notices": [],
45
+ "recent_versions": ["2.34.2", "2.34.1", "2.34.0"],
46
+ "requires_python": ">=3.8",
47
+ "description": "Python HTTP for Humans."
48
+ }
49
+ }
50
+ ```
51
+
52
+ ### Offline (нет сети)
53
+ ```json
54
+ {
55
+ "data": {
56
+ "offline": true,
57
+ "offline_note": "No internet connection. Showing installed version only.",
58
+ "installed_version": "2.28.0",
59
+ "latest_version": null,
60
+ "up_to_date": null
61
+ }
62
+ }
63
+ ```
64
+
65
+ ### npm — deprecated версия
66
+ ```json
67
+ {
68
+ "data": {
69
+ "lib": "request",
70
+ "installed_deprecated": "DEPRECATED! Use axios or node-fetch instead.",
71
+ "deprecated_versions": [
72
+ { "version": "2.88.2", "message": "request has been deprecated..." }
73
+ ]
74
+ }
75
+ }
76
+ ```
77
+
78
+ ## Как AI должен использовать это
79
+
80
+ ### ПРАВИЛО — перед использованием любой библиотеки
81
+
82
+ ```bash
83
+ fchek deps-check <lib>
84
+ ```
85
+
86
+ ### Алгоритм принятия решений
87
+
88
+ ```
89
+ ЕСЛИ installed_deprecated не null:
90
+ → СТОП — установленная версия помечена deprecated
91
+ → Сообщи пользователю: "Эта библиотека deprecated: <сообщение>"
92
+ → Предложи альтернативу из сообщения
93
+
94
+ ЕСЛИ up_to_date = false:
95
+ → Установлена старая версия
96
+ → Проверь breaking changes в последней версии
97
+ → Используй API из installed_version, не из latest
98
+
99
+ ЕСЛИ offline = true:
100
+ → Нет сети — проверка невозможна
101
+ → Используй только хорошо известные стабильные API
102
+ → Предупреди пользователя что не смог проверить актуальность
103
+
104
+ ЕСЛИ yanked_versions содержит installed_version (Rust):
105
+ → Версия была отозвана — возможно баг безопасности
106
+ → Рекомендуй обновить
107
+ ```
108
+
109
+ ### Примеры использования
110
+
111
+ ```bash
112
+ # Перед использованием requests
113
+ fchek deps-check requests --lang=python
114
+
115
+ # Проверить express перед написанием кода
116
+ fchek deps-check express
117
+
118
+ # Rust — проверить serde
119
+ fchek deps-check serde --lang=rust
120
+
121
+ # Посмотреть changelog
122
+ fchek deps-check react --show-changelog
123
+ ```
124
+
125
+ ### Ключевые поля
126
+
127
+ | Поле | Что означает |
128
+ |---|---|
129
+ | `installed_version` | Что реально установлено (null если не установлено) |
130
+ | `latest_version` | Последняя в реестре |
131
+ | `up_to_date` | true/false/null (null = офлайн) |
132
+ | `installed_deprecated` | Сообщение если установленная версия deprecated |
133
+ | `deprecation_notices` | Тексты из описания пакета о deprecated методах |
134
+ | `yanked_versions` | Версии отозванные из реестра (Rust) |
135
+ | `offline` | true = нет сети, данные из локальных файлов |