diff --git a/docs/ar/concepts/checkpointing.mdx b/docs/ar/concepts/checkpointing.mdx new file mode 100644 index 000000000..442a98bea --- /dev/null +++ b/docs/ar/concepts/checkpointing.mdx @@ -0,0 +1,187 @@ +--- +title: Checkpointing +description: حفظ حالة التنفيذ تلقائيا حتى تتمكن الطواقم والتدفقات والوكلاء من الاستئناف بعد الفشل. +icon: floppy-disk +mode: "wide" +--- + + +الـ Checkpointing في اصدار مبكر. قد تتغير واجهات البرمجة في الاصدارات المستقبلية. + + +## نظرة عامة + +يقوم الـ Checkpointing بحفظ حالة التنفيذ تلقائيا اثناء التشغيل. اذا فشل طاقم او تدفق او وكيل اثناء التنفيذ، يمكنك الاستعادة من اخر نقطة حفظ والاستئناف دون اعادة تنفيذ العمل المكتمل. + +## البداية السريعة + +```python +from crewai import Crew, CheckpointConfig + +crew = Crew( + agents=[...], + tasks=[...], + checkpoint=True, # يستخدم الافتراضيات: ./.checkpoints, عند task_completed +) +result = crew.kickoff() +``` + +تتم كتابة ملفات نقاط الحفظ في `./.checkpoints/` بعد اكتمال كل مهمة. + +## التكوين + +استخدم `CheckpointConfig` للتحكم الكامل: + +```python +from crewai import Crew, CheckpointConfig + +crew = Crew( + agents=[...], + tasks=[...], + checkpoint=CheckpointConfig( + directory="./my_checkpoints", + on_events=["task_completed", "crew_kickoff_completed"], + max_checkpoints=5, + ), +) +``` + +### حقول CheckpointConfig + +| الحقل | النوع | الافتراضي | الوصف | +|:------|:------|:----------|:------| +| `directory` | `str` | `"./.checkpoints"` | مسار ملفات نقاط الحفظ | +| `on_events` | `list[str]` | `["task_completed"]` | انواع الاحداث التي تطلق نقطة حفظ | +| `provider` | `BaseProvider` | `JsonProvider()` | واجهة التخزين | +| `max_checkpoints` | `int \| None` | `None` | الحد الاقصى للملفات؛ يتم حذف الاقدم اولا | + +### الوراثة والانسحاب + +يقبل حقل `checkpoint` في Crew و Flow و Agent قيم `CheckpointConfig` او `True` او `False` او `None`: + +| القيمة | السلوك | +|:-------|:-------| +| `None` (افتراضي) | يرث من الاصل. الوكيل يرث اعدادات الطاقم. | +| `True` | تفعيل بالاعدادات الافتراضية. | +| `False` | انسحاب صريح. يوقف الوراثة من الاصل. | +| `CheckpointConfig(...)` | اعدادات مخصصة. | + +```python +crew = Crew( + agents=[ + Agent(role="Researcher", ...), # يرث checkpoint من الطاقم + Agent(role="Writer", ..., checkpoint=False), # منسحب، بدون نقاط حفظ + ], + tasks=[...], + checkpoint=True, +) +``` + +## الاستئناف من نقطة حفظ + +```python +# استعادة واستئناف +crew = Crew.from_checkpoint("./my_checkpoints/20260407T120000_abc123.json") +result = crew.kickoff() # يستأنف من اخر مهمة مكتملة +``` + +يتخطى الطاقم المستعاد المهام المكتملة ويستأنف من اول مهمة غير مكتملة. + +## يعمل على Crew و Flow و Agent + +### Crew + +```python +crew = Crew( + agents=[researcher, writer], + tasks=[research_task, write_task, review_task], + checkpoint=CheckpointConfig(directory="./crew_cp"), +) +``` + +المشغل الافتراضي: `task_completed` (نقطة حفظ واحدة لكل مهمة مكتملة). + +### Flow + +```python +from crewai.flow.flow import Flow, start, listen +from crewai import CheckpointConfig + +class MyFlow(Flow): + @start() + def step_one(self): + return "data" + + @listen(step_one) + def step_two(self, data): + return process(data) + +flow = MyFlow( + checkpoint=CheckpointConfig( + directory="./flow_cp", + on_events=["method_execution_finished"], + ), +) +result = flow.kickoff() + +# استئناف +flow = MyFlow.from_checkpoint("./flow_cp/20260407T120000_abc123.json") +result = flow.kickoff() +``` + +### Agent + +```python +agent = Agent( + role="Researcher", + goal="Research topics", + backstory="Expert researcher", + checkpoint=CheckpointConfig( + directory="./agent_cp", + on_events=["lite_agent_execution_completed"], + ), +) +result = agent.kickoff(messages=[{"role": "user", "content": "Research AI trends"}]) +``` + +## انواع الاحداث + +يقبل حقل `on_events` اي مجموعة من سلاسل انواع الاحداث. الخيارات الشائعة: + +| حالة الاستخدام | الاحداث | +|:---------------|:--------| +| بعد كل مهمة (Crew) | `["task_completed"]` | +| بعد كل طريقة في التدفق | `["method_execution_finished"]` | +| بعد تنفيذ الوكيل | `["agent_execution_completed"]`, `["lite_agent_execution_completed"]` | +| عند اكتمال الطاقم فقط | `["crew_kickoff_completed"]` | +| بعد كل استدعاء LLM | `["llm_call_completed"]` | +| على كل شيء | `["*"]` | + + +استخدام `["*"]` او احداث عالية التردد مثل `llm_call_completed` سيكتب العديد من ملفات نقاط الحفظ وقد يؤثر على الاداء. استخدم `max_checkpoints` للحد من استخدام المساحة. + + +## نقاط الحفظ اليدوية + +للتحكم الكامل، سجل معالج الاحداث الخاص بك واستدع `state.checkpoint()` مباشرة: + +```python +from crewai.events.event_bus import crewai_event_bus +from crewai.events.types.llm_events import LLMCallCompletedEvent + +# معالج متزامن +@crewai_event_bus.on(LLMCallCompletedEvent) +def on_llm_done(source, event, state): + path = state.checkpoint("./my_checkpoints") + print(f"تم حفظ نقطة الحفظ: {path}") + +# معالج غير متزامن +@crewai_event_bus.on(LLMCallCompletedEvent) +async def on_llm_done_async(source, event, state): + path = await state.acheckpoint("./my_checkpoints") + print(f"تم حفظ نقطة الحفظ: {path}") +``` + +وسيط `state` هو `RuntimeState` الذي يتم تمريره تلقائيا بواسطة ناقل الاحداث عندما يقبل المعالج 3 معاملات. يمكنك تسجيل معالجات على اي نوع حدث مدرج في وثائق [Event Listeners](/ar/concepts/event-listener). + +الـ Checkpointing يعمل بافضل جهد: اذا فشلت كتابة نقطة حفظ، يتم تسجيل الخطأ ولكن التنفيذ يستمر دون انقطاع. diff --git a/docs/docs.json b/docs/docs.json index 68ee0e7af..2fea532ef 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -168,7 +168,8 @@ "en/concepts/testing", "en/concepts/cli", "en/concepts/tools", - "en/concepts/event-listener" + "en/concepts/event-listener", + "en/concepts/checkpointing" ] }, { @@ -639,7 +640,8 @@ "en/concepts/testing", "en/concepts/cli", "en/concepts/tools", - "en/concepts/event-listener" + "en/concepts/event-listener", + "en/concepts/checkpointing" ] }, { @@ -1109,7 +1111,8 @@ "en/concepts/testing", "en/concepts/cli", "en/concepts/tools", - "en/concepts/event-listener" + "en/concepts/event-listener", + "en/concepts/checkpointing" ] }, { @@ -1578,7 +1581,8 @@ "en/concepts/testing", "en/concepts/cli", "en/concepts/tools", - "en/concepts/event-listener" + "en/concepts/event-listener", + "en/concepts/checkpointing" ] }, { @@ -2047,7 +2051,8 @@ "en/concepts/testing", "en/concepts/cli", "en/concepts/tools", - "en/concepts/event-listener" + "en/concepts/event-listener", + "en/concepts/checkpointing" ] }, { @@ -2516,7 +2521,8 @@ "en/concepts/testing", "en/concepts/cli", "en/concepts/tools", - "en/concepts/event-listener" + "en/concepts/event-listener", + "en/concepts/checkpointing" ] }, { @@ -2987,7 +2993,8 @@ "en/concepts/testing", "en/concepts/cli", "en/concepts/tools", - "en/concepts/event-listener" + "en/concepts/event-listener", + "en/concepts/checkpointing" ] }, { @@ -3457,7 +3464,8 @@ "en/concepts/testing", "en/concepts/cli", "en/concepts/tools", - "en/concepts/event-listener" + "en/concepts/event-listener", + "en/concepts/checkpointing" ] }, { @@ -3830,7 +3838,7 @@ "icon": "globe" }, { - "anchor": "Fórum", + "anchor": "F\u00f3rum", "href": "https://community.crewai.com", "icon": "discourse" }, @@ -3852,7 +3860,7 @@ "default": true, "tabs": [ { - "tab": "Início", + "tab": "In\u00edcio", "icon": "house", "groups": [ { @@ -3864,11 +3872,11 @@ ] }, { - "tab": "Documentação", + "tab": "Documenta\u00e7\u00e3o", "icon": "book-open", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/introduction", "pt-BR/installation", @@ -3879,7 +3887,7 @@ "group": "Guias", "pages": [ { - "group": "Estratégia", + "group": "Estrat\u00e9gia", "icon": "compass", "pages": [ "pt-BR/guides/concepts/evaluating-use-cases" @@ -3915,14 +3923,14 @@ ] }, { - "group": "Ferramentas de Codificação", + "group": "Ferramentas de Codifica\u00e7\u00e3o", "icon": "terminal", "pages": [ "pt-BR/guides/coding-tools/agents-md" ] }, { - "group": "Avançado", + "group": "Avan\u00e7ado", "icon": "gear", "pages": [ "pt-BR/guides/advanced/customizing-prompts", @@ -3930,7 +3938,7 @@ ] }, { - "group": "Migração", + "group": "Migra\u00e7\u00e3o", "icon": "shuffle", "pages": [ "pt-BR/guides/migration/migrating-from-langgraph" @@ -3960,11 +3968,12 @@ "pt-BR/concepts/testing", "pt-BR/concepts/cli", "pt-BR/concepts/tools", - "pt-BR/concepts/event-listener" + "pt-BR/concepts/event-listener", + "pt-BR/concepts/checkpointing" ] }, { - "group": "Integração MCP", + "group": "Integra\u00e7\u00e3o MCP", "pages": [ "pt-BR/mcp/overview", "pt-BR/mcp/dsl-integration", @@ -3998,7 +4007,7 @@ ] }, { - "group": "Web Scraping & Navegação", + "group": "Web Scraping & Navega\u00e7\u00e3o", "icon": "globe", "pages": [ "pt-BR/tools/web-scraping/overview", @@ -4079,7 +4088,7 @@ ] }, { - "group": "Automação", + "group": "Automa\u00e7\u00e3o", "icon": "bolt", "pages": [ "pt-BR/tools/automation/overview", @@ -4154,7 +4163,7 @@ "icon": "briefcase", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/enterprise/introduction" ] @@ -4186,7 +4195,7 @@ ] }, { - "group": "Documentação de Integração", + "group": "Documenta\u00e7\u00e3o de Integra\u00e7\u00e3o", "pages": [ "pt-BR/enterprise/integrations/asana", "pt-BR/enterprise/integrations/box", @@ -4262,11 +4271,11 @@ ] }, { - "tab": "Referência da API", + "tab": "Refer\u00eancia da API", "icon": "magnifying-glass", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/api-reference/introduction", "pt-BR/api-reference/inputs", @@ -4291,11 +4300,11 @@ ] }, { - "tab": "Notas de Versão", + "tab": "Notas de Vers\u00e3o", "icon": "clock", "groups": [ { - "group": "Notas de Versão", + "group": "Notas de Vers\u00e3o", "pages": [ "pt-BR/changelog" ] @@ -4308,7 +4317,7 @@ "version": "v1.12.2", "tabs": [ { - "tab": "Início", + "tab": "In\u00edcio", "icon": "house", "groups": [ { @@ -4320,11 +4329,11 @@ ] }, { - "tab": "Documentação", + "tab": "Documenta\u00e7\u00e3o", "icon": "book-open", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/introduction", "pt-BR/installation", @@ -4335,7 +4344,7 @@ "group": "Guias", "pages": [ { - "group": "Estratégia", + "group": "Estrat\u00e9gia", "icon": "compass", "pages": [ "pt-BR/guides/concepts/evaluating-use-cases" @@ -4371,14 +4380,14 @@ ] }, { - "group": "Ferramentas de Codificação", + "group": "Ferramentas de Codifica\u00e7\u00e3o", "icon": "terminal", "pages": [ "pt-BR/guides/coding-tools/agents-md" ] }, { - "group": "Avançado", + "group": "Avan\u00e7ado", "icon": "gear", "pages": [ "pt-BR/guides/advanced/customizing-prompts", @@ -4386,7 +4395,7 @@ ] }, { - "group": "Migração", + "group": "Migra\u00e7\u00e3o", "icon": "shuffle", "pages": [ "pt-BR/guides/migration/migrating-from-langgraph" @@ -4416,11 +4425,12 @@ "pt-BR/concepts/testing", "pt-BR/concepts/cli", "pt-BR/concepts/tools", - "pt-BR/concepts/event-listener" + "pt-BR/concepts/event-listener", + "pt-BR/concepts/checkpointing" ] }, { - "group": "Integração MCP", + "group": "Integra\u00e7\u00e3o MCP", "pages": [ "pt-BR/mcp/overview", "pt-BR/mcp/dsl-integration", @@ -4454,7 +4464,7 @@ ] }, { - "group": "Web Scraping & Navegação", + "group": "Web Scraping & Navega\u00e7\u00e3o", "icon": "globe", "pages": [ "pt-BR/tools/web-scraping/overview", @@ -4535,7 +4545,7 @@ ] }, { - "group": "Automação", + "group": "Automa\u00e7\u00e3o", "icon": "bolt", "pages": [ "pt-BR/tools/automation/overview", @@ -4610,7 +4620,7 @@ "icon": "briefcase", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/enterprise/introduction" ] @@ -4642,7 +4652,7 @@ ] }, { - "group": "Documentação de Integração", + "group": "Documenta\u00e7\u00e3o de Integra\u00e7\u00e3o", "pages": [ "pt-BR/enterprise/integrations/asana", "pt-BR/enterprise/integrations/box", @@ -4718,11 +4728,11 @@ ] }, { - "tab": "Referência da API", + "tab": "Refer\u00eancia da API", "icon": "magnifying-glass", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/api-reference/introduction", "pt-BR/api-reference/inputs", @@ -4747,11 +4757,11 @@ ] }, { - "tab": "Notas de Versão", + "tab": "Notas de Vers\u00e3o", "icon": "clock", "groups": [ { - "group": "Notas de Versão", + "group": "Notas de Vers\u00e3o", "pages": [ "pt-BR/changelog" ] @@ -4764,7 +4774,7 @@ "version": "v1.12.1", "tabs": [ { - "tab": "Início", + "tab": "In\u00edcio", "icon": "house", "groups": [ { @@ -4776,11 +4786,11 @@ ] }, { - "tab": "Documentação", + "tab": "Documenta\u00e7\u00e3o", "icon": "book-open", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/introduction", "pt-BR/installation", @@ -4791,7 +4801,7 @@ "group": "Guias", "pages": [ { - "group": "Estratégia", + "group": "Estrat\u00e9gia", "icon": "compass", "pages": [ "pt-BR/guides/concepts/evaluating-use-cases" @@ -4827,14 +4837,14 @@ ] }, { - "group": "Ferramentas de Codificação", + "group": "Ferramentas de Codifica\u00e7\u00e3o", "icon": "terminal", "pages": [ "pt-BR/guides/coding-tools/agents-md" ] }, { - "group": "Avançado", + "group": "Avan\u00e7ado", "icon": "gear", "pages": [ "pt-BR/guides/advanced/customizing-prompts", @@ -4842,7 +4852,7 @@ ] }, { - "group": "Migração", + "group": "Migra\u00e7\u00e3o", "icon": "shuffle", "pages": [ "pt-BR/guides/migration/migrating-from-langgraph" @@ -4871,11 +4881,12 @@ "pt-BR/concepts/testing", "pt-BR/concepts/cli", "pt-BR/concepts/tools", - "pt-BR/concepts/event-listener" + "pt-BR/concepts/event-listener", + "pt-BR/concepts/checkpointing" ] }, { - "group": "Integração MCP", + "group": "Integra\u00e7\u00e3o MCP", "pages": [ "pt-BR/mcp/overview", "pt-BR/mcp/dsl-integration", @@ -4909,7 +4920,7 @@ ] }, { - "group": "Web Scraping & Navegação", + "group": "Web Scraping & Navega\u00e7\u00e3o", "icon": "globe", "pages": [ "pt-BR/tools/web-scraping/overview", @@ -4990,7 +5001,7 @@ ] }, { - "group": "Automação", + "group": "Automa\u00e7\u00e3o", "icon": "bolt", "pages": [ "pt-BR/tools/automation/overview", @@ -5065,7 +5076,7 @@ "icon": "briefcase", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/enterprise/introduction" ] @@ -5097,7 +5108,7 @@ ] }, { - "group": "Documentação de Integração", + "group": "Documenta\u00e7\u00e3o de Integra\u00e7\u00e3o", "pages": [ "pt-BR/enterprise/integrations/asana", "pt-BR/enterprise/integrations/box", @@ -5173,11 +5184,11 @@ ] }, { - "tab": "Referência da API", + "tab": "Refer\u00eancia da API", "icon": "magnifying-glass", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/api-reference/introduction", "pt-BR/api-reference/inputs", @@ -5202,11 +5213,11 @@ ] }, { - "tab": "Notas de Versão", + "tab": "Notas de Vers\u00e3o", "icon": "clock", "groups": [ { - "group": "Notas de Versão", + "group": "Notas de Vers\u00e3o", "pages": [ "pt-BR/changelog" ] @@ -5219,7 +5230,7 @@ "version": "v1.12.0", "tabs": [ { - "tab": "Início", + "tab": "In\u00edcio", "icon": "house", "groups": [ { @@ -5231,11 +5242,11 @@ ] }, { - "tab": "Documentação", + "tab": "Documenta\u00e7\u00e3o", "icon": "book-open", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/introduction", "pt-BR/installation", @@ -5246,7 +5257,7 @@ "group": "Guias", "pages": [ { - "group": "Estratégia", + "group": "Estrat\u00e9gia", "icon": "compass", "pages": [ "pt-BR/guides/concepts/evaluating-use-cases" @@ -5282,14 +5293,14 @@ ] }, { - "group": "Ferramentas de Codificação", + "group": "Ferramentas de Codifica\u00e7\u00e3o", "icon": "terminal", "pages": [ "pt-BR/guides/coding-tools/agents-md" ] }, { - "group": "Avançado", + "group": "Avan\u00e7ado", "icon": "gear", "pages": [ "pt-BR/guides/advanced/customizing-prompts", @@ -5297,7 +5308,7 @@ ] }, { - "group": "Migração", + "group": "Migra\u00e7\u00e3o", "icon": "shuffle", "pages": [ "pt-BR/guides/migration/migrating-from-langgraph" @@ -5326,11 +5337,12 @@ "pt-BR/concepts/testing", "pt-BR/concepts/cli", "pt-BR/concepts/tools", - "pt-BR/concepts/event-listener" + "pt-BR/concepts/event-listener", + "pt-BR/concepts/checkpointing" ] }, { - "group": "Integração MCP", + "group": "Integra\u00e7\u00e3o MCP", "pages": [ "pt-BR/mcp/overview", "pt-BR/mcp/dsl-integration", @@ -5364,7 +5376,7 @@ ] }, { - "group": "Web Scraping & Navegação", + "group": "Web Scraping & Navega\u00e7\u00e3o", "icon": "globe", "pages": [ "pt-BR/tools/web-scraping/overview", @@ -5445,7 +5457,7 @@ ] }, { - "group": "Automação", + "group": "Automa\u00e7\u00e3o", "icon": "bolt", "pages": [ "pt-BR/tools/automation/overview", @@ -5520,7 +5532,7 @@ "icon": "briefcase", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/enterprise/introduction" ] @@ -5552,7 +5564,7 @@ ] }, { - "group": "Documentação de Integração", + "group": "Documenta\u00e7\u00e3o de Integra\u00e7\u00e3o", "pages": [ "pt-BR/enterprise/integrations/asana", "pt-BR/enterprise/integrations/box", @@ -5628,11 +5640,11 @@ ] }, { - "tab": "Referência da API", + "tab": "Refer\u00eancia da API", "icon": "magnifying-glass", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/api-reference/introduction", "pt-BR/api-reference/inputs", @@ -5657,11 +5669,11 @@ ] }, { - "tab": "Notas de Versão", + "tab": "Notas de Vers\u00e3o", "icon": "clock", "groups": [ { - "group": "Notas de Versão", + "group": "Notas de Vers\u00e3o", "pages": [ "pt-BR/changelog" ] @@ -5674,7 +5686,7 @@ "version": "v1.11.1", "tabs": [ { - "tab": "Início", + "tab": "In\u00edcio", "icon": "house", "groups": [ { @@ -5686,11 +5698,11 @@ ] }, { - "tab": "Documentação", + "tab": "Documenta\u00e7\u00e3o", "icon": "book-open", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/introduction", "pt-BR/installation", @@ -5701,7 +5713,7 @@ "group": "Guias", "pages": [ { - "group": "Estratégia", + "group": "Estrat\u00e9gia", "icon": "compass", "pages": [ "pt-BR/guides/concepts/evaluating-use-cases" @@ -5737,14 +5749,14 @@ ] }, { - "group": "Ferramentas de Codificação", + "group": "Ferramentas de Codifica\u00e7\u00e3o", "icon": "terminal", "pages": [ "pt-BR/guides/coding-tools/agents-md" ] }, { - "group": "Avançado", + "group": "Avan\u00e7ado", "icon": "gear", "pages": [ "pt-BR/guides/advanced/customizing-prompts", @@ -5752,7 +5764,7 @@ ] }, { - "group": "Migração", + "group": "Migra\u00e7\u00e3o", "icon": "shuffle", "pages": [ "pt-BR/guides/migration/migrating-from-langgraph" @@ -5781,11 +5793,12 @@ "pt-BR/concepts/testing", "pt-BR/concepts/cli", "pt-BR/concepts/tools", - "pt-BR/concepts/event-listener" + "pt-BR/concepts/event-listener", + "pt-BR/concepts/checkpointing" ] }, { - "group": "Integração MCP", + "group": "Integra\u00e7\u00e3o MCP", "pages": [ "pt-BR/mcp/overview", "pt-BR/mcp/dsl-integration", @@ -5819,7 +5832,7 @@ ] }, { - "group": "Web Scraping & Navegação", + "group": "Web Scraping & Navega\u00e7\u00e3o", "icon": "globe", "pages": [ "pt-BR/tools/web-scraping/overview", @@ -5900,7 +5913,7 @@ ] }, { - "group": "Automação", + "group": "Automa\u00e7\u00e3o", "icon": "bolt", "pages": [ "pt-BR/tools/automation/overview", @@ -5975,7 +5988,7 @@ "icon": "briefcase", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/enterprise/introduction" ] @@ -6007,7 +6020,7 @@ ] }, { - "group": "Documentação de Integração", + "group": "Documenta\u00e7\u00e3o de Integra\u00e7\u00e3o", "pages": [ "pt-BR/enterprise/integrations/asana", "pt-BR/enterprise/integrations/box", @@ -6083,11 +6096,11 @@ ] }, { - "tab": "Referência da API", + "tab": "Refer\u00eancia da API", "icon": "magnifying-glass", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/api-reference/introduction", "pt-BR/api-reference/inputs", @@ -6112,11 +6125,11 @@ ] }, { - "tab": "Notas de Versão", + "tab": "Notas de Vers\u00e3o", "icon": "clock", "groups": [ { - "group": "Notas de Versão", + "group": "Notas de Vers\u00e3o", "pages": [ "pt-BR/changelog" ] @@ -6129,7 +6142,7 @@ "version": "v1.11.0", "tabs": [ { - "tab": "Início", + "tab": "In\u00edcio", "icon": "house", "groups": [ { @@ -6141,11 +6154,11 @@ ] }, { - "tab": "Documentação", + "tab": "Documenta\u00e7\u00e3o", "icon": "book-open", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/introduction", "pt-BR/installation", @@ -6156,7 +6169,7 @@ "group": "Guias", "pages": [ { - "group": "Estratégia", + "group": "Estrat\u00e9gia", "icon": "compass", "pages": [ "pt-BR/guides/concepts/evaluating-use-cases" @@ -6192,14 +6205,14 @@ ] }, { - "group": "Ferramentas de Codificação", + "group": "Ferramentas de Codifica\u00e7\u00e3o", "icon": "terminal", "pages": [ "pt-BR/guides/coding-tools/agents-md" ] }, { - "group": "Avançado", + "group": "Avan\u00e7ado", "icon": "gear", "pages": [ "pt-BR/guides/advanced/customizing-prompts", @@ -6207,7 +6220,7 @@ ] }, { - "group": "Migração", + "group": "Migra\u00e7\u00e3o", "icon": "shuffle", "pages": [ "pt-BR/guides/migration/migrating-from-langgraph" @@ -6235,11 +6248,12 @@ "pt-BR/concepts/testing", "pt-BR/concepts/cli", "pt-BR/concepts/tools", - "pt-BR/concepts/event-listener" + "pt-BR/concepts/event-listener", + "pt-BR/concepts/checkpointing" ] }, { - "group": "Integração MCP", + "group": "Integra\u00e7\u00e3o MCP", "pages": [ "pt-BR/mcp/overview", "pt-BR/mcp/dsl-integration", @@ -6273,7 +6287,7 @@ ] }, { - "group": "Web Scraping & Navegação", + "group": "Web Scraping & Navega\u00e7\u00e3o", "icon": "globe", "pages": [ "pt-BR/tools/web-scraping/overview", @@ -6354,7 +6368,7 @@ ] }, { - "group": "Automação", + "group": "Automa\u00e7\u00e3o", "icon": "bolt", "pages": [ "pt-BR/tools/automation/overview", @@ -6429,7 +6443,7 @@ "icon": "briefcase", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/enterprise/introduction" ] @@ -6461,7 +6475,7 @@ ] }, { - "group": "Documentação de Integração", + "group": "Documenta\u00e7\u00e3o de Integra\u00e7\u00e3o", "pages": [ "pt-BR/enterprise/integrations/asana", "pt-BR/enterprise/integrations/box", @@ -6537,11 +6551,11 @@ ] }, { - "tab": "Referência da API", + "tab": "Refer\u00eancia da API", "icon": "magnifying-glass", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/api-reference/introduction", "pt-BR/api-reference/inputs", @@ -6566,11 +6580,11 @@ ] }, { - "tab": "Notas de Versão", + "tab": "Notas de Vers\u00e3o", "icon": "clock", "groups": [ { - "group": "Notas de Versão", + "group": "Notas de Vers\u00e3o", "pages": [ "pt-BR/changelog" ] @@ -6583,7 +6597,7 @@ "version": "v1.10.1", "tabs": [ { - "tab": "Início", + "tab": "In\u00edcio", "icon": "house", "groups": [ { @@ -6595,11 +6609,11 @@ ] }, { - "tab": "Documentação", + "tab": "Documenta\u00e7\u00e3o", "icon": "book-open", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/introduction", "pt-BR/installation", @@ -6610,7 +6624,7 @@ "group": "Guias", "pages": [ { - "group": "Estratégia", + "group": "Estrat\u00e9gia", "icon": "compass", "pages": [ "pt-BR/guides/concepts/evaluating-use-cases" @@ -6646,14 +6660,14 @@ ] }, { - "group": "Ferramentas de Codificação", + "group": "Ferramentas de Codifica\u00e7\u00e3o", "icon": "terminal", "pages": [ "pt-BR/guides/coding-tools/agents-md" ] }, { - "group": "Avançado", + "group": "Avan\u00e7ado", "icon": "gear", "pages": [ "pt-BR/guides/advanced/customizing-prompts", @@ -6661,7 +6675,7 @@ ] }, { - "group": "Migração", + "group": "Migra\u00e7\u00e3o", "icon": "shuffle", "pages": [ "pt-BR/guides/migration/migrating-from-langgraph" @@ -6689,11 +6703,12 @@ "pt-BR/concepts/testing", "pt-BR/concepts/cli", "pt-BR/concepts/tools", - "pt-BR/concepts/event-listener" + "pt-BR/concepts/event-listener", + "pt-BR/concepts/checkpointing" ] }, { - "group": "Integração MCP", + "group": "Integra\u00e7\u00e3o MCP", "pages": [ "pt-BR/mcp/overview", "pt-BR/mcp/dsl-integration", @@ -6727,7 +6742,7 @@ ] }, { - "group": "Web Scraping & Navegação", + "group": "Web Scraping & Navega\u00e7\u00e3o", "icon": "globe", "pages": [ "pt-BR/tools/web-scraping/overview", @@ -6808,7 +6823,7 @@ ] }, { - "group": "Automação", + "group": "Automa\u00e7\u00e3o", "icon": "bolt", "pages": [ "pt-BR/tools/automation/overview", @@ -6883,7 +6898,7 @@ "icon": "briefcase", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/enterprise/introduction" ] @@ -6915,7 +6930,7 @@ ] }, { - "group": "Documentação de Integração", + "group": "Documenta\u00e7\u00e3o de Integra\u00e7\u00e3o", "pages": [ "pt-BR/enterprise/integrations/asana", "pt-BR/enterprise/integrations/box", @@ -6991,11 +7006,11 @@ ] }, { - "tab": "Referência da API", + "tab": "Refer\u00eancia da API", "icon": "magnifying-glass", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/api-reference/introduction", "pt-BR/api-reference/inputs", @@ -7020,11 +7035,11 @@ ] }, { - "tab": "Notas de Versão", + "tab": "Notas de Vers\u00e3o", "icon": "clock", "groups": [ { - "group": "Notas de Versão", + "group": "Notas de Vers\u00e3o", "pages": [ "pt-BR/changelog" ] @@ -7037,7 +7052,7 @@ "version": "v1.10.0", "tabs": [ { - "tab": "Início", + "tab": "In\u00edcio", "icon": "house", "groups": [ { @@ -7049,11 +7064,11 @@ ] }, { - "tab": "Documentação", + "tab": "Documenta\u00e7\u00e3o", "icon": "book-open", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/introduction", "pt-BR/installation", @@ -7064,7 +7079,7 @@ "group": "Guias", "pages": [ { - "group": "Estratégia", + "group": "Estrat\u00e9gia", "icon": "compass", "pages": [ "pt-BR/guides/concepts/evaluating-use-cases" @@ -7100,14 +7115,14 @@ ] }, { - "group": "Ferramentas de Codificação", + "group": "Ferramentas de Codifica\u00e7\u00e3o", "icon": "terminal", "pages": [ "pt-BR/guides/coding-tools/agents-md" ] }, { - "group": "Avançado", + "group": "Avan\u00e7ado", "icon": "gear", "pages": [ "pt-BR/guides/advanced/customizing-prompts", @@ -7115,7 +7130,7 @@ ] }, { - "group": "Migração", + "group": "Migra\u00e7\u00e3o", "icon": "shuffle", "pages": [ "pt-BR/guides/migration/migrating-from-langgraph" @@ -7144,11 +7159,12 @@ "pt-BR/concepts/testing", "pt-BR/concepts/cli", "pt-BR/concepts/tools", - "pt-BR/concepts/event-listener" + "pt-BR/concepts/event-listener", + "pt-BR/concepts/checkpointing" ] }, { - "group": "Integração MCP", + "group": "Integra\u00e7\u00e3o MCP", "pages": [ "pt-BR/mcp/overview", "pt-BR/mcp/dsl-integration", @@ -7182,7 +7198,7 @@ ] }, { - "group": "Web Scraping & Navegação", + "group": "Web Scraping & Navega\u00e7\u00e3o", "icon": "globe", "pages": [ "pt-BR/tools/web-scraping/overview", @@ -7263,7 +7279,7 @@ ] }, { - "group": "Automação", + "group": "Automa\u00e7\u00e3o", "icon": "bolt", "pages": [ "pt-BR/tools/automation/overview", @@ -7338,7 +7354,7 @@ "icon": "briefcase", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/enterprise/introduction" ] @@ -7370,7 +7386,7 @@ ] }, { - "group": "Documentação de Integração", + "group": "Documenta\u00e7\u00e3o de Integra\u00e7\u00e3o", "pages": [ "pt-BR/enterprise/integrations/asana", "pt-BR/enterprise/integrations/box", @@ -7446,11 +7462,11 @@ ] }, { - "tab": "Referência da API", + "tab": "Refer\u00eancia da API", "icon": "magnifying-glass", "groups": [ { - "group": "Começando", + "group": "Come\u00e7ando", "pages": [ "pt-BR/api-reference/introduction", "pt-BR/api-reference/inputs", @@ -7475,11 +7491,11 @@ ] }, { - "tab": "Notas de Versão", + "tab": "Notas de Vers\u00e3o", "icon": "clock", "groups": [ { - "group": "Notas de Versão", + "group": "Notas de Vers\u00e3o", "pages": [ "pt-BR/changelog" ] @@ -7495,17 +7511,17 @@ "global": { "anchors": [ { - "anchor": "웹사이트", + "anchor": "\uc6f9\uc0ac\uc774\ud2b8", "href": "https://crewai.com", "icon": "globe" }, { - "anchor": "포럼", + "anchor": "\ud3ec\ub7fc", "href": "https://community.crewai.com", "icon": "discourse" }, { - "anchor": "블로그", + "anchor": "\ube14\ub85c\uadf8", "href": "https://blog.crewai.com", "icon": "newspaper" }, @@ -7522,11 +7538,11 @@ "default": true, "tabs": [ { - "tab": "홈", + "tab": "\ud648", "icon": "house", "groups": [ { - "group": "환영합니다", + "group": "\ud658\uc601\ud569\ub2c8\ub2e4", "pages": [ "ko/index" ] @@ -7534,11 +7550,11 @@ ] }, { - "tab": "기술 문서", + "tab": "\uae30\uc220 \ubb38\uc11c", "icon": "book-open", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/introduction", "ko/installation", @@ -7546,31 +7562,31 @@ ] }, { - "group": "가이드", + "group": "\uac00\uc774\ub4dc", "pages": [ { - "group": "전략", + "group": "\uc804\ub7b5", "icon": "compass", "pages": [ "ko/guides/concepts/evaluating-use-cases" ] }, { - "group": "에이전트 (Agents)", + "group": "\uc5d0\uc774\uc804\ud2b8 (Agents)", "icon": "user", "pages": [ "ko/guides/agents/crafting-effective-agents" ] }, { - "group": "크루 (Crews)", + "group": "\ud06c\ub8e8 (Crews)", "icon": "users", "pages": [ "ko/guides/crews/first-crew" ] }, { - "group": "플로우 (Flows)", + "group": "\ud50c\ub85c\uc6b0 (Flows)", "icon": "code-branch", "pages": [ "ko/guides/flows/first-flow", @@ -7578,21 +7594,21 @@ ] }, { - "group": "도구", + "group": "\ub3c4\uad6c", "icon": "wrench", "pages": [ "ko/guides/tools/publish-custom-tools" ] }, { - "group": "코딩 도구", + "group": "\ucf54\ub529 \ub3c4\uad6c", "icon": "terminal", "pages": [ "ko/guides/coding-tools/agents-md" ] }, { - "group": "고급", + "group": "\uace0\uae09", "icon": "gear", "pages": [ "ko/guides/advanced/customizing-prompts", @@ -7600,7 +7616,7 @@ ] }, { - "group": "마이그레이션", + "group": "\ub9c8\uc774\uadf8\ub808\uc774\uc158", "icon": "shuffle", "pages": [ "ko/guides/migration/migrating-from-langgraph" @@ -7609,7 +7625,7 @@ ] }, { - "group": "핵심 개념", + "group": "\ud575\uc2ec \uac1c\ub150", "pages": [ "ko/concepts/agents", "ko/concepts/tasks", @@ -7630,11 +7646,12 @@ "ko/concepts/testing", "ko/concepts/cli", "ko/concepts/tools", - "ko/concepts/event-listener" + "ko/concepts/event-listener", + "ko/concepts/checkpointing" ] }, { - "group": "MCP 통합", + "group": "MCP \ud1b5\ud569", "pages": [ "ko/mcp/overview", "ko/mcp/dsl-integration", @@ -7646,11 +7663,11 @@ ] }, { - "group": "도구 (Tools)", + "group": "\ub3c4\uad6c (Tools)", "pages": [ "ko/tools/overview", { - "group": "파일 & 문서", + "group": "\ud30c\uc77c & \ubb38\uc11c", "icon": "folder-open", "pages": [ "ko/tools/file-document/overview", @@ -7670,7 +7687,7 @@ ] }, { - "group": "웹 스크래핑 & 브라우징", + "group": "\uc6f9 \uc2a4\ud06c\ub798\ud551 & \ube0c\ub77c\uc6b0\uc9d5", "icon": "globe", "pages": [ "ko/tools/web-scraping/overview", @@ -7690,7 +7707,7 @@ ] }, { - "group": "검색 및 연구", + "group": "\uac80\uc0c9 \ubc0f \uc5f0\uad6c", "icon": "magnifying-glass", "pages": [ "ko/tools/search-research/overview", @@ -7712,7 +7729,7 @@ ] }, { - "group": "데이터베이스 & 데이터", + "group": "\ub370\uc774\ud130\ubca0\uc774\uc2a4 & \ub370\uc774\ud130", "icon": "database", "pages": [ "ko/tools/database-data/overview", @@ -7727,7 +7744,7 @@ ] }, { - "group": "인공지능 & 머신러닝", + "group": "\uc778\uacf5\uc9c0\ub2a5 & \uba38\uc2e0\ub7ec\ub2dd", "icon": "brain", "pages": [ "ko/tools/ai-ml/overview", @@ -7741,7 +7758,7 @@ ] }, { - "group": "클라우드 & 스토리지", + "group": "\ud074\ub77c\uc6b0\ub4dc & \uc2a4\ud1a0\ub9ac\uc9c0", "icon": "cloud", "pages": [ "ko/tools/cloud-storage/overview", @@ -7760,7 +7777,7 @@ ] }, { - "group": "자동화", + "group": "\uc790\ub3d9\ud654", "icon": "bolt", "pages": [ "ko/tools/automation/overview", @@ -7795,7 +7812,7 @@ ] }, { - "group": "학습", + "group": "\ud559\uc2b5", "pages": [ "ko/learn/overview", "ko/learn/llm-selection-guide", @@ -7832,17 +7849,17 @@ ] }, { - "tab": "엔터프라이즈", + "tab": "\uc5d4\ud130\ud504\ub77c\uc774\uc988", "icon": "briefcase", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/enterprise/introduction" ] }, { - "group": "빌드", + "group": "\ube4c\ub4dc", "pages": [ "ko/enterprise/features/automations", "ko/enterprise/features/crew-studio", @@ -7853,7 +7870,7 @@ ] }, { - "group": "운영", + "group": "\uc6b4\uc601", "pages": [ "ko/enterprise/features/traces", "ko/enterprise/features/webhook-streaming", @@ -7862,13 +7879,13 @@ ] }, { - "group": "관리", + "group": "\uad00\ub9ac", "pages": [ "ko/enterprise/features/rbac" ] }, { - "group": "통합 문서", + "group": "\ud1b5\ud569 \ubb38\uc11c", "pages": [ "ko/enterprise/integrations/asana", "ko/enterprise/integrations/box", @@ -7920,7 +7937,7 @@ ] }, { - "group": "트리거", + "group": "\ud2b8\ub9ac\uac70", "pages": [ "ko/enterprise/guides/automation-triggers", "ko/enterprise/guides/gmail-trigger", @@ -7936,7 +7953,7 @@ ] }, { - "group": "학습 자원", + "group": "\ud559\uc2b5 \uc790\uc6d0", "pages": [ "ko/enterprise/resources/frequently-asked-questions" ] @@ -7944,11 +7961,11 @@ ] }, { - "tab": "API 레퍼런스", + "tab": "API \ub808\ud37c\ub7f0\uc2a4", "icon": "magnifying-glass", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/api-reference/introduction", "ko/api-reference/inputs", @@ -7960,11 +7977,11 @@ ] }, { - "tab": "예시", + "tab": "\uc608\uc2dc", "icon": "code", "groups": [ { - "group": "예시", + "group": "\uc608\uc2dc", "pages": [ "ko/examples/example", "ko/examples/cookbooks" @@ -7973,11 +7990,11 @@ ] }, { - "tab": "변경 로그", + "tab": "\ubcc0\uacbd \ub85c\uadf8", "icon": "clock", "groups": [ { - "group": "릴리스 노트", + "group": "\ub9b4\ub9ac\uc2a4 \ub178\ud2b8", "pages": [ "ko/changelog" ] @@ -7990,11 +8007,11 @@ "version": "v1.12.2", "tabs": [ { - "tab": "홈", + "tab": "\ud648", "icon": "house", "groups": [ { - "group": "환영합니다", + "group": "\ud658\uc601\ud569\ub2c8\ub2e4", "pages": [ "ko/index" ] @@ -8002,11 +8019,11 @@ ] }, { - "tab": "기술 문서", + "tab": "\uae30\uc220 \ubb38\uc11c", "icon": "book-open", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/introduction", "ko/installation", @@ -8014,31 +8031,31 @@ ] }, { - "group": "가이드", + "group": "\uac00\uc774\ub4dc", "pages": [ { - "group": "전략", + "group": "\uc804\ub7b5", "icon": "compass", "pages": [ "ko/guides/concepts/evaluating-use-cases" ] }, { - "group": "에이전트 (Agents)", + "group": "\uc5d0\uc774\uc804\ud2b8 (Agents)", "icon": "user", "pages": [ "ko/guides/agents/crafting-effective-agents" ] }, { - "group": "크루 (Crews)", + "group": "\ud06c\ub8e8 (Crews)", "icon": "users", "pages": [ "ko/guides/crews/first-crew" ] }, { - "group": "플로우 (Flows)", + "group": "\ud50c\ub85c\uc6b0 (Flows)", "icon": "code-branch", "pages": [ "ko/guides/flows/first-flow", @@ -8046,21 +8063,21 @@ ] }, { - "group": "도구", + "group": "\ub3c4\uad6c", "icon": "wrench", "pages": [ "ko/guides/tools/publish-custom-tools" ] }, { - "group": "코딩 도구", + "group": "\ucf54\ub529 \ub3c4\uad6c", "icon": "terminal", "pages": [ "ko/guides/coding-tools/agents-md" ] }, { - "group": "고급", + "group": "\uace0\uae09", "icon": "gear", "pages": [ "ko/guides/advanced/customizing-prompts", @@ -8068,7 +8085,7 @@ ] }, { - "group": "마이그레이션", + "group": "\ub9c8\uc774\uadf8\ub808\uc774\uc158", "icon": "shuffle", "pages": [ "ko/guides/migration/migrating-from-langgraph" @@ -8077,7 +8094,7 @@ ] }, { - "group": "핵심 개념", + "group": "\ud575\uc2ec \uac1c\ub150", "pages": [ "ko/concepts/agents", "ko/concepts/tasks", @@ -8098,11 +8115,12 @@ "ko/concepts/testing", "ko/concepts/cli", "ko/concepts/tools", - "ko/concepts/event-listener" + "ko/concepts/event-listener", + "ko/concepts/checkpointing" ] }, { - "group": "MCP 통합", + "group": "MCP \ud1b5\ud569", "pages": [ "ko/mcp/overview", "ko/mcp/dsl-integration", @@ -8114,11 +8132,11 @@ ] }, { - "group": "도구 (Tools)", + "group": "\ub3c4\uad6c (Tools)", "pages": [ "ko/tools/overview", { - "group": "파일 & 문서", + "group": "\ud30c\uc77c & \ubb38\uc11c", "icon": "folder-open", "pages": [ "ko/tools/file-document/overview", @@ -8138,7 +8156,7 @@ ] }, { - "group": "웹 스크래핑 & 브라우징", + "group": "\uc6f9 \uc2a4\ud06c\ub798\ud551 & \ube0c\ub77c\uc6b0\uc9d5", "icon": "globe", "pages": [ "ko/tools/web-scraping/overview", @@ -8158,7 +8176,7 @@ ] }, { - "group": "검색 및 연구", + "group": "\uac80\uc0c9 \ubc0f \uc5f0\uad6c", "icon": "magnifying-glass", "pages": [ "ko/tools/search-research/overview", @@ -8180,7 +8198,7 @@ ] }, { - "group": "데이터베이스 & 데이터", + "group": "\ub370\uc774\ud130\ubca0\uc774\uc2a4 & \ub370\uc774\ud130", "icon": "database", "pages": [ "ko/tools/database-data/overview", @@ -8195,7 +8213,7 @@ ] }, { - "group": "인공지능 & 머신러닝", + "group": "\uc778\uacf5\uc9c0\ub2a5 & \uba38\uc2e0\ub7ec\ub2dd", "icon": "brain", "pages": [ "ko/tools/ai-ml/overview", @@ -8209,7 +8227,7 @@ ] }, { - "group": "클라우드 & 스토리지", + "group": "\ud074\ub77c\uc6b0\ub4dc & \uc2a4\ud1a0\ub9ac\uc9c0", "icon": "cloud", "pages": [ "ko/tools/cloud-storage/overview", @@ -8228,7 +8246,7 @@ ] }, { - "group": "자동화", + "group": "\uc790\ub3d9\ud654", "icon": "bolt", "pages": [ "ko/tools/automation/overview", @@ -8263,7 +8281,7 @@ ] }, { - "group": "학습", + "group": "\ud559\uc2b5", "pages": [ "ko/learn/overview", "ko/learn/llm-selection-guide", @@ -8300,17 +8318,17 @@ ] }, { - "tab": "엔터프라이즈", + "tab": "\uc5d4\ud130\ud504\ub77c\uc774\uc988", "icon": "briefcase", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/enterprise/introduction" ] }, { - "group": "빌드", + "group": "\ube4c\ub4dc", "pages": [ "ko/enterprise/features/automations", "ko/enterprise/features/crew-studio", @@ -8321,7 +8339,7 @@ ] }, { - "group": "운영", + "group": "\uc6b4\uc601", "pages": [ "ko/enterprise/features/traces", "ko/enterprise/features/webhook-streaming", @@ -8330,13 +8348,13 @@ ] }, { - "group": "관리", + "group": "\uad00\ub9ac", "pages": [ "ko/enterprise/features/rbac" ] }, { - "group": "통합 문서", + "group": "\ud1b5\ud569 \ubb38\uc11c", "pages": [ "ko/enterprise/integrations/asana", "ko/enterprise/integrations/box", @@ -8388,7 +8406,7 @@ ] }, { - "group": "트리거", + "group": "\ud2b8\ub9ac\uac70", "pages": [ "ko/enterprise/guides/automation-triggers", "ko/enterprise/guides/gmail-trigger", @@ -8404,7 +8422,7 @@ ] }, { - "group": "학습 자원", + "group": "\ud559\uc2b5 \uc790\uc6d0", "pages": [ "ko/enterprise/resources/frequently-asked-questions" ] @@ -8412,11 +8430,11 @@ ] }, { - "tab": "API 레퍼런스", + "tab": "API \ub808\ud37c\ub7f0\uc2a4", "icon": "magnifying-glass", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/api-reference/introduction", "ko/api-reference/inputs", @@ -8428,11 +8446,11 @@ ] }, { - "tab": "예시", + "tab": "\uc608\uc2dc", "icon": "code", "groups": [ { - "group": "예시", + "group": "\uc608\uc2dc", "pages": [ "ko/examples/example", "ko/examples/cookbooks" @@ -8441,11 +8459,11 @@ ] }, { - "tab": "변경 로그", + "tab": "\ubcc0\uacbd \ub85c\uadf8", "icon": "clock", "groups": [ { - "group": "릴리스 노트", + "group": "\ub9b4\ub9ac\uc2a4 \ub178\ud2b8", "pages": [ "ko/changelog" ] @@ -8458,11 +8476,11 @@ "version": "v1.12.1", "tabs": [ { - "tab": "홈", + "tab": "\ud648", "icon": "house", "groups": [ { - "group": "환영합니다", + "group": "\ud658\uc601\ud569\ub2c8\ub2e4", "pages": [ "ko/index" ] @@ -8470,11 +8488,11 @@ ] }, { - "tab": "기술 문서", + "tab": "\uae30\uc220 \ubb38\uc11c", "icon": "book-open", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/introduction", "ko/installation", @@ -8482,31 +8500,31 @@ ] }, { - "group": "가이드", + "group": "\uac00\uc774\ub4dc", "pages": [ { - "group": "전략", + "group": "\uc804\ub7b5", "icon": "compass", "pages": [ "ko/guides/concepts/evaluating-use-cases" ] }, { - "group": "에이전트 (Agents)", + "group": "\uc5d0\uc774\uc804\ud2b8 (Agents)", "icon": "user", "pages": [ "ko/guides/agents/crafting-effective-agents" ] }, { - "group": "크루 (Crews)", + "group": "\ud06c\ub8e8 (Crews)", "icon": "users", "pages": [ "ko/guides/crews/first-crew" ] }, { - "group": "플로우 (Flows)", + "group": "\ud50c\ub85c\uc6b0 (Flows)", "icon": "code-branch", "pages": [ "ko/guides/flows/first-flow", @@ -8514,21 +8532,21 @@ ] }, { - "group": "도구", + "group": "\ub3c4\uad6c", "icon": "wrench", "pages": [ "ko/guides/tools/publish-custom-tools" ] }, { - "group": "코딩 도구", + "group": "\ucf54\ub529 \ub3c4\uad6c", "icon": "terminal", "pages": [ "ko/guides/coding-tools/agents-md" ] }, { - "group": "고급", + "group": "\uace0\uae09", "icon": "gear", "pages": [ "ko/guides/advanced/customizing-prompts", @@ -8536,7 +8554,7 @@ ] }, { - "group": "마이그레이션", + "group": "\ub9c8\uc774\uadf8\ub808\uc774\uc158", "icon": "shuffle", "pages": [ "ko/guides/migration/migrating-from-langgraph" @@ -8545,7 +8563,7 @@ ] }, { - "group": "핵심 개념", + "group": "\ud575\uc2ec \uac1c\ub150", "pages": [ "ko/concepts/agents", "ko/concepts/tasks", @@ -8565,11 +8583,12 @@ "ko/concepts/testing", "ko/concepts/cli", "ko/concepts/tools", - "ko/concepts/event-listener" + "ko/concepts/event-listener", + "ko/concepts/checkpointing" ] }, { - "group": "MCP 통합", + "group": "MCP \ud1b5\ud569", "pages": [ "ko/mcp/overview", "ko/mcp/dsl-integration", @@ -8581,11 +8600,11 @@ ] }, { - "group": "도구 (Tools)", + "group": "\ub3c4\uad6c (Tools)", "pages": [ "ko/tools/overview", { - "group": "파일 & 문서", + "group": "\ud30c\uc77c & \ubb38\uc11c", "icon": "folder-open", "pages": [ "ko/tools/file-document/overview", @@ -8605,7 +8624,7 @@ ] }, { - "group": "웹 스크래핑 & 브라우징", + "group": "\uc6f9 \uc2a4\ud06c\ub798\ud551 & \ube0c\ub77c\uc6b0\uc9d5", "icon": "globe", "pages": [ "ko/tools/web-scraping/overview", @@ -8625,7 +8644,7 @@ ] }, { - "group": "검색 및 연구", + "group": "\uac80\uc0c9 \ubc0f \uc5f0\uad6c", "icon": "magnifying-glass", "pages": [ "ko/tools/search-research/overview", @@ -8647,7 +8666,7 @@ ] }, { - "group": "데이터베이스 & 데이터", + "group": "\ub370\uc774\ud130\ubca0\uc774\uc2a4 & \ub370\uc774\ud130", "icon": "database", "pages": [ "ko/tools/database-data/overview", @@ -8662,7 +8681,7 @@ ] }, { - "group": "인공지능 & 머신러닝", + "group": "\uc778\uacf5\uc9c0\ub2a5 & \uba38\uc2e0\ub7ec\ub2dd", "icon": "brain", "pages": [ "ko/tools/ai-ml/overview", @@ -8676,7 +8695,7 @@ ] }, { - "group": "클라우드 & 스토리지", + "group": "\ud074\ub77c\uc6b0\ub4dc & \uc2a4\ud1a0\ub9ac\uc9c0", "icon": "cloud", "pages": [ "ko/tools/cloud-storage/overview", @@ -8695,7 +8714,7 @@ ] }, { - "group": "자동화", + "group": "\uc790\ub3d9\ud654", "icon": "bolt", "pages": [ "ko/tools/automation/overview", @@ -8730,7 +8749,7 @@ ] }, { - "group": "학습", + "group": "\ud559\uc2b5", "pages": [ "ko/learn/overview", "ko/learn/llm-selection-guide", @@ -8767,17 +8786,17 @@ ] }, { - "tab": "엔터프라이즈", + "tab": "\uc5d4\ud130\ud504\ub77c\uc774\uc988", "icon": "briefcase", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/enterprise/introduction" ] }, { - "group": "빌드", + "group": "\ube4c\ub4dc", "pages": [ "ko/enterprise/features/automations", "ko/enterprise/features/crew-studio", @@ -8788,7 +8807,7 @@ ] }, { - "group": "운영", + "group": "\uc6b4\uc601", "pages": [ "ko/enterprise/features/traces", "ko/enterprise/features/webhook-streaming", @@ -8797,13 +8816,13 @@ ] }, { - "group": "관리", + "group": "\uad00\ub9ac", "pages": [ "ko/enterprise/features/rbac" ] }, { - "group": "통합 문서", + "group": "\ud1b5\ud569 \ubb38\uc11c", "pages": [ "ko/enterprise/integrations/asana", "ko/enterprise/integrations/box", @@ -8855,7 +8874,7 @@ ] }, { - "group": "트리거", + "group": "\ud2b8\ub9ac\uac70", "pages": [ "ko/enterprise/guides/automation-triggers", "ko/enterprise/guides/gmail-trigger", @@ -8871,7 +8890,7 @@ ] }, { - "group": "학습 자원", + "group": "\ud559\uc2b5 \uc790\uc6d0", "pages": [ "ko/enterprise/resources/frequently-asked-questions" ] @@ -8879,11 +8898,11 @@ ] }, { - "tab": "API 레퍼런스", + "tab": "API \ub808\ud37c\ub7f0\uc2a4", "icon": "magnifying-glass", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/api-reference/introduction", "ko/api-reference/inputs", @@ -8895,11 +8914,11 @@ ] }, { - "tab": "예시", + "tab": "\uc608\uc2dc", "icon": "code", "groups": [ { - "group": "예시", + "group": "\uc608\uc2dc", "pages": [ "ko/examples/example", "ko/examples/cookbooks" @@ -8908,11 +8927,11 @@ ] }, { - "tab": "변경 로그", + "tab": "\ubcc0\uacbd \ub85c\uadf8", "icon": "clock", "groups": [ { - "group": "릴리스 노트", + "group": "\ub9b4\ub9ac\uc2a4 \ub178\ud2b8", "pages": [ "ko/changelog" ] @@ -8925,11 +8944,11 @@ "version": "v1.12.0", "tabs": [ { - "tab": "홈", + "tab": "\ud648", "icon": "house", "groups": [ { - "group": "환영합니다", + "group": "\ud658\uc601\ud569\ub2c8\ub2e4", "pages": [ "ko/index" ] @@ -8937,11 +8956,11 @@ ] }, { - "tab": "기술 문서", + "tab": "\uae30\uc220 \ubb38\uc11c", "icon": "book-open", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/introduction", "ko/installation", @@ -8949,31 +8968,31 @@ ] }, { - "group": "가이드", + "group": "\uac00\uc774\ub4dc", "pages": [ { - "group": "전략", + "group": "\uc804\ub7b5", "icon": "compass", "pages": [ "ko/guides/concepts/evaluating-use-cases" ] }, { - "group": "에이전트 (Agents)", + "group": "\uc5d0\uc774\uc804\ud2b8 (Agents)", "icon": "user", "pages": [ "ko/guides/agents/crafting-effective-agents" ] }, { - "group": "크루 (Crews)", + "group": "\ud06c\ub8e8 (Crews)", "icon": "users", "pages": [ "ko/guides/crews/first-crew" ] }, { - "group": "플로우 (Flows)", + "group": "\ud50c\ub85c\uc6b0 (Flows)", "icon": "code-branch", "pages": [ "ko/guides/flows/first-flow", @@ -8981,21 +9000,21 @@ ] }, { - "group": "도구", + "group": "\ub3c4\uad6c", "icon": "wrench", "pages": [ "ko/guides/tools/publish-custom-tools" ] }, { - "group": "코딩 도구", + "group": "\ucf54\ub529 \ub3c4\uad6c", "icon": "terminal", "pages": [ "ko/guides/coding-tools/agents-md" ] }, { - "group": "고급", + "group": "\uace0\uae09", "icon": "gear", "pages": [ "ko/guides/advanced/customizing-prompts", @@ -9003,7 +9022,7 @@ ] }, { - "group": "마이그레이션", + "group": "\ub9c8\uc774\uadf8\ub808\uc774\uc158", "icon": "shuffle", "pages": [ "ko/guides/migration/migrating-from-langgraph" @@ -9012,7 +9031,7 @@ ] }, { - "group": "핵심 개념", + "group": "\ud575\uc2ec \uac1c\ub150", "pages": [ "ko/concepts/agents", "ko/concepts/tasks", @@ -9032,11 +9051,12 @@ "ko/concepts/testing", "ko/concepts/cli", "ko/concepts/tools", - "ko/concepts/event-listener" + "ko/concepts/event-listener", + "ko/concepts/checkpointing" ] }, { - "group": "MCP 통합", + "group": "MCP \ud1b5\ud569", "pages": [ "ko/mcp/overview", "ko/mcp/dsl-integration", @@ -9048,11 +9068,11 @@ ] }, { - "group": "도구 (Tools)", + "group": "\ub3c4\uad6c (Tools)", "pages": [ "ko/tools/overview", { - "group": "파일 & 문서", + "group": "\ud30c\uc77c & \ubb38\uc11c", "icon": "folder-open", "pages": [ "ko/tools/file-document/overview", @@ -9072,7 +9092,7 @@ ] }, { - "group": "웹 스크래핑 & 브라우징", + "group": "\uc6f9 \uc2a4\ud06c\ub798\ud551 & \ube0c\ub77c\uc6b0\uc9d5", "icon": "globe", "pages": [ "ko/tools/web-scraping/overview", @@ -9092,7 +9112,7 @@ ] }, { - "group": "검색 및 연구", + "group": "\uac80\uc0c9 \ubc0f \uc5f0\uad6c", "icon": "magnifying-glass", "pages": [ "ko/tools/search-research/overview", @@ -9114,7 +9134,7 @@ ] }, { - "group": "데이터베이스 & 데이터", + "group": "\ub370\uc774\ud130\ubca0\uc774\uc2a4 & \ub370\uc774\ud130", "icon": "database", "pages": [ "ko/tools/database-data/overview", @@ -9129,7 +9149,7 @@ ] }, { - "group": "인공지능 & 머신러닝", + "group": "\uc778\uacf5\uc9c0\ub2a5 & \uba38\uc2e0\ub7ec\ub2dd", "icon": "brain", "pages": [ "ko/tools/ai-ml/overview", @@ -9143,7 +9163,7 @@ ] }, { - "group": "클라우드 & 스토리지", + "group": "\ud074\ub77c\uc6b0\ub4dc & \uc2a4\ud1a0\ub9ac\uc9c0", "icon": "cloud", "pages": [ "ko/tools/cloud-storage/overview", @@ -9162,7 +9182,7 @@ ] }, { - "group": "자동화", + "group": "\uc790\ub3d9\ud654", "icon": "bolt", "pages": [ "ko/tools/automation/overview", @@ -9197,7 +9217,7 @@ ] }, { - "group": "학습", + "group": "\ud559\uc2b5", "pages": [ "ko/learn/overview", "ko/learn/llm-selection-guide", @@ -9234,17 +9254,17 @@ ] }, { - "tab": "엔터프라이즈", + "tab": "\uc5d4\ud130\ud504\ub77c\uc774\uc988", "icon": "briefcase", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/enterprise/introduction" ] }, { - "group": "빌드", + "group": "\ube4c\ub4dc", "pages": [ "ko/enterprise/features/automations", "ko/enterprise/features/crew-studio", @@ -9255,7 +9275,7 @@ ] }, { - "group": "운영", + "group": "\uc6b4\uc601", "pages": [ "ko/enterprise/features/traces", "ko/enterprise/features/webhook-streaming", @@ -9264,13 +9284,13 @@ ] }, { - "group": "관리", + "group": "\uad00\ub9ac", "pages": [ "ko/enterprise/features/rbac" ] }, { - "group": "통합 문서", + "group": "\ud1b5\ud569 \ubb38\uc11c", "pages": [ "ko/enterprise/integrations/asana", "ko/enterprise/integrations/box", @@ -9322,7 +9342,7 @@ ] }, { - "group": "트리거", + "group": "\ud2b8\ub9ac\uac70", "pages": [ "ko/enterprise/guides/automation-triggers", "ko/enterprise/guides/gmail-trigger", @@ -9338,7 +9358,7 @@ ] }, { - "group": "학습 자원", + "group": "\ud559\uc2b5 \uc790\uc6d0", "pages": [ "ko/enterprise/resources/frequently-asked-questions" ] @@ -9346,11 +9366,11 @@ ] }, { - "tab": "API 레퍼런스", + "tab": "API \ub808\ud37c\ub7f0\uc2a4", "icon": "magnifying-glass", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/api-reference/introduction", "ko/api-reference/inputs", @@ -9362,11 +9382,11 @@ ] }, { - "tab": "예시", + "tab": "\uc608\uc2dc", "icon": "code", "groups": [ { - "group": "예시", + "group": "\uc608\uc2dc", "pages": [ "ko/examples/example", "ko/examples/cookbooks" @@ -9375,11 +9395,11 @@ ] }, { - "tab": "변경 로그", + "tab": "\ubcc0\uacbd \ub85c\uadf8", "icon": "clock", "groups": [ { - "group": "릴리스 노트", + "group": "\ub9b4\ub9ac\uc2a4 \ub178\ud2b8", "pages": [ "ko/changelog" ] @@ -9392,11 +9412,11 @@ "version": "v1.11.1", "tabs": [ { - "tab": "홈", + "tab": "\ud648", "icon": "house", "groups": [ { - "group": "환영합니다", + "group": "\ud658\uc601\ud569\ub2c8\ub2e4", "pages": [ "ko/index" ] @@ -9404,11 +9424,11 @@ ] }, { - "tab": "기술 문서", + "tab": "\uae30\uc220 \ubb38\uc11c", "icon": "book-open", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/introduction", "ko/installation", @@ -9416,31 +9436,31 @@ ] }, { - "group": "가이드", + "group": "\uac00\uc774\ub4dc", "pages": [ { - "group": "전략", + "group": "\uc804\ub7b5", "icon": "compass", "pages": [ "ko/guides/concepts/evaluating-use-cases" ] }, { - "group": "에이전트 (Agents)", + "group": "\uc5d0\uc774\uc804\ud2b8 (Agents)", "icon": "user", "pages": [ "ko/guides/agents/crafting-effective-agents" ] }, { - "group": "크루 (Crews)", + "group": "\ud06c\ub8e8 (Crews)", "icon": "users", "pages": [ "ko/guides/crews/first-crew" ] }, { - "group": "플로우 (Flows)", + "group": "\ud50c\ub85c\uc6b0 (Flows)", "icon": "code-branch", "pages": [ "ko/guides/flows/first-flow", @@ -9448,21 +9468,21 @@ ] }, { - "group": "도구", + "group": "\ub3c4\uad6c", "icon": "wrench", "pages": [ "ko/guides/tools/publish-custom-tools" ] }, { - "group": "코딩 도구", + "group": "\ucf54\ub529 \ub3c4\uad6c", "icon": "terminal", "pages": [ "ko/guides/coding-tools/agents-md" ] }, { - "group": "고급", + "group": "\uace0\uae09", "icon": "gear", "pages": [ "ko/guides/advanced/customizing-prompts", @@ -9470,7 +9490,7 @@ ] }, { - "group": "마이그레이션", + "group": "\ub9c8\uc774\uadf8\ub808\uc774\uc158", "icon": "shuffle", "pages": [ "ko/guides/migration/migrating-from-langgraph" @@ -9479,7 +9499,7 @@ ] }, { - "group": "핵심 개념", + "group": "\ud575\uc2ec \uac1c\ub150", "pages": [ "ko/concepts/agents", "ko/concepts/tasks", @@ -9499,11 +9519,12 @@ "ko/concepts/testing", "ko/concepts/cli", "ko/concepts/tools", - "ko/concepts/event-listener" + "ko/concepts/event-listener", + "ko/concepts/checkpointing" ] }, { - "group": "MCP 통합", + "group": "MCP \ud1b5\ud569", "pages": [ "ko/mcp/overview", "ko/mcp/dsl-integration", @@ -9515,11 +9536,11 @@ ] }, { - "group": "도구 (Tools)", + "group": "\ub3c4\uad6c (Tools)", "pages": [ "ko/tools/overview", { - "group": "파일 & 문서", + "group": "\ud30c\uc77c & \ubb38\uc11c", "icon": "folder-open", "pages": [ "ko/tools/file-document/overview", @@ -9539,7 +9560,7 @@ ] }, { - "group": "웹 스크래핑 & 브라우징", + "group": "\uc6f9 \uc2a4\ud06c\ub798\ud551 & \ube0c\ub77c\uc6b0\uc9d5", "icon": "globe", "pages": [ "ko/tools/web-scraping/overview", @@ -9559,7 +9580,7 @@ ] }, { - "group": "검색 및 연구", + "group": "\uac80\uc0c9 \ubc0f \uc5f0\uad6c", "icon": "magnifying-glass", "pages": [ "ko/tools/search-research/overview", @@ -9581,7 +9602,7 @@ ] }, { - "group": "데이터베이스 & 데이터", + "group": "\ub370\uc774\ud130\ubca0\uc774\uc2a4 & \ub370\uc774\ud130", "icon": "database", "pages": [ "ko/tools/database-data/overview", @@ -9596,7 +9617,7 @@ ] }, { - "group": "인공지능 & 머신러닝", + "group": "\uc778\uacf5\uc9c0\ub2a5 & \uba38\uc2e0\ub7ec\ub2dd", "icon": "brain", "pages": [ "ko/tools/ai-ml/overview", @@ -9610,7 +9631,7 @@ ] }, { - "group": "클라우드 & 스토리지", + "group": "\ud074\ub77c\uc6b0\ub4dc & \uc2a4\ud1a0\ub9ac\uc9c0", "icon": "cloud", "pages": [ "ko/tools/cloud-storage/overview", @@ -9629,7 +9650,7 @@ ] }, { - "group": "자동화", + "group": "\uc790\ub3d9\ud654", "icon": "bolt", "pages": [ "ko/tools/automation/overview", @@ -9664,7 +9685,7 @@ ] }, { - "group": "학습", + "group": "\ud559\uc2b5", "pages": [ "ko/learn/overview", "ko/learn/llm-selection-guide", @@ -9701,17 +9722,17 @@ ] }, { - "tab": "엔터프라이즈", + "tab": "\uc5d4\ud130\ud504\ub77c\uc774\uc988", "icon": "briefcase", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/enterprise/introduction" ] }, { - "group": "빌드", + "group": "\ube4c\ub4dc", "pages": [ "ko/enterprise/features/automations", "ko/enterprise/features/crew-studio", @@ -9722,7 +9743,7 @@ ] }, { - "group": "운영", + "group": "\uc6b4\uc601", "pages": [ "ko/enterprise/features/traces", "ko/enterprise/features/webhook-streaming", @@ -9731,13 +9752,13 @@ ] }, { - "group": "관리", + "group": "\uad00\ub9ac", "pages": [ "ko/enterprise/features/rbac" ] }, { - "group": "통합 문서", + "group": "\ud1b5\ud569 \ubb38\uc11c", "pages": [ "ko/enterprise/integrations/asana", "ko/enterprise/integrations/box", @@ -9789,7 +9810,7 @@ ] }, { - "group": "트리거", + "group": "\ud2b8\ub9ac\uac70", "pages": [ "ko/enterprise/guides/automation-triggers", "ko/enterprise/guides/gmail-trigger", @@ -9805,7 +9826,7 @@ ] }, { - "group": "학습 자원", + "group": "\ud559\uc2b5 \uc790\uc6d0", "pages": [ "ko/enterprise/resources/frequently-asked-questions" ] @@ -9813,11 +9834,11 @@ ] }, { - "tab": "API 레퍼런스", + "tab": "API \ub808\ud37c\ub7f0\uc2a4", "icon": "magnifying-glass", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/api-reference/introduction", "ko/api-reference/inputs", @@ -9829,11 +9850,11 @@ ] }, { - "tab": "예시", + "tab": "\uc608\uc2dc", "icon": "code", "groups": [ { - "group": "예시", + "group": "\uc608\uc2dc", "pages": [ "ko/examples/example", "ko/examples/cookbooks" @@ -9842,11 +9863,11 @@ ] }, { - "tab": "변경 로그", + "tab": "\ubcc0\uacbd \ub85c\uadf8", "icon": "clock", "groups": [ { - "group": "릴리스 노트", + "group": "\ub9b4\ub9ac\uc2a4 \ub178\ud2b8", "pages": [ "ko/changelog" ] @@ -9859,11 +9880,11 @@ "version": "v1.11.0", "tabs": [ { - "tab": "홈", + "tab": "\ud648", "icon": "house", "groups": [ { - "group": "환영합니다", + "group": "\ud658\uc601\ud569\ub2c8\ub2e4", "pages": [ "ko/index" ] @@ -9871,11 +9892,11 @@ ] }, { - "tab": "기술 문서", + "tab": "\uae30\uc220 \ubb38\uc11c", "icon": "book-open", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/introduction", "ko/installation", @@ -9883,31 +9904,31 @@ ] }, { - "group": "가이드", + "group": "\uac00\uc774\ub4dc", "pages": [ { - "group": "전략", + "group": "\uc804\ub7b5", "icon": "compass", "pages": [ "ko/guides/concepts/evaluating-use-cases" ] }, { - "group": "에이전트 (Agents)", + "group": "\uc5d0\uc774\uc804\ud2b8 (Agents)", "icon": "user", "pages": [ "ko/guides/agents/crafting-effective-agents" ] }, { - "group": "크루 (Crews)", + "group": "\ud06c\ub8e8 (Crews)", "icon": "users", "pages": [ "ko/guides/crews/first-crew" ] }, { - "group": "플로우 (Flows)", + "group": "\ud50c\ub85c\uc6b0 (Flows)", "icon": "code-branch", "pages": [ "ko/guides/flows/first-flow", @@ -9915,21 +9936,21 @@ ] }, { - "group": "도구", + "group": "\ub3c4\uad6c", "icon": "wrench", "pages": [ "ko/guides/tools/publish-custom-tools" ] }, { - "group": "코딩 도구", + "group": "\ucf54\ub529 \ub3c4\uad6c", "icon": "terminal", "pages": [ "ko/guides/coding-tools/agents-md" ] }, { - "group": "고급", + "group": "\uace0\uae09", "icon": "gear", "pages": [ "ko/guides/advanced/customizing-prompts", @@ -9937,7 +9958,7 @@ ] }, { - "group": "마이그레이션", + "group": "\ub9c8\uc774\uadf8\ub808\uc774\uc158", "icon": "shuffle", "pages": [ "ko/guides/migration/migrating-from-langgraph" @@ -9946,7 +9967,7 @@ ] }, { - "group": "핵심 개념", + "group": "\ud575\uc2ec \uac1c\ub150", "pages": [ "ko/concepts/agents", "ko/concepts/tasks", @@ -9965,11 +9986,12 @@ "ko/concepts/testing", "ko/concepts/cli", "ko/concepts/tools", - "ko/concepts/event-listener" + "ko/concepts/event-listener", + "ko/concepts/checkpointing" ] }, { - "group": "MCP 통합", + "group": "MCP \ud1b5\ud569", "pages": [ "ko/mcp/overview", "ko/mcp/dsl-integration", @@ -9981,11 +10003,11 @@ ] }, { - "group": "도구 (Tools)", + "group": "\ub3c4\uad6c (Tools)", "pages": [ "ko/tools/overview", { - "group": "파일 & 문서", + "group": "\ud30c\uc77c & \ubb38\uc11c", "icon": "folder-open", "pages": [ "ko/tools/file-document/overview", @@ -10005,7 +10027,7 @@ ] }, { - "group": "웹 스크래핑 & 브라우징", + "group": "\uc6f9 \uc2a4\ud06c\ub798\ud551 & \ube0c\ub77c\uc6b0\uc9d5", "icon": "globe", "pages": [ "ko/tools/web-scraping/overview", @@ -10025,7 +10047,7 @@ ] }, { - "group": "검색 및 연구", + "group": "\uac80\uc0c9 \ubc0f \uc5f0\uad6c", "icon": "magnifying-glass", "pages": [ "ko/tools/search-research/overview", @@ -10047,7 +10069,7 @@ ] }, { - "group": "데이터베이스 & 데이터", + "group": "\ub370\uc774\ud130\ubca0\uc774\uc2a4 & \ub370\uc774\ud130", "icon": "database", "pages": [ "ko/tools/database-data/overview", @@ -10062,7 +10084,7 @@ ] }, { - "group": "인공지능 & 머신러닝", + "group": "\uc778\uacf5\uc9c0\ub2a5 & \uba38\uc2e0\ub7ec\ub2dd", "icon": "brain", "pages": [ "ko/tools/ai-ml/overview", @@ -10076,7 +10098,7 @@ ] }, { - "group": "클라우드 & 스토리지", + "group": "\ud074\ub77c\uc6b0\ub4dc & \uc2a4\ud1a0\ub9ac\uc9c0", "icon": "cloud", "pages": [ "ko/tools/cloud-storage/overview", @@ -10095,7 +10117,7 @@ ] }, { - "group": "자동화", + "group": "\uc790\ub3d9\ud654", "icon": "bolt", "pages": [ "ko/tools/automation/overview", @@ -10130,7 +10152,7 @@ ] }, { - "group": "학습", + "group": "\ud559\uc2b5", "pages": [ "ko/learn/overview", "ko/learn/llm-selection-guide", @@ -10167,17 +10189,17 @@ ] }, { - "tab": "엔터프라이즈", + "tab": "\uc5d4\ud130\ud504\ub77c\uc774\uc988", "icon": "briefcase", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/enterprise/introduction" ] }, { - "group": "빌드", + "group": "\ube4c\ub4dc", "pages": [ "ko/enterprise/features/automations", "ko/enterprise/features/crew-studio", @@ -10188,7 +10210,7 @@ ] }, { - "group": "운영", + "group": "\uc6b4\uc601", "pages": [ "ko/enterprise/features/traces", "ko/enterprise/features/webhook-streaming", @@ -10197,13 +10219,13 @@ ] }, { - "group": "관리", + "group": "\uad00\ub9ac", "pages": [ "ko/enterprise/features/rbac" ] }, { - "group": "통합 문서", + "group": "\ud1b5\ud569 \ubb38\uc11c", "pages": [ "ko/enterprise/integrations/asana", "ko/enterprise/integrations/box", @@ -10255,7 +10277,7 @@ ] }, { - "group": "트리거", + "group": "\ud2b8\ub9ac\uac70", "pages": [ "ko/enterprise/guides/automation-triggers", "ko/enterprise/guides/gmail-trigger", @@ -10271,7 +10293,7 @@ ] }, { - "group": "학습 자원", + "group": "\ud559\uc2b5 \uc790\uc6d0", "pages": [ "ko/enterprise/resources/frequently-asked-questions" ] @@ -10279,11 +10301,11 @@ ] }, { - "tab": "API 레퍼런스", + "tab": "API \ub808\ud37c\ub7f0\uc2a4", "icon": "magnifying-glass", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/api-reference/introduction", "ko/api-reference/inputs", @@ -10295,11 +10317,11 @@ ] }, { - "tab": "예시", + "tab": "\uc608\uc2dc", "icon": "code", "groups": [ { - "group": "예시", + "group": "\uc608\uc2dc", "pages": [ "ko/examples/example", "ko/examples/cookbooks" @@ -10308,11 +10330,11 @@ ] }, { - "tab": "변경 로그", + "tab": "\ubcc0\uacbd \ub85c\uadf8", "icon": "clock", "groups": [ { - "group": "릴리스 노트", + "group": "\ub9b4\ub9ac\uc2a4 \ub178\ud2b8", "pages": [ "ko/changelog" ] @@ -10325,11 +10347,11 @@ "version": "v1.10.1", "tabs": [ { - "tab": "홈", + "tab": "\ud648", "icon": "house", "groups": [ { - "group": "환영합니다", + "group": "\ud658\uc601\ud569\ub2c8\ub2e4", "pages": [ "ko/index" ] @@ -10337,11 +10359,11 @@ ] }, { - "tab": "기술 문서", + "tab": "\uae30\uc220 \ubb38\uc11c", "icon": "book-open", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/introduction", "ko/installation", @@ -10349,31 +10371,31 @@ ] }, { - "group": "가이드", + "group": "\uac00\uc774\ub4dc", "pages": [ { - "group": "전략", + "group": "\uc804\ub7b5", "icon": "compass", "pages": [ "ko/guides/concepts/evaluating-use-cases" ] }, { - "group": "에이전트 (Agents)", + "group": "\uc5d0\uc774\uc804\ud2b8 (Agents)", "icon": "user", "pages": [ "ko/guides/agents/crafting-effective-agents" ] }, { - "group": "크루 (Crews)", + "group": "\ud06c\ub8e8 (Crews)", "icon": "users", "pages": [ "ko/guides/crews/first-crew" ] }, { - "group": "플로우 (Flows)", + "group": "\ud50c\ub85c\uc6b0 (Flows)", "icon": "code-branch", "pages": [ "ko/guides/flows/first-flow", @@ -10381,21 +10403,21 @@ ] }, { - "group": "도구", + "group": "\ub3c4\uad6c", "icon": "wrench", "pages": [ "ko/guides/tools/publish-custom-tools" ] }, { - "group": "코딩 도구", + "group": "\ucf54\ub529 \ub3c4\uad6c", "icon": "terminal", "pages": [ "ko/guides/coding-tools/agents-md" ] }, { - "group": "고급", + "group": "\uace0\uae09", "icon": "gear", "pages": [ "ko/guides/advanced/customizing-prompts", @@ -10403,7 +10425,7 @@ ] }, { - "group": "마이그레이션", + "group": "\ub9c8\uc774\uadf8\ub808\uc774\uc158", "icon": "shuffle", "pages": [ "ko/guides/migration/migrating-from-langgraph" @@ -10412,7 +10434,7 @@ ] }, { - "group": "핵심 개념", + "group": "\ud575\uc2ec \uac1c\ub150", "pages": [ "ko/concepts/agents", "ko/concepts/tasks", @@ -10431,11 +10453,12 @@ "ko/concepts/testing", "ko/concepts/cli", "ko/concepts/tools", - "ko/concepts/event-listener" + "ko/concepts/event-listener", + "ko/concepts/checkpointing" ] }, { - "group": "MCP 통합", + "group": "MCP \ud1b5\ud569", "pages": [ "ko/mcp/overview", "ko/mcp/dsl-integration", @@ -10447,11 +10470,11 @@ ] }, { - "group": "도구 (Tools)", + "group": "\ub3c4\uad6c (Tools)", "pages": [ "ko/tools/overview", { - "group": "파일 & 문서", + "group": "\ud30c\uc77c & \ubb38\uc11c", "icon": "folder-open", "pages": [ "ko/tools/file-document/overview", @@ -10471,7 +10494,7 @@ ] }, { - "group": "웹 스크래핑 & 브라우징", + "group": "\uc6f9 \uc2a4\ud06c\ub798\ud551 & \ube0c\ub77c\uc6b0\uc9d5", "icon": "globe", "pages": [ "ko/tools/web-scraping/overview", @@ -10491,7 +10514,7 @@ ] }, { - "group": "검색 및 연구", + "group": "\uac80\uc0c9 \ubc0f \uc5f0\uad6c", "icon": "magnifying-glass", "pages": [ "ko/tools/search-research/overview", @@ -10513,7 +10536,7 @@ ] }, { - "group": "데이터베이스 & 데이터", + "group": "\ub370\uc774\ud130\ubca0\uc774\uc2a4 & \ub370\uc774\ud130", "icon": "database", "pages": [ "ko/tools/database-data/overview", @@ -10528,7 +10551,7 @@ ] }, { - "group": "인공지능 & 머신러닝", + "group": "\uc778\uacf5\uc9c0\ub2a5 & \uba38\uc2e0\ub7ec\ub2dd", "icon": "brain", "pages": [ "ko/tools/ai-ml/overview", @@ -10542,7 +10565,7 @@ ] }, { - "group": "클라우드 & 스토리지", + "group": "\ud074\ub77c\uc6b0\ub4dc & \uc2a4\ud1a0\ub9ac\uc9c0", "icon": "cloud", "pages": [ "ko/tools/cloud-storage/overview", @@ -10561,7 +10584,7 @@ ] }, { - "group": "자동화", + "group": "\uc790\ub3d9\ud654", "icon": "bolt", "pages": [ "ko/tools/automation/overview", @@ -10596,7 +10619,7 @@ ] }, { - "group": "학습", + "group": "\ud559\uc2b5", "pages": [ "ko/learn/overview", "ko/learn/llm-selection-guide", @@ -10633,17 +10656,17 @@ ] }, { - "tab": "엔터프라이즈", + "tab": "\uc5d4\ud130\ud504\ub77c\uc774\uc988", "icon": "briefcase", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/enterprise/introduction" ] }, { - "group": "빌드", + "group": "\ube4c\ub4dc", "pages": [ "ko/enterprise/features/automations", "ko/enterprise/features/crew-studio", @@ -10654,7 +10677,7 @@ ] }, { - "group": "운영", + "group": "\uc6b4\uc601", "pages": [ "ko/enterprise/features/traces", "ko/enterprise/features/webhook-streaming", @@ -10663,13 +10686,13 @@ ] }, { - "group": "관리", + "group": "\uad00\ub9ac", "pages": [ "ko/enterprise/features/rbac" ] }, { - "group": "통합 문서", + "group": "\ud1b5\ud569 \ubb38\uc11c", "pages": [ "ko/enterprise/integrations/asana", "ko/enterprise/integrations/box", @@ -10721,7 +10744,7 @@ ] }, { - "group": "트리거", + "group": "\ud2b8\ub9ac\uac70", "pages": [ "ko/enterprise/guides/automation-triggers", "ko/enterprise/guides/gmail-trigger", @@ -10737,7 +10760,7 @@ ] }, { - "group": "학습 자원", + "group": "\ud559\uc2b5 \uc790\uc6d0", "pages": [ "ko/enterprise/resources/frequently-asked-questions" ] @@ -10745,11 +10768,11 @@ ] }, { - "tab": "API 레퍼런스", + "tab": "API \ub808\ud37c\ub7f0\uc2a4", "icon": "magnifying-glass", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/api-reference/introduction", "ko/api-reference/inputs", @@ -10761,11 +10784,11 @@ ] }, { - "tab": "예시", + "tab": "\uc608\uc2dc", "icon": "code", "groups": [ { - "group": "예시", + "group": "\uc608\uc2dc", "pages": [ "ko/examples/example", "ko/examples/cookbooks" @@ -10774,11 +10797,11 @@ ] }, { - "tab": "변경 로그", + "tab": "\ubcc0\uacbd \ub85c\uadf8", "icon": "clock", "groups": [ { - "group": "릴리스 노트", + "group": "\ub9b4\ub9ac\uc2a4 \ub178\ud2b8", "pages": [ "ko/changelog" ] @@ -10791,11 +10814,11 @@ "version": "v1.10.0", "tabs": [ { - "tab": "홈", + "tab": "\ud648", "icon": "house", "groups": [ { - "group": "환영합니다", + "group": "\ud658\uc601\ud569\ub2c8\ub2e4", "pages": [ "ko/index" ] @@ -10803,11 +10826,11 @@ ] }, { - "tab": "기술 문서", + "tab": "\uae30\uc220 \ubb38\uc11c", "icon": "book-open", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/introduction", "ko/installation", @@ -10815,31 +10838,31 @@ ] }, { - "group": "가이드", + "group": "\uac00\uc774\ub4dc", "pages": [ { - "group": "전략", + "group": "\uc804\ub7b5", "icon": "compass", "pages": [ "ko/guides/concepts/evaluating-use-cases" ] }, { - "group": "에이전트 (Agents)", + "group": "\uc5d0\uc774\uc804\ud2b8 (Agents)", "icon": "user", "pages": [ "ko/guides/agents/crafting-effective-agents" ] }, { - "group": "크루 (Crews)", + "group": "\ud06c\ub8e8 (Crews)", "icon": "users", "pages": [ "ko/guides/crews/first-crew" ] }, { - "group": "플로우 (Flows)", + "group": "\ud50c\ub85c\uc6b0 (Flows)", "icon": "code-branch", "pages": [ "ko/guides/flows/first-flow", @@ -10847,21 +10870,21 @@ ] }, { - "group": "도구", + "group": "\ub3c4\uad6c", "icon": "wrench", "pages": [ "ko/guides/tools/publish-custom-tools" ] }, { - "group": "코딩 도구", + "group": "\ucf54\ub529 \ub3c4\uad6c", "icon": "terminal", "pages": [ "ko/guides/coding-tools/agents-md" ] }, { - "group": "고급", + "group": "\uace0\uae09", "icon": "gear", "pages": [ "ko/guides/advanced/customizing-prompts", @@ -10869,7 +10892,7 @@ ] }, { - "group": "마이그레이션", + "group": "\ub9c8\uc774\uadf8\ub808\uc774\uc158", "icon": "shuffle", "pages": [ "ko/guides/migration/migrating-from-langgraph" @@ -10878,7 +10901,7 @@ ] }, { - "group": "핵심 개념", + "group": "\ud575\uc2ec \uac1c\ub150", "pages": [ "ko/concepts/agents", "ko/concepts/tasks", @@ -10898,11 +10921,12 @@ "ko/concepts/testing", "ko/concepts/cli", "ko/concepts/tools", - "ko/concepts/event-listener" + "ko/concepts/event-listener", + "ko/concepts/checkpointing" ] }, { - "group": "MCP 통합", + "group": "MCP \ud1b5\ud569", "pages": [ "ko/mcp/overview", "ko/mcp/dsl-integration", @@ -10914,11 +10938,11 @@ ] }, { - "group": "도구 (Tools)", + "group": "\ub3c4\uad6c (Tools)", "pages": [ "ko/tools/overview", { - "group": "파일 & 문서", + "group": "\ud30c\uc77c & \ubb38\uc11c", "icon": "folder-open", "pages": [ "ko/tools/file-document/overview", @@ -10938,7 +10962,7 @@ ] }, { - "group": "웹 스크래핑 & 브라우징", + "group": "\uc6f9 \uc2a4\ud06c\ub798\ud551 & \ube0c\ub77c\uc6b0\uc9d5", "icon": "globe", "pages": [ "ko/tools/web-scraping/overview", @@ -10958,7 +10982,7 @@ ] }, { - "group": "검색 및 연구", + "group": "\uac80\uc0c9 \ubc0f \uc5f0\uad6c", "icon": "magnifying-glass", "pages": [ "ko/tools/search-research/overview", @@ -10980,7 +11004,7 @@ ] }, { - "group": "데이터베이스 & 데이터", + "group": "\ub370\uc774\ud130\ubca0\uc774\uc2a4 & \ub370\uc774\ud130", "icon": "database", "pages": [ "ko/tools/database-data/overview", @@ -10995,7 +11019,7 @@ ] }, { - "group": "인공지능 & 머신러닝", + "group": "\uc778\uacf5\uc9c0\ub2a5 & \uba38\uc2e0\ub7ec\ub2dd", "icon": "brain", "pages": [ "ko/tools/ai-ml/overview", @@ -11009,7 +11033,7 @@ ] }, { - "group": "클라우드 & 스토리지", + "group": "\ud074\ub77c\uc6b0\ub4dc & \uc2a4\ud1a0\ub9ac\uc9c0", "icon": "cloud", "pages": [ "ko/tools/cloud-storage/overview", @@ -11028,7 +11052,7 @@ ] }, { - "group": "자동화", + "group": "\uc790\ub3d9\ud654", "icon": "bolt", "pages": [ "ko/tools/automation/overview", @@ -11063,7 +11087,7 @@ ] }, { - "group": "학습", + "group": "\ud559\uc2b5", "pages": [ "ko/learn/overview", "ko/learn/llm-selection-guide", @@ -11100,17 +11124,17 @@ ] }, { - "tab": "엔터프라이즈", + "tab": "\uc5d4\ud130\ud504\ub77c\uc774\uc988", "icon": "briefcase", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/enterprise/introduction" ] }, { - "group": "빌드", + "group": "\ube4c\ub4dc", "pages": [ "ko/enterprise/features/automations", "ko/enterprise/features/crew-studio", @@ -11121,7 +11145,7 @@ ] }, { - "group": "운영", + "group": "\uc6b4\uc601", "pages": [ "ko/enterprise/features/traces", "ko/enterprise/features/webhook-streaming", @@ -11130,13 +11154,13 @@ ] }, { - "group": "관리", + "group": "\uad00\ub9ac", "pages": [ "ko/enterprise/features/rbac" ] }, { - "group": "통합 문서", + "group": "\ud1b5\ud569 \ubb38\uc11c", "pages": [ "ko/enterprise/integrations/asana", "ko/enterprise/integrations/box", @@ -11188,7 +11212,7 @@ ] }, { - "group": "트리거", + "group": "\ud2b8\ub9ac\uac70", "pages": [ "ko/enterprise/guides/automation-triggers", "ko/enterprise/guides/gmail-trigger", @@ -11204,7 +11228,7 @@ ] }, { - "group": "학습 자원", + "group": "\ud559\uc2b5 \uc790\uc6d0", "pages": [ "ko/enterprise/resources/frequently-asked-questions" ] @@ -11212,11 +11236,11 @@ ] }, { - "tab": "API 레퍼런스", + "tab": "API \ub808\ud37c\ub7f0\uc2a4", "icon": "magnifying-glass", "groups": [ { - "group": "시작 안내", + "group": "\uc2dc\uc791 \uc548\ub0b4", "pages": [ "ko/api-reference/introduction", "ko/api-reference/inputs", @@ -11228,11 +11252,11 @@ ] }, { - "tab": "예시", + "tab": "\uc608\uc2dc", "icon": "code", "groups": [ { - "group": "예시", + "group": "\uc608\uc2dc", "pages": [ "ko/examples/example", "ko/examples/cookbooks" @@ -11241,11 +11265,11 @@ ] }, { - "tab": "변경 로그", + "tab": "\ubcc0\uacbd \ub85c\uadf8", "icon": "clock", "groups": [ { - "group": "릴리스 노트", + "group": "\ub9b4\ub9ac\uc2a4 \ub178\ud2b8", "pages": [ "ko/changelog" ] @@ -11261,17 +11285,17 @@ "global": { "anchors": [ { - "anchor": "الموقع", + "anchor": "\u0627\u0644\u0645\u0648\u0642\u0639", "href": "https://crewai.com", "icon": "globe" }, { - "anchor": "المنتدى", + "anchor": "\u0627\u0644\u0645\u0646\u062a\u062f\u0649", "href": "https://community.crewai.com", "icon": "discourse" }, { - "anchor": "المدوّنة", + "anchor": "\u0627\u0644\u0645\u062f\u0648\u0651\u0646\u0629", "href": "https://blog.crewai.com", "icon": "newspaper" }, @@ -11288,11 +11312,11 @@ "default": true, "tabs": [ { - "tab": "الرئيسية", + "tab": "\u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629", "icon": "house", "groups": [ { - "group": "مرحباً", + "group": "\u0645\u0631\u062d\u0628\u0627\u064b", "pages": [ "ar/index" ] @@ -11300,11 +11324,11 @@ ] }, { - "tab": "التقنية التوثيق", + "tab": "\u0627\u0644\u062a\u0642\u0646\u064a\u0629 \u0627\u0644\u062a\u0648\u062b\u064a\u0642", "icon": "book-open", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/introduction", "ar/installation", @@ -11312,31 +11336,31 @@ ] }, { - "group": "الأدلّة", + "group": "\u0627\u0644\u0623\u062f\u0644\u0651\u0629", "pages": [ { - "group": "الاستراتيجية", + "group": "\u0627\u0644\u0627\u0633\u062a\u0631\u0627\u062a\u064a\u062c\u064a\u0629", "icon": "compass", "pages": [ "ar/guides/concepts/evaluating-use-cases" ] }, { - "group": "الوكلاء", + "group": "\u0627\u0644\u0648\u0643\u0644\u0627\u0621", "icon": "user", "pages": [ "ar/guides/agents/crafting-effective-agents" ] }, { - "group": "الطواقم", + "group": "\u0627\u0644\u0637\u0648\u0627\u0642\u0645", "icon": "users", "pages": [ "ar/guides/crews/first-crew" ] }, { - "group": "التدفقات", + "group": "\u0627\u0644\u062a\u062f\u0641\u0642\u0627\u062a", "icon": "code-branch", "pages": [ "ar/guides/flows/first-flow", @@ -11344,21 +11368,21 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "icon": "wrench", "pages": [ "ar/guides/tools/publish-custom-tools" ] }, { - "group": "أدوات البرمجة", + "group": "\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0628\u0631\u0645\u062c\u0629", "icon": "terminal", "pages": [ "ar/guides/coding-tools/agents-md" ] }, { - "group": "متقدّم", + "group": "\u0645\u062a\u0642\u062f\u0651\u0645", "icon": "gear", "pages": [ "ar/guides/advanced/customizing-prompts", @@ -11366,7 +11390,7 @@ ] }, { - "group": "الترحيل", + "group": "\u0627\u0644\u062a\u0631\u062d\u064a\u0644", "icon": "shuffle", "pages": [ "ar/guides/migration/migrating-from-langgraph" @@ -11375,7 +11399,7 @@ ] }, { - "group": "المفاهيم الأساسية", + "group": "\u0627\u0644\u0645\u0641\u0627\u0647\u064a\u0645 \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629", "pages": [ "ar/concepts/agents", "ar/concepts/agent-capabilities", @@ -11396,11 +11420,12 @@ "ar/concepts/testing", "ar/concepts/cli", "ar/concepts/tools", - "ar/concepts/event-listener" + "ar/concepts/event-listener", + "ar/concepts/checkpointing" ] }, { - "group": "تكامل MCP", + "group": "\u062a\u0643\u0627\u0645\u0644 MCP", "pages": [ "ar/mcp/overview", "ar/mcp/dsl-integration", @@ -11412,11 +11437,11 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "pages": [ "ar/tools/overview", { - "group": "الملفات والمستندات", + "group": "\u0627\u0644\u0645\u0644\u0641\u0627\u062a \u0648\u0627\u0644\u0645\u0633\u062a\u0646\u062f\u0627\u062a", "icon": "folder-open", "pages": [ "ar/tools/file-document/overview", @@ -11436,7 +11461,7 @@ ] }, { - "group": "استخراج بيانات الويب", + "group": "\u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0648\u064a\u0628", "icon": "globe", "pages": [ "ar/tools/web-scraping/overview", @@ -11456,7 +11481,7 @@ ] }, { - "group": "البحث والاستكشاف", + "group": "\u0627\u0644\u0628\u062d\u062b \u0648\u0627\u0644\u0627\u0633\u062a\u0643\u0634\u0627\u0641", "icon": "magnifying-glass", "pages": [ "ar/tools/search-research/overview", @@ -11478,7 +11503,7 @@ ] }, { - "group": "قواعد البيانات", + "group": "\u0642\u0648\u0627\u0639\u062f \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", "icon": "database", "pages": [ "ar/tools/database-data/overview", @@ -11493,7 +11518,7 @@ ] }, { - "group": "الذكاء الاصطناعي والتعلّم الآلي", + "group": "\u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0648\u0627\u0644\u062a\u0639\u0644\u0651\u0645 \u0627\u0644\u0622\u0644\u064a", "icon": "brain", "pages": [ "ar/tools/ai-ml/overview", @@ -11507,7 +11532,7 @@ ] }, { - "group": "التخزين السحابي", + "group": "\u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0633\u062d\u0627\u0628\u064a", "icon": "cloud", "pages": [ "ar/tools/cloud-storage/overview", @@ -11526,7 +11551,7 @@ ] }, { - "group": "الأتمتة", + "group": "\u0627\u0644\u0623\u062a\u0645\u062a\u0629", "icon": "bolt", "pages": [ "ar/tools/automation/overview", @@ -11561,7 +11586,7 @@ ] }, { - "group": "التعلّم", + "group": "\u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/learn/overview", "ar/learn/llm-selection-guide", @@ -11598,17 +11623,17 @@ ] }, { - "tab": "المؤسسات", + "tab": "\u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062a", "icon": "briefcase", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/enterprise/introduction" ] }, { - "group": "البناء", + "group": "\u0627\u0644\u0628\u0646\u0627\u0621", "pages": [ "ar/enterprise/features/automations", "ar/enterprise/features/crew-studio", @@ -11619,7 +11644,7 @@ ] }, { - "group": "العمليات", + "group": "\u0627\u0644\u0639\u0645\u0644\u064a\u0627\u062a", "pages": [ "ar/enterprise/features/traces", "ar/enterprise/features/webhook-streaming", @@ -11628,13 +11653,13 @@ ] }, { - "group": "الإدارة", + "group": "\u0627\u0644\u0625\u062f\u0627\u0631\u0629", "pages": [ "ar/enterprise/features/rbac" ] }, { - "group": "التكاملات", + "group": "\u0627\u0644\u062a\u0643\u0627\u0645\u0644\u0627\u062a", "pages": [ "ar/enterprise/integrations/asana", "ar/enterprise/integrations/box", @@ -11686,7 +11711,7 @@ ] }, { - "group": "المشغّلات", + "group": "\u0627\u0644\u0645\u0634\u063a\u0651\u0644\u0627\u062a", "pages": [ "ar/enterprise/guides/automation-triggers", "ar/enterprise/guides/gmail-trigger", @@ -11702,7 +11727,7 @@ ] }, { - "group": "موارد التعلّم", + "group": "\u0645\u0648\u0627\u0631\u062f \u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/enterprise/resources/frequently-asked-questions" ] @@ -11710,11 +11735,11 @@ ] }, { - "tab": "API المرجع", + "tab": "API \u0627\u0644\u0645\u0631\u062c\u0639", "icon": "magnifying-glass", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/api-reference/introduction", "ar/api-reference/inputs", @@ -11726,11 +11751,11 @@ ] }, { - "tab": "أمثلة", + "tab": "\u0623\u0645\u062b\u0644\u0629", "icon": "code", "groups": [ { - "group": "أمثلة", + "group": "\u0623\u0645\u062b\u0644\u0629", "pages": [ "ar/examples/example", "ar/examples/cookbooks" @@ -11739,11 +11764,11 @@ ] }, { - "tab": "التغييرات السجلات", + "tab": "\u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0627\u0644\u0633\u062c\u0644\u0627\u062a", "icon": "clock", "groups": [ { - "group": "سجل التغييرات", + "group": "\u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a", "pages": [ "ar/changelog" ] @@ -11756,11 +11781,11 @@ "version": "v1.12.2", "tabs": [ { - "tab": "الرئيسية", + "tab": "\u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629", "icon": "house", "groups": [ { - "group": "مرحباً", + "group": "\u0645\u0631\u062d\u0628\u0627\u064b", "pages": [ "ar/index" ] @@ -11768,11 +11793,11 @@ ] }, { - "tab": "التقنية التوثيق", + "tab": "\u0627\u0644\u062a\u0642\u0646\u064a\u0629 \u0627\u0644\u062a\u0648\u062b\u064a\u0642", "icon": "book-open", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/introduction", "ar/installation", @@ -11780,31 +11805,31 @@ ] }, { - "group": "الأدلّة", + "group": "\u0627\u0644\u0623\u062f\u0644\u0651\u0629", "pages": [ { - "group": "الاستراتيجية", + "group": "\u0627\u0644\u0627\u0633\u062a\u0631\u0627\u062a\u064a\u062c\u064a\u0629", "icon": "compass", "pages": [ "ar/guides/concepts/evaluating-use-cases" ] }, { - "group": "الوكلاء", + "group": "\u0627\u0644\u0648\u0643\u0644\u0627\u0621", "icon": "user", "pages": [ "ar/guides/agents/crafting-effective-agents" ] }, { - "group": "الطواقم", + "group": "\u0627\u0644\u0637\u0648\u0627\u0642\u0645", "icon": "users", "pages": [ "ar/guides/crews/first-crew" ] }, { - "group": "التدفقات", + "group": "\u0627\u0644\u062a\u062f\u0641\u0642\u0627\u062a", "icon": "code-branch", "pages": [ "ar/guides/flows/first-flow", @@ -11812,21 +11837,21 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "icon": "wrench", "pages": [ "ar/guides/tools/publish-custom-tools" ] }, { - "group": "أدوات البرمجة", + "group": "\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0628\u0631\u0645\u062c\u0629", "icon": "terminal", "pages": [ "ar/guides/coding-tools/agents-md" ] }, { - "group": "متقدّم", + "group": "\u0645\u062a\u0642\u062f\u0651\u0645", "icon": "gear", "pages": [ "ar/guides/advanced/customizing-prompts", @@ -11834,7 +11859,7 @@ ] }, { - "group": "الترحيل", + "group": "\u0627\u0644\u062a\u0631\u062d\u064a\u0644", "icon": "shuffle", "pages": [ "ar/guides/migration/migrating-from-langgraph" @@ -11843,7 +11868,7 @@ ] }, { - "group": "المفاهيم الأساسية", + "group": "\u0627\u0644\u0645\u0641\u0627\u0647\u064a\u0645 \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629", "pages": [ "ar/concepts/agents", "ar/concepts/agent-capabilities", @@ -11864,11 +11889,12 @@ "ar/concepts/testing", "ar/concepts/cli", "ar/concepts/tools", - "ar/concepts/event-listener" + "ar/concepts/event-listener", + "ar/concepts/checkpointing" ] }, { - "group": "تكامل MCP", + "group": "\u062a\u0643\u0627\u0645\u0644 MCP", "pages": [ "ar/mcp/overview", "ar/mcp/dsl-integration", @@ -11880,11 +11906,11 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "pages": [ "ar/tools/overview", { - "group": "الملفات والمستندات", + "group": "\u0627\u0644\u0645\u0644\u0641\u0627\u062a \u0648\u0627\u0644\u0645\u0633\u062a\u0646\u062f\u0627\u062a", "icon": "folder-open", "pages": [ "ar/tools/file-document/overview", @@ -11904,7 +11930,7 @@ ] }, { - "group": "استخراج بيانات الويب", + "group": "\u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0648\u064a\u0628", "icon": "globe", "pages": [ "ar/tools/web-scraping/overview", @@ -11924,7 +11950,7 @@ ] }, { - "group": "البحث والاستكشاف", + "group": "\u0627\u0644\u0628\u062d\u062b \u0648\u0627\u0644\u0627\u0633\u062a\u0643\u0634\u0627\u0641", "icon": "magnifying-glass", "pages": [ "ar/tools/search-research/overview", @@ -11946,7 +11972,7 @@ ] }, { - "group": "قواعد البيانات", + "group": "\u0642\u0648\u0627\u0639\u062f \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", "icon": "database", "pages": [ "ar/tools/database-data/overview", @@ -11961,7 +11987,7 @@ ] }, { - "group": "الذكاء الاصطناعي والتعلّم الآلي", + "group": "\u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0648\u0627\u0644\u062a\u0639\u0644\u0651\u0645 \u0627\u0644\u0622\u0644\u064a", "icon": "brain", "pages": [ "ar/tools/ai-ml/overview", @@ -11975,7 +12001,7 @@ ] }, { - "group": "التخزين السحابي", + "group": "\u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0633\u062d\u0627\u0628\u064a", "icon": "cloud", "pages": [ "ar/tools/cloud-storage/overview", @@ -11994,7 +12020,7 @@ ] }, { - "group": "الأتمتة", + "group": "\u0627\u0644\u0623\u062a\u0645\u062a\u0629", "icon": "bolt", "pages": [ "ar/tools/automation/overview", @@ -12029,7 +12055,7 @@ ] }, { - "group": "التعلّم", + "group": "\u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/learn/overview", "ar/learn/llm-selection-guide", @@ -12066,17 +12092,17 @@ ] }, { - "tab": "المؤسسات", + "tab": "\u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062a", "icon": "briefcase", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/enterprise/introduction" ] }, { - "group": "البناء", + "group": "\u0627\u0644\u0628\u0646\u0627\u0621", "pages": [ "ar/enterprise/features/automations", "ar/enterprise/features/crew-studio", @@ -12087,7 +12113,7 @@ ] }, { - "group": "العمليات", + "group": "\u0627\u0644\u0639\u0645\u0644\u064a\u0627\u062a", "pages": [ "ar/enterprise/features/traces", "ar/enterprise/features/webhook-streaming", @@ -12096,13 +12122,13 @@ ] }, { - "group": "الإدارة", + "group": "\u0627\u0644\u0625\u062f\u0627\u0631\u0629", "pages": [ "ar/enterprise/features/rbac" ] }, { - "group": "التكاملات", + "group": "\u0627\u0644\u062a\u0643\u0627\u0645\u0644\u0627\u062a", "pages": [ "ar/enterprise/integrations/asana", "ar/enterprise/integrations/box", @@ -12154,7 +12180,7 @@ ] }, { - "group": "المشغّلات", + "group": "\u0627\u0644\u0645\u0634\u063a\u0651\u0644\u0627\u062a", "pages": [ "ar/enterprise/guides/automation-triggers", "ar/enterprise/guides/gmail-trigger", @@ -12170,7 +12196,7 @@ ] }, { - "group": "موارد التعلّم", + "group": "\u0645\u0648\u0627\u0631\u062f \u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/enterprise/resources/frequently-asked-questions" ] @@ -12178,11 +12204,11 @@ ] }, { - "tab": "API المرجع", + "tab": "API \u0627\u0644\u0645\u0631\u062c\u0639", "icon": "magnifying-glass", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/api-reference/introduction", "ar/api-reference/inputs", @@ -12194,11 +12220,11 @@ ] }, { - "tab": "أمثلة", + "tab": "\u0623\u0645\u062b\u0644\u0629", "icon": "code", "groups": [ { - "group": "أمثلة", + "group": "\u0623\u0645\u062b\u0644\u0629", "pages": [ "ar/examples/example", "ar/examples/cookbooks" @@ -12207,11 +12233,11 @@ ] }, { - "tab": "التغييرات السجلات", + "tab": "\u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0627\u0644\u0633\u062c\u0644\u0627\u062a", "icon": "clock", "groups": [ { - "group": "سجل التغييرات", + "group": "\u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a", "pages": [ "ar/changelog" ] @@ -12224,11 +12250,11 @@ "version": "v1.12.1", "tabs": [ { - "tab": "الرئيسية", + "tab": "\u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629", "icon": "house", "groups": [ { - "group": "مرحباً", + "group": "\u0645\u0631\u062d\u0628\u0627\u064b", "pages": [ "ar/index" ] @@ -12236,11 +12262,11 @@ ] }, { - "tab": "التقنية التوثيق", + "tab": "\u0627\u0644\u062a\u0642\u0646\u064a\u0629 \u0627\u0644\u062a\u0648\u062b\u064a\u0642", "icon": "book-open", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/introduction", "ar/installation", @@ -12248,31 +12274,31 @@ ] }, { - "group": "الأدلّة", + "group": "\u0627\u0644\u0623\u062f\u0644\u0651\u0629", "pages": [ { - "group": "الاستراتيجية", + "group": "\u0627\u0644\u0627\u0633\u062a\u0631\u0627\u062a\u064a\u062c\u064a\u0629", "icon": "compass", "pages": [ "ar/guides/concepts/evaluating-use-cases" ] }, { - "group": "الوكلاء", + "group": "\u0627\u0644\u0648\u0643\u0644\u0627\u0621", "icon": "user", "pages": [ "ar/guides/agents/crafting-effective-agents" ] }, { - "group": "الطواقم", + "group": "\u0627\u0644\u0637\u0648\u0627\u0642\u0645", "icon": "users", "pages": [ "ar/guides/crews/first-crew" ] }, { - "group": "التدفقات", + "group": "\u0627\u0644\u062a\u062f\u0641\u0642\u0627\u062a", "icon": "code-branch", "pages": [ "ar/guides/flows/first-flow", @@ -12280,21 +12306,21 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "icon": "wrench", "pages": [ "ar/guides/tools/publish-custom-tools" ] }, { - "group": "أدوات البرمجة", + "group": "\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0628\u0631\u0645\u062c\u0629", "icon": "terminal", "pages": [ "ar/guides/coding-tools/agents-md" ] }, { - "group": "متقدّم", + "group": "\u0645\u062a\u0642\u062f\u0651\u0645", "icon": "gear", "pages": [ "ar/guides/advanced/customizing-prompts", @@ -12302,7 +12328,7 @@ ] }, { - "group": "الترحيل", + "group": "\u0627\u0644\u062a\u0631\u062d\u064a\u0644", "icon": "shuffle", "pages": [ "ar/guides/migration/migrating-from-langgraph" @@ -12311,7 +12337,7 @@ ] }, { - "group": "المفاهيم الأساسية", + "group": "\u0627\u0644\u0645\u0641\u0627\u0647\u064a\u0645 \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629", "pages": [ "ar/concepts/agents", "ar/concepts/tasks", @@ -12331,11 +12357,12 @@ "ar/concepts/testing", "ar/concepts/cli", "ar/concepts/tools", - "ar/concepts/event-listener" + "ar/concepts/event-listener", + "ar/concepts/checkpointing" ] }, { - "group": "تكامل MCP", + "group": "\u062a\u0643\u0627\u0645\u0644 MCP", "pages": [ "ar/mcp/overview", "ar/mcp/dsl-integration", @@ -12347,11 +12374,11 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "pages": [ "ar/tools/overview", { - "group": "الملفات والمستندات", + "group": "\u0627\u0644\u0645\u0644\u0641\u0627\u062a \u0648\u0627\u0644\u0645\u0633\u062a\u0646\u062f\u0627\u062a", "icon": "folder-open", "pages": [ "ar/tools/file-document/overview", @@ -12371,7 +12398,7 @@ ] }, { - "group": "استخراج بيانات الويب", + "group": "\u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0648\u064a\u0628", "icon": "globe", "pages": [ "ar/tools/web-scraping/overview", @@ -12391,7 +12418,7 @@ ] }, { - "group": "البحث والاستكشاف", + "group": "\u0627\u0644\u0628\u062d\u062b \u0648\u0627\u0644\u0627\u0633\u062a\u0643\u0634\u0627\u0641", "icon": "magnifying-glass", "pages": [ "ar/tools/search-research/overview", @@ -12413,7 +12440,7 @@ ] }, { - "group": "قواعد البيانات", + "group": "\u0642\u0648\u0627\u0639\u062f \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", "icon": "database", "pages": [ "ar/tools/database-data/overview", @@ -12428,7 +12455,7 @@ ] }, { - "group": "الذكاء الاصطناعي والتعلّم الآلي", + "group": "\u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0648\u0627\u0644\u062a\u0639\u0644\u0651\u0645 \u0627\u0644\u0622\u0644\u064a", "icon": "brain", "pages": [ "ar/tools/ai-ml/overview", @@ -12442,7 +12469,7 @@ ] }, { - "group": "التخزين السحابي", + "group": "\u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0633\u062d\u0627\u0628\u064a", "icon": "cloud", "pages": [ "ar/tools/cloud-storage/overview", @@ -12461,7 +12488,7 @@ ] }, { - "group": "الأتمتة", + "group": "\u0627\u0644\u0623\u062a\u0645\u062a\u0629", "icon": "bolt", "pages": [ "ar/tools/automation/overview", @@ -12496,7 +12523,7 @@ ] }, { - "group": "التعلّم", + "group": "\u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/learn/overview", "ar/learn/llm-selection-guide", @@ -12533,17 +12560,17 @@ ] }, { - "tab": "المؤسسات", + "tab": "\u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062a", "icon": "briefcase", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/enterprise/introduction" ] }, { - "group": "البناء", + "group": "\u0627\u0644\u0628\u0646\u0627\u0621", "pages": [ "ar/enterprise/features/automations", "ar/enterprise/features/crew-studio", @@ -12554,7 +12581,7 @@ ] }, { - "group": "العمليات", + "group": "\u0627\u0644\u0639\u0645\u0644\u064a\u0627\u062a", "pages": [ "ar/enterprise/features/traces", "ar/enterprise/features/webhook-streaming", @@ -12563,13 +12590,13 @@ ] }, { - "group": "الإدارة", + "group": "\u0627\u0644\u0625\u062f\u0627\u0631\u0629", "pages": [ "ar/enterprise/features/rbac" ] }, { - "group": "التكاملات", + "group": "\u0627\u0644\u062a\u0643\u0627\u0645\u0644\u0627\u062a", "pages": [ "ar/enterprise/integrations/asana", "ar/enterprise/integrations/box", @@ -12621,7 +12648,7 @@ ] }, { - "group": "المشغّلات", + "group": "\u0627\u0644\u0645\u0634\u063a\u0651\u0644\u0627\u062a", "pages": [ "ar/enterprise/guides/automation-triggers", "ar/enterprise/guides/gmail-trigger", @@ -12637,7 +12664,7 @@ ] }, { - "group": "موارد التعلّم", + "group": "\u0645\u0648\u0627\u0631\u062f \u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/enterprise/resources/frequently-asked-questions" ] @@ -12645,11 +12672,11 @@ ] }, { - "tab": "API المرجع", + "tab": "API \u0627\u0644\u0645\u0631\u062c\u0639", "icon": "magnifying-glass", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/api-reference/introduction", "ar/api-reference/inputs", @@ -12661,11 +12688,11 @@ ] }, { - "tab": "أمثلة", + "tab": "\u0623\u0645\u062b\u0644\u0629", "icon": "code", "groups": [ { - "group": "أمثلة", + "group": "\u0623\u0645\u062b\u0644\u0629", "pages": [ "ar/examples/example", "ar/examples/cookbooks" @@ -12674,11 +12701,11 @@ ] }, { - "tab": "التغييرات السجلات", + "tab": "\u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0627\u0644\u0633\u062c\u0644\u0627\u062a", "icon": "clock", "groups": [ { - "group": "سجل التغييرات", + "group": "\u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a", "pages": [ "ar/changelog" ] @@ -12691,11 +12718,11 @@ "version": "v1.12.0", "tabs": [ { - "tab": "الرئيسية", + "tab": "\u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629", "icon": "house", "groups": [ { - "group": "مرحباً", + "group": "\u0645\u0631\u062d\u0628\u0627\u064b", "pages": [ "ar/index" ] @@ -12703,11 +12730,11 @@ ] }, { - "tab": "التقنية التوثيق", + "tab": "\u0627\u0644\u062a\u0642\u0646\u064a\u0629 \u0627\u0644\u062a\u0648\u062b\u064a\u0642", "icon": "book-open", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/introduction", "ar/installation", @@ -12715,31 +12742,31 @@ ] }, { - "group": "الأدلّة", + "group": "\u0627\u0644\u0623\u062f\u0644\u0651\u0629", "pages": [ { - "group": "الاستراتيجية", + "group": "\u0627\u0644\u0627\u0633\u062a\u0631\u0627\u062a\u064a\u062c\u064a\u0629", "icon": "compass", "pages": [ "ar/guides/concepts/evaluating-use-cases" ] }, { - "group": "الوكلاء", + "group": "\u0627\u0644\u0648\u0643\u0644\u0627\u0621", "icon": "user", "pages": [ "ar/guides/agents/crafting-effective-agents" ] }, { - "group": "الطواقم", + "group": "\u0627\u0644\u0637\u0648\u0627\u0642\u0645", "icon": "users", "pages": [ "ar/guides/crews/first-crew" ] }, { - "group": "التدفقات", + "group": "\u0627\u0644\u062a\u062f\u0641\u0642\u0627\u062a", "icon": "code-branch", "pages": [ "ar/guides/flows/first-flow", @@ -12747,21 +12774,21 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "icon": "wrench", "pages": [ "ar/guides/tools/publish-custom-tools" ] }, { - "group": "أدوات البرمجة", + "group": "\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0628\u0631\u0645\u062c\u0629", "icon": "terminal", "pages": [ "ar/guides/coding-tools/agents-md" ] }, { - "group": "متقدّم", + "group": "\u0645\u062a\u0642\u062f\u0651\u0645", "icon": "gear", "pages": [ "ar/guides/advanced/customizing-prompts", @@ -12769,7 +12796,7 @@ ] }, { - "group": "الترحيل", + "group": "\u0627\u0644\u062a\u0631\u062d\u064a\u0644", "icon": "shuffle", "pages": [ "ar/guides/migration/migrating-from-langgraph" @@ -12778,7 +12805,7 @@ ] }, { - "group": "المفاهيم الأساسية", + "group": "\u0627\u0644\u0645\u0641\u0627\u0647\u064a\u0645 \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629", "pages": [ "ar/concepts/agents", "ar/concepts/tasks", @@ -12798,11 +12825,12 @@ "ar/concepts/testing", "ar/concepts/cli", "ar/concepts/tools", - "ar/concepts/event-listener" + "ar/concepts/event-listener", + "ar/concepts/checkpointing" ] }, { - "group": "تكامل MCP", + "group": "\u062a\u0643\u0627\u0645\u0644 MCP", "pages": [ "ar/mcp/overview", "ar/mcp/dsl-integration", @@ -12814,11 +12842,11 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "pages": [ "ar/tools/overview", { - "group": "الملفات والمستندات", + "group": "\u0627\u0644\u0645\u0644\u0641\u0627\u062a \u0648\u0627\u0644\u0645\u0633\u062a\u0646\u062f\u0627\u062a", "icon": "folder-open", "pages": [ "ar/tools/file-document/overview", @@ -12838,7 +12866,7 @@ ] }, { - "group": "استخراج بيانات الويب", + "group": "\u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0648\u064a\u0628", "icon": "globe", "pages": [ "ar/tools/web-scraping/overview", @@ -12858,7 +12886,7 @@ ] }, { - "group": "البحث والاستكشاف", + "group": "\u0627\u0644\u0628\u062d\u062b \u0648\u0627\u0644\u0627\u0633\u062a\u0643\u0634\u0627\u0641", "icon": "magnifying-glass", "pages": [ "ar/tools/search-research/overview", @@ -12880,7 +12908,7 @@ ] }, { - "group": "قواعد البيانات", + "group": "\u0642\u0648\u0627\u0639\u062f \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", "icon": "database", "pages": [ "ar/tools/database-data/overview", @@ -12895,7 +12923,7 @@ ] }, { - "group": "الذكاء الاصطناعي والتعلّم الآلي", + "group": "\u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0648\u0627\u0644\u062a\u0639\u0644\u0651\u0645 \u0627\u0644\u0622\u0644\u064a", "icon": "brain", "pages": [ "ar/tools/ai-ml/overview", @@ -12909,7 +12937,7 @@ ] }, { - "group": "التخزين السحابي", + "group": "\u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0633\u062d\u0627\u0628\u064a", "icon": "cloud", "pages": [ "ar/tools/cloud-storage/overview", @@ -12928,7 +12956,7 @@ ] }, { - "group": "الأتمتة", + "group": "\u0627\u0644\u0623\u062a\u0645\u062a\u0629", "icon": "bolt", "pages": [ "ar/tools/automation/overview", @@ -12963,7 +12991,7 @@ ] }, { - "group": "التعلّم", + "group": "\u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/learn/overview", "ar/learn/llm-selection-guide", @@ -13000,17 +13028,17 @@ ] }, { - "tab": "المؤسسات", + "tab": "\u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062a", "icon": "briefcase", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/enterprise/introduction" ] }, { - "group": "البناء", + "group": "\u0627\u0644\u0628\u0646\u0627\u0621", "pages": [ "ar/enterprise/features/automations", "ar/enterprise/features/crew-studio", @@ -13021,7 +13049,7 @@ ] }, { - "group": "العمليات", + "group": "\u0627\u0644\u0639\u0645\u0644\u064a\u0627\u062a", "pages": [ "ar/enterprise/features/traces", "ar/enterprise/features/webhook-streaming", @@ -13030,13 +13058,13 @@ ] }, { - "group": "الإدارة", + "group": "\u0627\u0644\u0625\u062f\u0627\u0631\u0629", "pages": [ "ar/enterprise/features/rbac" ] }, { - "group": "التكاملات", + "group": "\u0627\u0644\u062a\u0643\u0627\u0645\u0644\u0627\u062a", "pages": [ "ar/enterprise/integrations/asana", "ar/enterprise/integrations/box", @@ -13088,7 +13116,7 @@ ] }, { - "group": "المشغّلات", + "group": "\u0627\u0644\u0645\u0634\u063a\u0651\u0644\u0627\u062a", "pages": [ "ar/enterprise/guides/automation-triggers", "ar/enterprise/guides/gmail-trigger", @@ -13104,7 +13132,7 @@ ] }, { - "group": "موارد التعلّم", + "group": "\u0645\u0648\u0627\u0631\u062f \u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/enterprise/resources/frequently-asked-questions" ] @@ -13112,11 +13140,11 @@ ] }, { - "tab": "API المرجع", + "tab": "API \u0627\u0644\u0645\u0631\u062c\u0639", "icon": "magnifying-glass", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/api-reference/introduction", "ar/api-reference/inputs", @@ -13128,11 +13156,11 @@ ] }, { - "tab": "أمثلة", + "tab": "\u0623\u0645\u062b\u0644\u0629", "icon": "code", "groups": [ { - "group": "أمثلة", + "group": "\u0623\u0645\u062b\u0644\u0629", "pages": [ "ar/examples/example", "ar/examples/cookbooks" @@ -13141,11 +13169,11 @@ ] }, { - "tab": "التغييرات السجلات", + "tab": "\u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0627\u0644\u0633\u062c\u0644\u0627\u062a", "icon": "clock", "groups": [ { - "group": "سجل التغييرات", + "group": "\u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a", "pages": [ "ar/changelog" ] @@ -13158,11 +13186,11 @@ "version": "v1.11.1", "tabs": [ { - "tab": "الرئيسية", + "tab": "\u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629", "icon": "house", "groups": [ { - "group": "مرحباً", + "group": "\u0645\u0631\u062d\u0628\u0627\u064b", "pages": [ "ar/index" ] @@ -13170,11 +13198,11 @@ ] }, { - "tab": "التقنية التوثيق", + "tab": "\u0627\u0644\u062a\u0642\u0646\u064a\u0629 \u0627\u0644\u062a\u0648\u062b\u064a\u0642", "icon": "book-open", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/introduction", "ar/installation", @@ -13182,31 +13210,31 @@ ] }, { - "group": "الأدلّة", + "group": "\u0627\u0644\u0623\u062f\u0644\u0651\u0629", "pages": [ { - "group": "الاستراتيجية", + "group": "\u0627\u0644\u0627\u0633\u062a\u0631\u0627\u062a\u064a\u062c\u064a\u0629", "icon": "compass", "pages": [ "ar/guides/concepts/evaluating-use-cases" ] }, { - "group": "الوكلاء", + "group": "\u0627\u0644\u0648\u0643\u0644\u0627\u0621", "icon": "user", "pages": [ "ar/guides/agents/crafting-effective-agents" ] }, { - "group": "الطواقم", + "group": "\u0627\u0644\u0637\u0648\u0627\u0642\u0645", "icon": "users", "pages": [ "ar/guides/crews/first-crew" ] }, { - "group": "التدفقات", + "group": "\u0627\u0644\u062a\u062f\u0641\u0642\u0627\u062a", "icon": "code-branch", "pages": [ "ar/guides/flows/first-flow", @@ -13214,21 +13242,21 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "icon": "wrench", "pages": [ "ar/guides/tools/publish-custom-tools" ] }, { - "group": "أدوات البرمجة", + "group": "\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0628\u0631\u0645\u062c\u0629", "icon": "terminal", "pages": [ "ar/guides/coding-tools/agents-md" ] }, { - "group": "متقدّم", + "group": "\u0645\u062a\u0642\u062f\u0651\u0645", "icon": "gear", "pages": [ "ar/guides/advanced/customizing-prompts", @@ -13236,7 +13264,7 @@ ] }, { - "group": "الترحيل", + "group": "\u0627\u0644\u062a\u0631\u062d\u064a\u0644", "icon": "shuffle", "pages": [ "ar/guides/migration/migrating-from-langgraph" @@ -13245,7 +13273,7 @@ ] }, { - "group": "المفاهيم الأساسية", + "group": "\u0627\u0644\u0645\u0641\u0627\u0647\u064a\u0645 \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629", "pages": [ "ar/concepts/agents", "ar/concepts/tasks", @@ -13265,11 +13293,12 @@ "ar/concepts/testing", "ar/concepts/cli", "ar/concepts/tools", - "ar/concepts/event-listener" + "ar/concepts/event-listener", + "ar/concepts/checkpointing" ] }, { - "group": "تكامل MCP", + "group": "\u062a\u0643\u0627\u0645\u0644 MCP", "pages": [ "ar/mcp/overview", "ar/mcp/dsl-integration", @@ -13281,11 +13310,11 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "pages": [ "ar/tools/overview", { - "group": "الملفات والمستندات", + "group": "\u0627\u0644\u0645\u0644\u0641\u0627\u062a \u0648\u0627\u0644\u0645\u0633\u062a\u0646\u062f\u0627\u062a", "icon": "folder-open", "pages": [ "ar/tools/file-document/overview", @@ -13305,7 +13334,7 @@ ] }, { - "group": "استخراج بيانات الويب", + "group": "\u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0648\u064a\u0628", "icon": "globe", "pages": [ "ar/tools/web-scraping/overview", @@ -13325,7 +13354,7 @@ ] }, { - "group": "البحث والاستكشاف", + "group": "\u0627\u0644\u0628\u062d\u062b \u0648\u0627\u0644\u0627\u0633\u062a\u0643\u0634\u0627\u0641", "icon": "magnifying-glass", "pages": [ "ar/tools/search-research/overview", @@ -13347,7 +13376,7 @@ ] }, { - "group": "قواعد البيانات", + "group": "\u0642\u0648\u0627\u0639\u062f \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", "icon": "database", "pages": [ "ar/tools/database-data/overview", @@ -13362,7 +13391,7 @@ ] }, { - "group": "الذكاء الاصطناعي والتعلّم الآلي", + "group": "\u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0648\u0627\u0644\u062a\u0639\u0644\u0651\u0645 \u0627\u0644\u0622\u0644\u064a", "icon": "brain", "pages": [ "ar/tools/ai-ml/overview", @@ -13376,7 +13405,7 @@ ] }, { - "group": "التخزين السحابي", + "group": "\u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0633\u062d\u0627\u0628\u064a", "icon": "cloud", "pages": [ "ar/tools/cloud-storage/overview", @@ -13395,7 +13424,7 @@ ] }, { - "group": "الأتمتة", + "group": "\u0627\u0644\u0623\u062a\u0645\u062a\u0629", "icon": "bolt", "pages": [ "ar/tools/automation/overview", @@ -13430,7 +13459,7 @@ ] }, { - "group": "التعلّم", + "group": "\u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/learn/overview", "ar/learn/llm-selection-guide", @@ -13467,17 +13496,17 @@ ] }, { - "tab": "المؤسسات", + "tab": "\u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062a", "icon": "briefcase", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/enterprise/introduction" ] }, { - "group": "البناء", + "group": "\u0627\u0644\u0628\u0646\u0627\u0621", "pages": [ "ar/enterprise/features/automations", "ar/enterprise/features/crew-studio", @@ -13488,7 +13517,7 @@ ] }, { - "group": "العمليات", + "group": "\u0627\u0644\u0639\u0645\u0644\u064a\u0627\u062a", "pages": [ "ar/enterprise/features/traces", "ar/enterprise/features/webhook-streaming", @@ -13497,13 +13526,13 @@ ] }, { - "group": "الإدارة", + "group": "\u0627\u0644\u0625\u062f\u0627\u0631\u0629", "pages": [ "ar/enterprise/features/rbac" ] }, { - "group": "التكاملات", + "group": "\u0627\u0644\u062a\u0643\u0627\u0645\u0644\u0627\u062a", "pages": [ "ar/enterprise/integrations/asana", "ar/enterprise/integrations/box", @@ -13555,7 +13584,7 @@ ] }, { - "group": "المشغّلات", + "group": "\u0627\u0644\u0645\u0634\u063a\u0651\u0644\u0627\u062a", "pages": [ "ar/enterprise/guides/automation-triggers", "ar/enterprise/guides/gmail-trigger", @@ -13571,7 +13600,7 @@ ] }, { - "group": "موارد التعلّم", + "group": "\u0645\u0648\u0627\u0631\u062f \u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/enterprise/resources/frequently-asked-questions" ] @@ -13579,11 +13608,11 @@ ] }, { - "tab": "API المرجع", + "tab": "API \u0627\u0644\u0645\u0631\u062c\u0639", "icon": "magnifying-glass", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/api-reference/introduction", "ar/api-reference/inputs", @@ -13595,11 +13624,11 @@ ] }, { - "tab": "أمثلة", + "tab": "\u0623\u0645\u062b\u0644\u0629", "icon": "code", "groups": [ { - "group": "أمثلة", + "group": "\u0623\u0645\u062b\u0644\u0629", "pages": [ "ar/examples/example", "ar/examples/cookbooks" @@ -13608,11 +13637,11 @@ ] }, { - "tab": "التغييرات السجلات", + "tab": "\u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0627\u0644\u0633\u062c\u0644\u0627\u062a", "icon": "clock", "groups": [ { - "group": "سجل التغييرات", + "group": "\u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a", "pages": [ "ar/changelog" ] @@ -13625,11 +13654,11 @@ "version": "v1.11.0", "tabs": [ { - "tab": "الرئيسية", + "tab": "\u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629", "icon": "house", "groups": [ { - "group": "مرحباً", + "group": "\u0645\u0631\u062d\u0628\u0627\u064b", "pages": [ "ar/index" ] @@ -13637,11 +13666,11 @@ ] }, { - "tab": "التقنية التوثيق", + "tab": "\u0627\u0644\u062a\u0642\u0646\u064a\u0629 \u0627\u0644\u062a\u0648\u062b\u064a\u0642", "icon": "book-open", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/introduction", "ar/installation", @@ -13649,31 +13678,31 @@ ] }, { - "group": "الأدلّة", + "group": "\u0627\u0644\u0623\u062f\u0644\u0651\u0629", "pages": [ { - "group": "الاستراتيجية", + "group": "\u0627\u0644\u0627\u0633\u062a\u0631\u0627\u062a\u064a\u062c\u064a\u0629", "icon": "compass", "pages": [ "ar/guides/concepts/evaluating-use-cases" ] }, { - "group": "الوكلاء", + "group": "\u0627\u0644\u0648\u0643\u0644\u0627\u0621", "icon": "user", "pages": [ "ar/guides/agents/crafting-effective-agents" ] }, { - "group": "الطواقم", + "group": "\u0627\u0644\u0637\u0648\u0627\u0642\u0645", "icon": "users", "pages": [ "ar/guides/crews/first-crew" ] }, { - "group": "التدفقات", + "group": "\u0627\u0644\u062a\u062f\u0641\u0642\u0627\u062a", "icon": "code-branch", "pages": [ "ar/guides/flows/first-flow", @@ -13681,21 +13710,21 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "icon": "wrench", "pages": [ "ar/guides/tools/publish-custom-tools" ] }, { - "group": "أدوات البرمجة", + "group": "\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0628\u0631\u0645\u062c\u0629", "icon": "terminal", "pages": [ "ar/guides/coding-tools/agents-md" ] }, { - "group": "متقدّم", + "group": "\u0645\u062a\u0642\u062f\u0651\u0645", "icon": "gear", "pages": [ "ar/guides/advanced/customizing-prompts", @@ -13703,7 +13732,7 @@ ] }, { - "group": "الترحيل", + "group": "\u0627\u0644\u062a\u0631\u062d\u064a\u0644", "icon": "shuffle", "pages": [ "ar/guides/migration/migrating-from-langgraph" @@ -13712,7 +13741,7 @@ ] }, { - "group": "المفاهيم الأساسية", + "group": "\u0627\u0644\u0645\u0641\u0627\u0647\u064a\u0645 \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629", "pages": [ "ar/concepts/agents", "ar/concepts/tasks", @@ -13731,11 +13760,12 @@ "ar/concepts/testing", "ar/concepts/cli", "ar/concepts/tools", - "ar/concepts/event-listener" + "ar/concepts/event-listener", + "ar/concepts/checkpointing" ] }, { - "group": "تكامل MCP", + "group": "\u062a\u0643\u0627\u0645\u0644 MCP", "pages": [ "ar/mcp/overview", "ar/mcp/dsl-integration", @@ -13747,11 +13777,11 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "pages": [ "ar/tools/overview", { - "group": "الملفات والمستندات", + "group": "\u0627\u0644\u0645\u0644\u0641\u0627\u062a \u0648\u0627\u0644\u0645\u0633\u062a\u0646\u062f\u0627\u062a", "icon": "folder-open", "pages": [ "ar/tools/file-document/overview", @@ -13771,7 +13801,7 @@ ] }, { - "group": "استخراج بيانات الويب", + "group": "\u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0648\u064a\u0628", "icon": "globe", "pages": [ "ar/tools/web-scraping/overview", @@ -13791,7 +13821,7 @@ ] }, { - "group": "البحث والاستكشاف", + "group": "\u0627\u0644\u0628\u062d\u062b \u0648\u0627\u0644\u0627\u0633\u062a\u0643\u0634\u0627\u0641", "icon": "magnifying-glass", "pages": [ "ar/tools/search-research/overview", @@ -13813,7 +13843,7 @@ ] }, { - "group": "قواعد البيانات", + "group": "\u0642\u0648\u0627\u0639\u062f \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", "icon": "database", "pages": [ "ar/tools/database-data/overview", @@ -13828,7 +13858,7 @@ ] }, { - "group": "الذكاء الاصطناعي والتعلّم الآلي", + "group": "\u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0648\u0627\u0644\u062a\u0639\u0644\u0651\u0645 \u0627\u0644\u0622\u0644\u064a", "icon": "brain", "pages": [ "ar/tools/ai-ml/overview", @@ -13842,7 +13872,7 @@ ] }, { - "group": "التخزين السحابي", + "group": "\u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0633\u062d\u0627\u0628\u064a", "icon": "cloud", "pages": [ "ar/tools/cloud-storage/overview", @@ -13861,7 +13891,7 @@ ] }, { - "group": "الأتمتة", + "group": "\u0627\u0644\u0623\u062a\u0645\u062a\u0629", "icon": "bolt", "pages": [ "ar/tools/automation/overview", @@ -13896,7 +13926,7 @@ ] }, { - "group": "التعلّم", + "group": "\u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/learn/overview", "ar/learn/llm-selection-guide", @@ -13933,17 +13963,17 @@ ] }, { - "tab": "المؤسسات", + "tab": "\u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062a", "icon": "briefcase", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/enterprise/introduction" ] }, { - "group": "البناء", + "group": "\u0627\u0644\u0628\u0646\u0627\u0621", "pages": [ "ar/enterprise/features/automations", "ar/enterprise/features/crew-studio", @@ -13954,7 +13984,7 @@ ] }, { - "group": "العمليات", + "group": "\u0627\u0644\u0639\u0645\u0644\u064a\u0627\u062a", "pages": [ "ar/enterprise/features/traces", "ar/enterprise/features/webhook-streaming", @@ -13963,13 +13993,13 @@ ] }, { - "group": "الإدارة", + "group": "\u0627\u0644\u0625\u062f\u0627\u0631\u0629", "pages": [ "ar/enterprise/features/rbac" ] }, { - "group": "التكاملات", + "group": "\u0627\u0644\u062a\u0643\u0627\u0645\u0644\u0627\u062a", "pages": [ "ar/enterprise/integrations/asana", "ar/enterprise/integrations/box", @@ -14021,7 +14051,7 @@ ] }, { - "group": "المشغّلات", + "group": "\u0627\u0644\u0645\u0634\u063a\u0651\u0644\u0627\u062a", "pages": [ "ar/enterprise/guides/automation-triggers", "ar/enterprise/guides/gmail-trigger", @@ -14037,7 +14067,7 @@ ] }, { - "group": "موارد التعلّم", + "group": "\u0645\u0648\u0627\u0631\u062f \u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/enterprise/resources/frequently-asked-questions" ] @@ -14045,11 +14075,11 @@ ] }, { - "tab": "API المرجع", + "tab": "API \u0627\u0644\u0645\u0631\u062c\u0639", "icon": "magnifying-glass", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/api-reference/introduction", "ar/api-reference/inputs", @@ -14061,11 +14091,11 @@ ] }, { - "tab": "أمثلة", + "tab": "\u0623\u0645\u062b\u0644\u0629", "icon": "code", "groups": [ { - "group": "أمثلة", + "group": "\u0623\u0645\u062b\u0644\u0629", "pages": [ "ar/examples/example", "ar/examples/cookbooks" @@ -14074,11 +14104,11 @@ ] }, { - "tab": "التغييرات السجلات", + "tab": "\u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0627\u0644\u0633\u062c\u0644\u0627\u062a", "icon": "clock", "groups": [ { - "group": "سجل التغييرات", + "group": "\u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a", "pages": [ "ar/changelog" ] @@ -14091,11 +14121,11 @@ "version": "v1.10.1", "tabs": [ { - "tab": "الرئيسية", + "tab": "\u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629", "icon": "house", "groups": [ { - "group": "مرحباً", + "group": "\u0645\u0631\u062d\u0628\u0627\u064b", "pages": [ "ar/index" ] @@ -14103,11 +14133,11 @@ ] }, { - "tab": "التقنية التوثيق", + "tab": "\u0627\u0644\u062a\u0642\u0646\u064a\u0629 \u0627\u0644\u062a\u0648\u062b\u064a\u0642", "icon": "book-open", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/introduction", "ar/installation", @@ -14115,31 +14145,31 @@ ] }, { - "group": "الأدلّة", + "group": "\u0627\u0644\u0623\u062f\u0644\u0651\u0629", "pages": [ { - "group": "الاستراتيجية", + "group": "\u0627\u0644\u0627\u0633\u062a\u0631\u0627\u062a\u064a\u062c\u064a\u0629", "icon": "compass", "pages": [ "ar/guides/concepts/evaluating-use-cases" ] }, { - "group": "الوكلاء", + "group": "\u0627\u0644\u0648\u0643\u0644\u0627\u0621", "icon": "user", "pages": [ "ar/guides/agents/crafting-effective-agents" ] }, { - "group": "الطواقم", + "group": "\u0627\u0644\u0637\u0648\u0627\u0642\u0645", "icon": "users", "pages": [ "ar/guides/crews/first-crew" ] }, { - "group": "التدفقات", + "group": "\u0627\u0644\u062a\u062f\u0641\u0642\u0627\u062a", "icon": "code-branch", "pages": [ "ar/guides/flows/first-flow", @@ -14147,21 +14177,21 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "icon": "wrench", "pages": [ "ar/guides/tools/publish-custom-tools" ] }, { - "group": "أدوات البرمجة", + "group": "\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0628\u0631\u0645\u062c\u0629", "icon": "terminal", "pages": [ "ar/guides/coding-tools/agents-md" ] }, { - "group": "متقدّم", + "group": "\u0645\u062a\u0642\u062f\u0651\u0645", "icon": "gear", "pages": [ "ar/guides/advanced/customizing-prompts", @@ -14169,7 +14199,7 @@ ] }, { - "group": "الترحيل", + "group": "\u0627\u0644\u062a\u0631\u062d\u064a\u0644", "icon": "shuffle", "pages": [ "ar/guides/migration/migrating-from-langgraph" @@ -14178,7 +14208,7 @@ ] }, { - "group": "المفاهيم الأساسية", + "group": "\u0627\u0644\u0645\u0641\u0627\u0647\u064a\u0645 \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629", "pages": [ "ar/concepts/agents", "ar/concepts/tasks", @@ -14197,11 +14227,12 @@ "ar/concepts/testing", "ar/concepts/cli", "ar/concepts/tools", - "ar/concepts/event-listener" + "ar/concepts/event-listener", + "ar/concepts/checkpointing" ] }, { - "group": "تكامل MCP", + "group": "\u062a\u0643\u0627\u0645\u0644 MCP", "pages": [ "ar/mcp/overview", "ar/mcp/dsl-integration", @@ -14213,11 +14244,11 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "pages": [ "ar/tools/overview", { - "group": "الملفات والمستندات", + "group": "\u0627\u0644\u0645\u0644\u0641\u0627\u062a \u0648\u0627\u0644\u0645\u0633\u062a\u0646\u062f\u0627\u062a", "icon": "folder-open", "pages": [ "ar/tools/file-document/overview", @@ -14237,7 +14268,7 @@ ] }, { - "group": "استخراج بيانات الويب", + "group": "\u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0648\u064a\u0628", "icon": "globe", "pages": [ "ar/tools/web-scraping/overview", @@ -14257,7 +14288,7 @@ ] }, { - "group": "البحث والاستكشاف", + "group": "\u0627\u0644\u0628\u062d\u062b \u0648\u0627\u0644\u0627\u0633\u062a\u0643\u0634\u0627\u0641", "icon": "magnifying-glass", "pages": [ "ar/tools/search-research/overview", @@ -14279,7 +14310,7 @@ ] }, { - "group": "قواعد البيانات", + "group": "\u0642\u0648\u0627\u0639\u062f \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", "icon": "database", "pages": [ "ar/tools/database-data/overview", @@ -14294,7 +14325,7 @@ ] }, { - "group": "الذكاء الاصطناعي والتعلّم الآلي", + "group": "\u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0648\u0627\u0644\u062a\u0639\u0644\u0651\u0645 \u0627\u0644\u0622\u0644\u064a", "icon": "brain", "pages": [ "ar/tools/ai-ml/overview", @@ -14308,7 +14339,7 @@ ] }, { - "group": "التخزين السحابي", + "group": "\u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0633\u062d\u0627\u0628\u064a", "icon": "cloud", "pages": [ "ar/tools/cloud-storage/overview", @@ -14327,7 +14358,7 @@ ] }, { - "group": "الأتمتة", + "group": "\u0627\u0644\u0623\u062a\u0645\u062a\u0629", "icon": "bolt", "pages": [ "ar/tools/automation/overview", @@ -14362,7 +14393,7 @@ ] }, { - "group": "التعلّم", + "group": "\u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/learn/overview", "ar/learn/llm-selection-guide", @@ -14399,17 +14430,17 @@ ] }, { - "tab": "المؤسسات", + "tab": "\u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062a", "icon": "briefcase", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/enterprise/introduction" ] }, { - "group": "البناء", + "group": "\u0627\u0644\u0628\u0646\u0627\u0621", "pages": [ "ar/enterprise/features/automations", "ar/enterprise/features/crew-studio", @@ -14420,7 +14451,7 @@ ] }, { - "group": "العمليات", + "group": "\u0627\u0644\u0639\u0645\u0644\u064a\u0627\u062a", "pages": [ "ar/enterprise/features/traces", "ar/enterprise/features/webhook-streaming", @@ -14429,13 +14460,13 @@ ] }, { - "group": "الإدارة", + "group": "\u0627\u0644\u0625\u062f\u0627\u0631\u0629", "pages": [ "ar/enterprise/features/rbac" ] }, { - "group": "التكاملات", + "group": "\u0627\u0644\u062a\u0643\u0627\u0645\u0644\u0627\u062a", "pages": [ "ar/enterprise/integrations/asana", "ar/enterprise/integrations/box", @@ -14487,7 +14518,7 @@ ] }, { - "group": "المشغّلات", + "group": "\u0627\u0644\u0645\u0634\u063a\u0651\u0644\u0627\u062a", "pages": [ "ar/enterprise/guides/automation-triggers", "ar/enterprise/guides/gmail-trigger", @@ -14503,7 +14534,7 @@ ] }, { - "group": "موارد التعلّم", + "group": "\u0645\u0648\u0627\u0631\u062f \u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/enterprise/resources/frequently-asked-questions" ] @@ -14511,11 +14542,11 @@ ] }, { - "tab": "API المرجع", + "tab": "API \u0627\u0644\u0645\u0631\u062c\u0639", "icon": "magnifying-glass", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/api-reference/introduction", "ar/api-reference/inputs", @@ -14527,11 +14558,11 @@ ] }, { - "tab": "أمثلة", + "tab": "\u0623\u0645\u062b\u0644\u0629", "icon": "code", "groups": [ { - "group": "أمثلة", + "group": "\u0623\u0645\u062b\u0644\u0629", "pages": [ "ar/examples/example", "ar/examples/cookbooks" @@ -14540,11 +14571,11 @@ ] }, { - "tab": "التغييرات السجلات", + "tab": "\u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0627\u0644\u0633\u062c\u0644\u0627\u062a", "icon": "clock", "groups": [ { - "group": "سجل التغييرات", + "group": "\u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a", "pages": [ "ar/changelog" ] @@ -14557,11 +14588,11 @@ "version": "v1.10.0", "tabs": [ { - "tab": "الرئيسية", + "tab": "\u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629", "icon": "house", "groups": [ { - "group": "مرحباً", + "group": "\u0645\u0631\u062d\u0628\u0627\u064b", "pages": [ "ar/index" ] @@ -14569,11 +14600,11 @@ ] }, { - "tab": "التقنية التوثيق", + "tab": "\u0627\u0644\u062a\u0642\u0646\u064a\u0629 \u0627\u0644\u062a\u0648\u062b\u064a\u0642", "icon": "book-open", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/introduction", "ar/installation", @@ -14581,31 +14612,31 @@ ] }, { - "group": "الأدلّة", + "group": "\u0627\u0644\u0623\u062f\u0644\u0651\u0629", "pages": [ { - "group": "الاستراتيجية", + "group": "\u0627\u0644\u0627\u0633\u062a\u0631\u0627\u062a\u064a\u062c\u064a\u0629", "icon": "compass", "pages": [ "ar/guides/concepts/evaluating-use-cases" ] }, { - "group": "الوكلاء", + "group": "\u0627\u0644\u0648\u0643\u0644\u0627\u0621", "icon": "user", "pages": [ "ar/guides/agents/crafting-effective-agents" ] }, { - "group": "الطواقم", + "group": "\u0627\u0644\u0637\u0648\u0627\u0642\u0645", "icon": "users", "pages": [ "ar/guides/crews/first-crew" ] }, { - "group": "التدفقات", + "group": "\u0627\u0644\u062a\u062f\u0641\u0642\u0627\u062a", "icon": "code-branch", "pages": [ "ar/guides/flows/first-flow", @@ -14613,21 +14644,21 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "icon": "wrench", "pages": [ "ar/guides/tools/publish-custom-tools" ] }, { - "group": "أدوات البرمجة", + "group": "\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0628\u0631\u0645\u062c\u0629", "icon": "terminal", "pages": [ "ar/guides/coding-tools/agents-md" ] }, { - "group": "متقدّم", + "group": "\u0645\u062a\u0642\u062f\u0651\u0645", "icon": "gear", "pages": [ "ar/guides/advanced/customizing-prompts", @@ -14635,7 +14666,7 @@ ] }, { - "group": "الترحيل", + "group": "\u0627\u0644\u062a\u0631\u062d\u064a\u0644", "icon": "shuffle", "pages": [ "ar/guides/migration/migrating-from-langgraph" @@ -14644,7 +14675,7 @@ ] }, { - "group": "المفاهيم الأساسية", + "group": "\u0627\u0644\u0645\u0641\u0627\u0647\u064a\u0645 \u0627\u0644\u0623\u0633\u0627\u0633\u064a\u0629", "pages": [ "ar/concepts/agents", "ar/concepts/tasks", @@ -14664,11 +14695,12 @@ "ar/concepts/testing", "ar/concepts/cli", "ar/concepts/tools", - "ar/concepts/event-listener" + "ar/concepts/event-listener", + "ar/concepts/checkpointing" ] }, { - "group": "تكامل MCP", + "group": "\u062a\u0643\u0627\u0645\u0644 MCP", "pages": [ "ar/mcp/overview", "ar/mcp/dsl-integration", @@ -14680,11 +14712,11 @@ ] }, { - "group": "الأدوات", + "group": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", "pages": [ "ar/tools/overview", { - "group": "الملفات والمستندات", + "group": "\u0627\u0644\u0645\u0644\u0641\u0627\u062a \u0648\u0627\u0644\u0645\u0633\u062a\u0646\u062f\u0627\u062a", "icon": "folder-open", "pages": [ "ar/tools/file-document/overview", @@ -14704,7 +14736,7 @@ ] }, { - "group": "استخراج بيانات الويب", + "group": "\u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0648\u064a\u0628", "icon": "globe", "pages": [ "ar/tools/web-scraping/overview", @@ -14724,7 +14756,7 @@ ] }, { - "group": "البحث والاستكشاف", + "group": "\u0627\u0644\u0628\u062d\u062b \u0648\u0627\u0644\u0627\u0633\u062a\u0643\u0634\u0627\u0641", "icon": "magnifying-glass", "pages": [ "ar/tools/search-research/overview", @@ -14746,7 +14778,7 @@ ] }, { - "group": "قواعد البيانات", + "group": "\u0642\u0648\u0627\u0639\u062f \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a", "icon": "database", "pages": [ "ar/tools/database-data/overview", @@ -14761,7 +14793,7 @@ ] }, { - "group": "الذكاء الاصطناعي والتعلّم الآلي", + "group": "\u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0648\u0627\u0644\u062a\u0639\u0644\u0651\u0645 \u0627\u0644\u0622\u0644\u064a", "icon": "brain", "pages": [ "ar/tools/ai-ml/overview", @@ -14775,7 +14807,7 @@ ] }, { - "group": "التخزين السحابي", + "group": "\u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0633\u062d\u0627\u0628\u064a", "icon": "cloud", "pages": [ "ar/tools/cloud-storage/overview", @@ -14794,7 +14826,7 @@ ] }, { - "group": "الأتمتة", + "group": "\u0627\u0644\u0623\u062a\u0645\u062a\u0629", "icon": "bolt", "pages": [ "ar/tools/automation/overview", @@ -14829,7 +14861,7 @@ ] }, { - "group": "التعلّم", + "group": "\u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/learn/overview", "ar/learn/llm-selection-guide", @@ -14866,17 +14898,17 @@ ] }, { - "tab": "المؤسسات", + "tab": "\u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062a", "icon": "briefcase", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/enterprise/introduction" ] }, { - "group": "البناء", + "group": "\u0627\u0644\u0628\u0646\u0627\u0621", "pages": [ "ar/enterprise/features/automations", "ar/enterprise/features/crew-studio", @@ -14887,7 +14919,7 @@ ] }, { - "group": "العمليات", + "group": "\u0627\u0644\u0639\u0645\u0644\u064a\u0627\u062a", "pages": [ "ar/enterprise/features/traces", "ar/enterprise/features/webhook-streaming", @@ -14896,13 +14928,13 @@ ] }, { - "group": "الإدارة", + "group": "\u0627\u0644\u0625\u062f\u0627\u0631\u0629", "pages": [ "ar/enterprise/features/rbac" ] }, { - "group": "التكاملات", + "group": "\u0627\u0644\u062a\u0643\u0627\u0645\u0644\u0627\u062a", "pages": [ "ar/enterprise/integrations/asana", "ar/enterprise/integrations/box", @@ -14954,7 +14986,7 @@ ] }, { - "group": "المشغّلات", + "group": "\u0627\u0644\u0645\u0634\u063a\u0651\u0644\u0627\u062a", "pages": [ "ar/enterprise/guides/automation-triggers", "ar/enterprise/guides/gmail-trigger", @@ -14970,7 +15002,7 @@ ] }, { - "group": "موارد التعلّم", + "group": "\u0645\u0648\u0627\u0631\u062f \u0627\u0644\u062a\u0639\u0644\u0651\u0645", "pages": [ "ar/enterprise/resources/frequently-asked-questions" ] @@ -14978,11 +15010,11 @@ ] }, { - "tab": "API المرجع", + "tab": "API \u0627\u0644\u0645\u0631\u062c\u0639", "icon": "magnifying-glass", "groups": [ { - "group": "البدء", + "group": "\u0627\u0644\u0628\u062f\u0621", "pages": [ "ar/api-reference/introduction", "ar/api-reference/inputs", @@ -14994,11 +15026,11 @@ ] }, { - "tab": "أمثلة", + "tab": "\u0623\u0645\u062b\u0644\u0629", "icon": "code", "groups": [ { - "group": "أمثلة", + "group": "\u0623\u0645\u062b\u0644\u0629", "pages": [ "ar/examples/example", "ar/examples/cookbooks" @@ -15007,11 +15039,11 @@ ] }, { - "tab": "التغييرات السجلات", + "tab": "\u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0627\u0644\u0633\u062c\u0644\u0627\u062a", "icon": "clock", "groups": [ { - "group": "سجل التغييرات", + "group": "\u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a", "pages": [ "ar/changelog" ] diff --git a/docs/en/concepts/checkpointing.mdx b/docs/en/concepts/checkpointing.mdx new file mode 100644 index 000000000..799f674d3 --- /dev/null +++ b/docs/en/concepts/checkpointing.mdx @@ -0,0 +1,187 @@ +--- +title: Checkpointing +description: Automatically save execution state so crews, flows, and agents can resume after failures. +icon: floppy-disk +mode: "wide" +--- + + +Checkpointing is in early release. APIs may change in future versions. + + +## Overview + +Checkpointing automatically saves execution state during a run. If a crew, flow, or agent fails mid-execution, you can restore from the last checkpoint and resume without re-running completed work. + +## Quick Start + +```python +from crewai import Crew, CheckpointConfig + +crew = Crew( + agents=[...], + tasks=[...], + checkpoint=True, # uses defaults: ./.checkpoints, on task_completed +) +result = crew.kickoff() +``` + +Checkpoint files are written to `./.checkpoints/` after each completed task. + +## Configuration + +Use `CheckpointConfig` for full control: + +```python +from crewai import Crew, CheckpointConfig + +crew = Crew( + agents=[...], + tasks=[...], + checkpoint=CheckpointConfig( + directory="./my_checkpoints", + on_events=["task_completed", "crew_kickoff_completed"], + max_checkpoints=5, + ), +) +``` + +### CheckpointConfig Fields + +| Field | Type | Default | Description | +|:------|:-----|:--------|:------------| +| `directory` | `str` | `"./.checkpoints"` | Filesystem path for checkpoint files | +| `on_events` | `list[str]` | `["task_completed"]` | Event types that trigger a checkpoint | +| `provider` | `BaseProvider` | `JsonProvider()` | Storage backend | +| `max_checkpoints` | `int \| None` | `None` | Max files to keep; oldest pruned first | + +### Inheritance and Opt-Out + +The `checkpoint` field on Crew, Flow, and Agent accepts `CheckpointConfig`, `True`, `False`, or `None`: + +| Value | Behavior | +|:------|:---------| +| `None` (default) | Inherit from parent. An agent inherits its crew's config. | +| `True` | Enable with defaults. | +| `False` | Explicit opt-out. Stops inheritance from parent. | +| `CheckpointConfig(...)` | Custom configuration. | + +```python +crew = Crew( + agents=[ + Agent(role="Researcher", ...), # inherits crew's checkpoint + Agent(role="Writer", ..., checkpoint=False), # opted out, no checkpoints + ], + tasks=[...], + checkpoint=True, +) +``` + +## Resuming from a Checkpoint + +```python +# Restore and resume +crew = Crew.from_checkpoint("./my_checkpoints/20260407T120000_abc123.json") +result = crew.kickoff() # picks up from last completed task +``` + +The restored crew skips already-completed tasks and resumes from the first incomplete one. + +## Works on Crew, Flow, and Agent + +### Crew + +```python +crew = Crew( + agents=[researcher, writer], + tasks=[research_task, write_task, review_task], + checkpoint=CheckpointConfig(directory="./crew_cp"), +) +``` + +Default trigger: `task_completed` (one checkpoint per finished task). + +### Flow + +```python +from crewai.flow.flow import Flow, start, listen +from crewai import CheckpointConfig + +class MyFlow(Flow): + @start() + def step_one(self): + return "data" + + @listen(step_one) + def step_two(self, data): + return process(data) + +flow = MyFlow( + checkpoint=CheckpointConfig( + directory="./flow_cp", + on_events=["method_execution_finished"], + ), +) +result = flow.kickoff() + +# Resume +flow = MyFlow.from_checkpoint("./flow_cp/20260407T120000_abc123.json") +result = flow.kickoff() +``` + +### Agent + +```python +agent = Agent( + role="Researcher", + goal="Research topics", + backstory="Expert researcher", + checkpoint=CheckpointConfig( + directory="./agent_cp", + on_events=["lite_agent_execution_completed"], + ), +) +result = agent.kickoff(messages=[{"role": "user", "content": "Research AI trends"}]) +``` + +## Event Types + +The `on_events` field accepts any combination of event type strings. Common choices: + +| Use Case | Events | +|:---------|:-------| +| After each task (Crew) | `["task_completed"]` | +| After each flow method | `["method_execution_finished"]` | +| After agent execution | `["agent_execution_completed"]`, `["lite_agent_execution_completed"]` | +| On crew completion only | `["crew_kickoff_completed"]` | +| After every LLM call | `["llm_call_completed"]` | +| On everything | `["*"]` | + + +Using `["*"]` or high-frequency events like `llm_call_completed` will write many checkpoint files and may impact performance. Use `max_checkpoints` to limit disk usage. + + +## Manual Checkpointing + +For full control, register your own event handler and call `state.checkpoint()` directly: + +```python +from crewai.events.event_bus import crewai_event_bus +from crewai.events.types.llm_events import LLMCallCompletedEvent + +# Sync handler +@crewai_event_bus.on(LLMCallCompletedEvent) +def on_llm_done(source, event, state): + path = state.checkpoint("./my_checkpoints") + print(f"Saved checkpoint: {path}") + +# Async handler +@crewai_event_bus.on(LLMCallCompletedEvent) +async def on_llm_done_async(source, event, state): + path = await state.acheckpoint("./my_checkpoints") + print(f"Saved checkpoint: {path}") +``` + +The `state` argument is the `RuntimeState` passed automatically by the event bus when your handler accepts 3 parameters. You can register handlers on any event type listed in the [Event Listeners](/en/concepts/event-listener) documentation. + +Checkpointing is best-effort: if a checkpoint write fails, the error is logged but execution continues uninterrupted. diff --git a/docs/ko/concepts/checkpointing.mdx b/docs/ko/concepts/checkpointing.mdx new file mode 100644 index 000000000..da33aa3c8 --- /dev/null +++ b/docs/ko/concepts/checkpointing.mdx @@ -0,0 +1,187 @@ +--- +title: Checkpointing +description: 실행 상태를 자동으로 저장하여 크루, 플로우, 에이전트가 실패 후 재개할 수 있습니다. +icon: floppy-disk +mode: "wide" +--- + + +체크포인팅은 초기 릴리스 단계입니다. API는 향후 버전에서 변경될 수 있습니다. + + +## 개요 + +체크포인팅은 실행 중 자동으로 실행 상태를 저장합니다. 크루, 플로우 또는 에이전트가 실행 도중 실패하면 마지막 체크포인트에서 복원하여 이미 완료된 작업을 다시 실행하지 않고 재개할 수 있습니다. + +## 빠른 시작 + +```python +from crewai import Crew, CheckpointConfig + +crew = Crew( + agents=[...], + tasks=[...], + checkpoint=True, # 기본값 사용: ./.checkpoints, task_completed 이벤트 +) +result = crew.kickoff() +``` + +각 태스크가 완료된 후 `./.checkpoints/`에 체크포인트 파일이 기록됩니다. + +## 설정 + +`CheckpointConfig`를 사용하여 세부 설정을 제어합니다: + +```python +from crewai import Crew, CheckpointConfig + +crew = Crew( + agents=[...], + tasks=[...], + checkpoint=CheckpointConfig( + directory="./my_checkpoints", + on_events=["task_completed", "crew_kickoff_completed"], + max_checkpoints=5, + ), +) +``` + +### CheckpointConfig 필드 + +| 필드 | 타입 | 기본값 | 설명 | +|:-----|:-----|:-------|:-----| +| `directory` | `str` | `"./.checkpoints"` | 체크포인트 파일 경로 | +| `on_events` | `list[str]` | `["task_completed"]` | 체크포인트를 트리거하는 이벤트 타입 | +| `provider` | `BaseProvider` | `JsonProvider()` | 스토리지 백엔드 | +| `max_checkpoints` | `int \| None` | `None` | 보관할 최대 파일 수; 오래된 것부터 삭제 | + +### 상속 및 옵트아웃 + +Crew, Flow, Agent의 `checkpoint` 필드는 `CheckpointConfig`, `True`, `False`, `None`을 받습니다: + +| 값 | 동작 | +|:---|:-----| +| `None` (기본값) | 부모에서 상속. 에이전트는 크루의 설정을 상속합니다. | +| `True` | 기본값으로 활성화. | +| `False` | 명시적 옵트아웃. 부모 상속을 중단합니다. | +| `CheckpointConfig(...)` | 사용자 정의 설정. | + +```python +crew = Crew( + agents=[ + Agent(role="Researcher", ...), # 크루의 checkpoint 상속 + Agent(role="Writer", ..., checkpoint=False), # 옵트아웃, 체크포인트 없음 + ], + tasks=[...], + checkpoint=True, +) +``` + +## 체크포인트에서 재개 + +```python +# 복원 및 재개 +crew = Crew.from_checkpoint("./my_checkpoints/20260407T120000_abc123.json") +result = crew.kickoff() # 마지막으로 완료된 태스크부터 재개 +``` + +복원된 크루는 이미 완료된 태스크를 건너뛰고 첫 번째 미완료 태스크부터 재개합니다. + +## Crew, Flow, Agent에서 사용 가능 + +### Crew + +```python +crew = Crew( + agents=[researcher, writer], + tasks=[research_task, write_task, review_task], + checkpoint=CheckpointConfig(directory="./crew_cp"), +) +``` + +기본 트리거: `task_completed` (완료된 태스크당 하나의 체크포인트). + +### Flow + +```python +from crewai.flow.flow import Flow, start, listen +from crewai import CheckpointConfig + +class MyFlow(Flow): + @start() + def step_one(self): + return "data" + + @listen(step_one) + def step_two(self, data): + return process(data) + +flow = MyFlow( + checkpoint=CheckpointConfig( + directory="./flow_cp", + on_events=["method_execution_finished"], + ), +) +result = flow.kickoff() + +# 재개 +flow = MyFlow.from_checkpoint("./flow_cp/20260407T120000_abc123.json") +result = flow.kickoff() +``` + +### Agent + +```python +agent = Agent( + role="Researcher", + goal="Research topics", + backstory="Expert researcher", + checkpoint=CheckpointConfig( + directory="./agent_cp", + on_events=["lite_agent_execution_completed"], + ), +) +result = agent.kickoff(messages=[{"role": "user", "content": "Research AI trends"}]) +``` + +## 이벤트 타입 + +`on_events` 필드는 이벤트 타입 문자열의 조합을 받습니다. 일반적인 선택: + +| 사용 사례 | 이벤트 | +|:----------|:-------| +| 각 태스크 완료 후 (Crew) | `["task_completed"]` | +| 각 플로우 메서드 완료 후 | `["method_execution_finished"]` | +| 에이전트 실행 완료 후 | `["agent_execution_completed"]`, `["lite_agent_execution_completed"]` | +| 크루 완료 시에만 | `["crew_kickoff_completed"]` | +| 모든 LLM 호출 후 | `["llm_call_completed"]` | +| 모든 이벤트 | `["*"]` | + + +`["*"]` 또는 `llm_call_completed`와 같은 고빈도 이벤트를 사용하면 많은 체크포인트 파일이 생성되어 성능에 영향을 줄 수 있습니다. `max_checkpoints`를 사용하여 디스크 사용량을 제한하세요. + + +## 수동 체크포인팅 + +완전한 제어를 위해 자체 이벤트 핸들러를 등록하고 `state.checkpoint()`를 직접 호출할 수 있습니다: + +```python +from crewai.events.event_bus import crewai_event_bus +from crewai.events.types.llm_events import LLMCallCompletedEvent + +# 동기 핸들러 +@crewai_event_bus.on(LLMCallCompletedEvent) +def on_llm_done(source, event, state): + path = state.checkpoint("./my_checkpoints") + print(f"체크포인트 저장: {path}") + +# 비동기 핸들러 +@crewai_event_bus.on(LLMCallCompletedEvent) +async def on_llm_done_async(source, event, state): + path = await state.acheckpoint("./my_checkpoints") + print(f"체크포인트 저장: {path}") +``` + +`state` 인수는 핸들러가 3개의 매개변수를 받을 때 이벤트 버스가 자동으로 전달하는 `RuntimeState`입니다. [Event Listeners](/ko/concepts/event-listener) 문서에 나열된 모든 이벤트 타입에 핸들러를 등록할 수 있습니다. + +체크포인팅은 best-effort입니다: 체크포인트 기록이 실패하면 오류가 로그에 기록되지만 실행은 중단 없이 계속됩니다. diff --git a/docs/pt-BR/concepts/checkpointing.mdx b/docs/pt-BR/concepts/checkpointing.mdx new file mode 100644 index 000000000..251691243 --- /dev/null +++ b/docs/pt-BR/concepts/checkpointing.mdx @@ -0,0 +1,187 @@ +--- +title: Checkpointing +description: Salve automaticamente o estado de execucao para que crews, flows e agentes possam retomar apos falhas. +icon: floppy-disk +mode: "wide" +--- + + +O checkpointing esta em versao inicial. As APIs podem mudar em versoes futuras. + + +## Visao Geral + +O checkpointing salva automaticamente o estado de execucao durante uma execucao. Se uma crew, flow ou agente falhar no meio da execucao, voce pode restaurar a partir do ultimo checkpoint e retomar sem reexecutar o trabalho ja concluido. + +## Inicio Rapido + +```python +from crewai import Crew, CheckpointConfig + +crew = Crew( + agents=[...], + tasks=[...], + checkpoint=True, # usa padroes: ./.checkpoints, em task_completed +) +result = crew.kickoff() +``` + +Os arquivos de checkpoint sao gravados em `./.checkpoints/` apos cada tarefa concluida. + +## Configuracao + +Use `CheckpointConfig` para controle total: + +```python +from crewai import Crew, CheckpointConfig + +crew = Crew( + agents=[...], + tasks=[...], + checkpoint=CheckpointConfig( + directory="./my_checkpoints", + on_events=["task_completed", "crew_kickoff_completed"], + max_checkpoints=5, + ), +) +``` + +### Campos do CheckpointConfig + +| Campo | Tipo | Padrao | Descricao | +|:------|:-----|:-------|:----------| +| `directory` | `str` | `"./.checkpoints"` | Caminho para os arquivos de checkpoint | +| `on_events` | `list[str]` | `["task_completed"]` | Tipos de evento que acionam um checkpoint | +| `provider` | `BaseProvider` | `JsonProvider()` | Backend de armazenamento | +| `max_checkpoints` | `int \| None` | `None` | Maximo de arquivos a manter; os mais antigos sao removidos primeiro | + +### Heranca e Desativacao + +O campo `checkpoint` em Crew, Flow e Agent aceita `CheckpointConfig`, `True`, `False` ou `None`: + +| Valor | Comportamento | +|:------|:--------------| +| `None` (padrao) | Herda do pai. Um agente herda a configuracao da crew. | +| `True` | Ativa com padroes. | +| `False` | Desativacao explicita. Interrompe a heranca do pai. | +| `CheckpointConfig(...)` | Configuracao personalizada. | + +```python +crew = Crew( + agents=[ + Agent(role="Researcher", ...), # herda checkpoint da crew + Agent(role="Writer", ..., checkpoint=False), # desativado, sem checkpoints + ], + tasks=[...], + checkpoint=True, +) +``` + +## Retomando a partir de um Checkpoint + +```python +# Restaurar e retomar +crew = Crew.from_checkpoint("./my_checkpoints/20260407T120000_abc123.json") +result = crew.kickoff() # retoma a partir da ultima tarefa concluida +``` + +A crew restaurada pula tarefas ja concluidas e retoma a partir da primeira incompleta. + +## Funciona em Crew, Flow e Agent + +### Crew + +```python +crew = Crew( + agents=[researcher, writer], + tasks=[research_task, write_task, review_task], + checkpoint=CheckpointConfig(directory="./crew_cp"), +) +``` + +Gatilho padrao: `task_completed` (um checkpoint por tarefa finalizada). + +### Flow + +```python +from crewai.flow.flow import Flow, start, listen +from crewai import CheckpointConfig + +class MyFlow(Flow): + @start() + def step_one(self): + return "data" + + @listen(step_one) + def step_two(self, data): + return process(data) + +flow = MyFlow( + checkpoint=CheckpointConfig( + directory="./flow_cp", + on_events=["method_execution_finished"], + ), +) +result = flow.kickoff() + +# Retomar +flow = MyFlow.from_checkpoint("./flow_cp/20260407T120000_abc123.json") +result = flow.kickoff() +``` + +### Agent + +```python +agent = Agent( + role="Researcher", + goal="Research topics", + backstory="Expert researcher", + checkpoint=CheckpointConfig( + directory="./agent_cp", + on_events=["lite_agent_execution_completed"], + ), +) +result = agent.kickoff(messages=[{"role": "user", "content": "Research AI trends"}]) +``` + +## Tipos de Evento + +O campo `on_events` aceita qualquer combinacao de strings de tipo de evento. Escolhas comuns: + +| Caso de Uso | Eventos | +|:------------|:--------| +| Apos cada tarefa (Crew) | `["task_completed"]` | +| Apos cada metodo do flow | `["method_execution_finished"]` | +| Apos execucao do agente | `["agent_execution_completed"]`, `["lite_agent_execution_completed"]` | +| Apenas na conclusao da crew | `["crew_kickoff_completed"]` | +| Apos cada chamada LLM | `["llm_call_completed"]` | +| Em tudo | `["*"]` | + + +Usar `["*"]` ou eventos de alta frequencia como `llm_call_completed` gravara muitos arquivos de checkpoint e pode impactar o desempenho. Use `max_checkpoints` para limitar o uso de disco. + + +## Checkpointing Manual + +Para controle total, registre seu proprio handler de evento e chame `state.checkpoint()` diretamente: + +```python +from crewai.events.event_bus import crewai_event_bus +from crewai.events.types.llm_events import LLMCallCompletedEvent + +# Handler sincrono +@crewai_event_bus.on(LLMCallCompletedEvent) +def on_llm_done(source, event, state): + path = state.checkpoint("./my_checkpoints") + print(f"Checkpoint salvo: {path}") + +# Handler assincrono +@crewai_event_bus.on(LLMCallCompletedEvent) +async def on_llm_done_async(source, event, state): + path = await state.acheckpoint("./my_checkpoints") + print(f"Checkpoint salvo: {path}") +``` + +O argumento `state` e o `RuntimeState` passado automaticamente pelo barramento de eventos quando seu handler aceita 3 parametros. Voce pode registrar handlers em qualquer tipo de evento listado na documentacao de [Event Listeners](/pt-BR/concepts/event-listener). + +O checkpointing e best-effort: se uma gravacao de checkpoint falhar, o erro e registrado no log, mas a execucao continua sem interrupcao. diff --git a/lib/crewai/src/crewai/__init__.py b/lib/crewai/src/crewai/__init__.py index 01be9fead..8a7d6dd3f 100644 --- a/lib/crewai/src/crewai/__init__.py +++ b/lib/crewai/src/crewai/__init__.py @@ -16,6 +16,7 @@ from crewai.knowledge.knowledge import Knowledge from crewai.llm import LLM from crewai.llms.base_llm import BaseLLM from crewai.process import Process +from crewai.state.checkpoint_config import CheckpointConfig # noqa: F401 from crewai.task import Task from crewai.tasks.llm_guardrail import LLMGuardrail from crewai.tasks.task_output import TaskOutput @@ -210,6 +211,7 @@ try: Agent.model_rebuild(force=True, _types_namespace=_full_namespace) except PydanticUserError: pass + except (ImportError, PydanticUserError): import logging as _logging diff --git a/lib/crewai/src/crewai/agents/agent_builder/base_agent.py b/lib/crewai/src/crewai/agents/agent_builder/base_agent.py index cfa08bbc3..dbff05e4d 100644 --- a/lib/crewai/src/crewai/agents/agent_builder/base_agent.py +++ b/lib/crewai/src/crewai/agents/agent_builder/base_agent.py @@ -39,6 +39,7 @@ from crewai.memory.unified_memory import Memory from crewai.rag.embeddings.types import EmbedderConfig from crewai.security.security_config import SecurityConfig from crewai.skills.models import Skill +from crewai.state.checkpoint_config import CheckpointConfig from crewai.tools.base_tool import BaseTool, Tool from crewai.types.callback import SerializableCallable from crewai.utilities.config import process_config @@ -299,6 +300,11 @@ class BaseAgent(BaseModel, ABC, metaclass=AgentMeta): default_factory=SecurityConfig, description="Security configuration for the agent, including fingerprinting.", ) + checkpoint: CheckpointConfig | bool | None = Field( + default=None, + description="Automatic checkpointing configuration. " + "True for defaults, False to opt out, None to inherit.", + ) callbacks: list[SerializableCallable] = Field( default_factory=list, description="Callbacks to be used for the agent" ) diff --git a/lib/crewai/src/crewai/crew.py b/lib/crewai/src/crewai/crew.py index 2e7964fb1..4f9ebab5d 100644 --- a/lib/crewai/src/crewai/crew.py +++ b/lib/crewai/src/crewai/crew.py @@ -104,6 +104,7 @@ from crewai.rag.types import SearchResult from crewai.security.fingerprint import Fingerprint from crewai.security.security_config import SecurityConfig from crewai.skills.models import Skill +from crewai.state.checkpoint_config import CheckpointConfig from crewai.task import Task from crewai.tasks.conditional_task import ConditionalTask from crewai.tasks.task_output import TaskOutput @@ -340,6 +341,11 @@ class Crew(FlowTrackable, BaseModel): default_factory=SecurityConfig, description="Security configuration for the crew, including fingerprinting.", ) + checkpoint: CheckpointConfig | bool | None = Field( + default=None, + description="Automatic checkpointing configuration. " + "True for defaults, False to opt out, None to inherit.", + ) token_usage: UsageMetrics | None = Field( default=None, description="Metrics for the LLM usage during all tasks execution.", diff --git a/lib/crewai/src/crewai/flow/flow.py b/lib/crewai/src/crewai/flow/flow.py index d99aa05de..76a96b3f9 100644 --- a/lib/crewai/src/crewai/flow/flow.py +++ b/lib/crewai/src/crewai/flow/flow.py @@ -113,6 +113,7 @@ from crewai.flow.utils import ( ) from crewai.memory.memory_scope import MemoryScope, MemorySlice from crewai.memory.unified_memory import Memory +from crewai.state.checkpoint_config import CheckpointConfig if TYPE_CHECKING: @@ -920,6 +921,7 @@ class Flow(BaseModel, Generic[T], metaclass=FlowMeta): max_method_calls: int = Field(default=100) execution_context: ExecutionContext | None = Field(default=None) + checkpoint: CheckpointConfig | bool | None = Field(default=None) @classmethod def from_checkpoint( diff --git a/lib/crewai/src/crewai/state/__init__.py b/lib/crewai/src/crewai/state/__init__.py index e69de29bb..d8f3419c7 100644 --- a/lib/crewai/src/crewai/state/__init__.py +++ b/lib/crewai/src/crewai/state/__init__.py @@ -0,0 +1,4 @@ +from crewai.state.checkpoint_config import CheckpointConfig, CheckpointEventType + + +__all__ = ["CheckpointConfig", "CheckpointEventType"] diff --git a/lib/crewai/src/crewai/state/checkpoint_config.py b/lib/crewai/src/crewai/state/checkpoint_config.py new file mode 100644 index 000000000..4c60fd35c --- /dev/null +++ b/lib/crewai/src/crewai/state/checkpoint_config.py @@ -0,0 +1,193 @@ +"""Checkpoint configuration for automatic state persistence.""" + +from __future__ import annotations + +from typing import Literal + +from pydantic import BaseModel, Field + +from crewai.state.provider.core import BaseProvider +from crewai.state.provider.json_provider import JsonProvider + + +CheckpointEventType = Literal[ + # Task + "task_started", + "task_completed", + "task_failed", + "task_evaluation", + # Crew + "crew_kickoff_started", + "crew_kickoff_completed", + "crew_kickoff_failed", + "crew_train_started", + "crew_train_completed", + "crew_train_failed", + "crew_test_started", + "crew_test_completed", + "crew_test_failed", + "crew_test_result", + # Agent + "agent_execution_started", + "agent_execution_completed", + "agent_execution_error", + "lite_agent_execution_started", + "lite_agent_execution_completed", + "lite_agent_execution_error", + "agent_evaluation_started", + "agent_evaluation_completed", + "agent_evaluation_failed", + # Flow + "flow_created", + "flow_started", + "flow_finished", + "flow_paused", + "method_execution_started", + "method_execution_finished", + "method_execution_failed", + "method_execution_paused", + "human_feedback_requested", + "human_feedback_received", + "flow_input_requested", + "flow_input_received", + # LLM + "llm_call_started", + "llm_call_completed", + "llm_call_failed", + "llm_stream_chunk", + "llm_thinking_chunk", + # LLM Guardrail + "llm_guardrail_started", + "llm_guardrail_completed", + "llm_guardrail_failed", + # Tool + "tool_usage_started", + "tool_usage_finished", + "tool_usage_error", + "tool_validate_input_error", + "tool_selection_error", + "tool_execution_error", + # Memory + "memory_save_started", + "memory_save_completed", + "memory_save_failed", + "memory_query_started", + "memory_query_completed", + "memory_query_failed", + "memory_retrieval_started", + "memory_retrieval_completed", + "memory_retrieval_failed", + # Knowledge + "knowledge_search_query_started", + "knowledge_search_query_completed", + "knowledge_query_started", + "knowledge_query_completed", + "knowledge_query_failed", + "knowledge_search_query_failed", + # Reasoning + "agent_reasoning_started", + "agent_reasoning_completed", + "agent_reasoning_failed", + # MCP + "mcp_connection_started", + "mcp_connection_completed", + "mcp_connection_failed", + "mcp_tool_execution_started", + "mcp_tool_execution_completed", + "mcp_tool_execution_failed", + "mcp_config_fetch_failed", + # Observation + "step_observation_started", + "step_observation_completed", + "step_observation_failed", + "plan_refinement", + "plan_replan_triggered", + "goal_achieved_early", + # Skill + "skill_discovery_started", + "skill_discovery_completed", + "skill_loaded", + "skill_activated", + "skill_load_failed", + # Logging + "agent_logs_started", + "agent_logs_execution", + # A2A + "a2a_delegation_started", + "a2a_delegation_completed", + "a2a_conversation_started", + "a2a_conversation_completed", + "a2a_message_sent", + "a2a_response_received", + "a2a_polling_started", + "a2a_polling_status", + "a2a_push_notification_registered", + "a2a_push_notification_received", + "a2a_push_notification_sent", + "a2a_push_notification_timeout", + "a2a_streaming_started", + "a2a_streaming_chunk", + "a2a_agent_card_fetched", + "a2a_authentication_failed", + "a2a_artifact_received", + "a2a_connection_error", + "a2a_server_task_started", + "a2a_server_task_completed", + "a2a_server_task_canceled", + "a2a_server_task_failed", + "a2a_parallel_delegation_started", + "a2a_parallel_delegation_completed", + "a2a_transport_negotiated", + "a2a_content_type_negotiated", + "a2a_context_created", + "a2a_context_expired", + "a2a_context_idle", + "a2a_context_completed", + "a2a_context_pruned", + # System + "SIGTERM", + "SIGINT", + "SIGHUP", + "SIGTSTP", + "SIGCONT", + # Env + "cc_env", + "codex_env", + "cursor_env", + "default_env", +] + + +class CheckpointConfig(BaseModel): + """Configuration for automatic checkpointing. + + When set on a Crew, Flow, or Agent, checkpoints are written + automatically whenever the specified event(s) fire. + """ + + directory: str = Field( + default="./.checkpoints", + description="Filesystem path where checkpoint JSON files are written.", + ) + on_events: list[CheckpointEventType | Literal["*"]] = Field( + default=["task_completed"], + description="Event types that trigger a checkpoint write. " + 'Use ["*"] to checkpoint on every event.', + ) + provider: BaseProvider = Field( + default_factory=JsonProvider, + description="Storage backend. Defaults to JsonProvider.", + ) + max_checkpoints: int | None = Field( + default=None, + description="Maximum checkpoint files to keep. Oldest are pruned first. " + "None means keep all.", + ) + + @property + def trigger_all(self) -> bool: + return "*" in self.on_events + + @property + def trigger_events(self) -> set[str]: + return set(self.on_events) diff --git a/lib/crewai/src/crewai/state/checkpoint_listener.py b/lib/crewai/src/crewai/state/checkpoint_listener.py new file mode 100644 index 000000000..cf5b39b2b --- /dev/null +++ b/lib/crewai/src/crewai/state/checkpoint_listener.py @@ -0,0 +1,176 @@ +"""Event listener that writes checkpoints automatically. + +Handlers are registered lazily — only when the first ``CheckpointConfig`` +is resolved (i.e. an entity actually has checkpointing enabled). This +avoids per-event overhead when no entity uses checkpointing. +""" + +from __future__ import annotations + +import glob +import logging +import os +import threading +from typing import Any + +from crewai.agents.agent_builder.base_agent import BaseAgent +from crewai.crew import Crew +from crewai.events.base_events import BaseEvent +from crewai.events.event_bus import CrewAIEventsBus, crewai_event_bus +from crewai.flow.flow import Flow +from crewai.state.checkpoint_config import CheckpointConfig +from crewai.state.runtime import RuntimeState, _prepare_entities +from crewai.task import Task + + +logger = logging.getLogger(__name__) + +_handlers_registered = False +_register_lock = threading.Lock() + +_SENTINEL = object() + + +def _ensure_handlers_registered() -> None: + """Register checkpoint handlers on the event bus once, lazily.""" + global _handlers_registered + if _handlers_registered: + return + with _register_lock: + if _handlers_registered: + return + _register_all_handlers(crewai_event_bus) + _handlers_registered = True + + +def _resolve(value: CheckpointConfig | bool | None) -> CheckpointConfig | None | object: + """Coerce a checkpoint field value. + + Returns: + CheckpointConfig — use this config. + _SENTINEL — explicit opt-out (``False``), stop walking parents. + None — not configured, keep walking parents. + """ + if isinstance(value, CheckpointConfig): + _ensure_handlers_registered() + return value + if value is True: + _ensure_handlers_registered() + return CheckpointConfig() + if value is False: + return _SENTINEL + return None # None = inherit + + +def _find_checkpoint(source: Any) -> CheckpointConfig | None: + """Find the CheckpointConfig for an event source. + + Walks known relationships: Task -> Agent -> Crew. Flow and Agent + carry their own checkpoint field directly. + + A ``None`` value means "not configured, inherit from parent". + A ``False`` value means "opt out" and stops the walk. + """ + if isinstance(source, Flow): + result = _resolve(source.checkpoint) + return result if isinstance(result, CheckpointConfig) else None + if isinstance(source, Crew): + result = _resolve(source.checkpoint) + return result if isinstance(result, CheckpointConfig) else None + if isinstance(source, BaseAgent): + result = _resolve(source.checkpoint) + if isinstance(result, CheckpointConfig): + return result + if result is _SENTINEL: + return None + crew = source.crew + if isinstance(crew, Crew): + result = _resolve(crew.checkpoint) + return result if isinstance(result, CheckpointConfig) else None + return None + if isinstance(source, Task): + agent = source.agent + if isinstance(agent, BaseAgent): + result = _resolve(agent.checkpoint) + if isinstance(result, CheckpointConfig): + return result + if result is _SENTINEL: + return None + crew = agent.crew + if isinstance(crew, Crew): + result = _resolve(crew.checkpoint) + return result if isinstance(result, CheckpointConfig) else None + return None + return None + + +def _do_checkpoint(state: RuntimeState, cfg: CheckpointConfig) -> None: + """Write a checkpoint synchronously and optionally prune old files.""" + _prepare_entities(state.root) + data = state.model_dump_json() + cfg.provider.checkpoint(data, cfg.directory) + + if cfg.max_checkpoints is not None: + _prune(cfg.directory, cfg.max_checkpoints) + + +def _safe_remove(path: str) -> None: + try: + os.remove(path) + except OSError: + logger.debug("Failed to remove checkpoint file %s", path, exc_info=True) + + +def _prune(directory: str, max_keep: int) -> None: + """Remove oldest checkpoint files beyond *max_keep*.""" + pattern = os.path.join(directory, "*.json") + files = sorted(glob.glob(pattern), key=os.path.getmtime) + to_remove = files if max_keep == 0 else files[:-max_keep] + for path in to_remove: + _safe_remove(path) + + +def _should_checkpoint(source: Any, event: BaseEvent) -> CheckpointConfig | None: + """Return the CheckpointConfig if this event should trigger a checkpoint.""" + cfg = _find_checkpoint(source) + if cfg is None: + return None + if not cfg.trigger_all and event.type not in cfg.trigger_events: + return None + return cfg + + +def _on_any_event(source: Any, event: BaseEvent, state: Any) -> None: + """Sync handler registered on every event class.""" + cfg = _should_checkpoint(source, event) + if cfg is None: + return + try: + _do_checkpoint(state, cfg) + except Exception: + logger.warning("Auto-checkpoint failed for event %s", event.type, exc_info=True) + + +def _register_all_handlers(event_bus: CrewAIEventsBus) -> None: + """Register the checkpoint handler on all known event classes. + + Only the sync handler is registered. The event bus runs sync handlers + in a ``ThreadPoolExecutor``, so blocking I/O is safe and we avoid + writing duplicate checkpoints from both sync and async dispatch. + """ + seen: set[type] = set() + + def _collect(cls: type[BaseEvent]) -> None: + for sub in cls.__subclasses__(): + if sub not in seen: + seen.add(sub) + type_field = sub.model_fields.get("type") + if ( + type_field + and type_field.default + and type_field.default != "base_event" + ): + event_bus.register_handler(sub, _on_any_event) + _collect(sub) + + _collect(BaseEvent) diff --git a/lib/crewai/tests/test_checkpoint.py b/lib/crewai/tests/test_checkpoint.py new file mode 100644 index 000000000..3533dac85 --- /dev/null +++ b/lib/crewai/tests/test_checkpoint.py @@ -0,0 +1,169 @@ +"""Tests for CheckpointConfig, checkpoint listener, and pruning.""" + +from __future__ import annotations + +import os +import tempfile +import time +from typing import Any +from unittest.mock import MagicMock, patch + +import pytest + +from crewai.agent.core import Agent +from crewai.agents.agent_builder.base_agent import BaseAgent +from crewai.crew import Crew +from crewai.flow.flow import Flow, start +from crewai.state.checkpoint_config import CheckpointConfig +from crewai.state.checkpoint_listener import ( + _find_checkpoint, + _prune, + _resolve, + _SENTINEL, +) +from crewai.task import Task + + +# ---------- _resolve ---------- + + +class TestResolve: + def test_none_returns_none(self) -> None: + assert _resolve(None) is None + + def test_false_returns_sentinel(self) -> None: + assert _resolve(False) is _SENTINEL + + def test_true_returns_config(self) -> None: + result = _resolve(True) + assert isinstance(result, CheckpointConfig) + assert result.directory == "./.checkpoints" + + def test_config_returns_config(self) -> None: + cfg = CheckpointConfig(directory="/tmp/cp") + assert _resolve(cfg) is cfg + + +# ---------- _find_checkpoint inheritance ---------- + + +class TestFindCheckpoint: + def _make_agent(self, checkpoint: Any = None) -> Agent: + return Agent(role="r", goal="g", backstory="b", checkpoint=checkpoint) + + def _make_crew( + self, agents: list[Agent], checkpoint: Any = None + ) -> Crew: + crew = Crew(agents=agents, tasks=[], checkpoint=checkpoint) + for a in agents: + a.crew = crew + return crew + + def test_crew_true(self) -> None: + a = self._make_agent() + self._make_crew([a], checkpoint=True) + cfg = _find_checkpoint(a) + assert isinstance(cfg, CheckpointConfig) + + def test_crew_true_agent_false_opts_out(self) -> None: + a = self._make_agent(checkpoint=False) + self._make_crew([a], checkpoint=True) + assert _find_checkpoint(a) is None + + def test_crew_none_agent_none(self) -> None: + a = self._make_agent() + self._make_crew([a]) + assert _find_checkpoint(a) is None + + def test_agent_config_overrides_crew(self) -> None: + a = self._make_agent( + checkpoint=CheckpointConfig(directory="/agent_cp") + ) + self._make_crew([a], checkpoint=True) + cfg = _find_checkpoint(a) + assert isinstance(cfg, CheckpointConfig) + assert cfg.directory == "/agent_cp" + + def test_task_inherits_from_crew(self) -> None: + a = self._make_agent() + self._make_crew([a], checkpoint=True) + task = Task(description="d", expected_output="e", agent=a) + cfg = _find_checkpoint(task) + assert isinstance(cfg, CheckpointConfig) + + def test_task_agent_false_blocks(self) -> None: + a = self._make_agent(checkpoint=False) + self._make_crew([a], checkpoint=True) + task = Task(description="d", expected_output="e", agent=a) + assert _find_checkpoint(task) is None + + def test_flow_direct(self) -> None: + flow = Flow(checkpoint=True) + cfg = _find_checkpoint(flow) + assert isinstance(cfg, CheckpointConfig) + + def test_flow_none(self) -> None: + flow = Flow() + assert _find_checkpoint(flow) is None + + def test_unknown_source(self) -> None: + assert _find_checkpoint("random") is None + + +# ---------- _prune ---------- + + +class TestPrune: + def test_prune_keeps_newest(self) -> None: + with tempfile.TemporaryDirectory() as d: + for i in range(5): + path = os.path.join(d, f"cp_{i}.json") + with open(path, "w") as f: + f.write("{}") + # Ensure distinct mtime + time.sleep(0.01) + + _prune(d, max_keep=2) + remaining = os.listdir(d) + assert len(remaining) == 2 + assert "cp_3.json" in remaining + assert "cp_4.json" in remaining + + def test_prune_zero_removes_all(self) -> None: + with tempfile.TemporaryDirectory() as d: + for i in range(3): + with open(os.path.join(d, f"cp_{i}.json"), "w") as f: + f.write("{}") + + _prune(d, max_keep=0) + assert os.listdir(d) == [] + + def test_prune_more_than_existing(self) -> None: + with tempfile.TemporaryDirectory() as d: + with open(os.path.join(d, "cp.json"), "w") as f: + f.write("{}") + + _prune(d, max_keep=10) + assert len(os.listdir(d)) == 1 + + +# ---------- CheckpointConfig ---------- + + +class TestCheckpointConfig: + def test_defaults(self) -> None: + cfg = CheckpointConfig() + assert cfg.directory == "./.checkpoints" + assert cfg.on_events == ["task_completed"] + assert cfg.max_checkpoints is None + assert not cfg.trigger_all + + def test_trigger_all(self) -> None: + cfg = CheckpointConfig(on_events=["*"]) + assert cfg.trigger_all + + def test_trigger_events(self) -> None: + cfg = CheckpointConfig( + on_events=["task_completed", "crew_kickoff_completed"] + ) + assert cfg.trigger_events == {"task_completed", "crew_kickoff_completed"}