patchr 0.1.1__tar.gz → 0.1.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.
- {patchr-0.1.1/patchr.egg-info → patchr-0.1.2}/PKG-INFO +5 -2
- {patchr-0.1.1 → patchr-0.1.2}/README.md +3 -0
- {patchr-0.1.1 → patchr-0.1.2/patchr.egg-info}/PKG-INFO +5 -2
- {patchr-0.1.1 → patchr-0.1.2}/pyproject.toml +2 -2
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_sdk_publish_artifacts.py +5 -1
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_web_homepage.py +13 -0
- {patchr-0.1.1 → patchr-0.1.2}/LICENSE +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/apps/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/apps/api/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/apps/api/main.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/apps/benchmarks/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/apps/benchmarks/main.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/apps/sandbox/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/apps/sandbox/main.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/apps/worker/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/apps/worker/main.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/apps/worker/verify.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/patchr.egg-info/SOURCES.txt +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/patchr.egg-info/dependency_links.txt +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/patchr.egg-info/entry_points.txt +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/patchr.egg-info/requires.txt +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/patchr.egg-info/top_level.txt +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/setup.cfg +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/patchr/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/patchr/sdk/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/patchr/sdk/client.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/agents/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/agents/registry.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/api/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/api/service.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/audit/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/audit/activity.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/audit/observability.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/audit/verification/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/audit/verification/ledger.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/benchmarks/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/benchmarks/local.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/config.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/handshake.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/integration.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/openapi.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/protocol_map.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/routes.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/schema_catalog.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/schemas.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/core/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/core/models.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/core/router.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/core/runtime.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/core/state_machine.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/bridge/HostRun.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/bridge/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/bridge/engine.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/hunt/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/hunt/engine.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/hunt/models.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/pay/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/pay/adapters.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/pay/engine.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/pay/models.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/proxy/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/proxy/engine.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/resolve/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/resolve/engine.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/orchestrator/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/orchestrator/engine.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/portals/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/portals/templates.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/a2a/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/a2a/client.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/a2a/envelope.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/mcp/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/mcp/client.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/mcp/contract.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/mcp/server.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/sandbox/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/sandbox/midnight_arbitrage.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/sandbox/models.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/sdk/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/sdk/client.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/sdk/external.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/security/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/security/auth.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/security/config_validator.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/security/policy.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/security/ratelimit.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/security/secrets.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/adapters/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/adapters/reddit.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/adapters/shopify.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/adapters/web.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/disambiguation.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/intake.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/models.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/rules.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/scoring.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/agents.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/cases.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/channels.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/connectors.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/envelopes.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/escrows.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/events.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/keyspace.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/mandates.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/portals.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/postgres.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/providers.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/proxy.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/receipts.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/signals.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/tasks.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/tools/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/tools/shared.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/verification/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/verification/rollout.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/workflows/__init__.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/src/picux/workflows/templates.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_a2a_envelope_durability.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_a2a_protocol.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_agent_registry.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_audit_verification.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_benchmarks.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_bridge_connectors.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_bridge_preflight.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_bridge_ready_connectors.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_brief_contract_parity.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_case_channel_portal_workflows.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_community_signal_harness.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_escrow_durability.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_fastapi_contract_parity.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_hosted_adapters.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_hunt_domain.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_integration_events.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_integration_handshake.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_integration_manifest.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_mandate_durability.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_mcp_endpoint.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_midnight_arbitrage_sandbox.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_orchestrator_run.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_orchestrator_stream_progress.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_pay_domain.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_pay_machine_contracts.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_phase8_verification.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_policy_enforcement_runtime.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_protocol_contracts.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_proxy_contract.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_receipt_export.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_resolve_attachment_contact_journey.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_resolve_bridge_domains.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_resolve_tv_journey.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_scaffold.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_schema_catalog.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_sdk_client_scenarios.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_sdk_external_client.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_secret_references.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_security_policy.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_shared_tools.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_solana_escrow_ci.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_status_security.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_storage_audit.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_task_lifecycle.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_transport_auth.py +0 -0
- {patchr-0.1.1 → patchr-0.1.2}/tests/test_workflow_templates.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: patchr
|
|
3
|
-
Version: 0.1.
|
|
4
|
-
Summary: Patchr
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.
|
|
5
5
|
Author: Patchr Core Team
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
7
|
Project-URL: Homepage, https://patchr.co
|
|
@@ -34,6 +34,8 @@ Dynamic: license-file
|
|
|
34
34
|
|
|
35
35
|
# Patchr
|
|
36
36
|
|
|
37
|
+
Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.
|
|
38
|
+
|
|
37
39
|
Patchr is an SDK and hosted API for running agent workflows that need source-bound search, claim preparation, customer-service handoff, human calls, and settlement coordination.
|
|
38
40
|
|
|
39
41
|
Use it when your app needs to turn a user request such as "find a mechanic in Lekki", "prepare a damage claim", or "dispute this ticket" into a routed workflow with auditable JSON results and streaming status messages.
|
|
@@ -194,6 +196,7 @@ patchr.nlpTool(payload)
|
|
|
194
196
|
## More
|
|
195
197
|
|
|
196
198
|
- Hosted API reference: https://patchr.co/api-reference
|
|
199
|
+
- Control plane: https://patchr.co/control-plane
|
|
197
200
|
- Developer sandbox: https://patchr.co/sandbox
|
|
198
201
|
- Python package: https://pypi.org/project/patchr/
|
|
199
202
|
- Node package: https://www.npmjs.com/package/@patchr-core/sdk
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Patchr
|
|
2
2
|
|
|
3
|
+
Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.
|
|
4
|
+
|
|
3
5
|
Patchr is an SDK and hosted API for running agent workflows that need source-bound search, claim preparation, customer-service handoff, human calls, and settlement coordination.
|
|
4
6
|
|
|
5
7
|
Use it when your app needs to turn a user request such as "find a mechanic in Lekki", "prepare a damage claim", or "dispute this ticket" into a routed workflow with auditable JSON results and streaming status messages.
|
|
@@ -160,6 +162,7 @@ patchr.nlpTool(payload)
|
|
|
160
162
|
## More
|
|
161
163
|
|
|
162
164
|
- Hosted API reference: https://patchr.co/api-reference
|
|
165
|
+
- Control plane: https://patchr.co/control-plane
|
|
163
166
|
- Developer sandbox: https://patchr.co/sandbox
|
|
164
167
|
- Python package: https://pypi.org/project/patchr/
|
|
165
168
|
- Node package: https://www.npmjs.com/package/@patchr-core/sdk
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: patchr
|
|
3
|
-
Version: 0.1.
|
|
4
|
-
Summary: Patchr
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.
|
|
5
5
|
Author: Patchr Core Team
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
7
|
Project-URL: Homepage, https://patchr.co
|
|
@@ -34,6 +34,8 @@ Dynamic: license-file
|
|
|
34
34
|
|
|
35
35
|
# Patchr
|
|
36
36
|
|
|
37
|
+
Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.
|
|
38
|
+
|
|
37
39
|
Patchr is an SDK and hosted API for running agent workflows that need source-bound search, claim preparation, customer-service handoff, human calls, and settlement coordination.
|
|
38
40
|
|
|
39
41
|
Use it when your app needs to turn a user request such as "find a mechanic in Lekki", "prepare a damage claim", or "dispute this ticket" into a routed workflow with auditable JSON results and streaming status messages.
|
|
@@ -194,6 +196,7 @@ patchr.nlpTool(payload)
|
|
|
194
196
|
## More
|
|
195
197
|
|
|
196
198
|
- Hosted API reference: https://patchr.co/api-reference
|
|
199
|
+
- Control plane: https://patchr.co/control-plane
|
|
197
200
|
- Developer sandbox: https://patchr.co/sandbox
|
|
198
201
|
- Python package: https://pypi.org/project/patchr/
|
|
199
202
|
- Node package: https://www.npmjs.com/package/@patchr-core/sdk
|
|
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "patchr"
|
|
7
|
-
version = "0.1.
|
|
8
|
-
description = "Patchr
|
|
7
|
+
version = "0.1.2"
|
|
8
|
+
description = "Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
11
11
|
authors = [
|
|
@@ -16,7 +16,7 @@ class SdkPublishArtifactsTest(unittest.TestCase):
|
|
|
16
16
|
self.assertIn("https://api.patchr.co", init)
|
|
17
17
|
self.assertIn("PatchrApiError", init)
|
|
18
18
|
self.assertIn('name = "patchr"', pyproject)
|
|
19
|
-
self.assertIn('version = "0.1.
|
|
19
|
+
self.assertIn('version = "0.1.2"', pyproject)
|
|
20
20
|
self.assertIn('"patchr*"', pyproject)
|
|
21
21
|
|
|
22
22
|
def test_node_sdk_package_is_publishable(self) -> None:
|
|
@@ -43,6 +43,10 @@ class SdkPublishArtifactsTest(unittest.TestCase):
|
|
|
43
43
|
java = (ROOT / "packages/java-sdk/README.md").read_text()
|
|
44
44
|
|
|
45
45
|
for readme in (root, node, java):
|
|
46
|
+
self.assertIn(
|
|
47
|
+
"Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.",
|
|
48
|
+
readme,
|
|
49
|
+
)
|
|
46
50
|
self.assertIn("Quick Start", readme)
|
|
47
51
|
self.assertIn("PATCHR_API_TOKEN", readme)
|
|
48
52
|
self.assertNotIn("docs/developers/sdk-scenarios.md", readme)
|
|
@@ -29,6 +29,7 @@ class WebHomepageTest(unittest.TestCase):
|
|
|
29
29
|
self.assertIn("/v1/protocol-map", page)
|
|
30
30
|
self.assertIn("/v1/manifest", page)
|
|
31
31
|
self.assertIn("/security", nav)
|
|
32
|
+
self.assertIn("/control-plane", nav)
|
|
32
33
|
self.assertIn("findBestFit", page)
|
|
33
34
|
self.assertIn("auditDisputedClaim", page)
|
|
34
35
|
self.assertIn("coordinateHumanProcess", page)
|
|
@@ -49,6 +50,18 @@ class WebHomepageTest(unittest.TestCase):
|
|
|
49
50
|
self.assertIn("top-full z-50 w-[34rem] pt-3", nav)
|
|
50
51
|
self.assertNotIn("top-full z-50 mt-3", nav)
|
|
51
52
|
|
|
53
|
+
def test_control_plane_page_is_patchr_branded(self) -> None:
|
|
54
|
+
page = (ROOT / "apps/web/app/control-plane/page.tsx").read_text()
|
|
55
|
+
self.assertIn("Patchr Control Plane", page)
|
|
56
|
+
self.assertIn(
|
|
57
|
+
"Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.",
|
|
58
|
+
page,
|
|
59
|
+
)
|
|
60
|
+
self.assertIn("ProtocolCanvas", page)
|
|
61
|
+
self.assertIn("/dashboard", page)
|
|
62
|
+
self.assertIn("/api-reference", page)
|
|
63
|
+
self.assertIn("Streaming handoff events", page)
|
|
64
|
+
|
|
52
65
|
def test_signup_page_supports_compact_auth_options(self) -> None:
|
|
53
66
|
page = (ROOT / "apps/web/app/signup/page.tsx").read_text()
|
|
54
67
|
form = (ROOT / "apps/web/app/signup/signup-form.tsx").read_text()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|