Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
101 lines (90 loc) · 3.39 KB
/
Copy pathpyproject.toml
File metadata and controls
101 lines (90 loc) · 3.39 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
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "strands-code-agent"
version = "0.4.0"
description = "Deny-first coding agent on the Strands Harness SDK with session-sticky Plan/Act, skills, memory, and a /btw side channel"
readme = "README.md"
license = "MIT-0"
requires-python = ">=3.10"
authors = [
{ name = "Emilio Monti" },
]
keywords = ["agents", "code-generation", "llm", "strands", "repl"]
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT 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 :: Scientific/Engineering :: Artificial Intelligence",
]
dependencies = [
"strands-agents>=0.1.0",
"strands-harness>=0.1",
"smolagents>=1.0.0",
"jinja2>=3.0",
"rich>=13.0",
"pyyaml>=6.0",
"typer>=0.27.2",
"prompt-toolkit>=3.0.53",
"platformdirs>=4.11.12",
]
[project.optional-dependencies]
agentcore = ["boto3>=1.35.0"]
litellm = ["litellm>=1.104"]
[project.scripts]
strands-code = "strands_code_cli.entry.main:main"
[dependency-groups]
# Test-only runtime needs: toolkit wiring tests execute real numpy/pandas
# plotting code, so a bare install shows 4 failures without these.
dev = [
"pytest>=8",
"numpy>=1.24",
"pandas>=2.0",
"matplotlib>=3.8",
"seaborn>=0.13",
"scipy>=1.10",
"radon>=6.0.1",
"xenon>=0.9.3",
"ruff>=0.17.1",
"import-linter>=2.15",
]
[project.urls]
Homepage = "https://github.com/aws-samples/sample-strands-code-agent"
Repository = "https://github.com/aws-samples/sample-strands-code-agent"
Issues = "https://github.com/aws-samples/sample-strands-code-agent/issues"
[tool.pytest.ini_options]
markers = [
"integration: live integration tests requiring AWS credentials (deselected by default)",
]
addopts = "-m 'not integration'"
[tool.ruff]
target-version = "py310" # matches requires-python >=3.10
force-exclude = true # REQUIRED for D-24: explicit paths (pre-commit) bypass exclude otherwise
exclude = [
"strands_code_agent", # inherited upstream code stays byte-pristine (D-24); the one fork-added file (search_tool.py) is enforced by review
]
[tool.ruff.lint]
select = ["E", "F", "I"] # D-20: pyflakes + pycodestyle errors + isort (complexity stays with radon/xenon)
ignore = ["E501"] # formatter owns line length (CF-04); rule-scope config, not a waiver
[tool.ruff.lint.isort]
known-first-party = ["strands_code_cli", "strands_code_agent"]
[tool.importlinter]
root_package = "strands_code_cli"
# Composition-root contract: entry/main.py is the composition root; feature
# modules must not depend on it. (A D-15 "never reintroduce knowledge"
# contract is inexpressible: import-linter rejects subpackages of external
# packages, and the module no longer exists. CLEANUP-01 stays guarded by the
# absence + anchored-grep CI step instead. The package-root re-export is the
# only allowed importer.)
[[tool.importlinter.contracts]]
name = "Feature modules never import the entry module (composition root)"
type = "forbidden"
source_modules = ["strands_code_cli"]
forbidden_modules = ["strands_code_cli.entry.main"]
ignore_imports = ["strands_code_cli -> strands_code_cli.entry.main"]