aoa-demo 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aoa_demo-1.0.0/.gitignore +93 -0
- aoa_demo-1.0.0/CHANGELOG.md +23 -0
- aoa_demo-1.0.0/PKG-INFO +30 -0
- aoa_demo-1.0.0/README.md +11 -0
- aoa_demo-1.0.0/pyproject.toml +48 -0
- aoa_demo-1.0.0/src/aoa/demo/__init__.py +36 -0
- aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/README.md +286 -0
- aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/__init__.py +61 -0
- aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/actions/__init__.py +43 -0
- aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/actions/create_order.py +125 -0
- aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/actions/get_order.py +97 -0
- aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/actions/ping.py +66 -0
- aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/app_fastapi_service.py +121 -0
- aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/app_mcp_service.py +112 -0
- aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/infrastructure.py +54 -0
- aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/orders_domain.py +11 -0
- aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/system_domain.py +11 -0
- aoa_demo-1.0.0/src/aoa/demo/model/__init__.py +19 -0
- aoa_demo-1.0.0/src/aoa/demo/model/actions/__init__.py +6 -0
- aoa_demo-1.0.0/src/aoa/demo/model/actions/get_example_model_graph_json_action.py +46 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/__init__.py +6 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/dependencies/__init__.py +4 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/domain.py +9 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/__init__.py +59 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/an_dense_lifecycle.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_aggregate_sketch_stub.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_canonical_telemetry_row.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_dedup_bloom_row.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_er_cycle_quad_stub.py +139 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_ingress_batch.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_mesh_canonical_sampling.py +45 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_mesh_dedup_dimension.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_mesh_rollup_privacy.py +44 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_metric_rollup_staging.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sampling_policy.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_budgeted_query_plan.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_data_quality_ticket.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_derived_metric_fence.py +36 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_dimension_slice_stub.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_experiment_overlay.py +37 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_geo_shard_hint.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_privacy_budget_slice.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_replay_watermark_stub.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_time_bucket_mapper.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_user_hash_salt_stub.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/analytics/resources/__init__.py +4 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/__init__.py +6 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/dependencies/__init__.py +4 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/domain.py +12 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/__init__.py +82 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_actor_duty_coupling.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_campaign_wave_banner.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_delegated_work_ticket.py +59 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_duty_privilege_bridge.py +47 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_evidence_carrier_stub.py +37 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_execution_attempt_ticket.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_expectation_catalog_stub.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_expectation_outline_node.py +47 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_facility_actor.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_instruction_expectation_anchor.py +49 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_lifecycle.py +18 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_portfolio_lane_stub.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_portfolio_workspace_coupler.py +44 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_reference_axes.py +137 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_regulated_expectation_row.py +54 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_scenario_instruction_line.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_scenario_sheet.py +36 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_wave_execution_slot.py +47 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_wave_seat_coupling.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_workspace_program_stub.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_workspace_seat_grant.py +44 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/__init__.py +13 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/actions/__init__.py +29 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/actions/credit_memo_preview.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/actions/dunning_schedule.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/actions/invoice_settle.py +150 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/actions/refund_quote.py +56 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/dependencies/__init__.py +5 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/domain.py +9 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/__init__.py +88 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/arbitration_brief_stub.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_canonical_row_artifact.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_dense_lifecycle.py +26 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_file_ingest_manifest.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_mesh_chargeback_ingest.py +43 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_mesh_parse_interchange.py +43 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_multi_lifecycle_table_entities.py +151 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_parse_pass.py +54 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_payout_plan.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_acquirer_integrity.py +37 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_cash_apply_hint.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_duplicate_ledger.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_fee_schedule_ptr.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_fx_residual.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_interchange_slice.py +38 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_ledger_mirror_offset.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_narrative_correction.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_profit_center_slice.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_regulatory_ptr.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_ripple_correction.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_tax_remit_stub.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sweep_instruction.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/chargeback_ticket.py +55 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/funding_window_hint.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/payment_event_log.py +24 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/payment_lifecycle.py +20 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/retrieval_evidence_bundle.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/plugins/__init__.py +10 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/plugins/after_capture_plugin.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/plugins/global_finish_plugin.py +21 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/plugins/unhandled_error_plugin.py +21 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/resources/__init__.py +17 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/resources/ledger_archive.py +19 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/resources/payment_gateway.py +22 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/resources/read_replica.py +27 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/resources/tax_quote.py +19 -0
- aoa_demo-1.0.0/src/aoa/demo/model/billing/resources/warehouse.py +27 -0
- aoa_demo-1.0.0/src/aoa/demo/model/build.py +77 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/__init__.py +10 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/actions/__init__.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/actions/browse.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/actions/category_list.py +56 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/actions/import_sku_stub.py +33 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/actions/price_snapshot.py +33 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/actions/product_enrichment.py +142 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/dependencies/__init__.py +5 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/domain.py +9 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/__init__.py +46 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_acquisition_channel_ledger.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_audience_segment_glue.py +45 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_availability_projection.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_bridge_price_acquisition.py +44 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_bridge_shelf_bundle.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_bundle_cardinality_rule.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_conversion_attribution_stub.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_dense_lifecycle.py +20 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_er_cycle_triangle_stub.py +131 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_merch_copy_variant.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_price_ribbon_snapshot.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_product_lifecycle.py +20 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_regulatory_label_pack.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_search_boost_weight.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_shelf_placement_hint.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_touch_moment.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/product_row.py +21 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/plugins/__init__.py +10 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/plugins/after_enrich_plugin.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/plugins/global_finish_plugin.py +21 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/plugins/unhandled_error_plugin.py +21 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/resources/__init__.py +14 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/resources/index_sync.py +19 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/resources/object_store.py +27 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/resources/pricing_feed.py +19 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog/resources/search_sidecar.py +27 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/__init__.py +6 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/actions/__init__.py +31 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/actions/custody_workbench_merge_action.py +45 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/actions/ledger_posting_pulse_action.py +38 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/actions/lineage_inspect_action.py +31 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/actions/register_snapshot_peek_action.py +41 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/catalog_custody_domain.py +13 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/catalog_officer_role.py +13 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/custody_access_steward_role.py +15 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/entities/__init__.py +9 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/entities/custody_audit_event_entity.py +28 -0
- aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/entities/regulated_stock_keeping_unit_row_entity.py +18 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/__init__.py +6 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/dependencies/__init__.py +4 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/domain.py +12 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/__init__.py +40 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_care_site_unit.py +28 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_consumable_sku_row.py +45 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_geographic_anchor.py +28 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_inbound_shipment_ticket.py +53 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_inbound_transport_binding.py +45 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_lifecycle.py +18 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_material_anchor.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_outbound_parcel_line.py +45 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_outbound_parcel_wave.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_ownership_anchor.py +28 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_packing_anchor.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_partner_hub.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_partner_org_projection.py +45 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_partner_person_projection.py +37 -0
- aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_transport_anchor.py +28 -0
- aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/__init__.py +4 -0
- aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/actions/__init__.py +15 -0
- aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/actions/order_wire_preview.py +60 -0
- aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/domain.py +20 -0
- aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/entities/__init__.py +14 -0
- aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/entities/projection_demo_core.py +59 -0
- aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/entities/projection_demo_lifecycle.py +30 -0
- aoa_demo-1.0.0/src/aoa/demo/model/graph_json_domain.py +13 -0
- aoa_demo-1.0.0/src/aoa/demo/model/identity/__init__.py +6 -0
- aoa_demo-1.0.0/src/aoa/demo/model/identity/dependencies/__init__.py +4 -0
- aoa_demo-1.0.0/src/aoa/demo/model/identity/domain.py +9 -0
- aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/__init__.py +22 -0
- aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/id_dense_lifecycle.py +18 -0
- aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_credential_merge.py +50 -0
- aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_credential_rotation_stub.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_email_factor.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_federated_linkage.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_org_binding_stub.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_person_hub.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_phone_factor.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/identity/resources/__init__.py +4 -0
- aoa_demo-1.0.0/src/aoa/demo/model/interchange_demo_coordinator.py +95 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/__init__.py +6 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/dependencies/__init__.py +4 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/domain.py +9 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/__init__.py +33 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_bin_coordinate_stub.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_crossdock_staging.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_dense_lifecycle.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_disposition_advice.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_facility_warehouse.py +27 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_lot_age_bucket.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_lot_freeze_flag.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_lot_quality_hold.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_lot_snapshot_ledger.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_mesh_bin_age.py +45 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_mesh_facility_crossdock.py +44 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_recall_signal.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_storage_aisle_row.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/inventory/resources/__init__.py +4 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/__init__.py +6 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/__init__.py +26 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/cross_dock_relay_adapter_action.py +32 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/facility_corridor_relay_first_leg_action.py +28 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/facility_corridor_relay_second_leg_action.py +36 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/facility_corridor_relay_third_leg_action.py +36 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/facility_handoff_origin_action.py +32 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/marshalling_yard_facility_concourse_action.py +54 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/dock_floor_associate_role.py +15 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/entities/__init__.py +7 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/entities/facility_handoff_manifest_entity.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/entities/freight_waypoint_leg_entity.py +17 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/freight_network_director_role.py +13 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/gate_dispatch_lead_role.py +15 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/hub_terminal_director_role.py +15 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/logistics_mesh_domain.py +13 -0
- aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/yard_operations_specialist_role.py +15 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/__init__.py +15 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/actions/__init__.py +29 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/actions/drain_dlq_stub.py +33 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/actions/publish_transactional.py +155 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/actions/queue_depth_probe.py +56 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/actions/template_render_stub.py +35 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/dependencies/__init__.py +5 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/domain.py +9 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/__init__.py +49 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_batching_fence.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_courier_attempt_ledger.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_dedupe_correlation.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_dense_lifecycle.py +26 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_dispatcher_cursor_shard.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_downstream_watermark.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_er_cycle_triangle_stub.py +122 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_fanout_replay_cursor.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_hop_latency_sample.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_mesh_courier_replay.py +44 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_mesh_outbox_webhook.py +44 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_recipient_device_seen.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_replay_ticket.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_throttle_lease.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_webhook_ingress_receipt.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_webhook_signature_envelope.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/outbox_lifecycle.py +20 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/outbox_message.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/plugins/__init__.py +10 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/plugins/after_send_plugin.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/plugins/global_finish_plugin.py +21 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/plugins/unhandled_error_plugin.py +21 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/resources/__init__.py +17 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/resources/dlq_store.py +27 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/resources/notification_gateway.py +22 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/resources/outbox_primary.py +27 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/resources/smtp_transport.py +19 -0
- aoa_demo-1.0.0/src/aoa/demo/model/messaging/resources/webhook_fanout.py +19 -0
- aoa_demo-1.0.0/src/aoa/demo/model/roles/__init__.py +8 -0
- aoa_demo-1.0.0/src/aoa/demo/model/roles/editor.py +9 -0
- aoa_demo-1.0.0/src/aoa/demo/model/roles/legacy.py +9 -0
- aoa_demo-1.0.0/src/aoa/demo/model/roles/viewer.py +11 -0
- aoa_demo-1.0.0/src/aoa/demo/model/services/__init__.py +6 -0
- aoa_demo-1.0.0/src/aoa/demo/model/services/graph_json_service.py +33 -0
- aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/__init__.py +6 -0
- aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/actions/__init__.py +18 -0
- aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/actions/atlantic_desk_liquidity_fork_action.py +28 -0
- aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/actions/bi_desk_liquidity_bridge_action.py +53 -0
- aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/actions/liquidity_platform_sweep_action.py +38 -0
- aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/actions/pacific_desk_liquidity_fork_action.py +28 -0
- aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/arbitration_judge_role.py +13 -0
- aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/clearing_charter_steward_role.py +15 -0
- aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/entities/__init__.py +7 -0
- aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/entities/clearing_instruction_row_entity.py +17 -0
- aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/entities/desk_lane_exposure_marker_entity.py +26 -0
- aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/regional_desk_lead_role.py +15 -0
- aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/settlement_desks_domain.py +13 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/__init__.py +7 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/actions/__init__.py +59 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/actions/cart_abandon_stub.py +33 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/actions/checkout_submit.py +136 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/actions/inventory_hold_stub.py +33 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/actions/loyalty_points_stub.py +33 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/actions/order_lookup.py +53 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/actions/ping.py +60 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/actions/role_migration.py +36 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/actions/store_read.py +48 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/actions/store_read_use_case_demo.py +53 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/dependencies/__init__.py +7 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/__init__.py +104 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/audit_log_entry.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/audit_log_entry_lifecycle.py +22 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/customer_account.py +4 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/customer_account_lifecycle.py +22 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/discount_application.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/fulfillment_task.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/invoice_record.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/line_item.py +4 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/order_record.py +4 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/payment_authorization.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/payment_capture.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/refund_request.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/return_request.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/sales_core.py +124 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/sales_order_lifecycle.py +39 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/sales_order_line_lifecycle.py +22 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/shipment_parcel.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/shipment_tracking_event.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_cart_merge_trace.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_dual_entry_lifecycle.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_er_cycle_ping_pong.py +86 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_backorder_eta.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_kit_explosion.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_pick_variance.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_serial_trace.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_shipment_piece.py +41 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_substitution_hist.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_warranty_offer.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_loyalty_earn_projection.py +36 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_mesh_customer_order_affinity.py +43 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_mesh_invoice_line_tie.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_mesh_line_parcel_pick.py +42 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_mesh_order_invoice_bridge.py +45 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_mesh_order_parcel_handoff.py +45 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_address_verification.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_channel_attribution.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_compliance_review.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_deposit_allocation.py +37 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_dual_entry_origin.py +39 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_fraud_challenge.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_geo_fence.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_gift_wrap.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_packing_slip.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_revenue_schedule.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_risk_score.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_shipment_estimate.py +36 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_split_bill.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_tax_jurisdiction.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/entities/tax_line.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/marketplace_operations_domain.py +13 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/plugins/__init__.py +10 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/plugins/after_charge_plugin.py +25 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/plugins/global_finish_plugin.py +21 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/plugins/unhandled_error_plugin.py +23 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/resources/__init__.py +5 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/resources/cache.py +27 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/resources/db.py +27 -0
- aoa_demo-1.0.0/src/aoa/demo/model/store/store_domain.py +11 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/__init__.py +6 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/actions/__init__.py +47 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/actions/depend_cross_domain_action.py +43 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/actions/depend_cross_domain_include_action.py +52 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/actions/depend_same_domain_action.py +43 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/actions/depend_same_domain_include_action.py +52 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/actions/sla_breach_stub.py +33 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/actions/support_ping.py +58 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/actions/ticket_stub.py +33 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/entities/__init__.py +18 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/entities/support_comment_thread_stub.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/entities/support_mesh_ticket_observer.py +45 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/entities/support_participant_row.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/entities/support_simple_lifecycle.py +20 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/entities/support_sla_interval.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/entities/support_ticket_aggregate.py +34 -0
- aoa_demo-1.0.0/src/aoa/demo/model/support/support_domain.py +9 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/__init__.py +6 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/__init__.py +28 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/cross_edge_observability_portico_action.py +53 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/edge_facility_downlink_brief_action.py +32 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/stream_ingress_anchor_action.py +32 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/stream_normalization_pass_one_action.py +28 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/stream_normalization_pass_three_action.py +36 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/stream_normalization_pass_two_action.py +36 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/collector_channel_owner_role.py +15 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/correlation_lane_owner_role.py +15 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/entities/__init__.py +9 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/entities/routed_observation_slice_entity.py +27 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/entities/telemetry_ingest_envelope_entity.py +17 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/incident_observability_director_role.py +13 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/normalization_lane_owner_role.py +15 -0
- aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/telemetry_pipeline_domain.py +13 -0
- aoa_demo-1.0.0/src/aoa/demo/py.typed +0 -0
- aoa_demo-1.0.0/tests/__init__.py +2 -0
- aoa_demo-1.0.0/tests/model/__init__.py +0 -0
- aoa_demo-1.0.0/tests/model/conftest.py +15 -0
- aoa_demo-1.0.0/tests/model/test_entity_projection_samples.py +100 -0
- aoa_demo-1.0.0/tests/model/test_examples_generalization_edges.py +53 -0
- aoa_demo-1.0.0/tests/model/test_sample_graph_json_fields.py +59 -0
- aoa_demo-1.0.0/tests/test_depends_use_case_modes.py +97 -0
- aoa_demo-1.0.0/tests/test_examples_zone_placeholder.py +6 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# ============================================================================
|
|
2
|
+
# Python
|
|
3
|
+
# ============================================================================
|
|
4
|
+
__pycache__/
|
|
5
|
+
*.py[cod]
|
|
6
|
+
*$py.class
|
|
7
|
+
*.so
|
|
8
|
+
.Python
|
|
9
|
+
|
|
10
|
+
# ============================================================================
|
|
11
|
+
# Virtual environments
|
|
12
|
+
# ============================================================================
|
|
13
|
+
.venv/
|
|
14
|
+
venv/
|
|
15
|
+
ENV/
|
|
16
|
+
env/
|
|
17
|
+
|
|
18
|
+
# ============================================================================
|
|
19
|
+
# Distribution / packaging
|
|
20
|
+
# ============================================================================
|
|
21
|
+
build/
|
|
22
|
+
dist/
|
|
23
|
+
*.egg-info/
|
|
24
|
+
*.egg
|
|
25
|
+
.eggs/
|
|
26
|
+
wheels/
|
|
27
|
+
|
|
28
|
+
# ============================================================================
|
|
29
|
+
# Testing
|
|
30
|
+
# ============================================================================
|
|
31
|
+
.pytest_cache/
|
|
32
|
+
.coverage
|
|
33
|
+
.coverage.*
|
|
34
|
+
htmlcov/
|
|
35
|
+
*.cover
|
|
36
|
+
.hypothesis/
|
|
37
|
+
.tox/
|
|
38
|
+
.nox/
|
|
39
|
+
|
|
40
|
+
# ============================================================================
|
|
41
|
+
# Type checking
|
|
42
|
+
# ============================================================================
|
|
43
|
+
.mypy_cache/
|
|
44
|
+
.dmypy.json
|
|
45
|
+
dmypy.json
|
|
46
|
+
.pyre/
|
|
47
|
+
.pytype/
|
|
48
|
+
|
|
49
|
+
# ============================================================================
|
|
50
|
+
# Node (Maxitor web client — source lives in git; node_modules stays local only)
|
|
51
|
+
# ============================================================================
|
|
52
|
+
packages/aoa-maxitor/client/node_modules/
|
|
53
|
+
packages/aoa-maxitor/client/.vite/
|
|
54
|
+
|
|
55
|
+
# ============================================================================
|
|
56
|
+
# IDE
|
|
57
|
+
# ============================================================================
|
|
58
|
+
.idea/
|
|
59
|
+
.vscode/
|
|
60
|
+
*.swp
|
|
61
|
+
*.swo
|
|
62
|
+
.DS_Store
|
|
63
|
+
|
|
64
|
+
# ============================================================================
|
|
65
|
+
# Logs and temporary files
|
|
66
|
+
# ============================================================================
|
|
67
|
+
*.log
|
|
68
|
+
code_quality.log
|
|
69
|
+
*.tmp
|
|
70
|
+
*.temp
|
|
71
|
+
ocel_log.json
|
|
72
|
+
|
|
73
|
+
# ============================================================================
|
|
74
|
+
# Project specific - ARCHIVE (ваши локальные снимки)
|
|
75
|
+
# ============================================================================
|
|
76
|
+
archive/
|
|
77
|
+
*.ver
|
|
78
|
+
code.txt
|
|
79
|
+
project_structure.txt
|
|
80
|
+
|
|
81
|
+
# ============================================================================
|
|
82
|
+
# Локальные черновики (русские версии документации и примеров)
|
|
83
|
+
# ============================================================================
|
|
84
|
+
*_draft.md
|
|
85
|
+
*_draft.py
|
|
86
|
+
.ipynb_checkpoints/
|
|
87
|
+
docs/ru/
|
|
88
|
+
|
|
89
|
+
# ============================================================================
|
|
90
|
+
# НЕ ИГНОРИРУЕМ - эти файлы должны быть в git!
|
|
91
|
+
# ============================================================================
|
|
92
|
+
!.python-version
|
|
93
|
+
!uv.lock
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `aoa-demo` are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.0] – 2026-06-27
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **Package renamed `aoa-examples` → `aoa-demo`; import namespace `aoa.examples` → `aoa.demo`.** The distribution of reference/demo domain models (`model/billing`, `model/inventory`, `model/store`, …) and the FastAPI + MCP showcase services is now `aoa-demo`. Install `aoa-demo` and update imports (`from aoa.examples.model… ` → `from aoa.demo.model…`). The rename removes the naming collision with the root `examples/` tutorial scripts and makes clear the package is a library of runnable demo domains, not tutorial snippets. The undeclared `aoa-maxitor` → demo coupling was also removed: three demo-dependent `aoa-maxitor` tests were dropped so the `maxitor` package no longer references `demo` in any form. ([#83](https://github.com/bystrovmaxim/aoa/issues/83))
|
|
13
|
+
- **Test suite relocated into the package (`packages/aoa-examples/tests/`).** Example model tests moved out of the shared root `tests/examples/` — plus the clean `depends`-modes use-case test from the legacy `aoa_examples_tests/` directory — into the package's own `tests/` directory, with a per-package `[dependency-groups]` dev group and `[tool.pytest.ini_options]` (`testpaths`, `asyncio_mode`, `pythonpath`). The OCEL/pm4py coverage was moved out of this package entirely — converted into the runnable example `packages/aoa-ocel/examples/01_ocel_export.py` and covered by tests under `packages/aoa-ocel/tests/`. The root `tests/examples/` zone is now empty; the legacy `aoa_examples_tests/` directory is removed. ([#82](https://github.com/bystrovmaxim/aoa/issues/82))
|
|
14
|
+
|
|
15
|
+
### Removed
|
|
16
|
+
|
|
17
|
+
- **Store-domain OCEL export sub-feature.** The `PublishOrder*OcelAction` / `RecordOrderOcelAction` trace actions, the `build_store_ocel_machine` / `run_store_ocel_trace_batch` helpers, and `StoreOcelStoreResource` were removed from `aoa.examples.model.store`. The OCEL 2.0 export flow is now demonstrated by the self-contained runnable example `packages/aoa-ocel/examples/01_ocel_export.py` in the `aoa-ocel` package. ([#82](https://github.com/bystrovmaxim/aoa/issues/82))
|
|
18
|
+
|
|
19
|
+
## [0.1.0] – 2026-06-24
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- **Initial standalone release.** Runnable tutorial and how-to examples distributed as a separate package (`pip install aoa-examples`). Each example ships as both a plain `.py` and a Colab-ready `.ipynb` with `!pip install` cell and top-level `await`. Covers the full tutorial set (steps 00–26) plus how-to, extension, and research examples.
|
aoa_demo-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: aoa-demo
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Example FastAPI and MCP services demonstrating ActionMachine.
|
|
5
|
+
Project-URL: Homepage, https://github.com/action-machine/action-machine
|
|
6
|
+
Project-URL: Documentation, https://action-machine.readthedocs.io
|
|
7
|
+
Project-URL: Repository, https://github.com/action-machine/action-machine
|
|
8
|
+
Author: @Bystrov.Maxim
|
|
9
|
+
License: MIT
|
|
10
|
+
Requires-Python: >=3.12
|
|
11
|
+
Requires-Dist: aoa-action-machine<2.0.0,>=1.0.0a5
|
|
12
|
+
Requires-Dist: aoa-ocel>=1.0.0a0
|
|
13
|
+
Requires-Dist: pydantic<3.0,>=2.0
|
|
14
|
+
Provides-Extra: fastapi
|
|
15
|
+
Requires-Dist: aoa-fastapi-adapter>=1.0.0a0; extra == 'fastapi'
|
|
16
|
+
Provides-Extra: mcp
|
|
17
|
+
Requires-Dist: aoa-mcp-adapter>=1.0.0a0; extra == 'mcp'
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
|
|
20
|
+
<p align="center">
|
|
21
|
+
<img src="../../docs/assets/aoa-logo.png" alt="AOA" width="660"><br><br>
|
|
22
|
+
<a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.12%2B-blue?logo=python&logoColor=white" alt="Python 3.12+"></a>
|
|
23
|
+
<a href="https://github.com/bystrovmaxim/aoa"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT"></a>
|
|
24
|
+
<a href="https://github.com/bystrovmaxim/aoa/actions/workflows/ci.yml"><img src="https://github.com/bystrovmaxim/aoa/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
25
|
+
<img src="https://img.shields.io/badge/version-1.0.0-informational" alt="1.0.0">
|
|
26
|
+
</p>
|
|
27
|
+
|
|
28
|
+
# aoa-demo: Reference Services for AOA
|
|
29
|
+
|
|
30
|
+
`aoa-demo` contains two runnable reference services — a FastAPI HTTP service and an MCP server — built on the same domain model: orders, products, and customers. Both services expose the same `Action` operations over different transports, demonstrating how a single piece of business logic is published via `FastApiAdapter` for REST clients and via `McpAdapter` for AI agents without duplicating any logic. The package also serves as the integration fixture used in the AOA test suite.
|
aoa_demo-1.0.0/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="../../docs/assets/aoa-logo.png" alt="AOA" width="660"><br><br>
|
|
3
|
+
<a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.12%2B-blue?logo=python&logoColor=white" alt="Python 3.12+"></a>
|
|
4
|
+
<a href="https://github.com/bystrovmaxim/aoa"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT"></a>
|
|
5
|
+
<a href="https://github.com/bystrovmaxim/aoa/actions/workflows/ci.yml"><img src="https://github.com/bystrovmaxim/aoa/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
6
|
+
<img src="https://img.shields.io/badge/version-1.0.0-informational" alt="1.0.0">
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
# aoa-demo: Reference Services for AOA
|
|
10
|
+
|
|
11
|
+
`aoa-demo` contains two runnable reference services — a FastAPI HTTP service and an MCP server — built on the same domain model: orders, products, and customers. Both services expose the same `Action` operations over different transports, demonstrating how a single piece of business logic is published via `FastApiAdapter` for REST clients and via `McpAdapter` for AI agents without duplicating any logic. The package also serves as the integration fixture used in the AOA test suite.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# packages/aoa-demo/pyproject.toml — publishable distribution for ``aoa.demo``.
|
|
2
|
+
[build-system]
|
|
3
|
+
requires = ["hatchling"]
|
|
4
|
+
build-backend = "hatchling.build"
|
|
5
|
+
|
|
6
|
+
[project]
|
|
7
|
+
name = "aoa-demo"
|
|
8
|
+
version = "1.0.0"
|
|
9
|
+
description = "Example FastAPI and MCP services demonstrating ActionMachine."
|
|
10
|
+
readme = "README.md"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
requires-python = ">=3.12"
|
|
13
|
+
authors = [{ name = "@Bystrov.Maxim" }]
|
|
14
|
+
dependencies = [
|
|
15
|
+
"aoa-action-machine>=1.0.0a5,<2.0.0",
|
|
16
|
+
"aoa-ocel>=1.0.0a0",
|
|
17
|
+
"pydantic>=2.0,<3.0",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
[tool.uv.sources]
|
|
21
|
+
aoa-action-machine = { workspace = true }
|
|
22
|
+
aoa-fastapi-adapter = { workspace = true }
|
|
23
|
+
aoa-mcp-adapter = { workspace = true }
|
|
24
|
+
aoa-ocel = { workspace = true }
|
|
25
|
+
|
|
26
|
+
[project.optional-dependencies]
|
|
27
|
+
fastapi = [
|
|
28
|
+
"aoa-fastapi-adapter>=1.0.0a0",
|
|
29
|
+
]
|
|
30
|
+
mcp = [
|
|
31
|
+
"aoa-mcp-adapter>=1.0.0a0",
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
[project.urls]
|
|
35
|
+
Homepage = "https://github.com/action-machine/action-machine"
|
|
36
|
+
Documentation = "https://action-machine.readthedocs.io"
|
|
37
|
+
Repository = "https://github.com/action-machine/action-machine"
|
|
38
|
+
|
|
39
|
+
[tool.hatch.build.targets.wheel]
|
|
40
|
+
packages = ["src/aoa"]
|
|
41
|
+
|
|
42
|
+
[dependency-groups]
|
|
43
|
+
dev = ["pytest>=8.0", "pytest-asyncio>=0.24"]
|
|
44
|
+
|
|
45
|
+
[tool.pytest.ini_options]
|
|
46
|
+
testpaths = ["tests"]
|
|
47
|
+
asyncio_mode = "auto"
|
|
48
|
+
pythonpath = ["src"]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# packages/aoa-demo/src/aoa/demo/__init__.py
|
|
2
|
+
"""
|
|
3
|
+
Usage examples for ActionMachine.
|
|
4
|
+
|
|
5
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
6
|
+
PURPOSE
|
|
7
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
8
|
+
|
|
9
|
+
Demonstrate end-to-end wiring (e.g. FastAPI + MCP with shared actions) without
|
|
10
|
+
shipping example code inside the core ``action_machine`` package. Actions use
|
|
11
|
+
standard **Intent** mixins on ``BaseAction`` and decorators for metadata and
|
|
12
|
+
pipeline behavior. See the repository root ``README.md`` (Intent / architecture
|
|
13
|
+
sections) and ``docs/CHANGELOG.md`` for naming and API notes.
|
|
14
|
+
|
|
15
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
16
|
+
ARCHITECTURE / DATA FLOW
|
|
17
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
18
|
+
|
|
19
|
+
action_machine (library)
|
|
20
|
+
^
|
|
21
|
+
| imports only from here as a separate namespace
|
|
22
|
+
|
|
|
23
|
+
examples/ (this package)
|
|
24
|
+
|
|
|
25
|
+
+-- model/
|
|
26
|
+
| interchange + bounded-context demo domains for Maxitor
|
|
27
|
+
|
|
|
28
|
+
+-- fastapi_mcp_services/
|
|
29
|
+
| dual-transport app + shared actions
|
|
30
|
+
|
|
|
31
|
+
+-- (future example packages)
|
|
32
|
+
|
|
33
|
+
Consumers typically copy or study subpackages; the library does not depend
|
|
34
|
+
on ``examples`` at runtime.
|
|
35
|
+
|
|
36
|
+
"""
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="../../../../../../docs/assets/aoa-logo.png" alt="AOA" width="660"><br><br>
|
|
3
|
+
<a href="https://github.com/bystrovmaxim/aoa"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT"></a>
|
|
4
|
+
<a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.12%2B-blue?logo=python&logoColor=white" alt="Python 3.12+"></a>
|
|
5
|
+
<img src="https://img.shields.io/badge/extras-fastapi%20·%20mcp-lightgrey" alt="aoa-demo[fastapi,mcp]">
|
|
6
|
+
<a href="../../../../README.md"><img src="https://img.shields.io/badge/docs-aoa--examples-blue" alt="aoa-demo"></a>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
# ActionMachine — FastAPI + MCP from one codebase
|
|
10
|
+
|
|
11
|
+
This example illustrates a core ActionMachine principle: **the same Actions
|
|
12
|
+
run through any protocol adapter without modification**.
|
|
13
|
+
|
|
14
|
+
Actions inherit the standard set of **Intent** mixins from `BaseAction` and
|
|
15
|
+
declare behavior with decorators (`@meta`, `@check_roles`, aspects, dependencies).
|
|
16
|
+
The metadata graph is built when `NodeGraphCoordinator.build()` runs from those declarations —
|
|
17
|
+
see the “Key concepts: Intent” section in the root `README.md`.
|
|
18
|
+
|
|
19
|
+
Three actions (PingAction, CreateOrderAction, GetOrderAction) are defined once
|
|
20
|
+
and wired to two transports: HTTP REST API (FastAPI) and MCP tools (for AI agents).
|
|
21
|
+
|
|
22
|
+
> **Production:** do not copy `NoAuthCoordinator` from this example into production without thought.
|
|
23
|
+
> For protected APIs, replace it with your own `AuthCoordinator` and real authentication.
|
|
24
|
+
> `NoAuthCoordinator` here is an explicit “open endpoint”, for demonstration only.
|
|
25
|
+
|
|
26
|
+
## Installation
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# For the HTTP service:
|
|
30
|
+
pip install aoa-run[fastapi]
|
|
31
|
+
|
|
32
|
+
# For the MCP server:
|
|
33
|
+
pip install aoa-run[mcp]
|
|
34
|
+
|
|
35
|
+
# Both:
|
|
36
|
+
pip install aoa-run[fastapi,mcp]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Running FastAPI (HTTP)
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
uvicorn aoa.demo.fastapi_mcp_services.app_fastapi_service:app --reload
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
| URL | Description |
|
|
47
|
+
| ------------------------------------------------------------------------ | -------------- |
|
|
48
|
+
| [http://localhost:8000/docs](http://localhost:8000/docs) | Swagger UI |
|
|
49
|
+
| [http://localhost:8000/redoc](http://localhost:8000/redoc) | ReDoc |
|
|
50
|
+
| [http://localhost:8000/openapi.json](http://localhost:8000/openapi.json) | OpenAPI schema |
|
|
51
|
+
| [http://localhost:8000/health](http://localhost:8000/health) | Health check |
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
## Running MCP (AI agents)
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Via stdio (Claude Desktop, Claude Code):
|
|
58
|
+
python -m aoa.demo.fastapi_mcp_services.app_mcp_service
|
|
59
|
+
|
|
60
|
+
# Via streamable-http (MCP Inspector):
|
|
61
|
+
python -m aoa.demo.fastapi_mcp_services.app_mcp_service --transport streamable-http
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Actions (shared by both transports)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
| Action | FastAPI | MCP Tool | Description |
|
|
70
|
+
| ----------------- | ------------------------------- | --------------- | --------------- |
|
|
71
|
+
| PingAction | `GET /api/v1/ping` | `system.ping` | Liveness check |
|
|
72
|
+
| CreateOrderAction | `POST /api/v1/orders` | `orders.create` | Create an order |
|
|
73
|
+
| GetOrderAction | `GET /api/v1/orders/{order_id}` | `orders.get` | Fetch an order |
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
FastAPI also registers `GET /health → {"status": "ok"}` automatically.
|
|
77
|
+
|
|
78
|
+
### CreateOrderAction parameters
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
| Field | Type | Required | Constraints | Description |
|
|
82
|
+
| ---------- | ----- | ----------------- | ------------------ | ---------------------- |
|
|
83
|
+
| `user_id` | str | yes | min_length=1 | User ID |
|
|
84
|
+
| `amount` | float | yes | gt=0 | Order amount |
|
|
85
|
+
| `currency` | str | no (default: RUB) | pattern=^[A-Z]{3}$ | ISO 4217 currency code |
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
### Examples
|
|
89
|
+
|
|
90
|
+
**Create order (curl):**
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
curl -X POST http://localhost:8000/api/v1/orders \
|
|
94
|
+
-H "Content-Type: application/json" \
|
|
95
|
+
-d '{"user_id": "user_123", "amount": 1500.0, "currency": "RUB"}'
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Response (same shape for HTTP and MCP):**
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"order_id": "ORD-user_123-001",
|
|
103
|
+
"status": "created",
|
|
104
|
+
"total": 1500.0
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Ping:**
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
curl http://localhost:8000/api/v1/ping
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
```json
|
|
115
|
+
{"message": "pong"}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## FastAPI: automatic OpenAPI generation
|
|
121
|
+
|
|
122
|
+
The OpenAPI schema is generated from metadata already in the code:
|
|
123
|
+
|
|
124
|
+
- **Field descriptions** → from `Field(description="...")` on Params and Result
|
|
125
|
+
- **Constraints** → from `Field(gt=0, min_length=3, pattern=...)` on Params
|
|
126
|
+
- **Examples** → from `Field(examples=["..."])` on Params and Result
|
|
127
|
+
- **Endpoint summary** → from the action’s `@meta(description="...")`
|
|
128
|
+
- **Tags** → from the `tags=[...]` argument when registering the route
|
|
129
|
+
|
|
130
|
+
Nothing is duplicated — descriptions are written once in the Pydantic models.
|
|
131
|
+
|
|
132
|
+
## FastAPI: error handling
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
| Exception | HTTP status | Description |
|
|
136
|
+
| ---------------------- | ------------------------- | ------------------------ |
|
|
137
|
+
| `AuthorizationError` | 403 Forbidden | Insufficient permissions |
|
|
138
|
+
| `ValidationFieldError` | 422 Unprocessable Entity | Field validation error |
|
|
139
|
+
| Anything else | 500 Internal Server Error | Internal error |
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## MCP: available resources
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
| Resource | Description |
|
|
148
|
+
| ---------------- | ----------------------------------------------------------------------- |
|
|
149
|
+
| `system://graph` | System structure: nodes (actions, domains), edges (depends, belongs_to) |
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"nodes": [
|
|
155
|
+
{"id": "CreateOrderAction", "type": "action", "description": "Create a new order", "domain": "orders"},
|
|
156
|
+
{"id": "OrdersDomain", "type": "domain", "name": "orders"}
|
|
157
|
+
],
|
|
158
|
+
"edges": [
|
|
159
|
+
{"from": "CreateOrderAction", "to": "OrdersDomain", "type": "belongs_to"}
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## MCP: error handling
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
| Exception | MCP response |
|
|
168
|
+
| ---------------------- | ------------------------ |
|
|
169
|
+
| `AuthorizationError` | `PERMISSION_DENIED: ...` |
|
|
170
|
+
| `ValidationFieldError` | `INVALID_PARAMS: ...` |
|
|
171
|
+
| Anything else | `INTERNAL_ERROR: ...` |
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Claude Desktop integration
|
|
177
|
+
|
|
178
|
+
In `claude_desktop_config.json`:
|
|
179
|
+
|
|
180
|
+
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
181
|
+
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
182
|
+
|
|
183
|
+
```json
|
|
184
|
+
{
|
|
185
|
+
"mcpServers": {
|
|
186
|
+
"orders": {
|
|
187
|
+
"command": "python",
|
|
188
|
+
"args": ["-m", "aoa.demo.fastapi_mcp_services.app_mcp_service"]
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Claude Code integration
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
claude mcp add orders -- python -m aoa.demo.fastapi_mcp_services.app_mcp_service
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Testing with MCP Inspector
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
# Terminal 1:
|
|
204
|
+
python -m aoa.demo.fastapi_mcp_services.app_mcp_service --transport streamable-http
|
|
205
|
+
|
|
206
|
+
# Terminal 2:
|
|
207
|
+
npx -y @modelcontextprotocol/inspector
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Connect to `http://localhost:8000/mcp`, open the **Tools** tab → **List Tools**.
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Architecture
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
HTTP client AI agent
|
|
218
|
+
(curl, browser) (Claude, ChatGPT)
|
|
219
|
+
│ │
|
|
220
|
+
│ HTTP │ MCP protocol
|
|
221
|
+
▼ ▼
|
|
222
|
+
FastApiAdapter McpAdapter
|
|
223
|
+
(app_fastapi_service.py) (app_mcp_service.py)
|
|
224
|
+
│ │
|
|
225
|
+
└──────────┬───────────────────┘
|
|
226
|
+
│
|
|
227
|
+
▼
|
|
228
|
+
ActionProductMachine
|
|
229
|
+
(infrastructure.py)
|
|
230
|
+
│
|
|
231
|
+
┌───────┼───────┐
|
|
232
|
+
│ │ │
|
|
233
|
+
Ping Create Get
|
|
234
|
+
Action Order Order
|
|
235
|
+
Action Action
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
An Action is a unit of business logic. An adapter is transport. One action
|
|
239
|
+
serves HTTP clients and AI agents at the same time, without duplication.
|
|
240
|
+
|
|
241
|
+
## Package layout
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
fastapi_mcp_services/
|
|
245
|
+
├── __init__.py ← example overview
|
|
246
|
+
├── infrastructure.py ← built ``NodeGraphCoordinator`` + ``ActionProductMachine`` (shared)
|
|
247
|
+
├── domains.py ← business domains (OrdersDomain, SystemDomain)
|
|
248
|
+
├── actions/
|
|
249
|
+
│ ├── __init__.py
|
|
250
|
+
│ ├── ping.py ← PingAction
|
|
251
|
+
│ ├── create_order.py ← CreateOrderAction
|
|
252
|
+
│ └── get_order.py ← GetOrderAction
|
|
253
|
+
├── app_fastapi_service.py ← FastAPI app (HTTP)
|
|
254
|
+
├── app_mcp_service.py ← MCP server (AI agents)
|
|
255
|
+
└── README.md ← this file
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## Fluent chain
|
|
259
|
+
|
|
260
|
+
Optional keyword-only `connections` on each fluent call passes resources into `machine.run` for that route or tool only; use `PerCallConnection` when the resource must be built per request or per tool invocation (see `aoa.action_machine.resources.per_call_connection`).
|
|
261
|
+
|
|
262
|
+
**FastAPI:**
|
|
263
|
+
|
|
264
|
+
```python
|
|
265
|
+
app = (
|
|
266
|
+
FastApiAdapter(machine=machine, title="Orders API", version="0.1.0")
|
|
267
|
+
.get("/api/v1/ping", PingAction, tags=["system"])
|
|
268
|
+
.post("/api/v1/orders", CreateOrderAction, tags=["orders"])
|
|
269
|
+
.get("/api/v1/orders/{order_id}", GetOrderAction, tags=["orders"])
|
|
270
|
+
.build()
|
|
271
|
+
)
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
**MCP:**
|
|
275
|
+
|
|
276
|
+
```python
|
|
277
|
+
server = (
|
|
278
|
+
McpAdapter(machine=machine, server_name="Orders MCP", server_version="0.1.0")
|
|
279
|
+
.tool("system.ping", PingAction)
|
|
280
|
+
.tool("orders.create", CreateOrderAction)
|
|
281
|
+
.tool("orders.get", GetOrderAction)
|
|
282
|
+
.build()
|
|
283
|
+
)
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Same Actions. Different adapters. Zero duplication.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# packages/aoa-demo/src/aoa/demo/fastapi_mcp_services/__init__.py
|
|
2
|
+
"""
|
|
3
|
+
Example services on ActionMachine — FastAPI and MCP from one codebase.
|
|
4
|
+
|
|
5
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
6
|
+
PURPOSE
|
|
7
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
8
|
+
|
|
9
|
+
Demonstrates a core ActionMachine idea: the same Action classes run through any
|
|
10
|
+
protocol adapter without changing business code.
|
|
11
|
+
|
|
12
|
+
Three actions (``CreateOrderAction``, ``GetOrderAction``, ``PingAction``) are
|
|
13
|
+
defined once under ``actions/`` and wired to two transports:
|
|
14
|
+
|
|
15
|
+
- **FastAPI** (``app_fastapi_service.py``) — HTTP REST with OpenAPI.
|
|
16
|
+
- **MCP** (``app_mcp_service.py``) — MCP server for AI agents (e.g. Claude,
|
|
17
|
+
ChatGPT, Cursor).
|
|
18
|
+
|
|
19
|
+
Validation, checkers, logging, and plugins stay shared; adapters stay a thin
|
|
20
|
+
transport layer.
|
|
21
|
+
|
|
22
|
+
Actions use **Intent** mixins on ``BaseAction`` and decorators (``@meta``,
|
|
23
|
+
``@check_roles``, aspects). Metadata is assembled when ``NodeGraphCoordinator.build()`` runs;
|
|
24
|
+
see the root ``README.md`` (Intent section).
|
|
25
|
+
|
|
26
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
27
|
+
ARCHITECTURE / DATA FLOW
|
|
28
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
29
|
+
|
|
30
|
+
+------------------ actions/ ------------------+
|
|
31
|
+
| PingAction, CreateOrderAction, GetOrderAction |
|
|
32
|
+
+------------------------+-----------------------+
|
|
33
|
+
|
|
|
34
|
+
+-------------------+-------------------+
|
|
35
|
+
| |
|
|
36
|
+
FastApiAdapter McpAdapter
|
|
37
|
+
app_fastapi_service app_mcp_service
|
|
38
|
+
| |
|
|
39
|
+
v v
|
|
40
|
+
HTTP clients AI / tool clients
|
|
41
|
+
|
|
42
|
+
infrastructure.py -> ActionProductMachine + NoAuthCoordinator
|
|
43
|
+
orders_domain.py / system_domain.py -> OrdersDomain, SystemDomain
|
|
44
|
+
|
|
45
|
+
Package layout:
|
|
46
|
+
|
|
47
|
+
fastapi_mcp_services/
|
|
48
|
+
├── __init__.py <- this file
|
|
49
|
+
├── infrastructure.py <- ActionProductMachine + NoAuthCoordinator
|
|
50
|
+
├── orders_domain.py <- OrdersDomain
|
|
51
|
+
├── system_domain.py <- SystemDomain
|
|
52
|
+
├── actions/
|
|
53
|
+
│ ├── __init__.py
|
|
54
|
+
│ ├── ping.py <- PingAction
|
|
55
|
+
│ ├── create_order.py <- CreateOrderAction
|
|
56
|
+
│ └── get_order.py <- GetOrderAction
|
|
57
|
+
├── app_fastapi_service.py <- FastAPI app (HTTP)
|
|
58
|
+
├── app_mcp_service.py <- MCP server (AI agents)
|
|
59
|
+
└── README.md
|
|
60
|
+
|
|
61
|
+
"""
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# packages/aoa-demo/src/aoa/demo/fastapi_mcp_services/actions/__init__.py
|
|
2
|
+
"""
|
|
3
|
+
Shared actions for FastAPI and MCP services.
|
|
4
|
+
|
|
5
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
6
|
+
PURPOSE
|
|
7
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
8
|
+
|
|
9
|
+
This package exports canonical action classes used by both HTTP (FastAPI) and
|
|
10
|
+
MCP adapters in the example service. Action definitions, validation rules, and
|
|
11
|
+
Params/Result models are shared across transports.
|
|
12
|
+
|
|
13
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
14
|
+
ARCHITECTURE / DATA FLOW
|
|
15
|
+
═══════════════════════════════════════════════════════════════════════════════
|
|
16
|
+
|
|
17
|
+
+-------------------------------------+
|
|
18
|
+
| actions package (__init__) |
|
|
19
|
+
| - PingAction |
|
|
20
|
+
| - CreateOrderAction |
|
|
21
|
+
| - GetOrderAction |
|
|
22
|
+
+-----------------+-------------------+
|
|
23
|
+
|
|
|
24
|
+
+-----------+-----------+
|
|
25
|
+
| |
|
|
26
|
+
FastApiAdapter McpAdapter
|
|
27
|
+
(HTTP endpoints) (MCP tools for AI)
|
|
28
|
+
| |
|
|
29
|
+
+-----------+-----------+
|
|
30
|
+
|
|
|
31
|
+
shared action logic
|
|
32
|
+
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
from .create_order import CreateOrderAction
|
|
36
|
+
from .get_order import GetOrderAction
|
|
37
|
+
from .ping import PingAction
|
|
38
|
+
|
|
39
|
+
__all__ = [
|
|
40
|
+
"CreateOrderAction",
|
|
41
|
+
"GetOrderAction",
|
|
42
|
+
"PingAction",
|
|
43
|
+
]
|