rxjs-spy-mcp
rxjs-spy-mcp
Экспериментальный прототип отладки RxJS во время выполнения для Chrome DevTools MCP.
Этот репозиторий развивает идею, лежащую в основе rxjs-spy Николаса Джеймисона, для рабочего процесса отладки с помощью ИИ: события RxJS во время выполнения захватываются в структурированный реестр кучи, предоставляются через небольшой отладочный API и становятся читаемыми для агентов Chrome DevTools MCP.
Примечание об основном авторе
ChatGPT является основным автором этого проекта.
Архитектура, стартовая реализация на TypeScript, пользовательские отладочные операторы RxJS, MVU-демо, реестр кучи с перемещением во времени и мост Chrome DevTools MCP были созданы и доработаны с помощью ChatGPT на основе требований пользователя к отладке RxJS.
Related MCP server: Kaboom Browser AI Devtools MCP
Цель проекта
Цель пока не состоит в том, чтобы полностью заменить rxjs-spy. Это первая экспериментальная реализация модели отладки RxJS, совместимой с MCP.
Текущий прототип сосредоточен на:
типизированные отладочные операторы RxJS
демо MVU в стиле Elm
история состояний с перемещением во времени
пассивная инспекция на основе кучи
безопасное создание снимков и редактирование конфиденциальных данных
обнаружение сторонних инструментов Chrome DevTools
отладочные кадры, читаемые ИИ
Долгосрочное направление — современный рантайм rxjs-spy-mcp, который может инспектировать:
тегированные потоки
уведомления:
next,error,completeподписки и отписки
переходы MVU:
Msg -> Modelповедение внутренних подписок из
switchMap,mergeMap,concatMap,exhaustMapтрассировки времени с учётом планировщика
Ментальная модель
Observable = static dataflow description
Subscription = runtime execution
Notification = runtime event: next | error | complete
Scheduler = runtime time policy
Heap registry = durable debug memory
Chrome MCP = AI-readable inspection bridgeОтладчик превращает быстрые асинхронные события RxJS в долговечные отладочные кадры:
Msg / next / error / complete / unsubscribe
↓
spyOnHeap / spyOnMvuLoop
↓
window.__RXJS_SPY_MCP__
↓
Chrome DevTools MCP / console / debug panelУстановка
npm installЗапуск демо
npm run devОткройте локальный URL Vite, выведенный в терминале, обычно:
http://127.0.0.1:5173Пример: использование отладочной функции вручную
Запустите приложение с помощью
npm run dev.Откройте консоль DevTools в браузере.
Приложение уже должно было записать начальный переход
INIT.Изучите отслеживаемые потоки:
window.__RXJS_SPY_MCP__.listStreams()Изучите основной поток состояния MVU:
window.__RXJS_SPY_MCP__.inspectStream('main-app-state')Прочитайте только кадры временной шкалы:
window.__RXJS_SPY_MCP__.getTimeline('main-app-state', 10)Прочитайте компактную историю выполнения:
window.__RXJS_SPY_MCP__.story('main-app-state', 20)В виде таблицы:
console.table(window.__RXJS_SPY_MCP__.story('main-app-state', 20))Вывод истории превращает сырые отладочные кадры в строки, например:
INIT -> query="", active="", loading=false, results=0
SET_QUERY -> query="rxjs", active="", loading=false, results=0
START_SEARCH -> query="rxjs", active="rxjs", loading=true, results=0
SEARCH_SUCCESS -> query="rxjs", active="rxjs", loading=false, results=3Введите поисковый запрос, например
rxjs, и нажмите Search.Имитируйте сбойный асинхронный эффект, введя:
errorЗатем нажмите Search.
Снова изучите историю:
console.table(window.__RXJS_SPY_MCP__.story('main-app-state', 20))Вы должны увидеть последовательность, похожую на:
INIT
SET_QUERY
START_SEARCH
SEARCH_FAILUREКаждый кадр mvu-transition хранит:
{
action: Msg,
resultingState: Model
}Это даёт читаемую историю выполнения:
The user changed the query.
A search request started.
The async effect failed.
The model moved into an error state.
The view rendered the error.Если getTimeline('main-app-state', 20) возвращает []
Сначала выполните:
window.__RXJS_SPY_MCP__.diagnose()Затем выполните:
window.__RXJS_SPY_MCP__.listStreams()Ожидаемый результат после свежей загрузки страницы:
streamCount >= 1
streamTags includes "main-app-state"
mainStateHistorySize >= 1Также проверьте, что вы используете точное глобальное имя с двумя подчёркиваниями до и после RXJS_SPY_MCP:
window.__RXJS_SPY_MCP__а не:
window._RXJS_SPY_MCP_Если временная шкала всё ещё пуста:
git pull
npm install
npm run devТогда выполните жёсткое обновление вкладки браузера и запустите:
window.__RXJS_SPY_MCP__.diagnose()
window.__RXJS_SPY_MCP__.getTimeline('main-app-state', 20)Текущая реализация использует инициализированный BehaviorSubject<Msg> в качестве источника сообщений MVU, поэтому переход INIT должен записываться сразу при подписке на runtime.appState$ в main.ts.
Пример: визуальное перемещение во времени
Панель отладки справа показывает временную шкалу кучи.
Нажмите на любой кадр, чтобы визуально перемотать интерфейс к resultingState, сохранённому в этом кадре.
Вы также можете перейти из консоли DevTools:
window.jumpToStep(2)Важно: сейчас это визуальная перемотка, а не полное восстановление состояния на основе воспроизведения. Внутренний аккумулятор scan не перематывается. Будущая версия может добавить настоящее воспроизведение событий.
Пример: использование пользовательских операторов
Инспекция общего потока
import { interval, map, take } from 'rxjs';
import { spyOnHeap } from './debug/operators';
const counter$ = interval(1000).pipe(
take(5),
map(n => ({ count: n })),
spyOnHeap('counter-stream', { maxFrames: 10 })
);
counter$.subscribe();Затем изучите его в консоли:
window.__RXJS_SPY_MCP__.inspectStream('counter-stream')Инспекция переходов MVU
const msg$ = new BehaviorSubject<Msg>({ type: 'INIT' });
const transition$ = msg$.pipe(
scan(
(acc, msg) => ({ msg, model: update(acc.model, msg) }),
{ msg: { type: 'INIT' }, model: initialModel }
),
spyOnMvuLoop('main-app-state', { maxFrames: 80 })
);Это ключевой учебный/отладочный сценарий использования:
Msg flows in over time.
update calculates the next Model.
spyOnMvuLoop stores Msg + Model as a debug frame.Пример: рабочий процесс Chrome DevTools MCP
Этот проект регистрирует мост сторонних инструментов разработчика Chrome DevTools через событие devtoolstooldiscovery на уровне страницы.
Когда Chrome DevTools MCP подключён с включённой экспериментальной категорией сторонних инструментов, ИИ-агент может обнаруживать такие инструменты, как:
rxjs_list_streams
rxjs_inspect_stream
rxjs_get_timeline
rxjs_storyТипичный запрос для ИИ-агента:
Inspect the active browser tab with Chrome DevTools MCP. Use the rxjs-spy-mcp tools to list RxJS streams, read the main-app-state story, and explain why the latest search failed.Ожидаемое поведение агента:
1. list_3p_developer_tools
2. execute_3p_developer_tool: rxjs_list_streams
3. execute_3p_developer_tool: rxjs_story { tag: 'main-app-state', limit: 20 }
4. Explain the Msg -> Model transition that caused the bad state.Запасной подход MCP — оценка скрипта:
() => globalThis.__RXJS_SPY_MCP__.story('main-app-state', 20)Исправления, применённые к исходному прототипу
Аспект | Применённое исправление |
Концепция | Переосмыслен MCP как мост для инспекции, а не замена инструментированию RxJS во время выполнения. |
Обучающая ценность перемещения во времени в MVU | Добавлено явное отслеживание переходов |
Корректность TypeScript | Разделены типы приложения и отладки, исправлены недопустимые импорты, удалён |
Корректность Chrome MCP API | Выдуманная идея |
Полнота замены rxjs-spy | Добавлена основа для тегированных потоков, кадров уведомлений, идентификаторов подписок, отслеживания teardown и сводок потоков. Это всё ещё не полная замена rxjs-spy. |
Удобство для ИИ-агентов | Добавлены JSON-совместимые методы |
Безопасность в продакшене | Установка только для разработки, редактирование ключей, похожих на секреты, безопасная сериализация снимков, устойчивость к циклическим значениям и снимки с ограничением размера. |
Текущие ограничения
Это экспериментальный прототип. Он пока не реализует полное поведение rxjs-spy.
Отсутствующая или будущая работа:
API тегирования без monkey-patch, сопоставимый с тегами
rxjs-spyглобальный граф подписок Observable
граф родительских/дочерних подписок
визуализация операторов высшего порядка
выделенные отладочные операторы для
switchMap,mergeMap,concatMap,exhaustMapтрассировки с учётом планировщика для
asyncScheduler,animationFrameScheduler, виртуального времени и дрейфанастоящее перемещение во времени на основе воспроизведения
тесты
публикация пакета
Примечания по безопасности
Отладочный реестр открывает состояние выполнения на window.__RXJS_SPY_MCP__ в режиме разработки. Не передавайте чувствительные производственные данные через отладочные потоки.
Слой снимков редактирует распространённые ключи, похожие на секреты, и ограничивает размер сериализованных данных, но это не полная граница безопасности.
Лицензия
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
- SpanlyOAuthcom.spanly
MCP observability. Query live traffic, errors, duration, and alerts from your AI agent.
Agent Replay Debugger MCP — record every agent step + deterministic replay. Step-debugger for
Related MCP Servers
- AlicenseAqualityAmaintenanceExecute, debug, and visualize RxJS streams directly from AI assistants like Claude.623 npm4MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for browser debugging, inspection, and verification that streams console logs, network errors, and user actions into AI coding assistants.66AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceLets AI coding agents control and inspect a live Chrome browser via MCP, providing Chrome DevTools capabilities for automation, debugging, and performance analysis.14 npmApache 2.0
- AlicenseAqualityBmaintenanceEnables AI agents to monitor and debug browser runtime errors, console logs, and page diagnostics in real time via a Chrome extension and local MCP server.4MIT