agentpool-cli 0.1.0__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 (118) hide show
  1. agentpool_cli-0.1.0/.cursor/mcp.json.example +9 -0
  2. agentpool_cli-0.1.0/.github/CODEOWNERS +1 -0
  3. agentpool_cli-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
  4. agentpool_cli-0.1.0/.github/ISSUE_TEMPLATE/provider_probe.md +34 -0
  5. agentpool_cli-0.1.0/.github/dependabot.yml +6 -0
  6. agentpool_cli-0.1.0/.github/workflows/ci.yml +65 -0
  7. agentpool_cli-0.1.0/.github/workflows/release.yml +101 -0
  8. agentpool_cli-0.1.0/.gitignore +15 -0
  9. agentpool_cli-0.1.0/.mcp.json.example +10 -0
  10. agentpool_cli-0.1.0/AGENTS.md +28 -0
  11. agentpool_cli-0.1.0/CHANGELOG.md +10 -0
  12. agentpool_cli-0.1.0/CONTRIBUTING.md +80 -0
  13. agentpool_cli-0.1.0/LICENSE +21 -0
  14. agentpool_cli-0.1.0/PKG-INFO +292 -0
  15. agentpool_cli-0.1.0/README.md +272 -0
  16. agentpool_cli-0.1.0/SECURITY.md +85 -0
  17. agentpool_cli-0.1.0/docs/agent-cli-and-mcp.md +77 -0
  18. agentpool_cli-0.1.0/docs/agentpool-skill.md +85 -0
  19. agentpool_cli-0.1.0/docs/architecture.md +21 -0
  20. agentpool_cli-0.1.0/docs/examples/README.md +35 -0
  21. agentpool_cli-0.1.0/docs/examples.md +20 -0
  22. agentpool_cli-0.1.0/docs/install.md +171 -0
  23. agentpool_cli-0.1.0/docs/mcp-clients.md +268 -0
  24. agentpool_cli-0.1.0/docs/mcp-tools.md +137 -0
  25. agentpool_cli-0.1.0/docs/model-catalog.md +100 -0
  26. agentpool_cli-0.1.0/docs/onboarding.md +169 -0
  27. agentpool_cli-0.1.0/docs/provider-adapters.md +58 -0
  28. agentpool_cli-0.1.0/docs/provider-lifecycle-matrix.md +92 -0
  29. agentpool_cli-0.1.0/docs/release.md +112 -0
  30. agentpool_cli-0.1.0/docs/security.md +29 -0
  31. agentpool_cli-0.1.0/docs/setup-claude-code.md +81 -0
  32. agentpool_cli-0.1.0/docs/setup-codex.md +137 -0
  33. agentpool_cli-0.1.0/docs/setup-copilot.md +73 -0
  34. agentpool_cli-0.1.0/docs/setup-cursor-cli.md +53 -0
  35. agentpool_cli-0.1.0/docs/setup-cursor.md +51 -0
  36. agentpool_cli-0.1.0/docs/setup-devin.md +48 -0
  37. agentpool_cli-0.1.0/docs/setup-droid.md +55 -0
  38. agentpool_cli-0.1.0/docs/stats.md +100 -0
  39. agentpool_cli-0.1.0/docs/usage-detection.md +53 -0
  40. agentpool_cli-0.1.0/docs/usage-probe-matrix.md +123 -0
  41. agentpool_cli-0.1.0/pyproject.toml +53 -0
  42. agentpool_cli-0.1.0/scripts/install.sh +139 -0
  43. agentpool_cli-0.1.0/server.json +12 -0
  44. agentpool_cli-0.1.0/src/agentpool/__init__.py +3 -0
  45. agentpool_cli-0.1.0/src/agentpool/agent_io.py +134 -0
  46. agentpool_cli-0.1.0/src/agentpool/artifacts.py +151 -0
  47. agentpool_cli-0.1.0/src/agentpool/cli.py +1199 -0
  48. agentpool_cli-0.1.0/src/agentpool/config.py +373 -0
  49. agentpool_cli-0.1.0/src/agentpool/event_detection.py +150 -0
  50. agentpool_cli-0.1.0/src/agentpool/fixtures/__init__.py +1 -0
  51. agentpool_cli-0.1.0/src/agentpool/fixtures/fake_agents/__init__.py +1 -0
  52. agentpool_cli-0.1.0/src/agentpool/fixtures/fake_agents/fake_approval_agent.py +16 -0
  53. agentpool_cli-0.1.0/src/agentpool/fixtures/fake_agents/fake_common.py +44 -0
  54. agentpool_cli-0.1.0/src/agentpool/fixtures/fake_agents/fake_completed_agent.py +13 -0
  55. agentpool_cli-0.1.0/src/agentpool/fixtures/fake_agents/fake_idle_agent.py +16 -0
  56. agentpool_cli-0.1.0/src/agentpool/fixtures/fake_agents/fake_limit_agent.py +14 -0
  57. agentpool_cli-0.1.0/src/agentpool/fixtures/fake_agents/fake_patch_agent.py +17 -0
  58. agentpool_cli-0.1.0/src/agentpool/fixtures/fake_agents/fake_question_agent.py +16 -0
  59. agentpool_cli-0.1.0/src/agentpool/git_worktree.py +144 -0
  60. agentpool_cli-0.1.0/src/agentpool/mcp/__init__.py +1 -0
  61. agentpool_cli-0.1.0/src/agentpool/mcp/resources.py +64 -0
  62. agentpool_cli-0.1.0/src/agentpool/mcp/tools.py +259 -0
  63. agentpool_cli-0.1.0/src/agentpool/mcp_server.py +487 -0
  64. agentpool_cli-0.1.0/src/agentpool/models.py +310 -0
  65. agentpool_cli-0.1.0/src/agentpool/onboarding.py +1279 -0
  66. agentpool_cli-0.1.0/src/agentpool/policy.py +63 -0
  67. agentpool_cli-0.1.0/src/agentpool/provider_model_catalog.json +997 -0
  68. agentpool_cli-0.1.0/src/agentpool/providers/__init__.py +3 -0
  69. agentpool_cli-0.1.0/src/agentpool/providers/base.py +411 -0
  70. agentpool_cli-0.1.0/src/agentpool/providers/registry.py +139 -0
  71. agentpool_cli-0.1.0/src/agentpool/redaction.py +30 -0
  72. agentpool_cli-0.1.0/src/agentpool/runtimes/__init__.py +3 -0
  73. agentpool_cli-0.1.0/src/agentpool/runtimes/base.py +36 -0
  74. agentpool_cli-0.1.0/src/agentpool/runtimes/tmux.py +133 -0
  75. agentpool_cli-0.1.0/src/agentpool/session_manager.py +1061 -0
  76. agentpool_cli-0.1.0/src/agentpool/stats/__init__.py +6 -0
  77. agentpool_cli-0.1.0/src/agentpool/stats/card.py +74 -0
  78. agentpool_cli-0.1.0/src/agentpool/stats/compute.py +496 -0
  79. agentpool_cli-0.1.0/src/agentpool/stats/queries.py +138 -0
  80. agentpool_cli-0.1.0/src/agentpool/stats/render.py +103 -0
  81. agentpool_cli-0.1.0/src/agentpool/stats/window.py +85 -0
  82. agentpool_cli-0.1.0/src/agentpool/store.py +478 -0
  83. agentpool_cli-0.1.0/src/agentpool/usage/__init__.py +1 -0
  84. agentpool_cli-0.1.0/src/agentpool/usage/_common.py +223 -0
  85. agentpool_cli-0.1.0/src/agentpool/usage/ccusage.py +130 -0
  86. agentpool_cli-0.1.0/src/agentpool/usage/claude.py +23 -0
  87. agentpool_cli-0.1.0/src/agentpool/usage/codex.py +210 -0
  88. agentpool_cli-0.1.0/src/agentpool/usage/codexbar.py +186 -0
  89. agentpool_cli-0.1.0/src/agentpool/usage/combine.py +71 -0
  90. agentpool_cli-0.1.0/src/agentpool/usage/copilot.py +146 -0
  91. agentpool_cli-0.1.0/src/agentpool/usage/devin.py +265 -0
  92. agentpool_cli-0.1.0/src/agentpool/usage/parsers.py +41 -0
  93. agentpool_cli-0.1.0/src/agentpool/usage/probes.py +52 -0
  94. agentpool_cli-0.1.0/src/agentpool/usage/provider_parsers.py +276 -0
  95. agentpool_cli-0.1.0/src/agentpool/usage/summary.py +166 -0
  96. agentpool_cli-0.1.0/src/agentpool/utils.py +59 -0
  97. agentpool_cli-0.1.0/tests/fixtures/provider_model_catalog_golden.json +84 -0
  98. agentpool_cli-0.1.0/tests/fixtures/stats_seed.py +218 -0
  99. agentpool_cli-0.1.0/tests/fixtures/usage/claude_usage.txt +10 -0
  100. agentpool_cli-0.1.0/tests/fixtures/usage/codex_rate_limits.json +19 -0
  101. agentpool_cli-0.1.0/tests/fixtures/usage/copilot_user.json +18 -0
  102. agentpool_cli-0.1.0/tests/fixtures/usage/devin_plan_status.json +15 -0
  103. agentpool_cli-0.1.0/tests/integration/test_fake_tmux_flow.py +153 -0
  104. agentpool_cli-0.1.0/tests/unit/test_agent_io.py +65 -0
  105. agentpool_cli-0.1.0/tests/unit/test_cli.py +244 -0
  106. agentpool_cli-0.1.0/tests/unit/test_event_policy.py +126 -0
  107. agentpool_cli-0.1.0/tests/unit/test_mcp_surface.py +328 -0
  108. agentpool_cli-0.1.0/tests/unit/test_mcp_tools.py +187 -0
  109. agentpool_cli-0.1.0/tests/unit/test_models_config_store.py +953 -0
  110. agentpool_cli-0.1.0/tests/unit/test_onboarding.py +381 -0
  111. agentpool_cli-0.1.0/tests/unit/test_redaction.py +87 -0
  112. agentpool_cli-0.1.0/tests/unit/test_stats_cli.py +149 -0
  113. agentpool_cli-0.1.0/tests/unit/test_stats_mcp.py +163 -0
  114. agentpool_cli-0.1.0/tests/unit/test_stats_window.py +326 -0
  115. agentpool_cli-0.1.0/tests/unit/test_usage_probes.py +346 -0
  116. agentpool_cli-0.1.0/tests/unit/test_usage_provider_parsers.py +136 -0
  117. agentpool_cli-0.1.0/tests/unit/test_usage_summary_enrichment.py +153 -0
  118. agentpool_cli-0.1.0/uv.lock +979 -0
@@ -0,0 +1,9 @@
1
+ {
2
+ "mcpServers": {
3
+ "agentpool": {
4
+ "type": "stdio",
5
+ "command": "REPLACE_WITH_ABSOLUTE_AGENTPOOL_PATH",
6
+ "args": ["mcp"]
7
+ }
8
+ }
9
+ }
@@ -0,0 +1 @@
1
+ * @sidduHERE
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: Bug report
3
+ about: Report a reproducible AgentPool issue
4
+ title: ""
5
+ labels: bug
6
+ assignees: ""
7
+ ---
8
+
9
+ ## Summary
10
+
11
+ ## Environment
12
+
13
+ - AgentPool version or commit:
14
+ - OS:
15
+ - Python version:
16
+ - tmux version:
17
+ - Provider id, if relevant:
18
+
19
+ ## Command
20
+
21
+ ```bash
22
+
23
+ ```
24
+
25
+ ## Expected
26
+
27
+ ## Actual
28
+
29
+ ## Notes
30
+
31
+ Please redact provider tokens, account emails, session cookies, SQLite data, and
32
+ artifact excerpts that may contain private code or credentials.
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: Provider probe
3
+ about: Request or fix a provider usage probe
4
+ title: ""
5
+ labels: provider
6
+ assignees: ""
7
+ ---
8
+
9
+ ## Provider
10
+
11
+ ## CLI command and version
12
+
13
+ ```bash
14
+
15
+ ```
16
+
17
+ ## Usage surface
18
+
19
+ What command, local file, or API exposes usage?
20
+
21
+ ## Credential handling
22
+
23
+ Does it rely on existing CLI auth state, environment variables, browser cookies,
24
+ or a new login flow?
25
+
26
+ ## Quota windows
27
+
28
+ List any daily, 5-hour, weekly, monthly, credit, on-demand, or session windows
29
+ the provider exposes.
30
+
31
+ ## Notes
32
+
33
+ AgentPool does not accept browser scraping, credential storage, or provider
34
+ auto-routing as part of provider probes.
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
@@ -0,0 +1,65 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ jobs:
8
+ test:
9
+ name: Python ${{ matrix.python-version }}
10
+ runs-on: ubuntu-latest
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ python-version: ["3.11", "3.12"]
15
+
16
+ steps:
17
+ - name: Check out
18
+ uses: actions/checkout@v6
19
+
20
+ - name: Install tmux
21
+ run: sudo apt-get update && sudo apt-get install -y tmux
22
+
23
+ - name: Set up Python
24
+ uses: actions/setup-python@v6
25
+ with:
26
+ python-version: ${{ matrix.python-version }}
27
+
28
+ - name: Install package
29
+ run: |
30
+ python -m pip install --upgrade pip
31
+ python -m pip install -e ".[dev]"
32
+
33
+ - name: Run tests
34
+ run: python -m pytest -q
35
+
36
+ - name: Validate embedded model catalog
37
+ run: agentpool models validate --path src/agentpool/provider_model_catalog.json --json
38
+
39
+ - name: Validate default config
40
+ run: agentpool config validate --json
41
+
42
+ - name: Run fake-provider smoke
43
+ run: agentpool smoke --provider fake-question --repo . --json
44
+
45
+ - name: Build wheel
46
+ run: |
47
+ python -m pip install build
48
+ python -m build
49
+
50
+ - name: Install wheel in clean venv
51
+ run: |
52
+ python -m venv /tmp/agentpool-wheel-venv
53
+ /tmp/agentpool-wheel-venv/bin/python -m pip install dist/*.whl
54
+ /tmp/agentpool-wheel-venv/bin/agentpool config validate --json
55
+ /tmp/agentpool-wheel-venv/bin/agentpool models validate --json
56
+ /tmp/agentpool-wheel-venv/bin/agentpool smoke --provider fake-question --repo . --json
57
+ /tmp/agentpool-wheel-venv/bin/python - <<'PY'
58
+ from agentpool.mcp.resources import read_resource
59
+ from agentpool.session_manager import SessionManager
60
+
61
+ manager = SessionManager()
62
+ for uri in ("agentpool://quickstart", "agentpool://skill.md", "agentpool://onboarding"):
63
+ text = read_resource(manager, uri)
64
+ assert text.startswith("# "), uri
65
+ PY
@@ -0,0 +1,101 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: write
11
+
12
+ jobs:
13
+ release:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - name: Check out
18
+ uses: actions/checkout@v6
19
+
20
+ - name: Install tmux
21
+ run: sudo apt-get update && sudo apt-get install -y tmux
22
+
23
+ - name: Set up Python
24
+ uses: actions/setup-python@v6
25
+ with:
26
+ python-version: "3.12"
27
+
28
+ - name: Install package
29
+ run: |
30
+ python -m pip install --upgrade pip
31
+ python -m pip install -e ".[dev]"
32
+
33
+ - name: Run release checks
34
+ run: |
35
+ python -m pytest -q
36
+ agentpool models validate --path src/agentpool/provider_model_catalog.json --json
37
+ agentpool config validate --json
38
+ agentpool smoke --provider fake-question --repo . --json
39
+ python -m json.tool server.json >/dev/null
40
+
41
+ - name: Build distributions
42
+ run: |
43
+ python -m pip install build
44
+ python -m build
45
+
46
+ - name: Verify wheel install
47
+ run: |
48
+ python -m venv /tmp/agentpool-wheel-venv
49
+ /tmp/agentpool-wheel-venv/bin/python -m pip install --upgrade pip
50
+ /tmp/agentpool-wheel-venv/bin/python -m pip install dist/*.whl
51
+ /tmp/agentpool-wheel-venv/bin/agentpool config validate --json
52
+ /tmp/agentpool-wheel-venv/bin/agentpool models validate --json
53
+ /tmp/agentpool-wheel-venv/bin/agentpool smoke --provider fake-question --repo . --json
54
+ /tmp/agentpool-wheel-venv/bin/python - <<'PY'
55
+ from agentpool.mcp.resources import read_resource
56
+ from agentpool.session_manager import SessionManager
57
+
58
+ manager = SessionManager()
59
+ for uri in ("agentpool://quickstart", "agentpool://skill.md", "agentpool://onboarding"):
60
+ text = read_resource(manager, uri)
61
+ assert text.startswith("# "), uri
62
+ PY
63
+
64
+ - name: Upload build artifact
65
+ uses: actions/upload-artifact@v7
66
+ with:
67
+ name: agentpool-dist
68
+ path: dist/*
69
+
70
+ - name: Create GitHub release
71
+ if: startsWith(github.ref, 'refs/tags/')
72
+ uses: softprops/action-gh-release@v3
73
+ with:
74
+ # Mark as prerelease only for a/b/rc tags (e.g. v0.1.0a9); v0.1.0 is a full release.
75
+ prerelease: ${{ contains(github.ref_name, 'a') || contains(github.ref_name, 'b') || contains(github.ref_name, 'rc') }}
76
+ files: |
77
+ dist/*
78
+ server.json
79
+
80
+ publish-pypi:
81
+ name: Publish to PyPI
82
+ needs: release
83
+ runs-on: ubuntu-latest
84
+ # Gated on the PUBLISH_TO_PYPI repo variable so tagging never publishes by accident.
85
+ # Requires a configured PyPI Trusted Publisher and a `pypi` environment.
86
+ if: startsWith(github.ref, 'refs/tags/') && vars.PUBLISH_TO_PYPI == 'true'
87
+ environment:
88
+ name: pypi
89
+ url: https://pypi.org/p/agentpool-cli
90
+ permissions:
91
+ id-token: write
92
+
93
+ steps:
94
+ - name: Download built distributions
95
+ uses: actions/download-artifact@v7
96
+ with:
97
+ name: agentpool-dist
98
+ path: dist
99
+
100
+ - name: Publish to PyPI (Trusted Publishing)
101
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,15 @@
1
+ .DS_Store
2
+ .mcp.json
3
+ .cursor/mcp.json
4
+ .venv/
5
+ __pycache__/
6
+ .pytest_cache/
7
+ .ruff_cache/
8
+ *.pyc
9
+ *.pyo
10
+ *.sqlite
11
+ *.sqlite3
12
+ .agentpool-worktrees/
13
+ dist/
14
+ build/
15
+ *.egg-info/
@@ -0,0 +1,10 @@
1
+ {
2
+ "mcpServers": {
3
+ "agentpool": {
4
+ "type": "stdio",
5
+ "command": "REPLACE_WITH_ABSOLUTE_AGENTPOOL_PATH",
6
+ "args": ["mcp"],
7
+ "env": {}
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,28 @@
1
+ Talk to the user as a fellow senior developer.
2
+
3
+ AgentPool is a control plane, not an auto-router. Keep provider/model judgment with the primary agent.
4
+
5
+ Project guardrails:
6
+
7
+ - Treat the committed docs as the public source of truth, especially `README.md`,
8
+ `docs/architecture.md`, `docs/onboarding.md`, `docs/mcp-tools.md`, and
9
+ `docs/usage-detection.md`.
10
+ - Use Python 3.11+.
11
+ - Use tmux as the first runtime.
12
+ - Preserve explicit provider selection. Do not add `provider=auto`.
13
+ - Do not implement browser scraping, credential storage, model ranking, silent overage, silent merge, or silent push behavior.
14
+ - Add fake-provider coverage before relying on real provider adapters.
15
+ - Prefer worktree isolation for mutating tasks.
16
+ - Use subprocess argument arrays; avoid shell strings for untrusted input.
17
+ - Store sessions, events, usage snapshots, artifacts, and file leases in SQLite.
18
+ - Keep artifacts outside the repo by default under `~/.agentpool/artifacts`.
19
+
20
+ When AgentPool tools are available:
21
+
22
+ 1. Call inventory or usage before delegating.
23
+ 2. Choose provider/model/harness explicitly.
24
+ 3. Prefer `read_only` isolation for exploration and review.
25
+ 4. Use `worktree` isolation for edits.
26
+ 5. Spawn narrow tasks.
27
+ 6. Observe, steer, interrupt, collect, and terminate deliberately.
28
+ 7. Do not merge or push worker changes without user approval.
@@ -0,0 +1,10 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## 0.1.0 - 2026-05-29
6
+
7
+ - First public release of AgentPool: local Python CLI, MCP server,
8
+ tmux-backed worker lifecycle, explicit provider/model selection, SQLite state,
9
+ packaged fake providers, conservative usage probes, agent-friendly CLI output,
10
+ lean MCP toolsets, redaction, session reconciliation, and worktree utilities.
@@ -0,0 +1,80 @@
1
+ # Contributing
2
+
3
+ AgentPool is intentionally small and conservative. Please keep changes aligned
4
+ with the product boundary: local control plane, explicit provider selection,
5
+ truthful capacity data, no routing.
6
+
7
+ ## Local Setup
8
+
9
+ ```bash
10
+ uv venv
11
+ uv pip install -e ".[dev]"
12
+ agentpool init
13
+ agentpool setup cursor
14
+ agentpool doctor --deep --privacy
15
+ ```
16
+
17
+ If you do not have real provider CLIs configured, use the packaged fake
18
+ providers:
19
+
20
+ ```bash
21
+ agentpool smoke --provider fake-question --repo . --json
22
+ ```
23
+
24
+ ## Before Opening A PR
25
+
26
+ Run:
27
+
28
+ ```bash
29
+ .venv/bin/python -m pytest -q
30
+ agentpool models validate --path src/agentpool/provider_model_catalog.json --json
31
+ agentpool config validate --json
32
+ agentpool smoke --provider fake-question --repo . --json
33
+ ```
34
+
35
+ Do not include provider credentials, SQLite databases, artifacts, tmux logs, or
36
+ screenshots containing account data.
37
+
38
+ ## Branching
39
+
40
+ - `main` is the integration branch.
41
+ - Use short feature branches such as `codex/mcp-client-docs` or
42
+ `codex/usage-probe-fix`.
43
+ - Prefer pull requests for anything after the initial import.
44
+ - Keep releases tag-driven. Do not hand-edit generated distribution artifacts.
45
+
46
+ ## Design Rules
47
+
48
+ - Do not add `provider=auto`, ranking, scoring, or provider picking.
49
+ - Do not add browser scraping or credential storage.
50
+ - Add fake-provider coverage before relying on real-provider behavior.
51
+ - Keep real-provider probes explicit and confidence-tagged.
52
+ - Prefer subprocess argument arrays.
53
+ - Keep worktree creation explicit; do not assume ownership of a user's repo
54
+ layout unless the user requested `--isolation worktree`.
55
+ - Document what a probe reads and stores.
56
+
57
+ ## Provider Changes
58
+
59
+ For a provider adapter or usage probe, update:
60
+
61
+ - tests or fake-provider coverage;
62
+ - `docs/provider-adapters.md`;
63
+ - `docs/usage-detection.md`;
64
+ - `README.md` provider matrix when user-visible.
65
+
66
+ ## Releases
67
+
68
+ Releases are created from tags. See [docs/release.md](docs/release.md) for the
69
+ full checklist, `server.json` alignment, and post-release MCP install smoke.
70
+
71
+ ```bash
72
+ git tag v0.1.0a0
73
+ git push origin v0.1.0a0
74
+ ```
75
+
76
+ The release workflow runs tests, validates config/catalogs and `server.json`,
77
+ runs the packaged fake-provider smoke, builds wheel/sdist artifacts, attaches
78
+ `server.json` to the GitHub prerelease, and creates a GitHub prerelease. PyPI
79
+ publishing is disabled unless repository variable `PUBLISH_TO_PYPI` is set to
80
+ `true` and the PyPI trusted-publishing environment is configured.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 AgentPool contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.