AI Developer Productivity Toolkit

KodikDevKit v1.0.0 Offline Mode No API Key 100% Private Local AI · Ollama Built for Developers

Инструменты повседневной разработки в одной утилите: генерация тестов и документации, анализ логов, аудит проекта, безопасный рефакторинг, AI-коммиты и генерация REST API по описанию. Всё работает детерминированно и без сети, а ИИ можно запустить локально через Ollama — секреты и PII не покидают вашу машину благодаря анонимайзеру KodikShield.

# Быстрый старт

Ноль зависимостей — нужен только Node.js ≥ 18. git clone → сразу работает. Один вход всегда даёт один и тот же выход.

bash — kodik
# Зависимостей нет — достаточно Node.js >= 18
node bin/kodik.js --help

# Интерактивное меню (стрелки ↑/↓, Enter) — запуск без аргументов
node bin/kodik.js

# Полный аудит проекта одной командой
node bin/kodik.js audit examples/demo-project

# Полная демонстрация всех команд
npm run demo

# Опционально — глобальная команда kodik
npm link && kodik --help
01

Analyze Project

kodik audit <путь> [--json] [--no-fix] [--dry-run]

Рекурсивно сканирует папку, определяет стек (React / Express / PostgreSQL / …), рисует карту проекта и выдаёт единую оценку 0–100 по шести измерениям: качество кода, безопасность, архитектура, документация, тесты, производительность — со списком рекомендаций. В интерактивном режиме открывается меню действий: Find Bugs (баги с % уверенности), Review Code, Explain Architecture, Generate Docs, Ask AI.

Скан дерева Детект стека Оценка 0–100 Find Bugs · % уверенности Рекомендации
$ kodik audit examples/demo-project --no-fix
Аудит проекта · /examples/demo-project

Карта проекта
  Frontend:     React
  Backend:      Express
  База данных:  PostgreSQL
  Язык:        JavaScript
  Файлы:       5 исходных, 1 тестов
  Покрытие:    ~20% (оценка)

  Общая оценка   62 / 100
  ────────────────────────────────────────
  Качество кода       ███████░░░ 68
  Безопасность        ████░░░░░░ 41
  Архитектура         ████████░░ 80
  Документация        ██████░░░░ 55
  Тесты               ███░░░░░░░ 30
  Производительность  ████████░░ 83

Находки: 4
   hardcoded-secret
   sql-injection
   empty-catch

Рекомендации:
  1. Вынесите захардкоженные секреты в переменные окружения (process.env).
  2. Используйте параметризованные запросы вместо конкатенации SQL.
  3. Добавьте тесты — покрытие ниже 30%.

Режим: офлайн (детерминированно) · KodikShield активен

Безопасные автоправки как в git: цветной diff → подтверждение [Y/n] → бэкап в .kodik-backups/ → запись. Откат — kodik undo <путь>. Флаг --dry-run только показывает диффы.

02

Generate Unit Tests

kodik gen-tests --file <путь> [--lang js|py] [--framework jest|pytest]

Разбирает функции файла и генерирует unit-тесты Jest или Pytest с тремя кейсами на функцию: happy path, граничный случай и негативный сценарий. Язык и фреймворк определяются автоматически (переопределяются через --lang / --framework). Результат — блок кода + предлагаемое имя файла (*.test.js / test_*.py).

$ kodik gen-tests --file examples/sample.js
Генерация тестов · jest · js
Распознано функций: 3 (calculateDiscount, formatUser, riskyParse)

// Тесты Jest (Kodik-Helper, офлайн)
describe('calculateDiscount', () => {
  test('happy path', () => {
    expect(calculateDiscount(1, 2)).toBeDefined();
  });
  test('граничный случай', () => {
    expect(() => calculateDiscount(0, 0)).not.toThrow();
  });
  test('некорректный ввод', () => {
    expect(() => calculateDiscount(undefined, undefined))
      .toBeDefined();
  });
});
$ kodik gen-tests --file sample.py --framework pytest
Генерация тестов · pytest · py

# Тесты Pytest (Kodik-Helper, офлайн)
import pytest

def test_calculate_discount_happy_path():
    assert calculate_discount(1, 2) is not None

def test_calculate_discount_edge_case():
    assert calculate_discount(0, 0) is not None

def test_calculate_discount_invalid_input():
    with pytest.raises(Exception):
        calculate_discount(None, None)
03

Generate Documentation

kodik gen-docs --file <путь> [--scope file|project]

Собирает README.md по одному файлу или по всему дереву проекта: обзор, таблицы публичного API (функции и их параметры), обнаруженные классы, блоки установки и тестирования. Перед разбором каждый файл проходит через KodikShield, поэтому секреты не попадают в документацию.

$ kodik gen-docs --file . --scope project
Документация · scope=project · файлов: 5
KodikShield: замаскировано чувствительных фрагментов — 2

```markdown
# demo-project

> Документация сгенерирована Kodik-Helper (офлайн-режим).

## Обзор
Проект содержит 5 модулей и 11 функций.

## Структура и API

### `backend/auth/login.js`

| Функция    | Параметры        |
|------------|------------------|
| `login`    | `req`, `res`     |
| `verify`   | `token`          |

### `backend/orders/orders.js`

| Функция      | Параметры   |
|--------------|-------------|
| `createOrder`| `items`     |
| `getPrice`   | `sku`       |
04

Analyze Logs

kodik analyze-log --file <путь> · cat error.log | kodik analyze-log

Парсит стектрейсы Java / Python / Node, находит верхний кадр и строит цепочку вызовов, сопоставляет ошибку с базой распространённых проблем (NullPointerException, KeyError, ECONNREFUSED, …) и выдаёт вероятную причину, рекомендацию, пример исправления и оценку уверенности. PII и секреты внутри лога маскируются до анализа.

$ kodik analyze-log --file examples/error.log
Анализ лога / стектрейса

Ошибка: KeyError: 'sku-404'
Место: get_price — app/utils.py:12
  Цепочка вызовов:
    ↳ handle_order (app/handlers.py:88)
    ↳ get_price (app/utils.py:12)

Вероятная причина: Обращение к несуществующему ключу словаря.
Рекомендация: Используйте dict.get(key, default) или проверяйте
наличие ключа через in.

Пример исправления:
```python
value = data.get(key)  # безопасный доступ
if value is None:
    return
```
[Уверенность: 90%]

KodikShield: в логе замаскировано чувствительных данных — 3

В примере лог содержал строку подключения к БД с паролем и email пользователя — KodikShield заменил их на плейсхолдеры <SECRET_1> / <PII_2> до того, как лог был обработан.

05

AI Refactor

kodik refactor --file <путь>

Применяет набор безопасных автозамен и показывает цветной diff: var → let, == → ===, != → !== для JS и == None → is None для Python. Если безопасных автоправок нет — выдаёт рекомендации к ручному рефакторингу (Extract Method, Rename, DRY). Правки попадают на диск только после подтверждения и создания бэкапа.

$ kodik refactor --file examples/sample.js
Рефакторинг · js · examples/sample.js
KodikShield: чувствительных фрагментов — 2 (не показаны)

Применённые улучшения:
  • var → let (block-scoping)
  • == → === (строгое сравнение)

Diff:
```diff
- var result = price - (price * percent) / 100;
+ let result = price - (price * percent) / 100;
-   if (result == 0) {
+   if (result === 0) {
```

Применить правки к файлу? [y/N]
06

AI Chat

Интерактивное меню → 6 · AI Chat (Ask AI по проекту)

Проектно-осведомлённый вопрос-ответ. Гибридный движок: в офлайне — детерминированные ответы по обнаруженному стеку, инвентарю файлов и сводке находок аудита; при подключённом KODIK_LLM санитизированный контекст уходит в LLM с откатом к офлайн-ответу при любой ошибке. Понимает вопросы про безопасность, тесты/покрытие, авторизацию и архитектуру.

AI Chat — Ask AI
Задавайте вопросы по проекту. Пустая строка — выход.

Ask AI › есть ли проблемы с безопасностью?

По безопасности:
• Найдены захардкоженные секреты — вынесите их в
  переменные окружения (process.env).
• Есть риск SQL-инъекции — используйте параметризованные
  запросы ($1, ?, %s).
[режим: offline]

Ask AI › какое покрытие тестами?

Покрытие тестами оценивается в ~20%. Сгенерируйте
недостающие тесты командой kodik gen-tests --file <путь>.
[режим: offline]

Движок ИИ переключается в Settings: облако (KODIK_LLM=openai|anthropic + ключ) или локальный Ollama. В офлайне отвечает детерминированный движок. Перед отправкой промпт всегда проходит через KodikShield.

07

Generate AI Commit

Интерактивное меню → 7 · 🐙 Generate AI Commit

Smart Git Companion. Анализирует незакоммиченные изменения и генерирует идеальное сообщение по спецификации Conventional Commits. Берёт git diff --cached, а если staged-изменений нет — git diff. Дифф уходит в AI-роутер (облако или локальный Ollama); при недоступности ИИ срабатывает детерминированная эвристика по именам и статусам файлов — фича работает всегда. Коммит выполняется безопасно, без shell-инъекций.

git diff → AI Conventional Commits y / n / e (edit) Offline-эвристика Без shell-инъекций
🐙 Generate AI Commit
Изменения: не проиндексировано (unstaged), файлов: 2
🐙 Analyzing Git changes and generating commit message...

┌──────────────────────────────────────────────┐
          ✨ Proposed Commit Message          
├──────────────────────────────────────────────┤
                                              
  feat(auth): add login with input validation 
                                              
└──────────────────────────────────────────────┘
[источник: local, ollama]

Do you want to commit with this message? (y - yes / n - cancel / e - edit) y

✓ Коммит создан.
  feat(auth): add login with input validation
  [master a1b2c3d] feat(auth): add login with input validation

y — закоммитить (git commit -m для staged, git commit -a -m для unstaged), e — отредактировать сообщение вручную, n — отмена. Если папка не git-репозиторий — понятная ошибка и возврат в меню.

08

Generate API Boilerplate

Интерактивное меню → 8 · 🏗️ Generate API Boilerplate

Instant Backend Scaffolder. Генерирует рабочую архитектуру REST API по простому текстовому описанию. Шаг 1 — описание бэкенда (напр. Voting system with users and projects); шаг 2 — выбор стека (FastAPI + SQLAlchemy + SQLite или Go + SQLite). ИИ возвращает JSON-массив файлов, который парсится устойчиво (снятие markdown-ограждений, ремонт «тройных кавычек», вырезание массива из текста), после чего файлы рекурсивно создаются в ./generated-api/. При невалидном JSON или недоступном ИИ — офлайн-шаблон рабочего каркаса.

Описание → REST API FastAPI / Go models · routes · db · main Защита от path-traversal Offline-шаблон
🏗️ Generate API Boilerplate
Опишите бэкенд: Voting system with users and projects
Tech Stack: 1. FastAPI (Python) + SQLAlchemy + SQLite

🏗️  Constructing backend architecture and database models via AI...

┌──────────────────────────────────────────────┐
       🏗️  Backend Scaffolder Success        
├──────────────────────────────────────────────┤
                                              
  Stack:     FastAPI + SQLAlchemy + SQLite    
  Location:  ./generated-api/                 
                                              
  Generated Files:                            
  ├── main.py                                 
  ├── database.py                             
  ├── models.py                               
  └── routes.py                               
                                              
  API is ready! Run it and start coding.      
└──────────────────────────────────────────────┘

Press ENTER to return to the main menu...

Папка не перезаписывается: если generated-api/ уже есть — создаётся generated-api-<timestamp>. Пути из ответа ИИ санируются — ../, абсолютные и диск-префиксы блокируются.

09

Local AI — Privacy-First Mode 🔒

Settings → Toggle AI Engine → Local (Ollama)

Флагманский режим для анализа корпоративного кода: все запросы к ИИ уходят только на localhost через Ollama — данные никогда не покидают машину. Единый AI-роутер обслуживает все ИИ-фичи (AI Commit, API Scaffolder, AI Chat, аудит) и переключается между облаком и локальным движком одним тумблером. Выбор хранится персистентно в ~/.kodikrc.json.

Cloud ↔ Local тумблер localhost:11434 llama3 · qwen2 · fallback ~/.kodikrc.json 0 данных наружу
bash — настройка Ollama
# 1) Запустить локальный сервер
ollama serve

# 2) Скачать модель (fallback → qwen2)
ollama pull llama3

# 3) В KodikDevKit:
#    Settings → Toggle AI Engine → Local
⚙️ Settings — движок ИИ
Настройки
  Движок ИИ:     Local - Ollama (Privacy-First)
  Эфф. режим:    local
  Конфиг:        ~/.kodikrc.json

 Toggle AI Engine (Current: Local - Ollama)
  Выбрать модель Ollama (llama3)
  Проверить связь с локальным ИИ

✓ Ollama на связи. Модели: llama3, qwen2

Если Ollama не запущен — понятное предупреждение: ⚠️ Connection to local AI failed. Ensure Ollama is running on port 11434 (run 'ollama serve'). — и мягкий откат в офлайн-режим, CLI не падает.

🛡️ KodikShield — локальная анонимизация

Ключевая особенность проекта. Перед тем как любой фрагмент кода или лога будет обработан (или отправлен в опциональный LLM), он проходит через детерминированный анонимайзер. Секреты и PII заменяются на стабильные плейсхолдеры с картой для обратной подстановки (rehydrate).

🔑 Секреты

API-ключи, AWS / Google / OpenAI-ключи, GitHub / Slack-токены, JWT, PEM-приватные ключи, пароли в строках подключения к БД.

👤 PII

Email, IPv4-адреса, телефоны, номера карт — заменяются на <PII_1>, <PII_2>, …

✅ Не трогает

Ссылки на process.env.* и ${ENV_VAR} не маскируются — это не секреты, а корректный способ хранения.

до → после анонимизации
# Вход
const API_KEY = "sk-abcdefghijklmnopqrstuvwxyz0123456789";
const dbUrl = "postgresql://admin:SuperSecret123@10.0.0.5:5432/prod";

# После KodikShield
const API_KEY = <SECRET_1>;
const dbUrl = <SECRET_2>;   # host/пароль замаскированы

# Все команды CLI

Команда Что делает
audit Полный аудит: скан, стек, оценка 0-100, рекомендации
gen-tests Unit-тесты Jest / Pytest (happy path, граничные, негативные)
gen-docs README.md по файлу или проекту
analyze-log Разбор стектрейса, причина ошибки и пример исправления
refactor Безопасные автоправки с diff (var→let, ==→===, ==None→is None)
static-check Эвристический линтер: ошибки, code smells, захардкоженные секреты
scaffold Каркас проекта (webapp/API, JS/Python, БД, Dockerfile, CI)
ci-config YAML для GitHub Actions / GitLab CI под стек
cicd-generator Готовый .github/workflows/kodik-ci.yml по автодетекту стека
undo Откат последней правки из бэкапа .kodik-backups/