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.
Files changed (411) hide show
  1. aoa_demo-1.0.0/.gitignore +93 -0
  2. aoa_demo-1.0.0/CHANGELOG.md +23 -0
  3. aoa_demo-1.0.0/PKG-INFO +30 -0
  4. aoa_demo-1.0.0/README.md +11 -0
  5. aoa_demo-1.0.0/pyproject.toml +48 -0
  6. aoa_demo-1.0.0/src/aoa/demo/__init__.py +36 -0
  7. aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/README.md +286 -0
  8. aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/__init__.py +61 -0
  9. aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/actions/__init__.py +43 -0
  10. aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/actions/create_order.py +125 -0
  11. aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/actions/get_order.py +97 -0
  12. aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/actions/ping.py +66 -0
  13. aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/app_fastapi_service.py +121 -0
  14. aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/app_mcp_service.py +112 -0
  15. aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/infrastructure.py +54 -0
  16. aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/orders_domain.py +11 -0
  17. aoa_demo-1.0.0/src/aoa/demo/fastapi_mcp_services/system_domain.py +11 -0
  18. aoa_demo-1.0.0/src/aoa/demo/model/__init__.py +19 -0
  19. aoa_demo-1.0.0/src/aoa/demo/model/actions/__init__.py +6 -0
  20. aoa_demo-1.0.0/src/aoa/demo/model/actions/get_example_model_graph_json_action.py +46 -0
  21. aoa_demo-1.0.0/src/aoa/demo/model/analytics/__init__.py +6 -0
  22. aoa_demo-1.0.0/src/aoa/demo/model/analytics/dependencies/__init__.py +4 -0
  23. aoa_demo-1.0.0/src/aoa/demo/model/analytics/domain.py +9 -0
  24. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/__init__.py +59 -0
  25. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/an_dense_lifecycle.py +34 -0
  26. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_aggregate_sketch_stub.py +34 -0
  27. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_canonical_telemetry_row.py +34 -0
  28. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_dedup_bloom_row.py +34 -0
  29. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_er_cycle_quad_stub.py +139 -0
  30. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_ingress_batch.py +34 -0
  31. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_mesh_canonical_sampling.py +45 -0
  32. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_mesh_dedup_dimension.py +42 -0
  33. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_mesh_rollup_privacy.py +44 -0
  34. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_metric_rollup_staging.py +34 -0
  35. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sampling_policy.py +25 -0
  36. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_budgeted_query_plan.py +34 -0
  37. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_data_quality_ticket.py +34 -0
  38. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_derived_metric_fence.py +36 -0
  39. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_dimension_slice_stub.py +34 -0
  40. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_experiment_overlay.py +37 -0
  41. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_geo_shard_hint.py +34 -0
  42. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_privacy_budget_slice.py +25 -0
  43. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_replay_watermark_stub.py +34 -0
  44. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_time_bucket_mapper.py +34 -0
  45. aoa_demo-1.0.0/src/aoa/demo/model/analytics/entities/analytics_sat_user_hash_salt_stub.py +34 -0
  46. aoa_demo-1.0.0/src/aoa/demo/model/analytics/resources/__init__.py +4 -0
  47. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/__init__.py +6 -0
  48. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/dependencies/__init__.py +4 -0
  49. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/domain.py +12 -0
  50. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/__init__.py +82 -0
  51. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_actor_duty_coupling.py +42 -0
  52. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_campaign_wave_banner.py +25 -0
  53. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_delegated_work_ticket.py +59 -0
  54. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_duty_privilege_bridge.py +47 -0
  55. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_evidence_carrier_stub.py +37 -0
  56. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_execution_attempt_ticket.py +34 -0
  57. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_expectation_catalog_stub.py +25 -0
  58. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_expectation_outline_node.py +47 -0
  59. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_facility_actor.py +34 -0
  60. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_instruction_expectation_anchor.py +49 -0
  61. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_lifecycle.py +18 -0
  62. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_portfolio_lane_stub.py +25 -0
  63. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_portfolio_workspace_coupler.py +44 -0
  64. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_reference_axes.py +137 -0
  65. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_regulated_expectation_row.py +54 -0
  66. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_scenario_instruction_line.py +34 -0
  67. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_scenario_sheet.py +36 -0
  68. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_wave_execution_slot.py +47 -0
  69. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_wave_seat_coupling.py +42 -0
  70. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_workspace_program_stub.py +25 -0
  71. aoa_demo-1.0.0/src/aoa/demo/model/assurance_portfolio/entities/ap_workspace_seat_grant.py +44 -0
  72. aoa_demo-1.0.0/src/aoa/demo/model/billing/__init__.py +13 -0
  73. aoa_demo-1.0.0/src/aoa/demo/model/billing/actions/__init__.py +29 -0
  74. aoa_demo-1.0.0/src/aoa/demo/model/billing/actions/credit_memo_preview.py +35 -0
  75. aoa_demo-1.0.0/src/aoa/demo/model/billing/actions/dunning_schedule.py +35 -0
  76. aoa_demo-1.0.0/src/aoa/demo/model/billing/actions/invoice_settle.py +150 -0
  77. aoa_demo-1.0.0/src/aoa/demo/model/billing/actions/refund_quote.py +56 -0
  78. aoa_demo-1.0.0/src/aoa/demo/model/billing/dependencies/__init__.py +5 -0
  79. aoa_demo-1.0.0/src/aoa/demo/model/billing/domain.py +9 -0
  80. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/__init__.py +88 -0
  81. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/arbitration_brief_stub.py +35 -0
  82. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_canonical_row_artifact.py +35 -0
  83. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_dense_lifecycle.py +26 -0
  84. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_file_ingest_manifest.py +25 -0
  85. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_mesh_chargeback_ingest.py +43 -0
  86. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_mesh_parse_interchange.py +43 -0
  87. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_multi_lifecycle_table_entities.py +151 -0
  88. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_parse_pass.py +54 -0
  89. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_payout_plan.py +25 -0
  90. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_acquirer_integrity.py +37 -0
  91. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_cash_apply_hint.py +42 -0
  92. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_duplicate_ledger.py +35 -0
  93. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_fee_schedule_ptr.py +35 -0
  94. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_fx_residual.py +35 -0
  95. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_interchange_slice.py +38 -0
  96. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_ledger_mirror_offset.py +35 -0
  97. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_narrative_correction.py +35 -0
  98. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_profit_center_slice.py +35 -0
  99. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_regulatory_ptr.py +35 -0
  100. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_ripple_correction.py +35 -0
  101. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sat_tax_remit_stub.py +35 -0
  102. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/billing_sweep_instruction.py +35 -0
  103. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/chargeback_ticket.py +55 -0
  104. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/funding_window_hint.py +35 -0
  105. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/payment_event_log.py +24 -0
  106. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/payment_lifecycle.py +20 -0
  107. aoa_demo-1.0.0/src/aoa/demo/model/billing/entities/retrieval_evidence_bundle.py +35 -0
  108. aoa_demo-1.0.0/src/aoa/demo/model/billing/plugins/__init__.py +10 -0
  109. aoa_demo-1.0.0/src/aoa/demo/model/billing/plugins/after_capture_plugin.py +25 -0
  110. aoa_demo-1.0.0/src/aoa/demo/model/billing/plugins/global_finish_plugin.py +21 -0
  111. aoa_demo-1.0.0/src/aoa/demo/model/billing/plugins/unhandled_error_plugin.py +21 -0
  112. aoa_demo-1.0.0/src/aoa/demo/model/billing/resources/__init__.py +17 -0
  113. aoa_demo-1.0.0/src/aoa/demo/model/billing/resources/ledger_archive.py +19 -0
  114. aoa_demo-1.0.0/src/aoa/demo/model/billing/resources/payment_gateway.py +22 -0
  115. aoa_demo-1.0.0/src/aoa/demo/model/billing/resources/read_replica.py +27 -0
  116. aoa_demo-1.0.0/src/aoa/demo/model/billing/resources/tax_quote.py +19 -0
  117. aoa_demo-1.0.0/src/aoa/demo/model/billing/resources/warehouse.py +27 -0
  118. aoa_demo-1.0.0/src/aoa/demo/model/build.py +77 -0
  119. aoa_demo-1.0.0/src/aoa/demo/model/catalog/__init__.py +10 -0
  120. aoa_demo-1.0.0/src/aoa/demo/model/catalog/actions/__init__.py +35 -0
  121. aoa_demo-1.0.0/src/aoa/demo/model/catalog/actions/browse.py +35 -0
  122. aoa_demo-1.0.0/src/aoa/demo/model/catalog/actions/category_list.py +56 -0
  123. aoa_demo-1.0.0/src/aoa/demo/model/catalog/actions/import_sku_stub.py +33 -0
  124. aoa_demo-1.0.0/src/aoa/demo/model/catalog/actions/price_snapshot.py +33 -0
  125. aoa_demo-1.0.0/src/aoa/demo/model/catalog/actions/product_enrichment.py +142 -0
  126. aoa_demo-1.0.0/src/aoa/demo/model/catalog/dependencies/__init__.py +5 -0
  127. aoa_demo-1.0.0/src/aoa/demo/model/catalog/domain.py +9 -0
  128. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/__init__.py +46 -0
  129. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_acquisition_channel_ledger.py +25 -0
  130. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_audience_segment_glue.py +45 -0
  131. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_availability_projection.py +25 -0
  132. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_bridge_price_acquisition.py +44 -0
  133. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_bridge_shelf_bundle.py +42 -0
  134. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_bundle_cardinality_rule.py +25 -0
  135. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_conversion_attribution_stub.py +34 -0
  136. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_dense_lifecycle.py +20 -0
  137. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_er_cycle_triangle_stub.py +131 -0
  138. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_merch_copy_variant.py +34 -0
  139. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_price_ribbon_snapshot.py +34 -0
  140. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_product_lifecycle.py +20 -0
  141. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_regulatory_label_pack.py +34 -0
  142. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_search_boost_weight.py +34 -0
  143. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_shelf_placement_hint.py +25 -0
  144. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/catalog_touch_moment.py +42 -0
  145. aoa_demo-1.0.0/src/aoa/demo/model/catalog/entities/product_row.py +21 -0
  146. aoa_demo-1.0.0/src/aoa/demo/model/catalog/plugins/__init__.py +10 -0
  147. aoa_demo-1.0.0/src/aoa/demo/model/catalog/plugins/after_enrich_plugin.py +25 -0
  148. aoa_demo-1.0.0/src/aoa/demo/model/catalog/plugins/global_finish_plugin.py +21 -0
  149. aoa_demo-1.0.0/src/aoa/demo/model/catalog/plugins/unhandled_error_plugin.py +21 -0
  150. aoa_demo-1.0.0/src/aoa/demo/model/catalog/resources/__init__.py +14 -0
  151. aoa_demo-1.0.0/src/aoa/demo/model/catalog/resources/index_sync.py +19 -0
  152. aoa_demo-1.0.0/src/aoa/demo/model/catalog/resources/object_store.py +27 -0
  153. aoa_demo-1.0.0/src/aoa/demo/model/catalog/resources/pricing_feed.py +19 -0
  154. aoa_demo-1.0.0/src/aoa/demo/model/catalog/resources/search_sidecar.py +27 -0
  155. aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/__init__.py +6 -0
  156. aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/actions/__init__.py +31 -0
  157. aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/actions/custody_workbench_merge_action.py +45 -0
  158. aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/actions/ledger_posting_pulse_action.py +38 -0
  159. aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/actions/lineage_inspect_action.py +31 -0
  160. aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/actions/register_snapshot_peek_action.py +41 -0
  161. aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/catalog_custody_domain.py +13 -0
  162. aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/catalog_officer_role.py +13 -0
  163. aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/custody_access_steward_role.py +15 -0
  164. aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/entities/__init__.py +9 -0
  165. aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/entities/custody_audit_event_entity.py +28 -0
  166. aoa_demo-1.0.0/src/aoa/demo/model/catalog_custody/entities/regulated_stock_keeping_unit_row_entity.py +18 -0
  167. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/__init__.py +6 -0
  168. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/dependencies/__init__.py +4 -0
  169. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/domain.py +12 -0
  170. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/__init__.py +40 -0
  171. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_care_site_unit.py +28 -0
  172. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_consumable_sku_row.py +45 -0
  173. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_geographic_anchor.py +28 -0
  174. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_inbound_shipment_ticket.py +53 -0
  175. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_inbound_transport_binding.py +45 -0
  176. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_lifecycle.py +18 -0
  177. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_material_anchor.py +25 -0
  178. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_outbound_parcel_line.py +45 -0
  179. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_outbound_parcel_wave.py +34 -0
  180. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_ownership_anchor.py +28 -0
  181. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_packing_anchor.py +25 -0
  182. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_partner_hub.py +34 -0
  183. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_partner_org_projection.py +45 -0
  184. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_partner_person_projection.py +37 -0
  185. aoa_demo-1.0.0/src/aoa/demo/model/clinical_supply/entities/cs_transport_anchor.py +28 -0
  186. aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/__init__.py +4 -0
  187. aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/actions/__init__.py +15 -0
  188. aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/actions/order_wire_preview.py +60 -0
  189. aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/domain.py +20 -0
  190. aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/entities/__init__.py +14 -0
  191. aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/entities/projection_demo_core.py +59 -0
  192. aoa_demo-1.0.0/src/aoa/demo/model/entity_projection_demo/entities/projection_demo_lifecycle.py +30 -0
  193. aoa_demo-1.0.0/src/aoa/demo/model/graph_json_domain.py +13 -0
  194. aoa_demo-1.0.0/src/aoa/demo/model/identity/__init__.py +6 -0
  195. aoa_demo-1.0.0/src/aoa/demo/model/identity/dependencies/__init__.py +4 -0
  196. aoa_demo-1.0.0/src/aoa/demo/model/identity/domain.py +9 -0
  197. aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/__init__.py +22 -0
  198. aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/id_dense_lifecycle.py +18 -0
  199. aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_credential_merge.py +50 -0
  200. aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_credential_rotation_stub.py +42 -0
  201. aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_email_factor.py +34 -0
  202. aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_federated_linkage.py +42 -0
  203. aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_org_binding_stub.py +42 -0
  204. aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_person_hub.py +34 -0
  205. aoa_demo-1.0.0/src/aoa/demo/model/identity/entities/identity_phone_factor.py +34 -0
  206. aoa_demo-1.0.0/src/aoa/demo/model/identity/resources/__init__.py +4 -0
  207. aoa_demo-1.0.0/src/aoa/demo/model/interchange_demo_coordinator.py +95 -0
  208. aoa_demo-1.0.0/src/aoa/demo/model/inventory/__init__.py +6 -0
  209. aoa_demo-1.0.0/src/aoa/demo/model/inventory/dependencies/__init__.py +4 -0
  210. aoa_demo-1.0.0/src/aoa/demo/model/inventory/domain.py +9 -0
  211. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/__init__.py +33 -0
  212. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_bin_coordinate_stub.py +42 -0
  213. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_crossdock_staging.py +42 -0
  214. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_dense_lifecycle.py +34 -0
  215. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_disposition_advice.py +42 -0
  216. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_facility_warehouse.py +27 -0
  217. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_lot_age_bucket.py +34 -0
  218. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_lot_freeze_flag.py +42 -0
  219. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_lot_quality_hold.py +34 -0
  220. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_lot_snapshot_ledger.py +42 -0
  221. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_mesh_bin_age.py +45 -0
  222. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_mesh_facility_crossdock.py +44 -0
  223. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_recall_signal.py +34 -0
  224. aoa_demo-1.0.0/src/aoa/demo/model/inventory/entities/inv_storage_aisle_row.py +34 -0
  225. aoa_demo-1.0.0/src/aoa/demo/model/inventory/resources/__init__.py +4 -0
  226. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/__init__.py +6 -0
  227. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/__init__.py +26 -0
  228. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/cross_dock_relay_adapter_action.py +32 -0
  229. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/facility_corridor_relay_first_leg_action.py +28 -0
  230. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/facility_corridor_relay_second_leg_action.py +36 -0
  231. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/facility_corridor_relay_third_leg_action.py +36 -0
  232. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/facility_handoff_origin_action.py +32 -0
  233. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/actions/marshalling_yard_facility_concourse_action.py +54 -0
  234. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/dock_floor_associate_role.py +15 -0
  235. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/entities/__init__.py +7 -0
  236. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/entities/facility_handoff_manifest_entity.py +25 -0
  237. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/entities/freight_waypoint_leg_entity.py +17 -0
  238. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/freight_network_director_role.py +13 -0
  239. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/gate_dispatch_lead_role.py +15 -0
  240. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/hub_terminal_director_role.py +15 -0
  241. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/logistics_mesh_domain.py +13 -0
  242. aoa_demo-1.0.0/src/aoa/demo/model/logistics_mesh/yard_operations_specialist_role.py +15 -0
  243. aoa_demo-1.0.0/src/aoa/demo/model/messaging/__init__.py +15 -0
  244. aoa_demo-1.0.0/src/aoa/demo/model/messaging/actions/__init__.py +29 -0
  245. aoa_demo-1.0.0/src/aoa/demo/model/messaging/actions/drain_dlq_stub.py +33 -0
  246. aoa_demo-1.0.0/src/aoa/demo/model/messaging/actions/publish_transactional.py +155 -0
  247. aoa_demo-1.0.0/src/aoa/demo/model/messaging/actions/queue_depth_probe.py +56 -0
  248. aoa_demo-1.0.0/src/aoa/demo/model/messaging/actions/template_render_stub.py +35 -0
  249. aoa_demo-1.0.0/src/aoa/demo/model/messaging/dependencies/__init__.py +5 -0
  250. aoa_demo-1.0.0/src/aoa/demo/model/messaging/domain.py +9 -0
  251. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/__init__.py +49 -0
  252. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_batching_fence.py +34 -0
  253. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_courier_attempt_ledger.py +34 -0
  254. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_dedupe_correlation.py +34 -0
  255. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_dense_lifecycle.py +26 -0
  256. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_dispatcher_cursor_shard.py +34 -0
  257. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_downstream_watermark.py +34 -0
  258. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_er_cycle_triangle_stub.py +122 -0
  259. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_fanout_replay_cursor.py +34 -0
  260. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_hop_latency_sample.py +34 -0
  261. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_mesh_courier_replay.py +44 -0
  262. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_mesh_outbox_webhook.py +44 -0
  263. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_recipient_device_seen.py +34 -0
  264. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_replay_ticket.py +42 -0
  265. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_throttle_lease.py +34 -0
  266. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_webhook_ingress_receipt.py +25 -0
  267. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/msg_webhook_signature_envelope.py +34 -0
  268. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/outbox_lifecycle.py +20 -0
  269. aoa_demo-1.0.0/src/aoa/demo/model/messaging/entities/outbox_message.py +25 -0
  270. aoa_demo-1.0.0/src/aoa/demo/model/messaging/plugins/__init__.py +10 -0
  271. aoa_demo-1.0.0/src/aoa/demo/model/messaging/plugins/after_send_plugin.py +25 -0
  272. aoa_demo-1.0.0/src/aoa/demo/model/messaging/plugins/global_finish_plugin.py +21 -0
  273. aoa_demo-1.0.0/src/aoa/demo/model/messaging/plugins/unhandled_error_plugin.py +21 -0
  274. aoa_demo-1.0.0/src/aoa/demo/model/messaging/resources/__init__.py +17 -0
  275. aoa_demo-1.0.0/src/aoa/demo/model/messaging/resources/dlq_store.py +27 -0
  276. aoa_demo-1.0.0/src/aoa/demo/model/messaging/resources/notification_gateway.py +22 -0
  277. aoa_demo-1.0.0/src/aoa/demo/model/messaging/resources/outbox_primary.py +27 -0
  278. aoa_demo-1.0.0/src/aoa/demo/model/messaging/resources/smtp_transport.py +19 -0
  279. aoa_demo-1.0.0/src/aoa/demo/model/messaging/resources/webhook_fanout.py +19 -0
  280. aoa_demo-1.0.0/src/aoa/demo/model/roles/__init__.py +8 -0
  281. aoa_demo-1.0.0/src/aoa/demo/model/roles/editor.py +9 -0
  282. aoa_demo-1.0.0/src/aoa/demo/model/roles/legacy.py +9 -0
  283. aoa_demo-1.0.0/src/aoa/demo/model/roles/viewer.py +11 -0
  284. aoa_demo-1.0.0/src/aoa/demo/model/services/__init__.py +6 -0
  285. aoa_demo-1.0.0/src/aoa/demo/model/services/graph_json_service.py +33 -0
  286. aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/__init__.py +6 -0
  287. aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/actions/__init__.py +18 -0
  288. aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/actions/atlantic_desk_liquidity_fork_action.py +28 -0
  289. aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/actions/bi_desk_liquidity_bridge_action.py +53 -0
  290. aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/actions/liquidity_platform_sweep_action.py +38 -0
  291. aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/actions/pacific_desk_liquidity_fork_action.py +28 -0
  292. aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/arbitration_judge_role.py +13 -0
  293. aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/clearing_charter_steward_role.py +15 -0
  294. aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/entities/__init__.py +7 -0
  295. aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/entities/clearing_instruction_row_entity.py +17 -0
  296. aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/entities/desk_lane_exposure_marker_entity.py +26 -0
  297. aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/regional_desk_lead_role.py +15 -0
  298. aoa_demo-1.0.0/src/aoa/demo/model/settlement_desks/settlement_desks_domain.py +13 -0
  299. aoa_demo-1.0.0/src/aoa/demo/model/store/__init__.py +7 -0
  300. aoa_demo-1.0.0/src/aoa/demo/model/store/actions/__init__.py +59 -0
  301. aoa_demo-1.0.0/src/aoa/demo/model/store/actions/cart_abandon_stub.py +33 -0
  302. aoa_demo-1.0.0/src/aoa/demo/model/store/actions/checkout_submit.py +136 -0
  303. aoa_demo-1.0.0/src/aoa/demo/model/store/actions/inventory_hold_stub.py +33 -0
  304. aoa_demo-1.0.0/src/aoa/demo/model/store/actions/loyalty_points_stub.py +33 -0
  305. aoa_demo-1.0.0/src/aoa/demo/model/store/actions/order_lookup.py +53 -0
  306. aoa_demo-1.0.0/src/aoa/demo/model/store/actions/ping.py +60 -0
  307. aoa_demo-1.0.0/src/aoa/demo/model/store/actions/role_migration.py +36 -0
  308. aoa_demo-1.0.0/src/aoa/demo/model/store/actions/store_read.py +48 -0
  309. aoa_demo-1.0.0/src/aoa/demo/model/store/actions/store_read_use_case_demo.py +53 -0
  310. aoa_demo-1.0.0/src/aoa/demo/model/store/dependencies/__init__.py +7 -0
  311. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/__init__.py +104 -0
  312. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/audit_log_entry.py +34 -0
  313. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/audit_log_entry_lifecycle.py +22 -0
  314. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/customer_account.py +4 -0
  315. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/customer_account_lifecycle.py +22 -0
  316. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/discount_application.py +42 -0
  317. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/fulfillment_task.py +42 -0
  318. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/invoice_record.py +42 -0
  319. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/line_item.py +4 -0
  320. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/order_record.py +4 -0
  321. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/payment_authorization.py +34 -0
  322. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/payment_capture.py +42 -0
  323. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/refund_request.py +34 -0
  324. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/return_request.py +42 -0
  325. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/sales_core.py +124 -0
  326. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/sales_order_lifecycle.py +39 -0
  327. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/sales_order_line_lifecycle.py +22 -0
  328. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/shipment_parcel.py +42 -0
  329. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/shipment_tracking_event.py +34 -0
  330. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_cart_merge_trace.py +34 -0
  331. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_dual_entry_lifecycle.py +25 -0
  332. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_er_cycle_ping_pong.py +86 -0
  333. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_backorder_eta.py +34 -0
  334. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_kit_explosion.py +34 -0
  335. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_pick_variance.py +34 -0
  336. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_serial_trace.py +34 -0
  337. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_shipment_piece.py +41 -0
  338. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_substitution_hist.py +34 -0
  339. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_line_warranty_offer.py +34 -0
  340. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_loyalty_earn_projection.py +36 -0
  341. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_mesh_customer_order_affinity.py +43 -0
  342. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_mesh_invoice_line_tie.py +42 -0
  343. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_mesh_line_parcel_pick.py +42 -0
  344. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_mesh_order_invoice_bridge.py +45 -0
  345. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_mesh_order_parcel_handoff.py +45 -0
  346. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_address_verification.py +34 -0
  347. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_channel_attribution.py +34 -0
  348. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_compliance_review.py +34 -0
  349. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_deposit_allocation.py +37 -0
  350. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_dual_entry_origin.py +39 -0
  351. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_fraud_challenge.py +34 -0
  352. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_geo_fence.py +34 -0
  353. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_gift_wrap.py +34 -0
  354. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_packing_slip.py +34 -0
  355. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_revenue_schedule.py +34 -0
  356. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_risk_score.py +34 -0
  357. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_shipment_estimate.py +36 -0
  358. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_split_bill.py +34 -0
  359. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/store_order_tax_jurisdiction.py +34 -0
  360. aoa_demo-1.0.0/src/aoa/demo/model/store/entities/tax_line.py +34 -0
  361. aoa_demo-1.0.0/src/aoa/demo/model/store/marketplace_operations_domain.py +13 -0
  362. aoa_demo-1.0.0/src/aoa/demo/model/store/plugins/__init__.py +10 -0
  363. aoa_demo-1.0.0/src/aoa/demo/model/store/plugins/after_charge_plugin.py +25 -0
  364. aoa_demo-1.0.0/src/aoa/demo/model/store/plugins/global_finish_plugin.py +21 -0
  365. aoa_demo-1.0.0/src/aoa/demo/model/store/plugins/unhandled_error_plugin.py +23 -0
  366. aoa_demo-1.0.0/src/aoa/demo/model/store/resources/__init__.py +5 -0
  367. aoa_demo-1.0.0/src/aoa/demo/model/store/resources/cache.py +27 -0
  368. aoa_demo-1.0.0/src/aoa/demo/model/store/resources/db.py +27 -0
  369. aoa_demo-1.0.0/src/aoa/demo/model/store/store_domain.py +11 -0
  370. aoa_demo-1.0.0/src/aoa/demo/model/support/__init__.py +6 -0
  371. aoa_demo-1.0.0/src/aoa/demo/model/support/actions/__init__.py +47 -0
  372. aoa_demo-1.0.0/src/aoa/demo/model/support/actions/depend_cross_domain_action.py +43 -0
  373. aoa_demo-1.0.0/src/aoa/demo/model/support/actions/depend_cross_domain_include_action.py +52 -0
  374. aoa_demo-1.0.0/src/aoa/demo/model/support/actions/depend_same_domain_action.py +43 -0
  375. aoa_demo-1.0.0/src/aoa/demo/model/support/actions/depend_same_domain_include_action.py +52 -0
  376. aoa_demo-1.0.0/src/aoa/demo/model/support/actions/sla_breach_stub.py +33 -0
  377. aoa_demo-1.0.0/src/aoa/demo/model/support/actions/support_ping.py +58 -0
  378. aoa_demo-1.0.0/src/aoa/demo/model/support/actions/ticket_stub.py +33 -0
  379. aoa_demo-1.0.0/src/aoa/demo/model/support/entities/__init__.py +18 -0
  380. aoa_demo-1.0.0/src/aoa/demo/model/support/entities/support_comment_thread_stub.py +34 -0
  381. aoa_demo-1.0.0/src/aoa/demo/model/support/entities/support_mesh_ticket_observer.py +45 -0
  382. aoa_demo-1.0.0/src/aoa/demo/model/support/entities/support_participant_row.py +34 -0
  383. aoa_demo-1.0.0/src/aoa/demo/model/support/entities/support_simple_lifecycle.py +20 -0
  384. aoa_demo-1.0.0/src/aoa/demo/model/support/entities/support_sla_interval.py +34 -0
  385. aoa_demo-1.0.0/src/aoa/demo/model/support/entities/support_ticket_aggregate.py +34 -0
  386. aoa_demo-1.0.0/src/aoa/demo/model/support/support_domain.py +9 -0
  387. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/__init__.py +6 -0
  388. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/__init__.py +28 -0
  389. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/cross_edge_observability_portico_action.py +53 -0
  390. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/edge_facility_downlink_brief_action.py +32 -0
  391. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/stream_ingress_anchor_action.py +32 -0
  392. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/stream_normalization_pass_one_action.py +28 -0
  393. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/stream_normalization_pass_three_action.py +36 -0
  394. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/actions/stream_normalization_pass_two_action.py +36 -0
  395. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/collector_channel_owner_role.py +15 -0
  396. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/correlation_lane_owner_role.py +15 -0
  397. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/entities/__init__.py +9 -0
  398. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/entities/routed_observation_slice_entity.py +27 -0
  399. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/entities/telemetry_ingest_envelope_entity.py +17 -0
  400. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/incident_observability_director_role.py +13 -0
  401. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/normalization_lane_owner_role.py +15 -0
  402. aoa_demo-1.0.0/src/aoa/demo/model/telemetry_pipeline/telemetry_pipeline_domain.py +13 -0
  403. aoa_demo-1.0.0/src/aoa/demo/py.typed +0 -0
  404. aoa_demo-1.0.0/tests/__init__.py +2 -0
  405. aoa_demo-1.0.0/tests/model/__init__.py +0 -0
  406. aoa_demo-1.0.0/tests/model/conftest.py +15 -0
  407. aoa_demo-1.0.0/tests/model/test_entity_projection_samples.py +100 -0
  408. aoa_demo-1.0.0/tests/model/test_examples_generalization_edges.py +53 -0
  409. aoa_demo-1.0.0/tests/model/test_sample_graph_json_fields.py +59 -0
  410. aoa_demo-1.0.0/tests/test_depends_use_case_modes.py +97 -0
  411. 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.
@@ -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.
@@ -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
+ ]