{"id":49137752,"url":"https://github.com/hitmman55/claude-code-chat-viewer","last_synced_at":"2026-04-21T23:00:38.281Z","repository":{"id":352959138,"uuid":"1216838047","full_name":"hitmman55/claude-code-chat-viewer","owner":"hitmman55","description":"Offline HTML viewer for Claude Code JSONL session transcripts. Six UI languages, light/dark theme, no backend, no CDN.","archived":false,"fork":false,"pushed_at":"2026-04-21T21:14:59.000Z","size":269,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-21T22:36:40.907Z","etag":null,"topics":["anthropic","chat-log","claude","claude-code","html-viewer","i18n","jsonl","jsonl-viewer","log-viewer","offline-first","public-domain","single-file","transcript-viewer","zero-dependencies"],"latest_commit_sha":null,"homepage":"https://hitmman55.github.io/claude-code-chat-viewer/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hitmman55.png","metadata":{"files":{"readme":"README.ar.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-21T09:28:47.000Z","updated_at":"2026-04-21T21:15:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"414eab24-2586-4f21-9ab9-2c90fb3a83a8","html_url":"https://github.com/hitmman55/claude-code-chat-viewer","commit_stats":null,"previous_names":["hitmman55/claude-code-chat-viewer"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/hitmman55/claude-code-chat-viewer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hitmman55%2Fclaude-code-chat-viewer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hitmman55%2Fclaude-code-chat-viewer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hitmman55%2Fclaude-code-chat-viewer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hitmman55%2Fclaude-code-chat-viewer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hitmman55","download_url":"https://codeload.github.com/hitmman55/claude-code-chat-viewer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hitmman55%2Fclaude-code-chat-viewer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32113748,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T11:25:29.218Z","status":"ssl_error","status_checked_at":"2026-04-21T11:25:28.499Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anthropic","chat-log","claude","claude-code","html-viewer","i18n","jsonl","jsonl-viewer","log-viewer","offline-first","public-domain","single-file","transcript-viewer","zero-dependencies"],"created_at":"2026-04-21T23:00:26.278Z","updated_at":"2026-04-21T23:00:38.272Z","avatar_url":"https://github.com/hitmman55.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://hitmman55.github.io/claude-code-chat-viewer/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/▶-جرّبه%20أونلاين-2ea043?style=for-the-badge\" alt=\"جرّبه أونلاين\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\u003ci\u003eفقط اضغط — بدون تثبيت أو بناء أو تسجيل.\u003c/i\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"README.md\"\u003eEnglish\u003c/a\u003e ·\n  \u003ca href=\"README.ru.md\"\u003eРусский\u003c/a\u003e ·\n  \u003ca href=\"README.es.md\"\u003eEspañol\u003c/a\u003e ·\n  \u003ca href=\"README.fr.md\"\u003eFrançais\u003c/a\u003e ·\n  \u003ca href=\"README.zh-CN.md\"\u003e中文\u003c/a\u003e ·\n  \u003cb\u003eالعربية\u003c/b\u003e\n\u003c/p\u003e\n\n\u003cdiv dir=\"rtl\" lang=\"ar\"\u003e\n\n# Claude Code Chat Viewer\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-Unlicense-blue\" alt=\"الرخصة: Unlicense\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/runtime%20deps-0-brightgreen\" alt=\"صفر اعتماديات وقت التشغيل\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/offline-first-success\" alt=\"يعمل دون اتصال\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/i18n-6%20languages-informational\" alt=\"6 لغات للواجهة\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshot.png\" alt=\"لقطة شاشة\" width=\"900\" /\u003e\n\u003c/p\u003e\n\nعارض HTML لسجلات جلسات [Claude Code](https://claude.com/claude-code) بصيغة JSONL. يعمل مباشرة في المتصفح — بدون خادم، بدون خطوة بناء، اعتمادية واحدة مُحزَّمة محليًا. يعمل دون اتصال فور الاستخدام.\n\n## لماذا\n\nيكتب Claude Code كل جلسة في `~/.claude/projects/\u003cproject\u003e/\u003csession-uuid\u003e.jsonl` — سطر واحد لكل سجل (رسالة المستخدم، رد النموذج، thinking، tool_use، tool_result، attachment، وما شابه). الملف الخام غير قابل للقراءة؛ الأوامر المدمجة مثل `/resume` تعرض المحادثة لكنها لا تسمح بتصديرها أو فحصها لاحقًا.\n\nيحوّل هذا العارض ملف `.jsonl` إلى تدفق قابل للقراءة مع ألوان حسب الدور، وكتل خدمية قابلة للطي (thinking / tools / results)، ومرشّحات.\n\n## ماذا يعرض\n\n- **user** (أزرق) — رسائل المستخدم الحقيقية\n- **assistant** (أخضر) — ردود Claude النصية\n- **thinking** (بنفسجي) — التفكير الموسّع، مطويّ افتراضيًا\n- **tool_use** (كهرماني) — استدعاءات الأدوات مع معاينة للمعاملات\n- **tool_result** (سماوي / أحمر للأخطاء) — ردود الأدوات\n- **meta / task-note** (أصفر) — حقن النظام و `\u003ctask-notification\u003e` من الوكلاء الفرعيين\n- **system / attachment / ui-state** — سجلات خدمية (مخفية افتراضيًا)\n\nكل كتلة تظهر كصف منفصل مع شريط ملون على اليسار. لا توجد فقاعات محادثة: هذا سجلّ لا دردشة.\n\n## كيفية الفتح\n\nاختر ما يناسبك:\n\n**أ. تنزيل ملف واحد** — الأسهل. خذ HTML المستقل من [آخر إصدار](https://github.com/hitmman55/claude-code-chat-viewer/releases/latest)، واضغط عليه ضغطة مزدوجة. ملف واحد، يعمل دون اتصال للأبد.\n\n**ب. نسخ المستودع** — إذا أردت التعديل على الكود. تحتاج إلى `index.html` ومجلد `lib/`.\n\n**ج. استخدام العارض عبر الإنترنت** — افتح \u003chttps://hitmman55.github.io/claude-code-chat-viewer/\u003e. لا شيء للتنزيل.\n\nبعد الفتح، اضغط منتقي الملفات (أو اسحب ملفًا، أو استخدم زر «جرّب مثالاً») واختر سجلّ `.jsonl`.\n\nتُحفظ سجلات Claude Code في:\n\n```\n~/.claude/projects/\u003cproject-slug\u003e/\u003csession-uuid\u003e.jsonl\n```\n\nحيث `\u003cproject-slug\u003e` هو مجلد العمل لديك مع استبدال `/` بـ `-`. مثال: `/home/user/myproj` ← `-home-user-myproj`.\n\n## الميزات\n\n### طرق تحميل الملف\n\n- **منتقي الملفات** — اضغط «اختيار ملف» واختر `.jsonl`.\n- **السحب والإفلات** — أسقط الملف في أي مكان على الصفحة. حدّ متقطّع يُشير إلى المنطقة. المجلدات والسحوبات غير المتعلّقة بالملفات تُرفض بلطف.\n- **جرّب مثالاً** — في الحالة الأولى (عند الاستخدام عبر الإنترنت) يظهر زرّ يُحمّل `demo.jsonl` مضمّنًا يعرض جميع أنواع الكتل.\n\n### راحة القراءة\n\n- **وضع القراءة** — مفتاح في الرأس يُخفي كل شيء باستثناء رسائل المستخدم الفعلية وردود المساعد النصية. بدون thinking، بدون استدعاءات أدوات، بدون سجلات خدمية.\n- **نسخ لكل رسالة** — زرّ `📋` في رأس كل مُدخل. ينسخ النصّ إلى الحافظة مع تأكيد `✓` لمدة 1.2 ثانية. يستخدم `navigator.clipboard.writeText` مع احتياطي `document.execCommand` لسياقات `file://`.\n- **أسماء أدوات ودية** — الأدوات المعروفة تحصل على أيقونات (مثل `📖 Read file`، `🖥️ Shell`، `📝 Edit file`). الأدوات غير المعروفة / MCP → `🔧 {raw_name}`.\n- **سمة تلقائية** — يتبع العارض `prefers-color-scheme` للنظام افتراضيًا. اضغط زرّ الشمس/القمر لتثبيت الاختيار؛ الاختيار المثبّت يستمرّ عبر الجلسات.\n- **ست لغات للواجهة** — English، Русский، Español، Français، 中文، العربية. تنتقل العربية تلقائيًا إلى RTL. يوجد منتقي في الرأس، ويُحفظ التفضيل.\n\n### الأداء والأمان\n\n- **تحليل متدفّق** — يُقرأ `.jsonl` عبر `file.stream()` + `TextDecoderStream`، ولا يُحمَّل الملف كسلسلة واحدة.\n- **افتراضية أصلية** — `content-visibility: auto` على كل سجل: يتخطى المتصفح تخطيط ورسم السجلات خارج الشاشة. يتحمّل آلاف السجلات.\n- **عرض بأجزاء** — 500 سجل في كل جزء، وزر «عرض المزيد» لبقية السجلات.\n- **مرشّحات** — خمسة مربعات اختيار (thinking / tools / results / system / ui-state)، تُبدّل الفئات عبر صنف CSS واحد على الحاوية (بدون إعادة تخطيط DOM).\n- **عرض آمن من XSS** — تُهرَّب كل كتلة نصية _قبل_ تمريرها إلى محلّل markdown. يتم تحييد صور Markdown (تظهر كنص خامل، لا تُجلب أبدًا). الروابط مقتصرة على `http(s)` مع `rel=\"noopener noreferrer nofollow\"`.\n- **حدود للحجم** — تُقصَّ كتل النص إلى 20 كيلوبايت، والكتل الخدمية إلى 5 كيلوبايت. عمليات النسخ ترث هذه الحدود — الصفحة لا ترسل ميغابايتات إلى الحافظة ولا يمكن أن تُعطّل المتصفح.\n- **احتياطي لـ `.json`** — إذا لم يكن الملف JSONL بل مصفوفة/كائن JSON عادية، يُحلَّل كقائمة سجلات.\n\n## متطلبات المتصفح\n\n- Chrome / Edge 85+\n- Safari 18+\n- Firefox 125+\n\nكل هذا لازم لدعم `content-visibility: auto`. على المتصفحات الأقدم يعمل العارض، لكن التمرير على الملفات الكبيرة سيصبح أبطأ بشكل ملحوظ.\n\n## الاعتماديات\n\nواحدة فقط، مُحزَّمة محليًا في `lib/`:\n\n- [marked](https://github.com/markedjs/marked) — markdown → HTML (~35 كيلوبايت)\n\nبدون CDN، بدون شبكة، بدون Subresource Integrity. انسخ وشغِّل.\n\n## الخصوصية\n\nكل شيء يعمل محليًا في متصفحك. العارض نفسه **لا يُرسل أي طلبات شبكية تلقائية** — لا CDN، ولا تحليلات، ولا خطوط بعيدة. يتم تحييد صور Markdown المضمّنة في السجلات: تُعرض كنص خامل مع ظهور الرابط، لكن لا يتم جلبها. الروابط الخارجية (فقط `http(s)`) تُفتح في علامة تبويب جديدة فقط عند النقر عليها، مع `rel=\"noopener noreferrer nofollow\"`. تبقى سجلاتك على جهازك.\n\n## قيود معروفة\n\n- الملفات التي تتجاوز حوالي 100 ميجابايت تحتاج إلى تحميل مفهرس حسب إزاحات الأسطر مع عرض نوافذ (غير مُنفَّذ).\n- لا يوجد تصدير إلى Markdown/HTML (الهدف هو العرض لا التحويل).\n- لا يوجد تلوين للصياغة في كتل الشيفرة (قرار مقصود للحفاظ على الحد الأدنى من الاعتماديات).\n\n## التطوير\n\nكل الشيفرة في ملف HTML واحد. حرِّره مباشرة — الأنماط في `\u003cstyle\u003e`، والمنطق في `\u003cscript\u003e`، والترجمات في كائن `I18N` في بداية السكربت.\n\nفحص صياغة JS بدون متصفح:\n\n```bash\nsed -n '/^\u003cscript\u003e$/,/^\u003c\\/script\u003e$/p' index.html | sed '1d;$d' | node --check /dev/stdin\n```\n\n## الرخصة\n\n[Unlicense](LICENSE) — ملكية عامة. استخدمه كما تشاء دون الحاجة إلى إسناد.\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhitmman55%2Fclaude-code-chat-viewer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhitmman55%2Fclaude-code-chat-viewer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhitmman55%2Fclaude-code-chat-viewer/lists"}