-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
153 lines (138 loc) · 4.71 KB
/
pyproject.toml
File metadata and controls
153 lines (138 loc) · 4.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
[build-system]
requires = ["hatchling>=1.26", "hatch-vcs"]
build-backend = "hatchling.build"
[project]
name = "gemstack"
dynamic = ["version"]
description = "The high-velocity AI agent orchestration framework, natively optimized for Antigravity."
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.10"
authors = [
{ name = "Arvind Arikatla", email = "arvind.arikatla@gmail.com" },
]
keywords = [
"ai", "agent", "orchestration", "llm", "gemini",
"software-engineering", "workflow", "cli", "mcp"
]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Software Development :: Libraries :: Application Frameworks",
"Topic :: Software Development :: Quality Assurance",
"Typing :: Typed",
]
dependencies = [
"typer>=0.12", # CLI framework
"rich>=13.0", # Beautiful terminal output
"jinja2>=3.1", # Template rendering
"pyyaml>=6.0", # YAML frontmatter parsing
"tomli>=2.0; python_version < '3.11'", # TOML parsing (stdlib in 3.11+)
"tomli-w>=1.0", # TOML writing
"pydantic>=2.0", # Data validation and settings
"platformdirs>=4.0", # Cross-platform config directories
]
[project.optional-dependencies]
ai = [
"google-genai>=1.0", # Gemini API for AI-powered bootstrapping
]
mcp = [
"mcp>=1.0", # Model Context Protocol SDK
]
tail = [
"watchdog>=4.0", # Filesystem watching (for `tail`)
"textual>=0.50.0", # TUI framework for live tail dashboard
]
plugins = [
"pluggy>=1.5", # Plugin hook system
]
dev = [
"pytest>=8.0",
"pytest-cov>=5.0",
"pytest-asyncio>=0.24",
"mypy>=1.10",
"ruff>=0.4",
"hypothesis>=6.0",
"pip-audit>=2.7",
"mkdocs-material>=9.5", # Official documentation generation
]
all = ["gemstack[ai,mcp,tail,plugins]"]
[project.scripts]
gemstack = "gemstack.cli.main:app"
[project.urls]
Homepage = "https://github.com/arvarik/gemstack"
Documentation = "https://github.com/arvarik/gemstack#readme"
Repository = "https://github.com/arvarik/gemstack"
Issues = "https://github.com/arvarik/gemstack/issues"
Changelog = "https://github.com/arvarik/gemstack/blob/main/CHANGELOG.md"
# --- Plugin entry point group ---
# Third-party plugins register here:
# [project.entry-points."gemstack"]
# my_topology = "gemstack_topology_mobile:plugin"
# --- Version from Git tags ---
[tool.hatch.version]
source = "vcs"
[tool.hatch.build.hooks.vcs]
version-file = "src/gemstack/_version.py"
# --- Build targets ---
[tool.hatch.build.targets.wheel]
packages = ["src/gemstack"]
# Include bundled markdown data in the wheel
[tool.hatch.build.targets.wheel.force-include]
"roles" = "src/gemstack/data/roles"
"phases" = "src/gemstack/data/phases"
"workflows" = "src/gemstack/data/workflows"
"topologies" = "src/gemstack/data/topologies"
"examples" = "src/gemstack/data/examples"
"context" = "src/gemstack/data/context"
# --- Ruff (linter + formatter) ---
[tool.ruff]
target-version = "py310"
line-length = 100
[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"F", # pyflakes
"I", # isort
"UP", # pyupgrade
"B", # flake8-bugbear
"SIM", # flake8-simplify
"RUF", # ruff-specific rules
"S", # flake8-bandit (security)
"T20", # flake8-print (no stray prints)
"PT", # flake8-pytest-style
]
ignore = [
"S101", # Allow assert in tests
"B008", # Allow typer.Option() / typer.Argument() in defaults (standard Typer pattern)
"S603", # subprocess calls with known-safe args (git, etc.)
"S607", # Partial executable paths for system binaries (pbcopy, git, xclip)
"RUF012", # Mutable class vars — false positive on constant lists
]
[tool.ruff.lint.per-file-ignores]
"tests/**" = ["S101", "T20", "S104", "PT012"]
"src/gemstack/_version.py" = ["RUF022"] # Auto-generated by hatch-vcs
"src/gemstack/platform/worktree.py" = ["F821"] # ExceptionGroup is 3.11+ (guarded by version check)
# --- Mypy ---
[tool.mypy]
python_version = "3.10"
strict = true
warn_return_any = true
warn_unused_configs = true
exclude = ["tests/fixtures/"]
# --- Pytest ---
[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "-v --tb=short --strict-markers"
asyncio_mode = "auto"
markers = [
"slow: marks tests as slow (deselect with '-m not slow')",
"integration: marks integration tests requiring external services",
]