monkeybrain-runtime 1.0.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 (838) hide show
  1. monkeybrain_runtime-1.0.0.dist-info/METADATA +76 -0
  2. monkeybrain_runtime-1.0.0.dist-info/RECORD +838 -0
  3. monkeybrain_runtime-1.0.0.dist-info/WHEEL +5 -0
  4. monkeybrain_runtime-1.0.0.dist-info/entry_points.txt +3 -0
  5. monkeybrain_runtime-1.0.0.dist-info/top_level.txt +2 -0
  6. services/__init__.py +8 -0
  7. services/agentos/__init__.py +0 -0
  8. services/agentos/main.py +1 -0
  9. services/assets/helpers/__init__.py +12 -0
  10. services/assets/helpers/device.py +59 -0
  11. services/assets/helpers/equipment.py +179 -0
  12. services/assets/helpers/instruments.py +72 -0
  13. services/assets/helpers/machines.py +183 -0
  14. services/assets/helpers/materials.py +76 -0
  15. services/assets/helpers/parts.py +116 -0
  16. services/assets/helpers/plc.py +134 -0
  17. services/assets/helpers/tags.py +108 -0
  18. services/assets/helpers/tools.py +101 -0
  19. services/assets/main.py +75 -0
  20. services/assets/models/__init__.py +12 -0
  21. services/assets/models/device.py +79 -0
  22. services/assets/models/equipment.py +222 -0
  23. services/assets/models/instruments.py +85 -0
  24. services/assets/models/machines.py +230 -0
  25. services/assets/models/material.py +266 -0
  26. services/assets/models/parts.py +96 -0
  27. services/assets/models/plc.py +264 -0
  28. services/assets/models/tags.py +76 -0
  29. services/assets/models/tools.py +179 -0
  30. services/assets/routers/__init__.py +12 -0
  31. services/assets/routers/classes.py +65 -0
  32. services/assets/routers/device.py +86 -0
  33. services/assets/routers/equipment.py +145 -0
  34. services/assets/routers/families.py +61 -0
  35. services/assets/routers/instruments.py +70 -0
  36. services/assets/routers/machines.py +136 -0
  37. services/assets/routers/materials.py +105 -0
  38. services/assets/routers/parts.py +130 -0
  39. services/assets/routers/plc.py +94 -0
  40. services/assets/routers/subclasses.py +68 -0
  41. services/assets/routers/tags.py +138 -0
  42. services/assets/routers/tools.py +113 -0
  43. services/auth/helpers/__init__.py +13 -0
  44. services/auth/helpers/approval_decisions.py +261 -0
  45. services/auth/helpers/audit_elasticsearch_sync.py +350 -0
  46. services/auth/helpers/departments.py +53 -0
  47. services/auth/helpers/graph_store.py +848 -0
  48. services/auth/helpers/influx_store.py +280 -0
  49. services/auth/helpers/me.py +33 -0
  50. services/auth/helpers/nats_consumer.py +618 -0
  51. services/auth/helpers/nats_store.py +242 -0
  52. services/auth/helpers/permissions.py +62 -0
  53. services/auth/helpers/roles.py +87 -0
  54. services/auth/helpers/store.py +54 -0
  55. services/auth/helpers/team_members.py +155 -0
  56. services/auth/helpers/teams.py +87 -0
  57. services/auth/helpers/tokens.py +71 -0
  58. services/auth/helpers/users.py +119 -0
  59. services/auth/helpers/websocket_broadcast.py +41 -0
  60. services/auth/main.py +88 -0
  61. services/auth/models/__init__.py +12 -0
  62. services/auth/models/departments.py +55 -0
  63. services/auth/models/login.py +20 -0
  64. services/auth/models/permissions.py +61 -0
  65. services/auth/models/roles.py +53 -0
  66. services/auth/models/session.py +26 -0
  67. services/auth/models/teamMembers.py +59 -0
  68. services/auth/models/teams.py +56 -0
  69. services/auth/models/users.py +77 -0
  70. services/auth/routers/__init__.py +14 -0
  71. services/auth/routers/auth.py +3839 -0
  72. services/auth/routers/departments.py +84 -0
  73. services/auth/routers/integration_config.py +703 -0
  74. services/auth/routers/me.py +28 -0
  75. services/auth/routers/permissions.py +96 -0
  76. services/auth/routers/roles.py +139 -0
  77. services/auth/routers/session.py +224 -0
  78. services/auth/routers/team_members.py +152 -0
  79. services/auth/routers/teams.py +112 -0
  80. services/auth/routers/users.py +131 -0
  81. services/auth/routers/websocket_events.py +247 -0
  82. services/batch_execution/__init__.py +19 -0
  83. services/batch_execution/pipeline_triggers/__init__.py +53 -0
  84. services/batch_execution/pipeline_triggers/pipeline_parameter_adjuster.py +440 -0
  85. services/batch_execution/pipeline_triggers/pipeline_trigger_engine.py +445 -0
  86. services/batch_execution/pipeline_triggers/re_evaluation_queue.py +341 -0
  87. services/batch_execution/pipeline_triggers/test_phase3_implementation.py +553 -0
  88. services/batch_execution/pipeline_triggers/workflow_reevaluator.py +367 -0
  89. services/batch_execution/smoke_test_e2e_feedback_loop.py +704 -0
  90. services/batch_execution/workflow_executor.py +478 -0
  91. services/changeover/helpers/__init__.py +11 -0
  92. services/changeover/helpers/changeover.py +87 -0
  93. services/changeover/helpers/changeover_common.py +55 -0
  94. services/changeover/helpers/changeover_events.py +66 -0
  95. services/changeover/helpers/changeover_kpis.py +33 -0
  96. services/changeover/helpers/changeover_matrix.py +60 -0
  97. services/changeover/helpers/changeover_procedures.py +164 -0
  98. services/changeover/helpers/changeover_windows.py +96 -0
  99. services/changeover/main.py +52 -0
  100. services/changeover/models/__init__.py +11 -0
  101. services/changeover/models/changeover.py +73 -0
  102. services/changeover/models/changeover_events.py +142 -0
  103. services/changeover/models/changeover_kpis.py +75 -0
  104. services/changeover/models/changeover_matrix.py +63 -0
  105. services/changeover/models/changeover_procedures.py +108 -0
  106. services/changeover/models/changeover_tasks.py +87 -0
  107. services/changeover/models/changeover_windows.py +72 -0
  108. services/changeover/routers/__init__.py +9 -0
  109. services/changeover/routers/changeover_events.py +127 -0
  110. services/changeover/routers/changeover_kpis.py +80 -0
  111. services/changeover/routers/changeover_matrix.py +80 -0
  112. services/changeover/routers/changeover_procedures.py +118 -0
  113. services/changeover/routers/changeover_windows.py +98 -0
  114. services/common/__init__.py +2 -0
  115. services/common/approval_chains.py +648 -0
  116. services/common/auth.py +56 -0
  117. services/common/cdc.py +52 -0
  118. services/common/compat.py +217 -0
  119. services/common/compliance.py +562 -0
  120. services/common/config.py +134 -0
  121. services/common/cors.py +17 -0
  122. services/common/data_transformation.py +195 -0
  123. services/common/db.py +577 -0
  124. services/common/embeddings.py +97 -0
  125. services/common/event_reducers.py +194 -0
  126. services/common/event_types.py +51 -0
  127. services/common/integration_ingestion.py +169 -0
  128. services/common/logging.py +204 -0
  129. services/common/models/__init__.py +2 -0
  130. services/common/models/databricks.py +25 -0
  131. services/common/models/enums.py +64 -0
  132. services/common/module_control.py +422 -0
  133. services/common/mongo_cdc_watcher.py +106 -0
  134. services/common/n8n_auth.py +22 -0
  135. services/common/neo4j_mirror.py +1087 -0
  136. services/common/ontology_registry.py +110 -0
  137. services/common/reasoning_traces.py +52 -0
  138. services/common/supply_chain_cdc.py +555 -0
  139. services/common/tracing.py +159 -0
  140. services/common/utils.py +30 -0
  141. services/customers/helpers/__init__.py +8 -0
  142. services/customers/helpers/customer_details.py +64 -0
  143. services/customers/helpers/customer_metadata.py +64 -0
  144. services/customers/helpers/customer_order_metrics.py +67 -0
  145. services/customers/helpers/customer_payment_data.py +67 -0
  146. services/customers/main.py +50 -0
  147. services/customers/models/__init__.py +8 -0
  148. services/customers/models/customer_details.py +42 -0
  149. services/customers/models/customer_metadata.py +97 -0
  150. services/customers/models/customer_order_metrics.py +86 -0
  151. services/customers/models/customer_payment_data.py +60 -0
  152. services/customers/routers/__init__.py +8 -0
  153. services/customers/routers/customer_details.py +88 -0
  154. services/customers/routers/customer_metadata.py +88 -0
  155. services/customers/routers/customer_order_metrics.py +88 -0
  156. services/customers/routers/customer_payment_data.py +88 -0
  157. services/documents/__init__.py +1 -0
  158. services/documents/helpers/__init__.py +6 -0
  159. services/documents/helpers/document_metadata.py +569 -0
  160. services/documents/helpers/document_workflows.py +215 -0
  161. services/documents/helpers/report_templates.py +113 -0
  162. services/documents/main.py +49 -0
  163. services/documents/models/__init__.py +6 -0
  164. services/documents/models/document_metadata.py +215 -0
  165. services/documents/models/document_workflows.py +136 -0
  166. services/documents/models/report_templates.py +132 -0
  167. services/documents/routers/__init__.py +6 -0
  168. services/documents/routers/document_metadata.py +654 -0
  169. services/documents/routers/document_workflows.py +146 -0
  170. services/documents/routers/report_templates.py +86 -0
  171. services/events/helpers/__init__.py +5 -0
  172. services/events/helpers/events.py +394 -0
  173. services/events/main.py +40 -0
  174. services/events/models/__init__.py +5 -0
  175. services/events/models/events.py +50 -0
  176. services/events/routers/__init__.py +6 -0
  177. services/events/routers/count_events.py +109 -0
  178. services/events/routers/events.py +75 -0
  179. services/events/seed_events.py +196 -0
  180. services/facilities/helpers/__init__.py +8 -0
  181. services/facilities/helpers/lines.py +74 -0
  182. services/facilities/helpers/locations.py +231 -0
  183. services/facilities/helpers/plants.py +59 -0
  184. services/facilities/helpers/stages.py +110 -0
  185. services/facilities/helpers/workstation.py +213 -0
  186. services/facilities/main.py +60 -0
  187. services/facilities/models/__init__.py +10 -0
  188. services/facilities/models/industrialLine.py +72 -0
  189. services/facilities/models/industrialPlant.py +164 -0
  190. services/facilities/models/locations.py +74 -0
  191. services/facilities/models/stages.py +92 -0
  192. services/facilities/models/worker.py +73 -0
  193. services/facilities/models/workstation.py +117 -0
  194. services/facilities/models/workstation_live_state.py +59 -0
  195. services/facilities/routers/__init__.py +8 -0
  196. services/facilities/routers/bays.py +81 -0
  197. services/facilities/routers/buildings.py +92 -0
  198. services/facilities/routers/floors.py +81 -0
  199. services/facilities/routers/lines.py +154 -0
  200. services/facilities/routers/locations.py +208 -0
  201. services/facilities/routers/plant.py +203 -0
  202. services/facilities/routers/rooms.py +81 -0
  203. services/facilities/routers/stages.py +152 -0
  204. services/facilities/routers/workstation.py +173 -0
  205. services/file/backup.py +71 -0
  206. services/file/main.py +45 -0
  207. services/file/recieve.py +54 -0
  208. services/file/send.py +55 -0
  209. services/file/src/core/config.py +90 -0
  210. services/file/src/core/keycloak.py +152 -0
  211. services/file/src/core/logging_config.py +9 -0
  212. services/file/src/core/security.py +33 -0
  213. services/file/src/helpers/cad_conversion.py +331 -0
  214. services/file/src/helpers/helpers.py +825 -0
  215. services/file/src/routes/cad_conversion.py +26 -0
  216. services/file/src/routes/files.py +136 -0
  217. services/file/src/routes/presigned.py +154 -0
  218. services/file/src/services/websocket.py +293 -0
  219. services/floor_layout/helpers/__init__.py +8 -0
  220. services/floor_layout/helpers/bays.py +92 -0
  221. services/floor_layout/helpers/buildings.py +54 -0
  222. services/floor_layout/helpers/floors.py +65 -0
  223. services/floor_layout/helpers/rooms.py +76 -0
  224. services/floor_layout/main.py +52 -0
  225. services/floor_layout/models/__init__.py +8 -0
  226. services/floor_layout/models/bays.py +65 -0
  227. services/floor_layout/models/buildings.py +52 -0
  228. services/floor_layout/models/floors.py +45 -0
  229. services/floor_layout/models/rooms.py +61 -0
  230. services/floor_layout/routers/__init__.py +9 -0
  231. services/floor_layout/routers/bays.py +143 -0
  232. services/floor_layout/routers/buildings.py +116 -0
  233. services/floor_layout/routers/floors.py +89 -0
  234. services/floor_layout/routers/locations.py +80 -0
  235. services/floor_layout/routers/rooms.py +134 -0
  236. services/inventory/helpers/__init__.py +13 -0
  237. services/inventory/helpers/cycle_counts.py +124 -0
  238. services/inventory/helpers/inventory_allocations.py +134 -0
  239. services/inventory/helpers/inventory_item_counts.py +114 -0
  240. services/inventory/helpers/inventory_item_quantities.py +114 -0
  241. services/inventory/helpers/inventory_items.py +103 -0
  242. services/inventory/helpers/inventory_stage_outputs.py +134 -0
  243. services/inventory/helpers/inventory_transactions.py +112 -0
  244. services/inventory/helpers/stock_adjustment_requests.py +101 -0
  245. services/inventory/helpers/warehouse_cycle_counts.py +133 -0
  246. services/inventory/helpers/warehouse_locations.py +213 -0
  247. services/inventory/helpers/warehouse_regulated_records.py +123 -0
  248. services/inventory/main.py +62 -0
  249. services/inventory/models/__init__.py +17 -0
  250. services/inventory/models/cycle_counts.py +99 -0
  251. services/inventory/models/inventory_allocations.py +121 -0
  252. services/inventory/models/inventory_common.py +65 -0
  253. services/inventory/models/inventory_enums.py +21 -0
  254. services/inventory/models/inventory_item_count.py +65 -0
  255. services/inventory/models/inventory_item_quantity.py +82 -0
  256. services/inventory/models/inventory_items.py +168 -0
  257. services/inventory/models/inventory_responses.py +44 -0
  258. services/inventory/models/inventory_stage_outputs.py +96 -0
  259. services/inventory/models/inventory_state.py +15 -0
  260. services/inventory/models/inventory_transactions.py +80 -0
  261. services/inventory/models/stock_adjustment_requests.py +109 -0
  262. services/inventory/models/warehouse_cycle_counts.py +119 -0
  263. services/inventory/models/warehouse_location_models.py +708 -0
  264. services/inventory/models/warehouse_regulated_records.py +358 -0
  265. services/inventory/routers/__init__.py +13 -0
  266. services/inventory/routers/cycle_counts.py +106 -0
  267. services/inventory/routers/inventory_allocations.py +125 -0
  268. services/inventory/routers/inventory_item_counts.py +105 -0
  269. services/inventory/routers/inventory_item_quantities.py +105 -0
  270. services/inventory/routers/inventory_items.py +109 -0
  271. services/inventory/routers/inventory_stage_outputs.py +122 -0
  272. services/inventory/routers/inventory_transactions.py +96 -0
  273. services/inventory/routers/stock_adjustment_requests.py +124 -0
  274. services/inventory/routers/warehouse_cycle_counts.py +124 -0
  275. services/inventory/routers/warehouse_locations.py +426 -0
  276. services/inventory/routers/warehouse_regulated_records.py +273 -0
  277. services/iot/helpers/__init__.py +8 -0
  278. services/iot/helpers/ble_device.py +87 -0
  279. services/iot/helpers/mqtt_bridge.py +115 -0
  280. services/iot/helpers/sensor_readings.py +63 -0
  281. services/iot/helpers/sensors.py +77 -0
  282. services/iot/helpers/servers.py +72 -0
  283. services/iot/helpers/uwb_device.py +95 -0
  284. services/iot/main.py +53 -0
  285. services/iot/models/__init__.py +8 -0
  286. services/iot/models/ble_device.py +118 -0
  287. services/iot/models/sensors.py +256 -0
  288. services/iot/models/servers.py +206 -0
  289. services/iot/models/uwb_device.py +106 -0
  290. services/iot/routers/__init__.py +8 -0
  291. services/iot/routers/ble_device.py +110 -0
  292. services/iot/routers/sensors.py +144 -0
  293. services/iot/routers/servers.py +141 -0
  294. services/iot/routers/uwb_device.py +148 -0
  295. services/module_control/__init__.py +1 -0
  296. services/module_control/helpers/__init__.py +1 -0
  297. services/module_control/helpers/integration_config.py +243 -0
  298. services/module_control/helpers/security.py +104 -0
  299. services/module_control/main.py +44 -0
  300. services/module_control/models/__init__.py +1 -0
  301. services/module_control/models/module_control.py +65 -0
  302. services/module_control/routers/__init__.py +1 -0
  303. services/module_control/routers/module_control.py +219 -0
  304. services/orders/helpers/__init__.py +11 -0
  305. services/orders/helpers/invoices.py +123 -0
  306. services/orders/helpers/order_customer_metrics.py +61 -0
  307. services/orders/helpers/order_details.py +71 -0
  308. services/orders/helpers/order_metadata.py +61 -0
  309. services/orders/helpers/order_payment_metadata.py +74 -0
  310. services/orders/helpers/orders.py +119 -0
  311. services/orders/helpers/sales_orders.py +136 -0
  312. services/orders/main.py +56 -0
  313. services/orders/models/__init__.py +11 -0
  314. services/orders/models/invoices.py +415 -0
  315. services/orders/models/order_customer_metrics.py +78 -0
  316. services/orders/models/order_details.py +46 -0
  317. services/orders/models/order_metadata.py +60 -0
  318. services/orders/models/order_payment_metadata.py +63 -0
  319. services/orders/models/orders.py +64 -0
  320. services/orders/models/sales_orders.py +130 -0
  321. services/orders/routers/__init__.py +11 -0
  322. services/orders/routers/invoices.py +111 -0
  323. services/orders/routers/order_customer_metrics.py +87 -0
  324. services/orders/routers/order_details.py +87 -0
  325. services/orders/routers/order_metadata.py +87 -0
  326. services/orders/routers/order_payment_metadata.py +87 -0
  327. services/orders/routers/orders.py +74 -0
  328. services/orders/routers/sales_orders.py +111 -0
  329. services/pm/helpers/__init__.py +14 -0
  330. services/pm/helpers/calendar_bookings.py +114 -0
  331. services/pm/helpers/calibration_point.py +110 -0
  332. services/pm/helpers/calibrations.py +196 -0
  333. services/pm/helpers/checklists.py +318 -0
  334. services/pm/helpers/cleaning.py +333 -0
  335. services/pm/helpers/downtime.py +376 -0
  336. services/pm/helpers/kanban_boards.py +186 -0
  337. services/pm/helpers/maintainance.py +177 -0
  338. services/pm/helpers/sop.py +1155 -0
  339. services/pm/helpers/sop_cdc.py +324 -0
  340. services/pm/helpers/weekly_schedules.py +79 -0
  341. services/pm/main.py +62 -0
  342. services/pm/models/__init__.py +14 -0
  343. services/pm/models/calendar_booking.py +82 -0
  344. services/pm/models/calibration_point.py +44 -0
  345. services/pm/models/calibrations.py +167 -0
  346. services/pm/models/checklists.py +117 -0
  347. services/pm/models/cleaning.py +203 -0
  348. services/pm/models/downtime.py +109 -0
  349. services/pm/models/kanban_board.py +178 -0
  350. services/pm/models/maintainanceLog.py +148 -0
  351. services/pm/models/sop.py +152 -0
  352. services/pm/models/weekly_schedule.py +91 -0
  353. services/pm/routers/__init__.py +14 -0
  354. services/pm/routers/calendar_bookings.py +143 -0
  355. services/pm/routers/calibration_point.py +94 -0
  356. services/pm/routers/calibrations.py +232 -0
  357. services/pm/routers/checklists.py +188 -0
  358. services/pm/routers/cleaning.py +127 -0
  359. services/pm/routers/downtime.py +143 -0
  360. services/pm/routers/kanban_boards.py +283 -0
  361. services/pm/routers/maintainance.py +241 -0
  362. services/pm/routers/sop.py +437 -0
  363. services/pm/routers/weekly_schedules.py +108 -0
  364. services/process_definitions/helpers/__init__.py +11 -0
  365. services/process_definitions/helpers/cpp_cqa_registry.py +120 -0
  366. services/process_definitions/helpers/mbmr_templates.py +107 -0
  367. services/process_definitions/helpers/packing_instructions.py +113 -0
  368. services/process_definitions/helpers/process_constraints.py +495 -0
  369. services/process_definitions/helpers/process_corrections.py +279 -0
  370. services/process_definitions/helpers/process_definition.py +996 -0
  371. services/process_definitions/helpers/process_node_catalog.py +786 -0
  372. services/process_definitions/helpers/process_post_checks.py +441 -0
  373. services/process_definitions/helpers/process_pre_checks.py +351 -0
  374. services/process_definitions/helpers/process_steps.py +220 -0
  375. services/process_definitions/main.py +71 -0
  376. services/process_definitions/models/__init__.py +13 -0
  377. services/process_definitions/models/cpp_cqa_registry.py +145 -0
  378. services/process_definitions/models/gxp_change_controls.py +38 -0
  379. services/process_definitions/models/gxp_risk_assessments.py +30 -0
  380. services/process_definitions/models/gxp_validation_evidence.py +33 -0
  381. services/process_definitions/models/mbmr_templates.py +173 -0
  382. services/process_definitions/models/packing_instructions.py +176 -0
  383. services/process_definitions/models/process_constraints.py +159 -0
  384. services/process_definitions/models/process_corrections.py +118 -0
  385. services/process_definitions/models/process_definition.py +685 -0
  386. services/process_definitions/models/process_definition_common.py +48 -0
  387. services/process_definitions/models/process_node_catalog.py +25 -0
  388. services/process_definitions/models/process_post_checks.py +171 -0
  389. services/process_definitions/models/process_pre_checks.py +168 -0
  390. services/process_definitions/models/process_steps.py +170 -0
  391. services/process_definitions/node_services/__init__.py +8 -0
  392. services/process_definitions/node_services/common.py +95 -0
  393. services/process_definitions/node_services/executor.py +499 -0
  394. services/process_definitions/node_services/flow_simulator.py +733 -0
  395. services/process_definitions/node_services/functions.py +193 -0
  396. services/process_definitions/node_services/messaging.py +44 -0
  397. services/process_definitions/node_services/models.py +221 -0
  398. services/process_definitions/node_services/network.py +161 -0
  399. services/process_definitions/node_services/parsers.py +87 -0
  400. services/process_definitions/node_services/sequence.py +95 -0
  401. services/process_definitions/node_services/storage.py +50 -0
  402. services/process_definitions/node_services/webhooks.py +52 -0
  403. services/process_definitions/routers/__init__.py +10 -0
  404. services/process_definitions/routers/cpp_cqa_registry.py +86 -0
  405. services/process_definitions/routers/mbmr_templates.py +84 -0
  406. services/process_definitions/routers/packing_instructions.py +84 -0
  407. services/process_definitions/routers/process_constraints.py +564 -0
  408. services/process_definitions/routers/process_corrections.py +343 -0
  409. services/process_definitions/routers/process_definition.py +992 -0
  410. services/process_definitions/routers/process_post_checks.py +529 -0
  411. services/process_definitions/routers/process_pre_checks.py +435 -0
  412. services/process_definitions/routers/process_steps.py +274 -0
  413. services/procurement/helpers/__init__.py +9 -0
  414. services/procurement/helpers/goods_receipts.py +240 -0
  415. services/procurement/helpers/purchase_order_shipping_information.py +85 -0
  416. services/procurement/helpers/purchase_orders.py +68 -0
  417. services/procurement/helpers/quality_control.py +235 -0
  418. services/procurement/helpers/sampling.py +404 -0
  419. services/procurement/main.py +52 -0
  420. services/procurement/models/__init__.py +9 -0
  421. services/procurement/models/goods_receipts.py +165 -0
  422. services/procurement/models/purchase_orders.py +54 -0
  423. services/procurement/models/quality_control.py +464 -0
  424. services/procurement/models/reinspection_records.py +28 -0
  425. services/procurement/models/sampling.py +262 -0
  426. services/procurement/models/shipping_information.py +51 -0
  427. services/procurement/routers/__init__.py +9 -0
  428. services/procurement/routers/goods_receipts.py +201 -0
  429. services/procurement/routers/purchase_orders.py +106 -0
  430. services/procurement/routers/quality_control.py +386 -0
  431. services/procurement/routers/sampling.py +296 -0
  432. services/procurement/routers/shipping_information.py +97 -0
  433. services/production/__init__.py +1 -0
  434. services/production/agents/__init__.py +5 -0
  435. services/production/agents/batch_planning_agent.py +815 -0
  436. services/production/models/__init__.py +25 -0
  437. services/production/models/batch.py +253 -0
  438. services/products/helpers/__init__.py +10 -0
  439. services/products/helpers/boms.py +100 -0
  440. services/products/helpers/drug_research.py +644 -0
  441. services/products/helpers/product_component.py +168 -0
  442. services/products/helpers/product_inventory.py +221 -0
  443. services/products/helpers/product_pricing.py +123 -0
  444. services/products/helpers/product_utils.py +32 -0
  445. services/products/helpers/products.py +81 -0
  446. services/products/main.py +59 -0
  447. services/products/models/__init__.py +9 -0
  448. services/products/models/drug_research.py +138 -0
  449. services/products/models/product_common.py +60 -0
  450. services/products/models/product_component.py +1028 -0
  451. services/products/models/product_inventory.py +118 -0
  452. services/products/models/product_pricing.py +73 -0
  453. services/products/models/products.py +151 -0
  454. services/products/routers/__init__.py +9 -0
  455. services/products/routers/boms.py +116 -0
  456. services/products/routers/drug_research.py +115 -0
  457. services/products/routers/product_components.py +123 -0
  458. services/products/routers/product_inventory.py +185 -0
  459. services/products/routers/product_pricing.py +136 -0
  460. services/products/routers/products.py +165 -0
  461. services/replenishment/__init__.py +1 -0
  462. services/replenishment/main.py +46 -0
  463. services/replenishment/routers/__init__.py +1 -0
  464. services/replenishment/routers/replenishment.py +20 -0
  465. services/shifts/helpers/__init__.py +7 -0
  466. services/shifts/helpers/shift_templates.py +124 -0
  467. services/shifts/helpers/shifts.py +79 -0
  468. services/shifts/helpers/timesheets.py +137 -0
  469. services/shifts/main.py +48 -0
  470. services/shifts/models/__init__.py +8 -0
  471. services/shifts/models/shift.py +62 -0
  472. services/shifts/models/shift_template.py +82 -0
  473. services/shifts/models/time_range.py +31 -0
  474. services/shifts/models/timesheet.py +196 -0
  475. services/shifts/routers/__init__.py +7 -0
  476. services/shifts/routers/shift_templates.py +97 -0
  477. services/shifts/routers/shifts.py +117 -0
  478. services/shifts/routers/timesheets.py +117 -0
  479. services/shipping/helpers/__init__.py +15 -0
  480. services/shipping/helpers/carrier.py +78 -0
  481. services/shipping/helpers/customs_declaration.py +104 -0
  482. services/shipping/helpers/delivery_note.py +99 -0
  483. services/shipping/helpers/package.py +95 -0
  484. services/shipping/helpers/pallet.py +85 -0
  485. services/shipping/helpers/route.py +93 -0
  486. services/shipping/helpers/shipping_information.py +82 -0
  487. services/shipping/helpers/shipping_provider_details.py +59 -0
  488. services/shipping/helpers/shipping_provider_metadata.py +59 -0
  489. services/shipping/helpers/vehicle.py +85 -0
  490. services/shipping/helpers/waybill.py +86 -0
  491. services/shipping/main.py +64 -0
  492. services/shipping/models/__init__.py +15 -0
  493. services/shipping/models/carrier.py +97 -0
  494. services/shipping/models/customs_declaration.py +138 -0
  495. services/shipping/models/delivery_note.py +163 -0
  496. services/shipping/models/package.py +152 -0
  497. services/shipping/models/pallet.py +137 -0
  498. services/shipping/models/route.py +120 -0
  499. services/shipping/models/shipping_information.py +55 -0
  500. services/shipping/models/shipping_provider_details.py +42 -0
  501. services/shipping/models/shipping_provider_metadata.py +54 -0
  502. services/shipping/models/vehicle.py +129 -0
  503. services/shipping/models/waybill.py +189 -0
  504. services/shipping/routers/__init__.py +15 -0
  505. services/shipping/routers/carrier.py +99 -0
  506. services/shipping/routers/customs_declaration.py +132 -0
  507. services/shipping/routers/delivery_note.py +150 -0
  508. services/shipping/routers/package.py +141 -0
  509. services/shipping/routers/pallet.py +108 -0
  510. services/shipping/routers/route.py +128 -0
  511. services/shipping/routers/shipping_information.py +97 -0
  512. services/shipping/routers/shipping_provider_details.py +80 -0
  513. services/shipping/routers/shipping_provider_metadata.py +80 -0
  514. services/shipping/routers/vehicle.py +117 -0
  515. services/shipping/routers/waybill.py +119 -0
  516. services/suppliers/helpers/__init__.py +13 -0
  517. services/suppliers/helpers/supplier_capabilities.py +58 -0
  518. services/suppliers/helpers/supplier_certifications.py +67 -0
  519. services/suppliers/helpers/supplier_details.py +58 -0
  520. services/suppliers/helpers/supplier_financials.py +58 -0
  521. services/suppliers/helpers/supplier_inventory.py +74 -0
  522. services/suppliers/helpers/supplier_locations.py +60 -0
  523. services/suppliers/helpers/supplier_pricing.py +69 -0
  524. services/suppliers/helpers/supplier_quality.py +69 -0
  525. services/suppliers/helpers/supplier_shipping.py +69 -0
  526. services/suppliers/main.py +60 -0
  527. services/suppliers/models/__init__.py +13 -0
  528. services/suppliers/models/supplier_capabilities.py +70 -0
  529. services/suppliers/models/supplier_certifications.py +64 -0
  530. services/suppliers/models/supplier_details.py +75 -0
  531. services/suppliers/models/supplier_financials.py +69 -0
  532. services/suppliers/models/supplier_inventory.py +76 -0
  533. services/suppliers/models/supplier_locations.py +70 -0
  534. services/suppliers/models/supplier_pricing.py +74 -0
  535. services/suppliers/models/supplier_quality.py +74 -0
  536. services/suppliers/models/supplier_shipping.py +76 -0
  537. services/suppliers/routers/__init__.py +13 -0
  538. services/suppliers/routers/supplier_capabilities.py +88 -0
  539. services/suppliers/routers/supplier_certifications.py +87 -0
  540. services/suppliers/routers/supplier_details.py +83 -0
  541. services/suppliers/routers/supplier_financials.py +83 -0
  542. services/suppliers/routers/supplier_inventory.py +105 -0
  543. services/suppliers/routers/supplier_locations.py +89 -0
  544. services/suppliers/routers/supplier_pricing.py +96 -0
  545. services/suppliers/routers/supplier_quality.py +96 -0
  546. services/suppliers/routers/supplier_shipping.py +96 -0
  547. services/supply_allocation/main.py +46 -0
  548. services/supply_allocation/routers/__init__.py +1 -0
  549. services/supply_allocation/routers/allocation.py +20 -0
  550. services/taxonomy/helpers/__init__.py +7 -0
  551. services/taxonomy/helpers/classes.py +48 -0
  552. services/taxonomy/helpers/family.py +53 -0
  553. services/taxonomy/helpers/subclass.py +58 -0
  554. services/taxonomy/main.py +48 -0
  555. services/taxonomy/models/__init__.py +7 -0
  556. services/taxonomy/models/classes.py +52 -0
  557. services/taxonomy/models/family.py +60 -0
  558. services/taxonomy/models/subclass.py +50 -0
  559. services/taxonomy/routers/__init__.py +7 -0
  560. services/taxonomy/routers/classes.py +78 -0
  561. services/taxonomy/routers/family.py +77 -0
  562. services/taxonomy/routers/subclass.py +82 -0
  563. services/warehouse_execution/__init__.py +1 -0
  564. services/warehouse_execution/main.py +46 -0
  565. services/warehouse_execution/routers/__init__.py +1 -0
  566. services/warehouse_execution/routers/execution.py +21 -0
  567. services/work_order_agent/__init__.py +17 -0
  568. services/work_order_agent/agent/__init__.py +17 -0
  569. services/work_order_agent/agent/work_order_agent.py +658 -0
  570. services/work_order_agent/tracking/__init__.py +101 -0
  571. services/work_order_agent/tracking/event_system.py +182 -0
  572. services/work_order_agent/tracking/state_machine.py +163 -0
  573. services/work_order_agent/tracking/state_machine_integrator.py +295 -0
  574. services/work_order_agent/tracking/test_phase2_implementation.py +302 -0
  575. services/work_order_agent/tracking/time_analysis.py +301 -0
  576. services/work_order_agent/tracking/tracked_work_order.py +255 -0
  577. services/work_order_agent/tracking/work_order_adapter.py +367 -0
  578. services/work_order_agent/tracking/work_order_batch_manager.py +406 -0
  579. services/work_order_agent/tracking/work_order_repository.py +431 -0
  580. services/workorders/helpers/__init__.py +5 -0
  581. services/workorders/helpers/area_room_usage_ledger.py +139 -0
  582. services/workorders/helpers/batch_execution_records.py +265 -0
  583. services/workorders/helpers/batch_release_workflows.py +158 -0
  584. services/workorders/helpers/batch_step_executions.py +145 -0
  585. services/workorders/helpers/equipment_usage_ledger.py +209 -0
  586. services/workorders/helpers/executed_bmr_records.py +170 -0
  587. services/workorders/helpers/executed_bpr_records.py +170 -0
  588. services/workorders/helpers/executed_instruction_evidence.py +155 -0
  589. services/workorders/helpers/ipc_result_records.py +134 -0
  590. services/workorders/helpers/production_batches.py +117 -0
  591. services/workorders/helpers/work_orders.py +367 -0
  592. services/workorders/helpers/yield_reconciliation_records.py +158 -0
  593. services/workorders/main.py +110 -0
  594. services/workorders/models/__init__.py +5 -0
  595. services/workorders/models/area_room_usage_ledger.py +154 -0
  596. services/workorders/models/batch_execution_records.py +575 -0
  597. services/workorders/models/batch_release_workflows.py +190 -0
  598. services/workorders/models/batch_step_executions.py +142 -0
  599. services/workorders/models/equipment_usage_ledger.py +144 -0
  600. services/workorders/models/executed_bmr_records.py +220 -0
  601. services/workorders/models/executed_bpr_records.py +220 -0
  602. services/workorders/models/executed_instruction_evidence.py +128 -0
  603. services/workorders/models/ipc_result_records.py +164 -0
  604. services/workorders/models/production_batches.py +181 -0
  605. services/workorders/models/work_orders.py +255 -0
  606. services/workorders/models/yield_reconciliation_records.py +175 -0
  607. services/workorders/routers/__init__.py +5 -0
  608. services/workorders/routers/area_room_usage_ledger.py +117 -0
  609. services/workorders/routers/batch_execution_records.py +103 -0
  610. services/workorders/routers/batch_release_workflows.py +86 -0
  611. services/workorders/routers/batch_step_executions.py +88 -0
  612. services/workorders/routers/equipment_usage_ledger.py +115 -0
  613. services/workorders/routers/executed_bmr_records.py +86 -0
  614. services/workorders/routers/executed_bpr_records.py +86 -0
  615. services/workorders/routers/executed_instruction_evidence.py +86 -0
  616. services/workorders/routers/ipc_result_records.py +86 -0
  617. services/workorders/routers/production_batches.py +86 -0
  618. services/workorders/routers/work_orders.py +257 -0
  619. services/workorders/routers/yield_reconciliation_records.py +86 -0
  620. src/broca/__init__.py +5 -0
  621. src/broca/agent.py +201 -0
  622. src/cerebellum/__init__.py +0 -0
  623. src/cerebellum/adapter.py +84 -0
  624. src/cerebellum/capabilities/__init__.py +0 -0
  625. src/cerebellum/capabilities/agent/__init__.py +0 -0
  626. src/cerebellum/capabilities/agent/agents.py +65 -0
  627. src/cerebellum/capabilities/ai/__init__.py +0 -0
  628. src/cerebellum/capabilities/ai/providers.py +106 -0
  629. src/cerebellum/capabilities/api/__init__.py +0 -0
  630. src/cerebellum/capabilities/api/graphql.py +35 -0
  631. src/cerebellum/capabilities/api/rest_api.py +45 -0
  632. src/cerebellum/capabilities/api/webhook.py +30 -0
  633. src/cerebellum/capabilities/browser/__init__.py +0 -0
  634. src/cerebellum/capabilities/browser/browsers.py +27 -0
  635. src/cerebellum/capabilities/cloud/__init__.py +0 -0
  636. src/cerebellum/capabilities/cloud/cloud.py +46 -0
  637. src/cerebellum/capabilities/communication/__init__.py +0 -0
  638. src/cerebellum/capabilities/communication/communication.py +62 -0
  639. src/cerebellum/capabilities/database/__init__.py +0 -0
  640. src/cerebellum/capabilities/database/elasticsearch.py +40 -0
  641. src/cerebellum/capabilities/database/influxdb.py +37 -0
  642. src/cerebellum/capabilities/database/mongodb.py +50 -0
  643. src/cerebellum/capabilities/database/neo4j.py +32 -0
  644. src/cerebellum/capabilities/database/redis.py +44 -0
  645. src/cerebellum/capabilities/enterprise/__init__.py +0 -0
  646. src/cerebellum/capabilities/enterprise/opensource.py +180 -0
  647. src/cerebellum/capabilities/enterprise/proprietary.py +313 -0
  648. src/cerebellum/capabilities/event_streaming/__init__.py +0 -0
  649. src/cerebellum/capabilities/event_streaming/streaming.py +38 -0
  650. src/cerebellum/capabilities/infrastructure/__init__.py +0 -0
  651. src/cerebellum/capabilities/infrastructure/infrastructure.py +30 -0
  652. src/cerebellum/capabilities/productivity/__init__.py +0 -0
  653. src/cerebellum/capabilities/productivity/productivity.py +158 -0
  654. src/cerebellum/capabilities/robotics/__init__.py +0 -0
  655. src/cerebellum/capabilities/robotics/robotics.py +124 -0
  656. src/cerebellum/capabilities/runtime/__init__.py +0 -0
  657. src/cerebellum/capabilities/runtime/runtimes.py +92 -0
  658. src/cerebellum/capabilities/search/__init__.py +0 -0
  659. src/cerebellum/capabilities/search/search.py +63 -0
  660. src/cerebellum/capabilities/source_control/__init__.py +0 -0
  661. src/cerebellum/capabilities/source_control/source_control.py +113 -0
  662. src/cerebellum/capabilities/storage/__init__.py +0 -0
  663. src/cerebellum/capabilities/storage/storage.py +94 -0
  664. src/cerebellum/capabilities/workflow/__init__.py +0 -0
  665. src/cerebellum/capabilities/workflow/workflows.py +49 -0
  666. src/cerebellum/capability.py +108 -0
  667. src/cerebellum/config.py +157 -0
  668. src/cerebellum/fallback.py +147 -0
  669. src/cerebellum/fallback_engine.py +121 -0
  670. src/cerebellum/key_manager.py +129 -0
  671. src/cerebellum/keystore.py +179 -0
  672. src/cerebellum/lifecycle.py +54 -0
  673. src/cerebellum/metadata.py +61 -0
  674. src/cerebellum/operator/base.py +25 -0
  675. src/cerebellum/peripheral.py +92 -0
  676. src/cerebellum/registry.py +98 -0
  677. src/cerebellum/resolve_entity_capability.py +259 -0
  678. src/cingulate/benchmark/__init__.py +23 -0
  679. src/cingulate/benchmark/reporter.py +102 -0
  680. src/cingulate/benchmark/runner.py +159 -0
  681. src/cingulate/benchmark/scenario_runner.py +150 -0
  682. src/cingulate/benchmark/validator.py +102 -0
  683. src/cingulate/governance/__init__.py +21 -0
  684. src/cingulate/governance/architecture_validator.py +194 -0
  685. src/cingulate/governance/compliance.py +104 -0
  686. src/cingulate/governance/governance.py +77 -0
  687. src/cingulate/governance/policy_registry.py +91 -0
  688. src/cortex/__init__.py +33 -0
  689. src/cortex/cost.py +71 -0
  690. src/cortex/counterfactual.py +162 -0
  691. src/cortex/digital_twin.py +90 -0
  692. src/cortex/experience.py +83 -0
  693. src/cortex/feedback.py +144 -0
  694. src/cortex/loss.py +116 -0
  695. src/cortex/prediction.py +142 -0
  696. src/cortex/replay.py +130 -0
  697. src/cortex/reward.py +113 -0
  698. src/cortex/simulator.py +102 -0
  699. src/cortex/world_model.py +180 -0
  700. src/cortex/world_model_simulation.py +1591 -0
  701. src/cortex/world_state.py +121 -0
  702. src/cortex/xavier.py +250 -0
  703. src/deepdive/__init__.py +29 -0
  704. src/deepdive/aggregation.py +113 -0
  705. src/deepdive/digital_twin_aggregator.py +128 -0
  706. src/deepdive/elasticsearch_adapter.py +110 -0
  707. src/deepdive/fleet_analytics.py +131 -0
  708. src/deepdive/knowledge_aggregator.py +130 -0
  709. src/homeostasis/__init__.py +19 -0
  710. src/homeostasis/control_plane.py +159 -0
  711. src/introspection/__init__.py +38 -0
  712. src/introspection/alerting.py +142 -0
  713. src/introspection/health.py +101 -0
  714. src/introspection/lemon.py +243 -0
  715. src/introspection/logging.py +147 -0
  716. src/introspection/metrics.py +106 -0
  717. src/introspection/tracing.py +162 -0
  718. src/monkey_brain/__init__.py +1 -0
  719. src/monkey_brain/api/main.py +148 -0
  720. src/monkey_brain/api/models.py +81 -0
  721. src/monkey_brain/api/routes/routes/keys.py +106 -0
  722. src/monkey_brain/api/routes/routes/run.py +169 -0
  723. src/monkey_brain/api/routes/routes/simulate.py +485 -0
  724. src/monkey_brain/dlm/__init__.py +44 -0
  725. src/monkey_brain/dlm/dlm.py +139 -0
  726. src/monkey_brain/dlm/gc.py +115 -0
  727. src/monkey_brain/dlm/lifecycle.py +149 -0
  728. src/monkey_brain/dlm/orphans.py +99 -0
  729. src/monkey_brain/dlm/storage.py +149 -0
  730. src/monkey_brain/dlm/ttl.py +140 -0
  731. src/monkey_brain/documents/__init__.py +0 -0
  732. src/monkey_brain/documents/document_ocr.py +6 -0
  733. src/monkey_brain/kernel/__init__.py +53 -0
  734. src/monkey_brain/kernel/capability_interface.py +144 -0
  735. src/monkey_brain/kernel/classifier/__init__.py +1 -0
  736. src/monkey_brain/kernel/classifier/embed_classifier.py +125 -0
  737. src/monkey_brain/kernel/classifier/intent_examples.py +106 -0
  738. src/monkey_brain/kernel/dag.py +23 -0
  739. src/monkey_brain/kernel/execution_state.py +257 -0
  740. src/monkey_brain/kernel/goal_planner.py +85 -0
  741. src/monkey_brain/kernel/goal_router.py +20 -0
  742. src/monkey_brain/kernel/goals/__init__.py +1 -0
  743. src/monkey_brain/kernel/goals/goal.py +130 -0
  744. src/monkey_brain/kernel/goals/goal_bootstrap.py +38 -0
  745. src/monkey_brain/kernel/goals/goal_classifier.py +132 -0
  746. src/monkey_brain/kernel/goals/goal_registry.py +75 -0
  747. src/monkey_brain/kernel/intents/__init__.py +1 -0
  748. src/monkey_brain/kernel/intents/event_adapter.py +246 -0
  749. src/monkey_brain/kernel/intents/helpers.py +13 -0
  750. src/monkey_brain/kernel/intents/intent_registry.py +705 -0
  751. src/monkey_brain/kernel/intents/intent_router.py +102 -0
  752. src/monkey_brain/kernel/intents/predicates/approval_create.py +9 -0
  753. src/monkey_brain/kernel/intents/predicates/approval_decision.py +9 -0
  754. src/monkey_brain/kernel/intents/predicates/approval_hold.py +9 -0
  755. src/monkey_brain/kernel/intents/predicates/approval_query.py +9 -0
  756. src/monkey_brain/kernel/intents/predicates/batch_close.py +9 -0
  757. src/monkey_brain/kernel/intents/predicates/batch_creation.py +9 -0
  758. src/monkey_brain/kernel/intents/predicates/batch_delete.py +9 -0
  759. src/monkey_brain/kernel/intents/predicates/batch_hold.py +9 -0
  760. src/monkey_brain/kernel/intents/predicates/batch_record.py +9 -0
  761. src/monkey_brain/kernel/intents/predicates/batch_update.py +9 -0
  762. src/monkey_brain/kernel/intents/predicates/change_control.py +49 -0
  763. src/monkey_brain/kernel/intents/predicates/compliance_audit.py +14 -0
  764. src/monkey_brain/kernel/intents/predicates/decision_intelligence.py +9 -0
  765. src/monkey_brain/kernel/intents/predicates/drug_research.py +9 -0
  766. src/monkey_brain/kernel/intents/predicates/fuzzy_match.py +19 -0
  767. src/monkey_brain/kernel/intents/predicates/production_kpi.py +9 -0
  768. src/monkey_brain/kernel/intents/predicates/sop_create.py +9 -0
  769. src/monkey_brain/kernel/intents/predicates/sop_query.py +9 -0
  770. src/monkey_brain/kernel/intents/predicates/sop_update.py +9 -0
  771. src/monkey_brain/kernel/intents/predicates/warehouse_shipping.py +9 -0
  772. src/monkey_brain/kernel/intents/predicates/work_order_create.py +9 -0
  773. src/monkey_brain/kernel/intents/predicates/work_order_delete.py +9 -0
  774. src/monkey_brain/kernel/intents/predicates/work_order_hold.py +9 -0
  775. src/monkey_brain/kernel/intents/predicates/work_order_query.py +9 -0
  776. src/monkey_brain/kernel/intents/predicates/work_order_status.py +9 -0
  777. src/monkey_brain/kernel/intents/predicates/work_order_update.py +9 -0
  778. src/monkey_brain/kernel/intents/predicates/worker.py +9 -0
  779. src/monkey_brain/kernel/intents/telemetry_adapter.py +274 -0
  780. src/monkey_brain/kernel/intents/utils.py +68 -0
  781. src/monkey_brain/kernel/learning.py +98 -0
  782. src/monkey_brain/kernel/llm_explorer.py +188 -0
  783. src/monkey_brain/kernel/loss.py +81 -0
  784. src/monkey_brain/kernel/nlp/__init__.py +1 -0
  785. src/monkey_brain/kernel/nlp/compat.py +23 -0
  786. src/monkey_brain/kernel/nlp/models.py +10 -0
  787. src/monkey_brain/kernel/nlp/question_analyzer.py +203 -0
  788. src/monkey_brain/kernel/nlp/spacy_parser.py +53 -0
  789. src/monkey_brain/kernel/observer.py +97 -0
  790. src/monkey_brain/kernel/parser/__init__.py +3 -0
  791. src/monkey_brain/kernel/parser/ast.py +28 -0
  792. src/monkey_brain/kernel/parser/extractors/__init__.py +11 -0
  793. src/monkey_brain/kernel/parser/extractors/entities.py +21 -0
  794. src/monkey_brain/kernel/parser/extractors/filters.py +16 -0
  795. src/monkey_brain/kernel/parser/extractors/projections.py +36 -0
  796. src/monkey_brain/kernel/parser/extractors/verbs.py +31 -0
  797. src/monkey_brain/kernel/parser/parser.py +57 -0
  798. src/monkey_brain/kernel/parser/rules.py +75 -0
  799. src/monkey_brain/kernel/pipeline.py +44 -0
  800. src/monkey_brain/kernel/planner.py +57 -0
  801. src/monkey_brain/kernel/rl/__init__.py +33 -0
  802. src/monkey_brain/kernel/rl/learner.py +98 -0
  803. src/monkey_brain/kernel/rl/policy.py +254 -0
  804. src/monkey_brain/kernel/rl/reward.py +117 -0
  805. src/monkey_brain/kernel/rl/transition.py +112 -0
  806. src/monkey_brain/persistence/__init__.py +47 -0
  807. src/monkey_brain/persistence/adapters.py +49 -0
  808. src/monkey_brain/persistence/events.py +105 -0
  809. src/monkey_brain/persistence/manager.py +124 -0
  810. src/monkey_brain/persistence/mongodb_adapter.py +91 -0
  811. src/monkey_brain/persistence/redis_adapter.py +93 -0
  812. src/monkey_brain/persistence/reducer.py +111 -0
  813. src/monkey_brain/runtime/__init__.py +49 -0
  814. src/monkey_brain/runtime/depedencies.py +8 -0
  815. src/monkey_brain/runtime/engine.py +183 -0
  816. src/monkey_brain/runtime/message_bus.py +82 -0
  817. src/monkey_brain/runtime/process.py +144 -0
  818. src/monkey_brain/runtime/resource_manager.py +100 -0
  819. src/monkey_brain/runtime/routers.py +8 -0
  820. src/monkey_brain/runtime/runtime.py +199 -0
  821. src/monkey_brain/runtime/scheduler.py +165 -0
  822. src/monkey_brain/runtime/supervisor.py +133 -0
  823. src/monkey_brain/runtime/worker_pool.py +111 -0
  824. src/plasticity/seed/__init__.py +30 -0
  825. src/plasticity/seed/benchmark_generator.py +105 -0
  826. src/plasticity/seed/event_generator.py +122 -0
  827. src/plasticity/seed/scenario_builder.py +134 -0
  828. src/plasticity/seed/seed_data.py +206 -0
  829. src/plasticity/seed/seeder.py +122 -0
  830. src/plasticity/testing/__init__.py +28 -0
  831. src/plasticity/testing/performance.py +131 -0
  832. src/plasticity/testing/profiler.py +255 -0
  833. src/plasticity/testing/reporter.py +84 -0
  834. src/plasticity/testing/runner.py +209 -0
  835. src/sync/__init__.py +12 -0
  836. src/sync/cloud_aggregator.py +63 -0
  837. src/sync/edge_node.py +51 -0
  838. src/sync/sync_manager.py +74 -0
@@ -0,0 +1,351 @@
1
+ """
2
+ helpers/prechecks_helper.py
3
+ ----------------------------
4
+ MongoDB CRUD helper for ProcessPrechecks and ProcessStepPrechecks models.
5
+ Mirrors the pattern established in the devices helper.
6
+
7
+ Collections
8
+ -----------
9
+ process_definition_prechecks → ProcessPrechecks documents (one per process_definition)
10
+ process_step_prechecks → ProcessStepPrechecks documents (one per step)
11
+ """
12
+
13
+ from typing import Optional
14
+ from motor.motor_asyncio import AsyncIOMotorDatabase
15
+
16
+ from services.process_definitions.models.process_pre_checks import (
17
+ ProcessPrechecksCreate,
18
+ ProcessPrechecksUpdate,
19
+ ProcessStepPrechecksCreate,
20
+ ProcessStepPrechecksUpdate,
21
+ PreCheckConditionCreate,
22
+ )
23
+
24
+ WORKFLOW_COLLECTION = "process_definition_prechecks"
25
+ STEP_COLLECTION = "process_step_prechecks"
26
+
27
+
28
+ def _serialize(doc: dict) -> dict:
29
+ """Strip MongoDB's internal _id before returning a document."""
30
+ doc.pop("_id", None)
31
+ return doc
32
+
33
+
34
+ # ===========================================================================
35
+ # ProcessPrechecks (process_definition-level)
36
+ # ===========================================================================
37
+
38
+ # ---------------------------------------------------------------------------
39
+ # Read
40
+ # ---------------------------------------------------------------------------
41
+
42
+ async def get_all(
43
+ db: AsyncIOMotorDatabase,
44
+ page: int = 1,
45
+ page_size: int = 20,
46
+ ) -> tuple[list[dict], int]:
47
+ """Return a paginated list of all ProcessPrechecks containers."""
48
+ query: dict = {}
49
+ total = await db[WORKFLOW_COLLECTION].count_documents(query)
50
+ cursor = (
51
+ db[WORKFLOW_COLLECTION]
52
+ .find(query)
53
+ .skip((page - 1) * page_size)
54
+ .limit(page_size)
55
+ )
56
+ return [_serialize(d) async for d in cursor], total
57
+
58
+
59
+ async def get_by_id(
60
+ db: AsyncIOMotorDatabase,
61
+ prechecks_id: str,
62
+ ) -> Optional[dict]:
63
+ """Fetch a ProcessPrechecks container by its id."""
64
+ doc = await db[WORKFLOW_COLLECTION].find_one({"id": prechecks_id})
65
+ return _serialize(doc) if doc else None
66
+
67
+
68
+ async def get_by_process_definition_id(
69
+ db: AsyncIOMotorDatabase,
70
+ process_definition_id: str,
71
+ ) -> Optional[dict]:
72
+ """Fetch the prechecks container that belongs to a given process_definition."""
73
+ if not process_definition_id:
74
+ return None
75
+ doc = await db[WORKFLOW_COLLECTION].find_one({"process_definition_id": process_definition_id})
76
+ return _serialize(doc) if doc else None
77
+
78
+
79
+ async def get_conditions_by_severity(
80
+ db: AsyncIOMotorDatabase,
81
+ prechecks_id: str,
82
+ severity: str,
83
+ ) -> list[dict]:
84
+ """Return all conditions within a container that match a given severity."""
85
+ doc = await db[WORKFLOW_COLLECTION].find_one({"id": prechecks_id})
86
+ if not doc:
87
+ return []
88
+ return [
89
+ c for c in doc.get("process_definition_precheck_conditions", [])
90
+ if c.get("severity") == severity
91
+ ]
92
+
93
+
94
+ async def get_mandatory_conditions(
95
+ db: AsyncIOMotorDatabase,
96
+ prechecks_id: str,
97
+ ) -> list[dict]:
98
+ """Return only the mandatory conditions from a container."""
99
+ doc = await db[WORKFLOW_COLLECTION].find_one({"id": prechecks_id})
100
+ if not doc:
101
+ return []
102
+ return [
103
+ c for c in doc.get("process_definition_precheck_conditions", [])
104
+ if c.get("is_mandatory") is True
105
+ ]
106
+
107
+
108
+ # ---------------------------------------------------------------------------
109
+ # Write
110
+ # ---------------------------------------------------------------------------
111
+
112
+ async def create(
113
+ db: AsyncIOMotorDatabase,
114
+ data: ProcessPrechecksCreate,
115
+ ) -> dict:
116
+ """Insert a new ProcessPrechecks container and return it."""
117
+ doc = data.model_dump()
118
+ await db[WORKFLOW_COLLECTION].insert_one(doc)
119
+ return _serialize(doc)
120
+
121
+
122
+ async def update(
123
+ db: AsyncIOMotorDatabase,
124
+ prechecks_id: str,
125
+ data: ProcessPrechecksUpdate,
126
+ ) -> Optional[dict]:
127
+ """
128
+ Partially update a ProcessPrechecks container.
129
+ Only non-None fields are written.
130
+ """
131
+ fields = {k: v for k, v in data.model_dump().items() if v is not None}
132
+ if not fields:
133
+ return await get_by_id(db, prechecks_id)
134
+ result = await db[WORKFLOW_COLLECTION].find_one_and_update(
135
+ {"id": prechecks_id},
136
+ {"$set": fields},
137
+ return_document=True,
138
+ )
139
+ return _serialize(result) if result else None
140
+
141
+
142
+ async def add_condition(
143
+ db: AsyncIOMotorDatabase,
144
+ prechecks_id: str,
145
+ condition: PreCheckConditionCreate,
146
+ ) -> Optional[dict]:
147
+ """Append a new PreCheckCondition to the conditions array."""
148
+ result = await db[WORKFLOW_COLLECTION].find_one_and_update(
149
+ {"id": prechecks_id},
150
+ {"$push": {"process_definition_precheck_conditions": condition.model_dump()}},
151
+ return_document=True,
152
+ )
153
+ return _serialize(result) if result else None
154
+
155
+
156
+ async def update_condition(
157
+ db: AsyncIOMotorDatabase,
158
+ prechecks_id: str,
159
+ condition_id: str,
160
+ fields: dict,
161
+ ) -> Optional[dict]:
162
+ """
163
+ Update specific fields of a PreCheckCondition inside the conditions array.
164
+ Pass only the fields you want to change in the `fields` dict.
165
+ """
166
+ updates = {f"process_definition_precheck_conditions.$.{k}": v for k, v in fields.items()}
167
+ result = await db[WORKFLOW_COLLECTION].find_one_and_update(
168
+ {"id": prechecks_id, "process_definition_precheck_conditions.id": condition_id},
169
+ {"$set": updates},
170
+ return_document=True,
171
+ )
172
+ return _serialize(result) if result else None
173
+
174
+
175
+ async def remove_condition(
176
+ db: AsyncIOMotorDatabase,
177
+ prechecks_id: str,
178
+ condition_id: str,
179
+ ) -> Optional[dict]:
180
+ """Remove a specific condition from the conditions array."""
181
+ result = await db[WORKFLOW_COLLECTION].find_one_and_update(
182
+ {"id": prechecks_id},
183
+ {"$pull": {"process_definition_precheck_conditions": {"id": condition_id}}},
184
+ return_document=True,
185
+ )
186
+ return _serialize(result) if result else None
187
+
188
+
189
+ async def delete(
190
+ db: AsyncIOMotorDatabase,
191
+ prechecks_id: str,
192
+ ) -> bool:
193
+ """Delete a ProcessPrechecks container by ID."""
194
+ result = await db[WORKFLOW_COLLECTION].delete_one({"id": prechecks_id})
195
+ return result.deleted_count == 1
196
+
197
+
198
+ async def delete_by_process_definition_id(
199
+ db: AsyncIOMotorDatabase,
200
+ process_definition_id: str,
201
+ ) -> bool:
202
+ """Delete the prechecks container that belongs to a process_definition (cascade delete)."""
203
+ result = await db[WORKFLOW_COLLECTION].delete_one({"process_definition_id": process_definition_id})
204
+ return result.deleted_count == 1
205
+
206
+
207
+ # ===========================================================================
208
+ # ProcessStepPrechecks (step-level)
209
+ # ===========================================================================
210
+
211
+ # ---------------------------------------------------------------------------
212
+ # Read
213
+ # ---------------------------------------------------------------------------
214
+
215
+ async def get_step_prechecks_by_id(
216
+ db: AsyncIOMotorDatabase,
217
+ prechecks_id: str,
218
+ ) -> Optional[dict]:
219
+ """Fetch a ProcessStepPrechecks container by its id."""
220
+ doc = await db[STEP_COLLECTION].find_one({"id": prechecks_id})
221
+ return _serialize(doc) if doc else None
222
+
223
+
224
+ async def get_step_prechecks_by_step_id(
225
+ db: AsyncIOMotorDatabase,
226
+ step_id: str,
227
+ ) -> Optional[dict]:
228
+ """Fetch the prechecks container that belongs to a given process_definition step."""
229
+ if not step_id:
230
+ return None
231
+ doc = await db[STEP_COLLECTION].find_one({"process_step_id": step_id})
232
+ return _serialize(doc) if doc else None
233
+
234
+
235
+ async def get_step_prechecks_by_process_definition_id(
236
+ db: AsyncIOMotorDatabase,
237
+ process_definition_id: str,
238
+ ) -> list[dict]:
239
+ """Return all step-level prechecks containers that share the same process_definition_id."""
240
+ if not process_definition_id:
241
+ return []
242
+ cursor = db[STEP_COLLECTION].find({"process_definition_id": process_definition_id})
243
+ return [_serialize(d) async for d in cursor]
244
+
245
+
246
+ async def get_step_conditions_by_severity(
247
+ db: AsyncIOMotorDatabase,
248
+ prechecks_id: str,
249
+ severity: str,
250
+ ) -> list[dict]:
251
+ """Return all step-level conditions that match a given severity."""
252
+ doc = await db[STEP_COLLECTION].find_one({"id": prechecks_id})
253
+ if not doc:
254
+ return []
255
+ return [
256
+ c for c in doc.get("process_step_precheck_conditions", [])
257
+ if c.get("severity") == severity
258
+ ]
259
+
260
+
261
+ # ---------------------------------------------------------------------------
262
+ # Write
263
+ # ---------------------------------------------------------------------------
264
+
265
+ async def create_step_prechecks(
266
+ db: AsyncIOMotorDatabase,
267
+ data: ProcessStepPrechecksCreate,
268
+ ) -> dict:
269
+ """Insert a new ProcessStepPrechecks container and return it."""
270
+ doc = data.model_dump()
271
+ await db[STEP_COLLECTION].insert_one(doc)
272
+ return _serialize(doc)
273
+
274
+
275
+ async def update_step_prechecks(
276
+ db: AsyncIOMotorDatabase,
277
+ prechecks_id: str,
278
+ data: ProcessStepPrechecksUpdate,
279
+ ) -> Optional[dict]:
280
+ """Partially update a ProcessStepPrechecks container."""
281
+ fields = {k: v for k, v in data.model_dump().items() if v is not None}
282
+ if not fields:
283
+ return await get_step_prechecks_by_id(db, prechecks_id)
284
+ result = await db[STEP_COLLECTION].find_one_and_update(
285
+ {"id": prechecks_id},
286
+ {"$set": fields},
287
+ return_document=True,
288
+ )
289
+ return _serialize(result) if result else None
290
+
291
+
292
+ async def add_step_condition(
293
+ db: AsyncIOMotorDatabase,
294
+ prechecks_id: str,
295
+ condition: PreCheckConditionCreate,
296
+ ) -> Optional[dict]:
297
+ """Append a new PreCheckCondition to a step's conditions array."""
298
+ result = await db[STEP_COLLECTION].find_one_and_update(
299
+ {"id": prechecks_id},
300
+ {"$push": {"process_step_precheck_conditions": condition.model_dump()}},
301
+ return_document=True,
302
+ )
303
+ return _serialize(result) if result else None
304
+
305
+
306
+ async def update_step_condition(
307
+ db: AsyncIOMotorDatabase,
308
+ prechecks_id: str,
309
+ condition_id: str,
310
+ fields: dict,
311
+ ) -> Optional[dict]:
312
+ """Update specific fields of a condition inside a step's conditions array."""
313
+ updates = {f"process_step_precheck_conditions.$.{k}": v for k, v in fields.items()}
314
+ result = await db[STEP_COLLECTION].find_one_and_update(
315
+ {"id": prechecks_id, "process_step_precheck_conditions.id": condition_id},
316
+ {"$set": updates},
317
+ return_document=True,
318
+ )
319
+ return _serialize(result) if result else None
320
+
321
+
322
+ async def remove_step_condition(
323
+ db: AsyncIOMotorDatabase,
324
+ prechecks_id: str,
325
+ condition_id: str,
326
+ ) -> Optional[dict]:
327
+ """Remove a specific condition from a step's conditions array."""
328
+ result = await db[STEP_COLLECTION].find_one_and_update(
329
+ {"id": prechecks_id},
330
+ {"$pull": {"process_step_precheck_conditions": {"id": condition_id}}},
331
+ return_document=True,
332
+ )
333
+ return _serialize(result) if result else None
334
+
335
+
336
+ async def delete_step_prechecks(
337
+ db: AsyncIOMotorDatabase,
338
+ prechecks_id: str,
339
+ ) -> bool:
340
+ """Delete a ProcessStepPrechecks container by ID."""
341
+ result = await db[STEP_COLLECTION].delete_one({"id": prechecks_id})
342
+ return result.deleted_count == 1
343
+
344
+
345
+ async def delete_step_prechecks_by_step_id(
346
+ db: AsyncIOMotorDatabase,
347
+ step_id: str,
348
+ ) -> bool:
349
+ """Delete the step prechecks container that belongs to a step (cascade delete)."""
350
+ result = await db[STEP_COLLECTION].delete_one({"process_step_id": step_id})
351
+ return result.deleted_count == 1
@@ -0,0 +1,220 @@
1
+ """
2
+ helpers/process_steps_helper.py
3
+ ---------------------------------
4
+ MongoDB CRUD helper for ProcessSteps and ProcessStep models.
5
+ Mirrors the pattern established in the devices helper.
6
+ """
7
+
8
+ from typing import Optional
9
+ from motor.motor_asyncio import AsyncIOMotorDatabase
10
+
11
+ from services.process_definitions.models.process_steps import ProcessStepsCreate, ProcessStepsUpdate, ProcessStepUpdate
12
+
13
+ COLLECTION = "process_steps"
14
+
15
+
16
+ def _serialize(doc: dict) -> dict:
17
+ """Strip MongoDB's internal _id before returning a document."""
18
+ doc.pop("_id", None)
19
+ return doc
20
+
21
+
22
+ # ---------------------------------------------------------------------------
23
+ # ProcessSteps — top-level container
24
+ # ---------------------------------------------------------------------------
25
+
26
+ async def get_all(
27
+ db: AsyncIOMotorDatabase,
28
+ page: int = 1,
29
+ page_size: int = 20,
30
+ ) -> tuple[list[dict], int]:
31
+ """Return a paginated list of all ProcessSteps containers and the total count."""
32
+ query: dict = {}
33
+ total = await db[COLLECTION].count_documents(query)
34
+ cursor = (
35
+ db[COLLECTION]
36
+ .find(query)
37
+ .skip((page - 1) * page_size)
38
+ .limit(page_size)
39
+ )
40
+ return [_serialize(d) async for d in cursor], total
41
+
42
+
43
+ async def get_by_id(
44
+ db: AsyncIOMotorDatabase,
45
+ steps_id: str,
46
+ ) -> Optional[dict]:
47
+ """Fetch a ProcessSteps container by its id."""
48
+ doc = await db[COLLECTION].find_one({"id": steps_id})
49
+ return _serialize(doc) if doc else None
50
+
51
+
52
+ async def get_by_process_definition_id(
53
+ db: AsyncIOMotorDatabase,
54
+ process_definition_id: str,
55
+ ) -> Optional[dict]:
56
+ """Fetch the ProcessSteps container that belongs to a given process_definition."""
57
+ if not process_definition_id:
58
+ return None
59
+ doc = await db[COLLECTION].find_one({"process_definition_id": process_definition_id})
60
+ return _serialize(doc) if doc else None
61
+
62
+
63
+ async def create(
64
+ db: AsyncIOMotorDatabase,
65
+ data: ProcessStepsCreate,
66
+ ) -> dict:
67
+ """Insert a new ProcessSteps container and return it."""
68
+ doc = data.model_dump()
69
+ await db[COLLECTION].insert_one(doc)
70
+ return _serialize(doc)
71
+
72
+
73
+ async def update(
74
+ db: AsyncIOMotorDatabase,
75
+ steps_id: str,
76
+ data: ProcessStepsUpdate,
77
+ ) -> Optional[dict]:
78
+ """
79
+ Partially update a ProcessSteps container.
80
+ Only non-None fields are written.
81
+ """
82
+ fields = {k: v for k, v in data.model_dump().items() if v is not None}
83
+ if not fields:
84
+ return await get_by_id(db, steps_id)
85
+ result = await db[COLLECTION].find_one_and_update(
86
+ {"id": steps_id},
87
+ {"$set": fields},
88
+ return_document=True,
89
+ )
90
+ return _serialize(result) if result else None
91
+
92
+
93
+ async def delete(
94
+ db: AsyncIOMotorDatabase,
95
+ steps_id: str,
96
+ ) -> bool:
97
+ """Delete a ProcessSteps container by ID. Returns True if removed."""
98
+ result = await db[COLLECTION].delete_one({"id": steps_id})
99
+ return result.deleted_count == 1
100
+
101
+
102
+ async def delete_by_process_definition_id(
103
+ db: AsyncIOMotorDatabase,
104
+ process_definition_id: str,
105
+ ) -> bool:
106
+ """Delete the ProcessSteps container that belongs to a process_definition."""
107
+ result = await db[COLLECTION].delete_one({"process_definition_id": process_definition_id})
108
+ return result.deleted_count == 1
109
+
110
+
111
+ # ---------------------------------------------------------------------------
112
+ # Individual ProcessStep — operations on steps[] array inside the container
113
+ # ---------------------------------------------------------------------------
114
+
115
+ async def get_step_by_id(
116
+ db: AsyncIOMotorDatabase,
117
+ steps_id: str,
118
+ step_id: str,
119
+ ) -> Optional[dict]:
120
+ """Return a single step from within a ProcessSteps container."""
121
+ doc = await db[COLLECTION].find_one(
122
+ {"id": steps_id, "steps.id": step_id},
123
+ {"steps.$": 1},
124
+ )
125
+ if not doc or not doc.get("steps"):
126
+ return None
127
+ return doc["steps"][0]
128
+
129
+
130
+ async def get_steps_by_status(
131
+ db: AsyncIOMotorDatabase,
132
+ steps_id: str,
133
+ status: str,
134
+ ) -> list[dict]:
135
+ """Return all steps within a container that match a given status."""
136
+ doc = await db[COLLECTION].find_one({"id": steps_id})
137
+ if not doc:
138
+ return []
139
+ return [s for s in doc.get("steps", []) if s.get("status") == status]
140
+
141
+
142
+ async def get_steps_by_action_type(
143
+ db: AsyncIOMotorDatabase,
144
+ steps_id: str,
145
+ action_type: str,
146
+ ) -> list[dict]:
147
+ """Return all steps within a container that match a given action_type."""
148
+ doc = await db[COLLECTION].find_one({"id": steps_id})
149
+ if not doc:
150
+ return []
151
+ return [s for s in doc.get("steps", []) if s.get("action_type") == action_type]
152
+
153
+
154
+ async def add_step(
155
+ db: AsyncIOMotorDatabase,
156
+ steps_id: str,
157
+ step: dict,
158
+ ) -> Optional[dict]:
159
+ """Append a new ProcessStep to the steps array of a container."""
160
+ result = await db[COLLECTION].find_one_and_update(
161
+ {"id": steps_id},
162
+ {"$push": {"steps": step}},
163
+ return_document=True,
164
+ )
165
+ return _serialize(result) if result else None
166
+
167
+
168
+ async def update_step(
169
+ db: AsyncIOMotorDatabase,
170
+ steps_id: str,
171
+ step_id: str,
172
+ data: ProcessStepUpdate,
173
+ ) -> Optional[dict]:
174
+ """
175
+ Update fields of a specific step inside the steps array.
176
+ Uses the positional $ operator to target the matched element.
177
+ Only non-None fields are written.
178
+ """
179
+ fields = {
180
+ f"steps.$.{k}": v
181
+ for k, v in data.model_dump().items()
182
+ if v is not None
183
+ }
184
+ if not fields:
185
+ return await get_by_id(db, steps_id)
186
+ result = await db[COLLECTION].find_one_and_update(
187
+ {"id": steps_id, "steps.id": step_id},
188
+ {"$set": fields},
189
+ return_document=True,
190
+ )
191
+ return _serialize(result) if result else None
192
+
193
+
194
+ async def update_step_status(
195
+ db: AsyncIOMotorDatabase,
196
+ steps_id: str,
197
+ step_id: str,
198
+ status: str,
199
+ ) -> Optional[dict]:
200
+ """Convenience helper: flip only the status of a single step."""
201
+ result = await db[COLLECTION].find_one_and_update(
202
+ {"id": steps_id, "steps.id": step_id},
203
+ {"$set": {"steps.$.status": status}},
204
+ return_document=True,
205
+ )
206
+ return _serialize(result) if result else None
207
+
208
+
209
+ async def remove_step(
210
+ db: AsyncIOMotorDatabase,
211
+ steps_id: str,
212
+ step_id: str,
213
+ ) -> Optional[dict]:
214
+ """Remove a specific step from the steps array. Returns the updated container."""
215
+ result = await db[COLLECTION].find_one_and_update(
216
+ {"id": steps_id},
217
+ {"$pull": {"steps": {"id": step_id}}},
218
+ return_document=True,
219
+ )
220
+ return _serialize(result) if result else None
@@ -0,0 +1,71 @@
1
+ from contextlib import asynccontextmanager
2
+
3
+ from fastapi import FastAPI
4
+ from fastapi.middleware.cors import CORSMiddleware
5
+
6
+ from services.common.logging import configure_service_logging, install_request_logging
7
+ from services.common.tracing import install_route_tracing
8
+
9
+ from services.common.db import close_db, connect_db
10
+ from services.process_definitions.routers.cpp_cqa_registry import router as cpp_cqa_registry_router
11
+ from services.process_definitions.routers.mbmr_templates import router as mbmr_templates_router
12
+ from services.process_definitions.routers.packing_instructions import router as packing_instructions_router
13
+ from services.process_definitions.routers.process_definition import router as process_definition_router
14
+ from services.process_definitions.routers.process_steps import router as process_steps_router
15
+ from services.process_definitions.routers.process_pre_checks import router as process_definition_prechecks_router
16
+ from services.process_definitions.routers.process_post_checks import router as process_definition_postchecks_router
17
+ from services.process_definitions.routers.process_constraints import router as process_constraints_router
18
+ from services.process_definitions.routers.process_corrections import router as process_corrections_router
19
+
20
+
21
+ logger = configure_service_logging("process_definition")
22
+
23
+ @asynccontextmanager
24
+ async def lifespan(app: FastAPI):
25
+ await connect_db()
26
+ yield
27
+ await close_db()
28
+
29
+
30
+ app = FastAPI(
31
+ title="Process Definition Service",
32
+ description="Microservice for process definition service.",
33
+ version="1.0.0",
34
+ lifespan=lifespan,
35
+ )
36
+ install_request_logging(app, "process_definition")
37
+ install_route_tracing(app, "process_definition")
38
+
39
+ app.add_middleware(
40
+ CORSMiddleware,
41
+ allow_origins=[
42
+ "http://localhost:5173",
43
+ "http://127.0.0.1:5173",
44
+ ],
45
+ allow_origin_regex=(
46
+ r"^http://("
47
+ r"192\.168\.\d+\.\d+|"
48
+ r"10\.\d+\.\d+\.\d+|"
49
+ r"172\.(1[6-9]|2\d|3[0-1])\.\d+\.\d+|"
50
+ r"[A-Za-z0-9.-]+\.local"
51
+ r"):5173$"
52
+ ),
53
+ allow_credentials=True,
54
+ allow_methods=["*"],
55
+ allow_headers=["*"],
56
+ )
57
+
58
+ app.include_router(process_definition_router, prefix="/api/v1/process-definitions", tags=["Process Definitions"])
59
+ app.include_router(cpp_cqa_registry_router, prefix="/api/v1/cpp-cqa-registry", tags=["CPP CQA Registry"])
60
+ app.include_router(mbmr_templates_router, prefix="/api/v1/mbmr-templates", tags=["MBMR Templates"])
61
+ app.include_router(packing_instructions_router, prefix="/api/v1/packing-instructions", tags=["Packing Instructions"])
62
+ app.include_router(process_steps_router, prefix="/api/v1/process-steps", tags=["Process Steps"])
63
+ app.include_router(process_definition_prechecks_router, prefix="/api/v1/process-prechecks", tags=["Process Prechecks"])
64
+ app.include_router(process_definition_postchecks_router, prefix="/api/v1/process-postchecks", tags=["Process Postchecks"])
65
+ app.include_router(process_constraints_router, prefix="/api/v1/process-constraints", tags=["Process Constraints"])
66
+ app.include_router(process_corrections_router, prefix="/api/v1/process-corrections", tags=["Process Corrections"])
67
+
68
+
69
+ @app.get("/health", tags=["Health"])
70
+ async def health_check():
71
+ return {"status": "healthy"}
@@ -0,0 +1,13 @@
1
+ """process definition service models package."""
2
+
3
+ __all__ = [
4
+ "process_definition",
5
+ "process_definition_common",
6
+ "process_constraints",
7
+ "process_corrections",
8
+ "process_definition_execution_path",
9
+ "process_node_catalog",
10
+ "process_post_checks",
11
+ "process_pre_checks",
12
+ "process_steps",
13
+ ]