Initial implementation of TriggerShell

A Python CLI (typer) that bootstraps Node/pnpm and launches a Next.js 16 web
app for running configured shell scripts: YAML config validated by a shared
Zod schema, dynamic per-script forms mapped to shadcn controls, argv-safe
execa execution with live WebSocket streaming, SQLite/Drizzle run history,
and optional argon2 session + API token auth.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-15 18:37:30 +02:00
co-authored by Claude Sonnet 5
commit ced99a8e75
117 changed files with 17367 additions and 0 deletions
+39
View File
@@ -0,0 +1,39 @@
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "triggershell"
version = "0.1.0"
description = "CLI launcher for the TriggerShell web app - run configured shell scripts from a browser."
readme = "README.md"
requires-python = ">=3.9"
license = "MIT"
authors = [{ name = "TriggerShell contributors" }]
dependencies = ["typer>=0.12", "rich>=13.7", "pyyaml>=6.0", "argon2-cffi>=23.1"]
[project.scripts]
triggershell = "triggershell.cli:app"
[tool.hatch.build.targets.wheel]
packages = ["triggershell"]
[tool.hatch.build.targets.wheel.force-include]
"app" = "triggershell/_app"
[tool.hatch.build.targets.sdist]
include = ["triggershell", "app", "README.md"]
exclude = ["app/node_modules", "app/.next", "app/drizzle.config.ts.bak"]
[tool.ruff]
line-length = 120
target-version = "py39"
[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B"]
# B008: typer's `= typer.Option(...)` / `= typer.Argument(...)` defaults are the intended API, not a bug.
# UP045: `X | None` needs 3.10 at runtime for typer's introspection; this project targets 3.9+.
ignore = ["B008", "UP045"]
[dependency-groups]
dev = ["ruff>=0.6", "pytest>=8.0"]