{"_id":"@andromanpro/ai-conversation-viz","_rev":"3-461f6631deb9b9b7d6b61b0a20cb3e4f","name":"@andromanpro/ai-conversation-viz","dist-tags":{"latest":"1.6.1"},"versions":{"0.7.0":{"name":"@andromanpro/ai-conversation-viz","version":"0.7.0","keywords":["visualization","force-directed","graph","ai","llm","claude","chatgpt","jsonl","canvas","threejs","conversation","d3-force"],"author":{"name":"andromanpro"},"license":"MIT","_id":"@andromanpro/ai-conversation-viz@0.7.0","maintainers":[{"name":"andromanch","email":"andromanpro@gmail.com"}],"homepage":"https://andromanpro.github.io/ai-conversation-viz/","bugs":{"url":"https://github.com/andromanpro/ai-conversation-viz/issues"},"dist":{"shasum":"5057a73089e36a069aed1eded68cf2dec99d33f1","tarball":"https://registry.npmjs.org/@andromanpro/ai-conversation-viz/-/ai-conversation-viz-0.7.0.tgz","fileCount":45,"integrity":"sha512-bJ8TEaTWRK5mSj1i8zYCCFli/7+YPoApR7Qmr7Kg1xBbIrHpbT4T7HwQ2kNafUDGpUkMQTeW1T+7JkizfD/SPg==","signatures":[{"sig":"MEUCIQDX8SuZeYnay6jssY19k/2E3dxhw8+fErOQc5+clGg+GwIgJchaElLQuKx0atGT5Mn68sCssdzuznf3ys86CD0xnEU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372107},"main":"./dist/ai-conversation-viz.js","type":"module","module":"./src/embed.js","exports":{".":{"import":"./src/embed.js","default":"./dist/ai-conversation-viz.js"},"./src/*":"./src/*","./dist/*":"./dist/*","./3d.html":"./3d.html","./standalone.html":"./standalone.html"},"gitHead":"5dc9579f4d41f7dd85d05d8eb425f29c7b96a821","scripts":{"test":"node tests/run.js","build":"node build.cjs","prepublishOnly":"npm run test && npm run build"},"_npmUser":{"name":"andromanch","email":"andromanpro@gmail.com"},"repository":{"url":"git+https://github.com/andromanpro/ai-conversation-viz.git","type":"git"},"_npmVersion":"11.6.2","description":"Force-directed visualization of human↔AI conversation sessions. Parses Claude Code JSONL, ChatGPT exports, Anthropic API messages. Zero deps, Canvas 2D (WebGL 3D option).","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-conversation-viz_0.7.0_1777052066692_0.38734465231014226","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@andromanpro/ai-conversation-viz","version":"1.6.0","keywords":["visualization","force-directed","graph","ai","llm","claude","chatgpt","jsonl","canvas","threejs","conversation","d3-force"],"author":{"name":"andromanpro"},"license":"MIT","_id":"@andromanpro/ai-conversation-viz@1.6.0","maintainers":[{"name":"andromanch","email":"andromanpro@gmail.com"}],"homepage":"https://andromanpro.github.io/ai-conversation-viz/","bugs":{"url":"https://github.com/andromanpro/ai-conversation-viz/issues"},"dist":{"shasum":"3e3f81a40cbcb9ee5d567cdc31ed67a4e552f201","tarball":"https://registry.npmjs.org/@andromanpro/ai-conversation-viz/-/ai-conversation-viz-1.6.0.tgz","fileCount":64,"integrity":"sha512-oZYJQfmwsvz0FtHohoCIbyttf1mjzkrOwqNMpZtthRCj8YaDwYLFOoMuhVEa7V8ZK63lYd4epJd59oU7xekrvQ==","signatures":[{"sig":"MEYCIQC+mJ75aFURDUHvC2WACus8HXGwm98Xi69RFZ+o8Wb4hgIhAIx1hsc7ANS0FZwriUJwk6PcPqZDmqVya9hECjUF4TjE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1002372},"main":"./dist/ai-conversation-viz.js","type":"module","module":"./src/embed.js","exports":{".":{"import":"./src/embed.js","default":"./dist/ai-conversation-viz.js"},"./src/*":"./src/*","./dist/*":"./dist/*","./3d.html":"./3d.html","./standalone.html":"./standalone.html"},"gitHead":"4a1b48c96013cb7a47dcad8b8851d56c563721f5","scripts":{"test":"node tests/run.js","bench":"node tests/bench.js","build":"node build.cjs","sonar":"sonar-scanner","prepublishOnly":"npm run test && npm run build"},"_npmUser":{"name":"andromanch","email":"andromanpro@gmail.com"},"repository":{"url":"git+https://github.com/andromanpro/ai-conversation-viz.git","type":"git"},"_npmVersion":"11.6.2","description":"Force-directed visualization of human↔AI conversation sessions with multi-agent orchestration support (Task tool, sub-agents). Parses Claude Code JSONL, ChatGPT exports, Anthropic API messages. Zero deps, Canvas 2D + WebGL + Three.js 3D.","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ai-conversation-viz_1.6.0_1777209280881_0.6042412887630404","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@andromanpro/ai-conversation-viz","version":"1.6.1","description":"Force-directed visualization of human↔AI conversation sessions with multi-agent orchestration support (Task tool, sub-agents). Parses Claude Code JSONL, ChatGPT exports, Anthropic API messages. Zero deps, Canvas 2D + WebGL + Three.js 3D.","type":"module","main":"./dist/ai-conversation-viz.js","module":"./src/embed.js","exports":{".":{"import":"./src/embed.js","default":"./dist/ai-conversation-viz.js"},"./dist/*":"./dist/*","./src/*":"./src/*","./standalone.html":"./standalone.html","./3d.html":"./3d.html"},"scripts":{"build":"node build.cjs","test":"node tests/run.js","bench":"node tests/bench.js","sonar":"sonar-scanner","prepublishOnly":"npm run test && npm run build"},"keywords":["visualization","force-directed","graph","ai","llm","claude","chatgpt","jsonl","canvas","threejs","conversation","d3-force"],"author":{"name":"andromanpro"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/andromanpro/ai-conversation-viz.git"},"homepage":"https://andromanpro.github.io/ai-conversation-viz/","bugs":{"url":"https://github.com/andromanpro/ai-conversation-viz/issues"},"gitHead":"8846c995eef8286b4af90f6b4af418c0bd4d7541","_id":"@andromanpro/ai-conversation-viz@1.6.1","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-mDfVmd0lks3vmy5d/y9xnf0ZBhoIvh6xu4wJy+3alKS1S6lUV/tgKLIPkI/mG67VBFoXD7IZlFoga5qhuMc3Nw==","shasum":"629f01d318d5c217a52a5b3b638f05ac1bd1079c","tarball":"https://registry.npmjs.org/@andromanpro/ai-conversation-viz/-/ai-conversation-viz-1.6.1.tgz","fileCount":64,"unpackedSize":1013263,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGv64te4K4gZBKgI1RrvxjK2cCNzRwgAGaBOCSwFvndkAiEA6jiDrdJ/bWhQvip2M5IlM8bh93nNkS59CJMf4xXRaSI="}]},"_npmUser":{"name":"andromanch","email":"andromanpro@gmail.com"},"directories":{},"maintainers":[{"name":"andromanch","email":"andromanpro@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-conversation-viz_1.6.1_1777224391842_0.1562247832672825"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-24T17:34:26.606Z","modified":"2026-04-26T17:26:32.145Z","0.7.0":"2026-04-24T17:34:26.896Z","1.6.0":"2026-04-26T13:14:41.050Z","1.6.1":"2026-04-26T17:26:32.020Z"},"bugs":{"url":"https://github.com/andromanpro/ai-conversation-viz/issues"},"author":{"name":"andromanpro"},"license":"MIT","homepage":"https://andromanpro.github.io/ai-conversation-viz/","keywords":["visualization","force-directed","graph","ai","llm","claude","chatgpt","jsonl","canvas","threejs","conversation","d3-force"],"repository":{"type":"git","url":"git+https://github.com/andromanpro/ai-conversation-viz.git"},"description":"Force-directed visualization of human↔AI conversation sessions with multi-agent orchestration support (Task tool, sub-agents). Parses Claude Code JSONL, ChatGPT exports, Anthropic API messages. Zero deps, Canvas 2D + WebGL + Three.js 3D.","maintainers":[{"name":"andromanch","email":"andromanpro@gmail.com"}],"readme":"# ai-conversation-viz\n\n> 🇷🇺 Русский · [🇬🇧 English](README.md)\n\nForce-directed визуализация диалогов человек↔AI, включая мульти-агент оркестрацию через Task-tool с порождением суб-агентов.\n\n[🌐 Live demo](https://andromanpro.github.io/ai-conversation-viz/) · [🌐 3D](https://andromanpro.github.io/ai-conversation-viz/3d.html) · [🤖 Multi-agent](https://andromanpro.github.io/ai-conversation-viz/?jsonl=samples/multi-agent-orchestration.jsonl) · [🤖🤖 Deep orchestration](https://andromanpro.github.io/ai-conversation-viz/?jsonl=samples/deep-orchestration.jsonl)\n\n![overview-2d](media/overview-2d.png)\n\nПарсит Claude Code JSONL, ChatGPT-экспорты (`conversations.json`) и Anthropic API `messages[]`. Без зависимостей. Canvas 2D (основной) + WebGL + Three.js 3D. RU / EN интерфейс.\n\n## Возможности\n\n### Визуализация\n- **Force-directed раскладка** — D3-style alpha cooling, Velocity Verlet, адаптивный centerPull, leaf-spring boost, soft-wall границы, Barnes-Hut O(n log n) в 2D\n- **3 режима раскладки** — force, radial sunburst, swim-lanes (время-как-река)\n- **3D режим** — Three.js с кастомными orb-шейдерами (fresnel + specular highlight + breath-pulse), UnrealBloom post-processing, OrbitControls камера + drift, фоновое аудио\n- **Адаптивный масштаб для мега-графов** — camera frustum / fog / soft-wall расширяются по `√N`\n\n### Семантика ролей\n- **`user`** — реальный ввод человека\n- **`assistant`** — ответы AI\n- **`tool_use`** — виртуальные ноды на каждый вызов тула (Bash/Grep/Read/Task/…)\n- **`tool_result`** — отдельная роль для чистых возвратов от тулов (до v1.6 визуально не отличалось от `user`)\n- **`subagent_input`** — prompt'ы саб-агентам через Task tool (steel-blue, отличается от живого пользователя)\n- **`thinking`** — `<thinking>` блоки как virtual children ассистентов\n\n### Интерактив\n- **Timeline воспроизведение** — пошагово по нодам со скоростью 0.5×/1×/2×/5×\n- **Phone-мокап** — чат рендерится как iPhone-пузыри с эффектом печатной машинки\n- **Drag нод**, pan/zoom, click для деталей, Ctrl+F поиск, hover preview (в 3D — toggle в Settings), keyboard shortcuts\n- **Hub-подсветка** (auto-detection нод с большим degree)\n- **Branch collapse** — dbl-click по ассистенту скрывает его tool_use-детей\n- **Topics mode** — TF-IDF кластерные цвета\n\n### Данные\n- **Multi-agent оркестрация** — Task tool calls визуализируются как саб-агентские треды через virtual `#tu<i>` parent links; sub-sub-agents до N уровней\n- **Live watch** — polling URL для растущего JSONL файла\n- **Diff mode** — сравнение двух сессий side-by-side\n- **Статистика** — токены, длительность, топ-тулы, longest, compactions\n- **Экспорт** — PNG / SVG snapshot, WebM MediaRecorder\n- **Ambient аудио** — генеративный pad + chirp при рождении ноды\n- **CLI-meta strip** — удаляет `<system-reminder>` / `<command-name>` / `<command-message>` из отображаемого текста\n- **Auto performance degrade** при 400+ / 1500+ нодах\n- **Share URL** — `?jsonl=<url>&t=<0..100>&n=<nodeId>&hide=<roles>`\n\n## Галерея\n\n### 2D — воспроизведение + смена раскладки\n\n![2d-playback](media/2d-playback.webp)\n![2d-layout-switch](media/2d-layout-switch.webp)\n\n### 3D — orbit + анимация рождения + смена раскладки\n\n![3d-orbit](media/3d-orbit.webp)\n![3d-growth](media/3d-growth-1.webp)\n![3d-layout-switch](media/3d-layout-switch.webp)\n\n### Mega-structure — большая сессия в 3D\n\n![mega-structure](media/mega-structure.webp)\n\n## Установка\n\n```bash\nnpm install @andromanpro/ai-conversation-viz\n```\n\n## Использование (embed)\n\n```js\nimport { mount, SAMPLE_JSONL } from '@andromanpro/ai-conversation-viz';\n\nconst viewer = mount(document.getElementById('viz'), {\n  jsonl: SAMPLE_JSONL,     // либо своя строка JSONL / ChatGPT json / Anthropic messages\n  width: 800,               // опционально (иначе clientWidth)\n  height: 600,\n  starfield: true,\n  autoFit: true,\n});\n\n// API\nviewer.loadJsonl(newJsonl);   // заменить данные\nviewer.setTimeline(0.5);      // позиция [0..1]\nviewer.play();                // от начала\nviewer.pause();\nviewer.fitView();\nviewer.destroy();\nviewer.getState();            // низкоуровневый доступ\n```\n\n## Использование (standalone UI)\n\nДвойной клик на `standalone.html` — готовый self-contained offline viewer с полным UI (phone, timeline, search, stats, share, record). Данные подгружаются через «Open JSONL…» или drag-drop.\n\nИли через HTTP:\n```bash\nnpx serve .\n# http://localhost:3000/         — 2D\n# http://localhost:3000/3d.html  — 3D\n```\n\n## Форматы данных\n\nРаспознаются автоматически:\n- **Claude Code JSONL** — `{\"type\":\"user|assistant\", \"uuid\", \"parentUuid\", \"message\":{\"content\":[{\"type\":\"text|thinking|tool_use|tool_result|image\"}]}}`\n- **ChatGPT export** (`conversations.json`) — массив с `mapping: {id: {message, parent, children}}`\n- **Anthropic API** — массив `[{role, content}]`\n\nПарсер извлекает из каждого message: text, thinking (`💭`), tool_use (имя + ключевой параметр), tool_result (`↩` или `⚠` при `is_error`), image (`[image]`). Для assistant без текста генерируется summary `🔧 Grep \"pattern\" · Bash \"cmd\" · …`.\n\n## Горячие клавиши\n\n| Клавиша | Действие |\n|---|---|\n| `Space` | Play / Pause |\n| `←` / `→` | Шаг назад / вперёд |\n| `Home` / `R` | Сбросить вид |\n| `Ctrl+F` | Поиск |\n| `F` | Заморозить физику |\n| `O` | Соединить sirota-ноды |\n| `1/2/3/5` | Скорость 0.5× / 1× / 2× / 5× |\n| `Esc` | Закрыть детали / поиск |\n| Dbl-click ноды | Свернуть / развернуть tool_use-детей |\n\n## Сборка\n\n```bash\nnpm run build    # → dist/ai-conversation-viz.js (IIFE, ~370 KB)\nnpm run test     # 147 unit-тестов\nnpm run sonar    # SonarQube скан (host/token через SONAR_HOST_URL + SONAR_TOKEN)\n```\n\n## Архитектура\n\n```\nsrc/\n├─ core/\n│  ├─ config.js        — все настройки (CFG + COLORS)\n│  ├─ parser.js        — parseJSONL, parseLine, classifyContent\n│  ├─ adapters.js      — detect + ChatGPT/Anthropic → Claude JSONL\n│  ├─ graph.js         — buildGraph, appendRawNodes, degree/hub\n│  ├─ layout.js        — stepPhysics (sim), radial, swim, fitToView, stepPhysics3D\n│  ├─ quadtree.js      — Barnes-Hut O(n log n) repulsion\n│  ├─ tree.js          — computeDepths (BFS)\n│  └─ sample.js        — демо JSONL\n├─ view/\n│  ├─ state.js         — общий mutable state\n│  ├─ camera.js        — world↔screen\n│  ├─ renderer.js      — canvas 2D рендер + birth-animation\n│  ├─ renderer-webgl.js— WebGL рендер (быстрее на 1500+ нодах)\n│  ├─ particles.js     — электрические искры по рёбрам\n│  ├─ starfield.js     — параллакс звёзд\n│  ├─ path.js          — pathToRoot (hover highlight)\n│  └─ tool-icons.js    — Unicode-иконки по имени тула\n├─ ui/\n│  ├─ loader.js        — load/drop/URL → normalize → buildGraph\n│  ├─ interaction.js   — mouse/wheel события\n│  ├─ timeline.js      — пошаговое воспроизведение + скорость\n│  ├─ story-mode.js    — phone + typewriter + очередь\n│  ├─ search.js        — Ctrl+F\n│  ├─ live.js          — polling растущего JSONL URL\n│  ├─ detail-panel.js  — click-инфо\n│  ├─ tooltip.js       — hover preview\n│  ├─ filter.js        — toggle ролей\n│  ├─ minimap.js       — мини-карта в углу + click-телепорт\n│  ├─ stats-hud.js     — tokens/duration/tools/hubs\n│  ├─ share.js         — Share URL\n│  ├─ settings-modal.js— ⚙ Настройки\n│  ├─ layout-toggle.js — force/radial/swim чипы\n│  ├─ freeze-toggle.js — ❄ Freeze\n│  ├─ speed-control.js — чипы скорости\n│  ├─ audio.js         — генеративный ambient + chirp\n│  ├─ recorder.js      — MediaRecorder WebM\n│  ├─ snapshot.js      — PNG / SVG\n│  ├─ orphans-toggle.js— 🔗 Connect orphans\n│  └─ keyboard.js      — глобальные shortcuts\n├─ 3d/\n│  ├─ main.js          — Three.js сцена, raycaster, phone\n│  ├─ layouts3d.js     — compute3DRadialLayout, compute3DSwimLanes\n│  └─ scatter.js       — applySphericalScatter (Fibonacci)\n├─ main.js             — 2D entrypoint\n└─ embed.js            — npm entry (programmatic mount)\n```\n\n## Лицензия\n\nMIT\n","readmeFilename":"README.ru.md"}