{"_id":"@adanami/kaleido","_rev":"3-23cf614d8ed744ae88e7cf515dd41075","name":"@adanami/kaleido","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@adanami/kaleido","version":"0.1.0","keywords":["viewer","diff","git","code-review","markdown","preview","mermaid","monaco","typescript","cli"],"author":{"name":"bubble0601"},"license":"MIT","_id":"@adanami/kaleido@0.1.0","maintainers":[{"name":"adanami","email":"bubble0601@gmail.com"}],"homepage":"https://github.com/bubble0601/kaleido#readme","bugs":{"url":"https://github.com/bubble0601/kaleido/issues"},"bin":{"kaleido":"dist/cli/index.js"},"dist":{"shasum":"64ce3dac71a5ff857ffb9c065f0c40fa02975e2b","tarball":"https://registry.npmjs.org/@adanami/kaleido/-/kaleido-0.1.0.tgz","fileCount":188,"integrity":"sha512-INyuS1ZFua7E5YuFHyNa8p6CdqmgT9mYQluGLztCzE+27+UuxTWL0gcM6xWuJHlwOHNbSQc3IQujOgVCp+XUyQ==","signatures":[{"sig":"MEQCIC8ZWgug8iv9aYc4rJOTwzH3GiYdJiba6e7KWsY3wcWRAiBjJiGkhmJrD3yYi7atkSi1EYI+6LuNVROCWlzYrm1uQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8884744},"type":"module","engines":{"node":">=20"},"gitHead":"1f40c5eea0bd1b0a9e8de04547f434fb2fa259a3","scripts":{"dev":"node scripts/dev.js","build":"pnpm run build:licenses && pnpm run build:server && pnpm run build:client","start":"pnpm run build && node dist/cli/index.js","typecheck":"tsc --noEmit -p tsconfig.node.json && tsc --noEmit -p tsconfig.client.json","build:client":"vite build","build:server":"tsup","build:licenses":"node scripts/extract-licenses.mjs","prepublishOnly":"pnpm run typecheck && pnpm run build"},"_npmUser":{"name":"adanami","email":"bubble0601@gmail.com"},"repository":{"url":"git+https://github.com/bubble0601/kaleido.git","type":"git"},"_npmVersion":"11.13.0","description":"Monaco-based local web file viewer: browse any directory, diff git ranges, with real TypeScript hover, lint diagnostics, comments and review marks","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","hono":"^4.13.1","open":"^11.0.0","react":"^19.2.8","marked":"^18.0.9","nanoid":"^6.0.1","mermaid":"^11.16.1","zustand":"^5.0.14","commander":"^15.0.0","env-paths":"^4.0.0","react-dom":"^19.2.8","simple-git":"^3.36.0","typescript":"~5.9.0","monaco-editor":"^0.56.0","@iconify/react":"^6.0.2","@parcel/watcher":"^2.6.0","@hono/node-server":"^2.1.0","@hono/zod-validator":"^0.9.0","github-markdown-css":"^5.9.0","@tanstack/react-query":"^5.101.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.10","tsup":"^8.5.1","vite":"^8.2.1","@types/node":"^26.1.2","tailwindcss":"^4.3.3","@types/react":"^19.2.18","@iconify/utils":"^3.1.4","@types/react-dom":"^19.2.4","@tailwindcss/vite":"^4.3.3","@vitejs/plugin-react":"^6.0.5","@iconify-json/vscode-icons":"^1.2.69","license-checker-rseidelsohn":"^5.0.1"},"_npmOperationalInternal":{"tmp":"tmp/kaleido_0.1.0_1787387485625_0.9877448905176465","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@adanami/kaleido","version":"0.2.0","keywords":["viewer","diff","git","code-review","markdown","preview","mermaid","monaco","typescript","cli"],"author":{"name":"bubble0601"},"license":"MIT","_id":"@adanami/kaleido@0.2.0","maintainers":[{"name":"adanami","email":"bubble0601@gmail.com"}],"homepage":"https://github.com/bubble0601/kaleido#readme","bugs":{"url":"https://github.com/bubble0601/kaleido/issues"},"bin":{"kaleido":"dist/cli/index.js"},"dist":{"shasum":"88d427fedfe8f1bbfa36dab28517793550ce01bb","tarball":"https://registry.npmjs.org/@adanami/kaleido/-/kaleido-0.2.0.tgz","fileCount":189,"integrity":"sha512-G+EGHIR5cUoQ6SPRMaBLMIeNqGK1oJ6/66W8RsAskh69v2LJ1IpHUsWUaQ25JToWT70P9JSzJwd78QV4NEqPuA==","signatures":[{"sig":"MEYCIQDyfylxT82XIJ/T0zkI9bK1tyy8wpRvukMyWlmAF6XfCwIhANadYNxAYY8koumQTkbpyZANdfpdADPuldnbe4MvrcWq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8917222},"type":"module","engines":{"node":">=20"},"gitHead":"4b9beaf5e6f49a406a01607ec4345b6069bad67f","scripts":{"dev":"node scripts/dev.js","build":"pnpm run build:licenses && pnpm run build:server && pnpm run build:client","start":"pnpm run build && node dist/cli/index.js","typecheck":"tsc --noEmit -p tsconfig.node.json && tsc --noEmit -p tsconfig.client.json","build:client":"vite build","build:server":"tsup","build:licenses":"node scripts/extract-licenses.mjs","prepublishOnly":"pnpm run typecheck && pnpm run build"},"_npmUser":{"name":"adanami","email":"bubble0601@gmail.com"},"repository":{"url":"git+https://github.com/bubble0601/kaleido.git","type":"git"},"_npmVersion":"11.13.0","description":"Monaco-based local web file viewer: browse any directory, diff git ranges, with real TypeScript hover, lint diagnostics, comments and review marks","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","hono":"^4.13.1","open":"^11.0.0","react":"^19.2.8","marked":"^18.0.9","nanoid":"^6.0.1","mermaid":"^11.16.1","zustand":"^5.0.14","commander":"^15.0.0","env-paths":"^4.0.0","react-dom":"^19.2.8","simple-git":"^3.36.0","typescript":"~5.9.0","monaco-editor":"^0.56.0","@iconify/react":"^6.0.2","@parcel/watcher":"^2.6.0","@hono/node-server":"^2.1.0","@hono/zod-validator":"^0.9.0","github-markdown-css":"^5.9.0","@tanstack/react-query":"^5.101.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.10","tsup":"^8.5.1","vite":"^8.2.1","@types/node":"^26.1.2","tailwindcss":"^4.3.3","@types/react":"^19.2.18","@iconify/utils":"^3.1.4","@types/react-dom":"^19.2.4","@tailwindcss/vite":"^4.3.3","@vitejs/plugin-react":"^6.0.5","@iconify-json/vscode-icons":"^1.2.69","license-checker-rseidelsohn":"^5.0.1"},"_npmOperationalInternal":{"tmp":"tmp/kaleido_0.2.0_1788937338580_0.28611760186719293","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@adanami/kaleido","version":"0.3.0","description":"Monaco-based local web file viewer: browse any directory, diff git ranges, with real TypeScript hover, lint diagnostics, comments and review marks","type":"module","bin":{"kaleido":"dist/cli/index.js"},"keywords":["viewer","diff","git","code-review","markdown","preview","mermaid","monaco","typescript","cli"],"author":{"name":"bubble0601"},"repository":{"type":"git","url":"git+https://github.com/bubble0601/kaleido.git"},"homepage":"https://github.com/bubble0601/kaleido#readme","bugs":{"url":"https://github.com/bubble0601/kaleido/issues"},"publishConfig":{"access":"public"},"scripts":{"dev":"node scripts/dev.js","build":"pnpm run build:licenses && pnpm run build:server && pnpm run build:client","build:licenses":"node scripts/extract-licenses.mjs","build:server":"tsup","build:client":"vite build","typecheck":"tsc --noEmit -p tsconfig.node.json && tsc --noEmit -p tsconfig.client.json","start":"pnpm run build && node dist/cli/index.js","prepublishOnly":"pnpm run typecheck && pnpm run build"},"engines":{"node":">=20"},"license":"MIT","dependencies":{"@hono/node-server":"^2.1.0","@hono/zod-validator":"^0.9.0","@iconify/react":"^6.0.2","@parcel/watcher":"^2.6.0","@tanstack/react-query":"^5.101.4","commander":"^15.0.0","env-paths":"^4.0.0","github-markdown-css":"^5.9.0","hono":"^4.13.1","marked":"^18.0.9","mermaid":"^11.16.1","monaco-editor":"^0.56.0","nanoid":"^6.0.1","open":"^11.0.0","react":"^19.2.8","react-dom":"^19.2.8","simple-git":"^3.36.0","typescript":"~5.9.0","zod":"^4.4.3","zustand":"^5.0.14"},"devDependencies":{"@iconify-json/vscode-icons":"^1.2.69","@iconify/utils":"^3.1.4","@tailwindcss/vite":"^4.3.3","@types/node":"^26.1.2","@types/react":"^19.2.18","@types/react-dom":"^19.2.4","@vitejs/plugin-react":"^6.0.5","license-checker-rseidelsohn":"^5.0.1","tailwindcss":"^4.3.3","tsup":"^8.5.1","tsx":"^4.23.10","vite":"^8.2.1"},"gitHead":"d0b900512fb294abe3b10dd1d21e88d33a409387","_id":"@adanami/kaleido@0.3.0","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-5OpCK6tGeO/r34IbdhuCt6c6mIZGL7hq+KOl3Gwdyh9ayxTqKad4cjUIf2IlWn6/6vxni3OVtrzcUqr3C1xyIg==","shasum":"42f363b92879d2a02389702d09cfc2468fb20914","tarball":"https://registry.npmjs.org/@adanami/kaleido/-/kaleido-0.3.0.tgz","fileCount":189,"unpackedSize":8921146,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCxdVjSoZMskgzlaa/gfjhb1YvK8D2AIAHCBGEj3lKLZwIgMTs7jAfUTPtMYkHtnbwoJzUxmOTcAmYbY1B5P4FI3Ng="}]},"_npmUser":{"name":"adanami","email":"bubble0601@gmail.com"},"directories":{},"maintainers":[{"name":"adanami","email":"bubble0601@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/kaleido_0.3.0_1789366958352_0.09954811890818349"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-22T08:31:25.403Z","modified":"2026-09-14T06:22:38.780Z","0.1.0":"2026-08-22T08:31:25.888Z","0.2.0":"2026-09-09T07:02:18.825Z","0.3.0":"2026-09-14T06:22:38.616Z"},"bugs":{"url":"https://github.com/bubble0601/kaleido/issues"},"author":{"name":"bubble0601"},"license":"MIT","homepage":"https://github.com/bubble0601/kaleido#readme","keywords":["viewer","diff","git","code-review","markdown","preview","mermaid","monaco","typescript","cli"],"repository":{"type":"git","url":"git+https://github.com/bubble0601/kaleido.git"},"description":"Monaco-based local web file viewer: browse any directory, diff git ranges, with real TypeScript hover, lint diagnostics, comments and review marks","maintainers":[{"name":"adanami","email":"bubble0601@gmail.com"}],"readme":"# kaleido\n\nMonaco Editor ベースのローカル Web ファイルビューア。CLI から起動し、ブラウザで手元のファイルを読む・比較する・レビューする。git リポジトリなら diff レビューができ、**git 管理外のディレクトリでもそのまま開ける**。\n\n![diff から Docs・Markdown プレビュー・HTML プレビューまでの操作](docs/kaleido-demo.gif)\n\n## 特長\n\n- 対象プロジェクトの `ts.LanguageService` を動かすので、型ホバー・定義ジャンプ・参照検索が IDE と同じ内容になる\n- Markdown は目次と mermaid 付きでプレビュー、HTML はレンダリングして表示\n- 読みながらその場で編集・保存でき、外部からの変更も自動で反映される\n- 行コメントとレビュー済みマークはサーバー側に残り、AI へ渡せる形式でコピーできる\n\n## インストール\n\nNode.js 20 以上が必要。コマンド名は `kaleido`。\n\n```bash\nnpx @adanami/kaleido            # インストールせずに試す\nnpm install -g @adanami/kaleido # 常用する (pnpm add -g でも可)\n```\n\n## 使い方\n\n```bash\nkaleido                     # cwd。git 管理下なら自動判定、そうでなければファイル閲覧モード\nkaleido ./docs              # そのディレクトリを開く\nkaleido working             # unstaged changes (index vs working tree)\nkaleido staged              # staged changes (HEAD vs index)\nkaleido <commit>            # そのコミットの diff (<commit>^ vs <commit>)\nkaleido <target> <base>     # 任意の比較 (base vs target)\nkaleido pr 123              # GitHub の pull request (base ブランチとの merge-base vs PR head)\nkaleido https://github.com/owner/repo/pull/123   # PR の URL でも可\n\nkaleido comments [target] [base]   # 保存済みコメントを AI プロンプト形式で stdout に出力\n```\n\n位置引数は「ディレクトリ」または「比較範囲」。commit-ish として解決できなければディレクトリと解釈する (`--dir` で明示もできる)。\n引数なしのときは staged 変更 → working 変更 → 直近コミットの順に自動判定する。\n\nPR の表示には [GitHub CLI](https://cli.github.com/) (`gh`、ログイン済み) が必要。`refs/pull/<N>/head` を `origin/pr/<N>` に fetch して開くので、fork からの PR も checkout なしで読める。\n\n表示中の状態は URL クエリ (`?target=&base=&path=&tab=`) に同期されるので、リロード・共有できる。\n\n| オプション | 説明 |\n|---|---|\n| `--port <port>` | 使用ポート (既定 4890、埋まっていれば自動加算) |\n| `--host <host>` | バインドホスト (既定 127.0.0.1) |\n| `--dir <path>` | 対象ディレクトリ (既定 cwd)。`--repo` は別名 |\n| `--exclude <pattern>` | ファイル一覧から隠すパターンを追加 (繰り返し可) |\n| `--no-open` | ブラウザを自動で開かない |\n| `--no-keep-alive` | 全タブが閉じられたらサーバーを終了する |\n\n[Orca](https://github.com/stablyai/orca) のターミナルから起動したときは、OS 既定のブラウザではなく Orca 内蔵ブラウザの新規タブに開く (`TERM_PROGRAM=Orca` で判定)。\n\nキーボード: `j` / `k` でファイル移動、`v` でレビュー済みトグル、⌘P で Quick Open、⌘B でサイドバー、⌘S で保存。\n\n## 機能\n\n- **サイドバー**: `Changes` (比較対象) / `Files` (全ファイル) / `Docs` (Markdown・HTML だけの一覧) をアイコン帯で切替\n- **表示モード**: side-by-side diff / inline diff / ファイル単体表示\n- **Markdown プレビュー**: `github-markdown-css` + 日本語の組版調整。見出しの目次、mermaid の描画、コードブロックのコピー。編集中の内容をライブで反映\n- **HTML プレビュー**: `/preview` から配信するので相対パスの CSS / JS / 画像も読め、スクリプトも動く\n- **型情報と診断**: hover / 型エラー / 定義ジャンプ / 参照検索と、プロジェクトの eslint による行マーカー\n- **レビュー** (git のみ): 比較範囲の切替、内容ハッシュで残るレビュー済みマーク、行/範囲コメント。状態はサーバー側にファイル保存されるのでブラウザを変えても消えない\n- **Pull request** (GitHub のみ): 範囲セレクタに open な PR が並び、選ぶと最新の head を fetch して base ブランチとの merge-base 比較で開く。コメントは PR 単位で残る。セレクタの横から PR ページと github.dev を開ける\n  - Changes の先頭の **Overview** で PR の本文と会話 (コメント・approve など) を読める。GitHub 上の行コメントはエディタ内の該当行に読み取り専用で表示され、ファイル一覧にも件数が出る\n  - merge 済みの PR も開ける (GitHub が固定している base コミットとの merge-base で diff を出す)。セレクタには最近 merge された PR も並ぶ\n- **設定**: 歯車から配色 (既定は OS 追従) と文字サイズ、ライセンス表記\n\n![型情報のホバーと行コメント](docs/kaleido-demo-hover-comment.gif)\n\n### ファイル一覧の除外設定\n\n既定で `node_modules` / `.git` / `dist` / `.next` などを除外する (git リポジトリでは加えて gitignore が効く)。\nルート直下に `.kaleido.json` を置くと上書きできる。\n\n```json\n{\n  \"exclude\": [\"docs/generated\", \"**/*.min.js\"],\n  \"useDefaultExcludes\": true,\n  \"maxFiles\": 20000\n}\n```\n\n`exclude` は gitignore 風のパターン (`/` を含まなければ任意階層のベース名にマッチ)。\n`useDefaultExcludes: false` で既定の除外リストを使わない。`maxFiles` は一覧の件数上限。\n\n## 開発\n\n```bash\npnpm install\npnpm dev                          # API サーバー (tsx watch) + vite dev server\npnpm typecheck\npnpm build                        # tsup (cli/server) + vite build (client)\n```\n\n## アーキテクチャ\n\n```\nsrc/\n├── shared/    # クライアント・サーバー共有型\n├── cli/       # commander エントリ。引数解釈 → サーバー起動 → ブラウザオープン\n├── server/    # Hono。files (git 非依存のファイル層) / git / ts / store / eslint / watcher\n└── client/    # React 19 + Monaco\n```\n\n設計上のポイント:\n\n- **TS ワーカーはバンドルしない**: 型情報はサーバーで対象プロジェクトの TypeScript を動かし、`/api/lang/*` への proxy provider で供給する\n- **型ホバーは modified 側のみ**: old 側は当時の依存を再現できず誤情報になるため\n- **git は「あれば使う」層**: 比較なしの状態も `{ target: 'browse', base: 'browse' }` という擬似 range で表し、diff モードと処理を共通化している\n- **プレビューは隔離する**: `allow-same-origin` なしの sandbox iframe で開き、`/api/*` は `Origin` を見て別オリジンからのリクエストを 403 にする\n","readmeFilename":"README.md"}