diff --git a/docs/ar/changelog.mdx b/docs/ar/changelog.mdx
index 296f4cbdf..4360e39f9 100644
--- a/docs/ar/changelog.mdx
+++ b/docs/ar/changelog.mdx
@@ -4,6 +4,29 @@ description: "تحديثات المنتج والتحسينات وإصلاحات
icon: "clock"
mode: "wide"
---
+
+ ## v1.12.2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.2)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة مرحلة إصدار المؤسسات إلى إصدار أدوات المطورين
+
+ ### إصلاحات الأخطاء
+ - الحفاظ على قيمة إرجاع الطريقة كإخراج تدفق لـ @human_feedback مع emit
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.12.1
+ - مراجعة سياسة الأمان وتعليمات الإبلاغ
+
+ ## المساهمون
+
+ @alex-clawd, @greysonlalonde, @joaomdmoura, @theCyberTech
+
+
+
## v1.12.1
diff --git a/docs/docs.json b/docs/docs.json
index 0429d2839..2e82c69b6 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -56,7 +56,7 @@
},
"versions": [
{
- "version": "v1.12.1",
+ "version": "v1.12.2",
"default": true,
"tabs": [
{
@@ -525,6 +525,475 @@
}
]
},
+ {
+ "version": "v1.12.1",
+ "tabs": [
+ {
+ "tab": "Home",
+ "icon": "house",
+ "groups": [
+ {
+ "group": "Welcome",
+ "pages": [
+ "index"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Documentation",
+ "icon": "book-open",
+ "groups": [
+ {
+ "group": "Get Started",
+ "pages": [
+ "en/introduction",
+ "en/installation",
+ "en/quickstart"
+ ]
+ },
+ {
+ "group": "Guides",
+ "pages": [
+ {
+ "group": "Strategy",
+ "icon": "compass",
+ "pages": [
+ "en/guides/concepts/evaluating-use-cases"
+ ]
+ },
+ {
+ "group": "Agents",
+ "icon": "user",
+ "pages": [
+ "en/guides/agents/crafting-effective-agents"
+ ]
+ },
+ {
+ "group": "Crews",
+ "icon": "users",
+ "pages": [
+ "en/guides/crews/first-crew"
+ ]
+ },
+ {
+ "group": "Flows",
+ "icon": "code-branch",
+ "pages": [
+ "en/guides/flows/first-flow",
+ "en/guides/flows/mastering-flow-state"
+ ]
+ },
+ {
+ "group": "Tools",
+ "icon": "wrench",
+ "pages": [
+ "en/guides/tools/publish-custom-tools"
+ ]
+ },
+ {
+ "group": "Coding Tools",
+ "icon": "terminal",
+ "pages": [
+ "en/guides/coding-tools/agents-md"
+ ]
+ },
+ {
+ "group": "Advanced",
+ "icon": "gear",
+ "pages": [
+ "en/guides/advanced/customizing-prompts",
+ "en/guides/advanced/fingerprinting"
+ ]
+ },
+ {
+ "group": "Migration",
+ "icon": "shuffle",
+ "pages": [
+ "en/guides/migration/migrating-from-langgraph"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Core Concepts",
+ "pages": [
+ "en/concepts/agents",
+ "en/concepts/tasks",
+ "en/concepts/crews",
+ "en/concepts/flows",
+ "en/concepts/production-architecture",
+ "en/concepts/knowledge",
+ "en/concepts/skills",
+ "en/concepts/llms",
+ "en/concepts/files",
+ "en/concepts/processes",
+ "en/concepts/collaboration",
+ "en/concepts/training",
+ "en/concepts/memory",
+ "en/concepts/reasoning",
+ "en/concepts/planning",
+ "en/concepts/testing",
+ "en/concepts/cli",
+ "en/concepts/tools",
+ "en/concepts/event-listener"
+ ]
+ },
+ {
+ "group": "MCP Integration",
+ "pages": [
+ "en/mcp/overview",
+ "en/mcp/dsl-integration",
+ "en/mcp/stdio",
+ "en/mcp/sse",
+ "en/mcp/streamable-http",
+ "en/mcp/multiple-servers",
+ "en/mcp/security"
+ ]
+ },
+ {
+ "group": "Tools",
+ "pages": [
+ "en/tools/overview",
+ {
+ "group": "File & Document",
+ "icon": "folder-open",
+ "pages": [
+ "en/tools/file-document/overview",
+ "en/tools/file-document/filereadtool",
+ "en/tools/file-document/filewritetool",
+ "en/tools/file-document/pdfsearchtool",
+ "en/tools/file-document/docxsearchtool",
+ "en/tools/file-document/mdxsearchtool",
+ "en/tools/file-document/xmlsearchtool",
+ "en/tools/file-document/txtsearchtool",
+ "en/tools/file-document/jsonsearchtool",
+ "en/tools/file-document/csvsearchtool",
+ "en/tools/file-document/directorysearchtool",
+ "en/tools/file-document/directoryreadtool",
+ "en/tools/file-document/ocrtool",
+ "en/tools/file-document/pdf-text-writing-tool"
+ ]
+ },
+ {
+ "group": "Web Scraping & Browsing",
+ "icon": "globe",
+ "pages": [
+ "en/tools/web-scraping/overview",
+ "en/tools/web-scraping/scrapewebsitetool",
+ "en/tools/web-scraping/scrapeelementfromwebsitetool",
+ "en/tools/web-scraping/scrapflyscrapetool",
+ "en/tools/web-scraping/seleniumscrapingtool",
+ "en/tools/web-scraping/scrapegraphscrapetool",
+ "en/tools/web-scraping/spidertool",
+ "en/tools/web-scraping/browserbaseloadtool",
+ "en/tools/web-scraping/hyperbrowserloadtool",
+ "en/tools/web-scraping/stagehandtool",
+ "en/tools/web-scraping/firecrawlcrawlwebsitetool",
+ "en/tools/web-scraping/firecrawlscrapewebsitetool",
+ "en/tools/web-scraping/oxylabsscraperstool",
+ "en/tools/web-scraping/brightdata-tools"
+ ]
+ },
+ {
+ "group": "Search & Research",
+ "icon": "magnifying-glass",
+ "pages": [
+ "en/tools/search-research/overview",
+ "en/tools/search-research/serperdevtool",
+ "en/tools/search-research/bravesearchtool",
+ "en/tools/search-research/exasearchtool",
+ "en/tools/search-research/linkupsearchtool",
+ "en/tools/search-research/githubsearchtool",
+ "en/tools/search-research/websitesearchtool",
+ "en/tools/search-research/codedocssearchtool",
+ "en/tools/search-research/youtubechannelsearchtool",
+ "en/tools/search-research/youtubevideosearchtool",
+ "en/tools/search-research/tavilysearchtool",
+ "en/tools/search-research/tavilyextractortool",
+ "en/tools/search-research/arxivpapertool",
+ "en/tools/search-research/serpapi-googlesearchtool",
+ "en/tools/search-research/serpapi-googleshoppingtool",
+ "en/tools/search-research/databricks-query-tool"
+ ]
+ },
+ {
+ "group": "Database & Data",
+ "icon": "database",
+ "pages": [
+ "en/tools/database-data/overview",
+ "en/tools/database-data/mysqltool",
+ "en/tools/database-data/pgsearchtool",
+ "en/tools/database-data/snowflakesearchtool",
+ "en/tools/database-data/nl2sqltool",
+ "en/tools/database-data/qdrantvectorsearchtool",
+ "en/tools/database-data/weaviatevectorsearchtool",
+ "en/tools/database-data/mongodbvectorsearchtool",
+ "en/tools/database-data/singlestoresearchtool"
+ ]
+ },
+ {
+ "group": "AI & Machine Learning",
+ "icon": "brain",
+ "pages": [
+ "en/tools/ai-ml/overview",
+ "en/tools/ai-ml/dalletool",
+ "en/tools/ai-ml/visiontool",
+ "en/tools/ai-ml/aimindtool",
+ "en/tools/ai-ml/llamaindextool",
+ "en/tools/ai-ml/langchaintool",
+ "en/tools/ai-ml/ragtool",
+ "en/tools/ai-ml/codeinterpretertool"
+ ]
+ },
+ {
+ "group": "Cloud & Storage",
+ "icon": "cloud",
+ "pages": [
+ "en/tools/cloud-storage/overview",
+ "en/tools/cloud-storage/s3readertool",
+ "en/tools/cloud-storage/s3writertool",
+ "en/tools/cloud-storage/bedrockkbretriever"
+ ]
+ },
+ {
+ "group": "Integrations",
+ "icon": "plug",
+ "pages": [
+ "en/tools/integration/overview",
+ "en/tools/integration/bedrockinvokeagenttool",
+ "en/tools/integration/crewaiautomationtool",
+ "en/tools/integration/mergeagenthandlertool"
+ ]
+ },
+ {
+ "group": "Automation",
+ "icon": "bolt",
+ "pages": [
+ "en/tools/automation/overview",
+ "en/tools/automation/apifyactorstool",
+ "en/tools/automation/composiotool",
+ "en/tools/automation/multiontool",
+ "en/tools/automation/zapieractionstool"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Observability",
+ "pages": [
+ "en/observability/tracing",
+ "en/observability/overview",
+ "en/observability/arize-phoenix",
+ "en/observability/braintrust",
+ "en/observability/datadog",
+ "en/observability/galileo",
+ "en/observability/langdb",
+ "en/observability/langfuse",
+ "en/observability/langtrace",
+ "en/observability/maxim",
+ "en/observability/mlflow",
+ "en/observability/neatlogs",
+ "en/observability/openlit",
+ "en/observability/opik",
+ "en/observability/patronus-evaluation",
+ "en/observability/portkey",
+ "en/observability/weave",
+ "en/observability/truefoundry"
+ ]
+ },
+ {
+ "group": "Learn",
+ "pages": [
+ "en/learn/overview",
+ "en/learn/llm-selection-guide",
+ "en/learn/conditional-tasks",
+ "en/learn/coding-agents",
+ "en/learn/create-custom-tools",
+ "en/learn/custom-llm",
+ "en/learn/custom-manager-agent",
+ "en/learn/customizing-agents",
+ "en/learn/dalle-image-generation",
+ "en/learn/force-tool-output-as-result",
+ "en/learn/hierarchical-process",
+ "en/learn/human-input-on-execution",
+ "en/learn/human-in-the-loop",
+ "en/learn/human-feedback-in-flows",
+ "en/learn/kickoff-async",
+ "en/learn/kickoff-for-each",
+ "en/learn/llm-connections",
+ "en/learn/litellm-removal-guide",
+ "en/learn/multimodal-agents",
+ "en/learn/replay-tasks-from-latest-crew-kickoff",
+ "en/learn/sequential-process",
+ "en/learn/using-annotations",
+ "en/learn/execution-hooks",
+ "en/learn/llm-hooks",
+ "en/learn/tool-hooks"
+ ]
+ },
+ {
+ "group": "Telemetry",
+ "pages": [
+ "en/telemetry"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "AMP",
+ "icon": "briefcase",
+ "groups": [
+ {
+ "group": "Getting Started",
+ "pages": [
+ "en/enterprise/introduction"
+ ]
+ },
+ {
+ "group": "Build",
+ "pages": [
+ "en/enterprise/features/automations",
+ "en/enterprise/features/crew-studio",
+ "en/enterprise/features/marketplace",
+ "en/enterprise/features/agent-repositories",
+ "en/enterprise/features/tools-and-integrations",
+ "en/enterprise/features/pii-trace-redactions"
+ ]
+ },
+ {
+ "group": "Operate",
+ "pages": [
+ "en/enterprise/features/traces",
+ "en/enterprise/features/webhook-streaming",
+ "en/enterprise/features/hallucination-guardrail",
+ "en/enterprise/features/flow-hitl-management"
+ ]
+ },
+ {
+ "group": "Manage",
+ "pages": [
+ "en/enterprise/features/rbac"
+ ]
+ },
+ {
+ "group": "Integration Docs",
+ "pages": [
+ "en/enterprise/integrations/asana",
+ "en/enterprise/integrations/box",
+ "en/enterprise/integrations/clickup",
+ "en/enterprise/integrations/github",
+ "en/enterprise/integrations/gmail",
+ "en/enterprise/integrations/google_calendar",
+ "en/enterprise/integrations/google_contacts",
+ "en/enterprise/integrations/google_docs",
+ "en/enterprise/integrations/google_drive",
+ "en/enterprise/integrations/google_sheets",
+ "en/enterprise/integrations/google_slides",
+ "en/enterprise/integrations/hubspot",
+ "en/enterprise/integrations/jira",
+ "en/enterprise/integrations/linear",
+ "en/enterprise/integrations/microsoft_excel",
+ "en/enterprise/integrations/microsoft_onedrive",
+ "en/enterprise/integrations/microsoft_outlook",
+ "en/enterprise/integrations/microsoft_sharepoint",
+ "en/enterprise/integrations/microsoft_teams",
+ "en/enterprise/integrations/microsoft_word",
+ "en/enterprise/integrations/notion",
+ "en/enterprise/integrations/salesforce",
+ "en/enterprise/integrations/shopify",
+ "en/enterprise/integrations/slack",
+ "en/enterprise/integrations/stripe",
+ "en/enterprise/integrations/zendesk"
+ ]
+ },
+ {
+ "group": "Triggers",
+ "pages": [
+ "en/enterprise/guides/automation-triggers",
+ "en/enterprise/guides/gmail-trigger",
+ "en/enterprise/guides/google-calendar-trigger",
+ "en/enterprise/guides/google-drive-trigger",
+ "en/enterprise/guides/outlook-trigger",
+ "en/enterprise/guides/onedrive-trigger",
+ "en/enterprise/guides/microsoft-teams-trigger",
+ "en/enterprise/guides/slack-trigger",
+ "en/enterprise/guides/hubspot-trigger",
+ "en/enterprise/guides/salesforce-trigger",
+ "en/enterprise/guides/zapier-trigger"
+ ]
+ },
+ {
+ "group": "How-To Guides",
+ "pages": [
+ "en/enterprise/guides/build-crew",
+ "en/enterprise/guides/prepare-for-deployment",
+ "en/enterprise/guides/deploy-to-amp",
+ "en/enterprise/guides/private-package-registry",
+ "en/enterprise/guides/kickoff-crew",
+ "en/enterprise/guides/update-crew",
+ "en/enterprise/guides/enable-crew-studio",
+ "en/enterprise/guides/capture_telemetry_logs",
+ "en/enterprise/guides/azure-openai-setup",
+ "en/enterprise/guides/tool-repository",
+ "en/enterprise/guides/custom-mcp-server",
+ "en/enterprise/guides/react-component-export",
+ "en/enterprise/guides/team-management",
+ "en/enterprise/guides/human-in-the-loop",
+ "en/enterprise/guides/webhook-automation"
+ ]
+ },
+ {
+ "group": "Resources",
+ "pages": [
+ "en/enterprise/resources/frequently-asked-questions"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "API Reference",
+ "icon": "magnifying-glass",
+ "groups": [
+ {
+ "group": "Getting Started",
+ "pages": [
+ "en/api-reference/introduction",
+ "en/api-reference/inputs",
+ "en/api-reference/kickoff",
+ "en/api-reference/resume",
+ "en/api-reference/status"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Examples",
+ "icon": "code",
+ "groups": [
+ {
+ "group": "Examples",
+ "pages": [
+ "en/examples/example",
+ "en/examples/cookbooks"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Changelog",
+ "icon": "clock",
+ "groups": [
+ {
+ "group": "Release Notes",
+ "pages": [
+ "en/changelog"
+ ]
+ }
+ ]
+ }
+ ]
+ },
{
"version": "v1.12.0",
"tabs": [
@@ -2902,7 +3371,7 @@
},
"versions": [
{
- "version": "v1.12.1",
+ "version": "v1.12.2",
"default": true,
"tabs": [
{
@@ -3356,6 +3825,460 @@
}
]
},
+ {
+ "version": "v1.12.1",
+ "tabs": [
+ {
+ "tab": "Início",
+ "icon": "house",
+ "groups": [
+ {
+ "group": "Bem-vindo",
+ "pages": [
+ "pt-BR/index"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Documentação",
+ "icon": "book-open",
+ "groups": [
+ {
+ "group": "Começando",
+ "pages": [
+ "pt-BR/introduction",
+ "pt-BR/installation",
+ "pt-BR/quickstart"
+ ]
+ },
+ {
+ "group": "Guias",
+ "pages": [
+ {
+ "group": "Estratégia",
+ "icon": "compass",
+ "pages": [
+ "pt-BR/guides/concepts/evaluating-use-cases"
+ ]
+ },
+ {
+ "group": "Agentes",
+ "icon": "user",
+ "pages": [
+ "pt-BR/guides/agents/crafting-effective-agents"
+ ]
+ },
+ {
+ "group": "Crews",
+ "icon": "users",
+ "pages": [
+ "pt-BR/guides/crews/first-crew"
+ ]
+ },
+ {
+ "group": "Flows",
+ "icon": "code-branch",
+ "pages": [
+ "pt-BR/guides/flows/first-flow",
+ "pt-BR/guides/flows/mastering-flow-state"
+ ]
+ },
+ {
+ "group": "Ferramentas",
+ "icon": "wrench",
+ "pages": [
+ "pt-BR/guides/tools/publish-custom-tools"
+ ]
+ },
+ {
+ "group": "Ferramentas de Codificação",
+ "icon": "terminal",
+ "pages": [
+ "pt-BR/guides/coding-tools/agents-md"
+ ]
+ },
+ {
+ "group": "Avançado",
+ "icon": "gear",
+ "pages": [
+ "pt-BR/guides/advanced/customizing-prompts",
+ "pt-BR/guides/advanced/fingerprinting"
+ ]
+ },
+ {
+ "group": "Migração",
+ "icon": "shuffle",
+ "pages": [
+ "pt-BR/guides/migration/migrating-from-langgraph"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Conceitos-Chave",
+ "pages": [
+ "pt-BR/concepts/agents",
+ "pt-BR/concepts/tasks",
+ "pt-BR/concepts/crews",
+ "pt-BR/concepts/flows",
+ "pt-BR/concepts/production-architecture",
+ "pt-BR/concepts/knowledge",
+ "pt-BR/concepts/skills",
+ "pt-BR/concepts/llms",
+ "pt-BR/concepts/files",
+ "pt-BR/concepts/processes",
+ "pt-BR/concepts/collaboration",
+ "pt-BR/concepts/training",
+ "pt-BR/concepts/memory",
+ "pt-BR/concepts/reasoning",
+ "pt-BR/concepts/planning",
+ "pt-BR/concepts/testing",
+ "pt-BR/concepts/cli",
+ "pt-BR/concepts/tools",
+ "pt-BR/concepts/event-listener"
+ ]
+ },
+ {
+ "group": "Integração MCP",
+ "pages": [
+ "pt-BR/mcp/overview",
+ "pt-BR/mcp/dsl-integration",
+ "pt-BR/mcp/stdio",
+ "pt-BR/mcp/sse",
+ "pt-BR/mcp/streamable-http",
+ "pt-BR/mcp/multiple-servers",
+ "pt-BR/mcp/security"
+ ]
+ },
+ {
+ "group": "Ferramentas",
+ "pages": [
+ "pt-BR/tools/overview",
+ {
+ "group": "Arquivo & Documento",
+ "icon": "folder-open",
+ "pages": [
+ "pt-BR/tools/file-document/overview",
+ "pt-BR/tools/file-document/filereadtool",
+ "pt-BR/tools/file-document/filewritetool",
+ "pt-BR/tools/file-document/pdfsearchtool",
+ "pt-BR/tools/file-document/docxsearchtool",
+ "pt-BR/tools/file-document/mdxsearchtool",
+ "pt-BR/tools/file-document/xmlsearchtool",
+ "pt-BR/tools/file-document/txtsearchtool",
+ "pt-BR/tools/file-document/jsonsearchtool",
+ "pt-BR/tools/file-document/csvsearchtool",
+ "pt-BR/tools/file-document/directorysearchtool",
+ "pt-BR/tools/file-document/directoryreadtool"
+ ]
+ },
+ {
+ "group": "Web Scraping & Navegação",
+ "icon": "globe",
+ "pages": [
+ "pt-BR/tools/web-scraping/overview",
+ "pt-BR/tools/web-scraping/scrapewebsitetool",
+ "pt-BR/tools/web-scraping/scrapeelementfromwebsitetool",
+ "pt-BR/tools/web-scraping/scrapflyscrapetool",
+ "pt-BR/tools/web-scraping/seleniumscrapingtool",
+ "pt-BR/tools/web-scraping/scrapegraphscrapetool",
+ "pt-BR/tools/web-scraping/spidertool",
+ "pt-BR/tools/web-scraping/browserbaseloadtool",
+ "pt-BR/tools/web-scraping/hyperbrowserloadtool",
+ "pt-BR/tools/web-scraping/stagehandtool",
+ "pt-BR/tools/web-scraping/firecrawlcrawlwebsitetool",
+ "pt-BR/tools/web-scraping/firecrawlscrapewebsitetool",
+ "pt-BR/tools/web-scraping/oxylabsscraperstool"
+ ]
+ },
+ {
+ "group": "Pesquisa",
+ "icon": "magnifying-glass",
+ "pages": [
+ "pt-BR/tools/search-research/overview",
+ "pt-BR/tools/search-research/serperdevtool",
+ "pt-BR/tools/search-research/bravesearchtool",
+ "pt-BR/tools/search-research/exasearchtool",
+ "pt-BR/tools/search-research/linkupsearchtool",
+ "pt-BR/tools/search-research/githubsearchtool",
+ "pt-BR/tools/search-research/websitesearchtool",
+ "pt-BR/tools/search-research/codedocssearchtool",
+ "pt-BR/tools/search-research/youtubechannelsearchtool",
+ "pt-BR/tools/search-research/youtubevideosearchtool"
+ ]
+ },
+ {
+ "group": "Dados",
+ "icon": "database",
+ "pages": [
+ "pt-BR/tools/database-data/overview",
+ "pt-BR/tools/database-data/mysqltool",
+ "pt-BR/tools/database-data/pgsearchtool",
+ "pt-BR/tools/database-data/snowflakesearchtool",
+ "pt-BR/tools/database-data/nl2sqltool",
+ "pt-BR/tools/database-data/qdrantvectorsearchtool",
+ "pt-BR/tools/database-data/weaviatevectorsearchtool"
+ ]
+ },
+ {
+ "group": "IA & Machine Learning",
+ "icon": "brain",
+ "pages": [
+ "pt-BR/tools/ai-ml/overview",
+ "pt-BR/tools/ai-ml/dalletool",
+ "pt-BR/tools/ai-ml/visiontool",
+ "pt-BR/tools/ai-ml/aimindtool",
+ "pt-BR/tools/ai-ml/llamaindextool",
+ "pt-BR/tools/ai-ml/langchaintool",
+ "pt-BR/tools/ai-ml/ragtool",
+ "pt-BR/tools/ai-ml/codeinterpretertool"
+ ]
+ },
+ {
+ "group": "Cloud & Armazenamento",
+ "icon": "cloud",
+ "pages": [
+ "pt-BR/tools/cloud-storage/overview",
+ "pt-BR/tools/cloud-storage/s3readertool",
+ "pt-BR/tools/cloud-storage/s3writertool",
+ "pt-BR/tools/cloud-storage/bedrockkbretriever"
+ ]
+ },
+ {
+ "group": "Integrations",
+ "icon": "plug",
+ "pages": [
+ "pt-BR/tools/integration/overview",
+ "pt-BR/tools/integration/bedrockinvokeagenttool",
+ "pt-BR/tools/integration/crewaiautomationtool"
+ ]
+ },
+ {
+ "group": "Automação",
+ "icon": "bolt",
+ "pages": [
+ "pt-BR/tools/automation/overview",
+ "pt-BR/tools/automation/apifyactorstool",
+ "pt-BR/tools/automation/composiotool",
+ "pt-BR/tools/automation/multiontool"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Observabilidade",
+ "pages": [
+ "pt-BR/observability/tracing",
+ "pt-BR/observability/overview",
+ "pt-BR/observability/arize-phoenix",
+ "pt-BR/observability/braintrust",
+ "pt-BR/observability/datadog",
+ "pt-BR/observability/galileo",
+ "pt-BR/observability/langdb",
+ "pt-BR/observability/langfuse",
+ "pt-BR/observability/langtrace",
+ "pt-BR/observability/maxim",
+ "pt-BR/observability/mlflow",
+ "pt-BR/observability/openlit",
+ "pt-BR/observability/opik",
+ "pt-BR/observability/patronus-evaluation",
+ "pt-BR/observability/portkey",
+ "pt-BR/observability/weave",
+ "pt-BR/observability/truefoundry"
+ ]
+ },
+ {
+ "group": "Aprenda",
+ "pages": [
+ "pt-BR/learn/overview",
+ "pt-BR/learn/llm-selection-guide",
+ "pt-BR/learn/conditional-tasks",
+ "pt-BR/learn/coding-agents",
+ "pt-BR/learn/create-custom-tools",
+ "pt-BR/learn/custom-llm",
+ "pt-BR/learn/custom-manager-agent",
+ "pt-BR/learn/customizing-agents",
+ "pt-BR/learn/dalle-image-generation",
+ "pt-BR/learn/force-tool-output-as-result",
+ "pt-BR/learn/hierarchical-process",
+ "pt-BR/learn/human-input-on-execution",
+ "pt-BR/learn/human-in-the-loop",
+ "pt-BR/learn/human-feedback-in-flows",
+ "pt-BR/learn/kickoff-async",
+ "pt-BR/learn/kickoff-for-each",
+ "pt-BR/learn/llm-connections",
+ "pt-BR/learn/multimodal-agents",
+ "pt-BR/learn/replay-tasks-from-latest-crew-kickoff",
+ "pt-BR/learn/sequential-process",
+ "pt-BR/learn/using-annotations",
+ "pt-BR/learn/execution-hooks",
+ "pt-BR/learn/llm-hooks",
+ "pt-BR/learn/tool-hooks"
+ ]
+ },
+ {
+ "group": "Telemetria",
+ "pages": [
+ "pt-BR/telemetry"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "AMP",
+ "icon": "briefcase",
+ "groups": [
+ {
+ "group": "Começando",
+ "pages": [
+ "pt-BR/enterprise/introduction"
+ ]
+ },
+ {
+ "group": "Construir",
+ "pages": [
+ "pt-BR/enterprise/features/automations",
+ "pt-BR/enterprise/features/crew-studio",
+ "pt-BR/enterprise/features/marketplace",
+ "pt-BR/enterprise/features/agent-repositories",
+ "pt-BR/enterprise/features/tools-and-integrations",
+ "pt-BR/enterprise/features/pii-trace-redactions"
+ ]
+ },
+ {
+ "group": "Operar",
+ "pages": [
+ "pt-BR/enterprise/features/traces",
+ "pt-BR/enterprise/features/webhook-streaming",
+ "pt-BR/enterprise/features/hallucination-guardrail",
+ "pt-BR/enterprise/features/flow-hitl-management"
+ ]
+ },
+ {
+ "group": "Gerenciar",
+ "pages": [
+ "pt-BR/enterprise/features/rbac"
+ ]
+ },
+ {
+ "group": "Documentação de Integração",
+ "pages": [
+ "pt-BR/enterprise/integrations/asana",
+ "pt-BR/enterprise/integrations/box",
+ "pt-BR/enterprise/integrations/clickup",
+ "pt-BR/enterprise/integrations/github",
+ "pt-BR/enterprise/integrations/gmail",
+ "pt-BR/enterprise/integrations/google_calendar",
+ "pt-BR/enterprise/integrations/google_contacts",
+ "pt-BR/enterprise/integrations/google_docs",
+ "pt-BR/enterprise/integrations/google_drive",
+ "pt-BR/enterprise/integrations/google_sheets",
+ "pt-BR/enterprise/integrations/google_slides",
+ "pt-BR/enterprise/integrations/hubspot",
+ "pt-BR/enterprise/integrations/jira",
+ "pt-BR/enterprise/integrations/linear",
+ "pt-BR/enterprise/integrations/microsoft_excel",
+ "pt-BR/enterprise/integrations/microsoft_onedrive",
+ "pt-BR/enterprise/integrations/microsoft_outlook",
+ "pt-BR/enterprise/integrations/microsoft_sharepoint",
+ "pt-BR/enterprise/integrations/microsoft_teams",
+ "pt-BR/enterprise/integrations/microsoft_word",
+ "pt-BR/enterprise/integrations/notion",
+ "pt-BR/enterprise/integrations/salesforce",
+ "pt-BR/enterprise/integrations/shopify",
+ "pt-BR/enterprise/integrations/slack",
+ "pt-BR/enterprise/integrations/stripe",
+ "pt-BR/enterprise/integrations/zendesk"
+ ]
+ },
+ {
+ "group": "Guias",
+ "pages": [
+ "pt-BR/enterprise/guides/build-crew",
+ "pt-BR/enterprise/guides/prepare-for-deployment",
+ "pt-BR/enterprise/guides/deploy-to-amp",
+ "pt-BR/enterprise/guides/private-package-registry",
+ "pt-BR/enterprise/guides/kickoff-crew",
+ "pt-BR/enterprise/guides/update-crew",
+ "pt-BR/enterprise/guides/enable-crew-studio",
+ "pt-BR/enterprise/guides/capture_telemetry_logs",
+ "pt-BR/enterprise/guides/azure-openai-setup",
+ "pt-BR/enterprise/guides/tool-repository",
+ "pt-BR/enterprise/guides/custom-mcp-server",
+ "pt-BR/enterprise/guides/react-component-export",
+ "pt-BR/enterprise/guides/team-management",
+ "pt-BR/enterprise/guides/human-in-the-loop",
+ "pt-BR/enterprise/guides/webhook-automation"
+ ]
+ },
+ {
+ "group": "Triggers",
+ "pages": [
+ "pt-BR/enterprise/guides/automation-triggers",
+ "pt-BR/enterprise/guides/gmail-trigger",
+ "pt-BR/enterprise/guides/google-calendar-trigger",
+ "pt-BR/enterprise/guides/google-drive-trigger",
+ "pt-BR/enterprise/guides/outlook-trigger",
+ "pt-BR/enterprise/guides/onedrive-trigger",
+ "pt-BR/enterprise/guides/microsoft-teams-trigger",
+ "pt-BR/enterprise/guides/slack-trigger",
+ "pt-BR/enterprise/guides/hubspot-trigger",
+ "pt-BR/enterprise/guides/salesforce-trigger",
+ "pt-BR/enterprise/guides/zapier-trigger"
+ ]
+ },
+ {
+ "group": "Recursos",
+ "pages": [
+ "pt-BR/enterprise/resources/frequently-asked-questions"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Referência da API",
+ "icon": "magnifying-glass",
+ "groups": [
+ {
+ "group": "Começando",
+ "pages": [
+ "pt-BR/api-reference/introduction",
+ "pt-BR/api-reference/inputs",
+ "pt-BR/api-reference/kickoff",
+ "pt-BR/api-reference/resume",
+ "pt-BR/api-reference/status"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Exemplos",
+ "icon": "code",
+ "groups": [
+ {
+ "group": "Exemplos",
+ "pages": [
+ "pt-BR/examples/example",
+ "pt-BR/examples/cookbooks"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Notas de Versão",
+ "icon": "clock",
+ "groups": [
+ {
+ "group": "Notas de Versão",
+ "pages": [
+ "pt-BR/changelog"
+ ]
+ }
+ ]
+ }
+ ]
+ },
{
"version": "v1.12.0",
"tabs": [
@@ -5654,7 +6577,7 @@
},
"versions": [
{
- "version": "v1.12.1",
+ "version": "v1.12.2",
"default": true,
"tabs": [
{
@@ -6120,6 +7043,472 @@
}
]
},
+ {
+ "version": "v1.12.1",
+ "tabs": [
+ {
+ "tab": "홈",
+ "icon": "house",
+ "groups": [
+ {
+ "group": "환영합니다",
+ "pages": [
+ "ko/index"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "기술 문서",
+ "icon": "book-open",
+ "groups": [
+ {
+ "group": "시작 안내",
+ "pages": [
+ "ko/introduction",
+ "ko/installation",
+ "ko/quickstart"
+ ]
+ },
+ {
+ "group": "가이드",
+ "pages": [
+ {
+ "group": "전략",
+ "icon": "compass",
+ "pages": [
+ "ko/guides/concepts/evaluating-use-cases"
+ ]
+ },
+ {
+ "group": "에이전트 (Agents)",
+ "icon": "user",
+ "pages": [
+ "ko/guides/agents/crafting-effective-agents"
+ ]
+ },
+ {
+ "group": "크루 (Crews)",
+ "icon": "users",
+ "pages": [
+ "ko/guides/crews/first-crew"
+ ]
+ },
+ {
+ "group": "플로우 (Flows)",
+ "icon": "code-branch",
+ "pages": [
+ "ko/guides/flows/first-flow",
+ "ko/guides/flows/mastering-flow-state"
+ ]
+ },
+ {
+ "group": "도구",
+ "icon": "wrench",
+ "pages": [
+ "ko/guides/tools/publish-custom-tools"
+ ]
+ },
+ {
+ "group": "코딩 도구",
+ "icon": "terminal",
+ "pages": [
+ "ko/guides/coding-tools/agents-md"
+ ]
+ },
+ {
+ "group": "고급",
+ "icon": "gear",
+ "pages": [
+ "ko/guides/advanced/customizing-prompts",
+ "ko/guides/advanced/fingerprinting"
+ ]
+ },
+ {
+ "group": "마이그레이션",
+ "icon": "shuffle",
+ "pages": [
+ "ko/guides/migration/migrating-from-langgraph"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "핵심 개념",
+ "pages": [
+ "ko/concepts/agents",
+ "ko/concepts/tasks",
+ "ko/concepts/crews",
+ "ko/concepts/flows",
+ "ko/concepts/production-architecture",
+ "ko/concepts/knowledge",
+ "ko/concepts/skills",
+ "ko/concepts/llms",
+ "ko/concepts/files",
+ "ko/concepts/processes",
+ "ko/concepts/collaboration",
+ "ko/concepts/training",
+ "ko/concepts/memory",
+ "ko/concepts/reasoning",
+ "ko/concepts/planning",
+ "ko/concepts/testing",
+ "ko/concepts/cli",
+ "ko/concepts/tools",
+ "ko/concepts/event-listener"
+ ]
+ },
+ {
+ "group": "MCP 통합",
+ "pages": [
+ "ko/mcp/overview",
+ "ko/mcp/dsl-integration",
+ "ko/mcp/stdio",
+ "ko/mcp/sse",
+ "ko/mcp/streamable-http",
+ "ko/mcp/multiple-servers",
+ "ko/mcp/security"
+ ]
+ },
+ {
+ "group": "도구 (Tools)",
+ "pages": [
+ "ko/tools/overview",
+ {
+ "group": "파일 & 문서",
+ "icon": "folder-open",
+ "pages": [
+ "ko/tools/file-document/overview",
+ "ko/tools/file-document/filereadtool",
+ "ko/tools/file-document/filewritetool",
+ "ko/tools/file-document/pdfsearchtool",
+ "ko/tools/file-document/docxsearchtool",
+ "ko/tools/file-document/mdxsearchtool",
+ "ko/tools/file-document/xmlsearchtool",
+ "ko/tools/file-document/txtsearchtool",
+ "ko/tools/file-document/jsonsearchtool",
+ "ko/tools/file-document/csvsearchtool",
+ "ko/tools/file-document/directorysearchtool",
+ "ko/tools/file-document/directoryreadtool",
+ "ko/tools/file-document/ocrtool",
+ "ko/tools/file-document/pdf-text-writing-tool"
+ ]
+ },
+ {
+ "group": "웹 스크래핑 & 브라우징",
+ "icon": "globe",
+ "pages": [
+ "ko/tools/web-scraping/overview",
+ "ko/tools/web-scraping/scrapewebsitetool",
+ "ko/tools/web-scraping/scrapeelementfromwebsitetool",
+ "ko/tools/web-scraping/scrapflyscrapetool",
+ "ko/tools/web-scraping/seleniumscrapingtool",
+ "ko/tools/web-scraping/scrapegraphscrapetool",
+ "ko/tools/web-scraping/spidertool",
+ "ko/tools/web-scraping/browserbaseloadtool",
+ "ko/tools/web-scraping/hyperbrowserloadtool",
+ "ko/tools/web-scraping/stagehandtool",
+ "ko/tools/web-scraping/firecrawlcrawlwebsitetool",
+ "ko/tools/web-scraping/firecrawlscrapewebsitetool",
+ "ko/tools/web-scraping/oxylabsscraperstool",
+ "ko/tools/web-scraping/brightdata-tools"
+ ]
+ },
+ {
+ "group": "검색 및 연구",
+ "icon": "magnifying-glass",
+ "pages": [
+ "ko/tools/search-research/overview",
+ "ko/tools/search-research/serperdevtool",
+ "ko/tools/search-research/bravesearchtool",
+ "ko/tools/search-research/exasearchtool",
+ "ko/tools/search-research/linkupsearchtool",
+ "ko/tools/search-research/githubsearchtool",
+ "ko/tools/search-research/websitesearchtool",
+ "ko/tools/search-research/codedocssearchtool",
+ "ko/tools/search-research/youtubechannelsearchtool",
+ "ko/tools/search-research/youtubevideosearchtool",
+ "ko/tools/search-research/tavilysearchtool",
+ "ko/tools/search-research/tavilyextractortool",
+ "ko/tools/search-research/arxivpapertool",
+ "ko/tools/search-research/serpapi-googlesearchtool",
+ "ko/tools/search-research/serpapi-googleshoppingtool",
+ "ko/tools/search-research/databricks-query-tool"
+ ]
+ },
+ {
+ "group": "데이터베이스 & 데이터",
+ "icon": "database",
+ "pages": [
+ "ko/tools/database-data/overview",
+ "ko/tools/database-data/mysqltool",
+ "ko/tools/database-data/pgsearchtool",
+ "ko/tools/database-data/snowflakesearchtool",
+ "ko/tools/database-data/nl2sqltool",
+ "ko/tools/database-data/qdrantvectorsearchtool",
+ "ko/tools/database-data/weaviatevectorsearchtool",
+ "ko/tools/database-data/mongodbvectorsearchtool",
+ "ko/tools/database-data/singlestoresearchtool"
+ ]
+ },
+ {
+ "group": "인공지능 & 머신러닝",
+ "icon": "brain",
+ "pages": [
+ "ko/tools/ai-ml/overview",
+ "ko/tools/ai-ml/dalletool",
+ "ko/tools/ai-ml/visiontool",
+ "ko/tools/ai-ml/aimindtool",
+ "ko/tools/ai-ml/llamaindextool",
+ "ko/tools/ai-ml/langchaintool",
+ "ko/tools/ai-ml/ragtool",
+ "ko/tools/ai-ml/codeinterpretertool"
+ ]
+ },
+ {
+ "group": "클라우드 & 스토리지",
+ "icon": "cloud",
+ "pages": [
+ "ko/tools/cloud-storage/overview",
+ "ko/tools/cloud-storage/s3readertool",
+ "ko/tools/cloud-storage/s3writertool",
+ "ko/tools/cloud-storage/bedrockkbretriever"
+ ]
+ },
+ {
+ "group": "Integrations",
+ "icon": "plug",
+ "pages": [
+ "ko/tools/integration/overview",
+ "ko/tools/integration/bedrockinvokeagenttool",
+ "ko/tools/integration/crewaiautomationtool"
+ ]
+ },
+ {
+ "group": "자동화",
+ "icon": "bolt",
+ "pages": [
+ "ko/tools/automation/overview",
+ "ko/tools/automation/apifyactorstool",
+ "ko/tools/automation/composiotool",
+ "ko/tools/automation/multiontool",
+ "ko/tools/automation/zapieractionstool"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Observability",
+ "pages": [
+ "ko/observability/tracing",
+ "ko/observability/overview",
+ "ko/observability/arize-phoenix",
+ "ko/observability/braintrust",
+ "ko/observability/datadog",
+ "ko/observability/galileo",
+ "ko/observability/langdb",
+ "ko/observability/langfuse",
+ "ko/observability/langtrace",
+ "ko/observability/maxim",
+ "ko/observability/mlflow",
+ "ko/observability/neatlogs",
+ "ko/observability/openlit",
+ "ko/observability/opik",
+ "ko/observability/patronus-evaluation",
+ "ko/observability/portkey",
+ "ko/observability/weave"
+ ]
+ },
+ {
+ "group": "학습",
+ "pages": [
+ "ko/learn/overview",
+ "ko/learn/llm-selection-guide",
+ "ko/learn/conditional-tasks",
+ "ko/learn/coding-agents",
+ "ko/learn/create-custom-tools",
+ "ko/learn/custom-llm",
+ "ko/learn/custom-manager-agent",
+ "ko/learn/customizing-agents",
+ "ko/learn/dalle-image-generation",
+ "ko/learn/force-tool-output-as-result",
+ "ko/learn/hierarchical-process",
+ "ko/learn/human-input-on-execution",
+ "ko/learn/human-in-the-loop",
+ "ko/learn/human-feedback-in-flows",
+ "ko/learn/kickoff-async",
+ "ko/learn/kickoff-for-each",
+ "ko/learn/llm-connections",
+ "ko/learn/multimodal-agents",
+ "ko/learn/replay-tasks-from-latest-crew-kickoff",
+ "ko/learn/sequential-process",
+ "ko/learn/using-annotations",
+ "ko/learn/execution-hooks",
+ "ko/learn/llm-hooks",
+ "ko/learn/tool-hooks"
+ ]
+ },
+ {
+ "group": "Telemetry",
+ "pages": [
+ "ko/telemetry"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "엔터프라이즈",
+ "icon": "briefcase",
+ "groups": [
+ {
+ "group": "시작 안내",
+ "pages": [
+ "ko/enterprise/introduction"
+ ]
+ },
+ {
+ "group": "빌드",
+ "pages": [
+ "ko/enterprise/features/automations",
+ "ko/enterprise/features/crew-studio",
+ "ko/enterprise/features/marketplace",
+ "ko/enterprise/features/agent-repositories",
+ "ko/enterprise/features/tools-and-integrations",
+ "ko/enterprise/features/pii-trace-redactions"
+ ]
+ },
+ {
+ "group": "운영",
+ "pages": [
+ "ko/enterprise/features/traces",
+ "ko/enterprise/features/webhook-streaming",
+ "ko/enterprise/features/hallucination-guardrail",
+ "ko/enterprise/features/flow-hitl-management"
+ ]
+ },
+ {
+ "group": "관리",
+ "pages": [
+ "ko/enterprise/features/rbac"
+ ]
+ },
+ {
+ "group": "통합 문서",
+ "pages": [
+ "ko/enterprise/integrations/asana",
+ "ko/enterprise/integrations/box",
+ "ko/enterprise/integrations/clickup",
+ "ko/enterprise/integrations/github",
+ "ko/enterprise/integrations/gmail",
+ "ko/enterprise/integrations/google_calendar",
+ "ko/enterprise/integrations/google_contacts",
+ "ko/enterprise/integrations/google_docs",
+ "ko/enterprise/integrations/google_drive",
+ "ko/enterprise/integrations/google_sheets",
+ "ko/enterprise/integrations/google_slides",
+ "ko/enterprise/integrations/hubspot",
+ "ko/enterprise/integrations/jira",
+ "ko/enterprise/integrations/linear",
+ "ko/enterprise/integrations/microsoft_excel",
+ "ko/enterprise/integrations/microsoft_onedrive",
+ "ko/enterprise/integrations/microsoft_outlook",
+ "ko/enterprise/integrations/microsoft_sharepoint",
+ "ko/enterprise/integrations/microsoft_teams",
+ "ko/enterprise/integrations/microsoft_word",
+ "ko/enterprise/integrations/notion",
+ "ko/enterprise/integrations/salesforce",
+ "ko/enterprise/integrations/shopify",
+ "ko/enterprise/integrations/slack",
+ "ko/enterprise/integrations/stripe",
+ "ko/enterprise/integrations/zendesk"
+ ]
+ },
+ {
+ "group": "How-To Guides",
+ "pages": [
+ "ko/enterprise/guides/build-crew",
+ "ko/enterprise/guides/prepare-for-deployment",
+ "ko/enterprise/guides/deploy-to-amp",
+ "ko/enterprise/guides/private-package-registry",
+ "ko/enterprise/guides/kickoff-crew",
+ "ko/enterprise/guides/update-crew",
+ "ko/enterprise/guides/enable-crew-studio",
+ "ko/enterprise/guides/capture_telemetry_logs",
+ "ko/enterprise/guides/azure-openai-setup",
+ "ko/enterprise/guides/tool-repository",
+ "ko/enterprise/guides/custom-mcp-server",
+ "ko/enterprise/guides/react-component-export",
+ "ko/enterprise/guides/team-management",
+ "ko/enterprise/guides/human-in-the-loop",
+ "ko/enterprise/guides/webhook-automation"
+ ]
+ },
+ {
+ "group": "트리거",
+ "pages": [
+ "ko/enterprise/guides/automation-triggers",
+ "ko/enterprise/guides/gmail-trigger",
+ "ko/enterprise/guides/google-calendar-trigger",
+ "ko/enterprise/guides/google-drive-trigger",
+ "ko/enterprise/guides/outlook-trigger",
+ "ko/enterprise/guides/onedrive-trigger",
+ "ko/enterprise/guides/microsoft-teams-trigger",
+ "ko/enterprise/guides/slack-trigger",
+ "ko/enterprise/guides/hubspot-trigger",
+ "ko/enterprise/guides/salesforce-trigger",
+ "ko/enterprise/guides/zapier-trigger"
+ ]
+ },
+ {
+ "group": "학습 자원",
+ "pages": [
+ "ko/enterprise/resources/frequently-asked-questions"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "API 레퍼런스",
+ "icon": "magnifying-glass",
+ "groups": [
+ {
+ "group": "시작 안내",
+ "pages": [
+ "ko/api-reference/introduction",
+ "ko/api-reference/inputs",
+ "ko/api-reference/kickoff",
+ "ko/api-reference/resume",
+ "ko/api-reference/status"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "예시",
+ "icon": "code",
+ "groups": [
+ {
+ "group": "예시",
+ "pages": [
+ "ko/examples/example",
+ "ko/examples/cookbooks"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "변경 로그",
+ "icon": "clock",
+ "groups": [
+ {
+ "group": "릴리스 노트",
+ "pages": [
+ "ko/changelog"
+ ]
+ }
+ ]
+ }
+ ]
+ },
{
"version": "v1.12.0",
"tabs": [
@@ -8478,7 +9867,7 @@
},
"versions": [
{
- "version": "v1.12.1",
+ "version": "v1.12.2",
"default": true,
"tabs": [
{
@@ -8944,6 +10333,472 @@
}
]
},
+ {
+ "version": "v1.12.1",
+ "tabs": [
+ {
+ "tab": "الرئيسية",
+ "icon": "house",
+ "groups": [
+ {
+ "group": "مرحباً",
+ "pages": [
+ "ar/index"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "التقنية التوثيق",
+ "icon": "book-open",
+ "groups": [
+ {
+ "group": "البدء",
+ "pages": [
+ "ar/introduction",
+ "ar/installation",
+ "ar/quickstart"
+ ]
+ },
+ {
+ "group": "الأدلّة",
+ "pages": [
+ {
+ "group": "الاستراتيجية",
+ "icon": "compass",
+ "pages": [
+ "ar/guides/concepts/evaluating-use-cases"
+ ]
+ },
+ {
+ "group": "الوكلاء",
+ "icon": "user",
+ "pages": [
+ "ar/guides/agents/crafting-effective-agents"
+ ]
+ },
+ {
+ "group": "الطواقم",
+ "icon": "users",
+ "pages": [
+ "ar/guides/crews/first-crew"
+ ]
+ },
+ {
+ "group": "التدفقات",
+ "icon": "code-branch",
+ "pages": [
+ "ar/guides/flows/first-flow",
+ "ar/guides/flows/mastering-flow-state"
+ ]
+ },
+ {
+ "group": "الأدوات",
+ "icon": "wrench",
+ "pages": [
+ "ar/guides/tools/publish-custom-tools"
+ ]
+ },
+ {
+ "group": "أدوات البرمجة",
+ "icon": "terminal",
+ "pages": [
+ "ar/guides/coding-tools/agents-md"
+ ]
+ },
+ {
+ "group": "متقدّم",
+ "icon": "gear",
+ "pages": [
+ "ar/guides/advanced/customizing-prompts",
+ "ar/guides/advanced/fingerprinting"
+ ]
+ },
+ {
+ "group": "الترحيل",
+ "icon": "shuffle",
+ "pages": [
+ "ar/guides/migration/migrating-from-langgraph"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "المفاهيم الأساسية",
+ "pages": [
+ "ar/concepts/agents",
+ "ar/concepts/tasks",
+ "ar/concepts/crews",
+ "ar/concepts/flows",
+ "ar/concepts/production-architecture",
+ "ar/concepts/knowledge",
+ "ar/concepts/skills",
+ "ar/concepts/llms",
+ "ar/concepts/files",
+ "ar/concepts/processes",
+ "ar/concepts/collaboration",
+ "ar/concepts/training",
+ "ar/concepts/memory",
+ "ar/concepts/reasoning",
+ "ar/concepts/planning",
+ "ar/concepts/testing",
+ "ar/concepts/cli",
+ "ar/concepts/tools",
+ "ar/concepts/event-listener"
+ ]
+ },
+ {
+ "group": "تكامل MCP",
+ "pages": [
+ "ar/mcp/overview",
+ "ar/mcp/dsl-integration",
+ "ar/mcp/stdio",
+ "ar/mcp/sse",
+ "ar/mcp/streamable-http",
+ "ar/mcp/multiple-servers",
+ "ar/mcp/security"
+ ]
+ },
+ {
+ "group": "الأدوات",
+ "pages": [
+ "ar/tools/overview",
+ {
+ "group": "الملفات والمستندات",
+ "icon": "folder-open",
+ "pages": [
+ "ar/tools/file-document/overview",
+ "ar/tools/file-document/filereadtool",
+ "ar/tools/file-document/filewritetool",
+ "ar/tools/file-document/pdfsearchtool",
+ "ar/tools/file-document/docxsearchtool",
+ "ar/tools/file-document/mdxsearchtool",
+ "ar/tools/file-document/xmlsearchtool",
+ "ar/tools/file-document/txtsearchtool",
+ "ar/tools/file-document/jsonsearchtool",
+ "ar/tools/file-document/csvsearchtool",
+ "ar/tools/file-document/directorysearchtool",
+ "ar/tools/file-document/directoryreadtool",
+ "ar/tools/file-document/ocrtool",
+ "ar/tools/file-document/pdf-text-writing-tool"
+ ]
+ },
+ {
+ "group": "استخراج بيانات الويب",
+ "icon": "globe",
+ "pages": [
+ "ar/tools/web-scraping/overview",
+ "ar/tools/web-scraping/scrapewebsitetool",
+ "ar/tools/web-scraping/scrapeelementfromwebsitetool",
+ "ar/tools/web-scraping/scrapflyscrapetool",
+ "ar/tools/web-scraping/seleniumscrapingtool",
+ "ar/tools/web-scraping/scrapegraphscrapetool",
+ "ar/tools/web-scraping/spidertool",
+ "ar/tools/web-scraping/browserbaseloadtool",
+ "ar/tools/web-scraping/hyperbrowserloadtool",
+ "ar/tools/web-scraping/stagehandtool",
+ "ar/tools/web-scraping/firecrawlcrawlwebsitetool",
+ "ar/tools/web-scraping/firecrawlscrapewebsitetool",
+ "ar/tools/web-scraping/oxylabsscraperstool",
+ "ar/tools/web-scraping/brightdata-tools"
+ ]
+ },
+ {
+ "group": "البحث والاستكشاف",
+ "icon": "magnifying-glass",
+ "pages": [
+ "ar/tools/search-research/overview",
+ "ar/tools/search-research/serperdevtool",
+ "ar/tools/search-research/bravesearchtool",
+ "ar/tools/search-research/exasearchtool",
+ "ar/tools/search-research/linkupsearchtool",
+ "ar/tools/search-research/githubsearchtool",
+ "ar/tools/search-research/websitesearchtool",
+ "ar/tools/search-research/codedocssearchtool",
+ "ar/tools/search-research/youtubechannelsearchtool",
+ "ar/tools/search-research/youtubevideosearchtool",
+ "ar/tools/search-research/tavilysearchtool",
+ "ar/tools/search-research/tavilyextractortool",
+ "ar/tools/search-research/arxivpapertool",
+ "ar/tools/search-research/serpapi-googlesearchtool",
+ "ar/tools/search-research/serpapi-googleshoppingtool",
+ "ar/tools/search-research/databricks-query-tool"
+ ]
+ },
+ {
+ "group": "قواعد البيانات",
+ "icon": "database",
+ "pages": [
+ "ar/tools/database-data/overview",
+ "ar/tools/database-data/mysqltool",
+ "ar/tools/database-data/pgsearchtool",
+ "ar/tools/database-data/snowflakesearchtool",
+ "ar/tools/database-data/nl2sqltool",
+ "ar/tools/database-data/qdrantvectorsearchtool",
+ "ar/tools/database-data/weaviatevectorsearchtool",
+ "ar/tools/database-data/mongodbvectorsearchtool",
+ "ar/tools/database-data/singlestoresearchtool"
+ ]
+ },
+ {
+ "group": "الذكاء الاصطناعي والتعلّم الآلي",
+ "icon": "brain",
+ "pages": [
+ "ar/tools/ai-ml/overview",
+ "ar/tools/ai-ml/dalletool",
+ "ar/tools/ai-ml/visiontool",
+ "ar/tools/ai-ml/aimindtool",
+ "ar/tools/ai-ml/llamaindextool",
+ "ar/tools/ai-ml/langchaintool",
+ "ar/tools/ai-ml/ragtool",
+ "ar/tools/ai-ml/codeinterpretertool"
+ ]
+ },
+ {
+ "group": "التخزين السحابي",
+ "icon": "cloud",
+ "pages": [
+ "ar/tools/cloud-storage/overview",
+ "ar/tools/cloud-storage/s3readertool",
+ "ar/tools/cloud-storage/s3writertool",
+ "ar/tools/cloud-storage/bedrockkbretriever"
+ ]
+ },
+ {
+ "group": "Integrations",
+ "icon": "plug",
+ "pages": [
+ "ar/tools/integration/overview",
+ "ar/tools/integration/bedrockinvokeagenttool",
+ "ar/tools/integration/crewaiautomationtool"
+ ]
+ },
+ {
+ "group": "الأتمتة",
+ "icon": "bolt",
+ "pages": [
+ "ar/tools/automation/overview",
+ "ar/tools/automation/apifyactorstool",
+ "ar/tools/automation/composiotool",
+ "ar/tools/automation/multiontool",
+ "ar/tools/automation/zapieractionstool"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Observability",
+ "pages": [
+ "ar/observability/tracing",
+ "ar/observability/overview",
+ "ar/observability/arize-phoenix",
+ "ar/observability/braintrust",
+ "ar/observability/datadog",
+ "ar/observability/galileo",
+ "ar/observability/langdb",
+ "ar/observability/langfuse",
+ "ar/observability/langtrace",
+ "ar/observability/maxim",
+ "ar/observability/mlflow",
+ "ar/observability/neatlogs",
+ "ar/observability/openlit",
+ "ar/observability/opik",
+ "ar/observability/patronus-evaluation",
+ "ar/observability/portkey",
+ "ar/observability/weave"
+ ]
+ },
+ {
+ "group": "التعلّم",
+ "pages": [
+ "ar/learn/overview",
+ "ar/learn/llm-selection-guide",
+ "ar/learn/conditional-tasks",
+ "ar/learn/coding-agents",
+ "ar/learn/create-custom-tools",
+ "ar/learn/custom-llm",
+ "ar/learn/custom-manager-agent",
+ "ar/learn/customizing-agents",
+ "ar/learn/dalle-image-generation",
+ "ar/learn/force-tool-output-as-result",
+ "ar/learn/hierarchical-process",
+ "ar/learn/human-input-on-execution",
+ "ar/learn/human-in-the-loop",
+ "ar/learn/human-feedback-in-flows",
+ "ar/learn/kickoff-async",
+ "ar/learn/kickoff-for-each",
+ "ar/learn/llm-connections",
+ "ar/learn/multimodal-agents",
+ "ar/learn/replay-tasks-from-latest-crew-kickoff",
+ "ar/learn/sequential-process",
+ "ar/learn/using-annotations",
+ "ar/learn/execution-hooks",
+ "ar/learn/llm-hooks",
+ "ar/learn/tool-hooks"
+ ]
+ },
+ {
+ "group": "Telemetry",
+ "pages": [
+ "ar/telemetry"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "المؤسسات",
+ "icon": "briefcase",
+ "groups": [
+ {
+ "group": "البدء",
+ "pages": [
+ "ar/enterprise/introduction"
+ ]
+ },
+ {
+ "group": "البناء",
+ "pages": [
+ "ar/enterprise/features/automations",
+ "ar/enterprise/features/crew-studio",
+ "ar/enterprise/features/marketplace",
+ "ar/enterprise/features/agent-repositories",
+ "ar/enterprise/features/tools-and-integrations",
+ "ar/enterprise/features/pii-trace-redactions"
+ ]
+ },
+ {
+ "group": "العمليات",
+ "pages": [
+ "ar/enterprise/features/traces",
+ "ar/enterprise/features/webhook-streaming",
+ "ar/enterprise/features/hallucination-guardrail",
+ "ar/enterprise/features/flow-hitl-management"
+ ]
+ },
+ {
+ "group": "الإدارة",
+ "pages": [
+ "ar/enterprise/features/rbac"
+ ]
+ },
+ {
+ "group": "التكاملات",
+ "pages": [
+ "ar/enterprise/integrations/asana",
+ "ar/enterprise/integrations/box",
+ "ar/enterprise/integrations/clickup",
+ "ar/enterprise/integrations/github",
+ "ar/enterprise/integrations/gmail",
+ "ar/enterprise/integrations/google_calendar",
+ "ar/enterprise/integrations/google_contacts",
+ "ar/enterprise/integrations/google_docs",
+ "ar/enterprise/integrations/google_drive",
+ "ar/enterprise/integrations/google_sheets",
+ "ar/enterprise/integrations/google_slides",
+ "ar/enterprise/integrations/hubspot",
+ "ar/enterprise/integrations/jira",
+ "ar/enterprise/integrations/linear",
+ "ar/enterprise/integrations/microsoft_excel",
+ "ar/enterprise/integrations/microsoft_onedrive",
+ "ar/enterprise/integrations/microsoft_outlook",
+ "ar/enterprise/integrations/microsoft_sharepoint",
+ "ar/enterprise/integrations/microsoft_teams",
+ "ar/enterprise/integrations/microsoft_word",
+ "ar/enterprise/integrations/notion",
+ "ar/enterprise/integrations/salesforce",
+ "ar/enterprise/integrations/shopify",
+ "ar/enterprise/integrations/slack",
+ "ar/enterprise/integrations/stripe",
+ "ar/enterprise/integrations/zendesk"
+ ]
+ },
+ {
+ "group": "How-To Guides",
+ "pages": [
+ "ar/enterprise/guides/build-crew",
+ "ar/enterprise/guides/prepare-for-deployment",
+ "ar/enterprise/guides/deploy-to-amp",
+ "ar/enterprise/guides/private-package-registry",
+ "ar/enterprise/guides/kickoff-crew",
+ "ar/enterprise/guides/update-crew",
+ "ar/enterprise/guides/enable-crew-studio",
+ "ar/enterprise/guides/capture_telemetry_logs",
+ "ar/enterprise/guides/azure-openai-setup",
+ "ar/enterprise/guides/tool-repository",
+ "ar/enterprise/guides/custom-mcp-server",
+ "ar/enterprise/guides/react-component-export",
+ "ar/enterprise/guides/team-management",
+ "ar/enterprise/guides/human-in-the-loop",
+ "ar/enterprise/guides/webhook-automation"
+ ]
+ },
+ {
+ "group": "المشغّلات",
+ "pages": [
+ "ar/enterprise/guides/automation-triggers",
+ "ar/enterprise/guides/gmail-trigger",
+ "ar/enterprise/guides/google-calendar-trigger",
+ "ar/enterprise/guides/google-drive-trigger",
+ "ar/enterprise/guides/outlook-trigger",
+ "ar/enterprise/guides/onedrive-trigger",
+ "ar/enterprise/guides/microsoft-teams-trigger",
+ "ar/enterprise/guides/slack-trigger",
+ "ar/enterprise/guides/hubspot-trigger",
+ "ar/enterprise/guides/salesforce-trigger",
+ "ar/enterprise/guides/zapier-trigger"
+ ]
+ },
+ {
+ "group": "موارد التعلّم",
+ "pages": [
+ "ar/enterprise/resources/frequently-asked-questions"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "API المرجع",
+ "icon": "magnifying-glass",
+ "groups": [
+ {
+ "group": "البدء",
+ "pages": [
+ "ar/api-reference/introduction",
+ "ar/api-reference/inputs",
+ "ar/api-reference/kickoff",
+ "ar/api-reference/resume",
+ "ar/api-reference/status"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "أمثلة",
+ "icon": "code",
+ "groups": [
+ {
+ "group": "أمثلة",
+ "pages": [
+ "ar/examples/example",
+ "ar/examples/cookbooks"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "التغييرات السجلات",
+ "icon": "clock",
+ "groups": [
+ {
+ "group": "سجل التغييرات",
+ "pages": [
+ "ar/changelog"
+ ]
+ }
+ ]
+ }
+ ]
+ },
{
"version": "v1.12.0",
"tabs": [
diff --git a/docs/en/changelog.mdx b/docs/en/changelog.mdx
index 8d9b921fc..b9ebbc585 100644
--- a/docs/en/changelog.mdx
+++ b/docs/en/changelog.mdx
@@ -4,6 +4,29 @@ description: "Product updates, improvements, and bug fixes for CrewAI"
icon: "clock"
mode: "wide"
---
+
+ ## v1.12.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.2)
+
+ ## What's Changed
+
+ ### Features
+ - Add enterprise release phase to devtools release
+
+ ### Bug Fixes
+ - Preserve method return value as flow output for @human_feedback with emit
+
+ ### Documentation
+ - Update changelog and version for v1.12.1
+ - Revise security policy and reporting instructions
+
+ ## Contributors
+
+ @alex-clawd, @greysonlalonde, @joaomdmoura, @theCyberTech
+
+
+
## v1.12.1
diff --git a/docs/ko/changelog.mdx b/docs/ko/changelog.mdx
index c39cd4c1a..efe6316b0 100644
--- a/docs/ko/changelog.mdx
+++ b/docs/ko/changelog.mdx
@@ -4,6 +4,29 @@ description: "CrewAI의 제품 업데이트, 개선 사항 및 버그 수정"
icon: "clock"
mode: "wide"
---
+
+ ## v1.12.2
+
+ [GitHub 릴리스 보기](https://github.com/crewAIInc/crewAI/releases/tag/1.12.2)
+
+ ## 변경 사항
+
+ ### 기능
+ - devtools 릴리스에 기업 릴리스 단계 추가
+
+ ### 버그 수정
+ - @human_feedback과 함께 emit을 사용할 때 메서드 반환 값을 흐름 출력으로 유지
+
+ ### 문서
+ - v1.12.1에 대한 변경 로그 및 버전 업데이트
+ - 보안 정책 및 보고 지침 수정
+
+ ## 기여자
+
+ @alex-clawd, @greysonlalonde, @joaomdmoura, @theCyberTech
+
+
+
## v1.12.1
diff --git a/docs/pt-BR/changelog.mdx b/docs/pt-BR/changelog.mdx
index a21d2f1d8..e39409740 100644
--- a/docs/pt-BR/changelog.mdx
+++ b/docs/pt-BR/changelog.mdx
@@ -4,6 +4,29 @@ description: "Atualizações de produto, melhorias e correções do CrewAI"
icon: "clock"
mode: "wide"
---
+
+ ## v1.12.2
+
+ [Ver release no GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.2)
+
+ ## O que Mudou
+
+ ### Recursos
+ - Adicionar fase de lançamento empresarial ao lançamento do devtools
+
+ ### Correções de Bugs
+ - Preservar o valor de retorno do método como saída de fluxo para @human_feedback com emit
+
+ ### Documentação
+ - Atualizar changelog e versão para v1.12.1
+ - Revisar política de segurança e instruções de relatório
+
+ ## Contributors
+
+ @alex-clawd, @greysonlalonde, @joaomdmoura, @theCyberTech
+
+
+
## v1.12.1
diff --git a/lib/crewai-files/src/crewai_files/__init__.py b/lib/crewai-files/src/crewai_files/__init__.py
index 58979f922..2754e0791 100644
--- a/lib/crewai-files/src/crewai_files/__init__.py
+++ b/lib/crewai-files/src/crewai_files/__init__.py
@@ -152,4 +152,4 @@ __all__ = [
"wrap_file_source",
]
-__version__ = "1.12.1"
+__version__ = "1.12.2"
diff --git a/lib/crewai-tools/pyproject.toml b/lib/crewai-tools/pyproject.toml
index b73f8cde9..c2365b115 100644
--- a/lib/crewai-tools/pyproject.toml
+++ b/lib/crewai-tools/pyproject.toml
@@ -11,7 +11,7 @@ dependencies = [
"pytube~=15.0.0",
"requests~=2.32.5",
"docker~=7.1.0",
- "crewai==1.12.1",
+ "crewai==1.12.2",
"tiktoken~=0.8.0",
"beautifulsoup4~=4.13.4",
"python-docx~=1.2.0",
diff --git a/lib/crewai-tools/src/crewai_tools/__init__.py b/lib/crewai-tools/src/crewai_tools/__init__.py
index 902aadf95..c0680186e 100644
--- a/lib/crewai-tools/src/crewai_tools/__init__.py
+++ b/lib/crewai-tools/src/crewai_tools/__init__.py
@@ -309,4 +309,4 @@ __all__ = [
"ZapierActionTools",
]
-__version__ = "1.12.1"
+__version__ = "1.12.2"
diff --git a/lib/crewai/pyproject.toml b/lib/crewai/pyproject.toml
index b9060cf61..75d25bf2d 100644
--- a/lib/crewai/pyproject.toml
+++ b/lib/crewai/pyproject.toml
@@ -54,7 +54,7 @@ Repository = "https://github.com/crewAIInc/crewAI"
[project.optional-dependencies]
tools = [
- "crewai-tools==1.12.1",
+ "crewai-tools==1.12.2",
]
embeddings = [
"tiktoken~=0.8.0"
diff --git a/lib/crewai/src/crewai/__init__.py b/lib/crewai/src/crewai/__init__.py
index 8b3577b88..213c69942 100644
--- a/lib/crewai/src/crewai/__init__.py
+++ b/lib/crewai/src/crewai/__init__.py
@@ -42,7 +42,7 @@ def _suppress_pydantic_deprecation_warnings() -> None:
_suppress_pydantic_deprecation_warnings()
-__version__ = "1.12.1"
+__version__ = "1.12.2"
_telemetry_submitted = False
diff --git a/lib/crewai/src/crewai/cli/templates/crew/pyproject.toml b/lib/crewai/src/crewai/cli/templates/crew/pyproject.toml
index 417f4ce92..b165099da 100644
--- a/lib/crewai/src/crewai/cli/templates/crew/pyproject.toml
+++ b/lib/crewai/src/crewai/cli/templates/crew/pyproject.toml
@@ -5,7 +5,7 @@ description = "{{name}} using crewAI"
authors = [{ name = "Your Name", email = "you@example.com" }]
requires-python = ">=3.10,<3.14"
dependencies = [
- "crewai[tools]==1.12.1"
+ "crewai[tools]==1.12.2"
]
[project.scripts]
diff --git a/lib/crewai/src/crewai/cli/templates/flow/pyproject.toml b/lib/crewai/src/crewai/cli/templates/flow/pyproject.toml
index 5790b4528..f4b151331 100644
--- a/lib/crewai/src/crewai/cli/templates/flow/pyproject.toml
+++ b/lib/crewai/src/crewai/cli/templates/flow/pyproject.toml
@@ -5,7 +5,7 @@ description = "{{name}} using crewAI"
authors = [{ name = "Your Name", email = "you@example.com" }]
requires-python = ">=3.10,<3.14"
dependencies = [
- "crewai[tools]==1.12.1"
+ "crewai[tools]==1.12.2"
]
[project.scripts]
diff --git a/lib/crewai/src/crewai/cli/templates/tool/pyproject.toml b/lib/crewai/src/crewai/cli/templates/tool/pyproject.toml
index ca2243815..9bd97bcb9 100644
--- a/lib/crewai/src/crewai/cli/templates/tool/pyproject.toml
+++ b/lib/crewai/src/crewai/cli/templates/tool/pyproject.toml
@@ -5,7 +5,7 @@ description = "Power up your crews with {{folder_name}}"
readme = "README.md"
requires-python = ">=3.10,<3.14"
dependencies = [
- "crewai[tools]==1.12.1"
+ "crewai[tools]==1.12.2"
]
[tool.crewai]
diff --git a/lib/crewai/src/crewai/flow/flow.py b/lib/crewai/src/crewai/flow/flow.py
index f1e75e617..0624f7bec 100644
--- a/lib/crewai/src/crewai/flow/flow.py
+++ b/lib/crewai/src/crewai/flow/flow.py
@@ -883,6 +883,9 @@ class Flow(Generic[T], metaclass=FlowMeta):
self.human_feedback_history: list[HumanFeedbackResult] = []
self.last_human_feedback: HumanFeedbackResult | None = None
self._pending_feedback_context: PendingFeedbackContext | None = None
+ # Per-method stash for real @human_feedback output (keyed by method name)
+ # Used to decouple routing outcome from method return value when emit is set
+ self._human_feedback_method_outputs: dict[str, Any] = {}
self.suppress_flow_events: bool = suppress_flow_events
# User input history (for self.ask())
@@ -2290,6 +2293,17 @@ class Flow(Generic[T], metaclass=FlowMeta):
result = await result
self._method_outputs.append(result)
+
+ # For @human_feedback methods with emit, the result is the collapsed outcome
+ # (e.g., "approved") used for routing. But we want the actual method output
+ # to be the stored result (for final flow output). Replace the last entry
+ # if a stashed output exists. Dict-based stash is concurrency-safe and
+ # handles None return values (presence in dict = stashed, not value).
+ if method_name in self._human_feedback_method_outputs:
+ self._method_outputs[-1] = self._human_feedback_method_outputs.pop(
+ method_name
+ )
+
self._method_execution_counts[method_name] = (
self._method_execution_counts.get(method_name, 0) + 1
)
diff --git a/lib/crewai/src/crewai/flow/human_feedback.py b/lib/crewai/src/crewai/flow/human_feedback.py
index e43fc3337..5fedbd3a2 100644
--- a/lib/crewai/src/crewai/flow/human_feedback.py
+++ b/lib/crewai/src/crewai/flow/human_feedback.py
@@ -591,6 +591,13 @@ def human_feedback(
):
_distill_and_store_lessons(self, method_output, raw_feedback)
+ # Stash the real method output for final flow result when emit is set
+ # (result is the collapsed outcome string for routing, but we want to
+ # preserve the actual method output as the flow's final result)
+ # Uses per-method dict for concurrency safety and to handle None returns
+ if emit:
+ self._human_feedback_method_outputs[func.__name__] = method_output
+
return result
wrapper: Any = async_wrapper
@@ -615,6 +622,13 @@ def human_feedback(
):
_distill_and_store_lessons(self, method_output, raw_feedback)
+ # Stash the real method output for final flow result when emit is set
+ # (result is the collapsed outcome string for routing, but we want to
+ # preserve the actual method output as the flow's final result)
+ # Uses per-method dict for concurrency safety and to handle None returns
+ if emit:
+ self._human_feedback_method_outputs[func.__name__] = method_output
+
return result
wrapper = sync_wrapper
diff --git a/lib/crewai/tests/test_human_feedback_decorator.py b/lib/crewai/tests/test_human_feedback_decorator.py
index 23b3d723b..68371eb0d 100644
--- a/lib/crewai/tests/test_human_feedback_decorator.py
+++ b/lib/crewai/tests/test_human_feedback_decorator.py
@@ -246,7 +246,7 @@ class TestHumanFeedbackExecution:
@patch("builtins.input", return_value="")
@patch("builtins.print")
def test_empty_feedback_with_default_outcome(self, mock_print, mock_input):
- """Test empty feedback uses default_outcome."""
+ """Test empty feedback uses default_outcome for routing, but flow returns method output."""
class TestFlow(Flow):
@start()
@@ -264,14 +264,16 @@ class TestHumanFeedbackExecution:
with patch.object(flow, "_request_human_feedback", return_value=""):
result = flow.kickoff()
- assert result == "needs_work"
+ # Flow result is the method's return value, NOT the collapsed outcome
+ assert result == "Content"
assert flow.last_human_feedback is not None
+ # But the outcome is still correctly set for routing purposes
assert flow.last_human_feedback.outcome == "needs_work"
@patch("builtins.input", return_value="Approved!")
@patch("builtins.print")
def test_feedback_collapsing(self, mock_print, mock_input):
- """Test that feedback is collapsed to an outcome."""
+ """Test that feedback is collapsed to an outcome for routing, but flow returns method output."""
class TestFlow(Flow):
@start()
@@ -291,8 +293,10 @@ class TestHumanFeedbackExecution:
):
result = flow.kickoff()
- assert result == "approved"
+ # Flow result is the method's return value, NOT the collapsed outcome
+ assert result == "Content"
assert flow.last_human_feedback is not None
+ # But the outcome is still correctly set for routing purposes
assert flow.last_human_feedback.outcome == "approved"
@@ -591,3 +595,162 @@ class TestHumanFeedbackLearn:
assert config.learn is True
# llm defaults to "gpt-4o-mini" at the function level
assert config.llm == "gpt-4o-mini"
+
+
+class TestHumanFeedbackFinalOutputPreservation:
+ """Tests for preserving method return value as flow's final output when @human_feedback with emit is terminal.
+
+ This addresses the bug where the flow's final output was the collapsed outcome string (e.g., 'approved')
+ instead of the method's actual return value when a @human_feedback method with emit is the final method.
+ """
+
+ @patch("builtins.input", return_value="Looks good!")
+ @patch("builtins.print")
+ def test_final_output_is_method_return_not_collapsed_outcome(
+ self, mock_print, mock_input
+ ):
+ """When @human_feedback with emit is the final method, flow output is the method's return value."""
+
+ class FinalHumanFeedbackFlow(Flow):
+ @start()
+ @human_feedback(
+ message="Review this content:",
+ emit=["approved", "rejected"],
+ llm="gpt-4o-mini",
+ )
+ def generate_and_review(self):
+ # This dict should be the final output, NOT the string 'approved'
+ return {"title": "My Article", "content": "Article content here", "status": "ready"}
+
+ flow = FinalHumanFeedbackFlow()
+
+ with (
+ patch.object(flow, "_request_human_feedback", return_value="Looks great, approved!"),
+ patch.object(flow, "_collapse_to_outcome", return_value="approved"),
+ ):
+ result = flow.kickoff()
+
+ # The final output should be the actual method return value, not the collapsed outcome
+ assert isinstance(result, dict), f"Expected dict, got {type(result).__name__}: {result}"
+ assert result == {"title": "My Article", "content": "Article content here", "status": "ready"}
+ # But the outcome should still be tracked in last_human_feedback
+ assert flow.last_human_feedback is not None
+ assert flow.last_human_feedback.outcome == "approved"
+
+ @patch("builtins.input", return_value="approved")
+ @patch("builtins.print")
+ def test_routing_still_works_with_downstream_listener(self, mock_print, mock_input):
+ """When @human_feedback has a downstream listener, routing still triggers the listener."""
+ publish_called = []
+
+ class RoutingFlow(Flow):
+ @start()
+ @human_feedback(
+ message="Review:",
+ emit=["approved", "rejected"],
+ llm="gpt-4o-mini",
+ )
+ def review(self):
+ return {"content": "original content"}
+
+ @listen("approved")
+ def publish(self):
+ publish_called.append(True)
+ return {"published": True, "timestamp": "2024-01-01"}
+
+ flow = RoutingFlow()
+
+ with (
+ patch.object(flow, "_request_human_feedback", return_value="LGTM"),
+ patch.object(flow, "_collapse_to_outcome", return_value="approved"),
+ ):
+ result = flow.kickoff()
+
+ # The downstream listener should have been triggered
+ assert len(publish_called) == 1, "publish() should have been called"
+ # The final output should be from the listener, not the human_feedback method
+ assert result == {"published": True, "timestamp": "2024-01-01"}
+
+ @patch("builtins.input", return_value="")
+ @patch("builtins.print")
+ @pytest.mark.asyncio
+ async def test_async_human_feedback_final_output_preserved(self, mock_print, mock_input):
+ """Async @human_feedback methods also preserve the real return value."""
+
+ class AsyncFinalFlow(Flow):
+ @start()
+ @human_feedback(
+ message="Review async content:",
+ emit=["approved", "rejected"],
+ llm="gpt-4o-mini",
+ default_outcome="approved",
+ )
+ async def async_generate(self):
+ return {"async_data": "value", "computed": 42}
+
+ flow = AsyncFinalFlow()
+
+ with (
+ patch.object(flow, "_request_human_feedback", return_value=""),
+ ):
+ result = await flow.kickoff_async()
+
+ # The final output should be the dict, not "approved"
+ assert isinstance(result, dict), f"Expected dict, got {type(result).__name__}: {result}"
+ assert result == {"async_data": "value", "computed": 42}
+ assert flow.last_human_feedback.outcome == "approved"
+
+ @patch("builtins.input", return_value="feedback")
+ @patch("builtins.print")
+ def test_method_outputs_contains_real_output(self, mock_print, mock_input):
+ """The _method_outputs list should contain the real method output, not the collapsed outcome."""
+
+ class OutputTrackingFlow(Flow):
+ @start()
+ @human_feedback(
+ message="Review:",
+ emit=["approved", "rejected"],
+ llm="gpt-4o-mini",
+ )
+ def generate(self):
+ return {"data": "real output"}
+
+ flow = OutputTrackingFlow()
+
+ with (
+ patch.object(flow, "_request_human_feedback", return_value="approved"),
+ patch.object(flow, "_collapse_to_outcome", return_value="approved"),
+ ):
+ flow.kickoff()
+
+ # _method_outputs should contain the real output
+ assert len(flow._method_outputs) == 1
+ assert flow._method_outputs[0] == {"data": "real output"}
+
+ @patch("builtins.input", return_value="looks good")
+ @patch("builtins.print")
+ def test_none_return_value_is_preserved(self, mock_print, mock_input):
+ """A method returning None should preserve None as flow output, not the outcome string."""
+
+ class NoneReturnFlow(Flow):
+ @start()
+ @human_feedback(
+ message="Review:",
+ emit=["approved", "rejected"],
+ llm="gpt-4o-mini",
+ )
+ def process(self):
+ # Method does work but returns None (implicit)
+ pass
+
+ flow = NoneReturnFlow()
+
+ with (
+ patch.object(flow, "_request_human_feedback", return_value=""),
+ patch.object(flow, "_collapse_to_outcome", return_value="approved"),
+ ):
+ result = flow.kickoff()
+
+ # Final output should be None (the method's real return), not "approved"
+ assert result is None, f"Expected None, got {result!r}"
+ assert flow.last_human_feedback.outcome == "approved"
diff --git a/lib/crewai/tests/test_human_feedback_integration.py b/lib/crewai/tests/test_human_feedback_integration.py
index 407c44bd2..b2e66797b 100644
--- a/lib/crewai/tests/test_human_feedback_integration.py
+++ b/lib/crewai/tests/test_human_feedback_integration.py
@@ -708,7 +708,7 @@ class TestEdgeCases:
@patch("builtins.input", return_value="")
@patch("builtins.print")
def test_empty_feedback_first_outcome_fallback(self, mock_print, mock_input):
- """Test that empty feedback without default uses first outcome."""
+ """Test that empty feedback without default uses first outcome for routing, but returns method output."""
class FallbackFlow(Flow):
@start()
@@ -726,12 +726,15 @@ class TestEdgeCases:
with patch.object(flow, "_request_human_feedback", return_value=""):
result = flow.kickoff()
- assert result == "first" # Falls back to first outcome
+ # Flow result is the method's return value, NOT the collapsed outcome
+ assert result == "content"
+ # But outcome is still set to first for routing purposes
+ assert flow.last_human_feedback.outcome == "first"
@patch("builtins.input", return_value="whitespace only ")
@patch("builtins.print")
def test_whitespace_only_feedback_treated_as_empty(self, mock_print, mock_input):
- """Test that whitespace-only feedback is treated as empty."""
+ """Test that whitespace-only feedback is treated as empty for routing, but returns method output."""
class WhitespaceFlow(Flow):
@start()
@@ -749,7 +752,10 @@ class TestEdgeCases:
with patch.object(flow, "_request_human_feedback", return_value=" "):
result = flow.kickoff()
- assert result == "reject" # Uses default because feedback is empty after strip
+ # Flow result is the method's return value, NOT the collapsed outcome
+ assert result == "content"
+ # But outcome is set to default because feedback is empty after strip
+ assert flow.last_human_feedback.outcome == "reject"
@patch("builtins.input", return_value="feedback")
@patch("builtins.print")
diff --git a/lib/devtools/src/crewai_devtools/__init__.py b/lib/devtools/src/crewai_devtools/__init__.py
index 4cb918542..fdfa99211 100644
--- a/lib/devtools/src/crewai_devtools/__init__.py
+++ b/lib/devtools/src/crewai_devtools/__init__.py
@@ -1,3 +1,3 @@
"""CrewAI development tools."""
-__version__ = "1.12.1"
+__version__ = "1.12.2"