agents-function-tools 0.4.0__tar.gz → 0.5.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. {agents_function_tools-0.4.0/src/agents_function_tools.egg-info → agents_function_tools-0.5.1}/PKG-INFO +45 -6
  2. agents_function_tools-0.4.0/PKG-INFO → agents_function_tools-0.5.1/README.md +166 -146
  3. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/pyproject.toml +7 -2
  4. agents_function_tools-0.4.0/README.md → agents_function_tools-0.5.1/src/agents_function_tools.egg-info/PKG-INFO +185 -130
  5. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/agents_function_tools.egg-info/SOURCES.txt +3 -0
  6. agents_function_tools-0.5.1/src/agents_function_tools.egg-info/requires.txt +2 -0
  7. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/function_tools/__init__.py +3 -1
  8. agents_function_tools-0.5.1/src/function_tools/contracts.py +89 -0
  9. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/function_tools/openai_tools.py +71 -0
  10. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/function_tools/workspace.py +2 -1
  11. agents_function_tools-0.5.1/tests/test_agent_integration.py +188 -0
  12. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/tests/test_network_and_process.py +8 -5
  13. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/tests/test_public_api.py +2 -1
  14. agents_function_tools-0.5.1/tests/test_tool_contract.py +245 -0
  15. agents_function_tools-0.4.0/src/agents_function_tools.egg-info/requires.txt +0 -2
  16. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/LICENSE +0 -0
  17. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/setup.cfg +0 -0
  18. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/agents_function_tools.egg-info/dependency_links.txt +0 -0
  19. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/agents_function_tools.egg-info/top_level.txt +0 -0
  20. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/function_tools/archive.py +0 -0
  21. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/function_tools/command.py +0 -0
  22. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/function_tools/errors.py +0 -0
  23. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/function_tools/host.py +0 -0
  24. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/function_tools/http.py +0 -0
  25. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/function_tools/network.py +0 -0
  26. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/function_tools/process.py +0 -0
  27. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/src/function_tools/responses.py +0 -0
  28. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/tests/test_archive.py +0 -0
  29. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/tests/test_command.py +0 -0
  30. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/tests/test_host_and_http.py +0 -0
  31. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/tests/test_openai_tools.py +0 -0
  32. {agents_function_tools-0.4.0 → agents_function_tools-0.5.1}/tests/test_workspace.py +0 -0
@@ -1,8 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agents-function-tools
3
- Version: 0.4.0
3
+ Version: 0.5.1
4
4
  Summary: Portable, policy-friendly system function tools for AI applications.
5
5
  License-Expression: Apache-2.0
6
+ Project-URL: Documentation, https://github.com/dongrv/agents-function-tools#agents-function-tools
7
+ Project-URL: Source, https://github.com/dongrv/agents-function-tools
8
+ Project-URL: Changelog, https://github.com/dongrv/agents-function-tools/blob/main/CHANGELOG.md
6
9
  Classifier: Programming Language :: Python :: 3
7
10
  Classifier: Programming Language :: Python :: 3.10
8
11
  Classifier: Programming Language :: Python :: 3.11
@@ -10,7 +13,7 @@ Classifier: Programming Language :: Python :: 3.12
10
13
  Requires-Python: >=3.10
11
14
  Description-Content-Type: text/markdown
12
15
  License-File: LICENSE
13
- Requires-Dist: openai-agents<1,>=0.1
16
+ Requires-Dist: openai-agents<1,>=0.22
14
17
  Requires-Dist: pydantic<3,>=2
15
18
  Dynamic: license-file
16
19
 
@@ -37,6 +40,30 @@ python -m pip install agents-function-tools
37
40
 
38
41
  Every tool returns the same JSON envelope with `ok`, `tool`, `effect`, `data`, and `error` fields. Paths are always relative to a configured workspace root.
39
42
 
43
+ ## Machine-readable contracts
44
+
45
+ Every returned bundle exposes `contracts`, a mapping from FunctionTool name to a `ToolContract`.
46
+ The contract snapshots the SDK-derived input schema and declares the stable response schema,
47
+ failure schema, capability permission, response effect, approval requirement, and retry safety.
48
+ This lets an application build its own CLI, web approval screen, audit log, or policy check without
49
+ binding this package to a particular Agent workflow.
50
+
51
+ ```python
52
+ from function_tools import create_tools
53
+
54
+ tools = create_tools("./workspace")
55
+ contract = tools.contracts["workspace_write_text"]
56
+
57
+ assert contract.permission == "workspace.write"
58
+ assert contract.needs_approval is True
59
+ assert contract.retry_safe is False
60
+ print(contract.to_dict())
61
+ ```
62
+
63
+ `needs_approval=True` is enforced by the OpenAI Agents SDK. The host application receives the
64
+ interruption, presents its own approval UI, then resumes the saved run state only after an explicit
65
+ approval. This package deliberately does not impose a CLI or web interaction model.
66
+
40
67
  ## Safety boundary
41
68
 
42
69
  - Path traversal and access outside the workspace root are rejected.
@@ -73,9 +100,12 @@ agent = Agent(
73
100
 
74
101
  Use the narrowest domain selector: `tools.files`, `tools.network`, `tools.host`, or `tools.process`. The v0.3-style `tools.read`, `tools.write`, and `tools.execute` selectors remain available for compatibility, but combine more capabilities. Every `*.write` and `*.execute` tool requires approval on every call. The SDK derives each FunctionTool's input schema from the Python signature and docstring.
75
102
 
76
- ## Design specs
103
+ ## Documentation
104
+
105
+ [OpenAI Agents workspace assistant](https://github.com/dongrv/agents-function-tools/tree/main/examples/openai_agents_workspace_assistant) is a runnable example with `tools.files.read`, `tools.files.write`, and per-call SDK approval. It is intentionally limited to one workspace; it does not attach network, host, process, command, MCP, or database tools.
77
106
 
78
- - [v0.4 tool expansion spec](docs/v0.4-tool-expansion-spec.md)
107
+ - [Release and compatibility policy](https://github.com/dongrv/agents-function-tools/blob/main/docs/release-policy.md)
108
+ - [Changelog](https://github.com/dongrv/agents-function-tools/blob/main/CHANGELOG.md)
79
109
 
80
110
  For configured commands, HTTPS hosts, or readable environment variables, use `ToolConfig`:
81
111
 
@@ -116,7 +146,7 @@ process_tools = tools.process.inspect
116
146
 
117
147
  ## License
118
148
 
119
- Apache-2.0. See [LICENSE](LICENSE).
149
+ Apache-2.0. See the [license](https://github.com/dongrv/agents-function-tools/blob/main/LICENSE).
120
150
 
121
151
  ## Development
122
152
 
@@ -129,6 +159,15 @@ uv run --python 3.10 pytest
129
159
 
130
160
  Tests do not call the OpenAI API and do not require `OPENAI_API_KEY`.
131
161
 
162
+ GitHub Actions runs formatting and linting, a Windows/Linux plus Python 3.10-3.12 test matrix, and the same package acceptance gate used before publishing. The suite includes public FunctionTool contracts and offline OpenAI Agents SDK integration tests using `ScriptedModel`, including approval interruption and resume behavior.
163
+
164
+ ## OpenAI Agents SDK compatibility
165
+
166
+ The package requires `openai-agents>=0.22,<1`; `0.22.0` is the current validated baseline. The
167
+ weekly `OpenAI Agents SDK latest` workflow resolves the newest compatible SDK release from PyPI and
168
+ runs the deterministic suite against it. It detects upstream compatibility changes without silently
169
+ publishing or accepting a new SDK version.
170
+
132
171
  ## Release acceptance
133
172
 
134
173
  Before every PyPI release, run:
@@ -137,7 +176,7 @@ Before every PyPI release, run:
137
176
  uv run python scripts/release_check.py
138
177
  ```
139
178
 
140
- The gate checks the lockfile, formatting, linting, tests, wheel and source-distribution contents, package metadata, a clean `python -m pip install --no-deps <wheel>`, and a separate clean runtime installation with dependencies.
179
+ The gate checks the lockfile, formatting, linting, example compilation, tests, wheel and source-distribution contents, package metadata, a clean `python -m pip install --no-deps <wheel>`, and a separate clean runtime installation with dependencies.
141
180
 
142
181
  Use the following command to run that gate and publish only when it passes:
143
182
 
@@ -1,146 +1,166 @@
1
- Metadata-Version: 2.4
2
- Name: agents-function-tools
3
- Version: 0.4.0
4
- Summary: Portable, policy-friendly system function tools for AI applications.
5
- License-Expression: Apache-2.0
6
- Classifier: Programming Language :: Python :: 3
7
- Classifier: Programming Language :: Python :: 3.10
8
- Classifier: Programming Language :: Python :: 3.11
9
- Classifier: Programming Language :: Python :: 3.12
10
- Requires-Python: >=3.10
11
- Description-Content-Type: text/markdown
12
- License-File: LICENSE
13
- Requires-Dist: openai-agents<1,>=0.1
14
- Requires-Dist: pydantic<3,>=2
15
- Dynamic: license-file
16
-
17
- # Agents Function Tools
18
-
19
- `agents-function-tools` is a portable Python library of policy-friendly system function tools. It contains no business model, Agent routing, domain workflow, database adapter, or code-review logic. Its Python import name is `function_tools`.
20
-
21
- ## Install
22
-
23
- ```bash
24
- python -m pip install agents-function-tools
25
- ```
26
-
27
- ## Included tools
28
-
29
- | Category | Tools | Recommended selector |
30
- |---|---|---|
31
- | Workspace read | List, read UTF-8, inspect metadata, glob-style find, hash files, disk usage | `files.read` |
32
- | Workspace write | Write text, create directories, copy a regular file, move a path, delete a path | `files.write` |
33
- | ZIP | List archive entries; create and extract bounded ZIP archives | `files.read` / `files.write` |
34
- | Network | Fetch bounded HTTPS text; optionally build search URLs, resolve configured hosts, and probe configured TCP ports | `network.read` |
35
- | Host | Non-sensitive system info, UTC time, explicitly allowlisted environment variables | `host.inspect` |
36
- | Processes and commands | Describe configured aliases; optionally inspect allowlisted process names; run one allowlisted executable with `shell=False` | `process.inspect` / `process.execute` |
37
-
38
- Every tool returns the same JSON envelope with `ok`, `tool`, `effect`, `data`, and `error` fields. Paths are always relative to a configured workspace root.
39
-
40
- ## Safety boundary
41
-
42
- - Path traversal and access outside the workspace root are rejected.
43
- - The workspace root cannot be deleted.
44
- - Recursive deletion must be explicit.
45
- - File reads, writes, hashes, and archive expansion have byte limits.
46
- - Every workspace mutation and local command requires the SDK approval gate in addition to the orchestration approval policy. File copy accepts regular, non-symlink source files only.
47
- - ZIP creation rejects symlinks; ZIP extraction rejects path traversal and symlink entries before writing files.
48
- - HTTPS fetching requires an exact host allowlist, rejects redirects, URL credentials, and non-default ports, accepts only text-like content types, and blocks resolved private or loopback addresses. No host is enabled by default. Deployment still needs an egress proxy or firewall: application-layer DNS checks do not replace network isolation.
49
- - Host diagnostics intentionally exclude user identities, network configuration, installed software, and environment variables except for names explicitly configured by the host. Process diagnostics are separate, disabled by default, and return only configured process names, PIDs, states, and start times.
50
- - Command execution accepts an argument array, never a shell string. Programs must be mapped by the host application, execution has a timeout, and output is truncated.
51
- - The local command runner is not an OS security sandbox. Production deployment must run the service or runner inside the company-approved container/sandbox with no production secrets and restricted network access.
52
- - Approval remains the orchestration layer's responsibility. Only attach `tools.write` or `tools.execute` after the matching approval policy has been validated.
53
-
54
- This is a controlled operating-system capability adapter, not a general shell, process-management, credential, service-control, or unrestricted-network interface. Give each business Agent only the smallest subset of these tools it needs.
55
-
56
- ## Example
57
-
58
- ```python
59
- from pathlib import Path
60
-
61
- from agents import Agent
62
-
63
- from function_tools import create_tools
64
-
65
- tools = create_tools(Path("./workspace"))
66
-
67
- agent = Agent(
68
- name="Workspace assistant",
69
- instructions="Use workspace tools when needed.",
70
- tools=list(tools.files.read),
71
- )
72
- ```
73
-
74
- Use the narrowest domain selector: `tools.files`, `tools.network`, `tools.host`, or `tools.process`. The v0.3-style `tools.read`, `tools.write`, and `tools.execute` selectors remain available for compatibility, but combine more capabilities. Every `*.write` and `*.execute` tool requires approval on every call. The SDK derives each FunctionTool's input schema from the Python signature and docstring.
75
-
76
- ## Design specs
77
-
78
- - [v0.4 tool expansion spec](docs/v0.4-tool-expansion-spec.md)
79
-
80
- For configured commands, HTTPS hosts, or readable environment variables, use `ToolConfig`:
81
-
82
- ```python
83
- import sys
84
- from pathlib import Path
85
-
86
- from function_tools import ToolConfig, create_tools
87
-
88
- tools = create_tools(
89
- ToolConfig(
90
- workspace_root=Path("./workspace"),
91
- command_programs={"python": sys.executable},
92
- http_allowed_hosts=frozenset({"api.example.internal"}),
93
- environment_variables=frozenset({"APP_ENV"}),
94
- )
95
- )
96
- ```
97
-
98
- Network diagnostics and process inspection are disabled until explicitly configured:
99
-
100
- ```python
101
- from function_tools import ToolConfig, create_tools
102
-
103
- tools = create_tools(
104
- ToolConfig(
105
- workspace_root="./workspace",
106
- http_allowed_hosts=frozenset({"api.example.internal"}),
107
- search_engines={"bing": "https://www.bing.com/search"},
108
- network_allowed_ports=frozenset({443}),
109
- process_name_allowlist=frozenset({"python.exe"}),
110
- )
111
- )
112
-
113
- network_tools = tools.network.read
114
- process_tools = tools.process.inspect
115
- ```
116
-
117
- ## License
118
-
119
- Apache-2.0. See [LICENSE](LICENSE).
120
-
121
- ## Development
122
-
123
- Use Python 3.10 or newer:
124
-
125
- ```powershell
126
- uv sync --python 3.10
127
- uv run --python 3.10 pytest
128
- ```
129
-
130
- Tests do not call the OpenAI API and do not require `OPENAI_API_KEY`.
131
-
132
- ## Release acceptance
133
-
134
- Before every PyPI release, run:
135
-
136
- ```powershell
137
- uv run python scripts/release_check.py
138
- ```
139
-
140
- The gate checks the lockfile, formatting, linting, tests, wheel and source-distribution contents, package metadata, a clean `python -m pip install --no-deps <wheel>`, and a separate clean runtime installation with dependencies.
141
-
142
- Use the following command to run that gate and publish only when it passes:
143
-
144
- ```powershell
145
- uv run python scripts/publish.py
146
- ```
1
+ # Agents Function Tools
2
+
3
+ `agents-function-tools` is a portable Python library of policy-friendly system function tools. It contains no business model, Agent routing, domain workflow, database adapter, or code-review logic. Its Python import name is `function_tools`.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ python -m pip install agents-function-tools
9
+ ```
10
+
11
+ ## Included tools
12
+
13
+ | Category | Tools | Recommended selector |
14
+ |---|---|---|
15
+ | Workspace read | List, read UTF-8, inspect metadata, glob-style find, hash files, disk usage | `files.read` |
16
+ | Workspace write | Write text, create directories, copy a regular file, move a path, delete a path | `files.write` |
17
+ | ZIP | List archive entries; create and extract bounded ZIP archives | `files.read` / `files.write` |
18
+ | Network | Fetch bounded HTTPS text; optionally build search URLs, resolve configured hosts, and probe configured TCP ports | `network.read` |
19
+ | Host | Non-sensitive system info, UTC time, explicitly allowlisted environment variables | `host.inspect` |
20
+ | Processes and commands | Describe configured aliases; optionally inspect allowlisted process names; run one allowlisted executable with `shell=False` | `process.inspect` / `process.execute` |
21
+
22
+ Every tool returns the same JSON envelope with `ok`, `tool`, `effect`, `data`, and `error` fields. Paths are always relative to a configured workspace root.
23
+
24
+ ## Machine-readable contracts
25
+
26
+ Every returned bundle exposes `contracts`, a mapping from FunctionTool name to a `ToolContract`.
27
+ The contract snapshots the SDK-derived input schema and declares the stable response schema,
28
+ failure schema, capability permission, response effect, approval requirement, and retry safety.
29
+ This lets an application build its own CLI, web approval screen, audit log, or policy check without
30
+ binding this package to a particular Agent workflow.
31
+
32
+ ```python
33
+ from function_tools import create_tools
34
+
35
+ tools = create_tools("./workspace")
36
+ contract = tools.contracts["workspace_write_text"]
37
+
38
+ assert contract.permission == "workspace.write"
39
+ assert contract.needs_approval is True
40
+ assert contract.retry_safe is False
41
+ print(contract.to_dict())
42
+ ```
43
+
44
+ `needs_approval=True` is enforced by the OpenAI Agents SDK. The host application receives the
45
+ interruption, presents its own approval UI, then resumes the saved run state only after an explicit
46
+ approval. This package deliberately does not impose a CLI or web interaction model.
47
+
48
+ ## Safety boundary
49
+
50
+ - Path traversal and access outside the workspace root are rejected.
51
+ - The workspace root cannot be deleted.
52
+ - Recursive deletion must be explicit.
53
+ - File reads, writes, hashes, and archive expansion have byte limits.
54
+ - Every workspace mutation and local command requires the SDK approval gate in addition to the orchestration approval policy. File copy accepts regular, non-symlink source files only.
55
+ - ZIP creation rejects symlinks; ZIP extraction rejects path traversal and symlink entries before writing files.
56
+ - HTTPS fetching requires an exact host allowlist, rejects redirects, URL credentials, and non-default ports, accepts only text-like content types, and blocks resolved private or loopback addresses. No host is enabled by default. Deployment still needs an egress proxy or firewall: application-layer DNS checks do not replace network isolation.
57
+ - Host diagnostics intentionally exclude user identities, network configuration, installed software, and environment variables except for names explicitly configured by the host. Process diagnostics are separate, disabled by default, and return only configured process names, PIDs, states, and start times.
58
+ - Command execution accepts an argument array, never a shell string. Programs must be mapped by the host application, execution has a timeout, and output is truncated.
59
+ - The local command runner is not an OS security sandbox. Production deployment must run the service or runner inside the company-approved container/sandbox with no production secrets and restricted network access.
60
+ - Approval remains the orchestration layer's responsibility. Only attach `tools.write` or `tools.execute` after the matching approval policy has been validated.
61
+
62
+ This is a controlled operating-system capability adapter, not a general shell, process-management, credential, service-control, or unrestricted-network interface. Give each business Agent only the smallest subset of these tools it needs.
63
+
64
+ ## Example
65
+
66
+ ```python
67
+ from pathlib import Path
68
+
69
+ from agents import Agent
70
+
71
+ from function_tools import create_tools
72
+
73
+ tools = create_tools(Path("./workspace"))
74
+
75
+ agent = Agent(
76
+ name="Workspace assistant",
77
+ instructions="Use workspace tools when needed.",
78
+ tools=list(tools.files.read),
79
+ )
80
+ ```
81
+
82
+ Use the narrowest domain selector: `tools.files`, `tools.network`, `tools.host`, or `tools.process`. The v0.3-style `tools.read`, `tools.write`, and `tools.execute` selectors remain available for compatibility, but combine more capabilities. Every `*.write` and `*.execute` tool requires approval on every call. The SDK derives each FunctionTool's input schema from the Python signature and docstring.
83
+
84
+ ## Documentation
85
+
86
+ [OpenAI Agents workspace assistant](https://github.com/dongrv/agents-function-tools/tree/main/examples/openai_agents_workspace_assistant) is a runnable example with `tools.files.read`, `tools.files.write`, and per-call SDK approval. It is intentionally limited to one workspace; it does not attach network, host, process, command, MCP, or database tools.
87
+
88
+ - [Release and compatibility policy](https://github.com/dongrv/agents-function-tools/blob/main/docs/release-policy.md)
89
+ - [Changelog](https://github.com/dongrv/agents-function-tools/blob/main/CHANGELOG.md)
90
+
91
+ For configured commands, HTTPS hosts, or readable environment variables, use `ToolConfig`:
92
+
93
+ ```python
94
+ import sys
95
+ from pathlib import Path
96
+
97
+ from function_tools import ToolConfig, create_tools
98
+
99
+ tools = create_tools(
100
+ ToolConfig(
101
+ workspace_root=Path("./workspace"),
102
+ command_programs={"python": sys.executable},
103
+ http_allowed_hosts=frozenset({"api.example.internal"}),
104
+ environment_variables=frozenset({"APP_ENV"}),
105
+ )
106
+ )
107
+ ```
108
+
109
+ Network diagnostics and process inspection are disabled until explicitly configured:
110
+
111
+ ```python
112
+ from function_tools import ToolConfig, create_tools
113
+
114
+ tools = create_tools(
115
+ ToolConfig(
116
+ workspace_root="./workspace",
117
+ http_allowed_hosts=frozenset({"api.example.internal"}),
118
+ search_engines={"bing": "https://www.bing.com/search"},
119
+ network_allowed_ports=frozenset({443}),
120
+ process_name_allowlist=frozenset({"python.exe"}),
121
+ )
122
+ )
123
+
124
+ network_tools = tools.network.read
125
+ process_tools = tools.process.inspect
126
+ ```
127
+
128
+ ## License
129
+
130
+ Apache-2.0. See the [license](https://github.com/dongrv/agents-function-tools/blob/main/LICENSE).
131
+
132
+ ## Development
133
+
134
+ Use Python 3.10 or newer:
135
+
136
+ ```powershell
137
+ uv sync --python 3.10
138
+ uv run --python 3.10 pytest
139
+ ```
140
+
141
+ Tests do not call the OpenAI API and do not require `OPENAI_API_KEY`.
142
+
143
+ GitHub Actions runs formatting and linting, a Windows/Linux plus Python 3.10-3.12 test matrix, and the same package acceptance gate used before publishing. The suite includes public FunctionTool contracts and offline OpenAI Agents SDK integration tests using `ScriptedModel`, including approval interruption and resume behavior.
144
+
145
+ ## OpenAI Agents SDK compatibility
146
+
147
+ The package requires `openai-agents>=0.22,<1`; `0.22.0` is the current validated baseline. The
148
+ weekly `OpenAI Agents SDK latest` workflow resolves the newest compatible SDK release from PyPI and
149
+ runs the deterministic suite against it. It detects upstream compatibility changes without silently
150
+ publishing or accepting a new SDK version.
151
+
152
+ ## Release acceptance
153
+
154
+ Before every PyPI release, run:
155
+
156
+ ```powershell
157
+ uv run python scripts/release_check.py
158
+ ```
159
+
160
+ The gate checks the lockfile, formatting, linting, example compilation, tests, wheel and source-distribution contents, package metadata, a clean `python -m pip install --no-deps <wheel>`, and a separate clean runtime installation with dependencies.
161
+
162
+ Use the following command to run that gate and publish only when it passes:
163
+
164
+ ```powershell
165
+ uv run python scripts/publish.py
166
+ ```
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "agents-function-tools"
7
- version = "0.4.0"
7
+ version = "0.5.1"
8
8
  description = "Portable, policy-friendly system function tools for AI applications."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -17,10 +17,15 @@ classifiers = [
17
17
  "Programming Language :: Python :: 3.12",
18
18
  ]
19
19
  dependencies = [
20
- "openai-agents>=0.1,<1",
20
+ "openai-agents>=0.22,<1",
21
21
  "pydantic>=2,<3",
22
22
  ]
23
23
 
24
+ [project.urls]
25
+ Documentation = "https://github.com/dongrv/agents-function-tools#agents-function-tools"
26
+ Source = "https://github.com/dongrv/agents-function-tools"
27
+ Changelog = "https://github.com/dongrv/agents-function-tools/blob/main/CHANGELOG.md"
28
+
24
29
  [dependency-groups]
25
30
  dev = [
26
31
  "pytest>=8,<9",