petfishframework 0.4.1__tar.gz → 0.4.5__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.
- petfishframework-0.4.5/.gitattributes +11 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/.github/workflows/ci.yml +12 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/CHANGELOG.md +52 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/PKG-INFO +8 -2
- {petfishframework-0.4.1 → petfishframework-0.4.5}/README.md +7 -1
- petfishframework-0.4.5/docs/api-stability.md +88 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/api.md +733 -1
- petfishframework-0.4.5/docs/feedbacks/petfishframework_v0_4_1_review.md +704 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/skeleton-completeness-checklist.md +34 -23
- {petfishframework-0.4.1 → petfishframework-0.4.5}/pyproject.toml +1 -1
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/__init__.py +1 -1
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/environment.py +6 -2
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/observability/siem_sink.py +12 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/permissions/__init__.py +5 -5
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/permissions/model.py +1 -1
- {petfishframework-0.4.1 → petfishframework-0.4.5}/uv.lock +1 -1
- {petfishframework-0.4.1 → petfishframework-0.4.5}/.env.example +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/.github/workflows/publish.yml +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/.gitignore +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/.sisyphus/plans/v0.1.6-plan.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/.sisyphus/plans/v0.2.0-plan.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/.sisyphus/plans/v0.3.0-plan.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/.sisyphus/plans/v0.4.0-plan.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/AGENTS.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/AGENTS.md.new +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/CONTRIBUTING.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/Dockerfile +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/LICENSE +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/SECURITY.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/conftest.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docker-compose.yml +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/architecture.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/benchmark-results.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/deployment.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/development-plan.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/development.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/enterprise-expense-demo.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_0_1_4_playground_recommendations.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_playground_report.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_production_readiness_roadmap.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_recommendations.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_v0_1_6_playground_review.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_v0_1_7_review.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_v0_1_8_review.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_v0_2_1_review.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_v0_2_2_review.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/feedbacks/archives/petfishframework_v0_3_0_review.md +0 -0
- {petfishframework-0.4.1/docs/feedbacks → petfishframework-0.4.5/docs/feedbacks/archives}/petfishframework_v0_4_0_review.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/release-checklist.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/release-protocol.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/competitor-analysis/README.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/competitor-analysis/competitor-matrix.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/competitor-analysis/market-brief.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/competitor-analysis/positioning-map.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/competitor-analysis/swot-analysis.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/literature-review/inclusion-exclusion-criteria.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/literature-review/literature-matrix.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/literature-review/literature-review.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/literature-review/search-strategy.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/research/reference-repos-absorption.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/test-results-report.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/threat-model.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/usage-guide.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/docs/validation-roadmap.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/initialization-report.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/mcp/README.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/mcp/connection-checklist.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/mcp/mcp-config.example.json +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/opencode.json +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/qa/code-review-checklist.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/qa/qa-review.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/qa/qc-gate-decision.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/qa/test-plan.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/__main__.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/config.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/__init__.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/agent.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/compiled.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/contracts.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/conversation.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/events.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/session.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/structured.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/core/types.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/credentials/__init__.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/credentials/broker.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/credentials/token.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/credentials/vault_adapter.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/mcp/__init__.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/mcp/client.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/mcp/server.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/mcp/stdio_transport.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/mcp/wrapper.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/models/__init__.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/models/anthropic.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/models/fake.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/models/openai.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/observability/__init__.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/observability/otel_sink.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/observability/sinks.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/policies/__init__.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/policies/conditions.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/policies/engine.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/policies/rule.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/policies/test_runner.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/policies/validator.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reasoning/__init__.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reasoning/lats.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reasoning/llm_plus_p.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reasoning/react.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/__init__.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/audit_report.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/cost.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/cost_report.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/pass_at_k.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/replay.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/retry.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/reliability/timeout.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/retrieval/__init__.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/retrieval/adaptive.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/retrieval/crag.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/retrieval/memory_store.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/__init__.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/agent_tool.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/base.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/calculator.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/path_planner.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/registry.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/src/petfishframework/tools/word_sorter.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tasks/backlog.md +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/integration/__init__.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/integration/test_anthropic_integration.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/integration/test_openai_integration.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/policies/enterprise-expense.tests.yaml +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_agent_tool.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_anthropic_adapter.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_api_agent_lifecycle.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_api_edge_cases.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_api_integration.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_api_public_surface.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_api_type_safety.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_async.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_audit_report_v2.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_conversation.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_credential_broker.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_credential_integration.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_degrade.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_degrade_failclosed.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_enterprise_demo.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_m2_m3_m4.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_main_entry.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_mcp.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_openai_adapter.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_otel_sink.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_pass_at_k.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_permission_semantics.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_quickstart_smoke.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_replay.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_replay_rerun.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_replay_resume.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_retrieval.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_retry.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_siem_export.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_skeleton.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_stdio_transport.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_streaming.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_structured.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_tool_registry.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_v016_semantics.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_v018.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_v019.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_v2_interface_compatibility.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_v2_lats.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_v2_llm_plus_p.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_vault_adapter.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_yaml_policy.py +0 -0
- {petfishframework-0.4.1 → petfishframework-0.4.5}/tests/test_yaml_policy_suite.py +0 -0
|
@@ -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
|
|
@@ -2,6 +2,58 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to petfishFramework will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.4.5] — 2026-07-08
|
|
6
|
+
|
|
7
|
+
### v0.5 Readiness: API Documentation + Technical Debt Cleanup
|
|
8
|
+
|
|
9
|
+
#### API Reference Overhaul (28 APIs documented)
|
|
10
|
+
- `docs/api.md` expanded from 1471 to 2203 lines (+50%)
|
|
11
|
+
- All 28 previously-undocumented public APIs now have full signatures, parameters, and examples:
|
|
12
|
+
- **Observability**: OTelSink, SIEMSink (with redact_keys boundary note)
|
|
13
|
+
- **Reliability**: RetryPolicy, with_retry, with_retry_async, RetryableError, RetryModelAdapter, retry_model_adapter, TimeoutPolicy, with_timeout, OperationTimedOut, RerunEnvironment, RerunResult, CostReport
|
|
14
|
+
- **Configuration**: FrameworkConfig (from_env, from_dict)
|
|
15
|
+
- **Conversation Memory**: ConversationStore, InMemoryConversationStore
|
|
16
|
+
- **Structured Output**: StructuredResult, parse_json, parse_structured
|
|
17
|
+
- **Tools**: AgentAsTool, WordSorter
|
|
18
|
+
- **Models**: AnthropicModel, AsyncFakeModel
|
|
19
|
+
- **Policies**: PolicyRule, load_policy
|
|
20
|
+
- **MCP**: serve_as_mcp (marked as v0.5 stub)
|
|
21
|
+
|
|
22
|
+
#### API Stability Policy
|
|
23
|
+
- New `docs/api-stability.md` classifies all public APIs into Stable / Experimental / Internal tiers
|
|
24
|
+
- Documents deprecation process and v1.0 freeze criteria
|
|
25
|
+
|
|
26
|
+
#### Code Cleanup (stale markers removed)
|
|
27
|
+
- `permissions/__init__.py`: docstring updated — CredentialBroker is implemented, not TODO
|
|
28
|
+
- `permissions/model.py`: DefaultAllowPolicy comment clarified (allow-all by design, not a skeleton TODO)
|
|
29
|
+
- `core/environment.py`: DEGRADE docstring fixed — tool switching IS implemented (was incorrectly marked "future work"); visibility gate clarified as v0.5 planned
|
|
30
|
+
- `docs/skeleton-completeness-checklist.md`: comprehensively updated to reflect v0.4.5 state (RESUME/RERUN, Pass^k, CredentialBroker, OTel/SIEM, retry/timeout all marked ✅)
|
|
31
|
+
|
|
32
|
+
## [0.4.2] — 2026-07-08
|
|
33
|
+
|
|
34
|
+
### CI & Deployment Hardening
|
|
35
|
+
|
|
36
|
+
#### Docker Smoke Test in CI
|
|
37
|
+
- New `docker-smoke` job in CI workflow: builds image and runs container
|
|
38
|
+
- Catches `__main__.py` / ENTRYPOINT regressions before release
|
|
39
|
+
|
|
40
|
+
#### Line Ending Normalization
|
|
41
|
+
- Added `.gitattributes` with `* text=auto eol=lf`
|
|
42
|
+
- All text files now use LF consistently across platforms
|
|
43
|
+
|
|
44
|
+
#### SIEMSink Documentation
|
|
45
|
+
- Docstring now explicitly states key-based redaction is not a DLP engine
|
|
46
|
+
- Clarifies that value-pattern secrets (sk-..., JWTs) are not detected
|
|
47
|
+
- Documents default redact_keys and nesting behavior
|
|
48
|
+
|
|
49
|
+
#### Observability Example
|
|
50
|
+
- New `examples/06_observability.py`: ListSink, ConsoleSink, SIEMSink, OTelSink demo
|
|
51
|
+
- Shows correct sink attachment via `session.events.subscribe()`
|
|
52
|
+
- Demonstrates custom `redact_keys` with nested field redaction
|
|
53
|
+
|
|
54
|
+
#### README Fix
|
|
55
|
+
- Observability example corrected: uses `session.events.subscribe()` instead of non-existent `event_sinks=` parameter
|
|
56
|
+
|
|
5
57
|
## [0.4.1] — 2026-07-08
|
|
6
58
|
|
|
7
59
|
### Review Fix Patch
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: petfishframework
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.5
|
|
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
|
|
@@ -262,7 +262,13 @@ siem_sink = SIEMSink(output_path="audit.jsonl")
|
|
|
262
262
|
# Credentials auto-redacted; configure additional secret fields:
|
|
263
263
|
# siem_sink = SIEMSink(output_path="audit.jsonl", redact_keys=("api_key", "password"))
|
|
264
264
|
|
|
265
|
-
agent = Agent(model=model, reasoning=ReAct(), tools=tools
|
|
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()
|
|
266
272
|
```
|
|
267
273
|
|
|
268
274
|
## Roadmap
|
|
@@ -227,7 +227,13 @@ siem_sink = SIEMSink(output_path="audit.jsonl")
|
|
|
227
227
|
# Credentials auto-redacted; configure additional secret fields:
|
|
228
228
|
# siem_sink = SIEMSink(output_path="audit.jsonl", redact_keys=("api_key", "password"))
|
|
229
229
|
|
|
230
|
-
agent = Agent(model=model, reasoning=ReAct(), tools=tools
|
|
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()
|
|
231
237
|
```
|
|
232
238
|
|
|
233
239
|
## Roadmap
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# API Stability Policy
|
|
2
|
+
|
|
3
|
+
> Effective: v0.4.5
|
|
4
|
+
> Goal: Help users understand which APIs are safe to depend on before v1.0.
|
|
5
|
+
|
|
6
|
+
## Stability Tiers
|
|
7
|
+
|
|
8
|
+
| Tier | Meaning | Breaking changes | Versioning |
|
|
9
|
+
|---|---|---|---|
|
|
10
|
+
| **Stable** | API signature and semantics will not change before v1.0 without a deprecation cycle (min 1 minor version). | Only for security fixes. | Patch (0.4.x) |
|
|
11
|
+
| **Experimental** | API exists and works, but may change signature or semantics in the next minor version. | Allowed with CHANGELOG note. | Minor (0.x.0) |
|
|
12
|
+
| **Internal** | Used by the framework internally. May change or be removed without notice. | No guarantees. | Any |
|
|
13
|
+
|
|
14
|
+
## Classification
|
|
15
|
+
|
|
16
|
+
### Stable
|
|
17
|
+
|
|
18
|
+
These APIs have been validated by 300+ tests and are used in production-facing examples:
|
|
19
|
+
|
|
20
|
+
- `Agent`, `Session` — core execution abstractions
|
|
21
|
+
- `Budget`, `BudgetExceeded` — budget enforcement
|
|
22
|
+
- `DecisionEffect` (all 6 values) — permission semantics
|
|
23
|
+
- `Subject`, `Action`, `Resource`, `AccessContext`, `Decision` — SARC model
|
|
24
|
+
- `PermissionPolicy` protocol — policy interface
|
|
25
|
+
- `DefaultAllowPolicy`, `DenyByDefaultPolicy` — built-in policies
|
|
26
|
+
- `Event`, `EventEmitter` — event infrastructure
|
|
27
|
+
- `Result`, `Task`, `Step`, `Trajectory`, `Usage` — core types
|
|
28
|
+
- `Tool` protocol, `BaseTool`, `@tool` decorator
|
|
29
|
+
- `Calculator`, `WordSorter` — reference tools
|
|
30
|
+
- `FakeModel` — testing model
|
|
31
|
+
- `ReAct` — default reasoning strategy
|
|
32
|
+
- `RuntimeEnvironment` — the chokepoint
|
|
33
|
+
- `AuditReport`, `audit_report_from_session` — audit output
|
|
34
|
+
- `CredentialBroker`, `ScopedToken` — credential governance
|
|
35
|
+
- `YamlPolicy`, `PolicyRule` — YAML policy engine
|
|
36
|
+
- `pass_at_k`, `pass_at_k_with_perturbations` — reliability metric
|
|
37
|
+
|
|
38
|
+
### Experimental
|
|
39
|
+
|
|
40
|
+
These APIs work and are tested, but their signatures or semantics may change:
|
|
41
|
+
|
|
42
|
+
- `OTelSink`, `SIEMSink` — observability sinks (redaction API may evolve)
|
|
43
|
+
- `RecordingEnvironment`, `ReplayEnvironment`, `RerunEnvironment`, `ResumableEnvironment` — replay wrappers
|
|
44
|
+
- `RerunResult` — divergence detection output format may change
|
|
45
|
+
- `RetryPolicy`, `with_retry`, `RetryModelAdapter` — retry infrastructure
|
|
46
|
+
- `TimeoutPolicy`, `with_timeout` — timeout infrastructure
|
|
47
|
+
- `VaultCredentialSource` — Vault adapter (needs real-world validation)
|
|
48
|
+
- `OpenAIModel`, `AnthropicModel` — model adapters (provider API changes)
|
|
49
|
+
- `LATS`, `LLMPlusP` — reasoning strategies (lightweight implementations)
|
|
50
|
+
- `CRAGRetriever`, `AdaptiveRetriever`, `MemoryRetriever` — retrieval (lightweight)
|
|
51
|
+
- `AgentAsTool` — multi-agent delegation
|
|
52
|
+
- `ConversationStore`, `InMemoryConversationStore` — conversation memory
|
|
53
|
+
- `StructuredResult`, `parse_json`, `parse_structured` — structured output
|
|
54
|
+
- `FrameworkConfig` — configuration system
|
|
55
|
+
- `CostReport` — cost reporting format
|
|
56
|
+
- `connect_stdio`, `MCPClient` — MCP client
|
|
57
|
+
- Policy condition matchers — YAML matcher set may expand/change
|
|
58
|
+
- `SIEMSink.redact_keys` — redaction key set may change defaults
|
|
59
|
+
|
|
60
|
+
### Internal
|
|
61
|
+
|
|
62
|
+
These are implementation details that should not be directly imported:
|
|
63
|
+
|
|
64
|
+
- `CostAccountant` — internal cost tracking (use `Result.usage` instead)
|
|
65
|
+
- `CapabilityProjection` — visibility gate (not yet enforced)
|
|
66
|
+
- `CapabilityGrant` — audit artifact type (not yet emitted)
|
|
67
|
+
- `CompiledContext`, `TaskSpec`, `MemorySlice`, `EvidenceBundle`, `OutputContract` — compiled context types
|
|
68
|
+
- `MemoryView` — memory protocol (empty stub)
|
|
69
|
+
- `serve_as_mcp` — MCP server stub (raises NotImplementedError)
|
|
70
|
+
- `pass_at_k` perturbation functions (`canonical`, `order_shuffled`, etc.) — stable interface but internal implementations
|
|
71
|
+
|
|
72
|
+
## Deprecation Process
|
|
73
|
+
|
|
74
|
+
When an API moves from Stable to deprecated:
|
|
75
|
+
|
|
76
|
+
1. Add `DeprecationWarning` in the next minor version
|
|
77
|
+
2. Document replacement in CHANGELOG
|
|
78
|
+
3. Keep the API functional for at least 1 minor version
|
|
79
|
+
4. Remove in the following minor version (or v1.0 if major)
|
|
80
|
+
|
|
81
|
+
## v1.0 Freeze Criteria
|
|
82
|
+
|
|
83
|
+
Before declaring v1.0:
|
|
84
|
+
|
|
85
|
+
- All Stable APIs have been unchanged for 2+ minor versions
|
|
86
|
+
- All Experimental APIs are reclassified as Stable or explicitly dropped
|
|
87
|
+
- Breaking changes require semver-major version bump
|
|
88
|
+
- Migration guide published for any dropped APIs
|