agent-tokenops 0.4.0__tar.gz → 0.4.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 (132) hide show
  1. {agent_tokenops-0.4.0/src/agent_tokenops.egg-info → agent_tokenops-0.4.1}/PKG-INFO +2 -2
  2. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/README.md +0 -1
  3. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/pyproject.toml +2 -1
  4. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1/src/agent_tokenops.egg-info}/PKG-INFO +2 -2
  5. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/agent_tokenops.egg-info/SOURCES.txt +1 -0
  6. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/agent_tokenops.egg-info/requires.txt +1 -0
  7. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/__init__.py +1 -1
  8. agent_tokenops-0.4.1/tests/test_a2a_server_errors.py +22 -0
  9. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/LICENSE.txt +0 -0
  10. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/setup.cfg +0 -0
  11. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/agent_tokenops.egg-info/dependency_links.txt +0 -0
  12. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/agent_tokenops.egg-info/top_level.txt +0 -0
  13. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/adapters/__init__.py +0 -0
  14. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/adapters/langchain.py +0 -0
  15. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/config/__init__.py +0 -0
  16. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/config/default.yaml +0 -0
  17. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/config/loader.py +0 -0
  18. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/__init__.py +0 -0
  19. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/attribution.py +0 -0
  20. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/boundary.py +0 -0
  21. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/client.py +0 -0
  22. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/config.py +0 -0
  23. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/context.py +0 -0
  24. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/core.py +0 -0
  25. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/crossing.py +0 -0
  26. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/dev_plane.py +0 -0
  27. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/engine.py +0 -0
  28. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/governance_cache.py +0 -0
  29. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/http.py +0 -0
  30. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/http_store.py +0 -0
  31. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/instrument.py +0 -0
  32. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/integration.py +0 -0
  33. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/ledger.py +0 -0
  34. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/ledger_backend.py +0 -0
  35. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/models.py +0 -0
  36. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/__init__.py +0 -0
  37. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/_util.py +0 -0
  38. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/concurrency_cap.py +0 -0
  39. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/context_compaction.py +0 -0
  40. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/cost_budget.py +0 -0
  41. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/cost_guard.py +0 -0
  42. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/output_runaway.py +0 -0
  43. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/pre_call_worst_case.py +0 -0
  44. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/progress_guard.py +0 -0
  45. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/step_cap.py +0 -0
  46. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/time_budget.py +0 -0
  47. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/tool_fix.py +0 -0
  48. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/tool_output_cap.py +0 -0
  49. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/policies/trajectory_hint.py +0 -0
  50. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/pricing.py +0 -0
  51. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/propagate.py +0 -0
  52. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/request_context.py +0 -0
  53. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/run.py +0 -0
  54. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/store.py +0 -0
  55. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/trajectory/__init__.py +0 -0
  56. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/trajectory/compress.py +0 -0
  57. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/trajectory/enqueue.py +0 -0
  58. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/trajectory/gates.py +0 -0
  59. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/trajectory/hint.py +0 -0
  60. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/trajectory/scope.py +0 -0
  61. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/trajectory/serialize.py +0 -0
  62. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/trajectory/worker.py +0 -0
  63. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/control/usage.py +0 -0
  64. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/demo.py +0 -0
  65. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/env.py +0 -0
  66. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/providers/__init__.py +0 -0
  67. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/providers/anthropic.py +0 -0
  68. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/providers/factory.py +0 -0
  69. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/providers/openai.py +0 -0
  70. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/providers/types.py +0 -0
  71. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/server/__init__.py +0 -0
  72. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/server/__main__.py +0 -0
  73. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/server/app.py +0 -0
  74. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/ui/__init__.py +0 -0
  75. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/ui/app.py +0 -0
  76. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/ui/policy_labels.py +0 -0
  77. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/ui/run_detail.py +0 -0
  78. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/ui/store_client.py +0 -0
  79. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/ui/theme.py +0 -0
  80. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/ui/views/__init__.py +0 -0
  81. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/ui/views/admin.py +0 -0
  82. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/src/tokenops/ui/views/dashboard.py +0 -0
  83. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_a2a_health.py +0 -0
  84. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_actuators.py +0 -0
  85. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_apply.py +0 -0
  86. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_attribution.py +0 -0
  87. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_attribution_ledger_policies_e2e.py +0 -0
  88. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_boundary.py +0 -0
  89. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_chronicle_boundary.py +0 -0
  90. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_concurrency_cap.py +0 -0
  91. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_config.py +0 -0
  92. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_context_compaction.py +0 -0
  93. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_control_plane_app.py +0 -0
  94. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_control_plane_client.py +0 -0
  95. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_cost_budget.py +0 -0
  96. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_cost_guard.py +0 -0
  97. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_cross_process_budget_gating.py +0 -0
  98. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_crossing_hook.py +0 -0
  99. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_demo.py +0 -0
  100. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_demo_policy_names.py +0 -0
  101. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_governance_config_cache.py +0 -0
  102. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_governance_event_names.py +0 -0
  103. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_governance_per_agent.py +0 -0
  104. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_integration.py +0 -0
  105. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_ledger.py +0 -0
  106. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_ledger_backend_contract.py +0 -0
  107. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_ledger_backend_mode.py +0 -0
  108. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_llm_boundary_precall.py +0 -0
  109. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_output_runaway.py +0 -0
  110. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_policies_wrap_integration.py +0 -0
  111. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_policy_coordination.py +0 -0
  112. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_policy_names.py +0 -0
  113. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_pre_call_worst_case.py +0 -0
  114. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_preview_mode.py +0 -0
  115. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_pricing.py +0 -0
  116. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_progress_guard.py +0 -0
  117. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_propagate.py +0 -0
  118. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_provider_usage.py +0 -0
  119. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_reason_encoding.py +0 -0
  120. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_server_enforcement.py +0 -0
  121. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_step_cap.py +0 -0
  122. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_store.py +0 -0
  123. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_thread_safety.py +0 -0
  124. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_time_budget.py +0 -0
  125. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_tokenops_run.py +0 -0
  126. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_tool_fix.py +0 -0
  127. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_tool_output_cap.py +0 -0
  128. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_trajectory_hint.py +0 -0
  129. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_trajectory_hint_e2e.py +0 -0
  130. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_ui_policy_names.py +0 -0
  131. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_wrap_adapters.py +0 -0
  132. {agent_tokenops-0.4.0 → agent_tokenops-0.4.1}/tests/test_wrap_complete_chronicle.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-tokenops
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: TokenOps control plane and SDK for run-aware agent token governance
5
5
  Author: Susheem Koul, Tisha Chawla
6
6
  License-Expression: MIT
@@ -38,6 +38,7 @@ Requires-Dist: ruff>=0.8; extra == "dev"
38
38
  Requires-Dist: mypy>=1.13; extra == "dev"
39
39
  Requires-Dist: pre-commit>=4.0; extra == "dev"
40
40
  Requires-Dist: types-PyYAML>=6.0; extra == "dev"
41
+ Requires-Dist: zizmor>=1.30; extra == "dev"
41
42
  Provides-Extra: contract
42
43
  Requires-Dist: agentplane-control-plane>=0.2.0; extra == "contract"
43
44
  Provides-Extra: examples
@@ -372,7 +373,6 @@ tests/ # unit + e2e
372
373
  [LinkedIn](https://www.linkedin.com/posts/microsoft-developers_who-spent-all-the-tokens-tokenops-gives-activity-7499191980715982848-224b) and [X](https://x.com/msdev/status/2093425027500978292).
373
374
  - **[Who spent all the tokens? Real-time, run-scoped cost control for AI agents](https://commandline.microsoft.com/tokenops-real-time-run-scoped-cost-control-ai-agents/)**: *Command Line*, a Microsoft publication.
374
375
  - **[FinOps for AI Agents: Who Spent All the Tokens?](https://www.youtube.com/watch?v=GJX19pNhmSw)**: talk at the **AI Engineer World's Fair**, San Francisco.
375
- - **Selected to participate in the [GitHub Secure Open Source Fund](https://github.com/open-source/github-secure-open-source-fund)** (Session 5), GitHub Security Lab's open source security program.
376
376
 
377
377
  ## 🛟 Support
378
378
 
@@ -323,7 +323,6 @@ tests/ # unit + e2e
323
323
  [LinkedIn](https://www.linkedin.com/posts/microsoft-developers_who-spent-all-the-tokens-tokenops-gives-activity-7499191980715982848-224b) and [X](https://x.com/msdev/status/2093425027500978292).
324
324
  - **[Who spent all the tokens? Real-time, run-scoped cost control for AI agents](https://commandline.microsoft.com/tokenops-real-time-run-scoped-cost-control-ai-agents/)**: *Command Line*, a Microsoft publication.
325
325
  - **[FinOps for AI Agents: Who Spent All the Tokens?](https://www.youtube.com/watch?v=GJX19pNhmSw)**: talk at the **AI Engineer World's Fair**, San Francisco.
326
- - **Selected to participate in the [GitHub Secure Open Source Fund](https://github.com/open-source/github-secure-open-source-fund)** (Session 5), GitHub Security Lab's open source security program.
327
326
 
328
327
  ## 🛟 Support
329
328
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "agent-tokenops"
7
- version = "0.4.0"
7
+ version = "0.4.1"
8
8
  description = "TokenOps control plane and SDK for run-aware agent token governance"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -55,6 +55,7 @@ dev = [
55
55
  "mypy>=1.13",
56
56
  "pre-commit>=4.0",
57
57
  "types-PyYAML>=6.0",
58
+ "zizmor>=1.30",
58
59
  ]
59
60
  # The verified-fake contract suite + e2e run against a real control plane in-process.
60
61
  # Not in `dev` because the 0.2.0 line is not on PyPI yet — the tests that need it
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-tokenops
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: TokenOps control plane and SDK for run-aware agent token governance
5
5
  Author: Susheem Koul, Tisha Chawla
6
6
  License-Expression: MIT
@@ -38,6 +38,7 @@ Requires-Dist: ruff>=0.8; extra == "dev"
38
38
  Requires-Dist: mypy>=1.13; extra == "dev"
39
39
  Requires-Dist: pre-commit>=4.0; extra == "dev"
40
40
  Requires-Dist: types-PyYAML>=6.0; extra == "dev"
41
+ Requires-Dist: zizmor>=1.30; extra == "dev"
41
42
  Provides-Extra: contract
42
43
  Requires-Dist: agentplane-control-plane>=0.2.0; extra == "contract"
43
44
  Provides-Extra: examples
@@ -372,7 +373,6 @@ tests/ # unit + e2e
372
373
  [LinkedIn](https://www.linkedin.com/posts/microsoft-developers_who-spent-all-the-tokens-tokenops-gives-activity-7499191980715982848-224b) and [X](https://x.com/msdev/status/2093425027500978292).
373
374
  - **[Who spent all the tokens? Real-time, run-scoped cost control for AI agents](https://commandline.microsoft.com/tokenops-real-time-run-scoped-cost-control-ai-agents/)**: *Command Line*, a Microsoft publication.
374
375
  - **[FinOps for AI Agents: Who Spent All the Tokens?](https://www.youtube.com/watch?v=GJX19pNhmSw)**: talk at the **AI Engineer World's Fair**, San Francisco.
375
- - **Selected to participate in the [GitHub Secure Open Source Fund](https://github.com/open-source/github-secure-open-source-fund)** (Session 5), GitHub Security Lab's open source security program.
376
376
 
377
377
  ## 🛟 Support
378
378
 
@@ -78,6 +78,7 @@ src/tokenops/ui/views/__init__.py
78
78
  src/tokenops/ui/views/admin.py
79
79
  src/tokenops/ui/views/dashboard.py
80
80
  tests/test_a2a_health.py
81
+ tests/test_a2a_server_errors.py
81
82
  tests/test_actuators.py
82
83
  tests/test_apply.py
83
84
  tests/test_attribution.py
@@ -20,6 +20,7 @@ ruff>=0.8
20
20
  mypy>=1.13
21
21
  pre-commit>=4.0
22
22
  types-PyYAML>=6.0
23
+ zizmor>=1.30
23
24
 
24
25
  [examples]
25
26
  ddgs>=9.0
@@ -4,7 +4,7 @@ from tokenops.env import load_env
4
4
 
5
5
  load_env()
6
6
 
7
- __version__ = "0.4.0"
7
+ __version__ = "0.4.1"
8
8
 
9
9
 
10
10
  def init() -> None:
@@ -0,0 +1,22 @@
1
+ """The A2A example server must not echo exception text to callers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+
7
+ from examples.a2a.server import create_a2a_app
8
+ from fastapi.testclient import TestClient
9
+
10
+
11
+ def test_handler_error_returns_generic_500_and_logs_detail(caplog):
12
+ async def handler(payload, headers):
13
+ raise RuntimeError("secret /srv/db.sqlite path")
14
+
15
+ app = create_a2a_app("t", "d", "http://x", [], handler)
16
+ with caplog.at_level(logging.ERROR):
17
+ res = TestClient(app).post("/v1/tasks", json={})
18
+
19
+ assert res.status_code == 500
20
+ assert res.json() == {"error": "internal error"}
21
+ assert "secret" not in res.text
22
+ assert "secret /srv/db.sqlite path" in caplog.text
File without changes