Галоўная / Артыкулы

Чаму модульны монарэпазіторый пасуе агентам кадавання: бачыць усё, мяняць мала

Мноства рэпазіторыяў асляпляе агентаў, а неструктураваны монарэпазіторый іх засыпае. Адкрыты кантэкст, інкапсуляцыя і рэальны граф залежнасцей робяць модульны монарэпазіторый зручным для агентаў.

Выдавец: REACTAPP.TOP7 хв чытання1695 слоў

Крыніцы: The Shine of the Modular Monorepo in the Agentic Era

Старая дыялогія з новымі наследкамі

Жырмы гадоў інжынеры дзеліліся на два групы. Адна з іх зберагае весь код у аднам рэпазітарыі, а другая дае кожнай часткі свой саўстанок, пры чым часта даводзіцца йдзіць на компрэсіі. Ніхто не мае абсалютна правыя адпаведзі, а тые, хто так стверджуе, зазвычай выводзяць своія мненні з аднаго праекту. Калі запытаць, калі лепшая монорэпазітарыя чы палірэпазітарыя, правдзівая адпаведзь — «залежыць»: ад таго, насколькі велікая сістэма, насколькі тысно ўзаінтэграваныя ўсе ўжо ў яе часткі, хто ў командзе і як часта выпускаюць новыя версіі. Калькі слабкаяя спакаяныя службы патрабуюць аддзельных рэпазітарыяў. Продукт, створаны на адной падставе спакаяных кантрактаў, вядзе ў працоўны кірас.

Агенты для кодавання падчынілі гэтыя аргументы ўсё бол актуальнымі. Як толькі агенту даюць задачу, якая абарачвае фронтэнд, спяльную бібліятэку і контракт бэкэнду, структура рэпазітарыя перастае быць прыбліжнаю. Яе наследкі праблескваюць у якасці коду, у тым, насколькі часта агенту даводзіцца здагадватыся, і у ступені яго розгубленасці. Гэты прыклад паказаны ў рамках настройкі TypeScript NX, якая падтрымлівае шасць платформ. Гэта ўзнакомлены пункт зору, і ён можа не падходзіць усім, таму чытайце яго як аднозначную думку, якая мае на мету запуск дыялогу. Чатыры словы падсумавляюць гэты тверджэнне: бачыць усё, касацца мало.

Першы бар’ер: стэны, за якімі агент не можа бачыць

Уявіце сабе свет, у якім працуюць большасць команд: адзін рэпазітарый фронтэнду, два рэпазітарыя служб бэкэнду, пакет shared-types у прыватным рэестрэ і рэпазітарый інфраструктуры. Гэтыя межы маюць сэнс, і кожны элемент мае свога власніка.

Падзірцем, агент у рэпазітарыі фронтэнду можа быць папрасованы змяніць спосаб, якім ён вызывае канцэнтры, якія належаць рэпазітарыі службы, якую ён не можа ачыць. Без прыемніка для чытання ён толькі здагадваецца, як выглядае адпаведны адпаведнік. Стары шаблон тыпу або адзін прыклад тэста стаюць яго доказамі. Рэзультат скомпілюецца на локальным камп’ютары, але, як толькі ён будзе інтэграваны, ён, шчырайша, будзе некорэктным. Кожныя межы рэпазітарыяў — гэта «стэны», за якімі агент не можа паглядзець, і ён заполняе кожную з іх правдопадобным прыпускам. Тое, што захоўвае людзей, заставляе агентав жадаць інфармацыі.

Команды заполняюць гэты прыемак трэмя основнымі спосабамі, і дзеякія з рашэнняў ўсё-такі ўзятыя ў расчыт:

  • Git submodules размешчаюць рэпазітарыі-залежнасці ўнутрь галоўнага рэпазітарыя, так што дрэва файлаў выглядае ўніфікаваным. Агент отрымае можлівасць чытаць усё гэта, але за звычную цену: коміты, якія зафіксаваны, пачынаюць змініцца, падтрымка актуальнасці стае клопатам, а рабочы працэс не задовольняе нікога.
  • Рабочыя прасторы IDE з мнагімі коранамі дазваляюць Cursor або VS Code індэксаваць калькі рэпазітарыяў разам, што падказвае, калі мета — проста чытанне ўсіх іх. Аднак такая структура належыць да адной машыны, а не да праекту, і агент атрымле велікі набор файлоў без графа залежнасцяў. Ён ведае, што код існуе, але не ведае, чыя часткі залежаць ад чаго.
  • Сінтэтычныя манорэпозітарыі ўважаюцца серйозным выборам. Напрыклад, Polygraph з NX з’еднае аддзельныя рэпазітарыі ў адны граф залежнасцяў, залішаючы код на сваім месцы. Коордынаваючы агент аналізуе гэты граф, ўбачае, да калькі рэпазітарыяў дасягае змяна, запускае агента ў кожны з іх і стварае адпаведныя запросы прыўязкі, адзначаючы пры гэму всі працэсы CI. Гэта ўсё, што можа падражнаць працэсам манорэпозітарыяў у рамках структуры полірэпозітарыяў.

Паважанне заслуговае сінтэтычны падход, але паглядзіце, што ён на самай працо выканае: ён праходзіць праз стэны, якія застаюцца стоячымі. Інжынеры вялікімі зусіллямі працуюць над інструментальным шаром, каб воссоздаць тую візуабельнасць, яку монарэпа структурна і без жадных затрат забезпечвае. А калі такіх інструментоў няма, чалавек стае «тунелем»: чытае сервіс B, перадае інформацыю агенту на сервісе A, вставляе вакласаванні ў чат і выступае як кур’ер між замкнутымі сесіямі.

Другі прыем: безструктурны накуп

Так што ўсё пераходзіць у адно рэпо, і пытанне заканчываецца? Не зовсім. Монарэпа без внутранней структуры працюе ўсё гірш, таму што ён спакушае. Усё ёсць відна, і гэта здаецца дастатнім. Насамперадзе там ёсць адны вялічэзны каталог аплікацый, бібліятэкі, якія імпортуюць адна другую з усіх бакоў, няма жадных прымусовых меж, і няма чутків, калі якая частка належыць каму.

Хутчэйш, відкрыты кантэкст шкодзіць. Агент, які бачыць усё, не мае жадных падказакоў, што трэба прыгнуць. Вікно запоўняецца кодам, які знаходзіцца поблізу на дыску і не мае значэння для задачы; адна змяна паўтараецца ў усіх імпортах, якія ніхто не стэжыў, а на вопыт, якія наследкі мае гэта змяненне, адпаведзь — «возможна ўсё». Візыбільнасць без структуры — гэта шум, а не кантэкст, і самэ гэта прычына, чаму размешчэнне всіх кодаў у аднам рэпазітарыі не ёсць правільным рашэннем.

Тры сталоўкі модульнага манорэпазітарыя

Модульны манорэпазітарый досягае успеху, выкананняю трохоў разам. Адсутнасць хоць аднай з гэтых сталоўак прыводзіць да невыкарыстання яго пераваг.

Адзёны кантэкст. Адна дрэва ўтрымвае ўсё, і агент можа пераскакваць праз яе: фронтэнд, бэкэнд, спяльныя бібліятэкі, тэсты і контракты тыпаў, якія ўсё гэта з’яеднаюць, у адной сесіі. Няма перакананняў, няма адгадванняў, няма кур’ероў. План развіцця NX насуперак усем акцэнтаваеся на гэтым аспекце, і гэта цэлкам справядліва, адколі агент, які за адну праходку чытае прадзюсара контракта і ўсіх яго спожывачаў, зможа здзейсніць лепшыя змяны.

Інкапсуляцыя. Бібліятэкі маюць частакі і адкрываюць чытальныя інтэрфейсы, таму агенту не трэба памяцаць усю сістэму. Ён працуе з часткай. Самэ гэта дазволяе, каб усё было відна, а чаго-то трэба было толькі часткова змяніць, і без гэтага адзёны кантэкст ператвараецца на проблему №2.

Праўdziва графіка залежнасцяў, з інструментамі для яе аналізу. Гэта той элемент, які людзі недаюць належнага значэння. NX спрацоўвае з графікай як з аб’ектам першага класу, які можна запытваць. Уместо пошуку і спадзянання на выведэння структуры, агент можа запусціць nx show projects, ачыніць nx graph, запытаць, якія элементы паўтараюцца пасля змян, і практычна атрымаць точную адпаведнасць, якую машына можа аналізаваць. Карта знаходзіцца ў рэпазітарыі, а не ў вікі чыяй-небудзь памяці ветэрана-інжынера, і яна ўможлівяе екзекуцыю.

Разам гэтыя элементы рашаюць задачу, выражаную чатырма словамі. Бачэнне усяго — гэта першы элемент, мінімальны вплыв — другі, а ведаць, які саме мінімальны вплыв застосавіць, — трэці, ён служыць мостам, які дазволяе безбедна спаўніць першыя два элементы.

Атрыманне і перакананне

Агенты працуюць у цыкле: запошчаюць кантэкст, зміняюць код, пераканальваюць змяны і зноў пачынаюць з самага початку. Усе меры дбайнасу пра монарэпа служаюць аднаму з двух цоў: або для даскладнага запошчання кантэксту, або для даскладнага пераканальвання дзеяння.

  • Моцныя тыпы (acquire). Спяльная бібліятэка тыпаў дае агенту контракт, які ён можа прачытаць, а кампайлер можа выкананы. эта рашае проблему «слепага агента» з першага падзея, таму што форму адпаведзення не трэба здагадваліцца, калі яна запісана і пераканальвана. Тыпы таксама служаюць дакументацыяй, якая ніколі не становіцца застарэлай.
  • Правіла стосаванняся відходжаючых нітак і меж модуляў (пераканацца). За дапамогою @nx/enforce-module-boundaries у NX забораныя імпорты выклікаюць падзею замест таго, каб працаваць таямна, а памылка падае ў власны цыкл агента як зворотны зв’язак. Калі агент під’ўязвае бібліятэку UI да шару дадзенаў, правіло адмовляе ў гэтым, і архітэктура выучваецца з гэтага нявыправлення, без таго, каб хтось яе пісаў.
  • TDD і адпаведныя тэсты (пераканацца). Команда nx affected ператварае простыя перакананні на конкрэтныя дзеянні. Пасля праверкі часткі коду агент запускае толькі тэсты, якія знаходзяцца пасля яе, і шыбка бачыць, чырвоны ў рэзультатах тэстаў чы зелены, без патрэбы чакаць на выконанне всіх тэстаў чы сумнівацца ў тым, чы праверкі працавалі правільна. Короткія цыклы робяць работу агента сэрцэвіцам будавання, а не стараннай прыглядкай.
  • Навыкі і AGENTS.md або CLAUDE.md (з’являюцца па запіту). Выкананне команды npx nx configure-ai-agents у працоўнай зоне встановляе сервер MCP, навыкі агента і файлы з правіламі. Навыкі з’являюцца па запіту, а не всі разам у запітах, таму спосаб стварэння бібліятэкі вівчаецца самэ тады, калі яе ствараюць. Яны таксама спрыяюць таму, што агент будзе запытваць граф, а не проста шукаць інфармацыю, што паўтарае трэці прынцып.
  • Інструкцыі па кожным модулю (з’являюцца па запіту). Кожная бібліятэка можа мець короткі файл README або AGENTS.md, які дае локальны кантэкст самэ там, дзе агент якраз з’явіўся. Праўеўшы да гэтай бібліятэкі, запускаюцца ўсе ўмовы і правілы, якія ў яй ёсць, без неабходнасці завантажвання рэшты структуры.
  • Калі параграфаваць спіс, то там будзе: абсалюванне, перакананне, перакананне, абсалюванне, абсалюванне, хоча парадак тут не мае значэння. Кожна можлівасць падходзіць да аднаго з двух завадзяў. Модульны монарэпа — гэта не адна функцыя для агентаў, а многія маленькія функцыі, якія робяць цыкл быстрым і эфектывным.

    Аргументы працы працы

    Ніхто не выгадвае ад прыемных пропозыцый, таму трэба вучыцься на протыпадных аргументах. Вікна кантэксту продовжваюць расшырвацца, а інструменты для мнага-корэневых рабочых прастораў і сінтэтычных манорэпаў продовжваюць зменшваць адстань. Скептык мог бы назваць прынтэль монарэпа тымчасовым наследкам ныяшніх абмежэнняў, якія знікнуць за дапамогою дастаткова большага вікна і прыемных інструментаў для працы з рознымі рэпамі. Болей точны варыант не стосуецца вікнаў. Поліграф паказвае, што граф завіснасцей можа быць перабудаваны ў рамках полірэпа, таму структура, якая часта прыпісваецца манорэпам, не можа належаць толькі ім.

    Кожная версія неправа ў тым, звядзе выходзіць корыста. Гэта ніколі не было пра чытанне большае колькасці необработанага тэксту. Гэта структура. Большыя вікна дазволяюць «загубленаму» агенту загубіцца ў болей дробных дэталях, не называючы правых дзверэй. Сінтэтычны граф таксама ёсць структурой, якая пояснюе, чаму ён працюе, але гэтая структура перабудовваецца і падтрымваецца на адной з частак, а не задаецца лейаутам. Необработаны кантэкст расце разам з модэлем, структура — разам з дысцыпліной, і структура ператварае можлівасць бачыць усё як аб’ект небяпекі на актыў. Калі вікна растуць, монарэпа, якому бяруцься модулі, становіцца болей рызыкавым, таму што «вораты» ачынаюцца шырэй. Адзьекатыв несу гэты тыягу.

    Што раскрыла эпаха агентных сістэм

    Графікі з праектамі, межы модуляў і спакушаныя тыпы калісьці здаваліся зручнасцямі для людскага калектыва. Эпа агентав адкрыла тое, чым яны былі ўсё час: інтэрфейсам для нелюдскіх саўершальнікаў. Архітэктура, створаная для людскага мышлення, апынулася інжыніерыяю кантэкста на рэвэрс-левэле, за гады до таго, як гэты тэрмін з’яўіўся. Гэта паставляе пытанне пра тое, чаму знову стаюць популярнымі не манорэпы. Модульны манорэп тыха адпаведзіў на пытанне, якое ніхто ўсё ўсё не ставіў. Бачыць усё, касацца мало, а агенты проста гэта узроўнялі.