ApiLogicServer 15.0.65__py3-none-any.whl → 15.1.0__py3-none-any.whl

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 (519) hide show
  1. api_logic_server_cli/api_logic_server.py +2 -2
  2. api_logic_server_cli/database/basic_demo.sqlite +0 -0
  3. api_logic_server_cli/prototypes/base/.github/.copilot-instructions.md +25 -2
  4. api_logic_server_cli/prototypes/basic_demo/customizations/database/db.sqlite +0 -0
  5. api_logic_server_cli/prototypes/basic_demo/iteration/database/db.sqlite +0 -0
  6. api_logic_server_cli/prototypes/manager/.vscode/launch.json +2 -1
  7. api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/For_VSCode.dockerfile +10 -0
  8. api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/devcontainer.json +64 -0
  9. api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/readme.md +1 -0
  10. api_logic_server_cli/prototypes/manager/samples/basic_demo/.devcontainer-option/setup.sh +10 -0
  11. api_logic_server_cli/prototypes/manager/samples/basic_demo/.env +4 -0
  12. api_logic_server_cli/prototypes/manager/samples/basic_demo/.github/.copilot-instructions.md +581 -0
  13. api_logic_server_cli/prototypes/manager/samples/basic_demo/.gitignore +9 -0
  14. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/ApiLogicServer.xml +24 -0
  15. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Report_Behave_Logic.xml +24 -0
  16. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Run_Behave.xml +24 -0
  17. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/Windows_Run_Behave.xml +24 -0
  18. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/run___No_Security.xml +25 -0
  19. api_logic_server_cli/prototypes/manager/samples/basic_demo/.idea/runConfigurations/run_docker.xml +59 -0
  20. api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/launch.json +314 -0
  21. api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/settings.json +40 -0
  22. api_logic_server_cli/prototypes/manager/samples/basic_demo/.vscode/venv_init.sh +64 -0
  23. api_logic_server_cli/prototypes/manager/samples/basic_demo/_config.yml +8 -0
  24. api_logic_server_cli/prototypes/manager/samples/basic_demo/_layouts/redirect.html +15 -0
  25. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/__init__.py +0 -0
  26. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/auto_discovery.py +27 -0
  27. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/mcp_discovery.py +97 -0
  28. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/mcp_expose_api_models.py +53 -0
  29. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/new_service.py +21 -0
  30. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/newer_service.py +21 -0
  31. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/ontimize_api.py +495 -0
  32. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/order_b2b_service.py +60 -0
  33. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/api_discovery/system.py +77 -0
  34. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/customize_api.py +63 -0
  35. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/expose_api_models.py +52 -0
  36. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/json_encoder.py +17 -0
  37. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/readme_customize_api.md +103 -0
  38. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/api_utils.py +171 -0
  39. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/custom_endpoint.py +1085 -0
  40. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/expression_parser.py +685 -0
  41. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/gen_csv_report.py +41 -0
  42. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/gen_pdf_report.py +215 -0
  43. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/opt_locking/opt_locking.py +158 -0
  44. api_logic_server_cli/prototypes/manager/samples/basic_demo/api/system/opt_locking/readme.md +225 -0
  45. api_logic_server_cli/prototypes/manager/samples/basic_demo/api_logic_server_run.py +162 -0
  46. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/__init__.py +0 -0
  47. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/activate_logicbank.py +46 -0
  48. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/config.py +772 -0
  49. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/default.env +16 -0
  50. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/logging-reduced.yml +112 -0
  51. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/logging.yml +123 -0
  52. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/mypy.ini +25 -0
  53. api_logic_server_cli/prototypes/manager/samples/basic_demo/config/server_setup.py +459 -0
  54. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/api/api_discovery/openapi.py +92 -0
  55. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/config/default.env +13 -0
  56. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/database/db.sqlite +0 -0
  57. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/database/models.py +130 -0
  58. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/docs/mcp_learning/mcp_discovery.json +108 -0
  59. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/cocktail-napkin.jpg +0 -0
  60. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/declare_logic.py +106 -0
  61. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/logic_discovery/email_request.py +49 -0
  62. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/logic/logic_discovery/simple_constraints.py +25 -0
  63. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/security/declare_security.py +60 -0
  64. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/admin/admin.yaml +162 -0
  65. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/admin/home.js +48 -0
  66. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/README.md +17 -0
  67. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/README_create_react_app.md +70 -0
  68. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/package-lock.json +18469 -0
  69. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/package.json +47 -0
  70. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/favicon.ico +0 -0
  71. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/index.html +43 -0
  72. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/logo192.png +0 -0
  73. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/logo512.png +0 -0
  74. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/manifest.json +25 -0
  75. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/public/robots.txt +3 -0
  76. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.css +38 -0
  77. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.js +61 -0
  78. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/App.test.js +8 -0
  79. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Config-reference.js +527 -0
  80. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Config.js +527 -0
  81. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Customer-reference.js +216 -0
  82. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Customer.js +230 -0
  83. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Item.js +170 -0
  84. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Order.js +207 -0
  85. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/Product.js +140 -0
  86. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/SysEmail.js +157 -0
  87. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/SysMcp.js +110 -0
  88. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/app_loader.js +24 -0
  89. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/index.css +13 -0
  90. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/index.js +17 -0
  91. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/logo.svg +1 -0
  92. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/.eslintrc +5 -0
  93. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
  94. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/default-settings.js +25 -0
  95. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/default-settings.ts +25 -0
  96. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/errors.js +116 -0
  97. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/errors.ts +116 -0
  98. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/index.test.tsx +7 -0
  99. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/index.tsx +11 -0
  100. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
  101. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
  102. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/resourceLookup.js +124 -0
  103. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
  104. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/rav4-jsonapi-client/styles.module.css +9 -0
  105. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/reportWebVitals.js +13 -0
  106. api_logic_server_cli/prototypes/manager/samples/basic_demo/customizations/ui/reference_react_app/src/setupTests.js +5 -0
  107. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/__init__.py +0 -0
  108. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/alembic_run.py +98 -0
  109. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/env.py +78 -0
  110. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/readme_alembic.md +36 -0
  111. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/script.py.mako +24 -0
  112. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/versions/ae6a5c2fdc47_autogenerated.py +34 -0
  113. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic/versions/readme.md +1 -0
  114. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/alembic.ini +103 -0
  115. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/authentication_db.sqlite +0 -0
  116. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/bind_dbs.py +25 -0
  117. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/customize_models.py +19 -0
  118. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/database_discovery/authentication_models.py +183 -0
  119. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/database_discovery/auto_discovery.py +27 -0
  120. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/db.sqlite +0 -0
  121. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/db_debug/db_debug.py +90 -0
  122. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/mcp_db.sqlite +0 -0
  123. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/mcp_models.py +58 -0
  124. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/models.py +132 -0
  125. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/system/SAFRSBaseX.py +139 -0
  126. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/alp_init.py +40 -0
  127. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/readme.md +13 -0
  128. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/response2code.py +148 -0
  129. api_logic_server_cli/prototypes/manager/samples/basic_demo/database/test_data/test_data_preamble.py +83 -0
  130. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_mysql.Dockerfile +65 -0
  131. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_mysql.sql +112 -0
  132. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/auth-db/authdb_postgres.sql +57 -0
  133. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-azure/azure-deploy.sh +98 -0
  134. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-local/docker-compose-dev-local.yml +38 -0
  135. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-compose-dev-local/docker-compose.sh +34 -0
  136. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/build_image.dockerfile +20 -0
  137. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/build_image.sh +67 -0
  138. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/env.list +35 -0
  139. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-image/run_image.sh +23 -0
  140. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-standard-image/docker-compose-standard-image.yml +33 -0
  141. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/docker-standard-image/env.list +55 -0
  142. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/h2/keycloakdb.mv.db +0 -0
  143. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/h2/keycloakdb.trace.db +236 -0
  144. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/kcals-realm.json +1807 -0
  145. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/kcals-users-0.json +24 -0
  146. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/master-realm.json +1953 -0
  147. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/import/master-users-0.json +23 -0
  148. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/data/tmp/kc-gzip-cache/nnbna/js/keycloak.js.gz +0 -0
  149. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose-dev-network.yml +31 -0
  150. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose-nginx.yml +48 -0
  151. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/docker-compose.yml +24 -0
  152. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/kcals-realm.json +1898 -0
  153. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/kcals-users-0.json +319 -0
  154. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/master-realm.json +1953 -0
  155. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/import/master-users-0.json +23 -0
  156. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/cert.pem +25 -0
  157. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/key.pem +28 -0
  158. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/nginx/nginx.conf +73 -0
  159. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/startup_log_nginx.txt +0 -0
  160. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/startup_log_no_nginx.txt +0 -0
  161. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/unused/auth_provider.py +80 -0
  162. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/keycloak/unused/unused-docker-compose-keycloak.sh +13 -0
  163. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/python-anywhere/python_anywhere_wsgi.py +116 -0
  164. api_logic_server_cli/prototypes/manager/samples/basic_demo/devops/readme-devops.md +31 -0
  165. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/db.dbml +14 -0
  166. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/graphics/readme.md +12 -0
  167. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/logic/readme.md +19 -0
  168. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/logic_suggestions/readme_logic_suggestions.md +3 -0
  169. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/mcp_learning/mcp.prompt +39 -0
  170. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/mcp_learning/mcp_schema.json +30 -0
  171. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/models-not-code.png +0 -0
  172. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/runtime engines.png +0 -0
  173. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/system-creation-vibe.md +158 -0
  174. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_1_context.prompt.md +43 -0
  175. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_2_functionality.prompt.md +69 -0
  176. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/admin_app_3_architecture.prompt.md +29 -0
  177. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/logic_bank_api.prompt +342 -0
  178. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/logic_example.py +41 -0
  179. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/react_map.prompt.md +13 -0
  180. api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/training/react_tree.prompt.md +10 -0
  181. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_consumer.py +60 -0
  182. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_producer.py +127 -0
  183. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/kafka/kafka_readme.md +3 -0
  184. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_context_results.txt +142 -0
  185. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_discovery_response.json +150 -0
  186. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_request.prompt +46 -0
  187. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_schema.txt +47 -0
  188. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_tool_context_response.json +34 -0
  189. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/examples/mcp_tool_context_response_get.json +18 -0
  190. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/mcp_client_executor.py +545 -0
  191. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/mcp_server_discovery.json +9 -0
  192. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/mcp/readme-mcp.md +9 -0
  193. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/N8N_WebHook_from_ApiLogicServer.json +394 -0
  194. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/n8n_producer.py +172 -0
  195. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/n8n/n8n_readme.md +67 -0
  196. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/row_dict_maps/OrderB2BMapper.py +54 -0
  197. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/row_dict_maps/row_dict_maps_readme.md +3 -0
  198. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/system/FlaskKafka.py +105 -0
  199. api_logic_server_cli/prototypes/manager/samples/basic_demo/integration/system/RowDictMapper.py +416 -0
  200. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/api/api_discovery/order_b2b.py +92 -0
  201. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/database/db.sqlite +0 -0
  202. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/docs/er_diagram.png +0 -0
  203. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/integration/row_dict_maps/OrderB2B.py +36 -0
  204. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/integration/row_dict_maps/OrderShipping.py +30 -0
  205. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/logic/declare_logic.py +147 -0
  206. api_logic_server_cli/prototypes/manager/samples/basic_demo/iteration/ui/admin/admin.yaml +175 -0
  207. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/declarative-vs-procedural-comparison.html +110 -0
  208. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/declare_logic.py +81 -0
  209. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/load_verify_rules.py +217 -0
  210. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/app_integration.py +23 -0
  211. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/auto_discovery.py +52 -0
  212. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/check_credit.py +44 -0
  213. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/mcp_client_executor_request.py +50 -0
  214. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/readme_logic_discovery.md +9 -0
  215. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/logic_discovery/use_case.py +31 -0
  216. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/credit_service.py +204 -0
  217. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/declarative-vs-procedural-comparison.md +295 -0
  218. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/procedural/declarative-vs-procedural-comparison.png +0 -0
  219. api_logic_server_cli/prototypes/manager/samples/basic_demo/logic/readme_logic.md +249 -0
  220. api_logic_server_cli/prototypes/manager/samples/basic_demo/readme.md +495 -0
  221. api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_project.md +43 -0
  222. api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_standard.md +492 -0
  223. api_logic_server_cli/prototypes/manager/samples/basic_demo/readme_vibe.md +353 -0
  224. api_logic_server_cli/prototypes/manager/samples/basic_demo/requirements.txt +3 -0
  225. api_logic_server_cli/prototypes/manager/samples/basic_demo/run.ps1 +30 -0
  226. api_logic_server_cli/prototypes/manager/samples/basic_demo/run.sh +55 -0
  227. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/__init__.py +0 -0
  228. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/__init__.py +0 -0
  229. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/abstract_authentication_provider.py +34 -0
  230. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/keycloak/auth_provider.py +238 -0
  231. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/memory/auth_provider.py +161 -0
  232. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/memory/auth_provider_no_swagger.py +98 -0
  233. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/authentication_provider/sql/auth_provider.py +127 -0
  234. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/declare_security.py +49 -0
  235. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/readme_security.md +16 -0
  236. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/authentication.py +129 -0
  237. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/authorization.py +473 -0
  238. api_logic_server_cli/prototypes/manager/samples/basic_demo/security/system/custom_swagger.json +62 -0
  239. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/__init__.py +0 -0
  240. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/__init__.py +0 -0
  241. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/behave_logic_report.py +256 -0
  242. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/behave_run.py +64 -0
  243. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/about.feature +12 -0
  244. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/steps/about.py +20 -0
  245. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/steps/test_utils.py +133 -0
  246. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/logs/behave.log +0 -0
  247. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Intro micro.md +4 -0
  248. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Intro.md +75 -0
  249. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/reports/Behave Logic Report Sample.md +1180 -0
  250. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/basic/server_test.py +33 -0
  251. api_logic_server_cli/prototypes/manager/samples/basic_demo/test/readme_test.md +395 -0
  252. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/__init__.py +0 -0
  253. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/admin.yaml +173 -0
  254. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/admin_loader.py +217 -0
  255. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/authentication_admin.yaml +99 -0
  256. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/home.js +48 -0
  257. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/admin/mcp_admin.yaml +53 -0
  258. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.browserslistrc +12 -0
  259. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.dockerignore +47 -0
  260. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.editorconfig +16 -0
  261. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.eslintrc.json +51 -0
  262. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/.gitignore +47 -0
  263. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/README.md +42 -0
  264. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/angular.json +206 -0
  265. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/app_model.yaml +303 -0
  266. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/docker-compose-ontimize.yml +54 -0
  267. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/protractor.conf.js +32 -0
  268. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/src/app.e2e-spec.ts +23 -0
  269. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/src/app.po.ts +11 -0
  270. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/e2e/tsconfig.json +13 -0
  271. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/karma.conf.js +32 -0
  272. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/nginx/nginx.conf +29 -0
  273. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/ngsw-config.json +29 -0
  274. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/package-lock.json +22651 -0
  275. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/package.json +69 -0
  276. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app-routing.module.ts +25 -0
  277. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.html +1 -0
  278. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.scss +1 -0
  279. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.spec.ts +35 -0
  280. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.component.ts +9 -0
  281. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.config.ts +43 -0
  282. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/app.module.ts +37 -0
  283. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login-routing.module.ts +12 -0
  284. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.html +58 -0
  285. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.scss +155 -0
  286. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.component.ts +81 -0
  287. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.module.ts +18 -0
  288. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/login/login.theme.scss +51 -0
  289. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/Customer-routing.module.ts +37 -0
  290. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/Customer.module.ts +19 -0
  291. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.html +90 -0
  292. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.scss +0 -0
  293. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/detail/Customer-detail.component.ts +32 -0
  294. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.html +44 -0
  295. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.scss +0 -0
  296. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/home/Customer-home.component.ts +23 -0
  297. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.html +26 -0
  298. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.scss +0 -0
  299. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Customer/new/Customer-new.component.ts +18 -0
  300. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/Item-routing.module.ts +30 -0
  301. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/Item.module.ts +19 -0
  302. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.html +72 -0
  303. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.scss +0 -0
  304. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/detail/Item-detail.component.ts +32 -0
  305. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.html +55 -0
  306. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.scss +0 -0
  307. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/home/Item-home.component.ts +23 -0
  308. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.html +60 -0
  309. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.scss +0 -0
  310. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Item/new/Item-new.component.ts +18 -0
  311. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/Order-routing.module.ts +37 -0
  312. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/Order.module.ts +19 -0
  313. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.html +114 -0
  314. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.scss +0 -0
  315. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/detail/Order-detail.component.ts +32 -0
  316. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.html +48 -0
  317. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.scss +0 -0
  318. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/home/Order-home.component.ts +23 -0
  319. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.html +43 -0
  320. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.scss +0 -0
  321. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Order/new/Order-new.component.ts +18 -0
  322. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/Product-routing.module.ts +37 -0
  323. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/Product.module.ts +19 -0
  324. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.html +91 -0
  325. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.scss +0 -0
  326. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/detail/Product-detail.component.ts +32 -0
  327. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.html +35 -0
  328. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.scss +0 -0
  329. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/home/Product-home.component.ts +23 -0
  330. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.html +20 -0
  331. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.scss +0 -0
  332. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/Product/new/Product-new.component.ts +18 -0
  333. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about-routing.module.ts +13 -0
  334. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.html +39 -0
  335. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.scss +35 -0
  336. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.component.ts +17 -0
  337. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.module.ts +18 -0
  338. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/about/about.theme.scss +14 -0
  339. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home-routing.module.ts +17 -0
  340. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.html +1 -0
  341. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.scss +3 -0
  342. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.component.ts +21 -0
  343. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/home/home.module.ts +18 -0
  344. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main-routing.module.ts +32 -0
  345. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main-theme.scss +56 -0
  346. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.html +8 -0
  347. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.scss +1 -0
  348. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.component.ts +20 -0
  349. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/main.module.ts +22 -0
  350. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings-routing.module.ts +14 -0
  351. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.html +14 -0
  352. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.scss +44 -0
  353. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.component.ts +46 -0
  354. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/main/settings/settings.module.ts +18 -0
  355. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.html +1 -0
  356. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.scss +0 -0
  357. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Customer-card/Customer-card.component.ts +16 -0
  358. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.html +1 -0
  359. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.scss +0 -0
  360. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Item-card/Item-card.component.ts +16 -0
  361. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.html +1 -0
  362. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.scss +0 -0
  363. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Order-card/Order-card.component.ts +16 -0
  364. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.html +1 -0
  365. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.scss +0 -0
  366. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/Product-card/Product-card.component.ts +16 -0
  367. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/app.menu.config.ts +45 -0
  368. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/app.services.config.ts +5 -0
  369. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/constant.ts +4 -0
  370. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/app/shared/shared.module.ts +15 -0
  371. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/.gitkeep +0 -0
  372. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/css/app.scss +20 -0
  373. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/css/loader.css +173 -0
  374. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/i18n/en.json +44 -0
  375. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/i18n/es.json +42 -0
  376. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize128.png +0 -0
  377. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize16.png +0 -0
  378. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize256.png +0 -0
  379. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize32.png +0 -0
  380. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize48.png +0 -0
  381. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize64.png +0 -0
  382. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize72.png +0 -0
  383. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/icons/ontimize96.png +0 -0
  384. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/github.png +0 -0
  385. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/login_bg.png +0 -0
  386. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/no-image-transparent.png +0 -0
  387. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/no-image.png +0 -0
  388. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/ontimize.png +0 -0
  389. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/ontimize_web_log.png +0 -0
  390. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-closed.png +0 -0
  391. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-closed.svg +1 -0
  392. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-opened.png +0 -0
  393. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/sidenav-opened.svg +1 -0
  394. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/images/user_profile.png +0 -0
  395. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/js/domchange.js +110 -0
  396. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/assets/js/keyboard.js +24 -0
  397. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/environments/environment.prod.ts +11 -0
  398. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/environments/environment.ts +15 -0
  399. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/favicon.ico +0 -0
  400. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/index.html +30 -0
  401. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/main.ts +15 -0
  402. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/manifest.webmanifest +59 -0
  403. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/polyfills.ts +66 -0
  404. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/styles.scss +1 -0
  405. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/src/test.ts +16 -0
  406. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.app.json +18 -0
  407. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.json +25 -0
  408. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/app/tsconfig.spec.json +18 -0
  409. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/andrew.jpg +0 -0
  410. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/anne.jpg +0 -0
  411. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/janet.jpg +0 -0
  412. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/laura.jpg +0 -0
  413. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/margaret.jpg +0 -0
  414. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/michael.jpg +0 -0
  415. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/nancy.jpg +0 -0
  416. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/robert.jpg +0 -0
  417. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Employee/steven.jpg +0 -0
  418. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/beverages.gif +0 -0
  419. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/cereals.gif +0 -0
  420. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/condiments.gif +0 -0
  421. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/confections.gif +0 -0
  422. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/diary.gif +0 -0
  423. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/meat.gif +0 -0
  424. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/produce.gif +0 -0
  425. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/images/Product/seafood.gif +0 -0
  426. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/README.md +16 -0
  427. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/README_create_react_app.md +70 -0
  428. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/package-lock.json +18469 -0
  429. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/package.json +47 -0
  430. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/favicon.ico +0 -0
  431. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/index.html +43 -0
  432. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/logo192.png +0 -0
  433. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/logo512.png +0 -0
  434. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/manifest.json +25 -0
  435. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/public/robots.txt +3 -0
  436. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.css +38 -0
  437. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.js +80 -0
  438. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/App.test.js +8 -0
  439. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Config.js +527 -0
  440. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Customer.js +218 -0
  441. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Item.js +190 -0
  442. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Order.js +189 -0
  443. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/Product.js +159 -0
  444. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/app_loader.js +24 -0
  445. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/index.css +13 -0
  446. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/index.js +17 -0
  447. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/logo.svg +1 -0
  448. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/.eslintrc +5 -0
  449. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
  450. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/default-settings.js +25 -0
  451. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/default-settings.ts +25 -0
  452. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/errors.js +116 -0
  453. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/errors.ts +116 -0
  454. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/index.test.tsx +7 -0
  455. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/index.tsx +11 -0
  456. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
  457. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
  458. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/resourceLookup.js +124 -0
  459. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
  460. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/rav4-jsonapi-client/styles.module.css +9 -0
  461. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/reportWebVitals.js +13 -0
  462. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app/src/setupTests.js +5 -0
  463. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/README.md +20 -0
  464. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/README_create_react_app.md +72 -0
  465. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/package-lock.json +18469 -0
  466. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/package.json +47 -0
  467. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/product-cards.png +0 -0
  468. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/favicon.ico +0 -0
  469. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/index.html +43 -0
  470. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/logo192.png +0 -0
  471. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/logo512.png +0 -0
  472. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/manifest.json +25 -0
  473. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/public/robots.txt +3 -0
  474. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.css +38 -0
  475. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.js +80 -0
  476. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/App.test.js +8 -0
  477. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Config.js +527 -0
  478. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Customer.js +218 -0
  479. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Item.js +190 -0
  480. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Order.js +189 -0
  481. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/Product.js +241 -0
  482. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/app_loader.js +24 -0
  483. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/index.css +13 -0
  484. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/index.js +17 -0
  485. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/logo.svg +1 -0
  486. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/.eslintrc +5 -0
  487. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/.yarnrc.yml +4 -0
  488. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/default-settings.js +25 -0
  489. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/default-settings.ts +25 -0
  490. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/errors.js +116 -0
  491. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/errors.ts +116 -0
  492. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/index.test.tsx +7 -0
  493. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/index.tsx +11 -0
  494. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/ra-jsonapi-client.js +577 -0
  495. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/ra-jsonapi-client.ts +577 -0
  496. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/resourceLookup.js +124 -0
  497. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/resourceLookup.ts +124 -0
  498. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/rav4-jsonapi-client/styles.module.css +9 -0
  499. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/reportWebVitals.js +13 -0
  500. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/my-react-app-cards/src/setupTests.js +5 -0
  501. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/templates/bar_chart.jinja +64 -0
  502. api_logic_server_cli/prototypes/manager/samples/basic_demo/ui/templates/content.html +3 -0
  503. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/py.py +121 -0
  504. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/readme_venv.md +20 -0
  505. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/requirements-no-cli.txt +33 -0
  506. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv-linux.sh +28 -0
  507. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv.ps1 +21 -0
  508. api_logic_server_cli/prototypes/manager/samples/basic_demo/venv_setup/venv.sh +28 -0
  509. api_logic_server_cli/prototypes/manager/samples/dbs/readme_dbs.md +4 -4
  510. api_logic_server_cli/prototypes/manager/samples/readme_samples.md +13 -6
  511. api_logic_server_cli/prototypes/manager/system/Manager_workspace.code-workspace +3 -2
  512. {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/METADATA +1 -1
  513. {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/RECORD +517 -17
  514. api_logic_server_cli/prototypes/manager/.vscode/.copilot-instructions.md +0 -58
  515. api_logic_server_cli/prototypes/manager/.vscode/ApiLogicServer.code-workspace +0 -15
  516. {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/WHEEL +0 -0
  517. {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/entry_points.txt +0 -0
  518. {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/licenses/LICENSE +0 -0
  519. {apilogicserver-15.0.65.dist-info → apilogicserver-15.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,545 @@
1
+ """
2
+ A basic MCP Client Executor: takes a natural language query and:
3
+ 1. Discovers MCP servers (from mcp_server_discovery.json)
4
+ 2. Queries OpenAI's GPT-4 model to obtain the tool context, based on a provided schema and a natural language query
5
+ 3. Processes the tool context (calls the indicated MCP (als) endpoints)
6
+
7
+ To run:
8
+ 1. Start the server (F5), and:
9
+ 2. Run this:
10
+ 1. Terminal: python integration/mcp/mcp_client_executor.py
11
+ 2. Or, if you have installed SysMcp:
12
+ 1. curl -X 'POST' 'http://localhost:5656/api/SysMcp/' -H 'accept: application/vnd.api+json' -H 'Content-Type: application/json' -d '{ "data": { "attributes": {"request": "List the orders date_shipped is null and CreatedOn before 2023-07-14, and send a discount email (subject: '\''Discount Offer'\'') to the customer for each one."}, "type": "SysMcp"}}'
13
+ 2. Or, open the Admin App:
14
+ * List the orders date_shipped is null and CreatedOn before 2023-07-14, and send a discount email (subject: 'Discount Offer') to the customer for each one.
15
+
16
+ See: https://apilogicserver.github.io/Docs/Integration-MCP/
17
+ """
18
+
19
+ ################
20
+ # debug settings
21
+ ################
22
+
23
+ create_tool_context_from_llm = False
24
+ ''' set to False to bypass LLM call and OpenAI API Key requirement. '''
25
+
26
+ import os, logging, logging.config, sys
27
+ from pathlib import Path
28
+ from typing import Dict, List
29
+ import yaml
30
+
31
+ mcp_path = Path(os.path.abspath(os.path.dirname(__file__)))
32
+ project_path = mcp_path.parent.parent
33
+ sys.path.append(str(project_path)) # add project root to sys.path
34
+
35
+ import re
36
+ import json
37
+ from openai import OpenAIError
38
+ import openai
39
+ import requests
40
+ from flask import Flask, request, has_request_context
41
+
42
+ from logic_bank.logic_bank import Rule
43
+ from logic_bank.exec_row_logic.logic_row import LogicRow
44
+ from database import models
45
+ from logic_bank.util import ConstraintException
46
+
47
+ # Set your OpenAI API key
48
+ openai.api_key = os.getenv("APILOGICSERVER_CHATGPT_APIKEY")
49
+
50
+ log = logging.getLogger('integration.mcp')
51
+
52
+ default_query = "List customers with credit_limit > 1000."
53
+ default_query_email = "List the orders date_shipped is null and CreatedOn before 2023-07-14, and send a discount email (subject: 'Discount Offer') to the customer for each one."
54
+
55
+ def discover_mcp_servers() -> str:
56
+ """Discover MCP servers (aka 'tools'), and retrieve their API learnings and schemas.
57
+ This function performs the following steps:
58
+ 1. Reads a configuration file (`integration/mcp/mcp_server_discovery.json`) to obtain a list of available MCP servers.
59
+ 2. For each server, calls its `schema_url` endpoint to retrieve the MCP learnings_and_schema.
60
+ See: .well-known/mcp.json (see api/api_discovery/mcp_discovery.py)
61
+ 3. Logs the discovered servers and their schemas for informational purposes.
62
+
63
+ Raises:
64
+ FileNotFoundError: If the discovery configuration file is not found.
65
+ json.JSONDecodeError: If the configuration file contains invalid JSON.
66
+ requests.RequestException: If there is an error making HTTP requests to the schema URLs.
67
+
68
+ Returns:
69
+ learnings_and_schema: str
70
+ """
71
+
72
+ discovery_file_path = os.path.join(os.path.dirname(__file__), "../../integration/mcp/mcp_server_discovery.json")
73
+ try:
74
+ with open(discovery_file_path, "r") as discovery_file:
75
+ discovery_data = json.load(discovery_file)
76
+ log.info(f"\n1. Discovered MCP servers from config file: {discovery_file_path}:" + json.dumps(discovery_data, indent=4))
77
+ except FileNotFoundError:
78
+ log.info(f"Discovery file not found at {discovery_file_path}.")
79
+ except json.JSONDecodeError as e:
80
+ log.info(f"Error decoding JSON from {discovery_file_path}: {e}")
81
+
82
+ api_schema = {} # initialize api_schema to an empty dict
83
+ for each_server in discovery_data["servers"]:
84
+ discovery_url = each_server["schema_url"]
85
+
86
+ # Call the discovery_url to get the MCP/API schema
87
+ try:
88
+ response = requests.get(discovery_url)
89
+ if response.status_code == 200:
90
+ each_schema = response.json()
91
+ api_schema[discovery_url] = each_schema
92
+ if format_for_print := False:
93
+ each_schema["learning"] = each_schema['learning'].split('\n') # split learning into a list of lines
94
+ request_print = json.dumps(each_schema, indent=4)[0:1200] # limit for readability
95
+ request_print_schema = json.dumps(each_schema.get("resources", {}), indent=4)[0:200] + '\n... etc'
96
+ log.info(f"\n\nLearnings and Schema from discovery schema_url: {discovery_url}:\n" + request_print)
97
+ log.info(f' "resources":\n' + request_print_schema)
98
+ else:
99
+ log.info(f"Failed to retrieve API schema from {discovery_url}: {response.status_code}")
100
+ except requests.RequestException as e:
101
+ log.info(f"Error calling OpenAPI URL: {e}")
102
+ pass
103
+ debug_print = json.dumps(api_schema, indent=4)
104
+ return json.dumps(api_schema)
105
+
106
+
107
+
108
+ def query_llm_with_nl(learnings_and_schema: str, nl_query: str):
109
+ """
110
+ Query the LLM with a natural language query and schema text to generate a tool context block.
111
+
112
+ This returns a string like:
113
+ Natural language query:
114
+ List the orders date_shipped is null and CreatedOn before 2023-07-14, and send a discount email (subject: 'Discount Offer') to the customer for each one.
115
+ <docs/mcp_learning/mcp.prompt>
116
+ <docs/mcp_learning/mcp_schema.txt>
117
+
118
+ It handles both orchestration and simple GET requests.
119
+ """
120
+
121
+ global create_tool_context_from_llm
122
+
123
+ content = f"Natural language query:\n {nl_query}\n\nLearnings_and_Schema:\n{learnings_and_schema}"
124
+ messages = [
125
+ {
126
+ "role": "system",
127
+ "content": "You are an API planner that converts natural language queries into MCP Tool Context blocks using JSON:API. Return only the tool context as JSON."
128
+ },
129
+ {
130
+ "role": "user",
131
+ "content": f"{content}"
132
+ }
133
+ ]
134
+
135
+ request_print = content[0:1400] + '\n... etc from step 1' # limit for readability
136
+ log.debug("\n\n\n2a. LLM request:\n\n" + request_print)
137
+ schema_print = json.dumps(json.loads(learnings_and_schema), indent=4)[:400] # limit for readability
138
+ # log.debug(schema_print)
139
+
140
+ if create_tool_context_from_llm: # takes 2-3 seconds...
141
+ response = openai.chat.completions.create(
142
+ model="gpt-4",
143
+ messages=messages,
144
+ temperature=0.2
145
+ )
146
+ tool_context_str = response.choices[0].message.content
147
+ else: # this is so folks can try mcp without an OpenAI API key
148
+ # read integration/mcp/mcp_tool_context.json
149
+ tool_context_file_path = os.path.join(os.path.dirname(__file__), "../../integration/mcp/examples/mcp_tool_context_response_get.json")
150
+ if 'email' in nl_query:
151
+ tool_context_file_path = os.path.join(os.path.dirname(__file__), "../../integration/mcp/examples/mcp_tool_context_response.json")
152
+ try:
153
+ with open(tool_context_file_path, "r") as tool_context_file:
154
+ tool_context_str = tool_context_file.read()
155
+ log.info(f"\n\n2c. Tool context from file {tool_context_file_path}:\n" + tool_context_str)
156
+ except FileNotFoundError:
157
+ raise ConstraintException(f"Tool context file not found at {tool_context_file_path}.")
158
+
159
+
160
+ tool_context_str_no_cr = tool_context_str.replace("\n", '') # convert single quotes to double quotes
161
+ try:
162
+ tool_context = json.loads(tool_context_str_no_cr)
163
+ except json.JSONDecodeError:
164
+ print("Failed to decode JSON from response:\n" + tool_context_str)
165
+ return None
166
+
167
+ log.info(f"\n2b. generated tool context from LLM:\n" + json.dumps(tool_context, indent=4))
168
+
169
+ if "resources" not in tool_context:
170
+ raise ConstraintException("GenAI Error - LLM response does not contain 'resources'.")
171
+ return tool_context
172
+
173
+
174
+
175
+ def process_tool_context(tool_context):
176
+
177
+ log.info("\n3. MCP Client Executor – Starting Tool Context Execution\n")
178
+ context_results = []
179
+ ''' results from each step are appended to this list,
180
+ which is used to resolve variables in subsequent steps. '''
181
+
182
+
183
+ def get_query_param_filter(query_params):
184
+ """ return json:api filter
185
+
186
+ eg
187
+ curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"eq","val":null},{"name":"CreatedOn","op":"lt","val":"2023-07-14"}]'
188
+
189
+ curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"gt","val":"2023-07-14"}]'
190
+ curl -qg 'http://localhost:5656/api/Order?filter=[{"name":"date_shipped","op":"eq","val":null}]'
191
+ curl -qg 'http://localhost:5656/api/Customer?filter=[{"name":"credit_limit","op":"gt","val":"1000"}]'
192
+
193
+ query_params might be simple:
194
+ "query_params": [ {"name": "credit_limit", "op": "gt", "val": "1000"} ]
195
+ ==> ?filter=[{"name":"credit_limit","op":"gt","val":"1000"}]
196
+
197
+ or a list:
198
+ "query_params": [
199
+ {
200
+ "name": "date_shipped",
201
+ "op": "eq",
202
+ "val": None
203
+ },
204
+ {
205
+ "name": "date_created",
206
+ "op": "lt",
207
+ "val": "2023-07-14"
208
+ }
209
+ ],
210
+
211
+ """
212
+
213
+ added_rows = 0
214
+
215
+ query_param_filter = ''
216
+ assert isinstance(query_params, list), "Query Params filter expected to be a list"
217
+ query_param_filter = 'filter=' + str(query_params)
218
+ # use urlencode to convert to JSON:API format...
219
+ # val urllib.parse.quote() or urllib.parse.urlencode()
220
+ # tool instructions... filtering, email etc "null"
221
+ query_param_filter = query_param_filter.replace("'", '"') # convert single quotes to double quotes
222
+ query_param_filter = query_param_filter.replace("None", 'null')
223
+ query_param_filter = query_param_filter.replace('"null"', 'null')
224
+ # query_param_filter = query_param_filter.replace("date_created", 'CreatedOn') # TODO - why this name?
225
+ return query_param_filter # end get_query_param_filter
226
+
227
+ def substitute_vars(val, context, row=None, ref_index=None):
228
+ """
229
+ Substitutes variable references in a value using a provided context.
230
+
231
+ If `val` is a string starting with '$', attempts to parse it as a variable reference
232
+ of the form '$<step_idx>[*].<attr>' or '$<step_idx>.<attr>'. Retrieves the corresponding
233
+ value from the `context` list or from the `row` dictionary if the reference index matches.
234
+
235
+ Args:
236
+ val (Any): The value to substitute. If not a string or not a variable reference, returned as-is.
237
+ reference example: '$0[*].customer_id' or '$1.email'
238
+ context (list): A list of dictionaries or objects used for variable substitution.
239
+ The result list from prior step
240
+ Each item in the list is expected to be a dictionary with attributes that can be accessed.
241
+ row (dict, optional): A dictionary representing the current row, used if the reference index matches `ref_index`.
242
+ The current row (eg, order) dictionary for variable substitution.
243
+ ref_index (int, optional): The index to compare against the variable reference for row substitution.
244
+
245
+ Returns:
246
+ Any: The substituted value if a variable reference is found and resolved, otherwise the original value.
247
+ """
248
+ if isinstance(val, str) and val.startswith("$"):
249
+ match = re.match(r"\$(\d+)(\[\*\])?\.(\w+)", val)
250
+ if not match:
251
+ return val
252
+ step_idx, star, attr = match.groups()
253
+ step_idx = int(step_idx)
254
+ if enabled_fix_me := False and star: # TODO: fix this disabled code
255
+ return context[step_idx]
256
+ if row is not None and step_idx == ref_index:
257
+ return row['attributes'][attr] if attr in row['attributes'] else row.get(attr)
258
+ return context[step_idx].get(attr)
259
+ return val
260
+
261
+ def resolve_step(step, context, row=None, ref_index=None):
262
+ """
263
+ Resolves variables in the 'body' and 'query_params' fields of a step dictionary using the provided context, row, and ref_index.
264
+
265
+ Args:
266
+ step (dict): The step dictionary containing 'body' and 'query_params' fields, each as a list of field dictionaries.
267
+ context (dict): The context dictionary used for variable substitution. eg, the orders
268
+ row (dict, optional): An optional source row (eg, order) dictionary for variable substitution.
269
+ ref_index (int, optional): An optional reference index for variable substitution. Defaults to None.
270
+
271
+ Returns:
272
+ dict: A copy of the step dictionary with variables in 'body' and 'query_params' fields resolved.
273
+ """
274
+
275
+ def resolve_field_list(field_list):
276
+ """
277
+ Resolves a list of field dictionaries by substituting variables in their 'value' fields.
278
+
279
+ Each field in the input list is expected to be a dictionary containing a 'value' key.
280
+ The function applies the substitute_vars function to the 'value' of each field,
281
+ using the provided context, row, and ref_index, and returns a new list of fields
282
+ with the substituted values.
283
+
284
+ Args:
285
+ field_list (list of dict): A list of field dictionaries (eg, email post row), each containing at least a 'value' key, eg
286
+ {'subject': 'Discount Offer', 'message': 'You have a new discount offer', 'customer_id': '$0[*].customer_id'}
287
+
288
+ Returns:
289
+ list of dict: A new list of field dictionaries with the 'value' field updated after variable substitution.
290
+ """
291
+
292
+ # return dict(f, value=substitute_vars(f.get("value"), context, row, ref_index)) for f in field_list
293
+ resolved_fields = []
294
+ for field_name, field_value in field_list.items():
295
+ resolved_field = {}
296
+ resolved_field[field_name] = substitute_vars(field_value, context, row, ref_index)
297
+ resolved_fields.append(resolved_field)
298
+ return resolved_fields
299
+
300
+ step_copy = {**step}
301
+ step_copy["body"] = resolve_field_list(step.get("body", []))
302
+ if "query_params" in step_copy:
303
+ step_copy["query_params"] = resolve_field_list(step.get("query_params", []))
304
+ return step_copy
305
+
306
+ def find_fan_out_key(step):
307
+ """
308
+ Fan-out means that the step has a key pattern like '$<number>[*].<field_name>',
309
+ so the action (eg, send mail) is repeated for each item (eg, order) in the list at 'context[<number>]'.
310
+
311
+ Searches for a fan-out key pattern in the 'body' of the given step.
312
+
313
+ The function iterates over the fields in the 'body' of the step dictionary,
314
+ looking for a field whose 'value' is a string containing the pattern '[*]'.
315
+ If such a pattern is found and matches the format '$<number>[*].<field_name>',
316
+ it extracts and returns the number and field name as a tuple.
317
+
318
+ Args:
319
+ step (dict): A dictionary representing a step, expected to have a 'body' key
320
+ containing a list of field dictionaries with a 'value' key.
321
+
322
+ {.. 'body': {'subject': 'Discount Offer', 'message': 'You have a new discount offer', 'customer_id': '$0[*].customer_id'}
323
+
324
+ Returns:
325
+ tuple[int, str] or None: A tuple containing the integer index and the field name
326
+ if a matching pattern is found, otherwise None.
327
+ """
328
+ if 'body' in step:
329
+ body = step.get("body", [])
330
+ # iterate the body fields / values
331
+ # This loop checks each field in the body for a fan-out pattern
332
+ if body is not None:
333
+ for attr_name, attr_value in body.items():
334
+ if isinstance(attr_value, str) and "[*]" in attr_value:
335
+ match = re.match(r"\$(\d+)\[\*\]\.(\w+)", attr_value)
336
+ if match:
337
+ return int(match.group(1)), match.group(2)
338
+ # If the body is a list, iterate through each field
339
+ for field in body:
340
+ if isinstance(field["value"], str) and "[*]" in field["value"]: # string indices must be integers, not 'str'
341
+ match = re.match(r"\$(\d+)\[\*\]\.(\w+)", field["value"])
342
+ if match:
343
+ return int(match.group(1)), match.group(2)
344
+ return None
345
+
346
+
347
+ def call_llm(step, context, tool_context):
348
+ prompt = f"""
349
+ User Goal: {step.get('llm_goal')}
350
+ Step Result: {json.dumps(context[-1], indent=2)}
351
+
352
+ Based on this, generate the next tool_context step(s) as a JSON list.
353
+ """
354
+ try:
355
+ import openai
356
+ response = openai.chat.completions.create(
357
+ model="gpt-4",
358
+ messages=[{"role": "user", "content": prompt}],
359
+ temperature=0.0
360
+ )
361
+ return json.loads(response.choices[0].message.content)
362
+ except OpenAIError as e:
363
+ log.info(f"OpenAI error: {e}")
364
+ return []
365
+ except Exception as e:
366
+ log.info(f"Failed LLM call: {e}")
367
+ return []
368
+
369
+ def execute_api_step(step, step_num):
370
+ url = step["base_url"].rstrip("/") + "/" + step["path"].lstrip("/")
371
+ method = step["method"].upper()
372
+ # params = {p["name"]: p["val"] for p in step.get("query_params", [])}
373
+ params = get_query_param_filter(step.get("query_params", []))
374
+ # body = {p["name"]: p["value"] for p in step.get("body", [])} if step.get("body", []) else None # fixme: name?
375
+ body = {}
376
+ if step.get("body", []):
377
+ # eg: POST http://localhost:5656/api/SysEmail {'data': {'type': 'SysEmail', 'attributes': {'customer_id': 5, 'message': {'to': '{{ order.customer_id }}', 'subject': 'Discount for your order', 'body': 'Dear customer, you have a discount for your recent order. Thank you for shopping with us.'}}}}
378
+ body = {'data': {"type": step["path"].split("/")[-1], 'attributes': {}}} # eg: SysEmail
379
+ for each_field in step["body"]:
380
+ body['data']['attributes'].update(each_field) # each_field is a dict, eg: {'subject': 'Discount Offer', 'message': 'You have a new discount offer', 'customer_id': '$0[*].customer_id'}
381
+
382
+
383
+ log.info(f"\n\n➡️ MCP execute_api_step[{step_num}]:")
384
+ log.info(f" Method: {method} {url}")
385
+ log.info(f" Query: {params}")
386
+ log.info(f" Body: {body}\n")
387
+
388
+ headers = {}
389
+ if has_request_context():
390
+ headers = request.headers # get headers from Flask request context
391
+ else:
392
+ log.info("Warning: No Flask request context available. Some API calls may not work as expected.")
393
+ try:
394
+ resp = requests.request(method, url, headers=headers, json=body if method in ["POST", "PATCH"] else None, params=params)
395
+ resp.raise_for_status()
396
+ return resp.json()
397
+ except requests.RequestException as e:
398
+ log.info(f"❌ Request failed: {e}")
399
+ return {}
400
+
401
+ step_num = 0
402
+ steps = tool_context["resources"]
403
+ for each_step in steps:
404
+
405
+ if each_step.get("llm_call"):
406
+ log.info(f"\n🔁 LLM Call triggered at step {i}")
407
+ new_steps = call_llm(each_step, context_results, tool_context)
408
+ tool_context[i+1:i+1] = new_steps
409
+ i += 1
410
+ continue
411
+
412
+ fan_out = find_fan_out_key(each_step)
413
+ if fan_out:
414
+ ref_idx, attr = fan_out
415
+ fan_out_list = context_results[ref_idx]
416
+ if isinstance(fan_out_list, dict) and "data" in fan_out_list:
417
+ fan_out_list = fan_out_list["data"]
418
+ for row in fan_out_list:
419
+ resolved = resolve_step(each_step, context_results, row, ref_idx)
420
+ result = execute_api_step(resolved, step_num)
421
+ context_results.append(result)
422
+ else:
423
+ resolved = each_step if len(context_results) == 0 else resolve_step(each_step, context_results)
424
+ result = execute_api_step(resolved, step_num)
425
+ context_results.append(result)
426
+ step_num += 1
427
+
428
+ def print_json_as_table(json_data, step_index):
429
+ """Print JSON data in table format showing only data/attributes section with column headers."""
430
+ if not isinstance(json_data, dict):
431
+ log.info(f"\nStep {step_index}: Non-dict result - {json_data}")
432
+ return
433
+
434
+ # Extract data section
435
+ data = json_data.get('data', [])
436
+ if not data:
437
+ log.info(f"\nStep {step_index}: No data found in result")
438
+ return
439
+
440
+ # Handle both single item and list of items
441
+ if isinstance(data, dict):
442
+ data = [data]
443
+ elif not isinstance(data, list):
444
+ log.info(f"\nStep {step_index}: Data is not in expected format")
445
+ return
446
+
447
+ # Extract attributes from all items to get all possible columns
448
+ all_attributes = set()
449
+ attribute_rows = []
450
+
451
+ for item in data:
452
+ if isinstance(item, dict) and 'attributes' in item:
453
+ attributes = item['attributes']
454
+ all_attributes.update(attributes.keys())
455
+ attribute_rows.append(attributes)
456
+ else:
457
+ # If no attributes section, use the item directly
458
+ if isinstance(item, dict):
459
+ all_attributes.update(item.keys())
460
+ attribute_rows.append(item)
461
+
462
+ if not attribute_rows:
463
+ log.info(f"\nStep {step_index}: No attributes found in data")
464
+ return
465
+
466
+ # Sort columns for consistent display
467
+ columns = sorted(list(all_attributes))
468
+
469
+ # Calculate column widths
470
+ col_widths = {}
471
+ for col in columns:
472
+ col_widths[col] = max(len(str(col)),
473
+ max(len(str(row.get(col, ""))) for row in attribute_rows))
474
+
475
+ # Print table header
476
+ log.info(f"\nStep {step_index} - Results ({len(attribute_rows)} rows):")
477
+ header = "| " + " | ".join(col.ljust(col_widths[col]) for col in columns) + " |"
478
+ separator = "|" + "|".join("-" * (col_widths[col] + 2) for col in columns) + "|"
479
+
480
+ log.info(header)
481
+ log.info(separator)
482
+
483
+ # Print table rows
484
+ for row in attribute_rows:
485
+ row_str = "| " + " | ".join(str(row.get(col, "")).ljust(col_widths[col]) for col in columns) + " |"
486
+ log.info(row_str)
487
+
488
+ if print := True: # print context (which is just the GETs)
489
+ log.info("\n\n4. MCP Client Executor – Context Results:")
490
+ for each_context_result in context_results:
491
+ step_index = context_results.index(each_context_result)
492
+ print_json_as_table(each_context_result, step_index)
493
+ pass
494
+
495
+ log.info("\n✅ MCP Client Executor – All Steps Executed - Review Results Above")
496
+ log.info(".. 💡 Suggestion - Copy/Paste Response to a JsonFormatter\n")
497
+
498
+ return context_results
499
+
500
+
501
+
502
+ def mcp_client_executor(query: str):
503
+ """
504
+
505
+ #als: create an MCP request. See https://apilogicserver.github.io/Docs/Integration-MCP/
506
+
507
+ Test:
508
+ * als add-auth --provider-type=None
509
+ * curl -X 'POST' 'http://localhost:5656/api/SysMcp/' -H 'accept: application/vnd.api+json' -H 'Content-Type: application/json' -d '{ "data": { "attributes": {"request": "List the orders date_shipped is null and CreatedOn before 2023-07-14, and send a discount email (subject: '\''Discount Offer'\'') to the customer for each one."}, "type": "SysMcp"}}'
510
+
511
+ * Or, use the Admin App and insert a row into SysMCP (see default `query`, below)
512
+
513
+ Args:
514
+ query (str): The natural language query to process.
515
+ """
516
+
517
+ learnings_and_schema = discover_mcp_servers() # see: 1-discovery-from-als
518
+
519
+ tool_context = query_llm_with_nl(learnings_and_schema, query) # see: 2-tool-context-from-LLM
520
+
521
+ mcp_response = process_tool_context(tool_context) # see: 3-MCP-server response
522
+
523
+ log.info("\nTest complete.\n")
524
+
525
+ return tool_context, mcp_response
526
+
527
+
528
+ if __name__ == "__main__": # F5 to start API Logic Server
529
+
530
+ logging_config = f'{project_path}/config/logging.yml'
531
+ if os.getenv('APILOGICPROJECT_LOGGING_CONFIG'):
532
+ logging_config = project_path.joinpath(os.getenv("APILOGICPROJECT_LOGGING_CONFIG"))
533
+ with open(logging_config,'rt') as f: # see also logic/declare_logic.py
534
+ config=yaml.safe_load(f.read())
535
+ f.close()
536
+ logging.config.dictConfig(config) # log levels: notset 0, debug 10, info 20, warn 30, error 40, critical 50
537
+
538
+ query = default_query # default query if no argument is provided
539
+
540
+ if len(sys.argv) > 1: # if 1 non-blank argument, use it as the query
541
+ query = sys.argv[1]
542
+ if query == 'mcp':
543
+ query = default_query_email
544
+
545
+ mcp_client_executor(query)
@@ -0,0 +1,9 @@
1
+ {
2
+ "servers": [
3
+ {
4
+ "name": "API Logic Server: basic_demo",
5
+ "base_url": "http://localhost:5656",
6
+ "schema_url": "http://localhost:5656/.well-known/mcp.json"
7
+ }
8
+ ]
9
+ }
@@ -0,0 +1,9 @@
1
+ GenAI-Logic APIs are pre-configured to support MCP - see `api/api_discovery/mcp_discovery.py`.
2
+
3
+ `integration/mcp/mcp_client_executor.py` provides an mcp client executor. You can enable an MCP User Interface:
4
+
5
+ ```bash
6
+ genai-logic genai-add-mcp-client
7
+ ```
8
+
9
+ For more information, [click here](https://apilogicserver.github.io/Docs/Integration-MCP/#mcp-client-executor-ui).