{"_id":"@avol-io/2chatty","_rev":"3-f91378fce6c3ed2cf697bdc6c5c6e0fe","name":"@avol-io/2chatty","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.1":{"name":"@avol-io/2chatty","version":"1.0.1","keywords":["cli","ai","chat","llm","context","files","tui"],"author":{"name":"avol.io"},"license":"GPL-3.0-only","_id":"@avol-io/2chatty@1.0.1","maintainers":[{"name":"avolio","email":"social@avol.io"}],"homepage":"https://github.com/avol-io/2chatty#readme","bugs":{"url":"https://github.com/avol-io/2chatty/issues"},"bin":{"2chatty":"bin/2chatty.js"},"dist":{"shasum":"cf035bff5eb031b2294b417525d111eb906e6b47","tarball":"https://registry.npmjs.org/@avol-io/2chatty/-/2chatty-1.0.1.tgz","fileCount":4,"integrity":"sha512-YrM2fRfNjHxD8GOoHdCx3ZdxybeNhKHPmeGu2Tr4WRU/cbkyzialgJeCne6Fw/dOT9zG3aeF9/h1JijNL3Cp1g==","signatures":[{"sig":"MEQCIARBGMBdYe4IbkFKwZvEuB+dwZuTJhMtElUF4fOD5V69AiBrEpXOVRayD1Sre5gqd0jiNmlLC28aRQxVPR60bgpQJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50942},"engines":{"node":">=18"},"gitHead":"4f1d11b0ae18f5d7627e3e6f582663cb914986b4","_npmUser":{"name":"avolio","email":"social@avol.io"},"repository":{"url":"git+https://github.com/avol-io/2chatty.git","type":"git"},"_npmVersion":"10.8.2","description":"Interactive TUI to collect source files into a markdown file ready for AI chat","directories":{},"_nodeVersion":"18.20.5","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/2chatty_1.0.1_1775693132935_0.14061686796243844","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@avol-io/2chatty","version":"1.1.0","keywords":["cli","ai","chat","llm","context","files","tui"],"author":{"name":"avol.io"},"license":"GPL-3.0-only","_id":"@avol-io/2chatty@1.1.0","maintainers":[{"name":"avolio","email":"social@avol.io"}],"homepage":"https://github.com/avol-io/2chatty#readme","bugs":{"url":"https://github.com/avol-io/2chatty/issues"},"bin":{"2chatty":"bin/2chatty.js"},"dist":{"shasum":"05e2967d962e1dc02d53836974af3f9912dcc206","tarball":"https://registry.npmjs.org/@avol-io/2chatty/-/2chatty-1.1.0.tgz","fileCount":4,"integrity":"sha512-xRVIAA2o+t96vheyvgqcfgj0DjiJBZMAIDnwbfWi1O+WZgadEmlPukOCvyXNm5mCQyL5SRI2nynygBSiD0nmzQ==","signatures":[{"sig":"MEUCIHHIHxmW6C44ea6pD5FZwfBGkZyWEtMmdtwjGzpPdv4iAiEAi3ZcyUbl6j8rRI7u+HnB/UTCTMQ7H84D9nmDhWMEXbY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54159},"engines":{"node":">=18"},"gitHead":"2be0c63373ff06cc3a9d78797bc965d28fd94c58","_npmUser":{"name":"avolio","email":"social@avol.io"},"repository":{"url":"git+https://github.com/avol-io/2chatty.git","type":"git"},"_npmVersion":"10.8.2","description":"Interactive TUI to collect source files into a markdown file ready for AI chat","directories":{},"_nodeVersion":"18.20.5","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/2chatty_1.1.0_1776458641593_0.5398670305904791","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@avol-io/2chatty","version":"1.1.1","description":"Interactive TUI to collect source files into a markdown file ready for AI chat","keywords":["cli","ai","chat","llm","context","files","tui"],"author":{"name":"avol.io"},"license":"GPL-3.0-only","repository":{"type":"git","url":"git+https://github.com/avol-io/2chatty.git"},"homepage":"https://www.avol.io/2chatty","engines":{"node":">=18"},"bin":{"2chatty":"bin/2chatty.js"},"publishConfig":{"access":"public"},"_id":"@avol-io/2chatty@1.1.1","gitHead":"212f9721b607befb04ae2391720824d855316c51","bugs":{"url":"https://github.com/avol-io/2chatty/issues"},"_nodeVersion":"18.20.5","_npmVersion":"10.8.2","dist":{"integrity":"sha512-4GxgVeI4SUc5oEotHdUbQrU2V2cYrDfXMBohq+8z76I2LGzGS+RQD6upCkh/n4THoEOm5hiAd3g8c68ksmeYNA==","shasum":"09d06975cfcdebf883c3076d455980859e991891","tarball":"https://registry.npmjs.org/@avol-io/2chatty/-/2chatty-1.1.1.tgz","fileCount":4,"unpackedSize":54146,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIANggCCA+XUsd89G+S3qiFjxTTh4WGPSSqaBiAGmt0GKAiEA4LUmDkYuRH/ZxenfUM6URkk7QTwg8L/tQfuKUPkmp5k="}]},"_npmUser":{"name":"avolio","email":"social@avol.io"},"directories":{},"maintainers":[{"name":"avolio","email":"social@avol.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/2chatty_1.1.1_1776462427406_0.3473397624814427"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-09T00:05:32.874Z","modified":"2026-04-17T21:47:07.650Z","1.0.1":"2026-04-09T00:05:33.079Z","1.1.0":"2026-04-17T20:44:01.800Z","1.1.1":"2026-04-17T21:47:07.538Z"},"bugs":{"url":"https://github.com/avol-io/2chatty/issues"},"author":{"name":"avol.io"},"license":"GPL-3.0-only","homepage":"https://www.avol.io/2chatty","keywords":["cli","ai","chat","llm","context","files","tui"],"repository":{"type":"git","url":"git+https://github.com/avol-io/2chatty.git"},"description":"Interactive TUI to collect source files into a markdown file ready for AI chat","maintainers":[{"name":"avolio","email":"social@avol.io"}],"readme":"```\n ██████╗  ██████╗██╗  ██╗ █████╗ ████████╗████████╗██╗   ██╗\n╚════██╗ ██╔════╝██║  ██║██╔══██╗╚══██╔══╝╚══██╔══╝╚██╗ ██╔╝\n █████╔╝ ██║     ███████║███████║   ██║      ██║    ╚████╔╝\n██╔═══╝  ██║     ██╔══██║██╔══██║   ██║      ██║     ╚██╔╝\n███████╗ ╚██████╗██║  ██║██║  ██║   ██║      ██║      ██║\n╚══════╝  ╚═════╝╚═╝  ╚═╝╚═╝  ╚═╝  ╚═╝      ╚═╝      ╚═╝\n```\n\n> **Pick your source files. Dump them into markdown. Feed your AI.**\n\n[![npm version](https://img.shields.io/npm/v/@avol-io/2chatty)](https://www.npmjs.com/package/@avol-io/2chatty)\n[![license](https://img.shields.io/npm/l/@avol-io/2chatty)](./LICENSE)\n[![node](https://img.shields.io/node/v/@avol-io/2chatty)](https://nodejs.org)\n\n---\n\n\n`2chatty` is a zero-dependency interactive terminal UI that lets you browse your project's source files, cherry-pick exactly what you need, and collect them into a single `chat.md` file — ready to paste into ChatGPT, Claude, Gemini, or any other AI chat.\n\nNo config files. No install required. Just run it from your project root.\n\n```\n◆ File Collector  exts: ts, tsx  |  files found: 38\n↑↓ move · ←→ collapse/expand · SPACE toggle · A all/none · E expand all · W collapse all · ENTER confirm · Q quit\nSelected: 5 / 38\n\n  [~] ▾ src/  (31 files)\n  [✓] ▾ components/  (8 files)\n        [✓] Button.tsx\n        [✓] Input.tsx\n        [✓] Modal.tsx\n  [ ] ▸ hooks/  (6 files)\n  [ ] ▸ utils/  (5 files)\n  [ ] app.tsx\n  [ ] main.ts\n```\n\nEach selected file is appended to `chat.md` as a fenced code block:\n\n````md\n### `src/components/Button.tsx`\n\n```tsx\n// ... file content ...\n```\n````\n\n\n\n## Usage\n\nNo installation needed — just use `npx`:\n\n```bash\nnpx @avol-io/2chatty [ext1] [ext2] [ext3] ...\n```\n\n### Examples\n\n```bash\n# TypeScript + React project\nnpx @avol-io/2chatty ts tsx\n\n# Full-stack — grab everything relevant\nnpx @avol-io/2chatty ts tsx scss\n\n# Plain JavaScript project\nnpx @avol-io/2chatty js jsx css\n\n# Java project\nnpx @avol-io/2chatty java\n\n# No filter — collect all files (asks for confirmation)\nnpx @avol-io/2chatty\n```\n\nRun from your **project root**. The tool scans from the current working directory and appends selected file contents to `chat.md` in the same folder.\n\n> **Tip:** `chat.md` is *appended*, not overwritten. Run the tool multiple times to collect files across different sessions. Delete `chat.md` manually to start fresh.\n\n### No-filter mode\n\nIf you run `2chatty` without specifying any extension, it will ask for confirmation before scanning all files in the project:\n\n\n\n\n\n## Keyboard shortcuts\n\n| Key | Action |\n|---|---|\n| `↑` / `↓` | Move cursor up / down |\n| `→` | Expand collapsed folder (or step into first child) |\n| `←` | Collapse expanded folder (or jump to parent folder) |\n| `Space` | Toggle file — or bulk toggle **all files in a folder** |\n| `A` | Select all / deselect all |\n| `E` | Expand all folders |\n| `W` | Collapse all folders |\n| `PgUp` / `PgDn` | Scroll one page up / down |\n| `Home` / `End` | Jump to first / last item |\n| `Enter` | Confirm selection and write `chat.md` |\n| `Q` / `Ctrl+C` | Quit without writing |\n\n### Folder checkbox states\n\n| Symbol | Meaning |\n|---|---|\n| `[✓]` green | All files in the folder are selected |\n| `[~]` yellow | Some files selected (partial) |\n| `[ ]` | No files selected |\n\n\n\n## Output format\n\nSelected files are appended to `chat.md` in your project root, each wrapped in a fenced markdown code block with the correct language tag:\n\n````md\n### `src/components/Button.tsx`\n\n```tsx\nimport React from 'react';\n// ...\n```\n\n### `src/styles/main.scss`\n\n```scss\n$primary: #01696f;\n// ...\n```\n````\n\nThis format is recognised and rendered correctly by all major AI chat interfaces.\n\n\n\n## Skipped directories\n\nThe following directories are automatically ignored during the file scan:\n\n| Category | Directories |\n|---|---|\n| VCS | `.git` · `.svn` · `.hg` |\n| JS / Node | `node_modules` · `dist` · `build` · `.next` · `coverage` · `.cache` · `.turbo` · `out` · `.nuxt` · `.output` · `.svelte-kit` |\n| Java / Maven / Gradle | `target` · `.gradle` · `.mvn` |\n| IDE | `.idea` · `.vscode` · `.eclipse` · `.settings` |\n| Misc | `__pycache__` · `.pytest_cache` · `.mypy_cache` · `vendor` |\n\n> **Note:** hidden files and folders (e.g. `.storybook`, `.env`, `.eslintrc`) are **included** in the scan — only the directories listed above are excluded. This ensures config files relevant to your project are always visible and selectable.\n\n\n\n## Requirements\n\n- **Node.js** ≥ 18\n- An **interactive TTY** terminal (standard terminal emulators, iTerm2, Windows Terminal, WSL — all work fine)\n\n---\n\n## License\n\n[MIT](./LICENSE) © [avol.io](https://www.avol.io)","readmeFilename":"README.md"}