From 02ef5fbfa20b43b0f8ceb2c9d0fc13d135148b4f Mon Sep 17 00:00:00 2001 From: Denis Polityuk Date: Fri, 28 Aug 2026 12:56:46 +0300 Subject: [PATCH 1/6] RWs3 --- gitpoldan/RWs3/gitpoldan-RWs3_0.0.1.difypkg | Bin 0 -> 19868 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 gitpoldan/RWs3/gitpoldan-RWs3_0.0.1.difypkg diff --git a/gitpoldan/RWs3/gitpoldan-RWs3_0.0.1.difypkg b/gitpoldan/RWs3/gitpoldan-RWs3_0.0.1.difypkg new file mode 100644 index 0000000000000000000000000000000000000000..cc89c5fdd7cb6ca12afcda39e6e9875b984a9c3d GIT binary patch literal 19868 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 UX9X7h3=A?rcoN9k>jvTh01iwv Date: Fri, 28 Aug 2026 14:11:29 +0300 Subject: [PATCH 2/6] new 4 plugins gitpoldan --- gitpoldan/fusion_query_engine/PRIVACY.md | 34 +++++++++++ gitpoldan/fusion_query_engine/README.md | 57 ++++++++++++++++++ ...itpoldan-fusion_query_engine_1.1.1.difypkg | Bin 0 -> 23107 bytes gitpoldan/fusion_query_engine/manifest.yaml | 38 ++++++++++++ .../readme/README_ru_RU.md | 44 ++++++++++++++ .../fusion_query_engine/requirements.txt | 2 + gitpoldan/qdrant-hybrid/PRIVACY.md | 36 +++++++++++ gitpoldan/qdrant-hybrid/README.md | 53 ++++++++++++++++ .../gitpoldan-qdrant-hybrid_1.0.7.difypkg | Bin 0 -> 27822 bytes gitpoldan/qdrant-hybrid/manifest.yaml | 46 ++++++++++++++ .../qdrant-hybrid/readme/README_ru_RU.md | 42 +++++++++++++ gitpoldan/qdrant-hybrid/requirements.txt | 3 + gitpoldan/task_manager/PRIVACY.md | 33 ++++++++++ gitpoldan/task_manager/README.md | 57 ++++++++++++++++++ .../gitpoldan-task_manager_0.0.1.difypkg | Bin 0 -> 38305 bytes gitpoldan/task_manager/manifest.yaml | 35 +++++++++++ gitpoldan/task_manager/readme/README_ru_RU.md | 45 ++++++++++++++ gitpoldan/task_manager/requirements.txt | 3 + gitpoldan/tool_capture_agent/PRIVACY.md | 28 +++++++++ gitpoldan/tool_capture_agent/README.md | 53 ++++++++++++++++ ...gitpoldan-tool_capture_agent_0.3.3.difypkg | Bin 0 -> 45915 bytes gitpoldan/tool_capture_agent/manifest.yaml | 37 ++++++++++++ .../tool_capture_agent/readme/README_ru_RU.md | 42 +++++++++++++ gitpoldan/tool_capture_agent/requirements.txt | 2 + 24 files changed, 690 insertions(+) create mode 100644 gitpoldan/fusion_query_engine/PRIVACY.md create mode 100644 gitpoldan/fusion_query_engine/README.md create mode 100644 gitpoldan/fusion_query_engine/gitpoldan-fusion_query_engine_1.1.1.difypkg create mode 100644 gitpoldan/fusion_query_engine/manifest.yaml create mode 100644 gitpoldan/fusion_query_engine/readme/README_ru_RU.md create mode 100644 gitpoldan/fusion_query_engine/requirements.txt create mode 100644 gitpoldan/qdrant-hybrid/PRIVACY.md create mode 100644 gitpoldan/qdrant-hybrid/README.md create mode 100644 gitpoldan/qdrant-hybrid/gitpoldan-qdrant-hybrid_1.0.7.difypkg create mode 100644 gitpoldan/qdrant-hybrid/manifest.yaml create mode 100644 gitpoldan/qdrant-hybrid/readme/README_ru_RU.md create mode 100644 gitpoldan/qdrant-hybrid/requirements.txt create mode 100644 gitpoldan/task_manager/PRIVACY.md create mode 100644 gitpoldan/task_manager/README.md create mode 100644 gitpoldan/task_manager/gitpoldan-task_manager_0.0.1.difypkg create mode 100644 gitpoldan/task_manager/manifest.yaml create mode 100644 gitpoldan/task_manager/readme/README_ru_RU.md create mode 100644 gitpoldan/task_manager/requirements.txt create mode 100644 gitpoldan/tool_capture_agent/PRIVACY.md create mode 100644 gitpoldan/tool_capture_agent/README.md create mode 100644 gitpoldan/tool_capture_agent/gitpoldan-tool_capture_agent_0.3.3.difypkg create mode 100644 gitpoldan/tool_capture_agent/manifest.yaml create mode 100644 gitpoldan/tool_capture_agent/readme/README_ru_RU.md create mode 100644 gitpoldan/tool_capture_agent/requirements.txt diff --git a/gitpoldan/fusion_query_engine/PRIVACY.md b/gitpoldan/fusion_query_engine/PRIVACY.md new file mode 100644 index 000000000..b79618d9f --- /dev/null +++ b/gitpoldan/fusion_query_engine/PRIVACY.md @@ -0,0 +1,34 @@ +# Privacy Policy — Fusion Query Engine + +## Overview + +This tool plugin runs inside your Dify workspace. It does **not** collect, +store, or transmit data to the plugin author. User queries, optional chat +history, and pre-fetched context are forwarded to **LLM providers you configure** +in Dify via reverse model invocation. + +## Data we process + +| Data | Purpose | +|------|---------| +| User query | COMPACT synthesis input | +| Optional chat history (JSON) | Condense multi-turn dialogue before synthesis | +| Context chunks (`source_nodes` or `context_text`) | RAG context for expansion or answer modes | + +## Third-party services + +| Service | Usage | +|---------|--------| +| LLM providers selected in Dify | Receive prompts for query expansion and answer generation | + +The plugin does not call external APIs directly. Credentials and routing are +managed by your Dify workspace. + +## Storage and telemetry + +- No data persisted by the plugin beyond the tool call lifecycle. +- No analytics, tracking, or author-operated infrastructure. + +## Contact + +Author: **gitpoldan**. Questions: bv2020donch@gmail.com diff --git a/gitpoldan/fusion_query_engine/README.md b/gitpoldan/fusion_query_engine/README.md new file mode 100644 index 000000000..85ff588c1 --- /dev/null +++ b/gitpoldan/fusion_query_engine/README.md @@ -0,0 +1,57 @@ +# Fusion Query Engine — Dify Plugin + +LlamaIndex-based tool plugin for Dify that performs **windowed COMPACT synthesis** +over pre-fetched context (Qdrant points or plain text), with optional chat-history +condensing. + +Author: **gitpoldan**. Provider id: `gitpoldan/fusion_query_engine`. + +## Features + +- **Two modes**: `query_expansion` (enrich query) and `answer_query` (generate answer) +- **Pre-fetched context** — no Qdrant calls inside the plugin; nodes from upstream workflow +- **Chat history** — optional JSON `chat_history` for multi-turn condensing +- **Two LLM selectors** — separate models for expansion and answer steps + +## Setup + +1. Install the plugin in Dify (Marketplace upload or remote debug). +2. Add the **Fusion Query Engine** tool to a Workflow or Chatflow. +3. Configure **model_expansion** and **model_answer** (LLM model selectors from your workspace). +4. Wire inputs: + - **query** — user question (`{{sys.query}}` or LLM output) + - **source_nodes** — array from Knowledge Retrieval or a Code node (Qdrant-style points) + - **context_text** — plain-text fallback when `source_nodes` is empty + - **chat_history** — optional JSON string of prior turns (see Usage) + +No external API credentials beyond LLMs already configured in Dify. + +## Usage + +**Two-step RAG pipeline:** + +1. Run tool with `mode=query_expansion` → enriched query in `enriched_query` +2. Run Knowledge Retrieval with enriched query +3. Run tool with `mode=answer_query` → final answer in `response` + +**Outputs:** `response`, `mode`, `enriched_query` (expansion mode only). + +Example `source_nodes` element: + +```json +{"id": "chunk-1", "payload": {"text": "...", "metadata": {"file_name": "doc.pdf"}}, "score": 0.91} +``` + +Requires Dify >= 1.14.0. + +## Privacy + +Queries and context are sent to LLM providers configured in your workspace. See [PRIVACY.md](PRIVACY.md). + +## Support + +- Source: https://github.com/gitpoldan/dify/tree/main/polden-plugins/fusion_query_engine +- GitHub Issues: https://github.com/gitpoldan/dify/issues +- Email: bv2020donch@gmail.com + +Russian documentation: [readme/README_ru_RU.md](readme/README_ru_RU.md). diff --git a/gitpoldan/fusion_query_engine/gitpoldan-fusion_query_engine_1.1.1.difypkg b/gitpoldan/fusion_query_engine/gitpoldan-fusion_query_engine_1.1.1.difypkg new file mode 100644 index 0000000000000000000000000000000000000000..60dc2233f091a9628124988f1bdaeefb68e3dfe0 GIT binary patch literal 23107 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 OO9h~z#XbJ@>i+=U(l*Qh literal 0 HcmV?d00001 diff --git a/gitpoldan/fusion_query_engine/manifest.yaml b/gitpoldan/fusion_query_engine/manifest.yaml new file mode 100644 index 000000000..b8f445b2c --- /dev/null +++ b/gitpoldan/fusion_query_engine/manifest.yaml @@ -0,0 +1,38 @@ +version: 1.1.1 +type: plugin +author: gitpoldan +name: fusion_query_engine +label: + en_US: Fusion Query Engine + ru_RU: Fusion Query Engine +description: + en_US: LlamaIndex COMPACT query engine with query expansion and answer modes over pre-fetched context. + ru_RU: LlamaIndex COMPACT-движок с режимами расширения запроса и ответа по предзагруженному контексту. +icon: icon.svg +resource: + memory: 536870912 + permission: + model: + enabled: true + llm: true + text_embedding: false + rerank: false + tts: false + speech2text: false + moderation: false +plugins: + tools: + - provider/fusion_query_engine.yaml +meta: + version: 1.1.1 + minimum_dify_version: "1.14.0" + arch: + - amd64 + - arm64 + runner: + language: python + version: "3.12" + entrypoint: main +created_at: 2025-06-19T12:00:00+00:00 +privacy: PRIVACY.md +verified: false diff --git a/gitpoldan/fusion_query_engine/readme/README_ru_RU.md b/gitpoldan/fusion_query_engine/readme/README_ru_RU.md new file mode 100644 index 000000000..72143e97c --- /dev/null +++ b/gitpoldan/fusion_query_engine/readme/README_ru_RU.md @@ -0,0 +1,44 @@ +# Fusion Query Engine — Dify Plugin + +LlamaIndex-плагин для Dify: **COMPACT-синтез** по предзагруженному контексту +(Qdrant points или текст) с опциональным сжатием истории чата. + +Автор: **gitpoldan**. ID провайдера: `gitpoldan/fusion_query_engine`. + +## Возможности + +- **Два режима**: `query_expansion` (обогащение запроса) и `answer_query` (ответ) +- **Предзагруженный контекст** — без вызовов Qdrant внутри плагина +- **История чата** — опциональный JSON `chat_history` +- **Два LLM-селектора** — отдельные модели для expansion и answer + +## Настройка + +1. Установите плагин в Dify. +2. Добавьте инструмент **Fusion Query Engine** в Workflow или Chatflow. +3. Настройте **model_expansion** и **model_answer** (LLM из вашего workspace). +4. Подключите **query**, **source_nodes** / **context_text**, опционально **chat_history**. + +Внешние credentials не нужны — только LLM, уже настроенные в Dify. + +## Использование + +**Двухшаговый RAG:** + +1. `mode=query_expansion` → `enriched_query` +2. Knowledge Retrieval с обогащённым запросом +3. `mode=answer_query` → `response` + +Требуется Dify >= 1.14.0. + +## Конфиденциальность + +Запросы и контекст отправляются в LLM-провайдеры вашего workspace. См. [PRIVACY.md](../PRIVACY.md). + +## Поддержка + +- Исходники: https://github.com/gitpoldan/dify/tree/main/polden-plugins/fusion_query_engine +- GitHub Issues: https://github.com/gitpoldan/dify/issues +- Email: bv2020donch@gmail.com + +English documentation: [README.md](../README.md). diff --git a/gitpoldan/fusion_query_engine/requirements.txt b/gitpoldan/fusion_query_engine/requirements.txt new file mode 100644 index 000000000..427bb65f7 --- /dev/null +++ b/gitpoldan/fusion_query_engine/requirements.txt @@ -0,0 +1,2 @@ +dify_plugin>=0.9.1,<1.0.0 +llama-index-core>=0.12.0,<0.13.0 diff --git a/gitpoldan/qdrant-hybrid/PRIVACY.md b/gitpoldan/qdrant-hybrid/PRIVACY.md new file mode 100644 index 000000000..c4ee51987 --- /dev/null +++ b/gitpoldan/qdrant-hybrid/PRIVACY.md @@ -0,0 +1,36 @@ +# Qdrant Hybrid Retriever Privacy Policy + +## Data We Process + +| Data Type | Details | Purpose | +| --- | --- | --- | +| Connection configuration | Qdrant `base_url`, API key, extra headers (set by the user in Dify) | Connect to the user-owned Qdrant cluster | +| Request payloads | Collection name, query text, filters, retrieval options | Execute hybrid retrieval for the request lifetime only | +| Embedding inputs | Query text when `embedding_model_config` is provided | Forwarded via Dify reverse model invocation | +| Rerank inputs | Query and chunk texts when reranking is enabled | Dify rerank model or local `fastembed` cross-encoder | + +The plugin does **not** collect names, emails, device identifiers, or other personal +data beyond what the workflow owner supplies. + +## Third-Party Services + +| Service | Usage | Privacy Policy | +| --- | --- | --- | +| Qdrant (user-owned cluster) | Vector search and payload retrieval | https://qdrant.tech/privacy/ | +| Embedding / rerank providers in Dify | Text-to-vector / rerank via workspace credentials | Provider policy of your choice | + +No data is transmitted to the plugin author. + +## Storage & Retention + +- The plugin **does not persist** query results or credentials. +- `fastembed` BM25/rerank models are cached locally by the runtime on first use. + +## Security + +- API keys are never logged; Qdrant Cloud traffic uses HTTPS. +- No telemetry or analytics. + +## Contact + +Author: **gitpoldan**. Questions: bv2020donch@gmail.com diff --git a/gitpoldan/qdrant-hybrid/README.md b/gitpoldan/qdrant-hybrid/README.md new file mode 100644 index 000000000..3430a26df --- /dev/null +++ b/gitpoldan/qdrant-hybrid/README.md @@ -0,0 +1,53 @@ +# Qdrant Hybrid Retriever (gitpoldan) + +Qdrant hybrid retrieval plugin for Dify: dense + sparse (BM25) with DBSF/RRF +fusion, optional MMR, tenant automode/ratios, payload filters, and optional reranking. + +Author: **gitpoldan**. Provider id: `gitpoldan/qdrant_hybrid_retriever`. + +## Features + +- **Hybrid search** — dense vectors + BM25 sparse via official `qdrant-client` +- **Fusion** — DBSF (default) or RRF; optional MMR on dense branch +- **Tenant modes** — automode median prune and/or weighted quota merge +- **Filters** — `point_type`, `corpus_docs`, `source`, JSON `payload_filters` +- **Rerank** — optional Dify rerank model or local `fastembed` fallback +- **LLM-friendly outputs** — `result`, `source_nodes`, `source_list_text`, `chunk_texts` + +## Setup + +1. Deploy Qdrant 1.15+ (MMR requires 1.15+). +2. Install the plugin and open **Tool provider → Qdrant Hybrid Retriever**. +3. Configure credentials: + +| Field | Required | Description | +|-------|----------|-------------| +| `base_url` | Yes | Qdrant URL, e.g. `https://xxx.cloud.qdrant.io:6333` | +| `api_key` | No | Required for Qdrant Cloud | +| `extra_headers` | No | Optional JSON HTTP headers | + +4. In the tool node, set **collection**, **text** (query), and **embedding_model_config** + (embedding model from your Dify workspace). + +## Usage + +Add **Hybrid Retriever** to a Workflow node. Key parameters: + +- `limit`, `prefetch_limit`, `fusion` (`dbsf` / `rrf`) +- `use_mmr`, `score_threshold`, `corpus_docs`, `payload_filters` (JSON) +- `enable_rerank`, `rerank_model_config` +- `all_from_top_k_source` — expand to all points from top-K sources (optional) + +Outputs: use `chunk_texts` or `source_nodes` as LLM context downstream. + +## Privacy + +Connects to your Qdrant cluster; embedding/rerank via Dify models. See [PRIVACY.md](PRIVACY.md). + +## Support + +- Source: https://github.com/gitpoldan/dify/tree/main/polden-plugins/qdrant-hybrid +- GitHub Issues: https://github.com/gitpoldan/dify/issues +- Email: bv2020donch@gmail.com + +Russian documentation: [readme/README_ru_RU.md](readme/README_ru_RU.md). diff --git a/gitpoldan/qdrant-hybrid/gitpoldan-qdrant-hybrid_1.0.7.difypkg b/gitpoldan/qdrant-hybrid/gitpoldan-qdrant-hybrid_1.0.7.difypkg new file mode 100644 index 0000000000000000000000000000000000000000..f640f01fdefe5cba4224534809f1e605ae665205 GIT binary patch literal 27822 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 P=ny4u--8S5zn=XcnnlyI literal 0 HcmV?d00001 diff --git a/gitpoldan/qdrant-hybrid/manifest.yaml b/gitpoldan/qdrant-hybrid/manifest.yaml new file mode 100644 index 000000000..a7a3bcb74 --- /dev/null +++ b/gitpoldan/qdrant-hybrid/manifest.yaml @@ -0,0 +1,46 @@ +version: 1.0.7 +type: plugin +author: gitpoldan +name: qdrant_hybrid_retriever +label: + en_US: Qdrant Hybrid Retriever + ja_JP: Qdrant Hybrid Retriever + zh_Hans: Qdrant 混合检索 + pt_BR: Qdrant Hybrid Retriever + ru_RU: Qdrant Hybrid Retriever +description: + en_US: Qdrant hybrid retriever built on the official qdrant-client. Dense + BM25 sparse retrieval with DBSF/RRF fusion, optional MMR, tenant automode/ratios, score_threshold, arbitrary payload filters, and optional reranking. + ja_JP: 公式 qdrant-client 上の Qdrant ハイブリッド検索。Dense + BM25 Sparse と DBSF/RRF 融合、MMR、tenant automode/ratios、score_threshold、任意 payload フィルタ、rerank 対応。 + zh_Hans: 基于官方 qdrant-client 的 Qdrant 混合检索:密集 + BM25 稀疏,DBSF/RRF 融合,可选 MMR、tenant automode/ratios、score_threshold、任意 payload 过滤与 rerank。 + pt_BR: Recuperação híbrida Qdrant sobre o qdrant-client oficial. Denso + BM25 esparso com fusão DBSF/RRF, MMR opcional, automode/ratios de tenants, score_threshold, filtros de payload arbitrários e rerank opcional. + ru_RU: Гибридный ретривер Qdrant на официальном qdrant-client. Dense + BM25 sparse с fusion DBSF/RRF, опциональным MMR, automode/ratios по tenants, score_threshold, произвольными payload-фильтрами и переранжированием. +icon: icon.svg +icon_dark: icon-dark.svg +resource: + memory: 536870912 + permission: + tool: + enabled: true + model: + enabled: true + text_embedding: true + rerank: true +plugins: + tools: + - provider/qdrant.yaml +meta: + version: 1.0.7 + minimum_dify_version: "1.14.0" + arch: + - amd64 + - arm64 + runner: + language: python + version: "3.12" + entrypoint: main +tags: + - search + - utilities +created_at: 2026-07-15T19:00:00+03:00 +privacy: PRIVACY.md +verified: false diff --git a/gitpoldan/qdrant-hybrid/readme/README_ru_RU.md b/gitpoldan/qdrant-hybrid/readme/README_ru_RU.md new file mode 100644 index 000000000..c31a69ccf --- /dev/null +++ b/gitpoldan/qdrant-hybrid/readme/README_ru_RU.md @@ -0,0 +1,42 @@ +# Qdrant Hybrid Retriever (gitpoldan) + +Гибридный ретривер Qdrant для Dify: dense + sparse (BM25), fusion DBSF/RRF, +опциональный MMR, automode/ratios по tenants, payload-фильтры и rerank. + +Автор: **gitpoldan**. ID провайдера: `gitpoldan/qdrant_hybrid_retriever`. + +## Возможности + +- **Гибридный поиск** — dense + BM25 через официальный `qdrant-client` +- **Fusion** — DBSF или RRF; опциональный MMR на dense-ветке +- **Tenant modes** — automode median prune и/или квоты по tenants +- **Фильтры** — `point_type`, `corpus_docs`, `source`, JSON `payload_filters` +- **Rerank** — модель Dify или локальный fallback `fastembed` +- **Выходы для LLM** — `source_nodes`, `chunk_texts`, `source_list_text` + +## Настройка + +1. Qdrant 1.15+ (MMR с 1.15+). +2. Установите плагин → **Tool provider → Qdrant Hybrid Retriever**. +3. Credentials: `base_url`, опционально `api_key`, `extra_headers`. +4. В узле инструмента: **collection**, **text**, **embedding_model_config**. + +## Использование + +Добавьте **Hybrid Retriever** в Workflow. Ключевые параметры: `limit`, +`fusion`, `use_mmr`, `corpus_docs`, `payload_filters`, `enable_rerank`, +`all_from_top_k_source`. + +Используйте `chunk_texts` или `source_nodes` как контекст для LLM. + +## Конфиденциальность + +Подключение к вашему Qdrant; embedding/rerank через модели Dify. См. [PRIVACY.md](../PRIVACY.md). + +## Поддержка + +- Исходники: https://github.com/gitpoldan/dify/tree/main/polden-plugins/qdrant-hybrid +- GitHub Issues: https://github.com/gitpoldan/dify/issues +- Email: bv2020donch@gmail.com + +English documentation: [README.md](../README.md). diff --git a/gitpoldan/qdrant-hybrid/requirements.txt b/gitpoldan/qdrant-hybrid/requirements.txt new file mode 100644 index 000000000..01b93c6c3 --- /dev/null +++ b/gitpoldan/qdrant-hybrid/requirements.txt @@ -0,0 +1,3 @@ +dify_plugin>=0.9.1,<1.0.0 +qdrant-client>=1.15,<2.0 +fastembed>=0.3.6 diff --git a/gitpoldan/task_manager/PRIVACY.md b/gitpoldan/task_manager/PRIVACY.md new file mode 100644 index 000000000..9110d590a --- /dev/null +++ b/gitpoldan/task_manager/PRIVACY.md @@ -0,0 +1,33 @@ +# Privacy Policy — Transit Task Manager + +## Data this plugin processes + +- **Task data you send**: tenant identifiers, task titles, descriptions, + payloads, tags, statuses, TTL values and status metadata provided in tool + calls. +- **S3 / MinIO credentials**: endpoint, access key id, secret access key and + bucket configured on the tool provider. These are handled by the Dify runtime + and used only to connect to the object store you specify. + +## Where data is stored + +All task data is written to **your own S3 / MinIO bucket**, as one SQLite +database per tenant (`{prefix}/{namespace?}/{tenant}.sqlite`) plus a transient +lock object (`{tenant}.lock`). The plugin keeps no other copy: databases are +pulled into a temporary file for the duration of a single tool call and removed +afterwards. + +## Data sharing + +The plugin does not transmit your data to the plugin author or any third party. +Data flows only between the Dify host and the object storage endpoint you +configure. + +## Retention and deletion + +Retention is entirely under your control. Use `delete_task` (hard delete) to +remove records, or delete the tenant database object directly in your bucket. + +## Contact + +Author: **gitpoldan**. Questions: bv2020donch@gmail.com diff --git a/gitpoldan/task_manager/README.md b/gitpoldan/task_manager/README.md new file mode 100644 index 000000000..749d4af18 --- /dev/null +++ b/gitpoldan/task_manager/README.md @@ -0,0 +1,57 @@ +# Transit Task Manager (gitpoldan) + +Multi-tenant transit task manager for Dify Workflow and Agent apps. Tasks are +stored in a **MinIO / S3 bucket**, one SQLite database per tenant. Exposes +create / read / list / update / status-transition / delete tools, TTL +auto-expiration, and per-tenant statistics. + +Author: **gitpoldan**. Provider id: `gitpoldan/task_manager`. + +## Features + +- **S3-backed storage** — one SQLite DB per tenant in your bucket; no separate server. +- **Status state machine** — validated transitions with optional metadata on each change. +- **Concurrency safe** — lease lock + ETag conditional writes with retry on conflict. +- **Lazy TTL** — expired tasks cleaned on access or via `sweep_ttl`. + +## Setup + +1. Create an S3 or MinIO bucket (must already exist). +2. In Dify, install the plugin and open **Tool provider → Transit Task Manager**. +3. Configure credentials: + +| Field | Required | Description | +|-------|----------|-------------| +| `endpoint` | No | MinIO host (empty = AWS S3) | +| `access_key_id` | Yes | Access key | +| `secret_access_key` | Yes | Secret key | +| `use_https` | No | HTTPS for custom endpoint (default `true`) | +| `bucket` | Yes | Bucket name | +| `region` | No | AWS region (default `us-east-1`) | +| `prefix` | No | Base key prefix for all tenant DBs | + +4. Add task tools to a Workflow or Agent node. Every call requires a `tenant` id; + optional `namespace` groups tenants under a sub-path. + +## Usage + +Example workflow: + +1. **Tool: create_task** — `tenant`, `title`, optional `payload`, `ttl_seconds` +2. **Tool: set_status** — transition to `in_progress` / `completed` with metadata +3. **Tool: get_task** or **list_tasks** — read back state for downstream nodes + +Status flow: `created` → `pending` → `in_progress` → `completed` / `cancelled` / +`failed` / `expired`. + +## Privacy + +Task data is written only to your configured bucket. See [PRIVACY.md](PRIVACY.md). + +## Support + +- Source: https://github.com/gitpoldan/dify/tree/main/polden-plugins/task_manager +- GitHub Issues: https://github.com/gitpoldan/dify/issues +- Email: bv2020donch@gmail.com + +Russian documentation: [readme/README_ru_RU.md](readme/README_ru_RU.md). diff --git a/gitpoldan/task_manager/gitpoldan-task_manager_0.0.1.difypkg b/gitpoldan/task_manager/gitpoldan-task_manager_0.0.1.difypkg new file mode 100644 index 0000000000000000000000000000000000000000..65891d97441a0d993f5dfbf56c61f6fcecbc91cb GIT binary patch literal 38305 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 literal 0 HcmV?d00001 diff --git a/gitpoldan/task_manager/manifest.yaml b/gitpoldan/task_manager/manifest.yaml new file mode 100644 index 000000000..d5cd4c348 --- /dev/null +++ b/gitpoldan/task_manager/manifest.yaml @@ -0,0 +1,35 @@ +version: 0.0.1 +type: plugin +author: gitpoldan +name: task_manager +label: + en_US: Transit Task Manager + ru_RU: Транзитный таск-менеджер +description: + en_US: Multi-tenant transit task manager backed by S3. Stores one SQLite database per tenant, supports full task CRUD, a status state machine with per-transition metadata, and lazy TTL auto-expiration. + ru_RU: Мультитenantный транзитный таск-менеджер поверх S3. Хранит одну SQLite-БД на тенанта, поддерживает полный CRUD по задачам, конечный автомат статусов с метаданными на переход и ленивое авто-истечение по TTL. +icon: icon.svg +tags: + - productivity + - utilities +resource: + memory: 268435456 + permission: + tool: + enabled: true +plugins: + tools: + - provider/task_manager.yaml +meta: + version: 0.0.1 + minimum_dify_version: "1.4.0" + arch: + - amd64 + - arm64 + runner: + language: python + version: "3.12" + entrypoint: main +created_at: 2026-07-13T00:00:00+00:00 +privacy: PRIVACY.md +verified: false diff --git a/gitpoldan/task_manager/readme/README_ru_RU.md b/gitpoldan/task_manager/readme/README_ru_RU.md new file mode 100644 index 000000000..635b7102e --- /dev/null +++ b/gitpoldan/task_manager/readme/README_ru_RU.md @@ -0,0 +1,45 @@ +# Transit Task Manager (gitpoldan) + +Мультитenantный транзитный таск-менеджер для Dify Workflow и Agent. Задачи +хранятся в **бакете MinIO / S3** — одна SQLite-БД на тенанта. Инструменты: +создание / чтение / список / обновление / смена статуса / удаление, ленивое +TTL-истечение и статистика по тенанту. + +Автор: **gitpoldan**. ID провайдера: `gitpoldan/task_manager`. + +## Возможности + +- **Хранение в S3** — одна SQLite-БД на тенанта; отдельный сервер не нужен. +- **Конечный автомат статусов** — валидируемые переходы с метаданными. +- **Безопасная конкуренция** — lease lock + условные записи по ETag. +- **Ленивое TTL** — просроченные задачи очищаются при доступе или через `sweep_ttl`. + +## Настройка + +1. Создайте бакет S3 или MinIO (должен существовать заранее). +2. Установите плагин в Dify → **Tool provider → Transit Task Manager**. +3. Укажите credentials: `endpoint`, `access_key_id`, `secret_access_key`, + `bucket`, опционально `region`, `prefix`, `use_https`. +4. Добавьте инструменты в Workflow или Agent. Каждый вызов требует `tenant`; + опциональный `namespace` группирует тенантов. + +## Использование + +1. **create_task** — создать задачу с `tenant`, `title`, опционально `payload`, `ttl_seconds` +2. **set_status** — перевести в `in_progress` / `completed` с metadata +3. **get_task** / **list_tasks** — прочитать состояние для следующих узлов + +Цепочка статусов: `created` → `pending` → `in_progress` → `completed` / +`cancelled` / `failed` / `expired`. + +## Конфиденциальность + +Данные пишутся только в ваш бакет. См. [PRIVACY.md](../PRIVACY.md). + +## Поддержка + +- Исходники: https://github.com/gitpoldan/dify/tree/main/polden-plugins/task_manager +- GitHub Issues: https://github.com/gitpoldan/dify/issues +- Email: bv2020donch@gmail.com + +English documentation: [README.md](../README.md). diff --git a/gitpoldan/task_manager/requirements.txt b/gitpoldan/task_manager/requirements.txt new file mode 100644 index 000000000..b40b948af --- /dev/null +++ b/gitpoldan/task_manager/requirements.txt @@ -0,0 +1,3 @@ +dify_plugin>=0.9.1,<1.0.0 +sqlmodel>=0.0.22,<0.1.0 +boto3>=1.34.0,<2.0.0 diff --git a/gitpoldan/tool_capture_agent/PRIVACY.md b/gitpoldan/tool_capture_agent/PRIVACY.md new file mode 100644 index 000000000..a9f7c37c2 --- /dev/null +++ b/gitpoldan/tool_capture_agent/PRIVACY.md @@ -0,0 +1,28 @@ +# Privacy Policy — Tool-Capture Agent + +Tool-Capture Agent is an orchestration strategy that runs entirely inside your Dify +workspace. It does not collect, store, or transmit personal data to the plugin author. + +## Data handling + +- **Prompts, queries and tool arguments** are passed to the LLM provider and to the + tools you configure in the Agent node. These are the same providers/tools you have + already set up in your Dify workspace. +- **Captured tool outputs** are held in memory only for the duration of a single Agent + node execution and are returned to the workflow as output variables. Nothing is + persisted by the plugin. +- **No analytics / telemetry**: the plugin performs no tracking and contacts no + third-party service of its own. + +## Third-party services + +The plugin itself integrates with no external service. Any data exposure is governed by +the privacy policies of the model provider and tools you select in the node. + +## Contact + +Author: **gitpoldan**. Questions: bv2020donch@gmail.com + +## Changes + +If our privacy practices change, this document will be updated accordingly. diff --git a/gitpoldan/tool_capture_agent/README.md b/gitpoldan/tool_capture_agent/README.md new file mode 100644 index 000000000..08b81d156 --- /dev/null +++ b/gitpoldan/tool_capture_agent/README.md @@ -0,0 +1,53 @@ +# Tool-Capture Agent — Dify Plugin + +Author: **gitpoldan**. Version: **0.3.3**. Requires Dify **>= 1.16.1**. + +Agent-strategy plugin extending Dify's Function-Calling agent. Same model, tools, +instruction, and iterations as the stock agent, plus: + +- **Capture** — every tool call exposed as workflow variables (`tool_calls`, `tool_outputs`, `mapped_outputs`, ...) +- **I/O wiring** — JSON `io_wiring` links outputs to inputs via runtime indexes (large payloads bypass LLM context) +- **Incoming files** — wire `files` to `{{#sys.files#}}` for multimodal Chatflow attachments +- **Skills & Tools routing** — optional YAML catalogs for a compact system prompt and focused tool set + +Provider id: `gitpoldan/tool_capture_agent`. Strategy: **Function Calling (Tool-Capture)**. + +## Setup + +1. Install the plugin in Dify. +2. Add an **Agent** node; select strategy **Tool-Capture Agent → Function Calling**. +3. Configure like a normal agent: Model, Tools, Instruction, Query, Max Iterations. +4. (Optional) Set **Files** to `{{#sys.files#}}` for Chatflow attachments (vision model for images). +5. (Optional) **I/O wiring (JSON)** and **Output mappings (JSON)** for advanced workflows. +6. (Optional) **Skills catalog (YAML)** / **Tools catalog (YAML)** for routing. + +No plugin-specific credentials. Uses LLM and tools already configured in the node. + +## Usage + +Downstream nodes can reference captured outputs: + +``` +Weather: {{#agent.mapped_outputs.weather#}} +Total tool calls: {{#agent.tool_calls_count#}} +``` + +Key output variables: `text`, `final_answer`, `tool_calls`, `tool_outputs`, +`last_tool_outputs`, `mapped_outputs`, `captured_files`, `skills_tools_routing`. + +For tool-generated file download cards in chat, use `{{#agent.files#}}` in an Answer node. + +Extended documentation (I/O wiring, Skills routing, output mappings) is in the +[source repository](https://github.com/gitpoldan/dify/tree/main/polden-plugins/tool_capture_agent). + +## Privacy + +Captured outputs exist only for one Agent execution. See [PRIVACY.md](PRIVACY.md). + +## Support + +- Source: https://github.com/gitpoldan/dify/tree/main/polden-plugins/tool_capture_agent +- GitHub Issues: https://github.com/gitpoldan/dify/issues +- Email: bv2020donch@gmail.com + +Russian documentation: [readme/README_ru_RU.md](readme/README_ru_RU.md). diff --git a/gitpoldan/tool_capture_agent/gitpoldan-tool_capture_agent_0.3.3.difypkg b/gitpoldan/tool_capture_agent/gitpoldan-tool_capture_agent_0.3.3.difypkg new file mode 100644 index 0000000000000000000000000000000000000000..316a0a49b04b7562772606ad113ffaeb38817326 GIT binary patch literal 45915 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 NKmP-+HUIhb{{aGJPUZjr literal 0 HcmV?d00001 diff --git a/gitpoldan/tool_capture_agent/manifest.yaml b/gitpoldan/tool_capture_agent/manifest.yaml new file mode 100644 index 000000000..5a6030dd2 --- /dev/null +++ b/gitpoldan/tool_capture_agent/manifest.yaml @@ -0,0 +1,37 @@ +version: 0.3.3 +type: plugin +author: gitpoldan +name: tool_capture_agent +label: + en_US: Tool-Capture Agent + ru_RU: Агент с захватом инструментов +description: + en_US: Function-Calling agent strategy that captures every tool call, wires tool I/O via indexes (not the LLM context), injects Chatflow sys.files as multimodal prompt content, routes Skills & Tools catalogs into a compact system prompt, and exposes tool outputs as structured workflow variables. + ru_RU: Стратегия агента (Function Calling), которая перехватывает вызовы инструментов, связывает их I/O через индексы (не через контекст LLM), передаёт вложения Chatflow (sys.files) в LLM как multimodal-контент, собирает компактный системный промпт из каталогов Skills & Tools и отдаёт результаты как структурированные переменные воркфлоу. +icon: icon.svg +tags: + - agent +resource: + memory: 1048576 + permission: + tool: + enabled: true + model: + enabled: true + llm: true +plugins: + agent_strategies: + - provider/agent.yaml +meta: + version: 0.3.3 + minimum_dify_version: "1.16.1" + arch: + - amd64 + - arm64 + runner: + language: python + version: "3.12" + entrypoint: main +created_at: 2026-07-08T00:00:00+00:00 +privacy: PRIVACY.md +verified: false diff --git a/gitpoldan/tool_capture_agent/readme/README_ru_RU.md b/gitpoldan/tool_capture_agent/readme/README_ru_RU.md new file mode 100644 index 000000000..0db7b3ff3 --- /dev/null +++ b/gitpoldan/tool_capture_agent/readme/README_ru_RU.md @@ -0,0 +1,42 @@ +# Tool-Capture Agent — Dify Plugin + +Автор: **gitpoldan**. Версия: **0.3.3**. Требуется Dify **>= 1.16.1**. + +Agent-strategy плагин на базе Function-Calling агента Dify с дополнениями: + +- **Capture** — каждый вызов инструмента как переменные workflow +- **I/O wiring** — JSON-связи output→input через индексы (большие payload вне контекста LLM) +- **Вложения** — `files` ← `{{#sys.files#}}` для multimodal Chatflow +- **Skills & Tools routing** — YAML-каталоги для компактного system prompt + +ID провайдера: `gitpoldan/tool_capture_agent`. + +## Настройка + +1. Установите плагин в Dify. +2. Узел **Agent** → стратегия **Tool-Capture Agent → Function Calling**. +3. Настройте Model, Tools, Instruction, Query как у обычного агента. +4. (Опционально) **Files** = `{{#sys.files#}}`, **I/O wiring**, **Output mappings**, **Skills/Tools catalog**. + +Отдельные credentials не нужны. + +## Использование + +Примеры переменных: `{{#agent.tool_outputs.tavily_search#}}`, +`{{#agent.tool_calls_count#}}`, `{{#agent.mapped_outputs.weather#}}`. + +Для карточек файлов в чате: `{{#agent.files#}}` в Answer. + +Подробная документация — в [репозитории](https://github.com/gitpoldan/dify/tree/main/polden-plugins/tool_capture_agent). + +## Конфиденциальность + +Данные не сохраняются между вызовами Agent. См. [PRIVACY.md](../PRIVACY.md). + +## Поддержка + +- Исходники: https://github.com/gitpoldan/dify/tree/main/polden-plugins/tool_capture_agent +- GitHub Issues: https://github.com/gitpoldan/dify/issues +- Email: bv2020donch@gmail.com + +English documentation: [README.md](../README.md). diff --git a/gitpoldan/tool_capture_agent/requirements.txt b/gitpoldan/tool_capture_agent/requirements.txt new file mode 100644 index 000000000..12a972312 --- /dev/null +++ b/gitpoldan/tool_capture_agent/requirements.txt @@ -0,0 +1,2 @@ +dify_plugin>=0.9.1,<1.0.0 +PyYAML>=6.0.1 From 3350e42f676ecb341dda346cd77e8717bdee658e Mon Sep 17 00:00:00 2001 From: Denis Polityuk Date: Fri, 28 Aug 2026 14:22:17 +0300 Subject: [PATCH 3/6] Revert "new 4 plugins gitpoldan" This reverts commit b270ebda916c45553b5006b0c835dd32940b0300. --- gitpoldan/fusion_query_engine/PRIVACY.md | 34 ----------- gitpoldan/fusion_query_engine/README.md | 57 ------------------ ...itpoldan-fusion_query_engine_1.1.1.difypkg | Bin 23107 -> 0 bytes gitpoldan/fusion_query_engine/manifest.yaml | 38 ------------ .../readme/README_ru_RU.md | 44 -------------- .../fusion_query_engine/requirements.txt | 2 - gitpoldan/qdrant-hybrid/PRIVACY.md | 36 ----------- gitpoldan/qdrant-hybrid/README.md | 53 ---------------- .../gitpoldan-qdrant-hybrid_1.0.7.difypkg | Bin 27822 -> 0 bytes gitpoldan/qdrant-hybrid/manifest.yaml | 46 -------------- .../qdrant-hybrid/readme/README_ru_RU.md | 42 ------------- gitpoldan/qdrant-hybrid/requirements.txt | 3 - gitpoldan/task_manager/PRIVACY.md | 33 ---------- gitpoldan/task_manager/README.md | 57 ------------------ .../gitpoldan-task_manager_0.0.1.difypkg | Bin 38305 -> 0 bytes gitpoldan/task_manager/manifest.yaml | 35 ----------- gitpoldan/task_manager/readme/README_ru_RU.md | 45 -------------- gitpoldan/task_manager/requirements.txt | 3 - gitpoldan/tool_capture_agent/PRIVACY.md | 28 --------- gitpoldan/tool_capture_agent/README.md | 53 ---------------- ...gitpoldan-tool_capture_agent_0.3.3.difypkg | Bin 45915 -> 0 bytes gitpoldan/tool_capture_agent/manifest.yaml | 37 ------------ .../tool_capture_agent/readme/README_ru_RU.md | 42 ------------- gitpoldan/tool_capture_agent/requirements.txt | 2 - 24 files changed, 690 deletions(-) delete mode 100644 gitpoldan/fusion_query_engine/PRIVACY.md delete mode 100644 gitpoldan/fusion_query_engine/README.md delete mode 100644 gitpoldan/fusion_query_engine/gitpoldan-fusion_query_engine_1.1.1.difypkg delete mode 100644 gitpoldan/fusion_query_engine/manifest.yaml delete mode 100644 gitpoldan/fusion_query_engine/readme/README_ru_RU.md delete mode 100644 gitpoldan/fusion_query_engine/requirements.txt delete mode 100644 gitpoldan/qdrant-hybrid/PRIVACY.md delete mode 100644 gitpoldan/qdrant-hybrid/README.md delete mode 100644 gitpoldan/qdrant-hybrid/gitpoldan-qdrant-hybrid_1.0.7.difypkg delete mode 100644 gitpoldan/qdrant-hybrid/manifest.yaml delete mode 100644 gitpoldan/qdrant-hybrid/readme/README_ru_RU.md delete mode 100644 gitpoldan/qdrant-hybrid/requirements.txt delete mode 100644 gitpoldan/task_manager/PRIVACY.md delete mode 100644 gitpoldan/task_manager/README.md delete mode 100644 gitpoldan/task_manager/gitpoldan-task_manager_0.0.1.difypkg delete mode 100644 gitpoldan/task_manager/manifest.yaml delete mode 100644 gitpoldan/task_manager/readme/README_ru_RU.md delete mode 100644 gitpoldan/task_manager/requirements.txt delete mode 100644 gitpoldan/tool_capture_agent/PRIVACY.md delete mode 100644 gitpoldan/tool_capture_agent/README.md delete mode 100644 gitpoldan/tool_capture_agent/gitpoldan-tool_capture_agent_0.3.3.difypkg delete mode 100644 gitpoldan/tool_capture_agent/manifest.yaml delete mode 100644 gitpoldan/tool_capture_agent/readme/README_ru_RU.md delete mode 100644 gitpoldan/tool_capture_agent/requirements.txt diff --git a/gitpoldan/fusion_query_engine/PRIVACY.md b/gitpoldan/fusion_query_engine/PRIVACY.md deleted file mode 100644 index b79618d9f..000000000 --- a/gitpoldan/fusion_query_engine/PRIVACY.md +++ /dev/null @@ -1,34 +0,0 @@ -# Privacy Policy — Fusion Query Engine - -## Overview - -This tool plugin runs inside your Dify workspace. It does **not** collect, -store, or transmit data to the plugin author. User queries, optional chat -history, and pre-fetched context are forwarded to **LLM providers you configure** -in Dify via reverse model invocation. - -## Data we process - -| Data | Purpose | -|------|---------| -| User query | COMPACT synthesis input | -| Optional chat history (JSON) | Condense multi-turn dialogue before synthesis | -| Context chunks (`source_nodes` or `context_text`) | RAG context for expansion or answer modes | - -## Third-party services - -| Service | Usage | -|---------|--------| -| LLM providers selected in Dify | Receive prompts for query expansion and answer generation | - -The plugin does not call external APIs directly. Credentials and routing are -managed by your Dify workspace. - -## Storage and telemetry - -- No data persisted by the plugin beyond the tool call lifecycle. -- No analytics, tracking, or author-operated infrastructure. - -## Contact - -Author: **gitpoldan**. Questions: bv2020donch@gmail.com diff --git a/gitpoldan/fusion_query_engine/README.md b/gitpoldan/fusion_query_engine/README.md deleted file mode 100644 index 85ff588c1..000000000 --- a/gitpoldan/fusion_query_engine/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# Fusion Query Engine — Dify Plugin - -LlamaIndex-based tool plugin for Dify that performs **windowed COMPACT synthesis** -over pre-fetched context (Qdrant points or plain text), with optional chat-history -condensing. - -Author: **gitpoldan**. Provider id: `gitpoldan/fusion_query_engine`. - -## Features - -- **Two modes**: `query_expansion` (enrich query) and `answer_query` (generate answer) -- **Pre-fetched context** — no Qdrant calls inside the plugin; nodes from upstream workflow -- **Chat history** — optional JSON `chat_history` for multi-turn condensing -- **Two LLM selectors** — separate models for expansion and answer steps - -## Setup - -1. Install the plugin in Dify (Marketplace upload or remote debug). -2. Add the **Fusion Query Engine** tool to a Workflow or Chatflow. -3. Configure **model_expansion** and **model_answer** (LLM model selectors from your workspace). -4. Wire inputs: - - **query** — user question (`{{sys.query}}` or LLM output) - - **source_nodes** — array from Knowledge Retrieval or a Code node (Qdrant-style points) - - **context_text** — plain-text fallback when `source_nodes` is empty - - **chat_history** — optional JSON string of prior turns (see Usage) - -No external API credentials beyond LLMs already configured in Dify. - -## Usage - -**Two-step RAG pipeline:** - -1. Run tool with `mode=query_expansion` → enriched query in `enriched_query` -2. Run Knowledge Retrieval with enriched query -3. Run tool with `mode=answer_query` → final answer in `response` - -**Outputs:** `response`, `mode`, `enriched_query` (expansion mode only). - -Example `source_nodes` element: - -```json -{"id": "chunk-1", "payload": {"text": "...", "metadata": {"file_name": "doc.pdf"}}, "score": 0.91} -``` - -Requires Dify >= 1.14.0. - -## Privacy - -Queries and context are sent to LLM providers configured in your workspace. See [PRIVACY.md](PRIVACY.md). - -## Support - -- Source: https://github.com/gitpoldan/dify/tree/main/polden-plugins/fusion_query_engine -- GitHub Issues: https://github.com/gitpoldan/dify/issues -- Email: bv2020donch@gmail.com - -Russian documentation: [readme/README_ru_RU.md](readme/README_ru_RU.md). diff --git a/gitpoldan/fusion_query_engine/gitpoldan-fusion_query_engine_1.1.1.difypkg b/gitpoldan/fusion_query_engine/gitpoldan-fusion_query_engine_1.1.1.difypkg deleted file mode 100644 index 60dc2233f091a9628124988f1bdaeefb68e3dfe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23107 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 OO9h~z#XbJ@>i+=U(l*Qh diff --git a/gitpoldan/fusion_query_engine/manifest.yaml b/gitpoldan/fusion_query_engine/manifest.yaml deleted file mode 100644 index b8f445b2c..000000000 --- a/gitpoldan/fusion_query_engine/manifest.yaml +++ /dev/null @@ -1,38 +0,0 @@ -version: 1.1.1 -type: plugin -author: gitpoldan -name: fusion_query_engine -label: - en_US: Fusion Query Engine - ru_RU: Fusion Query Engine -description: - en_US: LlamaIndex COMPACT query engine with query expansion and answer modes over pre-fetched context. - ru_RU: LlamaIndex COMPACT-движок с режимами расширения запроса и ответа по предзагруженному контексту. -icon: icon.svg -resource: - memory: 536870912 - permission: - model: - enabled: true - llm: true - text_embedding: false - rerank: false - tts: false - speech2text: false - moderation: false -plugins: - tools: - - provider/fusion_query_engine.yaml -meta: - version: 1.1.1 - minimum_dify_version: "1.14.0" - arch: - - amd64 - - arm64 - runner: - language: python - version: "3.12" - entrypoint: main -created_at: 2025-06-19T12:00:00+00:00 -privacy: PRIVACY.md -verified: false diff --git a/gitpoldan/fusion_query_engine/readme/README_ru_RU.md b/gitpoldan/fusion_query_engine/readme/README_ru_RU.md deleted file mode 100644 index 72143e97c..000000000 --- a/gitpoldan/fusion_query_engine/readme/README_ru_RU.md +++ /dev/null @@ -1,44 +0,0 @@ -# Fusion Query Engine — Dify Plugin - -LlamaIndex-плагин для Dify: **COMPACT-синтез** по предзагруженному контексту -(Qdrant points или текст) с опциональным сжатием истории чата. - -Автор: **gitpoldan**. ID провайдера: `gitpoldan/fusion_query_engine`. - -## Возможности - -- **Два режима**: `query_expansion` (обогащение запроса) и `answer_query` (ответ) -- **Предзагруженный контекст** — без вызовов Qdrant внутри плагина -- **История чата** — опциональный JSON `chat_history` -- **Два LLM-селектора** — отдельные модели для expansion и answer - -## Настройка - -1. Установите плагин в Dify. -2. Добавьте инструмент **Fusion Query Engine** в Workflow или Chatflow. -3. Настройте **model_expansion** и **model_answer** (LLM из вашего workspace). -4. Подключите **query**, **source_nodes** / **context_text**, опционально **chat_history**. - -Внешние credentials не нужны — только LLM, уже настроенные в Dify. - -## Использование - -**Двухшаговый RAG:** - -1. `mode=query_expansion` → `enriched_query` -2. Knowledge Retrieval с обогащённым запросом -3. `mode=answer_query` → `response` - -Требуется Dify >= 1.14.0. - -## Конфиденциальность - -Запросы и контекст отправляются в LLM-провайдеры вашего workspace. См. [PRIVACY.md](../PRIVACY.md). - -## Поддержка - -- Исходники: https://github.com/gitpoldan/dify/tree/main/polden-plugins/fusion_query_engine -- GitHub Issues: https://github.com/gitpoldan/dify/issues -- Email: bv2020donch@gmail.com - -English documentation: [README.md](../README.md). diff --git a/gitpoldan/fusion_query_engine/requirements.txt b/gitpoldan/fusion_query_engine/requirements.txt deleted file mode 100644 index 427bb65f7..000000000 --- a/gitpoldan/fusion_query_engine/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -dify_plugin>=0.9.1,<1.0.0 -llama-index-core>=0.12.0,<0.13.0 diff --git a/gitpoldan/qdrant-hybrid/PRIVACY.md b/gitpoldan/qdrant-hybrid/PRIVACY.md deleted file mode 100644 index c4ee51987..000000000 --- a/gitpoldan/qdrant-hybrid/PRIVACY.md +++ /dev/null @@ -1,36 +0,0 @@ -# Qdrant Hybrid Retriever Privacy Policy - -## Data We Process - -| Data Type | Details | Purpose | -| --- | --- | --- | -| Connection configuration | Qdrant `base_url`, API key, extra headers (set by the user in Dify) | Connect to the user-owned Qdrant cluster | -| Request payloads | Collection name, query text, filters, retrieval options | Execute hybrid retrieval for the request lifetime only | -| Embedding inputs | Query text when `embedding_model_config` is provided | Forwarded via Dify reverse model invocation | -| Rerank inputs | Query and chunk texts when reranking is enabled | Dify rerank model or local `fastembed` cross-encoder | - -The plugin does **not** collect names, emails, device identifiers, or other personal -data beyond what the workflow owner supplies. - -## Third-Party Services - -| Service | Usage | Privacy Policy | -| --- | --- | --- | -| Qdrant (user-owned cluster) | Vector search and payload retrieval | https://qdrant.tech/privacy/ | -| Embedding / rerank providers in Dify | Text-to-vector / rerank via workspace credentials | Provider policy of your choice | - -No data is transmitted to the plugin author. - -## Storage & Retention - -- The plugin **does not persist** query results or credentials. -- `fastembed` BM25/rerank models are cached locally by the runtime on first use. - -## Security - -- API keys are never logged; Qdrant Cloud traffic uses HTTPS. -- No telemetry or analytics. - -## Contact - -Author: **gitpoldan**. Questions: bv2020donch@gmail.com diff --git a/gitpoldan/qdrant-hybrid/README.md b/gitpoldan/qdrant-hybrid/README.md deleted file mode 100644 index 3430a26df..000000000 --- a/gitpoldan/qdrant-hybrid/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# Qdrant Hybrid Retriever (gitpoldan) - -Qdrant hybrid retrieval plugin for Dify: dense + sparse (BM25) with DBSF/RRF -fusion, optional MMR, tenant automode/ratios, payload filters, and optional reranking. - -Author: **gitpoldan**. Provider id: `gitpoldan/qdrant_hybrid_retriever`. - -## Features - -- **Hybrid search** — dense vectors + BM25 sparse via official `qdrant-client` -- **Fusion** — DBSF (default) or RRF; optional MMR on dense branch -- **Tenant modes** — automode median prune and/or weighted quota merge -- **Filters** — `point_type`, `corpus_docs`, `source`, JSON `payload_filters` -- **Rerank** — optional Dify rerank model or local `fastembed` fallback -- **LLM-friendly outputs** — `result`, `source_nodes`, `source_list_text`, `chunk_texts` - -## Setup - -1. Deploy Qdrant 1.15+ (MMR requires 1.15+). -2. Install the plugin and open **Tool provider → Qdrant Hybrid Retriever**. -3. Configure credentials: - -| Field | Required | Description | -|-------|----------|-------------| -| `base_url` | Yes | Qdrant URL, e.g. `https://xxx.cloud.qdrant.io:6333` | -| `api_key` | No | Required for Qdrant Cloud | -| `extra_headers` | No | Optional JSON HTTP headers | - -4. In the tool node, set **collection**, **text** (query), and **embedding_model_config** - (embedding model from your Dify workspace). - -## Usage - -Add **Hybrid Retriever** to a Workflow node. Key parameters: - -- `limit`, `prefetch_limit`, `fusion` (`dbsf` / `rrf`) -- `use_mmr`, `score_threshold`, `corpus_docs`, `payload_filters` (JSON) -- `enable_rerank`, `rerank_model_config` -- `all_from_top_k_source` — expand to all points from top-K sources (optional) - -Outputs: use `chunk_texts` or `source_nodes` as LLM context downstream. - -## Privacy - -Connects to your Qdrant cluster; embedding/rerank via Dify models. See [PRIVACY.md](PRIVACY.md). - -## Support - -- Source: https://github.com/gitpoldan/dify/tree/main/polden-plugins/qdrant-hybrid -- GitHub Issues: https://github.com/gitpoldan/dify/issues -- Email: bv2020donch@gmail.com - -Russian documentation: [readme/README_ru_RU.md](readme/README_ru_RU.md). diff --git a/gitpoldan/qdrant-hybrid/gitpoldan-qdrant-hybrid_1.0.7.difypkg b/gitpoldan/qdrant-hybrid/gitpoldan-qdrant-hybrid_1.0.7.difypkg deleted file mode 100644 index f640f01fdefe5cba4224534809f1e605ae665205..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27822 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 P=ny4u--8S5zn=XcnnlyI diff --git a/gitpoldan/qdrant-hybrid/manifest.yaml b/gitpoldan/qdrant-hybrid/manifest.yaml deleted file mode 100644 index a7a3bcb74..000000000 --- a/gitpoldan/qdrant-hybrid/manifest.yaml +++ /dev/null @@ -1,46 +0,0 @@ -version: 1.0.7 -type: plugin -author: gitpoldan -name: qdrant_hybrid_retriever -label: - en_US: Qdrant Hybrid Retriever - ja_JP: Qdrant Hybrid Retriever - zh_Hans: Qdrant 混合检索 - pt_BR: Qdrant Hybrid Retriever - ru_RU: Qdrant Hybrid Retriever -description: - en_US: Qdrant hybrid retriever built on the official qdrant-client. Dense + BM25 sparse retrieval with DBSF/RRF fusion, optional MMR, tenant automode/ratios, score_threshold, arbitrary payload filters, and optional reranking. - ja_JP: 公式 qdrant-client 上の Qdrant ハイブリッド検索。Dense + BM25 Sparse と DBSF/RRF 融合、MMR、tenant automode/ratios、score_threshold、任意 payload フィルタ、rerank 対応。 - zh_Hans: 基于官方 qdrant-client 的 Qdrant 混合检索:密集 + BM25 稀疏,DBSF/RRF 融合,可选 MMR、tenant automode/ratios、score_threshold、任意 payload 过滤与 rerank。 - pt_BR: Recuperação híbrida Qdrant sobre o qdrant-client oficial. Denso + BM25 esparso com fusão DBSF/RRF, MMR opcional, automode/ratios de tenants, score_threshold, filtros de payload arbitrários e rerank opcional. - ru_RU: Гибридный ретривер Qdrant на официальном qdrant-client. Dense + BM25 sparse с fusion DBSF/RRF, опциональным MMR, automode/ratios по tenants, score_threshold, произвольными payload-фильтрами и переранжированием. -icon: icon.svg -icon_dark: icon-dark.svg -resource: - memory: 536870912 - permission: - tool: - enabled: true - model: - enabled: true - text_embedding: true - rerank: true -plugins: - tools: - - provider/qdrant.yaml -meta: - version: 1.0.7 - minimum_dify_version: "1.14.0" - arch: - - amd64 - - arm64 - runner: - language: python - version: "3.12" - entrypoint: main -tags: - - search - - utilities -created_at: 2026-07-15T19:00:00+03:00 -privacy: PRIVACY.md -verified: false diff --git a/gitpoldan/qdrant-hybrid/readme/README_ru_RU.md b/gitpoldan/qdrant-hybrid/readme/README_ru_RU.md deleted file mode 100644 index c31a69ccf..000000000 --- a/gitpoldan/qdrant-hybrid/readme/README_ru_RU.md +++ /dev/null @@ -1,42 +0,0 @@ -# Qdrant Hybrid Retriever (gitpoldan) - -Гибридный ретривер Qdrant для Dify: dense + sparse (BM25), fusion DBSF/RRF, -опциональный MMR, automode/ratios по tenants, payload-фильтры и rerank. - -Автор: **gitpoldan**. ID провайдера: `gitpoldan/qdrant_hybrid_retriever`. - -## Возможности - -- **Гибридный поиск** — dense + BM25 через официальный `qdrant-client` -- **Fusion** — DBSF или RRF; опциональный MMR на dense-ветке -- **Tenant modes** — automode median prune и/или квоты по tenants -- **Фильтры** — `point_type`, `corpus_docs`, `source`, JSON `payload_filters` -- **Rerank** — модель Dify или локальный fallback `fastembed` -- **Выходы для LLM** — `source_nodes`, `chunk_texts`, `source_list_text` - -## Настройка - -1. Qdrant 1.15+ (MMR с 1.15+). -2. Установите плагин → **Tool provider → Qdrant Hybrid Retriever**. -3. Credentials: `base_url`, опционально `api_key`, `extra_headers`. -4. В узле инструмента: **collection**, **text**, **embedding_model_config**. - -## Использование - -Добавьте **Hybrid Retriever** в Workflow. Ключевые параметры: `limit`, -`fusion`, `use_mmr`, `corpus_docs`, `payload_filters`, `enable_rerank`, -`all_from_top_k_source`. - -Используйте `chunk_texts` или `source_nodes` как контекст для LLM. - -## Конфиденциальность - -Подключение к вашему Qdrant; embedding/rerank через модели Dify. См. [PRIVACY.md](../PRIVACY.md). - -## Поддержка - -- Исходники: https://github.com/gitpoldan/dify/tree/main/polden-plugins/qdrant-hybrid -- GitHub Issues: https://github.com/gitpoldan/dify/issues -- Email: bv2020donch@gmail.com - -English documentation: [README.md](../README.md). diff --git a/gitpoldan/qdrant-hybrid/requirements.txt b/gitpoldan/qdrant-hybrid/requirements.txt deleted file mode 100644 index 01b93c6c3..000000000 --- a/gitpoldan/qdrant-hybrid/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -dify_plugin>=0.9.1,<1.0.0 -qdrant-client>=1.15,<2.0 -fastembed>=0.3.6 diff --git a/gitpoldan/task_manager/PRIVACY.md b/gitpoldan/task_manager/PRIVACY.md deleted file mode 100644 index 9110d590a..000000000 --- a/gitpoldan/task_manager/PRIVACY.md +++ /dev/null @@ -1,33 +0,0 @@ -# Privacy Policy — Transit Task Manager - -## Data this plugin processes - -- **Task data you send**: tenant identifiers, task titles, descriptions, - payloads, tags, statuses, TTL values and status metadata provided in tool - calls. -- **S3 / MinIO credentials**: endpoint, access key id, secret access key and - bucket configured on the tool provider. These are handled by the Dify runtime - and used only to connect to the object store you specify. - -## Where data is stored - -All task data is written to **your own S3 / MinIO bucket**, as one SQLite -database per tenant (`{prefix}/{namespace?}/{tenant}.sqlite`) plus a transient -lock object (`{tenant}.lock`). The plugin keeps no other copy: databases are -pulled into a temporary file for the duration of a single tool call and removed -afterwards. - -## Data sharing - -The plugin does not transmit your data to the plugin author or any third party. -Data flows only between the Dify host and the object storage endpoint you -configure. - -## Retention and deletion - -Retention is entirely under your control. Use `delete_task` (hard delete) to -remove records, or delete the tenant database object directly in your bucket. - -## Contact - -Author: **gitpoldan**. Questions: bv2020donch@gmail.com diff --git a/gitpoldan/task_manager/README.md b/gitpoldan/task_manager/README.md deleted file mode 100644 index 749d4af18..000000000 --- a/gitpoldan/task_manager/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# Transit Task Manager (gitpoldan) - -Multi-tenant transit task manager for Dify Workflow and Agent apps. Tasks are -stored in a **MinIO / S3 bucket**, one SQLite database per tenant. Exposes -create / read / list / update / status-transition / delete tools, TTL -auto-expiration, and per-tenant statistics. - -Author: **gitpoldan**. Provider id: `gitpoldan/task_manager`. - -## Features - -- **S3-backed storage** — one SQLite DB per tenant in your bucket; no separate server. -- **Status state machine** — validated transitions with optional metadata on each change. -- **Concurrency safe** — lease lock + ETag conditional writes with retry on conflict. -- **Lazy TTL** — expired tasks cleaned on access or via `sweep_ttl`. - -## Setup - -1. Create an S3 or MinIO bucket (must already exist). -2. In Dify, install the plugin and open **Tool provider → Transit Task Manager**. -3. Configure credentials: - -| Field | Required | Description | -|-------|----------|-------------| -| `endpoint` | No | MinIO host (empty = AWS S3) | -| `access_key_id` | Yes | Access key | -| `secret_access_key` | Yes | Secret key | -| `use_https` | No | HTTPS for custom endpoint (default `true`) | -| `bucket` | Yes | Bucket name | -| `region` | No | AWS region (default `us-east-1`) | -| `prefix` | No | Base key prefix for all tenant DBs | - -4. Add task tools to a Workflow or Agent node. Every call requires a `tenant` id; - optional `namespace` groups tenants under a sub-path. - -## Usage - -Example workflow: - -1. **Tool: create_task** — `tenant`, `title`, optional `payload`, `ttl_seconds` -2. **Tool: set_status** — transition to `in_progress` / `completed` with metadata -3. **Tool: get_task** or **list_tasks** — read back state for downstream nodes - -Status flow: `created` → `pending` → `in_progress` → `completed` / `cancelled` / -`failed` / `expired`. - -## Privacy - -Task data is written only to your configured bucket. See [PRIVACY.md](PRIVACY.md). - -## Support - -- Source: https://github.com/gitpoldan/dify/tree/main/polden-plugins/task_manager -- GitHub Issues: https://github.com/gitpoldan/dify/issues -- Email: bv2020donch@gmail.com - -Russian documentation: [readme/README_ru_RU.md](readme/README_ru_RU.md). diff --git a/gitpoldan/task_manager/gitpoldan-task_manager_0.0.1.difypkg b/gitpoldan/task_manager/gitpoldan-task_manager_0.0.1.difypkg deleted file mode 100644 index 65891d97441a0d993f5dfbf56c61f6fcecbc91cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38305 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 diff --git a/gitpoldan/task_manager/manifest.yaml b/gitpoldan/task_manager/manifest.yaml deleted file mode 100644 index d5cd4c348..000000000 --- a/gitpoldan/task_manager/manifest.yaml +++ /dev/null @@ -1,35 +0,0 @@ -version: 0.0.1 -type: plugin -author: gitpoldan -name: task_manager -label: - en_US: Transit Task Manager - ru_RU: Транзитный таск-менеджер -description: - en_US: Multi-tenant transit task manager backed by S3. Stores one SQLite database per tenant, supports full task CRUD, a status state machine with per-transition metadata, and lazy TTL auto-expiration. - ru_RU: Мультитenantный транзитный таск-менеджер поверх S3. Хранит одну SQLite-БД на тенанта, поддерживает полный CRUD по задачам, конечный автомат статусов с метаданными на переход и ленивое авто-истечение по TTL. -icon: icon.svg -tags: - - productivity - - utilities -resource: - memory: 268435456 - permission: - tool: - enabled: true -plugins: - tools: - - provider/task_manager.yaml -meta: - version: 0.0.1 - minimum_dify_version: "1.4.0" - arch: - - amd64 - - arm64 - runner: - language: python - version: "3.12" - entrypoint: main -created_at: 2026-07-13T00:00:00+00:00 -privacy: PRIVACY.md -verified: false diff --git a/gitpoldan/task_manager/readme/README_ru_RU.md b/gitpoldan/task_manager/readme/README_ru_RU.md deleted file mode 100644 index 635b7102e..000000000 --- a/gitpoldan/task_manager/readme/README_ru_RU.md +++ /dev/null @@ -1,45 +0,0 @@ -# Transit Task Manager (gitpoldan) - -Мультитenantный транзитный таск-менеджер для Dify Workflow и Agent. Задачи -хранятся в **бакете MinIO / S3** — одна SQLite-БД на тенанта. Инструменты: -создание / чтение / список / обновление / смена статуса / удаление, ленивое -TTL-истечение и статистика по тенанту. - -Автор: **gitpoldan**. ID провайдера: `gitpoldan/task_manager`. - -## Возможности - -- **Хранение в S3** — одна SQLite-БД на тенанта; отдельный сервер не нужен. -- **Конечный автомат статусов** — валидируемые переходы с метаданными. -- **Безопасная конкуренция** — lease lock + условные записи по ETag. -- **Ленивое TTL** — просроченные задачи очищаются при доступе или через `sweep_ttl`. - -## Настройка - -1. Создайте бакет S3 или MinIO (должен существовать заранее). -2. Установите плагин в Dify → **Tool provider → Transit Task Manager**. -3. Укажите credentials: `endpoint`, `access_key_id`, `secret_access_key`, - `bucket`, опционально `region`, `prefix`, `use_https`. -4. Добавьте инструменты в Workflow или Agent. Каждый вызов требует `tenant`; - опциональный `namespace` группирует тенантов. - -## Использование - -1. **create_task** — создать задачу с `tenant`, `title`, опционально `payload`, `ttl_seconds` -2. **set_status** — перевести в `in_progress` / `completed` с metadata -3. **get_task** / **list_tasks** — прочитать состояние для следующих узлов - -Цепочка статусов: `created` → `pending` → `in_progress` → `completed` / -`cancelled` / `failed` / `expired`. - -## Конфиденциальность - -Данные пишутся только в ваш бакет. См. [PRIVACY.md](../PRIVACY.md). - -## Поддержка - -- Исходники: https://github.com/gitpoldan/dify/tree/main/polden-plugins/task_manager -- GitHub Issues: https://github.com/gitpoldan/dify/issues -- Email: bv2020donch@gmail.com - -English documentation: [README.md](../README.md). diff --git a/gitpoldan/task_manager/requirements.txt b/gitpoldan/task_manager/requirements.txt deleted file mode 100644 index b40b948af..000000000 --- a/gitpoldan/task_manager/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -dify_plugin>=0.9.1,<1.0.0 -sqlmodel>=0.0.22,<0.1.0 -boto3>=1.34.0,<2.0.0 diff --git a/gitpoldan/tool_capture_agent/PRIVACY.md b/gitpoldan/tool_capture_agent/PRIVACY.md deleted file mode 100644 index a9f7c37c2..000000000 --- a/gitpoldan/tool_capture_agent/PRIVACY.md +++ /dev/null @@ -1,28 +0,0 @@ -# Privacy Policy — Tool-Capture Agent - -Tool-Capture Agent is an orchestration strategy that runs entirely inside your Dify -workspace. It does not collect, store, or transmit personal data to the plugin author. - -## Data handling - -- **Prompts, queries and tool arguments** are passed to the LLM provider and to the - tools you configure in the Agent node. These are the same providers/tools you have - already set up in your Dify workspace. -- **Captured tool outputs** are held in memory only for the duration of a single Agent - node execution and are returned to the workflow as output variables. Nothing is - persisted by the plugin. -- **No analytics / telemetry**: the plugin performs no tracking and contacts no - third-party service of its own. - -## Third-party services - -The plugin itself integrates with no external service. Any data exposure is governed by -the privacy policies of the model provider and tools you select in the node. - -## Contact - -Author: **gitpoldan**. Questions: bv2020donch@gmail.com - -## Changes - -If our privacy practices change, this document will be updated accordingly. diff --git a/gitpoldan/tool_capture_agent/README.md b/gitpoldan/tool_capture_agent/README.md deleted file mode 100644 index 08b81d156..000000000 --- a/gitpoldan/tool_capture_agent/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# Tool-Capture Agent — Dify Plugin - -Author: **gitpoldan**. Version: **0.3.3**. Requires Dify **>= 1.16.1**. - -Agent-strategy plugin extending Dify's Function-Calling agent. Same model, tools, -instruction, and iterations as the stock agent, plus: - -- **Capture** — every tool call exposed as workflow variables (`tool_calls`, `tool_outputs`, `mapped_outputs`, ...) -- **I/O wiring** — JSON `io_wiring` links outputs to inputs via runtime indexes (large payloads bypass LLM context) -- **Incoming files** — wire `files` to `{{#sys.files#}}` for multimodal Chatflow attachments -- **Skills & Tools routing** — optional YAML catalogs for a compact system prompt and focused tool set - -Provider id: `gitpoldan/tool_capture_agent`. Strategy: **Function Calling (Tool-Capture)**. - -## Setup - -1. Install the plugin in Dify. -2. Add an **Agent** node; select strategy **Tool-Capture Agent → Function Calling**. -3. Configure like a normal agent: Model, Tools, Instruction, Query, Max Iterations. -4. (Optional) Set **Files** to `{{#sys.files#}}` for Chatflow attachments (vision model for images). -5. (Optional) **I/O wiring (JSON)** and **Output mappings (JSON)** for advanced workflows. -6. (Optional) **Skills catalog (YAML)** / **Tools catalog (YAML)** for routing. - -No plugin-specific credentials. Uses LLM and tools already configured in the node. - -## Usage - -Downstream nodes can reference captured outputs: - -``` -Weather: {{#agent.mapped_outputs.weather#}} -Total tool calls: {{#agent.tool_calls_count#}} -``` - -Key output variables: `text`, `final_answer`, `tool_calls`, `tool_outputs`, -`last_tool_outputs`, `mapped_outputs`, `captured_files`, `skills_tools_routing`. - -For tool-generated file download cards in chat, use `{{#agent.files#}}` in an Answer node. - -Extended documentation (I/O wiring, Skills routing, output mappings) is in the -[source repository](https://github.com/gitpoldan/dify/tree/main/polden-plugins/tool_capture_agent). - -## Privacy - -Captured outputs exist only for one Agent execution. See [PRIVACY.md](PRIVACY.md). - -## Support - -- Source: https://github.com/gitpoldan/dify/tree/main/polden-plugins/tool_capture_agent -- GitHub Issues: https://github.com/gitpoldan/dify/issues -- Email: bv2020donch@gmail.com - -Russian documentation: [readme/README_ru_RU.md](readme/README_ru_RU.md). diff --git a/gitpoldan/tool_capture_agent/gitpoldan-tool_capture_agent_0.3.3.difypkg b/gitpoldan/tool_capture_agent/gitpoldan-tool_capture_agent_0.3.3.difypkg deleted file mode 100644 index 316a0a49b04b7562772606ad113ffaeb38817326..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45915 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 NKmP-+HUIhb{{aGJPUZjr diff --git a/gitpoldan/tool_capture_agent/manifest.yaml b/gitpoldan/tool_capture_agent/manifest.yaml deleted file mode 100644 index 5a6030dd2..000000000 --- a/gitpoldan/tool_capture_agent/manifest.yaml +++ /dev/null @@ -1,37 +0,0 @@ -version: 0.3.3 -type: plugin -author: gitpoldan -name: tool_capture_agent -label: - en_US: Tool-Capture Agent - ru_RU: Агент с захватом инструментов -description: - en_US: Function-Calling agent strategy that captures every tool call, wires tool I/O via indexes (not the LLM context), injects Chatflow sys.files as multimodal prompt content, routes Skills & Tools catalogs into a compact system prompt, and exposes tool outputs as structured workflow variables. - ru_RU: Стратегия агента (Function Calling), которая перехватывает вызовы инструментов, связывает их I/O через индексы (не через контекст LLM), передаёт вложения Chatflow (sys.files) в LLM как multimodal-контент, собирает компактный системный промпт из каталогов Skills & Tools и отдаёт результаты как структурированные переменные воркфлоу. -icon: icon.svg -tags: - - agent -resource: - memory: 1048576 - permission: - tool: - enabled: true - model: - enabled: true - llm: true -plugins: - agent_strategies: - - provider/agent.yaml -meta: - version: 0.3.3 - minimum_dify_version: "1.16.1" - arch: - - amd64 - - arm64 - runner: - language: python - version: "3.12" - entrypoint: main -created_at: 2026-07-08T00:00:00+00:00 -privacy: PRIVACY.md -verified: false diff --git a/gitpoldan/tool_capture_agent/readme/README_ru_RU.md b/gitpoldan/tool_capture_agent/readme/README_ru_RU.md deleted file mode 100644 index 0db7b3ff3..000000000 --- a/gitpoldan/tool_capture_agent/readme/README_ru_RU.md +++ /dev/null @@ -1,42 +0,0 @@ -# Tool-Capture Agent — Dify Plugin - -Автор: **gitpoldan**. Версия: **0.3.3**. Требуется Dify **>= 1.16.1**. - -Agent-strategy плагин на базе Function-Calling агента Dify с дополнениями: - -- **Capture** — каждый вызов инструмента как переменные workflow -- **I/O wiring** — JSON-связи output→input через индексы (большие payload вне контекста LLM) -- **Вложения** — `files` ← `{{#sys.files#}}` для multimodal Chatflow -- **Skills & Tools routing** — YAML-каталоги для компактного system prompt - -ID провайдера: `gitpoldan/tool_capture_agent`. - -## Настройка - -1. Установите плагин в Dify. -2. Узел **Agent** → стратегия **Tool-Capture Agent → Function Calling**. -3. Настройте Model, Tools, Instruction, Query как у обычного агента. -4. (Опционально) **Files** = `{{#sys.files#}}`, **I/O wiring**, **Output mappings**, **Skills/Tools catalog**. - -Отдельные credentials не нужны. - -## Использование - -Примеры переменных: `{{#agent.tool_outputs.tavily_search#}}`, -`{{#agent.tool_calls_count#}}`, `{{#agent.mapped_outputs.weather#}}`. - -Для карточек файлов в чате: `{{#agent.files#}}` в Answer. - -Подробная документация — в [репозитории](https://github.com/gitpoldan/dify/tree/main/polden-plugins/tool_capture_agent). - -## Конфиденциальность - -Данные не сохраняются между вызовами Agent. См. [PRIVACY.md](../PRIVACY.md). - -## Поддержка - -- Исходники: https://github.com/gitpoldan/dify/tree/main/polden-plugins/tool_capture_agent -- GitHub Issues: https://github.com/gitpoldan/dify/issues -- Email: bv2020donch@gmail.com - -English documentation: [README.md](../README.md). diff --git a/gitpoldan/tool_capture_agent/requirements.txt b/gitpoldan/tool_capture_agent/requirements.txt deleted file mode 100644 index 12a972312..000000000 --- a/gitpoldan/tool_capture_agent/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -dify_plugin>=0.9.1,<1.0.0 -PyYAML>=6.0.1 From 61b023c6cd24ea24df89cca3a61884d760df5c4d Mon Sep 17 00:00:00 2001 From: Denis Polityuk Date: Fri, 28 Aug 2026 14:40:43 +0300 Subject: [PATCH 4/6] name lowercase --- gitpoldan/RWs3/gitpoldan-RWs3_0.0.1.difypkg | Bin 19868 -> 19869 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/gitpoldan/RWs3/gitpoldan-RWs3_0.0.1.difypkg b/gitpoldan/RWs3/gitpoldan-RWs3_0.0.1.difypkg index cc89c5fdd7cb6ca12afcda39e6e9875b984a9c3d..952fd896e5c3cbd40858658dc345715dc04bdfb8 100644 GIT binary patch delta 2895 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 delta 2905 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 qYb@#f3LMgano9_i!KsKtNN5oL@ODt Date: Mon, 31 Aug 2026 13:39:07 +0300 Subject: [PATCH 5/6] rename plugin --- gitpoldan/RWs3/gitpoldan-RWs3_0.0.1.difypkg | Bin 19869 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 gitpoldan/RWs3/gitpoldan-RWs3_0.0.1.difypkg diff --git a/gitpoldan/RWs3/gitpoldan-RWs3_0.0.1.difypkg b/gitpoldan/RWs3/gitpoldan-RWs3_0.0.1.difypkg deleted file mode 100644 index 952fd896e5c3cbd40858658dc345715dc04bdfb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19869 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 JYo8m42LP7BPImwR From ae3e4ca2e55674cd45c025afffae03bbcc9f2f50 Mon Sep 17 00:00:00 2001 From: gitpoldan Date: Mon, 31 Aug 2026 13:39:38 +0300 Subject: [PATCH 6/6] update plugin metadata --- gitpoldan/rws3/gitpoldan-rws3_0.0.1.difypkg | Bin 0 -> 19930 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 gitpoldan/rws3/gitpoldan-rws3_0.0.1.difypkg diff --git a/gitpoldan/rws3/gitpoldan-rws3_0.0.1.difypkg b/gitpoldan/rws3/gitpoldan-rws3_0.0.1.difypkg new file mode 100644 index 0000000000000000000000000000000000000000..e9c1b4e29f91b86bd736c1866fd58fb4e21a23f8 GIT binary patch literal 19930 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