ClaudeMods
☰
EN
● 0 online · Views 0 times
SponsorsSubmit a project
GitHub repositories · by TransmuteLabs

catalyst-swe-request

Request-text policy for devin/swe-2: registers one rule in the host's $.requestText noun.

TransmuteLabs@TransmuteLabs

TransmuteLabs/Catalyst/tree/main/plugins/catalyst-swe-request

Translated

About this mod

Request-text policy for devin/swe-2: registers one rule in the host's $.requestText noun.

Installation

Check the author's README for the marketplace and plugin name first. Commands may change as the repository evolves.

claude plugin marketplace add TransmuteLabs/Catalyst
claude plugin install catalyst-swe-request
Original text / README

catalyst-swe-request

Политика текста запроса для модели devin/swe-2. На session.start плагин регистрирует в ноуне $.requestText ОДНО правило: четыре замены по целым строкам (три варианта стандартной самопрезентации Claude Code → «You are a coding agent.», удаление пункта «The most recent Claude models are …» вместе с переводом строки) и две литеральные замены (форма про эмодзи; сокращение описания инструмента Read). Вся политика живёт здесь данными (RULE в hooks/register.ts); переписывающий движок — в хосте.

Ноун — хостовый

$.requestText предоставляет ХОСТ (пропатченный Claude Code, дверь врезает шаг 34 патча; с 2.1.280 политики в образе нет), не этот плагин. Поле types в .claude-plugin/plugin.json отсутствует: плагин — потребитель ноуна, не поставщик. Аугментация declare module 'claude-code' { interface EngineInterface { requestText } } на издании 2.1.287 измерена так (usbox, бинарник /Users/maratkarimov/.local/share/claude/versions/2.1.287, код 0):

plugin validate --strict plugins/catalyst-swe-request
Validating plugin manifest: …/.claude-plugin/plugin.json
Validating hooks: …/hooks/hooks.json
  ❯ ./register.ts hooks: session.start
  ❯ ./register.ts calls: $.requestText.register, $.ui.log
✔ Validation passed

Поведение при отсутствии двери

Если в хосте ноуна нет, $.requestText.register бросает; catch пишет в $.ui.log именованную строку catalyst-swe-request: requestText unavailable: <причина> и перебрасывает отказ. Вызов логгера обёрнут своим try — если сломан и сам канал лога, наружу всё равно уходит ИСХОДНАЯ причина, а не отказ логгера. Брошенное из session.start сессию не обрывает: сессия идёт на стоковом тексте запроса, а именованная строка остаётся в debug-логе. Молчаливого проглатывания нет.

Зубы

CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 claude plugin test <путь к этому каталогу>

tests/behavior.test.ts держит 20 тестов:

  • форма правила — модель devin/swe-2, ровно шесть op, у каждой ровно один из ключей find / pattern, каждый pattern компилируется со своими флагами, flags стоят только у pattern-op;
  • поведение всех шести операций на реплике применителя (tests/applier-replica.ts): три якорных варианта переписывают ЦЕЛУЮ строку, не трогают ту же фразу с префиксом на строке и сохраняют \r\n в CRLF-тексте; строка «The most recent Claude models are …» удаляется в четырёх формах (LF, CRLF, первой строкой текста, последней строкой без терминатора); литерал про эмодзи заменяется, соседний текст цел; правило Read применяется только к инструменту с name === "Read";
  • всё правило целиком на теле { model, system, tools } — и со system-строкой, и со system-массивом блоков (неизменённый блок остаётся тем же объектом), и с чужой моделью (тело не трогается);
  • порядок трёх якорных вариантов свободен — перестановка не меняет результат (контракт DOOR-DESIGN.md:78-79);
  • путь обращения к ноуну — Proxy записывает полный путь, он обязан быть ровно requestText.register, и операция зовётся один раз;
  • проброс отказа — отказ ноуна реджектит вызов, next не зовётся, в ui.log уходит именованная строка; на успешной ветке next зовётся ровно один раз и его результат возвращается;
  • неизменяемость входных структур — правило без tool-op не пересоздаёт массив tools, правило без system-op не пересоздаёт массив system, не совпавший по имени инструмент и неизменённый блок остаются ТЕМИ ЖЕ объектами (реплика копирует ветвления дома __ctlSys/__ctlTools);
  • бросок самого логгера не отменяет ни броска, ни его причины;
  • SHA-256-пин текста политики — канонизированное представление RULE (ключи op в фиксированном порядке, массив op отсортирован) сверяется с константой в тесте: шесть строк политики — данные, на которых замерен переход 403 → 200.

tests/applier-replica.ts — реплика переписывающего движка хоста (канонный дом поведения — Catalyst-CC-Patch/tweakcc-patch.js, шаг 34, массив door), а не второй движок: расхождение реплики с домом — дефект.

Валидация манифеста:

claude plugin validate <путь к этому каталогу> --strict

Similar projects