{
  "name": "B: ReviewBot \uba54\uc778 \ucee8\ud2b8\ub864\ub7ec",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "4c4dbe7d-cc4d-4641-b393-6d17ac6e8fd6",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        -480,
        -256
      ],
      "id": "72ce4e4f-6a95-4e6f-bc32-c5014d32d2cd",
      "name": "Webhook"
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.body.event_type }}",
                    "rightValue": "merge_request",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "731222f7-87df-45f1-b2e1-17d842dbc784"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "MR"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "75d8fc3d-7923-4e6e-9985-872cb2726bd1",
                    "leftValue": "={{ $json.body.event_type }}",
                    "rightValue": "note",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "note"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "c56ae821-3e80-4e27-be6d-fbdaa24d2f84",
                    "leftValue": "={{ $json.body.event_type }}",
                    "rightValue": "DiscussionNote",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "DiscussionNote"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        -256,
        -272
      ],
      "id": "30a12484-0e61-45b8-a21e-ba1d1fa0f88b",
      "name": "Check Event Type"
    },
    {
      "parameters": {
        "jsCode": "const body = $input.item.json.body;\n\nif (!body) {\n  return []; \n}\n\nconst isComment = !!body.merge_request;\nconst mr = isComment ? body.merge_request : body.object_attributes;\n\nif (!mr || !mr.iid) return [];\n\nconst projectId = body.project?.id || mr.target_project_id || body.project_id;\nconst targetBranch = (mr.target_branch || \"\").toLowerCase();\nconst description = mr.description || \"\";\nconst noteText = body.object_attributes?.note || \"\";\n\n// TODO: \uc544\ub798 \ube0c\ub79c\uce58\uba85\uc77c \uacbd\uc6b0 \uc791\ub3d9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ud300 \ucee8\ubca4\uc158\uc5d0 \ub9de\uac8c \uc218\uc815\ud558\uc138\uc694 (\ubcf4\ud1b5 master, release\uc5d0 MR\ud560 \ub550 \ub300\ub7c9\uc758 changes\uac00 \ubc1c\uc0dd\ud558\ubbc0\ub85c exclude \ud574\ub450\ub294 \uac83)\nconst excludedBranches = [\"master\", \"release\"]; \nconst isExcluded = excludedBranches.includes(targetBranch);\nconst forceReview = description.includes('#force-review') || noteText.includes('#force-review');\n\nif (!isExcluded || forceReview) {\n  return {\n    json: {\n      ...$input.item.json,\n      info: {\n        type: isComment ? \"\ub313\uae00 \ub9ac\ubdf0\" : \"MR \ub9ac\ubdf0\",\n        project_name: body.project?.name || \"Project\",\n        project_url: body.project?.web_url || body.project?.git_http_url,\n        mr_title: mr.title,\n        mr_url: mr.url\n      },\n      body: {\n        ...body,\n        project: {\n          ...(body.project || {}),\n          id: projectId\n        },\n        merge_request: {\n          ...(body.merge_request || {}),\n          iid: mr.iid\n        },\n        object_attributes: {\n          ...(body.object_attributes || {}),\n          iid: mr.iid\n        }\n      },\n      project: { id: projectId },\n      object_attributes: { iid: mr.iid }\n    }\n  };\n}\n\nreturn [];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        416,
        -256
      ],
      "id": "751e0052-9f83-4a21-b397-8b0bbc1b7466",
      "name": "Filter Deployment"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=https://YOUR_MATTERMOST_DOMAIN/hooks/YOUR_WEBHOOK_TOKEN",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "=#### :aiddalkkac: [{{ $json.info.type }}/\ud300[{{ $json.info.project_name }}]({{ $json.info.project_url }})] \ub9ac\ubdf0\ubd07 \uc791\ub3d9 :comp:\n- **\ub300\uc0c1 MR:** [{{ $json.info.mr_title }}]({{ $json.info.mr_url }})\n- **\ub313\uae00 \ub9c1\ud06c:** {{ $json.info.mr_url }}#note_{{ $json.id }}\n- **\ub9ac\ubdf0 \uc2dc\uac01:** {{ $json.created_at.toDateTime().setZone('Asia/Seoul').setLocale('ko').toFormat('M\uc6d4 d\uc77c (cccc) a h\uc2dc mm\ubd84') }}\n\n---\n###### :hekoko_shake: \ub9ac\ubdf0 \ub0b4\uc6a9 \uc694\uc57d\n```\n{{ $json.body.substring(0, 200) }}... \n```\n- [\ubc14\ub85c \ud655\uc778\ud558\ub7ec \uac00\uae30 :glass_mandu:]({{ $json.info.mr_url }}#note_{{ $json.id }})"
            }
          ]
        },
        "options": {}
      },
      "id": "c2d25661-c8b0-46cc-a36e-f2ea85ac7d48",
      "name": "Send Noti",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1312,
        -288
      ]
    },
    {
      "parameters": {
        "mode": "combine",
        "combineBy": "combineByPosition",
        "options": {}
      },
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        1088,
        -288
      ],
      "id": "b63ee5a3-6c67-445a-ad74-0d20c829b291",
      "name": "Merge"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "d3d61f07-eef2-4a9c-93af-b8d2e9a2b383",
              "leftValue": "={{ $json.body.object_attributes.action }}",
              "rightValue": "open",
              "operator": {
                "type": "string",
                "operation": "equals",
                "name": "filter.operator.equals"
              }
            },
            {
              "id": "8b6a2c41-84de-4698-a54f-0c738dd7606a",
              "leftValue": "={{ $json.body.object_attributes.action }}",
              "rightValue": "reopen",
              "operator": {
                "type": "string",
                "operation": "equals",
                "name": "filter.operator.equals"
              }
            }
          ],
          "combinator": "or"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        -32,
        -448
      ],
      "id": "c73afc8d-6e36-4861-8847-e15f3687e33d",
      "name": "Filter OpenMR"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "7f8b5391-64cf-4f85-94b2-75a8b0912462",
              "leftValue": "={{ $json.body.object_attributes.note.toLowerCase() }}",
              "rightValue": "\ub9ac\ubdf0\ubd07\uc804\uccb4",
              "operator": {
                "type": "string",
                "operation": "startsWith"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        -32,
        -256
      ],
      "id": "2d29ecc7-b162-42c7-8f10-4c4bbbc26255",
      "name": "Filter Comment - All"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "3868ba49-f134-4f00-9501-34e15b6d5488",
              "name": "statKey",
              "value": "mrAll",
              "type": "string"
            }
          ]
        },
        "includeOtherFields": true,
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        192,
        -448
      ],
      "id": "b060a31c-35ad-4152-85f1-b18f56ccb41e",
      "name": "setStatKey - mrAll"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "dd7868e0-28fa-4884-9f2c-a568c00b9527",
              "name": "statKey",
              "value": "commentAll",
              "type": "string"
            }
          ]
        },
        "includeOtherFields": true,
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        192,
        -256
      ],
      "id": "6a659678-3e07-455d-bc30-432f2b24642a",
      "name": "setStatKey - commentAll"
    },
    {
      "parameters": {
        "workflowId": {
          "__rl": true,
          "value": "lDFEqmcUwfrwCoCXa3ACp",
          "mode": "list",
          "cachedResultUrl": "/workflow/lDFEqmcUwfrwCoCXa3ACp",
          "cachedResultName": "B: ReviewBot Simple (\uc804\uccb4 \ub9ac\ubdf0)"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {},
          "matchingColumns": [],
          "schema": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        },
        "options": {}
      },
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        864,
        -288
      ],
      "id": "2fad3a2c-b1fd-409e-9cff-58c4d0f20170",
      "name": "Call Simple ReviewBot"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "196fa6c7-b549-45d5-b7a6-f939c5b182ac",
              "leftValue": "={{ $json.body.object_attributes.type }}",
              "rightValue": "DiffNote",
              "operator": {
                "type": "string",
                "operation": "equals",
                "name": "filter.operator.equals"
              }
            },
            {
              "id": "93a4c0dc-4c04-4deb-a25c-da2bff06b624",
              "leftValue": "={{ $json.body.object_attributes.note.toLowerCase() }}",
              "rightValue": "\ub9ac\ubdf0\ubd07\uc774\uac83\ub9cc",
              "operator": {
                "type": "string",
                "operation": "startsWith"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        -32,
        -64
      ],
      "id": "6f57ec96-94bc-4849-8d28-ab06d73f93a5",
      "name": "Filter Comment - DiffNote"
    },
    {
      "parameters": {
        "workflowId": {
          "__rl": true,
          "value": "XR_C4SwSzNCNY_Q51ZVnu",
          "mode": "list",
          "cachedResultUrl": "/workflow/XR_C4SwSzNCNY_Q51ZVnu",
          "cachedResultName": "B: ReviewBot Delicate (\uc0c1\uc138 \ub9ac\ubdf0)"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {},
          "matchingColumns": [],
          "schema": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        },
        "options": {}
      },
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        864,
        -96
      ],
      "id": "b15a5906-8805-46f0-bb7a-61ef3852c94c",
      "name": "Call Delicate ReviewBot"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "7ae82cbd-d3d3-4269-83c1-d4e22e5d0359",
              "name": "statKey",
              "value": "commentDelicate",
              "type": "string"
            }
          ]
        },
        "includeOtherFields": true,
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        192,
        -64
      ],
      "id": "e9d6840b-056f-4d1f-9bb1-189c9ed646d4",
      "name": "setStatKey - commentDelicate"
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 3
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.statKey }}",
                    "rightValue": "mrAll|commentAll",
                    "operator": {
                      "type": "string",
                      "operation": "regex"
                    },
                    "id": "236ca25f-3fa1-4857-9939-3170b5a367d4"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "all"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 3
                },
                "conditions": [
                  {
                    "id": "5d230f67-7aca-4f8a-b22e-f056c6a10983",
                    "leftValue": "={{ $json.statKey }}",
                    "rightValue": "commentDelicate",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "delicate"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.4,
      "position": [
        640,
        -192
      ],
      "id": "a9c25fc5-d9c3-4f3f-8a57-fee3051c34c5",
      "name": "Route Review Type"
    },
    {
      "parameters": {
        "content": "\u26a0\ufe0f **Send Noti \ub178\ub4dc \uc124\uc815 \ud544\uc694**\n\n`Send Noti` \ub178\ub4dc\uc758 URL\uc744\n\uc5ec\ub7ec\ubd84 \ud300 Mattermost \ucc44\ub110\uc758\n**Incoming Webhook URL**\ub85c \uad50\uccb4\ud558\uc138\uc694.\n\nMattermost \u2192 \ucc44\ub110 \uba54\ub274 \u2192 Integrations\n\u2192 Incoming Webhooks\uc5d0\uc11c \uc0dd\uc131",
        "height": 144,
        "width": 176,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1280,
        -128
      ],
      "typeVersion": 1,
      "id": "2fedb20b-7a80-433f-bf2a-175598097538",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "Workflow \ud65c\uc131\uc5d0 \ud544\uc694\ud55c Credential\uc744 \ub4f1\ub85d\ud558\uc138\uc694 (Ex. GitLab,  GPT API, Redis \ub4f1) ",
        "height": 80,
        "width": 224,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -432,
        -384
      ],
      "typeVersion": 1,
      "id": "92d973bf-f429-4ba6-9e16-60c823975593",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "## \ud83d\udccb B: ReviewBot (\uba54\uc778) \u2014 \uc124\uc815 \uac00\uc774\ub4dc\n\n### 1\ufe0f\u20e3 Credentials \ub4f1\ub85d (\uba3c\uc800 \uc644\ub8cc)\n- **GitLab API**: Personal Access Token (`api` \uc2a4\ucf54\ud504)\n- **Google Gemini(PaLM) API**: Gemini API Key\n- **Redis**: Redis \uc11c\ubc84 \uc811\uc18d \uc815\ubcf4\n\n### 2\ufe0f\u20e3 Send Noti \ub178\ub4dc \uc124\uc815\n- `URL` \ud544\ub4dc\ub97c \ud300 Mattermost \ucc44\ub110 **Incoming Webhook URL**\ub85c \uad50\uccb4\n\n### 3\ufe0f\u20e3 \uc11c\ube0c \uc6cc\ud06c\ud50c\ub85c\uc6b0 \uc5f0\uacb0 (\uc911\uc694!)\n- `Call Simple ReviewBot` \ub178\ub4dc: **ReviewBot Simple** \uc6cc\ud06c\ud50c\ub85c\uc6b0 \uc120\ud0dd\n- `Call Delicate ReviewBot` \ub178\ub4dc: **ReviewBot Delicate** \uc6cc\ud06c\ud50c\ub85c\uc6b0 \uc120\ud0dd\n- \uc138 \ud30c\uc77c\uc744 \ubaa8\ub450 import\ud55c \ud6c4 \uac01 \ub178\ub4dc\uc5d0\uc11c \uc6cc\ud06c\ud50c\ub85c\uc6b0\ub97c \uc7ac\uc120\ud0dd\ud574\uc57c \ud569\ub2c8\ub2e4\n\n### 4\ufe0f\u20e3 GitLab Webhook \ub4f1\ub85d\n- GitLab \ud504\ub85c\uc81d\ud2b8 \u2192 Settings \u2192 Webhooks\n- URL: `https://YOUR_N8N_HOST/webhook/[\uc6f9\ud6c5\ub178\ub4dc Path \uac12]`\n- Trigger: **Merge request events**, **Comments**\n\n### 5\ufe0f\u20e3 \ub9ac\ubdf0\ubd07 \uba85\ub839\uc5b4\n- `\ub9ac\ubdf0\ubd07\uc804\uccb4` : MR \ub313\uae00\ub85c \uc785\ub825 \uc2dc \uc804\uccb4 \ubcc0\uacbd\uc0ac\ud56d AI \ub9ac\ubdf0\n- `\ub9ac\ubdf0\ubd07\uc774\uac83\ub9cc` : Diff \ub77c\uc778 \ub313\uae00\ub85c \uc785\ub825 \uc2dc \ud574\ub2f9 \ud30c\uc77c\ub9cc \uc0c1\uc138 \ub9ac\ubdf0",
        "height": 520,
        "width": 580,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -480,
        -640
      ],
      "id": "setup-guide-b-reviewbot-001",
      "name": "Setup Guide Main"
    },
    {
      "parameters": {
        "content": "## \u2728 \uc774 \uc6cc\ud06c\ud50c\ub85c\uc6b0\uac00 \ud558\ub294 \uc77c\n\n**MR\uc774 \uc5f4\ub9ac\uac70\ub098 \ub2e4\uc2dc \uc5f4\ub9b4 \ub54c**\n\u2192 AI\uac00 \uc804\uccb4 \ubcc0\uacbd\uc0ac\ud56d\uc744 \ubd84\uc11d\ud574 \ucf54\ub4dc \ub9ac\ubdf0 \ucf54\uba58\ud2b8\ub97c MR\uc5d0 \uc790\ub3d9 \ub4f1\ub85d\n\n**MR \ub313\uae00\uc5d0 `\ub9ac\ubdf0\ubd07\uc804\uccb4` \uc785\ub825 \uc2dc**\n\u2192 \uc989\uc2dc \uc804\uccb4 AI \ucf54\ub4dc \ub9ac\ubdf0 \uc7ac\uc2e4\ud589\n\n**\ud2b9\uc815 \ucf54\ub4dc \ub77c\uc778(DiffNote)\uc5d0 `\ub9ac\ubdf0\ubd07\uc774\uac83\ub9cc` \uc785\ub825 \uc2dc**\n\u2192 \ud574\ub2f9 \ud30c\uc77c\ub9cc \uc9d1\uc911 \ubd84\uc11d\ud574 \ud574\ub2f9 \ub313\uae00 \uc2a4\ub808\ub4dc\uc5d0 \ub2f5\uae00\ub85c \uc0c1\uc138 \ub9ac\ubdf0 \ub4f1\ub85d\n\n**\ub9ac\ubdf0 \uc81c\uc678 \uc870\uac74**\n\u2192 `master`, `release` \ube0c\ub79c\uce58 \ub300\uc0c1 MR\uc740 \uae30\ubcf8 \uc81c\uc678 (\ub300\ub7c9 diff \ubc29\uc9c0)\n\u2192 MR \uc124\uba85 \ub610\ub294 \ub313\uae00\uc5d0 `#force-review` \ud3ec\ud568 \uc2dc \uac15\uc81c \uc2e4\ud589\n\u2192 \uc774\ubbf8\uc9c0/\ubc14\uc774\ub108\ub9ac/node_modules \ub4f1\uc740 \uc790\ub3d9\uc73c\ub85c \ub9ac\ubdf0\uc5d0\uc11c \uc81c\uc678\n\n> \uc774 \uc6cc\ud06c\ud50c\ub85c\uc6b0\ub294 **ReviewBot Simple**, **ReviewBot Delicate** \ub450 \uc11c\ube0c \uc6cc\ud06c\ud50c\ub85c\uc6b0\ub97c \ud638\ucd9c\ud569\ub2c8\ub2e4\n> \uc138 \ud30c\uc77c\uc744 \ubaa8\ub450 import\ud55c \ud6c4 \uc5f0\uacb0\ud574\uc57c \ud569\ub2c8\ub2e4",
        "height": 340,
        "width": 480,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -480,
        -1060
      ],
      "id": "feature-guide-b-reviewbot-001",
      "name": "Feature Guide Main"
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Check Event Type",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Event Type": {
      "main": [
        [
          {
            "node": "Filter OpenMR",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Filter Comment - All",
            "type": "main",
            "index": 0
          },
          {
            "node": "Filter Comment - DiffNote",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Deployment": {
      "main": [
        [
          {
            "node": "Route Review Type",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter OpenMR": {
      "main": [
        [
          {
            "node": "setStatKey - mrAll",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Comment - All": {
      "main": [
        [
          {
            "node": "setStatKey - commentAll",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "setStatKey - mrAll": {
      "main": [
        [
          {
            "node": "Filter Deployment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "setStatKey - commentAll": {
      "main": [
        [
          {
            "node": "Filter Deployment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Call Simple ReviewBot": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Send Noti",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Comment - DiffNote": {
      "main": [
        [
          {
            "node": "setStatKey - commentDelicate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Call Delicate ReviewBot": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "setStatKey - commentDelicate": {
      "main": [
        [
          {
            "node": "Filter Deployment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route Review Type": {
      "main": [
        [
          {
            "node": "Call Simple ReviewBot",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Call Delicate ReviewBot",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1",
    "availableInMCP": false
  },
  "versionId": "b75bb7ea-fcc3-4275-a25e-d9642e483770",
  "id": "rw_SEDuYoCG_GFVSTI08q",
  "tags": []
}