# פרויקטים ותהליכים

> תנו לעוזר AI לבנות תהליכי Nodaro כ-JSON, לערוך אותם בבטחה עם בדיקת גרסה, להעביר אותם בייצוא ובייבוא ולהריץ אותם בפרויקט mcp.

Source: https://nodaro.ai/he/docs/mcp/tools/projects-and-workflows

**כלי הפרויקטים והתהליכים** מאפשרים לעוזר AI לבנות תהליכי Nodaro כמו שהעורך שומר אותם: כרכיבים וחיבורים ב-JSON. העוזר לומד את הפורמט עם `start_workflow_editor` ו-`get_node_skill`, יוצר ועורך תהליכים, מעביר אותם בין פרויקטים בייצוא ובייבוא ומריץ אותם. כל תהליך שהעוזר יוצר או עורך נמצא ב[פרויקט mcp](https://nodaro.ai/docs/mcp/tools#the-mcp-project), כך שהפרויקטים שלכם נשארים כמו שהם. [כלי הסשנים](#creation-sessions) קוראים ומארגנים את סשני היצירה בתוך הפרויקטים שלכם.

## סשן עבודה טיפוסי
### לימוד הפורמט
קראו ל-`start_workflow_editor`. הכלי מחזיר את מבנה ה-JSON של תהליך, את הכללים לחיבורים ואת הקטלוג של סוגי הרכיבים. קראו ל-`get_node_skill` לכל סוג רכיב שהתהליך צריך, ול-`get_picker_catalog` כדי לקבל את הערכים התקינים של כל בורר.

### יצירת התהליך
קראו ל-`create_workflow` עם שם, ואם תרצו, גם עם הרכיבים והחיבורים הראשונים. התהליך נפתח בעורך תחת **תהליכי MCP**.

### עריכה בטוחה של התהליך
קבלו את הגרף הנוכחי עם `get_workflow_json`, ואז שלחו `delta` ל-`update_workflow_json` עם הגרסה שקראתם. רק הרכיבים והחיבורים שציינתם משתנים.

### הרצה
קראו ל-`run_workflow` ובדקו את מצב ההרצה עם [`get_app_run`](https://nodaro.ai/docs/mcp/tools/gallery-and-assets#get_app_run). התוצאה של כל רכיב נשמרת בספרייה שלכם.

## `start_workflow_editor`
מחזיר את המדריך שעוזר AI קורא לפני שהוא בונה או עורך תהליך. המדריך מסביר את מבנה ה-JSON של תהליך, את המוסכמות לחיבורים ולקלטים ואת הכללים של `update_workflow_json`. הוא גם מפרט את שדות התוצאה של כל רכיב יצירה ואת הקטלוג של סוגי הרכיבים.

**הרשאה:** אין, הכלי תמיד גלוי. **קרדיטים:** חינם.

לכלי הזה אין פרמטרים. הכלי לא משנה כלום, ואפשר לקרוא לו מספר בלתי מוגבל של פעמים.

## `get_node_skill`
מחזיר את המדריך המלא לסוג רכיב אחד: שדות הנתונים שלו עם ערכי ברירת המחדל, מתי להשתמש בו, טעויות נפוצות ודוגמת JSON מפורטת. קראו לכלי הזה לפני שאתם כותבים רכיב מהסוג הזה לתוך תהליך.

עלות הקרדיטים במדריך היא מחיר המחירון של הרכיב. כדי לדעת כמה הרצה עולה בפועל, השתמשו ב-[`list_models`](https://nodaro.ai/docs/mcp/tools/models-and-credits#list_models) או ב-`GET /v1/nodes`.

**הרשאה:** אין, הכלי תמיד גלוי. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `node_type` | string | **נדרש.** סוג הרכיב ב-kebab-case, כפי ש-`start_workflow_editor` מפרט אותו, למשל `generate-image`, `list` או `trim-video`. |

**מה חוזר:** המדריך של הרכיב. סוג לא מוכר מחזיר שגיאה עם רשימת הסוגים התקינים.

## `get_picker_catalog`
מחזיר את הערכים התקינים של בורר, כגון **סביבה**, **מצב־רוח**, **אדם** או **עדשה**. בוררים מוסיפים ביטוי לפרומפט של הרכיב שהם מזינים, ולכן תהליך חייב להשתמש במזהה אמיתי מהקטלוג. קראו לכלי הזה לפני שאתם כותבים ערך של בורר לתוך תהליך.

**הרשאה:** אין, הכלי תמיד גלוי. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `node_type` | string | סוג הבורר ב-kebab-case, למשל `setting`. השמיטו אותו כדי לקבל את כל הבוררים. |
| `detail` | string | `compact` (ברירת המחדל): `id`, `label`, `category`, `term`, `icon` ו-`imageUrl`. הערך `full` מוסיף לכל אפשרות גם את `description` ואת `promptHint`, הביטוי המלא שהיא מוסיפה לפרומפט. |
| `category` | string | בבוררים חד־ממדיים: רק האפשרויות של קטגוריה אחת. |
| `field` | string | רק ממד אחד של בורר רב־ממדי, כגון **אדם**, **סטיילינג** או **מסגור**. אפשר לבחור בו גם את ההגדרות הנוספות של בורר חד־ממדי, כגון המיקום, האורך והעוצמה של **מעבר** ושל **אפקטי דמות**, או המיקום והקצב של **תנועת דמות**. |

**מה חוזר:** בלי `node_type`, רשימה מרוכזת של כל הבוררים, ולכל אחד `nodeType`, `label`, `kind` (`single` או `multi`), שדה הערך או שדות הערך שלו, `optionCount` ו-`imageCount`. עם `node_type`, האפשרויות של הבורר הזה. סוג לא מוכר מחזיר שגיאה עם הסוגים התקינים.

לכל אפשרות יש `term`: הביטוי המקצועי הקצר שכותבים בפרומפט, כגון `whip pan left` (פאן מהיר שמאלה). השדה `label` משמש רק לתצוגה. לאפשרות שלא עושה כלום, כגון `auto` או `none`, ה-`term` ריק. לאפשרויות עם תמונה יש `imageUrl` מוחלט: הציגו אותו כמו שהוא, ולעולם אל תבנו כתובת כזו ממזהה. הבוררים **אדם** ו**סטיילינג** מחזירים גם `sections`: הנושאים שלהם לפי הסדר, כל אחד עם תווית, השדות שלו ותמונה אופציונלית.

```json
{
"nodeType": "person",
"sections": [
{ "label": "Identity", "fields": ["type", "age", "ethnicity", "regionalAesthetic"],
"imageUrl": "https://app.nodaro.ai/picker-art/character/sections/identity.2d5ec1a4.webp" }
],
"dimensions": [
{ "field": "type", "label": "Type", "options": [
{ "id": "man", "label": "Man", "term": "man",
"imageUrl": "https://app.nodaro.ai/picker-art/character/person/man.d6bed999.webp" }
] }
]
}
```

התמונות של בוררי המראה מוחזרות רק ב-Nodaro Cloud. הדף [קטלוגי בוררים](https://nodaro.ai/docs/developers/picker-catalogs) מתאר את אותם נתונים למפתחים.

## `list_projects`
מחזיר את כל הפרויקטים בחשבון שלכם, ממוינים לפי שם, ולכל אחד את המזהה, השם, התיאור, מספר התהליכים ותאריך היצירה שלו. העוזר יכול לקרוא את כל הפרויקטים שלכם, אבל הוא עורך רק את הפרויקט mcp.

**הרשאה:** `workflows:read`. **קרדיטים:** חינם.

לכלי הזה אין פרמטרים.

**מה חוזר:** `data`, רשימת הפרויקטים.

## `get_project`
מחזיר פרויקט אחד לפי מזהה או לפי שם.

**הרשאה:** `workflows:read`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `project_id` | string | **נדרש.** מזהה של פרויקט, או שם של פרויקט. השם חייב להתאים בדיוק, כולל אותיות רישיות, למשל `My Feature Film` (הסרט באורך מלא שלי). |

**מה חוזר:** המזהה, השם, התיאור, מספר התהליכים ותאריך היצירה של הפרויקט.

## `list_workflows`
מחזיר את התהליכים שבפרויקט mcp, מהחדש לישן.

**הרשאה:** `workflows:read`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `limit` | integer | מ-1 עד 100. ברירת המחדל: `20`. |
| `cursor` | string | הערך `next_cursor` מהעמוד הקודם. |
| `include_sub_workflows` | boolean | ברירת המחדל: `false`, שמסתיר תת־תהליכים ששייכים לתהליך אחר, כמו בתצוגת הפרויקט בעורך. העבירו `true` כדי לכלול גם אותם. |

**מה חוזר:** `data`, ובו המזהה, השם, התיאור, הגרסה, התמונה הממוזערת, התאריכים וה-`editorUrl` של כל תהליך, וגם `next_cursor`. כש-`next_cursor` הוא `null`, זה העמוד האחרון.

## `get_workflow`
מחזיר את הפרטים של תהליך אחד בפרויקט mcp: השם, התיאור, הגרסה והתאריכים שלו.

**הרשאה:** `workflows:read`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `workflow_id` | string | **נדרש.** מזהה של תהליך בפרויקט mcp. |

**מה חוזר:** התהליך, עם ה-`editorUrl` שלו.

## `get_workflow_json`
מחזיר את הגרף המלא של תהליך בפרויקט mcp: הרכיבים, החיבורים, ההגדרות, השם, `updated_at` ו-`version`.

**הרשאה:** `workflows:read`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `workflow_id` | string | **נדרש.** מזהה של תהליך בפרויקט mcp. |

**מה חוזר:** הגרף וה-`editorUrl` של התהליך. שמרו את `version` ושלחו אותו בחזרה עם השינוי הבא שלכם, כדי שהשינוי ייכשל במקום לדרוס עריכה של מישהו אחר.

## `create_workflow`
יוצר תהליך בפרויקט mcp, ריק או עם גרף ראשוני.

**הרשאה:** `workflows:write`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `name` | string | **נדרש.** מ-1 עד 200 תווים. |
| `description` | string | עד 2,000 תווים. |
| `nodes` | array | הרכיבים הראשונים, בפורמט הרכיבים של העורך. |
| `edges` | array | החיבורים הראשונים. |
| `settings` | object | הגדרות התהליך. |

**מה חוזר:** ה-`id`, ה-`name` וה-`editorUrl` של התהליך החדש. השדה `editorUrl` הוא הקישור שפותח את התהליך בעורך של הפריסה שאתם מחוברים אליה. שתפו את הקישור בדיוק כפי שהוא חוזר. הגדרות שמודל לא תומך בהן מתוקנות, והחיבורים נבדקים, כפי שמתואר בסעיף [update_workflow_json](#update_workflow_json).

## `update_workflow_json`
משנה תהליך בפרויקט mcp: את הגרף, את ההגדרות או את התמונה הממוזערת שלו. כל השדות חוץ מ-`workflow_id` הם אופציונליים, כך שאפשר, למשל, לשנות רק את התמונה הממוזערת.

**הרשאה:** `workflows:write`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `workflow_id` | string | **נדרש.** מזהה של תהליך בפרויקט mcp. |
| `delta` | object | שינוי חלקי, שמוחל כצעד אחד מול `delta.base_version`. זו הדרך המועדפת לערוך. הפרטים בהמשך. |
| `nodes` | array | מחליף את כל הרכיבים. שלחו אותו יחד עם `edges`. |
| `edges` | array | מחליף את כל החיבורים. שלחו אותו יחד עם `nodes`. |
| `settings` | object | מחליף את הגדרות התהליך. |
| `thumbnail_url` | string או null | הכתובת של תמונה שכבר מאוחסנת ברשת, או `null` כדי להסיר את התמונה הממוזערת. |
| `expected_version` | integer | ה-`version` מ-`get_workflow_json`. השינוי נדחה אם התהליך השתנה מאז. |
| `expected_updated_at` | string | ה-`updated_at` מ-`get_workflow_json`: דרך ישנה יותר לבצע את אותה בדיקה. עדיף `expected_version`. |

**מה חוזר:** אישור עם מספר הרכיבים וה-`editorUrl` של התהליך, ורשימה של ההגדרות ש-Nodaro תיקן, אם יש כאלה.

### עריכה עם דלתא
הפרמטר `delta` מציין רק את מה שמשתנה, לפי מזהה. אי אפשר לשלב אותו עם `nodes`, `edges`, `settings`, `thumbnail_url` או עם השדות `expected_`.

| שדה בדלתא | מה הוא עושה |
| --- | --- |
| `base_version` | **נדרש.** ה-`version` מ-`get_workflow_json`. השינוי נדחה אם התהליך השתנה מאז. |
| `upsert_nodes` | רכיבים שלמים להוספה או להחלפה, לפי מזהה. |
| `delete_node_ids` | רכיבים להסרה. גם החיבורים שלהם מוסרים. |
| `upsert_edges` | חיבורים שלמים להוספה או להחלפה, לפי מזהה. |
| `delete_edge_ids` | חיבורים להסרה. |
| `set` | ערך `name` חדש, או ערך `settings` חדש שמחליף את הישן. |

עדיף לשלוח דלתא מאשר את הגרף כולו. כתיבה מלאה שמבוססת על עותק ישן מוחקת את השינויים שסשן אחר עשה בינתיים.

### החיבורים ש-Nodaro בודק
Nodaro בודק את החיבורים בכל כתיבה: ב-`create_workflow`, ב-`update_workflow_json` וב-`import_workflow`, כולל ב-`upsert_edges` של דלתא. החיבורים של דלתא נבדקים מול הגרף שמתקבל אחרי החלת הדלתא.

- **שם ישן של קלט או פלט מוחלף בשם הנוכחי.** למשל, `out` ברכיב פיד ערוץ טלגרם הופך ל-`text`.
- **חיבור בלי `id` מקבל מזהה.**
- **חיבור שלא יכול לעבוד מושמט.** חיבור כזה יכול להפנות לרכיב שלא קיים, לחבר רכיב לעצמו או להיות חסר אחד מהקצוות שלו. גם חיבור זהה שנשלח פעמיים בלי `id` מושמט. באותו אופן מושמטת רשימת עריכה (EDL) שמחוברת לקלט תמלול, וגם תמלול שמחובר לקלט `edl`.
- **שם של קלט או פלט שאין לרכיב נשמר כפי שנשלח**, עם אזהרה. הקנבס מצייר חיבור רק לקלט או לפלט שהרכיב מציג, ולכן קחו את השמות של כל רכיב מ-`get_node_skill`.

התשובה מפרטת כל שינוי. בתוצאה המובנית, השינויים נמצאים ב-`edgeAdjustments` והאזהרות ב-`edgeWarnings`. שני חיבורים עם אותו `id` גורמים לדחיית הכתיבה כולה, ושום דבר לא נשמר.

### כשהתהליך השתנה בינתיים
עם `expected_version`, עם `expected_updated_at` או עם דלתא, אם התהליך השתנה מאז שקראתם אותו, חוזרת שגיאת התנגשות: "Workflow was modified since you last read it. Fetch the latest JSON with get_workflow_json and retry." (התהליך השתנה מאז שקראתם אותו בפעם האחרונה. טענו את ה-JSON העדכני עם get_workflow_json ונסו שוב.) קבלו את התהליך שוב וחזרו על השינוי. בלי השדות האלה, הכתיבה דורסת את התהליך בלי שום תנאי.

### הגדרות שמודל לא תומך בהן
רכיבי תמונה מקבלים הגדרות שייחודיות לכל מודל, כגון `aspectRatio`, `resolution` ו-`quality`, וכל מודל מאפשר ערכים אחרים. כשרכיב מבקש ערך שהמודל שלו לא מקבל, Nodaro לא דוחה את הכתיבה. הוא מחליף את הערך בערך שהמודל תומך בו, או מסיר אותו כשאין למודל הגדרה כזו, והתשובה מפרטת כל שינוי:

```text
Updated workflow 4f0c… (12 nodes).

Adjusted 2 parameter(s) the selected model does not accept:
  - node_8 (gpt-image): aspectRatio "16:9" → "1:1" — GPT Image 1.5 does not
support aspect_ratio "16:9". Supported: 1:1, 3:2, 2:3.
  - node_8 (gpt-image): resolution "2K" → removed — GPT Image 1.5 has no
resolution setting.
```

בתוצאה המובנית, אותה רשימה נמצאת ב-`adjustments`. הערך שנשמר הוא לא מה ששלחתם, ולכן אל תשלחו שוב את הערך המקורי. בדקו את הערכים המותרים של כל מודל עם [`list_models`](https://nodaro.ai/docs/mcp/tools/models-and-credits#list_models), או בחרו מודל שתומך במה שאתם צריכים. הכלים `create_workflow` ו-`import_workflow` מתקנים הגדרות באותה דרך. רכיב שמוגדר לכמה מודלים בבת אחת נשאר כמו שהוא.

ערך אחד נשמר ולא מתוקן: הערך `aspectRatio: "auto"` ברכיב יצירת תמונה, תמונה לתמונה או עריכת תמונה (הנוכחי או הישן). האפשרות **אוטומטי** שומרת על הצורה של הצילום שלכם. כשהתהליך רץ, מודל שיש לו הגדרת `auto` משלו מקבל את הערך הזה, וכל מודל אחר משתמש ביחס הנתמך שלו שהכי קרוב לצילום. ברכיב יצירת תמונה, הצילום הוא התמונה הראשונה שהרכיב שולח למודל: תמונה להשלמה או לעידון, ואם אין כזו, תמונת הייחוס הראשונה. כשאין צילום מחובר, `auto` נותן את צורת ברירת המחדל של המודל: ה-`auto` שלו, אם יש לו כזה, ואחרת היחס הראשון ברשימה שלו.

### טקסט לפני ואחרי הפרומפט
ה-`data` של כל רכיב AI יכול לכלול `promptPrefix` ו-`promptSuffix`: טקסט ש-Nodaro מוסיף לפני הפרומפט של הרכיב ואחריו כשהרכיב רץ. ראו את הדף [טקסט לפני ואחרי הפרומפט](https://nodaro.ai/docs/concepts/prompt-pre-post-text).

### הפקות Studio
תהליך שיש בו הפקת Studio שומר את הסצנות והתוצאות שלה ב-`settings.studio`. שינוי הגדרות שמשנה או משמיט את `settings.studio` נדחה. העתיקו אותו בלי שינוי מ-`get_workflow_json`, או השמיטו את `settings`. כדי לשנות הפקה, השתמשו ב[כלי הפקות ה-Studio](https://nodaro.ai/docs/mcp/tools/studio-productions).

## `delete_workflow`
מוחק תהליך מהפרויקט mcp. המחיקה סופית.

**הרשאה:** `workflows:write`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `workflow_id` | string | **נדרש.** מזהה של תהליך בפרויקט mcp. |

**מה חוזר:** אישור, או שגיאה כשהתהליך לא נמצא בפרויקט mcp.

## `export_workflow`
מייצא כל תהליך שלכם, מכל פרויקט, כחבילת JSON ניידת. זה כלי התהליכים היחיד שלא מוגבל לפרויקט mcp.

**הרשאה:** `workflows:read`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `workflow_id` | string | **נדרש.** כל תהליך שלכם. |
| `with_assets` | boolean | ברירת המחדל: `false`. הערך `true` מצרף לחבילה גם את הדמויות, האובייקטים והמיקומים שהתהליך משתמש בהם. |

**מה חוזר:** החבילה כמחרוזת JSON. העבירו את המחרוזת כולה ל-`import_workflow`.

| מצב | מה יש בחבילה | שימוש מומלץ |
| --- | --- | --- |
| תבנית, `with_assets: false` | הגרף, בלי התוכן של הנכסים | שיתוף המבנה של תהליך כתבנית לשימוש חוזר |
| מלא, `with_assets: true` | הגרף וכל דמות, אובייקט ומיקום שהוא משתמש בהם | העברת הפקה שלמה לחשבון אחר או למופע אחר |

כשרכיב משתמש במדיה שמופע אחר לא יכול להוריד, כגון קובץ באחסון המקומי של התקנה באירוח עצמי, החבילה מפרטת אותה תחת `portability.unreachableMedia`, עם הרכיב, השדה והכתובת. עדיין אפשר לייבא את החבילה, אבל הרכיבים האלה לא ירוצו במקום אחר עד שהמדיה תועלה שוב.

## `import_workflow`
מייבא חבילה מ-`export_workflow` לפרויקט mcp.

**הרשאה:** `workflows:write`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `workflow_json` | string | **נדרש.** מחרוזת ה-JSON המלאה מ-`export_workflow`. |

**מה חוזר:** ה-`id`, ה-`name` וה-`editorUrl` של התהליך החדש, ו-`importReport` שמפרט איזו מדיה הועתקה, איזו נשארה כמו שהיא ואיזו דולגה.

- **המדיה מועתקת.** מדיה במארחים אחרים מועתקת למופע הזה כשאפשר להגיע אליה, כך שהתהליך רץ מהעותקים. המגבלות הן 25 קבצים לגרף ועוד 25 לנכסים שבחבילה, עם תמונות של עד 20 MB ווידאו או אודיו של עד 50 MB. מדיה במארח פרטי שהמופע הזה לא יכול להגיע אליו נשארת כמו שהיא, ומופיעה ברשימה כ-`unreachable`.
- **הנכסים נוצרים מחדש.** הדמויות, האובייקטים, היצורים והמיקומים שבחבילה נוצרים מחדש בחשבון שלכם, עם מזהים חדשים. רכיבי הנכסים וכל אזכור `@` בגרף או בהגדרות מפנים לעותקים החדשים, ו-`assetIdMap` ממפה כל מזהה ישן למזהה החדש שלו.
- **העותקים נספרים במכסת האחסון שלכם.** התמונות של הנכסים שבחבילה מועתקות לאחסון שלכם. כשהאחסון שלכם מלא, `assetsSkipped` מציין את הנכסים שלא נוצרו; התהליך עצמו מיובא בכל זאת.

## `run_workflow`
מריץ תהליך מהפרויקט mcp, בדיוק כמו הרצה בעורך.

**הרשאה:** `workflows:execute`. **קרדיטים:** הקרדיטים של כל רכיב שרץ, באותם מחירים כמו בעורך.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `workflow_id` | string | **נדרש.** מזהה של תהליך בפרויקט mcp. |
| `inputs` | object | שינויים להרצה הזו, לפי מזהה רכיב. ערך פשוט, כגון `"blue car"` (מכונית כחולה), נכנס לשדה הקלט הראשי של הרכיב. אובייקט, כגון `{ "prompt": "..." }`, קובע שדות לפי השם שלהם. |
| `client_request_id` | string | אסימון ניסיון חוזר: בין 8 ל-128 תווים של אותיות, ספרות ו-`_ - . :`. אם אתם מנסים שוב אחרי פסק זמן, שלחו את אותו ערך, כדי ש-Nodaro לא יתחיל את ההרצה ולא יחייב אותה פעמיים. להרצה חדשה, השתמשו בערך חדש. |
| `continue_from_execution_id` | string | הרצה שלכם של התהליך הזה שרוצים להמשיך: הרצה **שנכשלה** עם `from_failed: true`, או הרצה **שהושלמה** עם `node_ids`. אחד מהשניים נדרש יחד עם הפרמטר הזה. |
| `from_failed` | boolean | יחד עם `continue_from_execution_id`: מריץ רק את הרכיבים שההרצה ההיא לא השלימה, ובנוסף כל רכיב ב-`node_ids` שאף הרצה בשרשרת ההרצות לא הריצה אף פעם. |
| `node_ids` | array | מריץ רק את הרכיבים האלה. עם `from_failed`: הרכיבים שנבדקים (כברירת מחדל, הרכיבים שנבחרו להרצה הראשונה, ובנוסף כל רכיב שנשאר במצב כשל או שעוכב). כל מזהה נחשב לרכיב שנבחר במפורש: רכיב שמבצע עבודה ושאף הרצה בשרשרת לא הריצה אף פעם רץ ונכלל במחיר. רכיב מקור, טריגר, בורר או קונטיינר שומר את מה שההרצה העבירה הלאה, ורכיב שדולג לא רץ אף פעם. עם `continue_from_execution_id` לבד: הרכיבים שהרצת ההמשך מריצה. השמיטו את הפרמטר במקום לשלוח רשימה ריקה. |

**מה חוזר:** `executionId`, `name` ו-`editorUrl`, שפותח את התהליך, ושם ההרצה מוצגת בזמן אמת. השדה `executionId` הוא מזהה של הרצה, לא של משימה, ולכן הכלי `get_job` לא מוצא אותו. בדקו את מצב ההרצה עם [`get_app_run`](https://nodaro.ai/docs/mcp/tools/gallery-and-assets#get_app_run), או קבלו הסבר לכשל עם [`diagnose_run`](https://nodaro.ai/docs/mcp/tools/jobs#diagnose_run). לקוחות עם MCP Apps מציגים את ההתקדמות של ההרצה בכרטיס.

התוצאות מגיעות לקנבס של התהליך כמו בהרצה שהתחילה בעורך. כשהתהליך פתוח בעורך, הן מופיעות בתוך כ-10 שניות. אחרת הן מופיעות בפעם הבאה שתפתחו אותו, אלא אם הרצתם משהו בעורך מאז. ההרצה מופיעה גם בלשונית **הרצות**.

### המשך הרצה שנכשלה
אפשר להמשיך הרצה שנכשלה של תהליך שמור מהנקודה שבה היא נעצרה: `run_workflow({ workflow_id, continue_from_execution_id: "<the failed run>", from_failed: true })`. הרכיבים שההרצה השלימה מעבירים הלאה את הפלטים שלהם, ולא רצים שוב ולא משלמים עליהם שוב. רכיב שנכשל רץ שוב במלואו, כולל כל פריטי הרשימה. בהרצה שנכשלה ש-`run_workflow` יכול להמשיך, [`get_app_run`](https://nodaro.ai/docs/mcp/tools/gallery-and-assets#get_app_run) ו-[`diagnose_run`](https://nodaro.ai/docs/mcp/tools/jobs#diagnose_run) מחזירים את הקריאה הזו בשדה `resumeHint`. הרצה של אפליקציה ממשיכים עם [`retry_app_run`](https://nodaro.ai/docs/mcp/tools/apps-and-components#retry_app_run), ורכיב תרחיש שימוש עם [`continue_use_case`](https://nodaro.ai/docs/mcp/tools/analysis-and-edl#continue_use_case).

- הרצה שהרצת המשך חדשה יותר שלה נכשלה נדחית עם `continuation_superseded`, והשגיאה מציינת את הרצת ההמשך שצריך להמשיך במקומה. כשהרצת ההמשך הזו השלימה הכול, השגיאה מציינת איפה התוצאות שלה.
- כשהרצת ההמשך החדשה ביותר נעצרה בבדיקה של תצוגה מקדימה, ההרצה נדחית עם `continuation_preview_pending`. אחרי הבדיקה, קראו ל-`render_final` על הרצת ההמשך הזו כדי לבצע רינדור יחיד. לכמה רינדורים או לבדיקה של רכיב הידוק פרק, השגיאה כוללת את הקריאה ל-`run_workflow` שמשלימה אותם.
- הרצה שלא נשאר בה מה להריץ נדחית עם `continuation_subset_required`. הרצת המשך שהקרדיטים שלכם לא מכסים נדחית עם `insufficient_credits` עוד לפני שהיא מתחילה.

לכללים המלאים, ראו בדף ה-API [המשך הרצה שנכשלה](https://nodaro.ai/docs/developers/api/workflows#continue-a-failed-run).

## `render_final`
מרנדר את הגרסה הסופית של רינדור ברכיב [החלת רשימת עריכה](https://nodaro.ai/docs/nodes/video/apply-edl#preview-and-render-final) שהפיק תצוגה מקדימה, אחרי שבדקתם אותה. זה הכפתור **רינדור סופי** בעורך. הכלי מריץ את הרינדור במצב **סופי** רק בהרצה הזו, ואז את כל הרכיבים שאחריו. הרכיב שומר על ההגדרה **איכות** שלו.

**הרשאה:** `workflows:execute`. **קרדיטים:** הקרדיטים של כל רכיב שרץ, בתעריף של רינדור סופי.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `workflow_id` | string | **נדרש.** מזהה של תהליך בפרויקט mcp. |
| `render_node_id` | string | **נדרש.** רכיב הרינדור מסוג החלת רשימת עריכה שאת הגרסה הסופית שלו רוצים לרנדר. |
| `execution_id` | string | **נדרש.** ההרצה שהפיקה את התצוגה המקדימה: הרצה שלכם של התהליך הזה שהושלמה. |
| `confirm` | boolean | השמיטו אותו כדי לקבל רק את המחיר. הגדירו אותו ל-`true` כדי להתחיל את ההרצה, אחרי שהמחיר אושר. |
| `client_request_id` | string | אסימון ניסיון חוזר, כמו ב-`run_workflow`. |

Nodaro מחליט אילו רכיבים ירוצו, לפי אותו כלל כמו בעורך. רכיב תוכנית עריכה לא רץ שוב: הרינדור קורא את התוכנית שלו, כולל השינויים שעשיתם בבדיקה. רכיב מחליף מצלמות שנמצא בין רכיב תוכנית עריכה לבין הרינדור רץ שוב קודם. כל רכיב שלא רץ מעביר הלאה את מה שההרצה הקודמת הפיקה.

**מה חוזר:** בלי `confirm`, אומדן מחיר, ושום דבר לא רץ. האומדן מפרט את הרכיבים שירוצו (`nodeIds`), את השינוי שאיתו הם ירוצו (`inputOverrides`), את אומדן הקרדיטים (`estimatedCredits`), אם הקרדיטים שלכם מכסים אותו (`sufficient`) ואת הקרדיטים שזמינים לכם להוצאה (`available`). כשהקרדיטים שלכם לא מכסים את ההרצה, הכלי אומר זאת במקום לבקש אישור. עם `confirm: true`, הכלי מתחיל את ההרצה ומחזיר `executionId`, `nodeIds` ו-`estimatedCredits`. בדקו את מצב ההרצה עם [`get_app_run`](https://nodaro.ai/docs/mcp/tools/gallery-and-assets#get_app_run).

דחייה חוזרת כשגיאה עם קוד. הקודים הם: קרדיטים לא מספיקים, `render_final_node_not_found` (אין בתהליך רכיב כזה), `render_final_not_a_render` (הרכיב הוא לא רינדור של רכיב החלת רשימת עריכה), והקודים של הרצה שאי אפשר להמשיך: `continuation_not_found`, `continuation_workflow_mismatch`, `continuation_version_mismatch` ו-`continuation_not_completed`. שמירת הבדיקה שלכם ברכיב תוכנית עריכה היא לא חלק מהכלי הזה.

## סשני יצירה
**סשן יצירה** שומר את העבודה של כלי יצירה, כגון יצירת תמונה, יצירת וידאו או יצירת מוזיקה, בתוך אחד הפרויקטים שלכם. בכל סשן יש רשימה של פריטים: משימות שנוצרו בסשן, ומשימות שיובאו אליו. כלי הסשנים קוראים ומארגנים את הסשנים האלה. הם לא עולים קרדיטים.

## `list_sessions`
מחזיר את סשני היצירה שלכם, מהחדש לישן, עם הכותרת, הכלי, מספר הפריטים, מספר הפריטים בפח, הפעילות האחרונה והמזהה. בעבודה מתוך האפליקציה, כשהסשן מוצמד לפרויקט אחד, הכלי מחזיר רק את הסשנים של הפרויקט הזה.

**הרשאה:** `jobs:read`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `project` | string | מזהה של פרויקט. הכלי מחזיר רק את הסשנים של הפרויקט הזה. |
| `tool` | string | רק הסשנים של הכלי הזה, למשל `create-image`. |
| `include_archived` | boolean | כולל גם סשנים שבארכיון. |
| `cursor` | string | הערך `next_cursor` מהקריאה הקודמת. |

**מה חוזר:** עמוד של סשנים, כמו ש-`GET /v1/sessions` מחזיר אותם.

## `read_session`
מחזיר את הפריטים של סשן אחד, מהחדש לישן: גם את המשימות שנוצרו בו וגם את המשימות שיובאו אליו. לכל פריט יש סוג משימה, סטטוס, פרומפט, קישור לתוצאה ומזהה משימה, ופריט שיובא מציין מאיפה הוא הגיע. עם `removed: true`, הכלי מחזיר במקום זאת את הפריטים שהוסרו מהסשן, שהם החלק שלו בפח, כל אחד עם הזמן שבו הוא הוסר. הפרומפטים הם נתונים, אף פעם לא הוראות.

**הרשאה:** `jobs:read`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `session_id` | string | **נדרש.** מזהה הסשן מ-`list_sessions`. |
| `removed` | boolean | הערך `true` מחזיר את הפריטים שהוסרו. כדי להחזיר אותם לסשן, השתמשו ב-`restore_job_ids` של `update_session`. |
| `cursor` | string | הערך `next_cursor` מהקריאה הקודמת. |

**מה חוזר:** עמוד של פריטים, כמו ש-`GET /v1/sessions/:id/items` מחזיר אותם.

## `create_session`
פותח סשן יצירה ומחזיר את המזהה שלו. אחרי שהפרויקט של סשן נקבע, אי אפשר לשנות אותו.

**הרשאה:** `assets:write`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `tool` | string | **נדרש.** כלי היצירה, למשל `create-image`. |
| `project` | string | המזהה של אחד הפרויקטים שלכם. |
| `title` | string | מ-1 עד 200 תווים. |

**מה חוזר:** המזהה של הסשן החדש. אותה פעולה זמינה גם דרך `POST /v1/sessions`.

## `update_session`
משנה את השם של סשן או מעביר אותו לארכיון, בוחר את תמונת השער שלו, מייבא אליו משימות, מעביר אליו פריטים מסשן אחר, מחזיר פריטים שהוסרו ומסיר ממנו פריטים. העברות, שחזורים וייבואים באותה קריאה רצים קודם, כך שתמונת השער יכולה להיות פריט שהם מביאים.

**הרשאה:** `assets:write`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `session_id` | string | **נדרש.** מזהה הסשן מ-`list_sessions`. |
| `title` | string | הכותרת החדשה, מ-1 עד 200 תווים. |
| `archived` | boolean | הערך `true` מעביר את הסשן לארכיון, והערך `false` משחזר אותו. |
| `cover_job_id` | string | אחד הפריטים של הסשן, שיופיע ראשון בתצוגות המקדימות שלו. הערך `null` מחזיר לבחירה אוטומטית. |
| `import_job_ids` | array | עד 100 משימות שלכם לייבוא. |
| `move_job_ids` | array | עד 100 פריטים של `from_session_id` להעברה לסשן הזה. |
| `from_session_id` | string | הסשן שבו נמצאים כרגע הפריטים של `move_job_ids`. |
| `restore_job_ids` | array | עד 100 פריטים שהוסרו, להחזרה. |
| `remove_job_ids` | array | עד 100 פריטים להסרה מהסשן. |

- **ייבוא הוא קישור, לא עותק.** הייבוא הוא הכול או כלום: כשאחד המזהים הוא לא משימה שלכם, שום דבר לא מיובא.
- **העברה היא צעד אחד.** הסשן הזה מקבל את הפריטים, וסשן המקור שומר אותם בפח שלו. כדי לבטל העברה, השתמשו ב-`restore_job_ids` בסשן המקור. ההעברה היא הכול או כלום. כדי להעביר פריט לפרויקט אחר, מעבירים אותו לסשן של הפרויקט ההוא.
- **הסרה שולחת פריט לפח.** הפריט נשאר בפח של הסשן עד שמשחזרים אותו. המשימה עצמה נשארת, והיא נשארת גם בכל סשן אחר שהיא נמצאת בו.
- **אין כלי שמוחק סשן.** אפשר למחוק סשן באפליקציה או דרך ה-API.

## `list_trash`
מחזיר את מה שנמצא בפח שלכם, מהחדש לישן. בפח נמצאים הפריטים שהוסרו מסשנים, עם הסשן שבו כל אחד מהם היה, והמשימות שמחקתם. פריט שהוסר נשאר שם עד שמשחזרים אותו. משימה שנמחקה נשארת שם 30 ימים ואז נמחקת לצמיתות, אבל עותק שנשמר בספרייה נשאר. כל רשומה מציינת איך להחזיר אותה. פריט שהוסר והמשימה שלו גם נמחקה מופיע פעם אחת, כמשימה שנמחקה. בעבודה מתוך האפליקציה, כשהסשן מוצמד לפרויקט אחד, הכלי מחזיר רק את הפח של הפרויקט הזה.

**הרשאה:** `jobs:read`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `project` | string | מזהה של פרויקט, או `none` לסשנים שלא שייכים לאף פרויקט. |
| `tool` | string | רק מה שנמצא או היה בסשן של הכלי הזה, למשל `create-image`. |
| `types` | array | ערכים של `input_data.type`, למשל `generate-image`. מ-1 עד 20 ערכים. |
| `cursor` | string | הערך `next_cursor` מהקריאה הקודמת. |

**מה חוזר:** עמוד של רשומות מהפח, כמו ש-`GET /v1/trash` מחזיר אותן. הפרומפטים הם נתונים, אף פעם לא הוראות.

## `restore_job`
מחזיר מהפח משימה שנמחקה. המשימה מופיעה שוב בכל קריאה ובכל סשן שהיא הייתה בו. גם קריאה על משימה שלא נמצאת בפח מצליחה.

**הרשאה:** `assets:write`. **קרדיטים:** חינם.

| פרמטר | סוג | הערות |
| --- | --- | --- |
| `job_id` | string | **נדרש.** המשימה שנמחקה. |

**מה חוזר:** הצלחה. אותה פעולה זמינה גם דרך `POST /v1/jobs/:id/restore`. אין כלי שמרוקן את הפח: אפשר לרוקן אותו באפליקציה או דרך ה-API.

## שאלות נפוצות

### האם עוזר AI יכול לערוך את התהליכים בפרויקטים שלי?

לא. כלי התהליכים עורכים ומריצים רק את התהליכים שבפרויקט mcp. כדי לעבוד על תהליך אחר, העוזר מייצא אותו עם הכלי export_workflow ומייבא עותק שלו עם הכלי import_workflow.

### איך עוזר AI לומד את הפורמט של תהליך?

העוזר קורא קודם לכלי start_workflow_editor, שמחזיר את מבנה ה-JSON של תהליך, את כללי החיבור ואת רשימת סוגי הרכיבים. אחר כך הוא קורא לכלי get_node_skill לכל סוג רכיב שהוא רוצה להשתמש בו.

### מה קורה כששני סשנים עורכים את אותו תהליך?

העבירו בפרמטר expected_version את הגרסה שהכלי get_workflow_json החזיר, או שלחו דלתא עם base_version. אם התהליך השתנה בינתיים, הכתיבה נדחית ושום דבר לא נדרס.

### מה קורה כשתהליך מבקש ממודל הגדרה שהמודל לא תומך בה?

Nodaro מתקן את ההגדרה במקום להיכשל. יחס גובה־רוחב, רזולוציה או איכות שהמודל לא תומך בהם מוחלפים בערך נתמך או מוסרים, והתשובה מפרטת כל שינוי תחת adjustments.

### האם הרצת תהליך דרך MCP עולה יותר מהרצה בעורך?

לא. הכלי run_workflow מוציא אותם קרדיטים כמו הרצה בעורך. בנייה, קריאה ועריכה של תהליכים לא עולות כלום.
