petfishframework 0.4.0__tar.gz → 0.4.2__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 (177) hide show
  1. petfishframework-0.4.2/.gitattributes +11 -0
  2. {petfishframework-0.4.0 → petfishframework-0.4.2}/.github/workflows/ci.yml +12 -0
  3. {petfishframework-0.4.0 → petfishframework-0.4.2}/AGENTS.md +4 -0
  4. {petfishframework-0.4.0 → petfishframework-0.4.2}/CHANGELOG.md +53 -0
  5. {petfishframework-0.4.0 → petfishframework-0.4.2}/PKG-INFO +26 -4
  6. {petfishframework-0.4.0 → petfishframework-0.4.2}/README.md +25 -3
  7. {petfishframework-0.4.0 → petfishframework-0.4.2}/SECURITY.md +5 -4
  8. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/api.md +1 -1
  9. petfishframework-0.4.2/docs/feedbacks/archives/petfishframework_v0_4_0_review.md +830 -0
  10. petfishframework-0.4.2/docs/feedbacks/petfishframework_v0_4_1_review.md +704 -0
  11. {petfishframework-0.4.0 → petfishframework-0.4.2}/pyproject.toml +1 -1
  12. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/__init__.py +1 -1
  13. petfishframework-0.4.2/src/petfishframework/__main__.py +28 -0
  14. petfishframework-0.4.2/src/petfishframework/observability/__init__.py +15 -0
  15. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/observability/siem_sink.py +68 -12
  16. petfishframework-0.4.2/tests/test_main_entry.py +30 -0
  17. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_siem_export.py +92 -0
  18. {petfishframework-0.4.0 → petfishframework-0.4.2}/uv.lock +1 -1
  19. petfishframework-0.4.0/src/petfishframework/observability/__init__.py +0 -10
  20. {petfishframework-0.4.0 → petfishframework-0.4.2}/.env.example +0 -0
  21. {petfishframework-0.4.0 → petfishframework-0.4.2}/.github/workflows/publish.yml +0 -0
  22. {petfishframework-0.4.0 → petfishframework-0.4.2}/.gitignore +0 -0
  23. {petfishframework-0.4.0 → petfishframework-0.4.2}/.sisyphus/plans/v0.1.6-plan.md +0 -0
  24. {petfishframework-0.4.0 → petfishframework-0.4.2}/.sisyphus/plans/v0.2.0-plan.md +0 -0
  25. {petfishframework-0.4.0 → petfishframework-0.4.2}/.sisyphus/plans/v0.3.0-plan.md +0 -0
  26. {petfishframework-0.4.0 → petfishframework-0.4.2}/.sisyphus/plans/v0.4.0-plan.md +0 -0
  27. {petfishframework-0.4.0 → petfishframework-0.4.2}/AGENTS.md.new +0 -0
  28. {petfishframework-0.4.0 → petfishframework-0.4.2}/CONTRIBUTING.md +0 -0
  29. {petfishframework-0.4.0 → petfishframework-0.4.2}/Dockerfile +0 -0
  30. {petfishframework-0.4.0 → petfishframework-0.4.2}/LICENSE +0 -0
  31. {petfishframework-0.4.0 → petfishframework-0.4.2}/conftest.py +0 -0
  32. {petfishframework-0.4.0 → petfishframework-0.4.2}/docker-compose.yml +0 -0
  33. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/architecture.md +0 -0
  34. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/benchmark-results.md +0 -0
  35. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/deployment.md +0 -0
  36. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/development-plan.md +0 -0
  37. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/development.md +0 -0
  38. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/enterprise-expense-demo.md +0 -0
  39. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/feedbacks/archives/petfishframework_0_1_4_playground_recommendations.md +0 -0
  40. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/feedbacks/archives/petfishframework_playground_report.md +0 -0
  41. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/feedbacks/archives/petfishframework_production_readiness_roadmap.md +0 -0
  42. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/feedbacks/archives/petfishframework_recommendations.md +0 -0
  43. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/feedbacks/archives/petfishframework_v0_1_6_playground_review.md +0 -0
  44. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/feedbacks/archives/petfishframework_v0_1_7_review.md +0 -0
  45. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/feedbacks/archives/petfishframework_v0_1_8_review.md +0 -0
  46. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/feedbacks/archives/petfishframework_v0_2_1_review.md +0 -0
  47. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/feedbacks/archives/petfishframework_v0_2_2_review.md +0 -0
  48. {petfishframework-0.4.0/docs/feedbacks → petfishframework-0.4.2/docs/feedbacks/archives}/petfishframework_v0_3_0_review.md +0 -0
  49. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/release-checklist.md +0 -0
  50. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/release-protocol.md +0 -0
  51. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/research/competitor-analysis/README.md +0 -0
  52. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/research/competitor-analysis/competitor-matrix.md +0 -0
  53. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/research/competitor-analysis/market-brief.md +0 -0
  54. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/research/competitor-analysis/positioning-map.md +0 -0
  55. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/research/competitor-analysis/swot-analysis.md +0 -0
  56. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/research/literature-review/inclusion-exclusion-criteria.md +0 -0
  57. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/research/literature-review/literature-matrix.md +0 -0
  58. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/research/literature-review/literature-review.md +0 -0
  59. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/research/literature-review/search-strategy.md +0 -0
  60. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/research/reference-repos-absorption.md +0 -0
  61. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/skeleton-completeness-checklist.md +0 -0
  62. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/test-results-report.md +0 -0
  63. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/threat-model.md +0 -0
  64. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/usage-guide.md +0 -0
  65. {petfishframework-0.4.0 → petfishframework-0.4.2}/docs/validation-roadmap.md +0 -0
  66. {petfishframework-0.4.0 → petfishframework-0.4.2}/initialization-report.md +0 -0
  67. {petfishframework-0.4.0 → petfishframework-0.4.2}/mcp/README.md +0 -0
  68. {petfishframework-0.4.0 → petfishframework-0.4.2}/mcp/connection-checklist.md +0 -0
  69. {petfishframework-0.4.0 → petfishframework-0.4.2}/mcp/mcp-config.example.json +0 -0
  70. {petfishframework-0.4.0 → petfishframework-0.4.2}/opencode.json +0 -0
  71. {petfishframework-0.4.0 → petfishframework-0.4.2}/qa/code-review-checklist.md +0 -0
  72. {petfishframework-0.4.0 → petfishframework-0.4.2}/qa/qa-review.md +0 -0
  73. {petfishframework-0.4.0 → petfishframework-0.4.2}/qa/qc-gate-decision.md +0 -0
  74. {petfishframework-0.4.0 → petfishframework-0.4.2}/qa/test-plan.md +0 -0
  75. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/config.py +0 -0
  76. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/core/__init__.py +0 -0
  77. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/core/agent.py +0 -0
  78. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/core/compiled.py +0 -0
  79. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/core/contracts.py +0 -0
  80. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/core/conversation.py +0 -0
  81. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/core/environment.py +0 -0
  82. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/core/events.py +0 -0
  83. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/core/session.py +0 -0
  84. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/core/structured.py +0 -0
  85. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/core/types.py +0 -0
  86. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/credentials/__init__.py +0 -0
  87. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/credentials/broker.py +0 -0
  88. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/credentials/token.py +0 -0
  89. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/credentials/vault_adapter.py +0 -0
  90. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/mcp/__init__.py +0 -0
  91. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/mcp/client.py +0 -0
  92. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/mcp/server.py +0 -0
  93. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/mcp/stdio_transport.py +0 -0
  94. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/mcp/wrapper.py +0 -0
  95. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/models/__init__.py +0 -0
  96. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/models/anthropic.py +0 -0
  97. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/models/fake.py +0 -0
  98. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/models/openai.py +0 -0
  99. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/observability/otel_sink.py +0 -0
  100. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/observability/sinks.py +0 -0
  101. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/permissions/__init__.py +0 -0
  102. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/permissions/model.py +0 -0
  103. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/policies/__init__.py +0 -0
  104. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/policies/conditions.py +0 -0
  105. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/policies/engine.py +0 -0
  106. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/policies/rule.py +0 -0
  107. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/policies/test_runner.py +0 -0
  108. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/policies/validator.py +0 -0
  109. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/reasoning/__init__.py +0 -0
  110. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/reasoning/lats.py +0 -0
  111. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/reasoning/llm_plus_p.py +0 -0
  112. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/reasoning/react.py +0 -0
  113. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/reliability/__init__.py +0 -0
  114. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/reliability/audit_report.py +0 -0
  115. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/reliability/cost.py +0 -0
  116. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/reliability/cost_report.py +0 -0
  117. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/reliability/pass_at_k.py +0 -0
  118. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/reliability/replay.py +0 -0
  119. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/reliability/retry.py +0 -0
  120. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/reliability/timeout.py +0 -0
  121. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/retrieval/__init__.py +0 -0
  122. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/retrieval/adaptive.py +0 -0
  123. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/retrieval/crag.py +0 -0
  124. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/retrieval/memory_store.py +0 -0
  125. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/tools/__init__.py +0 -0
  126. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/tools/agent_tool.py +0 -0
  127. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/tools/base.py +0 -0
  128. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/tools/calculator.py +0 -0
  129. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/tools/path_planner.py +0 -0
  130. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/tools/registry.py +0 -0
  131. {petfishframework-0.4.0 → petfishframework-0.4.2}/src/petfishframework/tools/word_sorter.py +0 -0
  132. {petfishframework-0.4.0 → petfishframework-0.4.2}/tasks/backlog.md +0 -0
  133. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/integration/__init__.py +0 -0
  134. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/integration/test_anthropic_integration.py +0 -0
  135. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/integration/test_openai_integration.py +0 -0
  136. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/policies/enterprise-expense.tests.yaml +0 -0
  137. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_agent_tool.py +0 -0
  138. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_anthropic_adapter.py +0 -0
  139. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_api_agent_lifecycle.py +0 -0
  140. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_api_edge_cases.py +0 -0
  141. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_api_integration.py +0 -0
  142. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_api_public_surface.py +0 -0
  143. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_api_type_safety.py +0 -0
  144. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_async.py +0 -0
  145. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_audit_report_v2.py +0 -0
  146. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_conversation.py +0 -0
  147. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_credential_broker.py +0 -0
  148. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_credential_integration.py +0 -0
  149. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_degrade.py +0 -0
  150. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_degrade_failclosed.py +0 -0
  151. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_enterprise_demo.py +0 -0
  152. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_m2_m3_m4.py +0 -0
  153. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_mcp.py +0 -0
  154. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_openai_adapter.py +0 -0
  155. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_otel_sink.py +0 -0
  156. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_pass_at_k.py +0 -0
  157. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_permission_semantics.py +0 -0
  158. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_quickstart_smoke.py +0 -0
  159. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_replay.py +0 -0
  160. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_replay_rerun.py +0 -0
  161. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_replay_resume.py +0 -0
  162. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_retrieval.py +0 -0
  163. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_retry.py +0 -0
  164. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_skeleton.py +0 -0
  165. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_stdio_transport.py +0 -0
  166. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_streaming.py +0 -0
  167. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_structured.py +0 -0
  168. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_tool_registry.py +0 -0
  169. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_v016_semantics.py +0 -0
  170. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_v018.py +0 -0
  171. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_v019.py +0 -0
  172. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_v2_interface_compatibility.py +0 -0
  173. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_v2_lats.py +0 -0
  174. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_v2_llm_plus_p.py +0 -0
  175. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_vault_adapter.py +0 -0
  176. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_yaml_policy.py +0 -0
  177. {petfishframework-0.4.0 → petfishframework-0.4.2}/tests/test_yaml_policy_suite.py +0 -0
@@ -0,0 +1,11 @@
1
+ # Normalize line endings across platforms — all text files use LF in the repo
2
+ * text=auto eol=lf
3
+
4
+ # Binary files — never touch
5
+ *.png binary
6
+ *.jpg binary
7
+ *.jpeg binary
8
+ *.gif binary
9
+ *.ico binary
10
+ *.pdf binary
11
+ *.drawio binary
@@ -31,3 +31,15 @@ jobs:
31
31
  - name: Run tests
32
32
  run: uv run pytest tests/ -q --tb=short
33
33
  # Integration tests are skipped automatically (no API key in CI)
34
+
35
+ docker-smoke:
36
+ runs-on: ubuntu-latest
37
+ needs: test
38
+ steps:
39
+ - uses: actions/checkout@v4
40
+
41
+ - name: Build Docker image
42
+ run: docker build -t petfishframework .
43
+
44
+ - name: Run container smoke test
45
+ run: docker run --rm petfishframework
@@ -63,6 +63,10 @@ tasks/ 任务与 backlog
63
63
  规则:每条必须是"违反会导致 bug,且代码本身无法自解释"的约束;上限 10 条。
64
64
  -->
65
65
 
66
+ 1. **Release 版本号 grep checklist** — 每次发布前必须 grep 旧版本号。`SECURITY.md` 的 Supported Versions 表是版本敏感文件,但 `pre_release.py` 不检查它。发布前手动执行 `grep -rn "0\.[0-9]\+\.x" SECURITY.md` 确认当前版本。遗漏会导致外部安全审计认为项目维护停滞。
67
+ 2. **新模块必须同步 `__init__.py` 导出** — 新增 `src/petfishframework/<module>/<sub>.py` 时,必须同时在 `<module>/__init__.py` 的 `__all__` 和 import 中添加导出。否则用户无法从包顶层导入,只能走子模块路径,违反 Python 包惯例。OTelSink/SIEMSink 在 v0.4.0 发布时遗漏了此步骤。
68
+ 3. **Docker ENTRYPOINT 必须有对应的 `__main__.py`** — Dockerfile 中 `ENTRYPOINT ["python", "-m", "petfishframework"]` 要求 `src/petfishframework/__main__.py` 存在且 `main()` 返回 int 退出码。没有 `__main__.py` 时容器启动直接 crash,且 CI 不构建 Docker 所以不会发现。
69
+
66
70
  ## Architecture Decisions
67
71
 
68
72
  <!-- 重大技术选型和设计决策的简要记录(一句话结论 + 指向 docs/ 下完整 ADR 的链接)。 -->
@@ -2,6 +2,59 @@
2
2
 
3
3
  All notable changes to petfishFramework will be documented in this file.
4
4
 
5
+ ## [0.4.2] — 2026-07-08
6
+
7
+ ### CI & Deployment Hardening
8
+
9
+ #### Docker Smoke Test in CI
10
+ - New `docker-smoke` job in CI workflow: builds image and runs container
11
+ - Catches `__main__.py` / ENTRYPOINT regressions before release
12
+
13
+ #### Line Ending Normalization
14
+ - Added `.gitattributes` with `* text=auto eol=lf`
15
+ - All text files now use LF consistently across platforms
16
+
17
+ #### SIEMSink Documentation
18
+ - Docstring now explicitly states key-based redaction is not a DLP engine
19
+ - Clarifies that value-pattern secrets (sk-..., JWTs) are not detected
20
+ - Documents default redact_keys and nesting behavior
21
+
22
+ #### Observability Example
23
+ - New `examples/06_observability.py`: ListSink, ConsoleSink, SIEMSink, OTelSink demo
24
+ - Shows correct sink attachment via `session.events.subscribe()`
25
+ - Demonstrates custom `redact_keys` with nested field redaction
26
+
27
+ #### README Fix
28
+ - Observability example corrected: uses `session.events.subscribe()` instead of non-existent `event_sinks=` parameter
29
+
30
+ ## [0.4.1] — 2026-07-08
31
+
32
+ ### Review Fix Patch
33
+
34
+ #### Security & Version Hygiene
35
+ - `SECURITY.md` Supported Versions updated from `0.2.x` to `0.4.x` active + `0.3.x` security fixes only
36
+ - `AGENTS.md` Development Gotchas filled with 3 prevention rules (version grep, `__init__.py` export, Docker entrypoint)
37
+
38
+ #### Observability API
39
+ - `observability/__init__.py` now exports `OTelSink` and `SIEMSink` (previously required submodule import)
40
+ - Updated docstring to reflect actual available sinks
41
+
42
+ #### SIEMSink Enhanced Redaction
43
+ - New `redact_keys` parameter: `SIEMSink(redact_keys=("api_key", "password", ...))`
44
+ - Default redaction: `api_key`, `secret`, `password`, `token`, `authorization`, `cookie`
45
+ - Nested dict key matching (e.g. `connection.password` in `details.redacted_fields`)
46
+ - 3 new TDD tests: default keys, nested keys, custom keys
47
+
48
+ #### Docker Entrypoint Fix
49
+ - Created `src/petfishframework/__main__.py` — `python -m petfishframework` now works
50
+ - Docker container `ENTRYPOINT` no longer crashes on start
51
+ - 2 new TDD tests verifying exit code and output
52
+
53
+ #### README
54
+ - Core Concepts table: "RERUN + RESUME planned" → available
55
+ - Added Observability (OTel + SIEM) section with code example
56
+ - Test count badge updated to 305
57
+
5
58
  ## [0.4.0] — 2026-07-08
6
59
 
7
60
  ### v0.4.0 Production Foundation
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: petfishframework
3
- Version: 0.4.0
3
+ Version: 0.4.2
4
4
  Summary: A lightweight runtime framework for reliable, auditable, budget-aware, and permission-aware AI agents.
5
5
  Project-URL: Homepage, https://github.com/kylecui/petfishFramework
6
6
  Project-URL: Documentation, https://github.com/kylecui/petfishFramework/tree/master/docs
@@ -39,7 +39,7 @@ Description-Content-Type: text/markdown
39
39
 
40
40
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
41
41
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/kylecui/petfishFramework/blob/master/LICENSE)
42
- [![Tests: 300](https://img.shields.io/badge/tests-300-brightgreen.svg)](https://github.com/kylecui/petfishFramework/tree/master/tests/)
42
+ [![Tests: 305](https://img.shields.io/badge/tests-305-brightgreen.svg)](https://github.com/kylecui/petfishFramework/tree/master/tests/)
43
43
 
44
44
  **Status: Alpha** — API may change. Core runtime works; see [Roadmap](#roadmap).
45
45
 
@@ -192,7 +192,7 @@ print(result.summary())
192
192
  | **Environment** | Single chokepoint (all calls audited, budget-metered, permission-gated) |
193
193
  | **Budget** | Hard execution limits (tokens, cost, steps, tool calls) |
194
194
  | **Permission** | SARC access control with 6 DecisionEffects |
195
- | **Replay** | AUDIT event log available; RERUN + RESUME planned |
195
+ | **Replay** | AUDIT event log via `session.replay()`; RERUN + RESUME via `reliability.replay` wrappers |
196
196
  | **Pass^k** | Reliability metric (k repetitions + perturbation suite) |
197
197
 
198
198
  ## Features
@@ -249,6 +249,28 @@ agent = Agent(model=model, reasoning=ReAct(), tools=tools, credential_broker=bro
249
249
  # Tools with requires_credentials=True receive a ScopedToken (repr-safe, auto-expiring)
250
250
  ```
251
251
 
252
+ ## Observability (OTel + SIEM)
253
+
254
+ ```python
255
+ from petfishframework.observability import OTelSink, SIEMSink
256
+
257
+ # OTel — creates spans for model/tool/session events (requires opentelemetry)
258
+ otel_sink = OTelSink() # no-op if opentelemetry not installed
259
+
260
+ # SIEM — structured JSON-Lines export for downstream SIEM ingestion
261
+ siem_sink = SIEMSink(output_path="audit.jsonl")
262
+ # Credentials auto-redacted; configure additional secret fields:
263
+ # siem_sink = SIEMSink(output_path="audit.jsonl", redact_keys=("api_key", "password"))
264
+
265
+ agent = Agent(model=model, reasoning=ReAct(), tools=tools)
266
+
267
+ # Attach sinks to the session's EventEmitter
268
+ session = agent.session("your task")
269
+ session.events.subscribe(otel_sink)
270
+ session.events.subscribe(siem_sink)
271
+ result = session.run()
272
+ ```
273
+
252
274
  ## Roadmap
253
275
 
254
276
  - **v0.2.x**: Core runtime, permission semantics, enterprise PoC, Trusted Publishing ✅
@@ -284,7 +306,7 @@ petfishFramework is **Alpha**. API may change before v1.0.
284
306
  git clone https://github.com/kylecui/petfishFramework.git
285
307
  cd petfishFramework
286
308
  uv sync --all-extras
287
- uv run pytest # 300 tests
309
+ uv run pytest # 305 tests
288
310
  uv run ruff check src/ tests/
289
311
  ```
290
312
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/kylecui/petfishFramework/blob/master/LICENSE)
7
- [![Tests: 300](https://img.shields.io/badge/tests-300-brightgreen.svg)](https://github.com/kylecui/petfishFramework/tree/master/tests/)
7
+ [![Tests: 305](https://img.shields.io/badge/tests-305-brightgreen.svg)](https://github.com/kylecui/petfishFramework/tree/master/tests/)
8
8
 
9
9
  **Status: Alpha** — API may change. Core runtime works; see [Roadmap](#roadmap).
10
10
 
@@ -157,7 +157,7 @@ print(result.summary())
157
157
  | **Environment** | Single chokepoint (all calls audited, budget-metered, permission-gated) |
158
158
  | **Budget** | Hard execution limits (tokens, cost, steps, tool calls) |
159
159
  | **Permission** | SARC access control with 6 DecisionEffects |
160
- | **Replay** | AUDIT event log available; RERUN + RESUME planned |
160
+ | **Replay** | AUDIT event log via `session.replay()`; RERUN + RESUME via `reliability.replay` wrappers |
161
161
  | **Pass^k** | Reliability metric (k repetitions + perturbation suite) |
162
162
 
163
163
  ## Features
@@ -214,6 +214,28 @@ agent = Agent(model=model, reasoning=ReAct(), tools=tools, credential_broker=bro
214
214
  # Tools with requires_credentials=True receive a ScopedToken (repr-safe, auto-expiring)
215
215
  ```
216
216
 
217
+ ## Observability (OTel + SIEM)
218
+
219
+ ```python
220
+ from petfishframework.observability import OTelSink, SIEMSink
221
+
222
+ # OTel — creates spans for model/tool/session events (requires opentelemetry)
223
+ otel_sink = OTelSink() # no-op if opentelemetry not installed
224
+
225
+ # SIEM — structured JSON-Lines export for downstream SIEM ingestion
226
+ siem_sink = SIEMSink(output_path="audit.jsonl")
227
+ # Credentials auto-redacted; configure additional secret fields:
228
+ # siem_sink = SIEMSink(output_path="audit.jsonl", redact_keys=("api_key", "password"))
229
+
230
+ agent = Agent(model=model, reasoning=ReAct(), tools=tools)
231
+
232
+ # Attach sinks to the session's EventEmitter
233
+ session = agent.session("your task")
234
+ session.events.subscribe(otel_sink)
235
+ session.events.subscribe(siem_sink)
236
+ result = session.run()
237
+ ```
238
+
217
239
  ## Roadmap
218
240
 
219
241
  - **v0.2.x**: Core runtime, permission semantics, enterprise PoC, Trusted Publishing ✅
@@ -249,7 +271,7 @@ petfishFramework is **Alpha**. API may change before v1.0.
249
271
  git clone https://github.com/kylecui/petfishFramework.git
250
272
  cd petfishFramework
251
273
  uv sync --all-extras
252
- uv run pytest # 300 tests
274
+ uv run pytest # 305 tests
253
275
  uv run ruff check src/ tests/
254
276
  ```
255
277
 
@@ -2,10 +2,11 @@
2
2
 
3
3
  ## Supported Versions
4
4
 
5
- | Version | Supported |
6
- |---------|--------------------|
7
- | 0.2.x | ✅ Active development |
8
- | < 0.2 | Not supported |
5
+ | Version | Supported |
6
+ |---------|------------------------|
7
+ | 0.4.x | ✅ Active development |
8
+ | 0.3.x | ⚠️ Security fixes only |
9
+ | < 0.3 | ❌ Not supported |
9
10
 
10
11
  ## Reporting a Vulnerability
11
12
 
@@ -1,6 +1,6 @@
1
1
  # petfishFramework API Reference
2
2
 
3
- This document is the authoritative reference for the public API of petfishFramework v0.4.0. Every signature, field, and example below is derived from the source code and from the tests that exercise it.
3
+ This document is the authoritative reference for the public API of petfishFramework v0.4.2. Every signature, field, and example below is derived from the source code and from the tests that exercise it.
4
4
 
5
5
  ## 1. Overview
6
6