npm package: @git.zone/tools
Description: A CLI utility for managing and updating @git.zone development tools across package managers.
Author: Lossless GmbH
Latest version: 3.6.0

# @git.zone/tools 🛠️

A powerful CLI utility for managing your `@git.zone` development toolchain. Scan, update, and install all official `@git.zone` packages across multiple package managers — from a single command.

## Issue Reporting and Security

For reporting bugs, issues, or security vulnerabilities, please visit [community.foss.global/](https://community.foss.global/). This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a [code.foss.global/](https://code.foss.global/) account to submit Pull Requests directly.

## Installation 📦

Install globally with your preferred package manager:

```bash
# npm
npm install -g @git.zone/tools

# pnpm (recommended)
pnpm add -g @git.zone/tools

# yarn
yarn global add @git.zone/tools
```

This gives you the `gtools` binary.

## Usage 🚀

### Overview

```bash
gtools              # Show available commands
gtools update       # Check & update installed @git.zone packages
gtools install      # Interactively install missing @git.zone packages
```

### `gtools update` — Keep Everything Fresh ♻️

Scans all available package managers (npm, pnpm, yarn) on your system, detects globally installed `@git.zone` packages, and checks them against the latest published versions.

```bash
gtools update             # Interactive — prompts before updating
gtools update -y          # Auto-approve all updates (great for CI)
gtools update --verbose   # Show package manager detection diagnostics
```

**What it does:**

1. 🔍 Detects which package managers are available on your system
2. 📊 Shows a version table for each detected package manager
3. 🔄 Checks for a **self-update** of `gtools` itself first
4. 📋 Lists all globally installed `@git.zone` packages with current vs. latest versions
5. 🚀 Prompts you to update any outdated packages (or auto-updates with `-y`)

**Example output:**

```
Package managers:

  Name     Current     Latest      Status
  ──────────────────────────────────────────────
  pnpm     10.28.2     10.28.2     ✓ Up to date

Installed @git.zone packages:

  Package                      Current     Latest      PM      Status
  ─────────────────────────────────────────────────────────────────────
  @git.zone/cli                1.10.0      1.10.0      pnpm    ✓ Up to date
  @git.zone/tsbuild            4.3.0       4.3.0       pnpm    ✓ Up to date
  @git.zone/tstest             3.5.1       3.5.1       pnpm    ✓ Up to date

All packages are up to date!
```

### `gtools install` — Bootstrap Your Toolchain 🧰

Detects which official `@git.zone` packages are **not** installed and lets you pick which ones to add.

```bash
gtools install             # Interactive selection
gtools install -y          # Install all missing packages automatically
gtools install --verbose   # Show detection diagnostics
```

**Managed packages:**

| Package | Description |
|---------|-------------|
| `@git.zone/cli` | The main gitzone CLI (`gitzone` command) |
| `@git.zone/tsbuild` | TypeScript compiler wrapper |
| `@git.zone/tstest` | Test runner for TypeScript projects |
| `@git.zone/tsbundle` | Bundle TypeScript for browsers |
| `@git.zone/tswatch` | File watcher with live reload |
| `@git.zone/tspublish` | Publish packages to npm registries |
| `@git.zone/tsdoc` | Documentation generator |
| `@git.zone/tsdocker` | Docker integration for TS projects |
| `@git.zone/tsview` | Component viewer |
| `@git.zone/tsrust` | Rust cross-compilation support |

### Smart Package Manager Detection 🔎

`gtools` doesn't assume which package manager you use. It probes for `npm`, `pnpm`, and `yarn` using multiple detection strategies:

1. **`which` command** — checks the system PATH
2. **`--version` fallback** — directly invokes the PM if `which` fails

When installing, it recommends the package manager that already has the most `@git.zone` packages, so your toolchain stays consistent.

## Programmatic API 🔧

You can also use `@git.zone/tools` as a library:

```typescript
import { runCli } from '@git.zone/tools';

// Launch the CLI programmatically
await runCli();
```

Or use the `PackageManagerUtil` class directly for custom tooling:

```typescript
import { PackageManagerUtil } from '@git.zone/tools/dist_ts/mod_update/classes.packagemanager.js';

const pmUtil = new PackageManagerUtil();

// Check if pnpm is available
const pnpmInfo = await pmUtil.detectPackageManager('pnpm');
console.log(pnpmInfo.available); // true/false

// Get globally installed @git.zone packages
const packages = await pmUtil.getInstalledPackages('pnpm');

// Get latest version from registry (checks private registry first, then npm)
const latest = await pmUtil.getLatestVersion('@git.zone/tsbuild');

// Compare versions
pmUtil.isNewerVersion('1.0.0', '2.0.0'); // true
```

## License and Legal Information

This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the [license](./license) file.

**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.

### Trademarks

This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH or third parties, and are not included within the scope of the MIT license granted herein.

Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines or the guidelines of the respective third-party owners, and any usage must be approved in writing. Third-party trademarks used herein are the property of their respective owners and used only in a descriptive manner, e.g. for an implementation of an API or similar.

### Company Information

Task Venture Capital GmbH
Registered at District Court Bremen HRB 35230 HB, Germany

For any legal inquiries or further information, please contact us via email at hello@task.vc.

By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.