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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceExecute, debug, and visualize RxJS streams directly from AI assistants like Claude.6234MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for browser debugging, inspection, and verification that streams console logs, network errors, and user actions into AI coding assistants.65AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceLets AI coding agents control and inspect a live Chrome browser via MCP, providing Chrome DevTools capabilities for automation, debugging, and performance analysis.11Apache 2.0
- AlicenseAqualityAmaintenanceEnables 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
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,
Agent Replay Debugger MCP — record every agent step + deterministic replay. Step-debugger for
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hansschenker/rxjs-spy-mcp-old'
If you have feedback or need assistance with the MCP directory API, please join our Discord server