* feat: update DifyPluginEnv to set default for REMOTE_INSTALL_URL and add unit tests for environment configurations
- Set default value of REMOTE_INSTALL_URL to None in DifyPluginEnv.
- Introduced unit tests for various installation methods including local, remote, and serverless configurations, ensuring proper functionality without parameters and with specific settings.
* fix: update condition for install_url check in Plugin class
- Changed the condition to explicitly check for None instead of a truthy value, improving clarity and preventing potential issues with falsy values.
* apply ruff
* support REMOTE_INSTALL_URL
* nit
* nit
* passing remote_install_host and remote_install_port to TCPReaderWriter
* fix the host and port parsing approach without yarl
* extract method for parsing the host and port
* nit
* nit
* nit
* nit
* improve _get_remote_install_host_and_port method
* fix style
* fix style
- Introduced an optional `repo` field in the `PluginConfiguration` class to store the repository URL of the plugin, enhancing the configuration capabilities.
* feat: add unit test for AgentStrategy constructor
- Introduced a new test to validate the constructor of the AgentStrategy class, ensuring it is not overridden.
- Created an implementation of AgentStrategy for testing purposes, confirming that the constructor behaves as expected.
- Utilized ThreadPoolExecutor and session management to facilitate the test setup.
* fix: apply ruff
* fix: correct argument order in AgentStrategyImpl instantiation in test
- Added `@final` decorator to the constructors of `AgentStrategy`, `Endpoint`, `AIModel`, and `Tool` classes to prevent overriding.
- Included documentation notes in each constructor to indicate that they should not be overridden.
* fix: improve buffer handling
* tests:add tests for StdioRequestReader
- Introduced a new private method `_read_async` to handle asynchronous reading from stdin.
- Updated `_read_stream` to utilize the new `_read_async` method for improved code clarity and maintainability.
- Added a new test file `test_stdio.py` to validate the functionality of the StdioRequestReader, ensuring correct handling of input data streams.
* fix: remove useless code
* fix: handle empty lines in StdioRequestReader
- Updated the StdioRequestReader to strip and skip empty lines during input processing.
- Added a new test to validate the handling of empty lines, ensuring the reader correctly processes a stream with mixed content.
* apply ruff
---------
Co-authored-by: Yeuoly <admin@srmxy.cn>
- Introduced a class method `_load_yaml_file` to encapsulate YAML file loading logic.
- Enhanced the `validate_endpoints` method to support both direct endpoint configurations and YAML file paths.
- Added unit tests for loading endpoint configurations from YAML strings and files.
- Added exception handling for unsupported protocols in the `get_blob` method.
- Raises a ValueError with a clear message if the URL is invalid, guiding users to check the `FILES_URL` environment variable.
- Maintained existing functionality while improving robustness against HTTP request failures.
- Added CLI for generating documentation with `generate-docs` command.
- Introduced `SchemaDocumentationGenerator` to create structured documentation from schemas.
- Implemented `SchemaDoc` class for schema metadata and documentation management.
- Updated `PluginConfiguration` to include descriptions for plugin components.
- Added support for outside reference fields in the SchemaDocumentationGenerator to improve documentation clarity.
- Updated SchemaDoc to include outside_reference_fields parameter.
- Modified various entity classes to utilize outside_reference_fields for better schema representation.
- Introduced new container type checks and helper methods for handling dynamic fields in documentation generation.
* feat(http_parser): add functions to parse raw HTTP requests and convert Request objects to raw data
- Implemented `parse_raw_request` to convert raw HTTP data into a Request object, including support for headers and body.
- Added `convert_request_to_raw_data` to transform a Request object back into raw HTTP data.
- Created unit tests for both functions to ensure correct parsing and conversion behavior.
* apply ruff
* feat: support var-selector params & surpport retriever_resources messsage
* opt: rename var-select to any
* fix: line too long
* opt: Add RetrieverResource Type
- Changed minimum_dify_version from required to optional in PluginConfiguration.
- Added unit tests to verify behavior when minimum_dify_version is not provided.
* refactor: replace json.loads with TypeAdapter for JSON validation in request readers and model
- Updated JSON parsing in BackwardsInvocation, StdioRequestReader, and TCPReaderWriter to use TypeAdapter for improved validation.
- Enhanced error handling in OAICompatLargeLanguageModel by replacing json.loads with TypeAdapter, ensuring better compliance with expected JSON schema.
* fix: linter
* feat(invocation): add FetchAppInvocation and update type hints for improved clarity
- Introduced FetchAppInvocation class to handle fetching app data.
- Updated type hints in ToolInvokeMessage and related classes to use Mapping for better type safety.
- Added FetchApp enum value to InvokeType for consistency in invocation types.
* apply ruff
* feat(python): Add specific error classes for StorageInvocation
Replace generic `Exception` raises with `NotFoundError` when the key is missing,
and `StorageInvocationError` for other response errors. This improves error
handling at call sites by avoiding overly generic exceptions.
# Conflicts:
# python/dify_plugin/invocations/storage.py
* test(python): Add test cases for `StorageInvocation`
- Ensure `StorageInvocation` raises the correct exceptions when data is missing
or `_backwards_invoke` returns an invalid response.
- Verify that `StorageInvocation` correctly processes the result returned
by `_backwards_invoke`.
* chore(python): fix linter violations
* feat(python): Change the exception `StorageInvocation.exist` raised
* test(python): Add test cases for `StorageInvocation.exist`.
* chore(python): temporarily disable `UP007` rule in Ruff
Disable the `UP007` rule temporarily due to numerous existing
violations in the current codebase.
* ci(python): add lint and test for Python SDK
* ci: Add mega-linter
* chore(python): Add final newline to markdown files
* fix(python): Fix linter issues by using ruff's auto fix
* fix(python): Fix TRY400 linter violations
Ruff suggests using `logger.exception` to log when
logging an exception, instead of using `logging.error`.
The former logs the exception and the traceback
automatically.
ref: https://docs.astral.sh/ruff/rules/error-instead-of-exception/
* fix(python): fix ruff linter violations
* test(python): Add Test cases for LLM entities
Test the initialization of `LLMResult` and `LLMResultChunk`.
* test(python): Add test for `AgentModelConfig`
Ensures that the `history_prompt_messages` attribute is
not shared between instances of `AgentModelConfig`.
* chore(python): output diffs in Ruff's format check
* style(python): format code with Ruff
* chore(python): Add a bash script for fix and format python code
* chore: add `persist-credentials: false` to checkout action
Enhances security by preventing subsequent
steps from accessing GitHub credentials, reducing
potential attack surfaces.
Ref: https://github.com/actions/checkout#checkout-v4
* refactor: remove prompt_messages from LLMResult and LLMResultChunk
* fix: add backward compatibility for deprecated prompt_messages field in LLMResult and LLMResultChunk
* fix: set default value for prompt_messages field to an empty list in LLMResult and LLMResultChunk for backward compatibility
* feat: add test for LLMResult to validate prompt_messages field and ensure backward compatibility
* apply ruff