neuron-explorer
Steering-first neuron explorer for Qwen3.5-4B: push every MLP neuron, keep every rollout, browse the results
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Редактор запросов 1С на Next.js и Monaco: подсветка, форматирование, структура пакета, ИИ-помощник
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Веб-редактор текста запросов 1С:Предприятия 8 на Next.js и Monaco Editor. Откройте http://localhost:3000. Образ (standalone-сборка Next.js, Dockerfile) собирает GitHub Actions при каждом пуше в master и публикует в ghcr.io/musabiii/queryeditormonaco — на сервере сборки нет, нужна только загрузка. Контейнер queryeditor подключается к внешней сети nginx-net, порт наружу не публикуется — к нему обращается nginx из своего контейнера:檢視完整 README ↗
Веб-редактор текста запросов 1С:Предприятия 8 на Next.js и Monaco Editor.
Таблица, набранная в списке полей, сразу присоединяется левым соединением с подобранным условием:
Псевдоним, изменённый после «КАК», меняется во всём запросе:
npm install
npm run dev
Откройте http://localhost:3000.
Образ (standalone-сборка Next.js, Dockerfile) собирает GitHub Actions при каждом пуше в master
и публикует в ghcr.io/musabiii/queryeditormonaco — на сервере сборки нет, нужна только загрузка.
Контейнер queryeditor подключается к внешней сети nginx-net, порт наружу не публикуется —
к нему обращается nginx из своего контейнера:
docker network create nginx-net # если сети ещё нет
docker compose pull && docker compose up -d
Кнопка «Поделиться» сохраняет запрос и даёт ссылку https://сайт/<id> — как pastebin: запрос
хранится 30 дней файлом в томе queryeditor-data (SHARE_DIR=/app/data/shares) и переживает
обновления образа; не больше 200 КБ на запрос и 30 ссылок в час с одного адреса. На Vercel
ссылки недоступны — там файлы между запросами не сохраняются.
Аналитика на своём сервере — Яндекс Метрика: номер счётчика задаётся переменной
YANDEX_METRIKA_ID (например, в файле .env рядом с docker-compose.yml), пересобирать образ
не нужно — после изменения docker compose up -d. Вебвизор выключен: он записывал бы тексты
запросов из редактора. На Vercel работает Vercel Analytics.
Вместо Метрики или вместе с ней — Umami на своём сервере: переменные
UMAMI_URL (адрес Umami, например https://umami.musabii.dev), UMAMI_WEBSITE_ID (идентификатор
сайта из настроек Umami) и необязательная UMAMI_DOMAINS (query.musabii.dev — не считать
запуски на localhost). Кроме посещений отправляются события (src/lib/analytics.ts): «Поделиться»,
«Форматирование», «Текст для кода 1С», «Убрать оформление кода 1С», «Очистить», «ИИ-помощник»,
«Проверка синтаксиса», «Цветовая схема», «Конфигурация» (название типовой или «своя»), «Загрузка
своей конфигурации». Тексты запросов не отправляются.
Пакет в GitHub Container Registry по умолчанию приватный: либо сделайте его публичным
(страница пакета → Package settings → Change visibility), либо войдите на сервере
docker login ghcr.io с токеном, у которого есть право read:packages.
location / {
proxy_pass http://queryeditor:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
Ответы ИИ-помощника идут потоком; маршрут /api/ai/chat отдаёт X-Accel-Buffering: no, поэтому
nginx не копит их целиком. Запросы к провайдерам ИИ делает сервер — с сервера в РФ API OpenAI,
Anthropic и Google, скорее всего, недоступны.
Monaco без CDN. Скрипт scripts/copy-monaco.mjs копирует сборку monaco-editor/min/vs
в public/monaco (запускается на postinstall, predev, prebuild; папка в .gitignore).
Интерфейс редактора — на русском (src/lib/monaco-loader.ts).
Язык sdbl (src/lib/query-language/):
vocabulary.ts — ключевые слова, функции, типы, объекты метаданных, виртуальные таблицы
в русском и английском написании;grammar.ts — токенизатор Monarch и настройки языка (комментарии //, скобки, автозакрытие);themes.ts — темы Monaco, построенные из цветовых схем src/lib/color-schemes.ts;lexer.ts — лексер для разбора текста вне Monaco;batch.ts — разбор пакета на запросы для панели «Структура запроса»;formatter.ts — форматирование в стиле конструктора запросов (Shift+Alt+F).Цветовые схемы (src/lib/color-schemes.ts): 1С (классическая), VS Code Light/Dark (по умолчанию — по теме системы),
GitHub Light/Dark, Solarized Light/Dark, Dracula, One Dark, Monokai, Nord, Tokyo Night.
Схема задаёт цвета подсветки, редактора и интерфейса; новая схема — одна запись в этом файле.
Метаданные конфигурации (src/lib/metadata/): кнопка «Конфигурации» загружает выгрузку
конфигурации в XML (Конфигуратор → «Выгрузить конфигурацию в файлы»). Из выгрузки читаются только
Configuration.xml, описания объектов верхнего уровня (Catalogs/Имя.xml и т.п.) и предопределённые
элементы справочников и планов (Catalogs/Имя/Ext/Predefined.xml), разбор идёт
в Web Worker собственным разборщиком XML (xml.ts), модель сохраняется в IndexedDB браузера —
файлы никуда не отправляются. Выгрузка ЗУП 3.1 (≈2300 файлов, 65 МБ) разбирается за ~3 с
в модель 5,2 МБ.
Встроенные типовые конфигурации (public/configurations/): готовые сжатые модели, которые
всегда доступны в списке «Конфигурации» и скачиваются при первом выборе. Сейчас это
«Зарплата и управление персоналом» 3.1.20.97, «Медицина. Больница» 2.0.16.1,
«1С:Университет ПРОФ» 2.2.15.20 и «Управление торговлей» 11.5.27.95.
Добавить или обновить (выгрузки лежат в confexample/, папка исключена из git, ESLint, tsc и образа Docker):
Подсветка учитывает контекст: после точки идёт имя поля (Док.Ссылка, Т.Количество),
после КАК — псевдоним или тип, функции выделяются только перед скобкой (СУММА(...)),
ССЫЛКА считается оператором, только если справа путь к метаданным.
| и удвоенные кавычкиnpm run configuration:build -- confexample/<папка выгрузки> --slug zup
Скрипт сохраняет <slug>-<версия>.json.gz и обновляет manifest.json; прежняя версия с тем же
slug заменяется. Пересобранную модель браузер скачает заново: кэш сверяется с датой сборки в манифесте.
Проверка синтаксиса (syntax-check.ts, syntax.worker.ts, src/components/syntax-markers.ts): по
грамматике SDBL из 1c-syntax/bsl-parser (grammar/sdbl,
LGPL-3.0-or-later; разборщик генерирует ANTLR — npm run grammar:build). Через 0,6 с после паузы в наборе
текст разбирается в фоновом потоке, ошибки подчёркиваются красным, а их текст виден в конце строки
красным курсивом, как комментарий // … (в сам запрос не попадает); по одной на запрос пакета,
повторно разбираются только изменённые запросы. В строке состояния — «Ошибок: N» (клик и F8 — к следующей),
на панели команд — переключатель проверки (запоминается). С ошибкой форматирование не выполняется.
npm run syntax:corpus -- <выгрузка> прогоняет проверку по запросам из модулей конфигурации: на ~21 тыс.
полных запросов трёх типовых ложных ошибок нет, остаются только шаблоны, которые код дособирает.
Автодополнение (src/lib/query-language/completion/): объекты после Справочник., виртуальные
таблицы и табличные части, поля по псевдониму с переходом по ссылкам, поля временных таблиц
и вложенных запросов, значения перечислений и предопределённые элементы (ЗНАЧЕНИЕ(Справочник.Вид.);
без точки — псевдонимы, ключевые слова, функции. Реквизит, выбранный из списка в новом поле ВЫБРАТЬ,
вставляется сразу с именем: С.Наименование КАК Наименование (ГоловнаяОрганизацияНаименование для
С.ГоловнаяОрганизация.Наименование, Наименование1 при повторе), как у конструктора. В условии ГДЕ (после ГДЕ,
И, ИЛИ, НЕ) выбранный реквизит вставляется как Т.Поле = и сразу открывается список значений. После ВЫБРАТЬ и СГРУППИРОВАТЬ ПО (и запятой в их списках),
ГДЕ, ИМЕЮЩИЕ, ПО соединения, И/ИЛИ/НЕ в этих условиях (кроме МЕЖДУ … И), КОГДА, ТОГДА, ИНАЧЕ,
а также после скобки функций вроде СУММА(, ЕСТЬNULL(, ГОД( — с пробелом, Enter или Tab сразу открывается
список псевдонимов таблиц запроса (в порядке ИЗ); выбранный дополняется точкой и списком полей. После Т.Поле = (или <>, <, >, <=, >=) и пробела — сразу
список: параметр &ИмяПоля (в условии ПО соединения вместо него — псевдонимы таблиц), для булевых — ИСТИНА и ЛОЖЬ, для ссылочных — ЗНАЧЕНИЕ(...) перечисления, предопределённые
элементы и ПустаяСсылка.
Заготовка запроса по таблице (new-query.ts, new-query-preview.ts): в блоке без запроса (или только
с ВЫБРАТЬ) набран путь Справочник.МедицинскиеКарты или имя временной таблицы пакета — под строкой серым показывается готовый запрос
ВЫБРАТЬ МедицинскиеКарты. ИЗ Справочник.МедицинскиеКарты КАК МедицинскиеКарты, курсор встаёт после
МедицинскиеКарты. и сразу открывается список реквизитов. Таблица, выбранная из списка подсказок, подставляется
сразу; набранная руками — серой заготовкой по Tab. В запросе с ИЗ набранная
в списке ВЫБРАТЬ таблица (РегистрСведений.АдресПациента) показывается серым как ЛЕВОЕ СОЕДИНЕНИЕ
с подобранным условием; Tab присоединяет её и заменяет путь псевдонимом с точкой (выбранная из списка —
присоединяется сразу). Нужна загруженная конфигурация.
Следующий запрос пакета: в конце пакета набрано /// — серым показывается разделитель на всю ширину
и ВЫБРАТЬ; Tab ставит ; после последнего запроса (если её нет), дописывает разделитель и ВЫБРАТЬ,
курсор — строкой ниже.
Связанная правка псевдонима (linked-aliases.ts): курсор на псевдониме после КАК в ИЗ — правка
сразу меняет его во всём запросе, во всех путях ФЛ.… (правка ФЛ в самом ФЛ.Поле — обычная); другие запросы пакета,
подзапросы со своими таблицами, поля вида Т.ФЛ и комментарии не затрагиваются.
Так же правится имя временной таблицы после ПОМЕСТИТЬ: оно меняется в следующих запросах пакета
(источники, УНИЧТОЖИТЬ, пути ВТ.Поле, псевдоним в ИЗ ВТ КАК ВТ) — до УНИЧТОЖИТЬ или повторного
создания таблицы с тем же именем; псевдоним другой таблицы КАК ВТ не меняется.
Подсказка группировки (group-by.ts): если в выборке есть агрегатные функции и поля вне них,
а СГРУППИРОВАТЬ ПО нет, серым текстом предлагается раздел с этими полями — когда курсор
на пустой строке в конце запроса, в начале строки с ; или следующим разделом, или в конце
последней строки ИЗ/ГДЕ. Tab вставляет, Esc или продолжение набора — отклоняет. После применения
агрегатной функции из дерева к полю та же заготовка сразу показывается серым на своём месте
в конце запроса (group-by-preview.ts), курсор остаётся на поле.
Дерево конфигурации (src/components/metadata/ConfigurationTree.tsx, smart-insert.ts):
перетаскивание вставляет имя (реквизит — с псевдонимом своей таблицы, если она уже есть в запросе
в месте вставки: Сотр.Код); двойной клик добавляет в запрос под курсором — реквизит в список
ВЫБРАТЬ, его таблицу (если её ещё нет) и таблицу целиком — ЛЕВОЕ СОЕДИНЕНИЕ с условием
по типам реквизитов (иначе ИСТИНА, выделено); без ИЗ таблица становится первым источником,
вне запроса создаётся новый. У ссылочных объектов первой идёт «Ссылка», в группе «Предопределенные» —
предопределённые элементы (вставляются как ЗНАЧЕНИЕ(...), наименование — во всплывающей подсказке).
Кнопка-воронка в заголовке оставляет только объекты, которые уже есть в тексте запроса
(used-objects.ts: источники, ЗНАЧЕНИЕ(...), ССЫЛКА, ВЫРАЗИТЬ; комментарии и строки не в счёт).
В конце дерева, как в конструкторе 1С, — «Временные таблицы» из текста (ПОМЕСТИТЬ) с их полями;
двойной клик соединяет их с таблицами запроса по общим полям ссылочного типа.
ИИ-помощник (src/lib/ai/, src/components/ai/, src/app/api/ai/): чат справа от редактора
с быстрыми действиями и вставкой ответа в редактор. Провайдеры: Anthropic (Claude) — через
@anthropic-ai/sdk; OpenAI, Google Gemini, DeepSeek, OpenRouter, Ollama и LM Studio — через
OpenAI-совместимый API (openai). Запросы идут через маршруты /api/ai/chat и /api/ai/models:
ключ хранится только в браузере (localStorage) и передаётся серверу вместе с запросом.
Галка «Реквизиты таблиц» добавляет к сообщению поля и типы таблиц конфигурации, которые есть
в запросе (table-structure.ts), — модель не придумывает имена реквизитов; повторно описание
уходит, только если изменилось.
Адреса облачных провайдеров зафиксированы на сервере; свой адрес можно указать только для
Ollama и LM Studio. Если выкладываете редактор в общий доступ, учтите: сервер будет обращаться
к указанным адресам локальных моделей от своего имени.