-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
95 lines (86 loc) · 3.52 KB
/
Copy pathpyproject.toml
File metadata and controls
95 lines (86 loc) · 3.52 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
[build-system]
requires = ["setuptools>=77", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "nilscript"
version = "0.3.0"
description = "Network Intent Layer (NIL) + the nilscript DSL — the neutral standard for connecting systems to agents."
readme = "README.md"
requires-python = ">=3.12"
license = "Apache-2.0 AND CC-BY-4.0"
license-files = ["LICENSE"]
authors = [{ name = "nilscript" }]
keywords = ["nil", "nilscript", "agents", "intent", "standard", "dsl", "schema"]
# Core is data (JSON schemas + docs). No runtime dependencies — the heavy parts
# live behind the optional [sdk] extra (pydantic[email] / uvicorn[standard] style).
dependencies = []
[project.optional-dependencies]
sdk = ["httpx>=0.27", "pydantic>=2.0"]
# Adapter tooling (reads the standard only — no backend specifics): the verb catalog, a verb's
# profile, OpenAPI export, `scaffold-shim` (generate a bootable shim), `scan` (discover a system's
# hidden requirements -> manifest), and `manifest` (validate/show/strip). PyYAML powers
# `export-openapi --format yaml`; pydantic backs `scaffold-shim`'s model generation
# (cli/scaffold/_models.py). The base package stays dependency-free — these deps live only here.
cli = ["pyyaml>=6.0", "pydantic>=2.0"]
# The reference Playground (src/nilscript/demo/): a FastAPI chat UI that drives a live NIL shim
# through the SDK, with an LLM planner (LiteLLM, any OpenAI-compatible provider). `nilscript demo`
# launches it. The pocketbase adapter the shims need is vendored *inside* the demo
# (src/nilscript/demo/pocketbase_nil_adapter/, a demo file), so this extra is fully self-contained
# on PyPI — no sibling checkout required. The adapter only needs fastapi + pydantic, both below.
demo = [
"nilscript[sdk]",
"fastapi>=0.110",
"uvicorn>=0.29",
"litellm>=1.40",
]
# The generic NIL-MCP server (src/nilscript/mcp/): one front door so any MCP-compatible agent
# (Claude, Cursor, …) connects once and drives any mounted NIL adapter through governed
# propose→approve→commit→rollback. `nilscript mcp --adapter-url <shim>` launches it over stdio.
# A thin layer over the SDK's NilClient + handshake — pulls the MCP SDK on top of [sdk].
mcp = [
"nilscript[sdk]",
"mcp>=1.2",
]
dev = [
"nilscript[sdk]",
"nilscript[cli]",
"mcp>=1.2", # the MCP server's unit tests import nilscript.mcp
"pytest",
"pytest-asyncio>=0.24",
"respx",
"jsonschema",
"fastapi", # the scaffold conformance test boots a generated FastAPI shim
]
[project.scripts]
nilscript = "nilscript.cli:main"
[project.urls]
Homepage = "https://nilscript.org"
Source = "https://github.com/nilscript-org/nilscript"
[tool.pytest.ini_options]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
# The standard's own suite lives in tests/. Example adapters under examples/ ship their own
# conformance proof (run from the example dir with PYTHONPATH=src), so they are not collected here.
testpaths = ["tests"]
[tool.setuptools]
include-package-data = true
[tool.setuptools.packages.find]
where = ["src"]
[tool.setuptools.package-data]
nilscript = [
"py.typed",
"nil/**/*.json",
"nil/**/*.md",
"dsl/**/*.json",
"dsl/**/*.md",
"docs/**/*.md",
"sdk/py.typed",
"sdk/**/*.json",
"sdk/**/*.md",
# The "Using NILScript" agent skill ships with the MCP server (the recipe alongside the kitchen).
"mcp/*.md",
# The reference Playground ships with the wheel so `nilscript demo` runs from a pip install.
# The pocketbase adapter is vendored inside demo/ (a demo file), included by these globs.
"demo/**/*.py",
"demo/**/*.md",
]