Исправить декодирование URL в haih-agent

Проблема

В haih-agent воспроизводится та же ошибка, что и на freecode.academy: URL со спецсимволами в percent-encoded виде могут приводить к 404, хотя соответствующая сущность существует.

Причина подтверждена: отсутствует корректное декодирование URL. В прикладном кейсе использование decodeURI решает проблему.

Что нужно сделать

  1. Найти общий участок в haih-agent, где URL/route params/slug используются для поиска сущности или сопоставления маршрута.
  2. Добавить единообразное декодирование до бизнес-логики/lookup, чтобы percent-encoded символы сравнивались с данными в ожидаемом формате.
  3. Определить точное место применения decodeURI/эквивалента так, чтобы исправление работало централизованно, а проекты на базе haih-agent не были вынуждены чинить это локально.
  4. Не допустить двойного декодирования и ошибок на уже decoded значениях.
  5. Проверить взаимодействие с URL generation/canonical URLs, чтобы encode/decode были симметричны и выполнялись ровно по одному разу на соответствующей границе.

Пример проблемного кейса

/comments/topics/dzheneriki-typescript/nu-vot-ts-tebe-govorit-%22ty-zanimaeshsya-figney%22,-i

До исправления такой URL может давать 404 из-за %22 и других encoded-символов. После декодирования должна находиться существующая страница/сущность.

Связанный SEO/GEO контекст

Эта работа стала частью более общего базиса для человекопонятных URL: haih-agent должен уметь генерировать и обслуживать стабильные slug URI, а приложения на его базе — использовать этот механизм для SEO-friendly маршрутов.

Связанная задача fi1osof.ru: Прокачать SEO/GEO

Реализация: https://github.com/haih-net/agent/commit/1f99a51dd407eb4e58f9e2f83f411a265db2f24c

Коммит не ограничивается decodeURI: он добавляет slugify URI для концептов и автоматический 301 redirect при изменении URI, то есть формирует общий фундамент для перехода приложений на ЧПУ.

Журнал

27 авг. 2026 г.

Прогресс: исправление реализовано и расширено до базиса ЧПУ

Реализация выполнена в коммите: https://github.com/haih-net/agent/commit/1f99a51dd407eb4e58f9e2f83f411a265db2f24c

Входящие URI теперь декодируются через decodeURI в ключевых местах работы с router.asPath, что устраняет ложные 404 для существующих страниц с percent-encoded символами.

Одновременно работа расширена до общего URI-базиса haih-agent: добавлена генерация slugified URI из имени концепта и автоматический 301 redirect при смене URI. Это сделано как фундамент для перехода приложений на базе haih-agent к человекопонятным URL.

Практическое продолжение — SEO/GEO fi1osof.ru, где текущие URL задач и проектов используют технические CUID. Связанная задача: Прокачать SEO/GEO.

Исправить декодирование URL в haih-agent

27 авг. 2026 г.

Уточнение по декодированию URI

После проверки выяснилось, что decodeURI(asPath) закрывает не все нужные кейсы.

Конкретный пример:

/projects/%40prisma-cms/sendmail

ожидается как:

/projects/@prisma-cms/sendmail

Но decodeURI() оставляет %40, потому что @ относится к зарезервированным URI-символам и целый URI декодируется не полностью.

Для URI сущностей корректнее обрабатывать путь по сегментам:

  1. Сначала разделить pathname по /, сохранив структуру маршрута.
  2. Каждый сегмент отдельно пропустить через decodeURIComponent().
  3. Собрать путь обратно.

Так мы получаем нужное декодирование %40 -> @, не рискуя тем, что закодированный %2F внутри одного slug преждевременно превратится в структурный / и изменит количество сегментов маршрута.

То есть целевая логика должна быть segment-aware, например концептуально:

const uri = pathname
  .split('/')
  .map(segment => decodeURIComponent(segment))
  .join('/')

Это также симметрично текущей реализации slugifyUri(), которая уже работает по сегментам.

Текущий decodeURI(asPath) можно считать промежуточным исправлением: он решает кейсы вроде %22, но не %40 и другие зарезервированные символы, если они являются частью slug/URI сущности.

Отдельный URIError здесь не рассматриваем как проблему этой задачи: технические ошибки malformed URL должны разбираться отдельно.

Исправить декодирование URL в haih-agent

Написать мне