О проекте
Команда: BGK-TEAM
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Рабочий MVP
Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд
Суть
Платформа, где бизнес с помощью AI-«прожарки» превращает идею в карточку задачи с рейтингом готовности, а студенческие команды откликаются. Дальше идут мэтч, стартовый пакет и этапы с приёмкой.
Как устроено
Next.js BFF держит бизнес-логику: рейтинг готовности 0–100 считается в коде с историей изменений, рекомендации командам строятся по ролям, навыкам и тематике, отклики, мэтчи и этапы хранятся в PostgreSQL через Drizzle. AI-слой на Mastra (агенты grillAgent и task evaluator, workflows analyze-text и phrase-question) через OpenAI задаёт уточняющие вопросы и предлагает заполнение полей, которые бизнес подтверждает. Данные Mastra и бизнес-данные разнесены по двум БД. Фоновые задачи на pg-boss, файлы в RustFS/S3.
Ключевые решения
- Mastra agents/workflows
- grill-сессия уточняющих вопросов
- детерминированный readiness score
- рекомендации fit() по навыкам
- Zod-схемы
- ADR-driven разработка
Особенности
Разработка шла по ADR (ADR-004…008): каждое решение (score, рекомендации, доступ) оформлено отдельно и реализовано параллельными PR. Полный цикл от черновика до принятого этапа с проверкой роли и владельца на сервере.
Стек
TypeScript · Bun · Turborepo · Next.js 16 · React 19 · Tailwind CSS 4 · shadcn/ui · Mastra · AI SDK 6 · PostgreSQL · pgvector · Drizzle ORM · pg-boss · RustFS/S3 · Docker Compose
Модели
OpenAI gpt-5.4-nano
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-810705c9-bgk-team.
README
README.mdAI-Sana — Мэтч задач
От знаний — к первой работе. Хакатонный проект команды BGK-TEAM.
Что делает проект
AI-Sana помогает бизнесу превратить нечёткую идею в понятную задачу, а студенческим командам — найти проект для практики или подработки. AI уточняет требования, бизнес подтверждает сведения, команда предлагает решение. Дальше участники согласуют работу и принимают результат по измеримым критериям.
Что реализовано
- Рабочее пространство с вводным сценарием, карточками задач, AI-чатом и переключением темы.
- Пошаговое уточнение задачи («прожарка»): вопросы, редактирование и подтверждение полей.
- Рейтинг готовности от 0 до 100 и история его изменений. Баллы рассчитываются в коде.
- Каталог с фильтрами и рекомендации командам по ролям, навыкам и тематике; виды «колода» и «сетка».
- Отклики команд, принятие, отклонение и откладывание решения бизнесом.
- Стартовый пакет после выбора команды, сдача этапов, возврат на доработку и подтверждение результата.
- Демо-переключение бизнеса и команды, серверные проверки роли и владельца данных.
Как работает решение
- Бизнес описывает проблему. AI задаёт уточняющие вопросы и предлагает заполнение карточки.
- Бизнес проверяет поля. Подтверждённые сведения участвуют в пересчёте рейтинга и видны исполнителям.
- Задача публикуется. Команда находит её в каталоге или рекомендациях и отправляет план решения.
- Бизнес выбирает команду. Создаётся мэтч со стартовым пакетом и этапами по критериям успеха.
- Команда сдаёт результат. Бизнес принимает этап или возвращает его с замечаниями.
Технологии
| Область | Используется |
|---|---|
| Язык и инструменты | TypeScript, Bun 1.4.2, Node.js ≥24, Turborepo |
| Интерфейс и BFF | Next.js 16.3.6, React 19.2.8, Tailwind CSS 4, shadcn/ui, Radix |
| AI | Mastra, AI SDK 6, @mastra/client-js, OpenAI API |
| Данные | PostgreSQL с pgvector, Drizzle ORM, Mastra PostgresStore, Zod |
| Фоновые задачи и файлы | pg-boss 10, RustFS / S3, AWS S3 Client |
| Локальная инфраструктура | Docker Compose |
В коде AI-модель по умолчанию — openai/gpt-5.4-nano.
Модель можно переопределить через LLM_MODEL, CLASSIFIER_MODEL и GRILL_MODEL.
Доступ к выбранной модели зависит от учётной записи провайдера.
Архитектура
flowchart LR
UI["Интерфейс Next.js"] --> BFF["BFF: доступ и бизнес-логика"]
BFF --> DB["nextjs_db · Drizzle"]
BFF -->|"Mastra Client SDK"| AI["Mastra: анализ текста и вопросы"]
AI --> OpenAI["OpenAI API"]
AI --> AIDB["mastra_db"]
Workers["Workers · pg-boss"] --> AIDB
Workers --> S3["RustFS / S3"]
apps/presentation-layer— UI, API, состояние задач, рейтинг, отклики и этапы.apps/ai-logic-layer— AI-агенты и workflowsanalyze-text/phrase-question.apps/workers— отдельный процесс очередей; сейчас содержит демонстрационный обработчик.
UI обращается к AI через BFF и Mastra. Рейтинг, подбор и изменение бизнес-состояния выполняются в приложении. Бизнес-данные и данные Mastra разделены на две БД; запросов с объединением таблиц между ними нет.
Установка и запуск
Нужны Git, Node.js ≥24, Bun 1.4.2 и запущенный Docker с Compose v2. На Windows используйте WSL2 с Docker integration.
git clone https://github.com/BAITC-Hacks/hack-810705c9-bgk-team.git
cd hack-810705c9-bgk-team
cp .env.example .env
Для AI укажите в корневом .env:
OPENAI_API_KEY=<ваш ключ OpenAI>
MASTRA_CHAT_AGENT_ID=grillAgent
Затем запустите:
./start.sh
Скрипт установит зависимости по lockfile, поднимет PostgreSQL и RustFS, применит миграции, добавит демо-данные и запустит UI, Mastra и workers. Существующие записи при заполнении демо-данных сохраняются.
| Сервис | Адрес по умолчанию |
|---|---|
| Приложение | http://localhost:3000 |
| Mastra Studio / API | http://localhost:4111 |
| RustFS Console | http://localhost:9001 |
Остановка — Ctrl+C; данные БД сохраняются в Docker volumes.
Если запуск не удался, выполните ./doctor.sh.
Подробности и настройка портов — в QUICKSTART.md.
Как проверить решение
Быстрое знакомство на демо-данных
- Откройте каталог.
- В демо-переключателе выберите роль «Команда» и команду BotForge.
- Откройте рекомендации: проверьте карточки, объяснение совпадения и переключение колоды/сетки.
- В каталоге найдите «Бот статусов доставки» и нажмите «Откликнуться» — откроется карточка с формой отклика.
Полный пользовательский сценарий
-
Откройте задачи, выберите роль «Бизнес» и «ЛогистикаПро».
-
Создайте задачу, например:
Диспетчеры вручную планируют 120 доставок в день в Excel и тратят на это четыре часа. Нужен сервис составления маршрутов с учётом окон доставки. Успех — сократить время планирования до 30 минут на согласованном наборе заказов.
-
Ответьте на вопросы, проверьте и подтвердите поля и критерии успеха. Посмотрите рейтинг и историю, затем опубликуйте задачу.
-
Переключитесь на BotForge, найдите задачу в каталоге и отправьте отклик: идея, план, срок, роли команды и способ проверки каждого критерия.
-
Вернитесь к «ЛогистикаПро», откройте отклик и выберите команду.
-
От команды сдайте этап со ссылкой на результат и комментарием. От бизнеса подтвердите этап либо верните его на доработку.
Ожидаемый результат: задача проходит путь от черновика до мэтча и принятого этапа; рейтинг обновляется при изменении подтверждённых полей, данные сохраняются в PostgreSQL. Это инструкция для воспроизведения, а не отчёт о пройденном end-to-end тесте.
Данные и интеграции
- Демо-данные: задачи и профили команд из seed-файла, включая BotForge, DataBrew и PixelUX.
- Пользовательские данные: описания задач, подтверждённые поля, отклики, критерии и отчёты по этапам.
- OpenAI API: обработка текста и генерация вопросов через Mastra; нужен ключ и доступ к модели.
- PostgreSQL и RustFS: локальные сервисы Docker Compose. Наличие RustFS не означает, что документы UI уже загружаются на сервер.
- Голосовой ввод: использует возможности распознавания речи браузера, если они доступны.
Известные ограничения
- Это демо без полноценной аутентификации: роль хранится в cookie. Для публичного использования нужна настоящая авторизация.
- При недоступности AI предусмотрен резервный сценарий уточнения; свободный AI-чат требует настроенного провайдера.
- Документы рабочего пространства хранятся в памяти браузера; серверное хранение вложений этого интерфейса не подключено.
- Workers содержат пример очереди; полноценный фоновый бизнес-сценарий не заявляется.
- Голосовой ввод зависит от браузера и разрешения на микрофон.
- Итоговый сквозной сценарий с live AI и переносом заполненной БД не подтверждён полной приёмкой; подробности — в заметке интеграции.
Развёрнутая версия
Подтверждённая ссылка на публичный стенд в репозитории не указана. Для демонстрации используйте локальный запуск по инструкции выше.
Документация
Быстрый старт · Деплой · Архитектура · Требования MVP · Архитектурные решения
Авторы коммитов
История коммитов
- 2026-09-23 18:25Merge remote-tracking branch 'origin/main' into test-uiartsiombr
- 2026-09-23 18:09Merge remote-tracking branch 'origin/main' into test-uiartsiombr
- 2026-09-23 17:55Merge pull request #19 from BAITC-Hacks/feat/assistant-ui-chatAndrey Girin
- 2026-09-23 17:54Merge remote-tracking branch 'origin/main' into feat/assistant-ui-chatNupke
- 2026-09-23 17:53feat(ui): attach files to workspace chat messagesNupke
- 2026-09-23 17:50Merge pull request #18 from BAITC-Hacks/docs/deployment-guideAndrey Girin
- 2026-09-23 17:50docs: add concise server deployment guideNupke
- 2026-09-23 17:40feat(ui): remove voice input from workspace chatNupke
Все коммиты (99)
- 2026-09-23 17:39Open the onboarding screen from the header logo.Samat Kalshabekov
- 2026-09-23 17:36Merge remote-tracking branch 'origin/main' into feat/assistant-ui-chatNupke
- 2026-09-23 17:36feat(ui): render workspace chat with assistant-uiNupke
- 2026-09-23 17:31Merge demo ownership into main.Samat Kalshabekov
- 2026-09-23 17:30Scope each demo identity to its own tasks and session.Samat Kalshabekov
- 2026-09-23 17:19dddartsiombr
- 2026-09-23 17:13ыыыыartsiombr
- 2026-09-23 17:11Merge pull request #17 from BAITC-Hacks/docs/simplify-readmeAndrey Girin
- 2026-09-23 17:09docs: add hackathon jury README with project asset and demo guideNupke
- 2026-09-23 17:07docs: shorten README to overview and startup commandsNupke
- 2026-09-23 17:06docs: simplify root READMENupke
- 2026-09-23 17:05Merge pull request #15 from BAITC-Hacks/feat/adr-009-bff-api-contractAndrey Girin
- 2026-09-23 17:04style: unify Task Match navigation catalog and recommendationsNupke
- 2026-09-23 17:03style: align task match page with workspace UINupke
- 2026-09-23 16:51Merge remote-tracking branch 'origin/main' into integration/pr15-task-matchNupke
- 2026-09-23 16:51Integrate Task Match services and PR12 into ADR009 API contractsNupke
- 2026-09-23 16:46Loop the onboarding video instead of stopping after one play.Samat Kalshabekov
- 2026-09-23 16:44merge: include latest main onboarding documentationNupke
- 2026-09-23 16:44feat: integrate Task Match into PR12 with stateless Mastra contractsNupke
- 2026-09-23 16:40add chatartsiombr
- 2026-09-23 16:39add chatartsiombr
- 2026-09-23 16:38feat: sync main onboarding and Mastra chat with Task MatchNupke
- 2026-09-23 16:36Document the first-run onboarding flow.Samat Kalshabekov
- 2026-09-23 16:32Connect free-form chat to Mastra and add business onboarding.Samat Kalshabekov
- 2026-09-23 16:30feat: merge current main UI with canonical Task Match servicesNupke
- 2026-09-23 18:26Merge pull request #14 from BAITC-Hacks/test-uiartsiombr
- 2026-09-23 16:17feat: connect persistent Task Match flow and verify HTTP acceptanceNupke
- 2026-09-23 16:06feat: enforce ADR-008 access against integrated database servicesNupke
- 2026-09-23 16:04feat: integrate ADR-007 matches and stages on canonical task schemaNupke
- 2026-09-23 16:04Describe themed surfaces in the workspace README.Samat Kalshabekov
- 2026-09-23 16:03Keep voice dictation inside the chat limit and theme the selects.Samat Kalshabekov
- 2026-09-23 16:03test(api): add concurrency, AI-ordering, RU-locale and 409 regression testsNupke
- 2026-09-23 16:02fix(api): close version-check race, move AI calls out of tx, validate Mastra outputNupke
- 2026-09-23 16:02feat: integrate ADR-006 catalog and recommendations with canonical scoreNupke
- 2026-09-23 16:00feat: connect canonical ADR-005 score and history to grill mutationsNupke
- 2026-09-23 15:59feat: integrate ADR-004 canonical grill lifecycleNupke
- 2026-09-23 15:58Merge workspace persistence into main.Samat Kalshabekov
- 2026-09-23 15:57Persist the workspace in Postgres through the Next.js API.Samat Kalshabekov
- 2026-09-23 15:57feat: integrate ADR-002 BFF with current workspace UINupke
- 2026-09-23 15:55docs: integrate ADR implementation planNupke
- 2026-09-23 15:45Merge branch 'main' into test-uiartsiombr
- 2026-09-23 15:45test(api): add route-handler tests and ADR-009 implementation noteNupke
- 2026-09-23 15:45feat(api): wire up route handlers for the §10 REST surfaceNupke
- 2026-09-23 15:45feat(api): add minimal in-memory use-cases for every ADR-009 routeNupke
- 2026-09-23 15:44feat(api): add ADR-009 contracts, error format, and BFF plumbingNupke
- 2026-09-23 15:42docs: describe strict API actor, proxy defaults and workspace role sync (ADR-008)Nupke
- 2026-09-23 15:42feat(ui): workspace role follows the demo role cookie (ADR-008)Nupke
- 2026-09-23 15:41fix(ui): validate demo role switch input with zod and report failures (ADR-008)Nupke
- 2026-09-23 15:41refactor(ui): expose DemoRoleBar via server-only index (ADR-008)Nupke
- 2026-09-23 15:41fix(access): executor view uses an explicit allowlist of task and field keys (ADR-008)Nupke
- 2026-09-23 15:41fix(access): strict demo actor for API and proxy defaults for pages (ADR-008)Nupke
- 2026-09-23 15:41feat(access): stage confirm/return and proposal update guards; role check before body parsing (ADR-008)Nupke
- 2026-09-23 15:39feat: update task evaluator agent to return strict raw JSON report format and add zod schema for validationartsiombr
- 2026-09-23 15:35docs: mark demo mode without authentication and document role cookies (ADR-008)Nupke
- 2026-09-23 15:34feat: add task evaluator agent and integrate evaluation step into pipelineartsiombr
- 2026-09-23 15:33feat(ui): demo role switch in app shell with cookie-backed actor and view (ADR-008)Nupke
- 2026-09-23 15:32fix(access): keep executor view field types genericNupke
- 2026-09-23 15:32feat(access): guarded ai-log, decision and claim use-cases with stub repository (ADR-008)Nupke
- 2026-09-23 15:30feat(access): role-based visibility filters for tasks, proposals and stages (ADR-008)Nupke
- 2026-09-23 15:29Merge pull request #11 from BAITC-Hacks/codex/bolder-workspace-uiSamat Kalshabekov
- 2026-09-23 15:29feat(access): demo actor cookies, seed actors and ownership guards (ADR-008)Nupke
- 2026-09-23 15:26Make the workspace easier to scan and add local chat skills.Samat Kalshabekov
- 2026-09-23 15:20feat(ui): connect task match flow to synchronous BFFNupke
- 2026-09-23 15:18feat(proposals): implement ADR-007 proposals, match, stages and pointsNupke
- 2026-09-23 15:18feat(ai): expose stateless inference workflows for BFFNupke
- 2026-09-23 15:18feat(grill): implement ADR-004 session lifecycleNupke
- 2026-09-23 15:14feat(recommendations): ADR-006 shared recommendations, catalog and fit()Nupke
- 2026-09-23 15:13feat(bff): add synchronous task match routes and persistenceNupke
- 2026-09-23 15:12feat(task): deterministic score, single recalc point and score history (ADR-005)Nupke
- 2026-09-23 15:10feat(task-match): persist AI inference logs in BFF databaseNupke
- 2026-09-23 15:08feat(task-match): add BFF domain rules and persistence schemaNupke
- 2026-09-23 15:06Merge student catalog and team profiles into main.Samat Kalshabekov
- 2026-09-23 15:05Add the student catalog and switchable team profiles.Samat Kalshabekov
- 2026-09-23 14:59Merge pull request #5 from BAITC-Hacks/codex/frontend-workspace-demoAndrey Girin
- 2026-09-23 14:55docs: support parallel ADR implementationNupke
- 2026-09-23 14:52docs: simplify ADR implementation promptsNupke
- 2026-09-23 14:51feat: implement stack1-result-control pipeline with grill and translator agentsartsiombr
- 2026-09-23 14:50docs: add ADR implementation promptsNupke
- 2026-09-23 14:44Merge pull request #3 from BAITC-Hacks/docs/task-match-adrAndrey Girin
- 2026-09-23 14:42docs: add proposed ADRs for Task Match MVPNupke
- 2026-09-23 14:35Add an in-memory Sana workspace demo for the five-minute flow.Samat Kalshabekov
- 2026-09-23 14:32docs: update Task Match requirements and add platform descriptionNupke
- 2026-09-23 14:25docs: add Task Match MVP specificationNupke
- 2026-09-23 14:23Merge pull request #2 from BAITC-Hacks/feat/project-polymath-skillsAndrey Girin
- 2026-09-23 14:11docs: route team agents to project-adapted polymath skillsNupke
- 2026-09-23 13:58Note the BGK team name in the README.Samat Kalshabekov
- 2026-09-23 13:54Add initial documentation file 1h.mdartsiombr
- 2026-09-23 13:26Merge pull request #1 from BAITC-Hacks/fix/dependency-vulnerabilitiesAndrey Girin
- 2026-09-23 13:23Fix dependency vulnerabilities and backport response size limitsNupke
- 2026-09-23 13:11Fix dev shutdown and keep one workspace lockfileNupke
- 2026-09-23 13:09Add Bun monorepo boilerplateNupke
Структура репозитория (735 файлов)
.agents/skills/ai-elements/SKILL.md .agents/skills/ai-elements/references/agent.md .agents/skills/ai-elements/references/artifact.md .agents/skills/ai-elements/references/attachments.md .agents/skills/ai-elements/references/audio-player.md .agents/skills/ai-elements/references/canvas.md .agents/skills/ai-elements/references/chain-of-thought.md .agents/skills/ai-elements/references/checkpoint.md .agents/skills/ai-elements/references/code-block.md .agents/skills/ai-elements/references/commit.md .agents/skills/ai-elements/references/confirmation.md .agents/skills/ai-elements/references/connection.md .agents/skills/ai-elements/references/context.md .agents/skills/ai-elements/references/controls.md .agents/skills/ai-elements/references/conversation.md .agents/skills/ai-elements/references/edge.md .agents/skills/ai-elements/references/environment-variables.md .agents/skills/ai-elements/references/file-tree.md .agents/skills/ai-elements/references/image.md .agents/skills/ai-elements/references/inline-citation.md .agents/skills/ai-elements/references/jsx-preview.md .agents/skills/ai-elements/references/message.md .agents/skills/ai-elements/references/mic-selector.md .agents/skills/ai-elements/references/model-selector.md .agents/skills/ai-elements/references/node.md .agents/skills/ai-elements/references/open-in-chat.md .agents/skills/ai-elements/references/package-info.md .agents/skills/ai-elements/references/panel.md .agents/skills/ai-elements/references/persona.md .agents/skills/ai-elements/references/plan.md .agents/skills/ai-elements/references/prompt-input.md .agents/skills/ai-elements/references/queue.md .agents/skills/ai-elements/references/reasoning.md .agents/skills/ai-elements/references/sandbox.md .agents/skills/ai-elements/references/schema-display.md .agents/skills/ai-elements/references/shimmer.md .agents/skills/ai-elements/references/snippet.md .agents/skills/ai-elements/references/sources.md .agents/skills/ai-elements/references/speech-input.md .agents/skills/ai-elements/references/stack-trace.md .agents/skills/ai-elements/references/suggestion.md .agents/skills/ai-elements/references/task.md .agents/skills/ai-elements/references/terminal.md .agents/skills/ai-elements/references/test-results.md .agents/skills/ai-elements/references/tool.md .agents/skills/ai-elements/references/toolbar.md .agents/skills/ai-elements/references/transcription.md .agents/skills/ai-elements/references/voice-selector.md .agents/skills/ai-elements/references/web-preview.md .agents/skills/ai-elements/scripts/agent.tsx .agents/skills/ai-elements/scripts/artifact.tsx .agents/skills/ai-elements/scripts/attachments-inline.tsx .agents/skills/ai-elements/scripts/attachments-list.tsx .agents/skills/ai-elements/scripts/attachments.tsx .agents/skills/ai-elements/scripts/audio-player-remote.tsx .agents/skills/ai-elements/scripts/audio-player.tsx .agents/skills/ai-elements/scripts/chain-of-thought.tsx .agents/skills/ai-elements/scripts/checkpoint.tsx .agents/skills/ai-elements/scripts/code-block-dark.tsx .agents/skills/ai-elements/scripts/code-block.tsx .agents/skills/ai-elements/scripts/commit.tsx .agents/skills/ai-elements/scripts/confirmation-accepted.tsx .agents/skills/ai-elements/scripts/confirmation-rejected.tsx .agents/skills/ai-elements/scripts/confirmation-request.tsx .agents/skills/ai-elements/scripts/confirmation.tsx .agents/skills/ai-elements/scripts/context.tsx .agents/skills/ai-elements/scripts/conversation.tsx .agents/skills/ai-elements/scripts/environment-variables.tsx .agents/skills/ai-elements/scripts/file-tree-basic.tsx .agents/skills/ai-elements/scripts/file-tree-expanded.tsx .agents/skills/ai-elements/scripts/file-tree-selection.tsx .agents/skills/ai-elements/scripts/file-tree.tsx .agents/skills/ai-elements/scripts/image.tsx .agents/skills/ai-elements/scripts/inline-citation.tsx .agents/skills/ai-elements/scripts/jsx-preview.tsx .agents/skills/ai-elements/scripts/message.tsx .agents/skills/ai-elements/scripts/mic-selector.tsx .agents/skills/ai-elements/scripts/model-selector.tsx .agents/skills/ai-elements/scripts/open-in-chat.tsx .agents/skills/ai-elements/scripts/package-info.tsx .agents/skills/ai-elements/scripts/persona-command.tsx .agents/skills/ai-elements/scripts/persona-glint.tsx .agents/skills/ai-elements/scripts/persona-halo.tsx .agents/skills/ai-elements/scripts/persona-mana.tsx .agents/skills/ai-elements/scripts/persona-obsidian.tsx .agents/skills/ai-elements/scripts/persona-opal.tsx .agents/skills/ai-elements/scripts/plan.tsx .agents/skills/ai-elements/scripts/prompt-input-cursor.tsx .agents/skills/ai-elements/scripts/prompt-input-tooltip.tsx .agents/skills/ai-elements/scripts/prompt-input.tsx .agents/skills/ai-elements/scripts/queue-prompt-input.tsx .agents/skills/ai-elements/scripts/queue.tsx .agents/skills/ai-elements/scripts/reasoning.tsx .agents/skills/ai-elements/scripts/sandbox.tsx .agents/skills/ai-elements/scripts/schema-display-basic.tsx .agents/skills/ai-elements/scripts/schema-display-body.tsx .agents/skills/ai-elements/scripts/schema-display-nested.tsx .agents/skills/ai-elements/scripts/schema-display-params.tsx .agents/skills/ai-elements/scripts/schema-display.tsx .agents/skills/ai-elements/scripts/shimmer-duration.tsx .agents/skills/ai-elements/scripts/shimmer-elements.tsx .agents/skills/ai-elements/scripts/shimmer.tsx .agents/skills/ai-elements/scripts/snippet-plain.tsx .agents/skills/ai-elements/scripts/snippet.tsx .agents/skills/ai-elements/scripts/sources-custom.tsx .agents/skills/ai-elements/scripts/sources.tsx .agents/skills/ai-elements/scripts/speech-input.tsx .agents/skills/ai-elements/scripts/stack-trace-collapsed.tsx .agents/skills/ai-elements/scripts/stack-trace-no-internal.tsx .agents/skills/ai-elements/scripts/stack-trace.tsx .agents/skills/ai-elements/scripts/suggestion-input.tsx .agents/skills/ai-elements/scripts/suggestion.tsx .agents/skills/ai-elements/scripts/task.tsx .agents/skills/ai-elements/scripts/terminal-basic.tsx .agents/skills/ai-elements/scripts/terminal-clear.tsx .agents/skills/ai-elements/scripts/terminal-streaming.tsx .agents/skills/ai-elements/scripts/terminal.tsx .agents/skills/ai-elements/scripts/test-results-basic.tsx .agents/skills/ai-elements/scripts/test-results-errors.tsx .agents/skills/ai-elements/scripts/test-results-suites.tsx .agents/skills/ai-elements/scripts/test-results.tsx .agents/skills/ai-elements/scripts/tool-input-available.tsx .agents/skills/ai-elements/scripts/tool-input-streaming.tsx .agents/skills/ai-elements/scripts/tool-output-available.tsx .agents/skills/ai-elements/scripts/tool-output-error.tsx .agents/skills/ai-elements/scripts/tool.tsx .agents/skills/ai-elements/scripts/transcription.tsx .agents/skills/ai-elements/scripts/voice-selector.tsx .agents/skills/ai-elements/scripts/web-preview.tsx .agents/skills/ai-sdk/SKILL.md .agents/skills/convert-documents-to-markdown/SKILL.md .agents/skills/feature-sliced-design/SKILL.md .agents/skills/feature-sliced-design/evals/README.md .agents/skills/feature-sliced-design/evals/evals.json .agents/skills/feature-sliced-design/references/asset-handling.md .agents/skills/feature-sliced-design/references/auth-and-api.md .agents/skills/feature-sliced-design/references/cross-import-patterns.md .agents/skills/feature-sliced-design/references/excessive-entities.md .agents/skills/feature-sliced-design/references/framework-integration.md .agents/skills/feature-sliced-design/references/growth-walkthrough.md .agents/skills/feature-sliced-design/references/layer-structure.md .agents/skills/feature-sliced-design/references/migration-guide.md .agents/skills/feature-sliced-design/references/state-management.md .agents/skills/hackathon-guide/SKILL.md .agents/skills/mastra/SKILL.md .agents/skills/mastra/references/common-errors.md .agents/skills/mastra/references/core-concepts.md .agents/skills/mastra/references/create-mastra.md .agents/skills/mastra/references/embedded-docs.md .agents/skills/mastra/references/mastra-api.md .agents/skills/mastra/references/migration-guide.md .agents/skills/mastra/references/model-selection.md .agents/skills/mastra/references/remote-docs.md .agents/skills/mastra/references/trace-intelligence.md .agents/skills/mastra/references/trace-query.md .agents/skills/mastra/scripts/provider-registry.mjs .agents/skills/next-dev-loop/SKILL.md .agents/skills/rustfs/README.md .agents/skills/rustfs/SKILL.md .agents/skills/rustfs/evals/evals.json .agents/skills/rustfs/known-issues.md .agents/skills/rustfs/references/architecture.md .agents/skills/rustfs/references/installation.md .agents/skills/rustfs/references/migration.md .agents/skills/rustfs/references/sdks.md .agents/skills/shadcn/SKILL.md .agents/skills/shadcn/agents/openai.yml .agents/skills/shadcn/assets/shadcn-small.png .agents/skills/shadcn/assets/shadcn.png .agents/skills/shadcn/cli.md .agents/skills/shadcn/customization.md .agents/skills/shadcn/evals/evals.json .agents/skills/shadcn/mcp.md .agents/skills/shadcn/registry.md .agents/skills/shadcn/rules/base-vs-radix.md .agents/skills/shadcn/rules/chat.md .agents/skills/shadcn/rules/composition.md .agents/skills/shadcn/rules/forms.md .agents/skills/shadcn/rules/icons.md .agents/skills/shadcn/rules/styling.md .agents/skills/transformers-js/SKILL.md .agents/skills/transformers-js/references/CACHE.md .agents/skills/transformers-js/references/CONFIGURATION.md .agents/skills/transformers-js/references/EXAMPLES.md .agents/skills/transformers-js/references/MODEL_ARCHITECTURES.md .agents/skills/transformers-js/references/MODEL_REGISTRY.md .agents/skills/transformers-js/references/PIPELINE_OPTIONS.md .agents/skills/transformers-js/references/TEXT_GENERATION.md .agents/skills/turborepo/SKILL.md .agents/skills/turborepo/command/turborepo.md .agents/skills/turborepo/references/best-practices/RULE.md .agents/skills/turborepo/references/best-practices/dependencies.md .agents/skills/turborepo/references/best-practices/packages.md .agents/skills/turborepo/references/best-practices/structure.md .agents/skills/turborepo/references/boundaries/RULE.md .agents/skills/turborepo/references/caching/RULE.md .agents/skills/turborepo/references/caching/gotchas.md .agents/skills/turborepo/references/caching/remote-cache.md .agents/skills/turborepo/references/ci/RULE.md .agents/skills/turborepo/references/ci/github-actions.md .agents/skills/turborepo/references/ci/patterns.md .agents/skills/turborepo/references/ci/vercel.md .agents/skills/turborepo/references/cli/RULE.md .agents/skills/turborepo/references/cli/commands.md .agents/skills/turborepo/references/configuration/RULE.md .agents/skills/turborepo/references/configuration/global-options.md .agents/skills/turborepo/references/configuration/gotchas.md .agents/skills/turborepo/references/configuration/tasks.md .agents/skills/turborepo/references/environment/RULE.md .agents/skills/turborepo/references/environment/gotchas.md .agents/skills/turborepo/references/environment/modes.md .agents/skills/turborepo/references/filtering/RULE.md .agents/skills/turborepo/references/filtering/patterns.md .agents/skills/turborepo/references/watch/RULE.md .bun-version .claude/skills/ai-elements .claude/skills/ai-sdk .claude/skills/convert-documents-to-markdown .claude/skills/feature-sliced-design .claude/skills/hackathon-guide/SKILL.md .claude/skills/mastra .claude/skills/next-dev-loop .claude/skills/rustfs .claude/skills/shadcn .claude/skills/transformers-js .claude/skills/turborepo .cline/skills/ai-elements .cline/skills/ai-sdk .cline/skills/convert-documents-to-markdown .cline/skills/feature-sliced-design .cline/skills/hackathon-guide .cline/skills/mastra .cline/skills/next-dev-loop .cline/skills/rustfs .cline/skills/shadcn .cline/skills/transformers-js .cline/skills/turborepo .dockerignore .env.example .gitattributes .gitignore .ignore .npmrc AGENTS.md CLAUDE.md QUICKSTART.md README.md apps/ai-logic-layer/.env.example apps/ai-logic-layer/.gitignore apps/ai-logic-layer/Dockerfile apps/ai-logic-layer/package.json apps/ai-logic-layer/skills/grill-me-acceptance-criteria/SKILL.md apps/ai-logic-layer/skills/grill-me-job-story/SKILL.md apps/ai-logic-layer/skills/grill-me-smart/SKILL.md apps/ai-logic-layer/skills/grill-me-user-story/SKILL.md apps/ai-logic-layer/skills/task-readiness-checklist/SKILL.md apps/ai-logic-layer/src/mastra/agents/grill-agent.ts apps/ai-logic-layer/src/mastra/agents/task-evaluator-agent.ts apps/ai-logic-layer/src/mastra/agents/task-manager-agent.ts apps/ai-logic-layer/src/mastra/agents/translator-agent.ts apps/ai-logic-layer/src/mastra/index.ts apps/ai-logic-layer/src/mastra/memory.ts apps/ai-logic-layer/src/mastra/schemas/pipeline.ts apps/ai-logic-layer/src/mastra/schemas/rating.ts apps/ai-logic-layer/src/mastra/storage.ts apps/ai-logic-layer/src/mastra/workflows/inference.ts apps/ai-logic-layer/src/mastra/workflows/stack-1-result-control.ts apps/ai-logic-layer/src/mastra/workflows/steps/compile.ts apps/ai-logic-layer/src/mastra/workflows/steps/exit-rubrics.ts apps/ai-logic-layer/src/mastra/workflows/steps/init-step.ts apps/ai-logic-layer/src/mastra/workflows/steps/round-prompts.ts apps/ai-logic-layer/src/mastra/workflows/steps/round-step.ts apps/ai-logic-layer/src/mastra/workflows/steps/translator.ts apps/ai-logic-layer/tsconfig.json apps/presentation-layer/.env.example apps/presentation-layer/.gitignore apps/presentation-layer/Dockerfile apps/presentation-layer/README.md apps/presentation-layer/app/api/ai-log/route.ts apps/presentation-layer/app/api/assistant/route.ts apps/presentation-layer/app/api/business-logos/[id]/route.ts apps/presentation-layer/app/api/business-logos/route.ts apps/presentation-layer/app/api/catalog/route.ts apps/presentation-layer/app/api/evaluate/route.ts apps/presentation-layer/app/api/grill/route.ts apps/presentation-layer/app/api/onboarding/route.ts apps/presentation-layer/app/api/proposals/[id]/decision/route.ts apps/presentation-layer/app/api/proposals/[id]/kickoff/route.ts apps/presentation-layer/app/api/proposals/[id]/milestone/confirm/route.ts apps/presentation-layer/app/api/proposals/[id]/milestone/route.ts apps/presentation-layer/app/api/proposals/[id]/route.ts apps/presentation-layer/app/api/proposals/[id]/stages/route.ts apps/presentation-layer/app/api/session/route.ts apps/presentation-layer/app/api/stages/[id]/claim/route.ts apps/presentation-layer/app/api/stages/[id]/confirm/route.ts apps/presentation-layer/app/api/stages/[id]/return/route.ts apps/presentation-layer/app/api/swipes/route.ts apps/presentation-layer/app/api/tasks/[id]/chat/route.ts apps/presentation-layer/app/api/tasks/[id]/close/route.ts apps/presentation-layer/app/api/tasks/[id]/documents/extract/route.ts apps/presentation-layer/app/api/tasks/[id]/fields/[node]/route.ts apps/presentation-layer/app/api/tasks/[id]/grill/checkpoint/route.ts apps/presentation-layer/app/api/tasks/[id]/grill/fields/[node]/route.ts apps/presentation-layer/app/api/tasks/[id]/grill/finish/route.ts apps/presentation-layer/app/api/tasks/[id]/grill/route.ts apps/presentation-layer/app/api/tasks/[id]/grill/turn/route.ts apps/presentation-layer/app/api/tasks/[id]/proposals/route.ts apps/presentation-layer/app/api/tasks/[id]/publish/route.ts apps/presentation-layer/app/api/tasks/[id]/route.ts apps/presentation-layer/app/api/tasks/[id]/score/history/route.ts apps/presentation-layer/app/api/tasks/[id]/score/route.ts apps/presentation-layer/app/api/tasks/route.ts apps/presentation-layer/app/api/teams/[id]/progress/route.ts apps/presentation-layer/app/api/teams/[id]/recommendations/route.ts apps/presentation-layer/app/api/teams/[id]/route.ts apps/presentation-layer/app/api/teams/route.ts apps/presentation-layer/app/api/workspace/proposals/[id]/decision/route.ts apps/presentation-layer/app/api/workspace/proposals/[id]/milestone/confirm/route.ts apps/presentation-layer/app/api/workspace/proposals/[id]/milestone/route.ts apps/presentation-layer/app/api/workspace/route.ts apps/presentation-layer/app/api/workspace/tasks/[id]/route.ts apps/presentation-layer/app/api/workspace/tasks/route.ts apps/presentation-layer/app/catalog/page.tsx apps/presentation-layer/app/favicon.ico apps/presentation-layer/app/layout.tsx apps/presentation-layer/app/onboarding/page.tsx apps/presentation-layer/app/page.tsx apps/presentation-layer/app/task-match/page.tsx apps/presentation-layer/app/teams/[id]/recommendations/page.tsx apps/presentation-layer/components.json apps/presentation-layer/drizzle.config.ts apps/presentation-layer/eslint.config.mjs apps/presentation-layer/next.config.ts apps/presentation-layer/package.json apps/presentation-layer/postcss.config.mjs apps/presentation-layer/proxy.ts apps/presentation-layer/public/ai-sana-logo.svg apps/presentation-layer/public/ai-sana-onboarding-poster.webp apps/presentation-layer/public/ai_sana_onboarding_video.mp4 apps/presentation-layer/public/file.svg apps/presentation-layer/public/globe.svg apps/presentation-layer/public/next.svg apps/presentation-layer/public/vercel.svg apps/presentation-layer/public/window.svg apps/presentation-layer/scripts/adr007-smoke.ts apps/presentation-layer/scripts/integration-http.ts apps/presentation-layer/scripts/seed-task-match.ts apps/presentation-layer/scripts/seed.ts apps/presentation-layer/scripts/test-backend.ts apps/presentation-layer/scripts/test-onboarding.ts apps/presentation-layer/src/_app/providers/index.tsx apps/presentation-layer/src/_app/styles/globals.css apps/presentation-layer/src/_app/ui/app-page-frame.tsx apps/presentation-layer/src/_app/ui/app-shell.tsx apps/presentation-layer/src/_pages/onboarding/index.ts apps/presentation-layer/src/_pages/onboarding/ui/onboarding-page.tsx apps/presentation-layer/src/_pages/workspace/api/assistant-client.ts apps/presentation-layer/src/_pages/workspace/index.ts apps/presentation-layer/src/_pages/workspace/ui/chat-flow.test.ts apps/presentation-layer/src/_pages/workspace/ui/chat-flow.ts apps/presentation-layer/src/_pages/workspace/ui/chat-messages.tsx apps/presentation-layer/src/_pages/workspace/ui/chat-panel.tsx apps/presentation-layer/src/_pages/workspace/ui/chat-skills.ts apps/presentation-layer/src/_pages/workspace/ui/local-ai-analysis.test.ts apps/presentation-layer/src/_pages/workspace/ui/local-ai-analysis.ts apps/presentation-layer/src/_pages/workspace/ui/new-task-dialog.tsx apps/presentation-layer/src/_pages/workspace/ui/task-navigation.tsx apps/presentation-layer/src/_pages/workspace/ui/use-chat-attachments.ts apps/presentation-layer/src/_pages/workspace/ui/workspace-page.tsx apps/presentation-layer/src/entities/.gitkeep apps/presentation-layer/src/entities/access/index.ts apps/presentation-layer/src/entities/access/model/types.ts apps/presentation-layer/src/entities/access/model/visibility.test.ts apps/presentation-layer/src/entities/access/model/visibility.ts apps/presentation-layer/src/entities/grill/model/index.ts apps/presentation-layer/src/entities/grill/model/model.test.ts apps/presentation-layer/src/entities/proposal/index.ts apps/presentation-layer/src/entities/proposal/model/compare.test.ts apps/presentation-layer/src/entities/proposal/model/compare.ts apps/presentation-layer/src/entities/proposal/model/fit.test.ts apps/presentation-layer/src/entities/proposal/model/fit.ts apps/presentation-layer/src/entities/proposal/model/transitions.ts apps/presentation-layer/src/entities/stage/index.ts apps/presentation-layer/src/entities/stage/model/portfolio.test.ts apps/presentation-layer/src/entities/stage/model/portfolio.ts apps/presentation-layer/src/entities/task-match/index.ts apps/presentation-layer/src/entities/task-match/model.ts apps/presentation-layer/src/entities/task-match/projection.ts apps/presentation-layer/src/entities/task/index.ts apps/presentation-layer/src/entities/task/model/kickoff.test.ts apps/presentation-layer/src/entities/task/model/kickoff.ts apps/presentation-layer/src/entities/task/model/level.test.ts apps/presentation-layer/src/entities/task/model/level.ts apps/presentation-layer/src/entities/task/model/nodes.ts apps/presentation-layer/src/entities/task/model/place.test.ts apps/presentation-layer/src/entities/task/model/place.ts apps/presentation-layer/src/entities/task/model/score.fixtures.ts apps/presentation-layer/src/entities/task/model/score.test.ts apps/presentation-layer/src/entities/task/model/score.ts apps/presentation-layer/src/entities/task/model/to-tile.ts apps/presentation-layer/src/entities/task/ui/task-tile.tsx apps/presentation-layer/src/entities/team/index.ts apps/presentation-layer/src/entities/team/model/fit.test.ts apps/presentation-layer/src/entities/team/model/fit.ts apps/presentation-layer/src/entities/team/model/types.ts apps/presentation-layer/src/entities/workspace/api.ts apps/presentation-layer/src/entities/workspace/assistant.ts apps/presentation-layer/src/entities/workspace/business-logo.ts apps/presentation-layer/src/entities/workspace/chat-contracts.ts apps/presentation-layer/src/entities/workspace/contracts.test.ts apps/presentation-layer/src/entities/workspace/contracts.ts apps/presentation-layer/src/entities/workspace/demo-data.ts apps/presentation-layer/src/entities/workspace/grill.ts apps/presentation-layer/src/entities/workspace/index.ts apps/presentation-layer/src/entities/workspace/model.test.ts apps/presentation-layer/src/entities/workspace/model.ts apps/presentation-layer/src/entities/workspace/task-scope.test.ts apps/presentation-layer/src/entities/workspace/task-scope.ts apps/presentation-layer/src/features/.gitkeep apps/presentation-layer/src/features/ai-log/api/get-ai-log.ts apps/presentation-layer/src/features/catalog/api/get-catalog.ts apps/presentation-layer/src/features/catalog/index.ts apps/presentation-layer/src/features/catalog/model/sort.test.ts apps/presentation-layer/src/features/catalog/model/sort.ts apps/presentation-layer/src/features/catalog/ui/catalog-view.tsx apps/presentation-layer/src/features/close-task/api/close-task.ts apps/presentation-layer/src/features/close-task/index.ts apps/presentation-layer/src/features/decide-proposal/api/decide-proposal.ts apps/presentation-layer/src/features/decide-proposal/api/list-proposals.ts apps/presentation-layer/src/features/decide-proposal/index.ts apps/presentation-layer/src/features/demo-role-switch/api/switch-demo-role.ts apps/presentation-layer/src/features/demo-role-switch/index.server.ts apps/presentation-layer/src/features/demo-role-switch/index.ts apps/presentation-layer/src/features/demo-role-switch/ui/demo-role-bar.tsx apps/presentation-layer/src/features/demo-role-switch/ui/demo-role-switch.tsx apps/presentation-layer/src/features/grill/README.md apps/presentation-layer/src/features/grill/api/service.ts apps/presentation-layer/src/features/onboarding/index.ts apps/presentation-layer/src/features/onboarding/ui/onboarding-form.tsx apps/presentation-layer/src/features/onboarding/ui/onboarding-screen.tsx apps/presentation-layer/src/features/onboarding/ui/onboarding-video.tsx apps/presentation-layer/src/features/onboarding/ui/onboarding.module.css apps/presentation-layer/src/features/recommendations/api/get-recommendations.ts apps/presentation-layer/src/features/recommendations/api/set-view-mode.ts apps/presentation-layer/src/features/recommendations/index.ts apps/presentation-layer/src/features/recommendations/model/rank.test.ts apps/presentation-layer/src/features/recommendations/model/rank.ts apps/presentation-layer/src/features/recommendations/ui/deck.tsx apps/presentation-layer/src/features/recommendations/ui/grid.tsx apps/presentation-layer/src/features/recommendations/ui/missing-info-dialog.tsx apps/presentation-layer/src/features/recommendations/ui/recommendations-view.tsx apps/presentation-layer/src/features/recommendations/ui/task-actions.tsx apps/presentation-layer/src/features/stage-progress/api/queries.ts apps/presentation-layer/src/features/stage-progress/api/stage-progress.ts apps/presentation-layer/src/features/stage-progress/index.ts apps/presentation-layer/src/features/student-catalog/index.ts apps/presentation-layer/src/features/student-catalog/ui/student-catalog.tsx apps/presentation-layer/src/features/submit-proposal/api/submit-proposal.ts apps/presentation-layer/src/features/submit-proposal/index.ts apps/presentation-layer/src/features/swipe/api/record-swipe.ts apps/presentation-layer/src/features/swipe/index.ts apps/presentation-layer/src/features/swipe/ui/use-swipe.ts apps/presentation-layer/src/features/task-card/api/access.ts apps/presentation-layer/src/features/task-card/api/get-score.ts apps/presentation-layer/src/features/task-card/api/load-score-card.ts apps/presentation-layer/src/features/task-card/api/open-blocks.ts apps/presentation-layer/src/features/task-card/api/read-task.ts apps/presentation-layer/src/features/task-card/api/recalculate-score.integration.test.ts apps/presentation-layer/src/features/task-card/api/recalculate-score.ts apps/presentation-layer/src/features/task-card/index.ts apps/presentation-layer/src/features/task-documents/index.ts apps/presentation-layer/src/features/task-documents/model/documents.test.ts apps/presentation-layer/src/features/task-documents/model/documents.ts apps/presentation-layer/src/features/task-documents/model/task-documents-provider.tsx apps/presentation-layer/src/features/task-documents/model/use-task-documents.ts apps/presentation-layer/src/features/task-documents/ui/task-documents-panel.tsx apps/presentation-layer/src/features/task-editor/index.ts apps/presentation-layer/src/features/task-editor/ui/task-editor.tsx apps/presentation-layer/src/features/task-inspector/index.ts apps/presentation-layer/src/features/task-inspector/ui/task-inspector.tsx apps/presentation-layer/src/features/task-match/api/http.ts apps/presentation-layer/src/features/task-match/api/proposals.ts apps/presentation-layer/src/features/task-match/api/tasks.ts apps/presentation-layer/src/features/task-match/ui/task-match-flow.tsx apps/presentation-layer/src/features/team-picker/index.ts apps/presentation-layer/src/features/team-picker/ui/team-picker.tsx apps/presentation-layer/src/server/workspace/business-logos.test.ts apps/presentation-layer/src/server/workspace/business-logos.ts apps/presentation-layer/src/server/workspace/chat.test.ts apps/presentation-layer/src/server/workspace/chat.ts apps/presentation-layer/src/server/workspace/documents.ts apps/presentation-layer/src/server/workspace/http.ts apps/presentation-layer/src/server/workspace/service.ts apps/presentation-layer/src/shared/api/actor.ts apps/presentation-layer/src/shared/api/assistant-route.ts apps/presentation-layer/src/shared/api/assistant.test.ts apps/presentation-layer/src/shared/api/contracts/ai-log.ts apps/presentation-layer/src/shared/api/contracts/assistant.ts apps/presentation-layer/src/shared/api/contracts/catalog.ts apps/presentation-layer/src/shared/api/contracts/common.ts apps/presentation-layer/src/shared/api/contracts/fields.ts apps/presentation-layer/src/shared/api/contracts/grill.ts apps/presentation-layer/src/shared/api/contracts/index.ts apps/presentation-layer/src/shared/api/contracts/proposals.ts apps/presentation-layer/src/shared/api/contracts/recommendations.ts apps/presentation-layer/src/shared/api/contracts/resource-id.ts apps/presentation-layer/src/shared/api/contracts/score.ts apps/presentation-layer/src/shared/api/contracts/stages.ts apps/presentation-layer/src/shared/api/contracts/swipes.ts apps/presentation-layer/src/shared/api/contracts/task-match.ts apps/presentation-layer/src/shared/api/contracts/tasks.ts apps/presentation-layer/src/shared/api/errors.ts apps/presentation-layer/src/shared/api/flow-route.ts apps/presentation-layer/src/shared/api/handler.ts apps/presentation-layer/src/shared/api/mastra.ts apps/presentation-layer/src/shared/api/route-response.ts apps/presentation-layer/src/shared/components/ai-elements/agent.tsx apps/presentation-layer/src/shared/components/ai-elements/artifact.tsx apps/presentation-layer/src/shared/components/ai-elements/attachments.tsx apps/presentation-layer/src/shared/components/ai-elements/audio-player.tsx apps/presentation-layer/src/shared/components/ai-elements/canvas.tsx apps/presentation-layer/src/shared/components/ai-elements/chain-of-thought.tsx apps/presentation-layer/src/shared/components/ai-elements/checkpoint.tsx apps/presentation-layer/src/shared/components/ai-elements/code-block.tsx apps/presentation-layer/src/shared/components/ai-elements/commit.tsx apps/presentation-layer/src/shared/components/ai-elements/confirmation.tsx apps/presentation-layer/src/shared/components/ai-elements/connection.tsx apps/presentation-layer/src/shared/components/ai-elements/context.tsx apps/presentation-layer/src/shared/components/ai-elements/controls.tsx apps/presentation-layer/src/shared/components/ai-elements/conversation.tsx apps/presentation-layer/src/shared/components/ai-elements/edge.tsx apps/presentation-layer/src/shared/components/ai-elements/environment-variables.tsx apps/presentation-layer/src/shared/components/ai-elements/file-tree.tsx apps/presentation-layer/src/shared/components/ai-elements/image.tsx apps/presentation-layer/src/shared/components/ai-elements/inline-citation.tsx apps/presentation-layer/src/shared/components/ai-elements/jsx-preview.tsx apps/presentation-layer/src/shared/components/ai-elements/message.tsx apps/presentation-layer/src/shared/components/ai-elements/mic-selector.tsx apps/presentation-layer/src/shared/components/ai-elements/model-selector.tsx apps/presentation-layer/src/shared/components/ai-elements/node.tsx apps/presentation-layer/src/shared/components/ai-elements/open-in-chat.tsx apps/presentation-layer/src/shared/components/ai-elements/package-info.tsx apps/presentation-layer/src/shared/components/ai-elements/panel.tsx apps/presentation-layer/src/shared/components/ai-elements/persona.tsx apps/presentation-layer/src/shared/components/ai-elements/plan.tsx apps/presentation-layer/src/shared/components/ai-elements/prompt-input.tsx apps/presentation-layer/src/shared/components/ai-elements/queue.tsx apps/presentation-layer/src/shared/components/ai-elements/reasoning.tsx apps/presentation-layer/src/shared/components/ai-elements/sandbox.tsx apps/presentation-layer/src/shared/components/ai-elements/schema-display.tsx apps/presentation-layer/src/shared/components/ai-elements/shimmer.tsx apps/presentation-layer/src/shared/components/ai-elements/snippet.tsx apps/presentation-layer/src/shared/components/ai-elements/sources.tsx apps/presentation-layer/src/shared/components/ai-elements/speech-input.tsx apps/presentation-layer/src/shared/components/ai-elements/stack-trace.tsx apps/presentation-layer/src/shared/components/ai-elements/suggestion.tsx apps/presentation-layer/src/shared/components/ai-elements/task.tsx apps/presentation-layer/src/shared/components/ai-elements/terminal.tsx apps/presentation-layer/src/shared/components/ai-elements/test-results.tsx apps/presentation-layer/src/shared/components/ai-elements/tool.tsx apps/presentation-layer/src/shared/components/ai-elements/toolbar.tsx apps/presentation-layer/src/shared/components/ai-elements/transcription.tsx apps/presentation-layer/src/shared/components/ai-elements/voice-selector.tsx apps/presentation-layer/src/shared/components/ai-elements/web-preview.tsx apps/presentation-layer/src/shared/components/ai-sana-logo.module.css apps/presentation-layer/src/shared/components/ai-sana-logo.tsx apps/presentation-layer/src/shared/components/icon-action.tsx apps/presentation-layer/src/shared/components/theme-toggle.tsx apps/presentation-layer/src/shared/components/ui/accordion.tsx apps/presentation-layer/src/shared/components/ui/alert-dialog.tsx apps/presentation-layer/src/shared/components/ui/alert.tsx apps/presentation-layer/src/shared/components/ui/aspect-ratio.tsx apps/presentation-layer/src/shared/components/ui/attachment.tsx apps/presentation-layer/src/shared/components/ui/avatar.tsx apps/presentation-layer/src/shared/components/ui/badge.tsx apps/presentation-layer/src/shared/components/ui/breadcrumb.tsx apps/presentation-layer/src/shared/components/ui/bubble.tsx apps/presentation-layer/src/shared/components/ui/button-group.tsx apps/presentation-layer/src/shared/components/ui/button.tsx apps/presentation-layer/src/shared/components/ui/calendar.tsx apps/presentation-layer/src/shared/components/ui/card.tsx apps/presentation-layer/src/shared/components/ui/carousel.tsx apps/presentation-layer/src/shared/components/ui/chart.tsx apps/presentation-layer/src/shared/components/ui/checkbox.tsx apps/presentation-layer/src/shared/components/ui/collapsible.tsx apps/presentation-layer/src/shared/components/ui/combobox.tsx apps/presentation-layer/src/shared/components/ui/command.tsx apps/presentation-layer/src/shared/components/ui/context-menu.tsx apps/presentation-layer/src/shared/components/ui/dialog.tsx apps/presentation-layer/src/shared/components/ui/direction.tsx apps/presentation-layer/src/shared/components/ui/drawer.tsx apps/presentation-layer/src/shared/components/ui/dropdown-menu.tsx apps/presentation-layer/src/shared/components/ui/empty.tsx apps/presentation-layer/src/shared/components/ui/field.tsx apps/presentation-layer/src/shared/components/ui/hover-card.tsx apps/presentation-layer/src/shared/components/ui/input-group.tsx apps/presentation-layer/src/shared/components/ui/input-otp.tsx apps/presentation-layer/src/shared/components/ui/input.tsx apps/presentation-layer/src/shared/components/ui/item.tsx apps/presentation-layer/src/shared/components/ui/kbd.tsx apps/presentation-layer/src/shared/components/ui/label.tsx apps/presentation-layer/src/shared/components/ui/marker.tsx apps/presentation-layer/src/shared/components/ui/menubar.tsx apps/presentation-layer/src/shared/components/ui/message-scroller.tsx apps/presentation-layer/src/shared/components/ui/message.tsx apps/presentation-layer/src/shared/components/ui/native-select.tsx apps/presentation-layer/src/shared/components/ui/navigation-menu.tsx apps/presentation-layer/src/shared/components/ui/pagination.tsx apps/presentation-layer/src/shared/components/ui/popover.tsx apps/presentation-layer/src/shared/components/ui/progress.tsx apps/presentation-layer/src/shared/components/ui/questionnaire.tsx apps/presentation-layer/src/shared/components/ui/radio-group.tsx apps/presentation-layer/src/shared/components/ui/resizable.tsx apps/presentation-layer/src/shared/components/ui/scroll-area.tsx apps/presentation-layer/src/shared/components/ui/select.tsx apps/presentation-layer/src/shared/components/ui/separator.tsx apps/presentation-layer/src/shared/components/ui/sheet.tsx apps/presentation-layer/src/shared/components/ui/sidebar.tsx apps/presentation-layer/src/shared/components/ui/skeleton.tsx apps/presentation-layer/src/shared/components/ui/slider.tsx apps/presentation-layer/src/shared/components/ui/sonner.tsx apps/presentation-layer/src/shared/components/ui/spinner.tsx apps/presentation-layer/src/shared/components/ui/switch.tsx apps/presentation-layer/src/shared/components/ui/table.tsx apps/presentation-layer/src/shared/components/ui/tabs.tsx apps/presentation-layer/src/shared/components/ui/textarea.tsx apps/presentation-layer/src/shared/components/ui/toggle-group.tsx apps/presentation-layer/src/shared/components/ui/toggle.tsx apps/presentation-layer/src/shared/components/ui/tooltip.tsx apps/presentation-layer/src/shared/config/demo-actors.ts apps/presentation-layer/src/shared/db/index.ts apps/presentation-layer/src/shared/db/migrations/20260923080214_pretty_nick_fury.sql apps/presentation-layer/src/shared/db/migrations/20260923104322_task_match_workspace.sql apps/presentation-layer/src/shared/db/migrations/20260923112428_onboarding_business_logo.sql apps/presentation-layer/src/shared/db/migrations/20260923113557_task_match_integration.sql apps/presentation-layer/src/shared/db/migrations/meta/20260923080214_snapshot.json apps/presentation-layer/src/shared/db/migrations/meta/20260923104322_snapshot.json apps/presentation-layer/src/shared/db/migrations/meta/20260923112428_snapshot.json apps/presentation-layer/src/shared/db/migrations/meta/20260923113557_snapshot.json apps/presentation-layer/src/shared/db/migrations/meta/_journal.json apps/presentation-layer/src/shared/db/schema.ts apps/presentation-layer/src/shared/db/seed.ts apps/presentation-layer/src/shared/db/seed/task-match-seed.ts apps/presentation-layer/src/shared/hooks/use-async-action.ts apps/presentation-layer/src/shared/hooks/use-mobile.ts apps/presentation-layer/src/shared/hooks/use-speech-input.ts apps/presentation-layer/src/shared/lib/demo-actor.server.ts apps/presentation-layer/src/shared/lib/demo-actor.test.ts apps/presentation-layer/src/shared/lib/demo-actor.ts apps/presentation-layer/src/shared/lib/keyboard-shortcuts.ts apps/presentation-layer/src/shared/lib/request-error.ts apps/presentation-layer/src/shared/lib/speech-recognition.test.ts apps/presentation-layer/src/shared/lib/speech-recognition.ts apps/presentation-layer/src/shared/lib/utils.ts apps/presentation-layer/tests/legacy/README.md apps/presentation-layer/tests/legacy/adr009-prototype.ts.disabled apps/presentation-layer/tsconfig.json apps/workers/.env.example apps/workers/.gitignore apps/workers/Dockerfile apps/workers/package.json apps/workers/src/index.ts apps/workers/tsconfig.json bun.lock docker-compose.dev.yml docker-compose.prod.yml docs/ARCHITECTURE.md docs/DEPLOYMENT.md docs/TASK_MATCH_MVP_SPEC.md docs/TASK_MATCH_PLATFORM.md docs/adr/001-dependency-security-fixes.md docs/adr/002-module-boundaries-sync-bff.md docs/adr/002-stack1-result-control-pipeline.md docs/adr/002-workspace-icons.md docs/adr/003-ai-layer-contract.md docs/adr/003-task-readiness-evaluator.md docs/adr/004-grill-state-and-field-lifecycle.md docs/adr/005-deterministic-scoring-and-history.md docs/adr/006-recommendations-and-catalog.md docs/adr/007-proposals-match-stages-points.md docs/adr/008-demo-roles-and-access.md docs/adr/009-bff-api-contract.md docs/adr/010-acceptance-verification.md docs/adr/011-interactive-task-manager-assistant.md docs/adr/2026-09-23-pr12-task-match-integration.md docs/adr/2026-09-23-pr15-task-match-integration.md docs/adr/2026-09-23-task-match-integration.md docs/adr/2026-09-23-task-match-schema-integration.md docs/adr/2026-09-23-workspace-persistence.md docs/adr/README.md docs/adr/implementation-prompts/001-dependency-security-fixes.md docs/adr/implementation-prompts/002-module-boundaries-sync-bff.md docs/adr/implementation-prompts/003-ai-layer-contract.md docs/adr/implementation-prompts/004-grill-state-and-field-lifecycle.md docs/adr/implementation-prompts/005-deterministic-scoring-and-history.md docs/adr/implementation-prompts/006-recommendations-and-catalog.md docs/adr/implementation-prompts/007-proposals-match-stages-points.md docs/adr/implementation-prompts/008-demo-roles-and-access.md docs/adr/implementation-prompts/009-bff-api-contract.md docs/adr/implementation-prompts/010-acceptance-verification.md docs/adr/implementation-prompts/README.md docs/adr/notes/009-implementation.md docs/adr/template.md doctor.sh install-skills.sh memory-bank.md memory-bank/activeContext.md memory-bank/productContext.md memory-bank/progress.md memory-bank/projectbrief.md memory-bank/systemPatterns.md memory-bank/techContext.md package.json packages/eslint-config/README.md packages/eslint-config/base.js packages/eslint-config/next.js packages/eslint-config/package.json packages/eslint-config/react-internal.js packages/typescript-config/base.json packages/typescript-config/nextjs.json packages/typescript-config/package.json packages/typescript-config/react-library.json patches/@ai-sdk%[email protected] scripts/dev.sh scripts/hackathon-guide.md scripts/prod.sh scripts/setup-polymath.mjs scripts/stack-versions.json scripts/start.mjs setup-polymath.sh setup-skills.sh skills-lock.json start.sh tests/dependency-security.test.mjs turbo.json
Ветки (21)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.