Career Quest
AI-навигатор развития сотрудника Halyk: по профилю, истории и требованиям следующего грейда подбирает 1–3 шага развития с объяснением и what-if…
О проекте
Команда: AI-solutions
Кейс HackAlem.ai: Менеджмент — Halyk Bank · кейс 1
Стадия: Доведённый продукт
Задача кейса: «Career Quest»: AI-навигатор, связывающий навыки сотрудника с шагами развития
Суть
AI-навигатор развития сотрудника Halyk: по профилю, истории и требованиям следующего грейда подбирает 1–3 шага развития с объяснением и what-if прогнозом карьерной готовности; есть HR-аналитика, Trust Center, обмен навыками и внешние курсы.
Как устроено
Импорт данных через Zod → нормализованный датасет → replay истории → разрывы по целевому грейду → жёсткие фильтры eligibility → детерминированный многофакторный ранжир (критичность разрыва, история, выполнимость, цель, разнообразие) → Evidence Receipt. Digital Twin показывает what-if по readiness и план шагов; опциональный LLM работает как ограниченный критик и HR-агент с tool calling поверх вычисленных фактов, без ключа — детерминированные объяснения. Интерфейс на RU/KK/EN.
Ключевые решения
- multi-factor deterministic ranking
- history replay
- what-if simulation
- tool-calling HR agent
- bounded LLM critic
- Zod validation
- gamification
Особенности
Рекомендуется не самый слабый навык, а следующий лучший карьерный шаг; Trust Center проверяет сам AI (нарушения eligibility, подтверждённость чисел, latency, работа без LLM); внешние курсы изолированы от скоринга и не дают выдуманного прироста.
Стек
TypeScript · Next.js · React · Zod · Node 22 · pnpm · Docker · GitHub Actions
Модели
gpt-4.1-mini
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-7de27e4a-ai-solutions.
README
README.mdCareer Quest
Career Quest recommends not the weakest skill, but the next best career move.
AI-навигатор развития сотрудника: по профилю, истории участия и требованиям следующего грейда система подбирает 1–3 шага развития, объясняет каждый минимум по трём факторам и показывает, как сдвинется карьерная готовность — до того, как человек потратит на это время.
HackAlem AI · трек Halyk Bank · кейс Career Quest Команда: Алихан (Intelligence), Манахнбет (Experience), Даник (Trust)
Employee, HR, Trust и Skill Exchange используют общую демо-идентификацию.
Адреса / и /demo перенаправляют в кабинет сотрудника /employee.
Почему наше решение другое
| Decision Engine | Многофакторный детерминированный выбор: разрыв по навыкам с приоритетом критичных, история участия, выполнимость, цель, разнообразие. Не один prompt и не «самый низкий навык». |
| Digital Twin | Карьерный эффект виден до выполнения активности: what-if по уровням и readiness, план на несколько шагов, подтверждение с пересчётом. |
| Trust Center | У каждого решения есть Evidence Receipt. Баг-репорт на сам AI: нарушения eligibility, подтверждённость чисел, корректность пересчёта истории, latency, поведение без LLM. |
| Внешнее обучение | Отдельный offline-каталог для разрывов без доступной внутренней активности; без выдуманного прироста и без влияния на рекомендации или readiness. |
Быстрый старт
pnpm install --frozen-lockfile
pnpm dev
Открыть http://localhost:3000, нажать «Посмотреть демо» и выбрать синтетический профиль. Сервер устанавливает подписанную cookie: сотруднику отдаётся только его профиль и история, HR-профилю — организационный набор для аналитики. Выбор демо-персоны не является корпоративным входом или SSO.
В навигации доступны «Моя траектория», «HR-аналитика», «Проверка решений» и
«Обмен навыками» (/chat). Кнопки «Сотрудник» / «HR» открывают нужный кабинет;
для HR требуется выбор HR-профиля. Собственные файлы можно импортировать локально
через экран сотрудника — они остаются в браузере.
Общий переключатель «Язык» в верхней панели меняет интерфейс, форматы чисел и дат
и язык AI-объяснений: Қазақша (kk) / Русский (ru) / English (en).
Выбор сохраняется в браузере и восстанавливается после перезагрузки. Язык интерфейса
не зависит от preferred_language выбранного сотрудника: смена профиля его не меняет.
Docker:
docker compose up --build
Для production без Docker: pnpm build, затем pnpm start.
pnpm start и Docker при пустом SESSION_SECRET создают и сохраняют ключ
демо-сессий в data/runtime/session-secret; можно задать свой секрет от 32 байт.
В dev ключ живёт в процессе: после перезапуска нужно снова выбрать профиль.
Runtime-каталог исключён из Git и Docker build context; Compose сохраняет его в volume.
Если опциональные LLM-переменные заданы в .env.local, передать их Compose явно:
docker compose --env-file .env.local up --build
LLM-ключ не обязателен. Без него приложение работает полностью: тот же ranking и
детерминированные объяснения. Ключ включает bounded-критика и HR-агента поверх вычисленных фактов.
Переменные — в .env.example.
Требуется Node 22 и pnpm (corepack enable).
Настройка AI для демо
Скопировать .env.example в .env.local рядом с package.json, если файла ещё нет
(cp .env.example .env.local или PowerShell Copy-Item .env.example .env.local).
Действующий ключ задаётся локально как LLM_API_KEY; альтернативно сервер читает
OPENAI_API_KEY из окружения ОС. Непустой LLM_API_KEY имеет приоритет.
Значения по умолчанию: https://api.openai.com/v1, gpt-4.1-mini.
Для другого OpenAI-compatible провайдера задать его URL и модель явно.
После изменения окружения перезапустить сервер; ключи не входят в Git или Docker image.
Compose передаёт переменные при запуске: docker compose --env-file .env.local up --build.
Bounded-критик использует LLM_TIMEOUT_MS=2500 (100–3000 мс); HR Agent — отдельный
LLM_AGENT_TIMEOUT_MS=10000 на обращение к модели.
Для проверки выбрать HR-персону и открыть /hr. Статус /api/ai/agent доступен
только подписанному HR: available означает наличие конфигурации, не успешный вызов
провайдера. Полный AI-сценарий подтверждается ответом на вопрос и пройденной проверкой
фактов; ошибка доступа/сети/лимита остаётся видимой. Без обоих ключей работает fallback.
Live-проверка ключа, описанная в PR #15, относится к машине автора и не заменяет
проверку настроек текущего запуска; здесь аудит не отправляет платные запросы.
Демо-сценарий
Выбрать демо-профиль E0028: System Design после replay равен 3, EV_006 повторно не предлагается. Примерить и подтвердить Leadership Foundations: readiness 74% → 78%. Открыть HR: число добровольных завершений увеличится с 1044 до 1045. Открыть Trust и запустить проверки; затем вернуться к сотруднику — профиль и журнал сохранятся.
Полный скрипт: docs/DEMO.md.
Skill Exchange
Поиск наставников помогает закрывать разрывы через опыт коллег. Доступны фильтры по навыку, отделу, роли и готовности помогать; карточка показывает только имя, роль, грейд, уровень запрошенного навыка и доступность. Можно отправить запрос, принять или отклонить его, переписываться и закрыть диалог.
На snapshot 2026-10-01 у 125 из 200 сотрудников есть хотя бы один критичный разрыв
без доступной сейчас активности с положительным effective gain: 188 пар «сотрудник — навык».
Методика и границы этой метрики — в docs/EVALUATION.md.
Переписка сохраняется на сервере в JSON-файле, включая непрочитанные и доступность. Сообщения — обычный текст до 2000 символов; лимит — 20 сообщений в минуту на identity. Обновления опрашиваются каждые 3 секунды в видимой вкладке. Для двух участников используйте разные профили браузера или приватное окно: обычные вкладки делят cookie.
Поиск по локальному импорту работает в браузере; серверный чат использует только
встроенный набор и выбранную демо-идентификацию. Подробности и приёмка:
docs/SKILL_EXCHANGE.md.
Дополнительные профили жюри
Загрузчик принимает 1–4 файла с режимами «Дополнить» / «Заменить». Профили и историю с нестандартными именами распознаёт по содержимому; неоднозначный тип выбирается вручную. Недостающие части берутся из текущего набора. Слияние проходит общую валидацию, показывает сводку добавлений/обновлений, отклонённых строк и переход к новым профилям. Лимит — 10 МБ на файл; BOM и CRLF поддерживаются. Без загруженной базы нужны все четыре части. Дополнение использует свежий normalized snapshot: подтверждённые навыки и история входят в новый набор без повторного gain. Журнал, preview и план импорта сбрасываются — UI сообщает об этом заранее.
База дополнения ограничена текущим доступом: employee demo содержит собственный профиль,
HR demo — организационный набор. Фикстура fixtures/judge/judge_profiles.json добавляет
три профиля; результат 200 → 203 относится к полному исходному набору, а не к private
employee view. Импорт не превращает judge-профили в серверные chat identities.
При переходе в чат импорт сохраняется; автор переписки явно указан как подписанная
demo-персона. После reload локальный импорт сбрасывается и возвращается доступный demo-набор.
Внешнее обучение
Если для разрыва нет доступного внутреннего шага, раскрываемый блок «Внешние курсы» предлагает варианты
из локального курируемого data/external_courses.json (35 записей). Подбор учитывает уровень,
предпочитаемый язык профиля, бесплатность и длительность. UI показывает источник,
языки, длительность и пометку «бесплатно/платно»; HR — потенциальную аудиторию
по языку и подходящему уровню без персонального рейтинга. Employee показывает первые
три направления и до трёх курсов на навык; HR-блок относится ко всей организации
и скрывается при фильтрации аналитики по роли.
Внешние курсы не участвуют в top-3, score или readiness, не начисляют подтверждённый прирост и не записываются в ledger. Каталог работает без provider API и scraping; ссылки проверяются по HTTPS и allowlist доменов. Доступность и стоимость на стороне провайдера не проверяются в реальном времени. Эффект курса не подтверждён данными компании.
Архитектура
Экономика развития
В кабинете сотрудника доступен личный баланс по добровольным завершениям, каталог демо-наград, добровольные вызовы и отказ от участия. Обязательные события не дают баллов; публичного рейтинга нет. Баланс выводится из истории и текущего ledger, подтверждённое событие не учитывается дважды.
Это демо-механика без оплаты или выдачи наград: обмен, принятые вызовы и opt-out
сохраняются только до ухода со страницы или нового импорта и не передаются HR.
Чат пока не начисляет баллы за наставничество или благодарности. Данные правил и
каталога версионированы в data/gamification_rules.json и data/rewards.json.
Общий поток
Next.js + TypeScript. Согласованный интерфейс на RU/KK/EN использует
AppProviders, IdentityProvider и один sharedEmployeeStore. Сервер ограничивает
demo dataset выбранной identity: свой профиль для сотрудника, полный набор для HR.
Журнал развития хранится в памяти; demo snapshots восстанавливаются при повторном
выборе персоны в текущей вкладке. Прогресс локального импорта отделён от demo.
Import (Zod) -> NormalizedDataset -> history replay -> target gaps
-> hard filters -> multi-factor ranking -> Evidence Receipt
├─> Employee Digital Twin (what-if, planner, ledger)
├─> HR Command Center (агрегаты, no-step alerts)
└─> AI Trust Center (baseline, evals, fallback)
Для объяснений текущий UI обращается к /api/ai/explain: передаёт язык интерфейса
и ограниченные числовые evidence-факты по кандидатам, включая импортированные наборы.
Сохранённый /api/ai/review принимает только ID и восстанавливает evidence на сервере
из встроенного набора; доступ разрешён к собственному профилю либо HR.
Контракты этих endpoints различаются.
Модули из принятого main 0d068536 объединены с Skill Exchange и согласованным UI.
Альтернативные CareerQuestStore, IndexedDB и старый XP-модуль не подключены
к активным страницам; новый DevelopmentEconomy использует текущий normalized store.
Private Employee projection теперь применяется сервером при выдаче demo dataset.
Переписка хранится отдельно от карьерного ledger в data/runtime/messages.json.
HR Agent и участие
HR видит фактическое участие за 6 и 12 месяцев: добровольные активности, инициатора участия, пропуски/отказы/выходы и отдельно обязательные процессы. Это операционный срез, не прогноз увольнения или публичный рейтинг.
HR Agent использует шесть инструментов только для чтения текущего snapshot, максимум
пять вызовов на запуск. /api/ai/agent требует подписанную HR identity и ограничивает
размер тела, частоту и одновременные обращения. Клиент проверяет числовые ответы
относительно фактических результатов инструментов. Без ключа панель явно сообщает
об отсутствии AI; обычные HR-таблицы продолжают работать.
Вопрос и разрешённые числовые факты/ID передаются модели; их происхождение из локального импорта сервер не восстанавливает. Свободный текст агента требует оценки HR.
Подробно: docs/ARCHITECTURE.md · контракты:
docs/CONTRACTS.md · данные: docs/DATASET.md.
Как считается рекомендация
Перед любым расчётом движок доигрывает историю: уровни в профиле актуальны на
last_review_date, а всё завершённое позже ещё не учтено. В стартовом наборе 318 таких
completed-записей; 202 записи у 114 сотрудников содержат заявленные эффекты навыков.
После применения cap фактический положительный replay дают 186 записей у 111 сотрудников.
Hard-фильтры (до скоринга): mandatory, несоответствие роли/грейду, невыполненные
prerequisites, уже пройденное (кроме recurring EV_036), нулевой effective gain, отсутствие
будущей сессии.
Ранжирование:
| Фактор | Вес |
|---|---|
| Target gap impact (critical skills ×2) | 45% |
| Engagement fit (история, self vs assigned) | 20% |
| Feasibility (prerequisites, формат, сессия) | 15% |
| Goal alignment (в т.ч. cross-role цели) | 10% |
| Path / diversity | 10% |
effective_gain = max(0, min(current + gain, max_level, 5) - current) — правило роста задано
самим датасетом, не придумано нами.
Результаты проверки
Объединённая версия с актуальным main 4da973a (включая PR #13/#15) и Skill Exchange
прошла 366/366 тестов в 43 файлах — PASS (2026-09-23).
Production-сборка с полной проверкой TypeScript — PASS, Next.js 16.3.6, без предупреждений.
Bootstrap прошёл 7 локальных процессных сценариев: генерация/повторное использование
ключа, явная конфигурация, неверный ключ и отказ runtime-хранилища.
В браузере подтверждены двусторонняя переписка E0028 ↔ E0050, принятие, непрочитанные/прочтение, plain text и сохранение после reload; HR видит агрегаты без чужих диалогов. RU/KK/EN и экран 375 px без overflow проверены. Completion E0028 дал readiness 74% → 78%, HR — 1045 добровольных завершений; возврат к E0028 сохранил 78% и одну запись ledger. Ошибок/warnings console нет. Polling проверен unit-тестами; delivery без ручного refresh отдельно не измерялась. Импорт жюри в браузере: HR-набор 200 → 203 профиля, +4 записи истории, 2 отклонённые строки с причинами; J0001 открывается с readiness 58% и межролевой целью Product Manager Middle. Переход chat → employee сохраняет импортированные 203 профиля и выбранный J0001. Docker текущей версии не запускался, CI не использовался.
Результаты прежних этапов — 117/14, 152/19 (PR #6), 168/21 и 223/28 — исторические.
Подробности: docs/INTEGRATION.md.
Стандартные команды проверки из корня проекта:
pnpm test
pnpm typecheck
pnpm build
GitHub Actions ранее был заблокирован из-за billing аккаунта до запуска команд проекта.
Workflow синхронизирован с принятой командой версией: запуск только вручную через
workflow_dispatch. CI в этой проверке не запускался. Windows spawn EPERM из
исторического отчёта PR #7 относится к запуску инструментов на том хосте; локальные
адаптации здесь сохраняют полный набор тестов и проверку TypeScript.
Детали команд и ограничений:
docs/INTEGRATION.md.
Метрики и adversarial-кейсы: docs/EVALUATION.md.
Приватность и отказоустойчивость
- Исходные импортированные файлы и полная история остаются в браузере; серверной БД нет.
- Demo Employee получает только собственный профиль и историю; HR получает полный организационный набор для аналитики. Сервер проверяет подписанную identity.
- Диалог доступен только его участникам. HR получает общие счётчики чата; тексты, участники и темы чужих диалогов не выдаются.
- В LLM уходят только evidence-факты по top-кандидатам — никогда raw-профиль и история.
- Ответ модели проходит Zod-схему и fact verifier: неизвестный ID, изменённое число или неподтверждённое утверждение блокируются.
- Текст из датасета трактуется как данные, а не как инструкции (защита от prompt injection).
- Без ключа или при ошибке модели — полноценный детерминированный режим.
/api/ai/explainпроверяет ответ относительно присланного evidence; происхождение импортированных фактов сервером не подтверждается./api/ai/reviewиспользует серверный встроенный набор. Оба route ограничивают origin, JSON, размер тела и частоту запросов./api/ai/agentразрешён только HR; инструменты не изменяют данные и не отправляют raw-профили/историю. Числовой grounding не доказывает причинность выводов агента.- Демо-персоны свободно выбираются из синтетического набора; для production нужен SSO. Публичных рейтингов сотрудников нет.
Ограничения
- Перезагрузка сбрасывает импорт и карьерный ledger. Переписка сохраняется в JSON-файле и переживает перезапуск с тем же runtime-каталогом.
- Демо-идентификация не доказывает личность пользователя; приложение предназначено для синтетических данных.
- JSON-хранилище чата рассчитано на один процесс и демо-объёмы. Нет push, вложений, редактирования/удаления сообщений и шифрования переписки. Вместо WebSockets используется опрос.
- Beam search ограничен шириной 10 и глубиной 4; календарная совместимость активностей не рассчитывается.
- Живой платный LLM-провайдер не вызывался при проверке; протестированы проверенные ответы, отказ, таймаут и режим без ключа. AI не меняет порядок рекомендаций.
- Docker-конфигурация с runtime volume подготовлена; контейнер текущей версии здесь не запускался.
Документация
| Файл | О чём |
|---|---|
docs/ARCHITECTURE.md | Техническая модель, формула, release gates |
docs/DATASET.md | Проверенные факты о данных и доменные правила |
docs/CONTRACTS.md | Общие типы и публичный API ядра |
docs/PLAYBOOK.md | План на 5 часов, feature gates, checklist |
docs/WORKSTREAMS.md | Готовые Codex-задания по потокам |
docs/EVALUATION.md | Метрики и adversarial-кейсы |
docs/SKILL_EXCHANGE.md | Наставники, переписка, приватность и приёмка |
docs/REQUIREMENTS_AUDIT.md | Матрица исходных ТЗ, фактические проверки и ограничения |
docs/DEMO.md | Демо-скрипт на 90 секунд |
AGENTS.md | Правила для AI-агентов |
CONTRIBUTING.md | Ветки, коммиты, merge, handshake |
Данные синтетические, предоставлены организаторами. Реальные персональные данные не используются.
Для стороннего LLM_BASE_URL требуется явный LLM_API_KEY: ключ OPENAI_API_KEY автоматически используется только для https://api.openai.com.
Авторы коммитов
История коммитов
- 2026-09-23 17:55Merge pull request #17 from BAITC-Hacks/feat/skill-exchange-integrated-reviewAlikhan
- 2026-09-23 17:54docs: add the Docker deployment guideAlikhan Aitzhanov
- 2026-09-23 17:53feat: ship Skill Exchange mentor chat and integrated requirements fixesAlikhan
- 2026-09-23 17:53docs: surface the run requirements and the LLM key note at the topAlikhan Aitzhanov
- 2026-09-23 17:49docs: add a hero screenshot and document the jury importAlikhan Aitzhanov
- 2026-09-23 17:46merge: sync HR event builder with mainAlikhan Aitzhanov
- 2026-09-23 17:42Merge pull request #13 from BAITC-Hacks/chore/repo-presentationAlikhan Aitzhanov
- 2026-09-23 17:41fix: harden event builder integrationAlikhan Aitzhanov
Все коммиты (48)
- 2026-09-23 17:41feat: add HR event builder and calendar exportAlikhan Aitzhanov
- 2026-09-23 17:40Merge PR #15: reproducible local OpenAI setupnneznauu
- 2026-09-23 17:39fix(ai): make local OpenAI configuration reproducible without publishing secretsnneznauu
- 2026-09-23 17:35docs: make the repository readable for a first-time visitorAlikhan Aitzhanov
- 2026-09-23 17:28Merge PR #7: HR agent, development participation and RU/KK/ENnneznauu
- 2026-09-23 17:28Merge pull request #12 from BAITC-Hacks/feat/gamificationAlikhan Aitzhanov
- 2026-09-23 17:27merge: sync Danik HR trust with main and preserve localized interfacesnneznauu
- 2026-09-23 17:24feat: add the development points economyAlikhan Aitzhanov
- 2026-09-23 17:14Merge pull request #11 from BAITC-Hacks/feat/judge-profile-importAlikhan Aitzhanov
- 2026-09-23 17:14Merge pull request #10 from BAITC-Hacks/codex/external-learning-layerAlikhan Aitzhanov
- 2026-09-23 17:10feat: accept the jury's extra profiles on importAlikhan Aitzhanov
- 2026-09-23 17:10feat: add external learning layerAlikhan Aitzhanov
- 2026-09-23 16:53Merge pull request #9 from BAITC-Hacks/fix/approved-ui-demo-modesAlikhan
- 2026-09-23 16:51fix: preserve trilingual UI and improve employee HR switchingAlikhan
- 2026-09-23 16:37Merge pull request #6 from BAITC-Hacks/codex/career-quest-releaseAlikhan Aitzhanov
- 2026-09-23 16:35merge: sync Career Quest release with mainAlikhan Aitzhanov
- 2026-09-23 16:30docs: add specs for judge import, HR event builder and gamificationAlikhan Aitzhanov
- 2026-09-23 16:29Merge pull request #8 from BAITC-Hacks/feat/halyk-ui-i18nAlikhan
- 2026-09-23 16:28feat: redesign Career Quest and add consistent ru kk en localizationAlikhan
- 2026-09-23 16:27feat(hr): add grounded tool-calling agent and development participation analysisnneznauu
- 2026-09-23 16:26feat: complete Career Quest integrated experienceAlikhan Aitzhanov
- 2026-09-23 15:54docs: add full specs for Skill Exchange and external coursesAlikhan Aitzhanov
- 2026-09-23 15:46Merge pull request #5 from BAITC-Hacks/fix/unify-career-questAlikhan
- 2026-09-23 15:45fix: unify employee, HR and Trust in one shared app sessionAlikhan
- 2026-09-23 15:31docs: record the PR #3 duplicate-workstream decisionAlikhan Aitzhanov
- 2026-09-23 15:26docs: add advanced-feature briefs for the next Codex roundAlikhan Aitzhanov
- 2026-09-23 15:11Merge pull request #4 from BAITC-Hacks/feat/danik-hr-trustnneznauu
- 2026-09-23 15:09Merge pull request #2 from BAITC-Hacks/feat/manahnbet-digital-twinAlikhan
- 2026-09-23 15:00feat(B): integrate Employee Digital Twin with real intelligence engineAlikhan
- 2026-09-23 14:59feat: build Career Quest digital twin experienceAlikhan Aitzhanov
- 2026-09-23 14:56feat(trust): add HR analytics, bounded AI review and live evaluationnneznauu
- 2026-09-23 14:34feat: implement employee digital twin, simulation and session ledgerAlikhan
- 2026-09-23 14:31Merge pull request #1 from BAITC-Hacks/feat/alihan-intelligenceAlikhan Aitzhanov
- 2026-09-23 14:29chore: restore standard CI after billing diagnosisAlikhan Aitzhanov
- 2026-09-23 14:27fix: make CI independent of reusable actionsAlikhan Aitzhanov
- 2026-09-23 14:25fix: use organization-safe CI setupAlikhan Aitzhanov
- 2026-09-23 14:19fix: make standalone Docker build runnableAlikhan Aitzhanov
- 2026-09-23 14:09merge: sync project environment and docs from mainAlikhan Aitzhanov
- 2026-09-23 14:08chore: set up project environment and team documentationAlikhan Aitzhanov
- 2026-09-23 14:05feat: build Career Quest intelligence engineAlikhan Aitzhanov
Структура репозитория (256 файлов)
.dockerignore .editorconfig .env.example .github/CODEOWNERS .github/pull_request_template.md .github/workflows/ci.yml .gitignore .nvmrc AGENTS.md CLAUDE.md CONTRIBUTING.md Dockerfile README.md data/external_courses.json data/gamification_rules.json data/rewards.json data/source/README.md data/source/activity_history.csv data/source/employees.json data/source/events.json data/source/skills.json docker-compose.yml docs/ADVANCED_FEATURES.md docs/ARCHITECTURE.md docs/CONTRACTS.md docs/DATASET.md docs/DECISIONS.md docs/DEMO.md docs/EVALUATION.md docs/INTEGRATION.md docs/PLAYBOOK.md docs/REQUIREMENTS_AUDIT.md docs/SKILL_EXCHANGE.md docs/WORKSTREAMS.md docs/tz/ALIKHAN.md docs/tz/DANIK.md docs/tz/EVENT_BUILDER.md docs/tz/EXTERNAL_COURSES.md docs/tz/GAMIFICATION.md docs/tz/JUDGE_IMPORT.md docs/tz/MANAHNBET.md docs/tz/SKILL_EXCHANGE.md fixtures/judge/employees.json fixtures/judge/judge_history.csv fixtures/judge/judge_profiles.json next-env.d.ts next.config.ts package.json pnpm-lock.yaml public/.gitkeep scripts/start-demo.cjs src/app/AppProviders.tsx src/app/api/ai/agent/provider.ts src/app/api/ai/agent/route.ts src/app/api/ai/agent/service.ts src/app/api/ai/explain/route.ts src/app/api/ai/provider-config.ts src/app/api/ai/review/provider.ts src/app/api/ai/review/route.ts src/app/api/ai/review/service.ts src/app/api/demo-dataset/route.ts src/app/api/identity/people/route.ts src/app/api/identity/session/route.ts src/app/api/mentorship/availability/route.ts src/app/api/mentorship/catalog/route.ts src/app/api/mentorship/search/route.ts src/app/api/messages/summary/route.ts src/app/api/messages/threads/[id]/messages/route.ts src/app/api/messages/threads/[id]/read/route.ts src/app/api/messages/threads/[id]/route.ts src/app/api/messages/threads/route.ts src/app/api/messages/updates/route.ts src/app/chat/page.tsx src/app/demo/page.tsx src/app/employee/page.tsx src/app/globals.css src/app/hr/page.tsx src/app/layout.tsx src/app/page.tsx src/app/trust/page.tsx src/components/app-navigation.tsx src/components/app/AppShell.tsx src/components/app/DemoModeContext.tsx src/components/app/app-shell.module.css src/components/chat/ChatWorkspace.tsx src/components/chat/MentorSearch.tsx src/components/chat/RequestDialog.tsx src/components/chat/ThreadPanel.tsx src/components/chat/api.ts src/components/chat/chat.module.css src/components/chat/copy.ts src/components/chat/useChatInbox.ts src/components/employee/DatasetUpload.tsx src/components/employee/EmployeeWorkspace.tsx src/components/employee/Modal.tsx src/components/employee/ai-explanation.ts src/components/employee/career-dashboard.module.css src/components/employee/career-dashboard.tsx src/components/employee/employee.module.css src/components/employee/external-learning-section.module.css src/components/employee/external-learning-section.tsx src/components/employee/useEmployeeExplanation.ts src/components/gamification/DevelopmentEconomy.tsx src/components/hr/DropoutPanel.tsx src/components/hr/HRAgentPanel.tsx src/components/hr/HRDashboard.tsx src/components/hr/dashboard.module.css src/components/hr/external-learning-section.module.css src/components/hr/external-learning-section.tsx src/components/hr/hr-command-center.module.css src/components/hr/hr-command-center.tsx src/components/hr/panel-localization.ts src/components/identity/IdentityProvider.tsx src/components/identity/identity.module.css src/components/mentorship/MentorSuggestions.tsx src/components/mentorship/mentor-suggestions.module.css src/components/trust/EmployeeStoreTrustBridge.tsx src/components/trust/Surface.tsx src/components/trust/TrustDashboard.tsx src/components/trust/integration.tsx src/components/trust/trust-center.module.css src/components/trust/trust-center.tsx src/domain/analytics/core-adapter.ts src/domain/analytics/dropout.ts src/domain/analytics/hr-analytics.ts src/domain/analytics/index.ts src/domain/analytics/selectors.ts src/domain/analytics/store-adapter.ts src/domain/analytics/types.ts src/domain/data/employee-view.ts src/domain/data/importer.ts src/domain/data/index.ts src/domain/data/judge-import.ts src/domain/data/schemas.ts src/domain/data/server.ts src/domain/external/catalog.ts src/domain/external/index.ts src/domain/external/schema.ts src/domain/external/selection.ts src/domain/gamification/aggregate.ts src/domain/gamification/challenges.ts src/domain/gamification/completions.ts src/domain/gamification/config.ts src/domain/gamification/earn.ts src/domain/gamification/index.ts src/domain/gamification/recognition.ts src/domain/gamification/redeem.ts src/domain/gamification/types.ts src/domain/mentorship/index.ts src/domain/recommendation/eligibility.ts src/domain/recommendation/explanation.ts src/domain/recommendation/index.ts src/domain/recommendation/profile.ts src/domain/recommendation/recommend.ts src/domain/recommendation/scoring.ts src/domain/simulation/experience.ts src/domain/simulation/index.ts src/domain/simulation/ledger.ts src/domain/simulation/planner.ts src/domain/simulation/simulator.ts src/lib/contracts/dataset.ts src/lib/contracts/index.ts src/lib/contracts/recommendation.ts src/lib/evaluation/ADVANCED_HANDOFF.md src/lib/evaluation/HANDOFF.md src/lib/evaluation/agent-client.ts src/lib/evaluation/agent-contracts.ts src/lib/evaluation/agent-grounding.ts src/lib/evaluation/agent-tools.ts src/lib/evaluation/ai-contracts.ts src/lib/evaluation/ai-suite.ts src/lib/evaluation/baseline.ts src/lib/evaluation/client.ts src/lib/evaluation/core-cases.ts src/lib/evaluation/core-evidence.ts src/lib/evaluation/critic.ts src/lib/evaluation/dataset-audit.ts src/lib/evaluation/explanations.ts src/lib/evaluation/harness.ts src/lib/evaluation/index.ts src/lib/evaluation/trust-metrics.ts src/lib/evaluation/use-active-dataset.ts src/lib/evaluation/verifier.ts src/lib/i18n/I18nProvider.tsx src/lib/i18n/core.ts src/lib/i18n/domain.ts src/lib/identity/http.ts src/lib/identity/index.ts src/lib/identity/types.ts src/server/messaging/api.ts src/server/messaging/store.ts src/server/messaging/types.ts src/state/EmployeeStoreProvider.tsx src/state/HANDOFF.md src/state/ai-review.ts src/state/career-quest-store.ts src/state/createIntelligenceAdapter.ts src/state/dataset-import.ts src/state/employeeStore.ts src/state/intelligenceAdapter.ts src/state/progress-ledger.ts src/state/realIntelligenceAdapter.ts src/state/sharedEmployeeStore.ts tests/chat/ui.test.ts tests/evaluation/agent-client.test.ts tests/evaluation/agent-grounding.test.ts tests/evaluation/agent-server.test.ts tests/evaluation/agent-tools.test.ts tests/evaluation/ai-route-guards.test.ts tests/evaluation/ai.test.ts tests/evaluation/analytics.test.ts tests/evaluation/core-integration.test.ts tests/evaluation/dataset-audit.test.ts tests/evaluation/dropout.test.ts tests/evaluation/evidence-route.test.ts tests/evaluation/fixtures.ts tests/evaluation/harness.test.ts tests/evaluation/hr-analytics.test.ts tests/evaluation/panel-localization.test.ts tests/evaluation/privacy-boundary.test.ts tests/evaluation/provider-config.test.ts tests/evaluation/reference-report.json tests/evaluation/release-ui.test.ts tests/evaluation/route.test.ts tests/evaluation/styles.d.ts tests/evaluation/trust-workstream.test.ts tests/evaluation/ui.test.ts tests/evaluation/vitest.windows.config.mts tests/external/external-learning-active-ui.test.ts tests/external/external-learning.test.ts tests/gamification/gamification-active.test.ts tests/gamification/gamification.test.ts tests/import/identity-append.test.ts tests/import/judge-import.test.ts tests/integration/i18n.test.ts tests/integration/shared-state.test.ts tests/mentorship/search.test.ts tests/mentorship/suggestions.test.ts tests/mentorship/workspace-access.test.ts tests/messaging/api.test.ts tests/messaging/fixtures.ts tests/messaging/identity.test.ts tests/messaging/store.test.ts tests/recommendation/importer.test.ts tests/recommendation/recommendation.test.ts tests/recommendation/test-utils.ts tests/simulation/.gitignore tests/simulation/ai-explanation.test.ts tests/simulation/client-adapters.test.ts tests/simulation/employee-locales.test.ts tests/simulation/experience.test.ts tests/simulation/fixture.ts tests/simulation/real-data.test.ts tests/simulation/simulation.test.ts tsconfig.json vitest.config.ts
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.