{"_id":"@ahmdirfnz/tars","_rev":"3-7b4e9a25bc3aef70052583cdbe2a864c","name":"@ahmdirfnz/tars","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@ahmdirfnz/tars","version":"0.1.0","keywords":["cli","developer-tools","project-launcher","dev-server","process-manager"],"author":{"name":"ahmdirfnz"},"license":"ISC","_id":"@ahmdirfnz/tars@0.1.0","maintainers":[{"name":"ahmdirfnz","email":"irfanz6985@gmail.com"}],"bin":{"dl":"dist/cli.js","tars":"dist/cli.js","devlaunch":"dist/cli.js"},"dist":{"shasum":"47d77fbc8cb8c2e31d2a67e70f0f6e58498c1754","tarball":"https://registry.npmjs.org/@ahmdirfnz/tars/-/tars-0.1.0.tgz","fileCount":7,"integrity":"sha512-cca5ADn8tCYLilbfoNbytHg75oybqz1PcwSd4+7ge7mqGKo7kDgAgwThmC+IH4Uiqar99kh+ThqPnSY4qBrSXw==","signatures":[{"sig":"MEQCIBYTgH0SBczXKnHL4cx0jt/CqpdiXzY88GT9jhH5p/7rAiBuA0gxs+XkH6D/Oe7WYv/N7q8nIe2ZNLBbgJN+ZFCe4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":175435},"main":"dist/cli.cjs","type":"module","types":"./dist/cli.d.ts","module":"dist/cli.js","engines":{"node":">=22.13.0"},"scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup src/cli.ts --format esm,cjs --dts --clean","prepare":"npm run build","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test"},"_npmUser":{"name":"ahmdirfnz","email":"irfanz6985@gmail.com"},"_npmVersion":"11.6.2","description":"A minimalist CLI for discovering, launching, and managing local development projects","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ora":"^9.4.1","zod":"^4.4.3","chalk":"^5.6.2","execa":"^10.0.0","fs-extra":"^11.4.0","commander":"^15.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@inquirer/prompts":"^8.5.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"npm@11.6.2","devDependencies":{"tsx":"^4.23.1","tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^5.6.3","@types/node":"^26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/tars_0.1.0_1784882227686_0.014105408092401017","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@ahmdirfnz/tars","version":"0.1.1","keywords":["cli","developer-tools","project-launcher","dev-server","process-manager"],"author":{"name":"ahmdirfnz"},"license":"ISC","_id":"@ahmdirfnz/tars@0.1.1","maintainers":[{"name":"ahmdirfnz","email":"irfanz6985@gmail.com"}],"homepage":"https://github.com/ahmdirfnz/Tars#readme","bugs":{"url":"https://github.com/ahmdirfnz/Tars/issues"},"bin":{"tars":"dist/cli.js"},"dist":{"shasum":"d5ff3ccdaa2bb33fd1e292a7c02949beaeec453b","tarball":"https://registry.npmjs.org/@ahmdirfnz/tars/-/tars-0.1.1.tgz","fileCount":7,"integrity":"sha512-NZBSPh0K76a4mAWEAJ+qzBB1vP82qk7RN8Hm1EH6M8eb/ctr9S169FC04X1MKp7pGOHJ2HTaN2Qld+bkXiqn0Q==","signatures":[{"sig":"MEYCIQDfJutV1vmq0jT8CtLF9IuojRp03pOqoInBU8BL56Db5AIhAMJm8BxRrkfaUsT9SHgPndgN7bhP0Bl4cf41+lvdp9yE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":181471},"main":"dist/cli.cjs","type":"module","types":"./dist/cli.d.ts","module":"dist/cli.js","engines":{"node":">=22.13.0"},"gitHead":"c554ded78051ba12caa4f2a73b770ab2cd47e49e","scripts":{"dev":"tsx src/cli.ts","lint":"tsc --noEmit","test":"vitest run","build":"tsup src/cli.ts --format esm,cjs --dts --clean","prepare":"npm run build","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test"},"_npmUser":{"name":"ahmdirfnz","email":"irfanz6985@gmail.com"},"repository":{"url":"git+https://github.com/ahmdirfnz/Tars.git","type":"git"},"_npmVersion":"11.6.2","description":"A minimalist CLI for discovering, launching, and managing local development projects","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ora":"^9.4.1","zod":"^4.4.3","chalk":"^5.6.2","execa":"^10.0.0","fs-extra":"^11.4.0","commander":"^15.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@inquirer/prompts":"^8.5.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"npm@11.6.2","devDependencies":{"tsx":"^4.23.1","tsup":"^8.5.1","vitest":"^4.1.10","typescript":"^5.6.3","@types/node":"^26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/tars_0.1.1_1784884828493_0.22942657272701372","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@ahmdirfnz/tars","version":"0.1.2","description":"A minimalist CLI for discovering, launching, and managing local development projects","main":"dist/cli.cjs","module":"dist/cli.js","scripts":{"test":"vitest run","build":"tsup src/cli.ts --format esm,cjs --dts --clean","dev":"tsx src/cli.ts","lint":"tsc --noEmit","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test","prepare":"npm run build"},"keywords":["cli","developer-tools","project-launcher","dev-server","process-manager"],"author":{"name":"ahmdirfnz"},"license":"ISC","engines":{"node":">=22.13.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"packageManager":"npm@11.6.2","repository":{"type":"git","url":"git+https://github.com/ahmdirfnz/Tars.git"},"homepage":"https://github.com/ahmdirfnz/Tars#readme","bugs":{"url":"https://github.com/ahmdirfnz/Tars/issues"},"type":"module","bin":{"tars":"dist/cli.js"},"dependencies":{"@inquirer/prompts":"^8.5.2","chalk":"^5.6.2","commander":"^15.0.0","execa":"^10.0.0","fast-glob":"^3.3.3","fs-extra":"^11.4.0","ora":"^9.4.1","picocolors":"^1.1.1","zod":"^4.4.3"},"devDependencies":{"@types/node":"^26.1.1","tsup":"^8.5.1","tsx":"^4.23.1","typescript":"^5.6.3","vitest":"^4.1.10"},"gitHead":"94cae86e61162ce692880c46081d08ffe9c4c257","types":"./dist/cli.d.ts","_id":"@ahmdirfnz/tars@0.1.2","_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-SLygS/LJVLhoS7FjGPaLkshHifdu4q6Gx69vy++VkTMbDmbuOBXb1CGIlr8P6UnKWCU8kNDg2DuZvNMko8w4ag==","shasum":"c73cdb3dcecc006eb8b1c1ca674906b81e1f43ab","tarball":"https://registry.npmjs.org/@ahmdirfnz/tars/-/tars-0.1.2.tgz","fileCount":7,"unpackedSize":184599,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDQDv150Vj5YvHs+diPwqt/vYg9PsPx/fNjj/1znEwL4AIhAMuzQp1XPi5Z6i0Dan46kveKANMNz36ggPhWymxn9WUA"}]},"_npmUser":{"name":"ahmdirfnz","email":"irfanz6985@gmail.com"},"directories":{},"maintainers":[{"name":"ahmdirfnz","email":"irfanz6985@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tars_0.1.2_1784885645256_0.8761233798913943"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-24T08:37:07.551Z","modified":"2026-07-24T09:34:05.540Z","0.1.0":"2026-07-24T08:37:07.842Z","0.1.1":"2026-07-24T09:20:28.615Z","0.1.2":"2026-07-24T09:34:05.388Z"},"bugs":{"url":"https://github.com/ahmdirfnz/Tars/issues"},"author":{"name":"ahmdirfnz"},"license":"ISC","homepage":"https://github.com/ahmdirfnz/Tars#readme","keywords":["cli","developer-tools","project-launcher","dev-server","process-manager"],"repository":{"type":"git","url":"git+https://github.com/ahmdirfnz/Tars.git"},"description":"A minimalist CLI for discovering, launching, and managing local development projects","maintainers":[{"name":"ahmdirfnz","email":"irfanz6985@gmail.com"}],"readme":"# Tars\n\nTars is a production-oriented CLI that launches local development servers with one command.\n\nPhase 1 delivered in this repository focuses on JavaScript/TypeScript projects and a stable core architecture.\n\n## What Tars solves\n\nWhen you work across many projects, it is easy to forget startup commands and package manager differences. Tars centralizes project registration and launches the right command quickly.\n\n## Installation\n\n```bash\nnpm install --global @ahmdirfnz/tars\n```\n\nThe command is then available globally:\n\n```bash\ntars\n```\n\n## Development setup\n\n```bash\nnpm install\nnpm run dev\n```\n\nTo link a development checkout globally:\n\n```bash\nnpm run build\nnpm link\n```\n\n## Available commands\n\nPhase 1 implemented:\n\n- `tars` - open the saved/running project dashboard\n- `tars go [target]` - explicit seamless mode (name/path/current directory)\n- `tars add [path]` - register a project (`tars add .` supported)\n- `tars list` - list registered projects\n- `tars run [name]` - run by fuzzy name\n- `tars .` - run current directory without registering\n- `tars running` (or `tars status`) - list projects currently running in the background\n- `tars stop [name]` - stop a background project\n\nPlanned placeholders for Phase 2/3:\n\n- `tars remove`\n- `tars edit`\n- `tars scan`\n- `tars recent`\n- `tars doctor`\n- `tars config`\n- `tars workspace`\n\n## Usage examples\n\n```bash\n# Register current project\ntars add .\n\n# Pick a project from interactive searchable list\ntars\n\n# Seamless launch by path or name\ntars go .\ntars go masajid\n\n# Run by fuzzy match\ntars run masajid\n\n# Start more projects; each launch continues in the background\ntars go islah\ntars go poc-ilpf\n\n# Inspect or stop active projects\ntars running\ntars stop islah\n\n# Show all registered projects\ntars list\n```\n\n## Supported project types (current)\n\n- JavaScript and TypeScript projects with `package.json`\n- Framework inference: Next.js, Vite, React, Vue, Nuxt, Astro, SvelteKit, Express, NestJS, Tauri\n- Script selection priority: `dev`, `start`, `serve`, `develop`\n- Package manager detection from lockfiles: pnpm, yarn, bun, npm\n- Fallback command discovery from other `package.json` scripts, common project markers,\n  Makefile targets, and safe run commands documented in README or AGENTS files\n- Recursive discovery across nested project folders, preserving each command's working directory\n- Safe normalization of documented `cd subfolder && ./run.sh` commands into the\n  selected subfolder without invoking a shell chain\n- Interactive command selection when more than one plausible fallback is found\n\n## Configuration location\n\nTars stores user-level config at:\n\n```text\n~/.devlaunch/config.json\n```\n\nSchema includes:\n\n- project id\n- name\n- path\n- custom command\n- preferred port\n- last opened time\n- tags\n\n## Safety behavior\n\n- Never deletes project directories\n- Never runs unknown command silently\n- Only offers simple documented commands; shell chains, redirects, and substitutions are ignored\n- Detects occupied explicit ports and lets you reuse the existing listener or select the next free port\n- Assigns unique preferred ports to saved projects and passes them to supported dev servers\n- Opens detected website URLs in Google Chrome and keeps launched servers running in the background\n- Tracks active background processes, URLs, ports, logs, and start times\n- Discovers responsive local HTTP listeners started outside Tars, including SSH\n  port-forwarded websites, and labels them as external\n- Uses `lsof` on macOS, `lsof`/`ss`/`netstat` fallbacks on Linux, and `netstat`\n  on Windows; recognizes both HTTP and local HTTPS websites\n- The no-argument dashboard can launch saved projects, stop one managed website,\n  stop all managed websites, refresh status, or exit\n- Uses a compact responsive dashboard instead of wide terminal tables, with a\n  short TARS movement intro in interactive terminals\n- Stop choices show the website port, URL, ownership, and managed PID so repeated\n  project names remain easy to distinguish\n- Externally discovered websites can be stopped individually after confirmation;\n  Tars re-checks that the detected PID still owns the selected port first\n- Interactive submenus include `← Back` so navigation returns to the main dashboard\n- Treats command-picker selection or manual entry as approval; only automatically inferred\n  fallback commands require a separate confirmation\n- Validates project path before execution\n- Prevents duplicate registered paths\n- Uses atomic writes for config updates\n- Backs up malformed config before reset\n\n## Troubleshooting\n\n- If no projects are listed: run `tars add .` in your project directory.\n- If command cannot be determined: add a custom command during registration.\n- If lockfile detection is wrong: ensure only the intended lockfile exists.\n\n## How to add a new framework adapter\n\n1. Create a new adapter in `src/adapters/` implementing `Adapter`.\n2. Add framework detection logic in `src/core/project-detector.ts`.\n3. Register adapter mapping in `src/adapters/registry.ts`.\n4. Add tests for detection and command generation in `test/`.\n\n## Build and publish workflow\n\n```bash\nnpm run build\nnpm test\nnpm pack\n```\n\nFor local global usage:\n\n```bash\nnpm link\n```\n","readmeFilename":"README.md"}