fastworkflow 2.17.7__tar.gz → 2.17.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of fastworkflow might be problematic. Click here for more details.
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/PKG-INFO +1 -1
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/run_fastapi_mcp/README.md +26 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/run_fastapi_mcp/__main__.py +2 -1
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/run_fastapi_mcp/jwt_manager.py +8 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/run_fastapi_mcp/utils.py +29 -3
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/pyproject.toml +1 -1
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/LICENSE +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/README.md +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/.DS_Store +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/__init__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_commands/.gitkeep +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_workflows/__init__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_workflows/command_metadata_extraction/__init__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/abort.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/you_misunderstood.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/go_up.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/reset_context.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_can_i_do.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_is_current_context.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/__init__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/wildcard.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_workflows/command_metadata_extraction/command_context_model.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_workflows/command_metadata_extraction/intent_detection.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/_workflows/command_metadata_extraction/parameter_extraction.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/__main__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/ast_class_extractor.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/class_analysis_structures.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/cli_specification.md +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/command_dependency_resolver.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/command_file_generator.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/command_file_template.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/command_import_utils.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/command_stub_generator.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/context_folder_generator.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/context_model_generator.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/dependency_manager.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/dir_scanner.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/documentation_generator.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/genai_postprocessor.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/inheritance_block_regenerator.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/libcst_transformers.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/navigator_stub_generator.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/pydantic_model_generator.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/utterance_generator.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/cache_matching.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/chat_session.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/cli.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/command_context_model.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/command_directory.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/command_executor.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/command_interfaces.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/command_metadata_api.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/command_routing.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/docs/context_modules_prd.txt +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/extended_workflow_example/README.md +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/extended_workflow_example/_commands/WorkItem/get_status.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/extended_workflow_example/_commands/generate_report.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/extended_workflow_example/_commands/startup.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/extended_workflow_example/simple_workflow_template.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/extended_workflow_example/workflow_inheritance_model.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/fastworkflow.env +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/fastworkflow.passwords.env +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/hello_world/_commands/README.md +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/hello_world/_commands/add_two_numbers.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/hello_world/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/hello_world/application/add_two_numbers.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_1/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_1/_commands/send_message.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_1/application/send_message.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_2/_commands/User/send_message.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_2/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_2/_commands/startup.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_2/application/user.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_3/_commands/PremiumUser/send_priority_message.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_3/_commands/User/send_message.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_3/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_3/_commands/initialize_user.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_3/application/user.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/_ChatRoom.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/add_user.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/broadcast_message.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/get_current_user.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/list_users.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/set_current_user.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/_commands/PremiumUser/_PremiumUser.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/_commands/PremiumUser/send_priority_message.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/_commands/User/_User.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/_commands/User/send_message.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/_commands/set_root_context.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/application/chatroom.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/application/user.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/context_hierarchy_model.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/messaging_app_4/startup_action.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/calculate.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/cancel_pending_order.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/exchange_delivered_order_items.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/find_user_id_by_email.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/find_user_id_by_name_zip.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/get_order_details.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/get_product_details.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/get_user_details.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/list_all_product_types.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_address.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_items.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_payment.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/modify_user_address.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/return_delivered_order_items.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/_commands/transfer_to_human_agents.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/context_inheritance_model.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/retail_data/__init__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/retail_data/orders.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/retail_data/products.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/retail_data/users.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/calculate.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/cancel_pending_order.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/exchange_delivered_order_items.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/find_user_id_by_email.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/find_user_id_by_name_zip.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/get_order_details.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/get_product_details.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/get_user_details.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/list_all_product_types.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_address.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_items.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_payment.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/modify_user_address.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/return_delivered_order_items.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/think.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/tool.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/transfer_to_human_agents.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/workflow_description.txt +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/__init__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/_WorkItem.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/add_child_workitem.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/get_status.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/go_to_workitem.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/mark_as_complete.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_first_child_workitem.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_last_child_workitem.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_next_workitem.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_previous_workitem.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/remove_all_child_workitems.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/remove_child_workitem.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/show_schema.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/_commands/startup.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/application/__init__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/application/workitem.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/simple_workflow_template.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/simple_workflow_template/startup_action.json +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/mcp_server.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/model_pipeline_training.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/refine/__main__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/run/__init__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/run/__main__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/run_fastapi_mcp/__init__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/run_fastapi_mcp/conversation_store.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/run_fastapi_mcp/mcp_specific.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/run_fastapi_mcp/redoc_2_standalone_html.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/train/__init__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/train/__main__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/train/generate_synthetic.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/user_message_queues.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/__init__.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/chat_adapter.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/command_dependency_graph.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/context_utils.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/dspy_cache_utils.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/dspy_logger.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/dspy_utils.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/env.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/fuzzy_match.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/generate_param_examples.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/logging.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/parameterize_func_decorator.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/pydantic_model_2_dspy_signature_class.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/python_utils.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/react.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/signatures.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/startup_progress.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/workflow.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/workflow_agent.py +0 -0
- {fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/workflow_inheritance_model.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fastworkflow
|
|
3
|
-
Version: 2.17.
|
|
3
|
+
Version: 2.17.8
|
|
4
4
|
Summary: A framework for rapidly building large-scale, deterministic, interactive workflows with a fault-tolerant, conversational UX
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Keywords: fastworkflow,ai,workflow,llm,openai
|
|
@@ -82,6 +82,32 @@ uvicorn services.run_fastapi.main:app --workflow_path /path/to/workflow --expect
|
|
|
82
82
|
- Tokens without valid signatures are rejected
|
|
83
83
|
- Recommended for production deployments in untrusted environments
|
|
84
84
|
|
|
85
|
+
### Token Access in Workflow Context
|
|
86
|
+
|
|
87
|
+
JWT tokens are automatically passed to workflows via the `workflow_context` parameter as `http_bearer_token`. This allows workflows to access the bearer token for making authenticated API calls or forwarding authentication.
|
|
88
|
+
|
|
89
|
+
**Important notes:**
|
|
90
|
+
- The token is **only available to authenticated endpoints** (those using `get_session_and_ensure_runtime` dependency)
|
|
91
|
+
- The token is stored in the workflow context dictionary under the key `http_bearer_token`
|
|
92
|
+
- Token is **automatically updated** on every authenticated request, ensuring workflows always have the current valid token
|
|
93
|
+
- Token expiration is **automatically verified** by `verify_token()` in both secure mode (`--expect_encrypted_jwt` flag) and trusted network mode
|
|
94
|
+
- In secure mode: Full cryptographic signature verification + expiration checking
|
|
95
|
+
- In trusted network mode: Expiration checking is performed (signature verification disabled)
|
|
96
|
+
- Tokens should be treated as sensitive data and handled securely in workflows
|
|
97
|
+
- The `/initialize` endpoint is unauthenticated and does NOT provide a token to the workflow context; tokens are only available after calling `/initialize` and using the returned token in subsequent requests
|
|
98
|
+
|
|
99
|
+
**Example usage in workflow:**
|
|
100
|
+
|
|
101
|
+
```python
|
|
102
|
+
# In workflow code
|
|
103
|
+
workflow_context = self._context # Gets the workflow_context
|
|
104
|
+
bearer_token = workflow_context.get('http_bearer_token')
|
|
105
|
+
|
|
106
|
+
# Use token for API calls
|
|
107
|
+
headers = {"Authorization": f"Bearer {bearer_token}"}
|
|
108
|
+
response = requests.get("https://api.example.com/data", headers=headers)
|
|
109
|
+
```
|
|
110
|
+
|
|
85
111
|
## API Endpoints (REST)
|
|
86
112
|
|
|
87
113
|
### `POST /initialize`
|
|
@@ -126,7 +126,8 @@ async def get_session_and_ensure_runtime(
|
|
|
126
126
|
workflow_path=ARGS.workflow_path,
|
|
127
127
|
context=json.loads(ARGS.context) if ARGS.context else None,
|
|
128
128
|
startup_command=ARGS.startup_command,
|
|
129
|
-
startup_action=fastworkflow.Action(**json.loads(ARGS.startup_action)) if ARGS.startup_action else None
|
|
129
|
+
startup_action=fastworkflow.Action(**json.loads(ARGS.startup_action)) if ARGS.startup_action else None,
|
|
130
|
+
http_bearer_token=session.http_bearer_token
|
|
130
131
|
)
|
|
131
132
|
|
|
132
133
|
return session
|
|
@@ -269,6 +269,14 @@ def verify_token(token: str, expected_type: str = "access") -> dict:
|
|
|
269
269
|
logger.warning(f"Token decoding failed: {e}")
|
|
270
270
|
raise JWTError(f"Failed to decode token: {e}") from e
|
|
271
271
|
|
|
272
|
+
# Manually check expiration even in unverified mode
|
|
273
|
+
if exp_timestamp := payload.get("exp"):
|
|
274
|
+
import time
|
|
275
|
+
current_time = int(time.time())
|
|
276
|
+
if exp_timestamp < current_time:
|
|
277
|
+
logger.warning(f"Token expired: exp={exp_timestamp}, now={current_time}")
|
|
278
|
+
raise JWTError("Token has expired")
|
|
279
|
+
|
|
272
280
|
# Validate token type for consistency (outside try-except to allow JWTError to propagate)
|
|
273
281
|
if payload.get("type") != expected_type:
|
|
274
282
|
raise JWTError(f"Invalid token type: expected {expected_type}, got {payload.get('type')}")
|
|
@@ -42,6 +42,7 @@ class SessionData(BaseModel):
|
|
|
42
42
|
issued_at: int # Unix timestamp
|
|
43
43
|
expires_at: int # Unix timestamp
|
|
44
44
|
jti: str # JWT ID (unique token identifier)
|
|
45
|
+
http_bearer_token: Optional[str] = None # The actual JWT token string for workflow context access
|
|
45
46
|
|
|
46
47
|
|
|
47
48
|
class InvokeRequest(BaseModel):
|
|
@@ -174,13 +175,14 @@ def get_session_from_jwt(
|
|
|
174
175
|
try:
|
|
175
176
|
payload = verify_token(token, expected_type="access")
|
|
176
177
|
|
|
177
|
-
# Extract session data from payload
|
|
178
|
+
# Extract session data from payload, including the token for workflow context
|
|
178
179
|
return SessionData(
|
|
179
180
|
user_id=payload["sub"],
|
|
180
181
|
token_type=payload["type"],
|
|
181
182
|
issued_at=payload["iat"],
|
|
182
183
|
expires_at=payload["exp"],
|
|
183
|
-
jti=payload["jti"]
|
|
184
|
+
jti=payload["jti"],
|
|
185
|
+
http_bearer_token=token # Store the actual token for workflow access
|
|
184
186
|
)
|
|
185
187
|
|
|
186
188
|
except JWTError as e:
|
|
@@ -204,7 +206,8 @@ async def ensure_user_runtime_exists(
|
|
|
204
206
|
context: Optional[dict] = None,
|
|
205
207
|
startup_command: Optional[str] = None,
|
|
206
208
|
startup_action: Optional['fastworkflow.Action'] = None,
|
|
207
|
-
stream_format: str = "ndjson"
|
|
209
|
+
stream_format: str = "ndjson",
|
|
210
|
+
http_bearer_token: Optional[str] = None
|
|
208
211
|
) -> None:
|
|
209
212
|
"""
|
|
210
213
|
Ensure a user runtime exists in the session manager. If not, create it.
|
|
@@ -220,6 +223,7 @@ async def ensure_user_runtime_exists(
|
|
|
220
223
|
startup_command: Optional startup command
|
|
221
224
|
startup_action: Optional startup action
|
|
222
225
|
stream_format: Stream format preference ("ndjson" or "sse", default "ndjson")
|
|
226
|
+
http_bearer_token: Optional JWT token to update in workflow context
|
|
223
227
|
|
|
224
228
|
Raises:
|
|
225
229
|
HTTPException: If session creation fails
|
|
@@ -228,8 +232,30 @@ async def ensure_user_runtime_exists(
|
|
|
228
232
|
existing_runtime = await session_manager.get_session(user_id)
|
|
229
233
|
if existing_runtime:
|
|
230
234
|
logger.debug(f"Session for user_id {user_id} already exists, skipping creation")
|
|
235
|
+
|
|
236
|
+
# Update the workflow's context with the current token if provided
|
|
237
|
+
if http_bearer_token and existing_runtime.chat_session:
|
|
238
|
+
active_workflow = existing_runtime.chat_session.get_active_workflow()
|
|
239
|
+
if active_workflow and active_workflow.context:
|
|
240
|
+
# Update the workflow's context with the current token
|
|
241
|
+
# Note: We mutate the dictionary in-place (no setter call), which means:
|
|
242
|
+
# 1. The change is immediate and visible to workflow code
|
|
243
|
+
# 2. The workflow is NOT marked dirty (won't persist to disk)
|
|
244
|
+
# 3. This is intentional for JWT tokens - we don't want to persist sensitive tokens
|
|
245
|
+
active_workflow.context['http_bearer_token'] = http_bearer_token
|
|
246
|
+
logger.debug(f"Updated http_bearer_token in workflow context for user_id {user_id}")
|
|
247
|
+
|
|
231
248
|
return
|
|
232
249
|
|
|
250
|
+
# Prepare workflow context, ensuring http_bearer_token is available
|
|
251
|
+
if http_bearer_token:
|
|
252
|
+
if context:
|
|
253
|
+
# Add or replace http_bearer_token in the context
|
|
254
|
+
context['http_bearer_token'] = http_bearer_token
|
|
255
|
+
else:
|
|
256
|
+
# Initialize context with http_bearer_token
|
|
257
|
+
context = {'http_bearer_token': http_bearer_token}
|
|
258
|
+
|
|
233
259
|
logger.info(f"Creating new session for user_id: {user_id}")
|
|
234
260
|
|
|
235
261
|
# Resolve conversation store base folder from SPEEDDICT_FOLDERNAME/user_conversations
|
|
@@ -9,7 +9,7 @@ repository = "https://github.com/radiantlogicinc/fastworkflow"
|
|
|
9
9
|
|
|
10
10
|
[tool.poetry]
|
|
11
11
|
name = "fastworkflow"
|
|
12
|
-
version = "2.17.
|
|
12
|
+
version = "2.17.8"
|
|
13
13
|
description = "A framework for rapidly building large-scale, deterministic, interactive workflows with a fault-tolerant, conversational UX"
|
|
14
14
|
authors = ["Dhar Rawal <drawal@radiantlogic.com>"]
|
|
15
15
|
license = "Apache-2.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/command_dependency_resolver.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/build/inheritance_block_regenerator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/fastworkflow.passwords.env
RENAMED
|
File without changes
|
{fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/hello_world/_commands/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/calculate.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/think.py
RENAMED
|
File without changes
|
{fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/examples/retail_workflow/tools/tool.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/run_fastapi_mcp/conversation_store.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/run_fastapi_mcp/redoc_2_standalone_html.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastworkflow-2.17.7 → fastworkflow-2.17.8}/fastworkflow/utils/parameterize_func_decorator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|