taskmux


Nametaskmux JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryModern tmux development environment manager with real-time health monitoring, auto-restart, and WebSocket API
upload_time2025-07-13 11:02:12
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords daemon development manager monitoring session terminal tmux
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Taskmux

A modern tmux development environment manager with real-time health monitoring, auto-restart capabilities, and WebSocket API. Built with Python using libtmux for reliable session management.

## Why Taskmux?

Instead of manually managing multiple tmux windows or remembering complex command sequences, Taskmux provides:

- **Dynamic task management**: Define tasks in JSON, manage via modern CLI
- **Health monitoring**: Real-time task health checks with visual indicators  
- **Auto-restart**: Automatically restart failed tasks to keep development flowing
- **WebSocket API**: Real-time status updates and remote task management
- **Rich CLI**: Beautiful terminal output with Typer and Rich integration
- **File watching**: Automatically detects config changes and reloads tasks
- **Zero setup**: Single command installation with uv tool management

## Installation

### Prerequisites

- [tmux](https://github.com/tmux/tmux) - Terminal multiplexer
- [uv](https://docs.astral.sh/uv/) - Modern Python package manager

### Install uv (if you don't have it)

**Quick install** (macOS/Linux):
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```

**Windows**:
```powershell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```

**Alternative methods**:
```bash
# Via Homebrew (macOS)
brew install uv

# Via pipx
pipx install uv

# Via WinGet (Windows)
winget install --id=astral-sh.uv -e
```

### Install Taskmux

**Recommended** (installs globally):
```bash
uv tool install taskmux
```

**From source**:
```bash
git clone https://github.com/your-repo/taskmux
cd taskmux
uv tool install .
```

After installation, `taskmux` command will be available globally.

## Quick Start

1. **Create config file** in your project root:

```json
{
  "name": "myproject",
  "tasks": {
    "server": "npm run dev",
    "build": "npm run build:watch", 
    "test": "npm run test:watch",
    "db": "docker-compose up postgres"
  }
}
```

2. **Start all tasks**:
```bash
taskmux start
```

3. **Monitor and manage**:
```bash
taskmux list          # See what's running with health status
taskmux health        # Detailed health check table
taskmux restart server # Restart specific task
taskmux logs -f test   # Follow logs
```

## Commands Reference

### Core Commands

```bash
# Session Management
taskmux start                    # Start all tasks in tmux session
taskmux status                   # Show session and task status
taskmux list                     # List all tasks with health indicators
taskmux stop                     # Stop session and all tasks

# Task Management  
taskmux restart <task>           # Restart specific task
taskmux kill <task>              # Kill specific task
taskmux add <task> "<command>"   # Add new task to config
taskmux remove <task>            # Remove task from config

# Monitoring
taskmux health                   # Health check with status table
taskmux logs <task>              # Show recent logs
taskmux logs -f <task>           # Follow logs (live)
taskmux logs -n 100 <task>       # Show last N lines

# Advanced
taskmux watch                    # Watch config for changes
taskmux daemon --port 8765       # Run with WebSocket API
```

### Command Examples

```bash
# Start development environment
taskmux start

# Check what's running with health status
taskmux list
# Output:
# Session: myproject
# ──────────────────────────────────────────────────
# 💚 Healthy  server          npm run dev
# 💚 Healthy  build           npm run build:watch
# 🔴 Unhealthy test           npm run test:watch
# 💚 Healthy  db              docker-compose up postgres

# Detailed health check
taskmux health
# ┏━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┓
# ┃ Status ┃ Task    ┃ Health    ┃
# ┡━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━┩
# │ 💚     │ server  │ Healthy   │
# │ 💚     │ build   │ Healthy   │
# │ 🔴     │ test    │ Unhealthy │
# │ 💚     │ db      │ Healthy   │
# └────────┴─────────┴───────────┘

# Restart a misbehaving service
taskmux restart server

# Add a new background task
taskmux add worker "python background_worker.py"

# Follow logs for debugging
taskmux logs -f test

# Watch config file for changes
taskmux watch
```

## Configuration

### Config File Format

Create `taskmux.json` in your project root:

```json
{
  "name": "session-name",
  "tasks": {
    "task-name": "command to run",
    "another-task": "another command"
  }
}
```

### Config Examples

**Web Development**:
```json
{
  "name": "webapp",
  "tasks": {
    "frontend": "npm run dev",
    "backend": "python manage.py runserver",
    "database": "docker-compose up -d postgres",
    "redis": "redis-server",
    "worker": "celery worker -A myapp",
    "tailwind": "npx tailwindcss -w"
  }
}
```

**Data Science**:
```json
{
  "name": "analysis",
  "tasks": {
    "jupyter": "jupyter lab --port=8888",
    "mlflow": "mlflow ui --port=5000",
    "airflow": "airflow webserver",
    "postgres": "docker run -p 5432:5432 postgres:13",
    "tensorboard": "tensorboard --logdir=./logs"
  }
}
```

**Microservices**:
```json
{
  "name": "microservices", 
  "tasks": {
    "api-gateway": "node gateway/server.js",
    "user-service": "go run services/user/main.go",
    "order-service": "python services/orders/app.py",
    "redis": "redis-server",
    "postgres": "docker-compose up -d db",
    "monitoring": "prometheus --config.file=prometheus.yml"
  }
}
```

## Advanced Features

### Daemon Mode with WebSocket API

Run Taskmux as a background daemon with real-time API:

```bash
# Start daemon on port 8765 (default)
taskmux daemon

# Custom port
taskmux daemon --port 9000
```

**WebSocket API Usage**:
```javascript
// Connect to WebSocket API
const ws = new WebSocket('ws://localhost:8765');

// Get status
ws.send(JSON.stringify({
  command: "status"
}));

// Restart task
ws.send(JSON.stringify({
  command: "restart",
  params: { task: "server" }
}));

// Get logs
ws.send(JSON.stringify({
  command: "logs", 
  params: { task: "server", lines: 50 }
}));
```

### Health Monitoring & Auto-restart

Taskmux continuously monitors task health and can auto-restart failed processes:

- **Health indicators**: 💚 Healthy, 🔴 Unhealthy, ○ Stopped
- **Process monitoring**: Detects when tasks exit or become unresponsive
- **Auto-restart**: Daemon mode automatically restarts failed tasks
- **Health checks**: Run `taskmux health` for detailed status

### File Watching

Monitor config changes in real-time:

```bash
# Terminal 1: Start file watcher
taskmux watch

# Terminal 2: Edit config
echo '{"name": "test", "tasks": {"new": "echo hello"}}' > taskmux.json
# Watcher automatically reloads config and updates running tasks

# New task is immediately available
taskmux restart new
```

## Workflow Integration

### Daily Development

```bash
# Morning: Start everything
taskmux start

# During development: Monitor health
taskmux health

# Restart services as needed
taskmux restart api
taskmux logs -f frontend

# Add new services on the fly
taskmux add monitoring "python monitor.py"

# Run with file watching for config changes
taskmux watch

# Evening: Stop everything
taskmux stop
```

### Tmux Integration

Taskmux creates standard tmux sessions. You can use all tmux commands:

```bash
# Attach to session
tmux attach-session -t myproject

# Switch between task windows
# Ctrl+b 1, Ctrl+b 2, etc.

# Create additional windows
tmux new-window -t myproject -n shell

# Detach and reattach later
# Ctrl+b d
tmux attach-session -t myproject
```

### Multiple Projects

Each project gets its own tmux session based on the `name` field:

```bash
# Project A (session: "webapp")
cd ~/projects/webapp
taskmux start

# Project B (session: "api") 
cd ~/projects/api
taskmux start

# Both run simultaneously with separate sessions
tmux list-sessions
# webapp: 4 windows
# api: 2 windows
```

## Architecture

Taskmux is built with modern Python tooling:

- **libtmux**: Reliable Python API for tmux session management
- **Typer**: Modern CLI framework with rich help and validation
- **Rich**: Beautiful terminal output with tables and progress bars
- **WebSockets**: Real-time API for remote monitoring and control
- **asyncio**: Async health monitoring and daemon capabilities
- **Watchdog**: File system monitoring for config changes

## Troubleshooting

### Common Issues

**Config not found**:
```bash
Error: Config file taskmux.json not found
```
- Ensure `taskmux.json` exists in current directory
- Check JSON syntax with `jq . taskmux.json`

**Session already exists**:
```bash
Session 'myproject' already exists
```
- Kill existing session: `taskmux stop`
- Or attach to it: `tmux attach-session -t myproject`

**Task not restarting**:
- Check if task name exists: `taskmux list`
- Verify session is running: `taskmux status`
- Check task health: `taskmux health`

**libtmux connection issues**:
- Ensure tmux is installed and in PATH
- Try restarting tmux server: `tmux kill-server`

### Debug Mode

View detailed tmux session information:
```bash
# Check if session exists
tmux has-session -t myproject

# List windows in session  
tmux list-windows -t myproject

# View logs manually
tmux capture-pane -t myproject:taskname -p

# Check daemon logs
tail -f ~/.taskmux/daemon.log
```

## Contributing

Taskmux follows modern Python development practices:

1. **Modular architecture**: Separate concerns (CLI, tmux management, daemon, config)
2. **Type hints**: Full type annotation for better IDE support
3. **Rich CLI**: Beautiful, user-friendly command-line interface
4. **Async support**: Background monitoring and WebSocket API
5. **Comprehensive testing**: Test across different tmux versions and platforms

## License

MIT License - feel free to modify and distribute.
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "taskmux",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "daemon, development, manager, monitoring, session, terminal, tmux",
    "author": null,
    "author_email": "Nik Cubrilovic <git@nikcub.me>",
    "download_url": "https://files.pythonhosted.org/packages/d7/27/ec40c5a0e94d6bcdd1d51d8c18ae17748d72de65292b44d2aeeb67dffab1/taskmux-0.1.0.tar.gz",
    "platform": null,
    "description": "# Taskmux\n\nA modern tmux development environment manager with real-time health monitoring, auto-restart capabilities, and WebSocket API. Built with Python using libtmux for reliable session management.\n\n## Why Taskmux?\n\nInstead of manually managing multiple tmux windows or remembering complex command sequences, Taskmux provides:\n\n- **Dynamic task management**: Define tasks in JSON, manage via modern CLI\n- **Health monitoring**: Real-time task health checks with visual indicators  \n- **Auto-restart**: Automatically restart failed tasks to keep development flowing\n- **WebSocket API**: Real-time status updates and remote task management\n- **Rich CLI**: Beautiful terminal output with Typer and Rich integration\n- **File watching**: Automatically detects config changes and reloads tasks\n- **Zero setup**: Single command installation with uv tool management\n\n## Installation\n\n### Prerequisites\n\n- [tmux](https://github.com/tmux/tmux) - Terminal multiplexer\n- [uv](https://docs.astral.sh/uv/) - Modern Python package manager\n\n### Install uv (if you don't have it)\n\n**Quick install** (macOS/Linux):\n```bash\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n```\n\n**Windows**:\n```powershell\npowershell -ExecutionPolicy ByPass -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n```\n\n**Alternative methods**:\n```bash\n# Via Homebrew (macOS)\nbrew install uv\n\n# Via pipx\npipx install uv\n\n# Via WinGet (Windows)\nwinget install --id=astral-sh.uv -e\n```\n\n### Install Taskmux\n\n**Recommended** (installs globally):\n```bash\nuv tool install taskmux\n```\n\n**From source**:\n```bash\ngit clone https://github.com/your-repo/taskmux\ncd taskmux\nuv tool install .\n```\n\nAfter installation, `taskmux` command will be available globally.\n\n## Quick Start\n\n1. **Create config file** in your project root:\n\n```json\n{\n  \"name\": \"myproject\",\n  \"tasks\": {\n    \"server\": \"npm run dev\",\n    \"build\": \"npm run build:watch\", \n    \"test\": \"npm run test:watch\",\n    \"db\": \"docker-compose up postgres\"\n  }\n}\n```\n\n2. **Start all tasks**:\n```bash\ntaskmux start\n```\n\n3. **Monitor and manage**:\n```bash\ntaskmux list          # See what's running with health status\ntaskmux health        # Detailed health check table\ntaskmux restart server # Restart specific task\ntaskmux logs -f test   # Follow logs\n```\n\n## Commands Reference\n\n### Core Commands\n\n```bash\n# Session Management\ntaskmux start                    # Start all tasks in tmux session\ntaskmux status                   # Show session and task status\ntaskmux list                     # List all tasks with health indicators\ntaskmux stop                     # Stop session and all tasks\n\n# Task Management  \ntaskmux restart <task>           # Restart specific task\ntaskmux kill <task>              # Kill specific task\ntaskmux add <task> \"<command>\"   # Add new task to config\ntaskmux remove <task>            # Remove task from config\n\n# Monitoring\ntaskmux health                   # Health check with status table\ntaskmux logs <task>              # Show recent logs\ntaskmux logs -f <task>           # Follow logs (live)\ntaskmux logs -n 100 <task>       # Show last N lines\n\n# Advanced\ntaskmux watch                    # Watch config for changes\ntaskmux daemon --port 8765       # Run with WebSocket API\n```\n\n### Command Examples\n\n```bash\n# Start development environment\ntaskmux start\n\n# Check what's running with health status\ntaskmux list\n# Output:\n# Session: myproject\n# \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n# \ud83d\udc9a Healthy  server          npm run dev\n# \ud83d\udc9a Healthy  build           npm run build:watch\n# \ud83d\udd34 Unhealthy test           npm run test:watch\n# \ud83d\udc9a Healthy  db              docker-compose up postgres\n\n# Detailed health check\ntaskmux health\n# \u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n# \u2503 Status \u2503 Task    \u2503 Health    \u2503\n# \u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n# \u2502 \ud83d\udc9a     \u2502 server  \u2502 Healthy   \u2502\n# \u2502 \ud83d\udc9a     \u2502 build   \u2502 Healthy   \u2502\n# \u2502 \ud83d\udd34     \u2502 test    \u2502 Unhealthy \u2502\n# \u2502 \ud83d\udc9a     \u2502 db      \u2502 Healthy   \u2502\n# \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n# Restart a misbehaving service\ntaskmux restart server\n\n# Add a new background task\ntaskmux add worker \"python background_worker.py\"\n\n# Follow logs for debugging\ntaskmux logs -f test\n\n# Watch config file for changes\ntaskmux watch\n```\n\n## Configuration\n\n### Config File Format\n\nCreate `taskmux.json` in your project root:\n\n```json\n{\n  \"name\": \"session-name\",\n  \"tasks\": {\n    \"task-name\": \"command to run\",\n    \"another-task\": \"another command\"\n  }\n}\n```\n\n### Config Examples\n\n**Web Development**:\n```json\n{\n  \"name\": \"webapp\",\n  \"tasks\": {\n    \"frontend\": \"npm run dev\",\n    \"backend\": \"python manage.py runserver\",\n    \"database\": \"docker-compose up -d postgres\",\n    \"redis\": \"redis-server\",\n    \"worker\": \"celery worker -A myapp\",\n    \"tailwind\": \"npx tailwindcss -w\"\n  }\n}\n```\n\n**Data Science**:\n```json\n{\n  \"name\": \"analysis\",\n  \"tasks\": {\n    \"jupyter\": \"jupyter lab --port=8888\",\n    \"mlflow\": \"mlflow ui --port=5000\",\n    \"airflow\": \"airflow webserver\",\n    \"postgres\": \"docker run -p 5432:5432 postgres:13\",\n    \"tensorboard\": \"tensorboard --logdir=./logs\"\n  }\n}\n```\n\n**Microservices**:\n```json\n{\n  \"name\": \"microservices\", \n  \"tasks\": {\n    \"api-gateway\": \"node gateway/server.js\",\n    \"user-service\": \"go run services/user/main.go\",\n    \"order-service\": \"python services/orders/app.py\",\n    \"redis\": \"redis-server\",\n    \"postgres\": \"docker-compose up -d db\",\n    \"monitoring\": \"prometheus --config.file=prometheus.yml\"\n  }\n}\n```\n\n## Advanced Features\n\n### Daemon Mode with WebSocket API\n\nRun Taskmux as a background daemon with real-time API:\n\n```bash\n# Start daemon on port 8765 (default)\ntaskmux daemon\n\n# Custom port\ntaskmux daemon --port 9000\n```\n\n**WebSocket API Usage**:\n```javascript\n// Connect to WebSocket API\nconst ws = new WebSocket('ws://localhost:8765');\n\n// Get status\nws.send(JSON.stringify({\n  command: \"status\"\n}));\n\n// Restart task\nws.send(JSON.stringify({\n  command: \"restart\",\n  params: { task: \"server\" }\n}));\n\n// Get logs\nws.send(JSON.stringify({\n  command: \"logs\", \n  params: { task: \"server\", lines: 50 }\n}));\n```\n\n### Health Monitoring & Auto-restart\n\nTaskmux continuously monitors task health and can auto-restart failed processes:\n\n- **Health indicators**: \ud83d\udc9a Healthy, \ud83d\udd34 Unhealthy, \u25cb Stopped\n- **Process monitoring**: Detects when tasks exit or become unresponsive\n- **Auto-restart**: Daemon mode automatically restarts failed tasks\n- **Health checks**: Run `taskmux health` for detailed status\n\n### File Watching\n\nMonitor config changes in real-time:\n\n```bash\n# Terminal 1: Start file watcher\ntaskmux watch\n\n# Terminal 2: Edit config\necho '{\"name\": \"test\", \"tasks\": {\"new\": \"echo hello\"}}' > taskmux.json\n# Watcher automatically reloads config and updates running tasks\n\n# New task is immediately available\ntaskmux restart new\n```\n\n## Workflow Integration\n\n### Daily Development\n\n```bash\n# Morning: Start everything\ntaskmux start\n\n# During development: Monitor health\ntaskmux health\n\n# Restart services as needed\ntaskmux restart api\ntaskmux logs -f frontend\n\n# Add new services on the fly\ntaskmux add monitoring \"python monitor.py\"\n\n# Run with file watching for config changes\ntaskmux watch\n\n# Evening: Stop everything\ntaskmux stop\n```\n\n### Tmux Integration\n\nTaskmux creates standard tmux sessions. You can use all tmux commands:\n\n```bash\n# Attach to session\ntmux attach-session -t myproject\n\n# Switch between task windows\n# Ctrl+b 1, Ctrl+b 2, etc.\n\n# Create additional windows\ntmux new-window -t myproject -n shell\n\n# Detach and reattach later\n# Ctrl+b d\ntmux attach-session -t myproject\n```\n\n### Multiple Projects\n\nEach project gets its own tmux session based on the `name` field:\n\n```bash\n# Project A (session: \"webapp\")\ncd ~/projects/webapp\ntaskmux start\n\n# Project B (session: \"api\") \ncd ~/projects/api\ntaskmux start\n\n# Both run simultaneously with separate sessions\ntmux list-sessions\n# webapp: 4 windows\n# api: 2 windows\n```\n\n## Architecture\n\nTaskmux is built with modern Python tooling:\n\n- **libtmux**: Reliable Python API for tmux session management\n- **Typer**: Modern CLI framework with rich help and validation\n- **Rich**: Beautiful terminal output with tables and progress bars\n- **WebSockets**: Real-time API for remote monitoring and control\n- **asyncio**: Async health monitoring and daemon capabilities\n- **Watchdog**: File system monitoring for config changes\n\n## Troubleshooting\n\n### Common Issues\n\n**Config not found**:\n```bash\nError: Config file taskmux.json not found\n```\n- Ensure `taskmux.json` exists in current directory\n- Check JSON syntax with `jq . taskmux.json`\n\n**Session already exists**:\n```bash\nSession 'myproject' already exists\n```\n- Kill existing session: `taskmux stop`\n- Or attach to it: `tmux attach-session -t myproject`\n\n**Task not restarting**:\n- Check if task name exists: `taskmux list`\n- Verify session is running: `taskmux status`\n- Check task health: `taskmux health`\n\n**libtmux connection issues**:\n- Ensure tmux is installed and in PATH\n- Try restarting tmux server: `tmux kill-server`\n\n### Debug Mode\n\nView detailed tmux session information:\n```bash\n# Check if session exists\ntmux has-session -t myproject\n\n# List windows in session  \ntmux list-windows -t myproject\n\n# View logs manually\ntmux capture-pane -t myproject:taskname -p\n\n# Check daemon logs\ntail -f ~/.taskmux/daemon.log\n```\n\n## Contributing\n\nTaskmux follows modern Python development practices:\n\n1. **Modular architecture**: Separate concerns (CLI, tmux management, daemon, config)\n2. **Type hints**: Full type annotation for better IDE support\n3. **Rich CLI**: Beautiful, user-friendly command-line interface\n4. **Async support**: Background monitoring and WebSocket API\n5. **Comprehensive testing**: Test across different tmux versions and platforms\n\n## License\n\nMIT License - feel free to modify and distribute.",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Modern tmux development environment manager with real-time health monitoring, auto-restart, and WebSocket API",
    "version": "0.1.0",
    "project_urls": {
        "Homepage": "https://github.com/nc9/taskmux",
        "Issues": "https://github.com/nc9/taskmux/issues",
        "Repository": "https://github.com/nc9/taskmux"
    },
    "split_keywords": [
        "daemon",
        " development",
        " manager",
        " monitoring",
        " session",
        " terminal",
        " tmux"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1dac3ddafc81cc9db6abe4c1bff31bb1ca0484f70cac2f1981237f3ad0b3bd1a",
                "md5": "05c94bc7e8e838baa27ad396536842be",
                "sha256": "69bed8dc4c3dda97639fd736f0b49bb58062ebf4bb07790310f560225091044d"
            },
            "downloads": -1,
            "filename": "taskmux-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "05c94bc7e8e838baa27ad396536842be",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 14352,
            "upload_time": "2025-07-13T11:02:11",
            "upload_time_iso_8601": "2025-07-13T11:02:11.087414Z",
            "url": "https://files.pythonhosted.org/packages/1d/ac/3ddafc81cc9db6abe4c1bff31bb1ca0484f70cac2f1981237f3ad0b3bd1a/taskmux-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d727ec40c5a0e94d6bcdd1d51d8c18ae17748d72de65292b44d2aeeb67dffab1",
                "md5": "28e9dbdaf59a873a96d8179513ad1090",
                "sha256": "8d34abba2791b4389454c167eb55adc9e90dc94c87564f7e2a4778a6aa8be7c3"
            },
            "downloads": -1,
            "filename": "taskmux-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "28e9dbdaf59a873a96d8179513ad1090",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 11630,
            "upload_time": "2025-07-13T11:02:12",
            "upload_time_iso_8601": "2025-07-13T11:02:12.238311Z",
            "url": "https://files.pythonhosted.org/packages/d7/27/ec40c5a0e94d6bcdd1d51d8c18ae17748d72de65292b44d2aeeb67dffab1/taskmux-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-13 11:02:12",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "nc9",
    "github_project": "taskmux",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "taskmux"
}
        
Elapsed time: 0.51082s