agentqit 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 (184) hide show
  1. agentqit-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +29 -0
  2. agentqit-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
  3. agentqit-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +22 -0
  4. agentqit-0.1.0/.github/pull_request_template.md +12 -0
  5. agentqit-0.1.0/.github/workflows/ci.yml +95 -0
  6. agentqit-0.1.0/.github/workflows/release.yml +98 -0
  7. agentqit-0.1.0/.gitignore +30 -0
  8. agentqit-0.1.0/.pre-commit-config.yaml +14 -0
  9. agentqit-0.1.0/AGENTS.md +69 -0
  10. agentqit-0.1.0/CHANGELOG.md +21 -0
  11. agentqit-0.1.0/CODE_OF_CONDUCT.md +16 -0
  12. agentqit-0.1.0/CONTRIBUTING.md +52 -0
  13. agentqit-0.1.0/LICENSE +21 -0
  14. agentqit-0.1.0/PKG-INFO +99 -0
  15. agentqit-0.1.0/README.md +92 -0
  16. agentqit-0.1.0/README.pypi.md +65 -0
  17. agentqit-0.1.0/SECURITY.md +30 -0
  18. agentqit-0.1.0/SUPPORT.md +13 -0
  19. agentqit-0.1.0/docs/agent-integration.md +131 -0
  20. agentqit-0.1.0/docs/architecture.md +76 -0
  21. agentqit-0.1.0/docs/browser-runtime.md +127 -0
  22. agentqit-0.1.0/docs/compatibility.md +87 -0
  23. agentqit-0.1.0/docs/distribution.md +122 -0
  24. agentqit-0.1.0/docs/getting-started.md +74 -0
  25. agentqit-0.1.0/docs/interface-comparison.md +61 -0
  26. agentqit-0.1.0/docs/plugin-api.md +42 -0
  27. agentqit-0.1.0/docs/releases.md +115 -0
  28. agentqit-0.1.0/docs/result-contract.md +98 -0
  29. agentqit-0.1.0/docs/roadmap.md +23 -0
  30. agentqit-0.1.0/docs/schemas/profile-v1.json +592 -0
  31. agentqit-0.1.0/docs/schemas/registry-v1.json +515 -0
  32. agentqit-0.1.0/docs/schemas/result-v1.json +287 -0
  33. agentqit-0.1.0/docs/schemas/workspace-v1.json +273 -0
  34. agentqit-0.1.0/docs/verification.md +65 -0
  35. agentqit-0.1.0/docs/workspaces.md +122 -0
  36. agentqit-0.1.0/examples/orders/LICENSE +21 -0
  37. agentqit-0.1.0/examples/orders/README.md +84 -0
  38. agentqit-0.1.0/examples/orders/agentqit.yaml +7 -0
  39. agentqit-0.1.0/examples/orders/profile.demo.yaml +5 -0
  40. agentqit-0.1.0/examples/orders/pyproject.toml +21 -0
  41. agentqit-0.1.0/examples/orders/src/qa_product_orders/__init__.py +26 -0
  42. agentqit-0.1.0/examples/orders/src/qa_product_orders/demo.py +125 -0
  43. agentqit-0.1.0/examples/orders/src/qa_product_orders/openapi.json +111 -0
  44. agentqit-0.1.0/examples/orders/src/qa_product_orders/operations.yaml +124 -0
  45. agentqit-0.1.0/examples/orders/src/qa_product_orders/profile.example.yaml +4 -0
  46. agentqit-0.1.0/examples/orders/src/qa_product_orders/requirements.md +13 -0
  47. agentqit-0.1.0/examples/orders/src/qa_product_orders/ui.html +81 -0
  48. agentqit-0.1.0/pyproject.toml +83 -0
  49. agentqit-0.1.0/src/qa_cli/__init__.py +1 -0
  50. agentqit-0.1.0/src/qa_cli/app.py +1575 -0
  51. agentqit-0.1.0/src/qa_cli/browser_commands.py +92 -0
  52. agentqit-0.1.0/src/qa_cli/openapi_import.py +496 -0
  53. agentqit-0.1.0/src/qa_cli/parsing.py +120 -0
  54. agentqit-0.1.0/src/qa_cli/product_scaffold.py +286 -0
  55. agentqit-0.1.0/src/qa_cli/renderers.py +26 -0
  56. agentqit-0.1.0/src/qa_cli/settings.py +21 -0
  57. agentqit-0.1.0/src/qa_cli/workspace_commands.py +184 -0
  58. agentqit-0.1.0/src/qa_mcp/__init__.py +1 -0
  59. agentqit-0.1.0/src/qa_mcp/__main__.py +32 -0
  60. agentqit-0.1.0/src/qa_mcp/browser_tools.py +87 -0
  61. agentqit-0.1.0/src/qa_mcp/rendering.py +31 -0
  62. agentqit-0.1.0/src/qa_mcp/server.py +146 -0
  63. agentqit-0.1.0/src/qa_mcp/session_tools.py +51 -0
  64. agentqit-0.1.0/src/qa_runtime/__init__.py +5 -0
  65. agentqit-0.1.0/src/qa_runtime/adapters/__init__.py +1 -0
  66. agentqit-0.1.0/src/qa_runtime/adapters/credential_helper.py +89 -0
  67. agentqit-0.1.0/src/qa_runtime/adapters/credentials.py +23 -0
  68. agentqit-0.1.0/src/qa_runtime/adapters/environment.py +30 -0
  69. agentqit-0.1.0/src/qa_runtime/adapters/httpx.py +117 -0
  70. agentqit-0.1.0/src/qa_runtime/adapters/kafka.py +594 -0
  71. agentqit-0.1.0/src/qa_runtime/adapters/kubernetes.py +274 -0
  72. agentqit-0.1.0/src/qa_runtime/adapters/oauth2.py +132 -0
  73. agentqit-0.1.0/src/qa_runtime/adapters/playwright.py +379 -0
  74. agentqit-0.1.0/src/qa_runtime/adapters/postgres.py +242 -0
  75. agentqit-0.1.0/src/qa_runtime/adapters/s3.py +232 -0
  76. agentqit-0.1.0/src/qa_runtime/adapters/static_auth.py +64 -0
  77. agentqit-0.1.0/src/qa_runtime/adapters/tls.py +67 -0
  78. agentqit-0.1.0/src/qa_runtime/adapters/vault.py +160 -0
  79. agentqit-0.1.0/src/qa_runtime/adapters/vault_auth.py +93 -0
  80. agentqit-0.1.0/src/qa_runtime/application.py +311 -0
  81. agentqit-0.1.0/src/qa_runtime/artifacts.py +189 -0
  82. agentqit-0.1.0/src/qa_runtime/authoring.py +142 -0
  83. agentqit-0.1.0/src/qa_runtime/bootstrap.py +228 -0
  84. agentqit-0.1.0/src/qa_runtime/browser_catalog.py +57 -0
  85. agentqit-0.1.0/src/qa_runtime/browser_models.py +129 -0
  86. agentqit-0.1.0/src/qa_runtime/codecs/__init__.py +1 -0
  87. agentqit-0.1.0/src/qa_runtime/codecs/catalog.py +104 -0
  88. agentqit-0.1.0/src/qa_runtime/codecs/protobuf.py +89 -0
  89. agentqit-0.1.0/src/qa_runtime/compiler.py +106 -0
  90. agentqit-0.1.0/src/qa_runtime/contracts.py +124 -0
  91. agentqit-0.1.0/src/qa_runtime/credential_config.py +156 -0
  92. agentqit-0.1.0/src/qa_runtime/engine.py +386 -0
  93. agentqit-0.1.0/src/qa_runtime/errors.py +51 -0
  94. agentqit-0.1.0/src/qa_runtime/evidence.py +304 -0
  95. agentqit-0.1.0/src/qa_runtime/handlers/__init__.py +1 -0
  96. agentqit-0.1.0/src/qa_runtime/handlers/browser.py +89 -0
  97. agentqit-0.1.0/src/qa_runtime/handlers/database.py +203 -0
  98. agentqit-0.1.0/src/qa_runtime/handlers/http.py +371 -0
  99. agentqit-0.1.0/src/qa_runtime/handlers/kafka.py +790 -0
  100. agentqit-0.1.0/src/qa_runtime/handlers/kafka_offsets.py +107 -0
  101. agentqit-0.1.0/src/qa_runtime/handlers/kubernetes.py +169 -0
  102. agentqit-0.1.0/src/qa_runtime/handlers/s3.py +425 -0
  103. agentqit-0.1.0/src/qa_runtime/lifecycle.py +53 -0
  104. agentqit-0.1.0/src/qa_runtime/models.py +519 -0
  105. agentqit-0.1.0/src/qa_runtime/onboarding.py +444 -0
  106. agentqit-0.1.0/src/qa_runtime/plugins.py +108 -0
  107. agentqit-0.1.0/src/qa_runtime/ports/__init__.py +1 -0
  108. agentqit-0.1.0/src/qa_runtime/ports/auth.py +23 -0
  109. agentqit-0.1.0/src/qa_runtime/ports/browser.py +30 -0
  110. agentqit-0.1.0/src/qa_runtime/ports/credentials.py +9 -0
  111. agentqit-0.1.0/src/qa_runtime/ports/database.py +33 -0
  112. agentqit-0.1.0/src/qa_runtime/ports/decoding.py +11 -0
  113. agentqit-0.1.0/src/qa_runtime/ports/http.py +11 -0
  114. agentqit-0.1.0/src/qa_runtime/ports/kafka.py +140 -0
  115. agentqit-0.1.0/src/qa_runtime/ports/kubernetes.py +28 -0
  116. agentqit-0.1.0/src/qa_runtime/ports/operation.py +38 -0
  117. agentqit-0.1.0/src/qa_runtime/ports/product.py +99 -0
  118. agentqit-0.1.0/src/qa_runtime/ports/s3.py +56 -0
  119. agentqit-0.1.0/src/qa_runtime/ports/tls.py +8 -0
  120. agentqit-0.1.0/src/qa_runtime/profile.py +72 -0
  121. agentqit-0.1.0/src/qa_runtime/registry.py +189 -0
  122. agentqit-0.1.0/src/qa_runtime/resources.py +11 -0
  123. agentqit-0.1.0/src/qa_runtime/security.py +146 -0
  124. agentqit-0.1.0/src/qa_runtime/serialization.py +27 -0
  125. agentqit-0.1.0/src/qa_runtime/sessions.py +315 -0
  126. agentqit-0.1.0/src/qa_runtime/version.py +5 -0
  127. agentqit-0.1.0/src/qa_runtime/workspace.py +139 -0
  128. agentqit-0.1.0/tests/conftest.py +6 -0
  129. agentqit-0.1.0/tests/fixtures/compatibility/v1/agentqit.yaml +8 -0
  130. agentqit-0.1.0/tests/fixtures/compatibility/v1/operations/items.yaml +26 -0
  131. agentqit-0.1.0/tests/fixtures/compatibility/v1/qa.yaml +9 -0
  132. agentqit-0.1.0/tests/integration/test_browser_sessions.py +323 -0
  133. agentqit-0.1.0/tests/integration/test_cli_evidence_workflow.py +220 -0
  134. agentqit-0.1.0/tests/integration/test_cli_kafka_checkpoint.py +275 -0
  135. agentqit-0.1.0/tests/integration/test_cli_multiple_products.py +146 -0
  136. agentqit-0.1.0/tests/integration/test_cli_vault.py +163 -0
  137. agentqit-0.1.0/tests/integration/test_cli_workspace.py +41 -0
  138. agentqit-0.1.0/tests/integration/test_mcp_server.py +184 -0
  139. agentqit-0.1.0/tests/integration/test_orders_demo.py +174 -0
  140. agentqit-0.1.0/tests/integration/test_playwright_adapter.py +171 -0
  141. agentqit-0.1.0/tests/integration/test_release_compatibility.py +95 -0
  142. agentqit-0.1.0/tests/integration/test_workspace_application.py +163 -0
  143. agentqit-0.1.0/tests/unit/test_adapter_lifecycle.py +96 -0
  144. agentqit-0.1.0/tests/unit/test_artifacts.py +62 -0
  145. agentqit-0.1.0/tests/unit/test_authoring.py +109 -0
  146. agentqit-0.1.0/tests/unit/test_bootstrap.py +222 -0
  147. agentqit-0.1.0/tests/unit/test_browser_models.py +47 -0
  148. agentqit-0.1.0/tests/unit/test_browser_provisioning.py +34 -0
  149. agentqit-0.1.0/tests/unit/test_cli_credential_source.py +42 -0
  150. agentqit-0.1.0/tests/unit/test_cli_parsing.py +85 -0
  151. agentqit-0.1.0/tests/unit/test_compiler.py +110 -0
  152. agentqit-0.1.0/tests/unit/test_custom_resource_onboarding.py +58 -0
  153. agentqit-0.1.0/tests/unit/test_dependency_boundaries.py +36 -0
  154. agentqit-0.1.0/tests/unit/test_environment_credentials.py +66 -0
  155. agentqit-0.1.0/tests/unit/test_evidence.py +369 -0
  156. agentqit-0.1.0/tests/unit/test_kafka_offsets.py +134 -0
  157. agentqit-0.1.0/tests/unit/test_native_runtime_configuration.py +104 -0
  158. agentqit-0.1.0/tests/unit/test_native_tls_bootstrap.py +138 -0
  159. agentqit-0.1.0/tests/unit/test_onboarding_review.py +88 -0
  160. agentqit-0.1.0/tests/unit/test_openapi_import.py +415 -0
  161. agentqit-0.1.0/tests/unit/test_protobuf_codec.py +112 -0
  162. agentqit-0.1.0/tests/unit/test_public_archives.py +32 -0
  163. agentqit-0.1.0/tests/unit/test_public_content.py +38 -0
  164. agentqit-0.1.0/tests/unit/test_release_gate.py +79 -0
  165. agentqit-0.1.0/tests/unit/test_renderers.py +69 -0
  166. agentqit-0.1.0/tests/unit/test_runtime_lifecycle_consistency.py +80 -0
  167. agentqit-0.1.0/tests/unit/test_runtime_result_boundary.py +310 -0
  168. agentqit-0.1.0/tests/unit/test_s3_adapter.py +385 -0
  169. agentqit-0.1.0/tests/unit/test_s3_handler.py +425 -0
  170. agentqit-0.1.0/tests/unit/test_tls.py +31 -0
  171. agentqit-0.1.0/tests/unit/test_vault_auth.py +61 -0
  172. agentqit-0.1.0/tests/unit/test_vault_credential_config.py +170 -0
  173. agentqit-0.1.0/tests/unit/test_vault_credentials.py +268 -0
  174. agentqit-0.1.0/tests/unit/test_vault_evidence_scope.py +71 -0
  175. agentqit-0.1.0/tests/unit/test_vault_onboarding.py +241 -0
  176. agentqit-0.1.0/tests/unit/test_verify_wheel.py +200 -0
  177. agentqit-0.1.0/tools/benchmark_interfaces.py +247 -0
  178. agentqit-0.1.0/tools/check_public_content.py +131 -0
  179. agentqit-0.1.0/tools/export_contracts.py +43 -0
  180. agentqit-0.1.0/tools/release_check.py +86 -0
  181. agentqit-0.1.0/tools/smoke_installed.py +221 -0
  182. agentqit-0.1.0/tools/verify_archives.py +107 -0
  183. agentqit-0.1.0/tools/verify_wheel.py +233 -0
  184. agentqit-0.1.0/uv.lock +2107 -0
@@ -0,0 +1,29 @@
1
+ name: Bug report
2
+ description: Report incorrect runtime, CLI, or plugin integration behavior.
3
+ body:
4
+ - type: textarea
5
+ id: behavior
6
+ attributes:
7
+ label: Expected and actual behavior
8
+ description: Explain the problem and what you expected to happen.
9
+ validations:
10
+ required: true
11
+ - type: textarea
12
+ id: reproduction
13
+ attributes:
14
+ label: Minimal reproduction
15
+ description: Include commands and synthetic configuration. Remove credentials and private records.
16
+ validations:
17
+ required: true
18
+ - type: textarea
19
+ id: environment
20
+ attributes:
21
+ label: Environment
22
+ description: AgentQit version or commit, Python version, operating system, plugin version, and installation method.
23
+ validations:
24
+ required: true
25
+ - type: textarea
26
+ id: evidence
27
+ attributes:
28
+ label: Relevant output
29
+ description: Include the redacted JSON result or error, if available.
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Report a security vulnerability privately
4
+ url: https://github.com/akimovWare/AgentQit/security/advisories/new
5
+ about: Use private reporting for vulnerabilities and sensitive reproduction details.
@@ -0,0 +1,22 @@
1
+ name: Feature request
2
+ description: Propose a reusable capability or an integration improvement.
3
+ body:
4
+ - type: textarea
5
+ id: problem
6
+ attributes:
7
+ label: Problem to solve
8
+ description: Describe the backend testing task and the current limitation.
9
+ validations:
10
+ required: true
11
+ - type: textarea
12
+ id: proposal
13
+ attributes:
14
+ label: Proposed behavior
15
+ description: Explain how a human or agent would use the capability and observe its result.
16
+ validations:
17
+ required: true
18
+ - type: textarea
19
+ id: alternatives
20
+ attributes:
21
+ label: Alternatives
22
+ description: Mention existing operations or plugin composition you have considered.
@@ -0,0 +1,12 @@
1
+ ## Change
2
+
3
+ Describe the problem and the resulting behavior.
4
+
5
+ ## Validation
6
+
7
+ List the relevant checks and their results. Explain any skipped checks.
8
+
9
+ ## Compatibility
10
+
11
+ Describe changes to CLI arguments, JSON, configuration, plugin APIs, or packaged
12
+ assets, if applicable. Link the updated documentation.
@@ -0,0 +1,95 @@
1
+ name: Validate
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+ workflow_call:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ core:
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ os: [ubuntu-24.04, macos-15]
17
+ python: ["3.12", "3.13", "3.14"]
18
+ runs-on: ${{ matrix.os }}
19
+ steps:
20
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
21
+ - uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
22
+ with:
23
+ version: "0.13.6"
24
+ python-version: ${{ matrix.python }}
25
+ - run: uv sync --frozen
26
+ - run: uv run python tools/check_public_content.py
27
+ - run: uv run ruff check src tests tools examples/orders/src
28
+ - run: uv run ruff format --check src tests tools examples/orders/src
29
+ - run: uv run pre-commit run --all-files
30
+ - run: uv run python tools/export_contracts.py --check
31
+ - run: uv run pytest
32
+ - run: uv build
33
+ - run: uv run python tools/verify_wheel.py dist
34
+ - run: uv run python tools/verify_archives.py dist
35
+ - run: uv run twine check --strict dist/*.whl dist/*.tar.gz
36
+ - run: uv venv .installed-check
37
+ - run: uv pip install --python .installed-check/bin/python dist/*.whl
38
+ - name: Verify isolated installation outside checkout
39
+ run: |
40
+ cd "$RUNNER_TEMP"
41
+ "$GITHUB_WORKSPACE/.installed-check/bin/python" -I "$GITHUB_WORKSPACE/tools/smoke_installed.py" --output "$RUNNER_TEMP/agentqit-smoke"
42
+
43
+ browser:
44
+ strategy:
45
+ fail-fast: false
46
+ matrix:
47
+ python: ["3.12", "3.13", "3.14"]
48
+ runs-on: ubuntu-24.04
49
+ steps:
50
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
51
+ - uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
52
+ with:
53
+ version: "0.13.6"
54
+ python-version: ${{ matrix.python }}
55
+ - run: uv sync --frozen --extra browser
56
+ - run: uv run playwright install --with-deps chromium --only-shell
57
+ - run: uv run pytest -m browser
58
+ env:
59
+ AGENTQIT_BROWSER_TESTS: "1"
60
+
61
+ context:
62
+ runs-on: ubuntu-24.04
63
+ steps:
64
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
65
+ - uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
66
+ with:
67
+ version: "0.13.6"
68
+ python-version: "3.12"
69
+ - run: uv sync --frozen
70
+ - run: uv run python tools/check_public_content.py
71
+ - name: Verify CLI/MCP workflows and catalog-size independence
72
+ run: uv run python tools/benchmark_interfaces.py --output .agentqit/context-review
73
+ - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
74
+ with:
75
+ name: interface-context-summary
76
+ path: .agentqit/context-review/summary.json
77
+ if-no-files-found: error
78
+
79
+
80
+ privacy:
81
+ runs-on: ubuntu-24.04
82
+ steps:
83
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
84
+ with:
85
+ fetch-depth: 0
86
+ - uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
87
+ with:
88
+ version: "0.13.6"
89
+ python-version: "3.12"
90
+ - run: uv sync --frozen
91
+ - run: uv run python tools/check_public_content.py
92
+ - name: Install pinned secret scanner
93
+ run: go install github.com/zricethezav/gitleaks/v8@v8.30.1
94
+ - name: Scan reachable history without exposing matched values
95
+ run: '"$(go env GOPATH)/bin/gitleaks" git --redact --no-banner --log-opts="--all" .'
@@ -0,0 +1,98 @@
1
+ name: Prepare release
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ version:
7
+ description: Canonical package version (without v)
8
+ required: true
9
+ type: string
10
+ publish:
11
+ description: Publish verified artifacts (requires separate repository activation)
12
+ default: false
13
+ type: boolean
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ concurrency:
19
+ group: agentqit-release
20
+ cancel-in-progress: false
21
+
22
+ jobs:
23
+ validate:
24
+ uses: ./.github/workflows/ci.yml
25
+
26
+ build:
27
+ needs: validate
28
+ runs-on: ubuntu-24.04
29
+ env:
30
+ RELEASE_VERSION: ${{ inputs.version }}
31
+ PUBLISH_REQUESTED: ${{ inputs.publish }}
32
+ PUBLICATION_ENABLED: ${{ vars.AGENTQIT_PUBLISH_ENABLED }}
33
+ steps:
34
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
35
+ with:
36
+ fetch-depth: 0
37
+ persist-credentials: false
38
+ - uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
39
+ with:
40
+ version: "0.13.6"
41
+ python-version: "3.12"
42
+ - run: uv sync --frozen
43
+ - run: uv build
44
+ - run: uv run python tools/verify_wheel.py dist
45
+ - run: uv run python tools/verify_archives.py dist
46
+ - run: uv run twine check --strict dist/*.whl dist/*.tar.gz
47
+ - name: Verify release identity and write checksums
48
+ shell: bash
49
+ run: |
50
+ flags=()
51
+ if [ "$PUBLISH_REQUESTED" = "true" ]; then
52
+ test "$PUBLICATION_ENABLED" = "true"
53
+ test "$GITHUB_REF" = "refs/tags/v$RELEASE_VERSION"
54
+ flags+=(--require-tag)
55
+ fi
56
+ uv run python tools/release_check.py dist --version "$RELEASE_VERSION" "${flags[@]}"
57
+ - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
58
+ with:
59
+ name: agentqit-release
60
+ path: dist/
61
+ if-no-files-found: error
62
+ retention-days: 14
63
+
64
+ publish:
65
+ if: inputs.publish && vars.AGENTQIT_PUBLISH_ENABLED == 'true'
66
+ needs: build
67
+ runs-on: ubuntu-24.04
68
+ environment: pypi
69
+ permissions:
70
+ id-token: write
71
+ steps:
72
+ - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8
73
+ with:
74
+ name: agentqit-release
75
+ path: release/
76
+ - name: Verify retained checksums and select distribution files
77
+ shell: python
78
+ run: |
79
+ import hashlib
80
+ import json
81
+ import pathlib
82
+ import shutil
83
+ source = pathlib.Path('release')
84
+ manifest = json.loads((source / 'release-manifest.json').read_text())
85
+ assert manifest['tag_verified'] is True
86
+ destination = pathlib.Path('dist')
87
+ destination.mkdir()
88
+ for name, details in manifest['files'].items():
89
+ assert pathlib.Path(name).name == name
90
+ assert name.endswith(('.whl', '.tar.gz'))
91
+ path = source / name
92
+ assert path.stat().st_size == details['bytes']
93
+ assert hashlib.sha256(path.read_bytes()).hexdigest() == details['sha256']
94
+ shutil.copyfile(path, destination / name)
95
+ assert len(list(destination.iterdir())) == 2
96
+ - uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # release/v1
97
+ with:
98
+ packages-dir: dist/
@@ -0,0 +1,30 @@
1
+ .venv/
2
+ .installed-check/
3
+ __pycache__/
4
+ *.py[cod]
5
+ .pytest_cache/
6
+ .ruff_cache/
7
+ .uv-cache/
8
+ .pre-commit-cache/
9
+ .coverage
10
+ coverage.*
11
+ junit-*.xml
12
+ htmlcov/
13
+ dist/
14
+ *.egg-info/
15
+ .idea/
16
+ .vscode/
17
+ .DS_Store
18
+ .codex/
19
+ .qa-cli/
20
+ .runs/
21
+ .agentqit/
22
+ playwright/.auth/
23
+ .env
24
+ .env.*
25
+ !.env.example
26
+ *.jks
27
+ *.key
28
+
29
+ # Local acceptance reports are retained for review, not published.
30
+ /docs/products/*/reports/20*/
@@ -0,0 +1,14 @@
1
+ minimum_pre_commit_version: "4.0.0"
2
+ repos:
3
+ - repo: local
4
+ hooks:
5
+ - id: ruff-check
6
+ name: ruff check
7
+ entry: uv run ruff check
8
+ language: system
9
+ types_or: [python, pyi]
10
+ - id: ruff-format-check
11
+ name: ruff format check
12
+ entry: uv run ruff format --check
13
+ language: system
14
+ types_or: [python, pyi]
@@ -0,0 +1,69 @@
1
+ # Agent instructions
2
+
3
+ ## Project
4
+
5
+ AgentQit provides application testing tools for AI agents. Read [the roadmap](docs/roadmap.md),
6
+ [compatibility](docs/compatibility.md), and [the release guide](docs/releases.md) before changing code.
7
+ Package publication requires an explicit maintainer instruction. Source changes
8
+ use pull requests and the required CI checks.
9
+
10
+ ## Architecture
11
+
12
+ - `qa_runtime` owns contracts, compilation, execution, ports, and adapters.
13
+ - `qa_cli` owns argument parsing, configuration selection, and rendering.
14
+ - Product plugins own their catalogs, topology, auth/TLS composition, and guides.
15
+ - Core must not import CLI or product packages. CLI discovers products through
16
+ the `qa_runtime.products` entry point group.
17
+ - Add ordinary operations in a workspace or plugin YAML catalog. Add Python only for
18
+ composition or a capability that existing handlers cannot express.
19
+ - Keep `compile()` synchronous and free of network and credential access.
20
+ Execution and I/O ports are asynchronous; close resources with `aclose()`.
21
+ - Browser support uses [explicit task sessions](docs/browser-runtime.md),
22
+ a browser port, and an adapter. Compilation does not launch or provision browsers.
23
+
24
+ ## Behavior and evidence
25
+
26
+ - Requirements and canonical contracts define expectations. Service code helps
27
+ explain implementation; it does not establish the expected business result.
28
+ - Return facts. Business assertions and verdicts belong to the caller.
29
+ - Preserve the `CommandResult` envelope and documented exit codes. JSON stdout
30
+ contains exactly one document; diagnostics belong on stderr.
31
+ - Do not introduce executable scenarios, arbitrary SQL/topic inputs, shell,
32
+ expression evaluation, or templates that execute code.
33
+ - `admission` is discovery metadata; it is not a separate authorization gate.
34
+
35
+ ## Data and execution
36
+
37
+ - Use synthetic examples, reserved `.invalid` hostnames, and fake ports in tests.
38
+ - Keep system-specific contracts, source revisions, endpoints, records, and
39
+ credentials out of the reusable runtime and public examples.
40
+ - Profiles contain nonsecret configuration and credential references only.
41
+ Secrets enter through `CredentialSource` and use the shared recursive redactor.
42
+ - Keep TLS chain and hostname validation enabled.
43
+ - Keep authenticated browser state out of Git. JSON redaction does not sanitize
44
+ screenshots or trace archives; handle those through scoped artifact policy.
45
+ - Live execution requires a user task naming the target environment and scope.
46
+ - Mutations require explicit user authorization, `--allow-mutation`, and exact
47
+ environment `qa`. MCP additionally requires operator-granted host capability;
48
+ a tool argument cannot grant it. Enforce admission before transport I/O.
49
+ - After authorized QA, report created record IDs and effects. Keep those records
50
+ unless deletion was requested; restore temporary faults and locks.
51
+
52
+ ## Changes
53
+
54
+ - Write public documentation and generated instructions in English.
55
+ - Update behavior, focused tests, and affected guides together.
56
+ - Normalize public errors through `RuntimeFailure` and the appropriate `ExitCode`.
57
+ - Change dependencies in `pyproject.toml` through uv; never hand-edit `uv.lock`.
58
+ - Start with focused tests, then run lint, format, and the full offline suite.
59
+ Packaging changes also require a build, archive inspection, and installation
60
+ checks outside the checkout.
61
+ - Include relevant validation results and supported scope with each change.
62
+
63
+ For a downstream plugin, follow [the integration workflow](docs/agent-integration.md).
64
+
65
+
66
+ Browser-marked acceptance uses owned synthetic loopback fixtures and provisioned
67
+ binaries. Run `AGENTQIT_BROWSER_TESTS=1 uv run pytest` after explicit browser setup.
68
+ The standard suite runs without browser binaries. Supported platforms and test
69
+ scope are documented in [verification](docs/verification.md).
@@ -0,0 +1,21 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 - 2026-11-02
4
+
5
+ - CPython 3.12, 3.13, and 3.14 support on macOS and Linux.
6
+ - Product-neutral runtime and CLI with public dependency sources.
7
+ - Local YAML workspaces and independently installed product plugins.
8
+ - Local stdio MCP with bounded discovery, plans, observations, invocation, and checkpoints.
9
+ - Interactive Playwright task sessions, scoped snapshot references, typed actions,
10
+ input masking, approved credential refs, screenshots, and private traces.
11
+ - Shared UI/backend journals, expiry/session/operation limits, and uncertain-outcome handling.
12
+ - Explicit environment credentials and standard Bearer/API-key header composition.
13
+ - Synthetic Orders UI/API, a separate plugin distribution, and deliberate frontend fault acceptance.
14
+ - Agent/contributor guides, CI, archive inspection, and isolated install checks.
15
+ - Workspace-aware MCP discovery: backend task/evidence tools remain available;
16
+ browser-only tools appear only when browser capabilities are configured.
17
+ - Installed-version commands, workspace schema export, frozen v1 consumer checks,
18
+ reviewed schema snapshots, and a documented compatibility/upgrade policy.
19
+ - Reproducible CLI/MCP context accounting against synthetic local backend workflows.
20
+ - Manual release preparation, source/tag/version checks, retained artifact hashes,
21
+ strict package metadata validation, and protected Trusted Publishing.
@@ -0,0 +1,16 @@
1
+ # Community guidelines
2
+
3
+ AgentQit welcomes respectful participation from people with different backgrounds
4
+ and levels of experience.
5
+
6
+ - Discuss ideas and technical evidence constructively.
7
+ - Be patient with questions and acknowledge mistakes without personal attacks.
8
+ - Do not harass, threaten, discriminate, or share another person's private information.
9
+ - Keep issue and pull-request discussions relevant to the project.
10
+ - Use synthetic data in examples and respect the security reporting policy.
11
+
12
+ Maintainers may edit or remove disruptive content, close discussions, and restrict
13
+ participation when necessary. Repeated or severe abuse can result in a permanent ban.
14
+
15
+ Use GitHub's private reporting tools to report abusive content or account behavior.
16
+ For a security vulnerability in AgentQit, follow [SECURITY.md](SECURITY.md).
@@ -0,0 +1,52 @@
1
+ # Contributing
2
+
3
+ Start with [the roadmap](docs/roadmap.md) and [architecture](docs/architecture.md).
4
+ Please follow the [community guidelines](CODE_OF_CONDUCT.md).
5
+
6
+ Keep changes small and explain the problem, resulting behavior, and validation.
7
+ For a new operation, prefer a workspace or product YAML catalog. Change the runtime when a reusable
8
+ capability is missing across systems.
9
+
10
+ The development workflow is:
11
+
12
+ ```sh
13
+ uv sync --frozen
14
+ uv run ruff check src tests tools examples/orders/src
15
+ uv run ruff format --check src tests tools examples/orders/src
16
+ uv run pre-commit run --all-files
17
+ uv run python tools/check_public_content.py
18
+ uv run python tools/export_contracts.py --check
19
+ uv run pytest
20
+ uv build
21
+ uv run python tools/verify_wheel.py dist
22
+ uv run python tools/verify_archives.py dist
23
+ uv run twine check --strict dist/*.whl dist/*.tar.gz
24
+ ```
25
+
26
+ Tests use fake ports and owned synthetic fixtures. They must run without access
27
+ to an application environment or real credentials.
28
+
29
+ Public interface changes include the JSON envelope, exit codes, operation schema,
30
+ plugin API, configuration aliases, and CLI arguments. Cover relevant boundaries
31
+ and update their documentation in the same change.
32
+
33
+ Packaging validation must inspect both wheel and source distribution, install
34
+ from built artifacts outside the checkout, and exercise an independently built
35
+ example plugin. Run focused tests first; repeat broader checks when changes or
36
+ failures justify it.
37
+
38
+ Write documentation, issue descriptions, and pull requests in English. Include
39
+ only synthetic data in reproducible examples. Review [AGENTS.md](AGENTS.md) before
40
+ using an agent to contribute.
41
+
42
+ Native browser acceptance and clean-install validation are described in [verification](docs/verification.md).
43
+
44
+ Read [compatibility](docs/compatibility.md) before changing a public contract and
45
+ [the release guide](docs/releases.md) before preparing a version. Publication is
46
+ disabled by default and requires a separate owner instruction.
47
+
48
+ Before sharing changes, review the full diff and selected history for identifying
49
+ information and operational data. Publication checks flag developer-local paths,
50
+ non-example email addresses, unreviewed URL hosts, and operational files. Optional
51
+ local denylists stay outside version control. Never add sensitive literals as test
52
+ fixtures or scanner rules in this repository.
agentqit-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 AgentQit 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.
@@ -0,0 +1,99 @@
1
+ Metadata-Version: 2.5
2
+ Name: agentqit
3
+ Version: 0.1.0
4
+ Summary: Application testing tools for AI agents
5
+ Project-URL: Source, https://github.com/akimovWare/AgentQit
6
+ Project-URL: Documentation, https://github.com/akimovWare/AgentQit/blob/main/README.md
7
+ Project-URL: Issues, https://github.com/akimovWare/AgentQit/issues
8
+ Project-URL: Changelog, https://github.com/akimovWare/AgentQit/blob/main/CHANGELOG.md
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Classifier: Operating System :: POSIX
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Classifier: Programming Language :: Python :: 3.14
15
+ Classifier: Programming Language :: Python :: Implementation :: CPython
16
+ Requires-Python: >=3.12
17
+ Requires-Dist: aiokafka<1,>=0.12
18
+ Requires-Dist: anyio<5,>=4.8
19
+ Requires-Dist: asyncpg<1,>=0.30
20
+ Requires-Dist: botocore<2,>=1.42
21
+ Requires-Dist: defusedxml<1,>=0.7
22
+ Requires-Dist: httpx<1,>=0.28
23
+ Requires-Dist: mcp<3,>=2
24
+ Requires-Dist: protobuf<7,>=5
25
+ Requires-Dist: pydantic-settings<3,>=2.7
26
+ Requires-Dist: pydantic<3,>=2.10
27
+ Requires-Dist: pyjks<21,>=20
28
+ Requires-Dist: pyyaml<7,>=6.0
29
+ Requires-Dist: rich<15,>=13.9
30
+ Requires-Dist: typer<1,>=0.15
31
+ Provides-Extra: browser
32
+ Requires-Dist: playwright<2,>=1.55; extra == 'browser'
33
+ Description-Content-Type: text/markdown
34
+
35
+ # AgentQit
36
+
37
+ Application testing tools for AI agents.
38
+
39
+ AgentQit exposes typed browser actions, reviewed backend operations, and observations
40
+ with evidence. The agent selects checks from requirements and compares the returned
41
+ facts with expected behavior. CLI and local stdio MCP share one execution runtime.
42
+
43
+ CPython 3.12, 3.13, and 3.14; macOS and Linux.
44
+
45
+ ## Install
46
+
47
+ With uv installed:
48
+
49
+ ```sh
50
+ uv tool install --python 3.12 'agentqit[browser]>=0.1,<0.2'
51
+ qa browser install --headless-only
52
+ qa workspace init --directory ./my-qa --name sample
53
+ ```
54
+
55
+ For backend-only use, omit `[browser]` and browser provisioning. Pin a reviewed
56
+ version such as `==0.1.0` for a reproducible installation.
57
+
58
+ Configure the workspace with reviewed operation YAML, your QA endpoints, and
59
+ explicit credential references. Ordinary integrations use YAML; reusable catalogs
60
+ and custom composition can use plugins.
61
+
62
+ ## Connect an agent
63
+
64
+ Configure your MCP host to launch:
65
+
66
+ ```sh
67
+ agentqit-mcp --workspace /absolute/path/to/my-qa
68
+ ```
69
+
70
+ Interactive browser sessions use MCP. CLI also supports backend execution,
71
+ discovery, planning, and diagnostics. Writes require operator authorization,
72
+ caller opt-in, and `environment: qa`. Browser actions use scoped references;
73
+ evidence artifacts remain local and private by default.
74
+
75
+ ## Update
76
+
77
+ ```sh
78
+ uv tool upgrade agentqit
79
+ ```
80
+
81
+ Updates follow the source and version constraints used at installation. Finish
82
+ tasks and stop MCP before upgrading, then restart it. Re-provision browser binaries
83
+ when Playwright changes. User YAML and credentials are separate from the application.
84
+
85
+ ## Guides
86
+
87
+ - [Project overview](https://github.com/akimovWare/AgentQit)
88
+ - [Workspace and authentication setup](https://github.com/akimovWare/AgentQit/blob/main/docs/workspaces.md)
89
+ - [Agent integration](https://github.com/akimovWare/AgentQit/blob/main/docs/agent-integration.md)
90
+ - [Browser sessions and evidence](https://github.com/akimovWare/AgentQit/blob/main/docs/browser-runtime.md)
91
+ - [Installation and updates](https://github.com/akimovWare/AgentQit/blob/main/docs/distribution.md)
92
+ - [Compatibility](https://github.com/akimovWare/AgentQit/blob/main/docs/compatibility.md)
93
+ - [Security boundaries](https://github.com/akimovWare/AgentQit/blob/main/SECURITY.md)
94
+
95
+ A completed operation is an execution fact. Business conclusions belong to the
96
+ caller. Unknown write outcomes require state inspection before retrying.
97
+ Plugins execute trusted code; this runtime is a local tool, not a shared remote service.
98
+
99
+ [MIT license](https://github.com/akimovWare/AgentQit/blob/main/LICENSE).