{
  "name": "release-watcher",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 2
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -400,
        -112
      ],
      "id": "1473353c-6538-45f9-a1ff-355c450bb918",
      "name": "Schedule Trigger"
    },
    {
      "parameters": {
        "url": "https://registry.npmjs.org/@anthropic-ai/claude-code/latest",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        -256,
        -112
      ],
      "id": "36329eca-3a65-44ce-81c2-af025cf8b269",
      "name": "cc-npm"
    },
    {
      "parameters": {
        "url": "https://registry.npmjs.org/n8n/stable",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        -112,
        -112
      ],
      "id": "20be78aa-1f0a-4738-a74a-fe70f8e379f0",
      "name": "n8n-npm"
    },
    {
      "parameters": {
        "jsCode": "const cc = $('cc-npm').first().json.version;\nconst nn = $('n8n-npm').first().json.version;\nreturn [\n  { json: { pkg: 'claude-code', ver: cc,\n    tagUrl: `https://api.github.com/repos/anthropics/claude-code/releases/tags/v${cc}`,\n    htmlUrl: `https://github.com/anthropics/claude-code/releases/tag/v${cc}` } },\n  { json: { pkg: 'n8n', ver: nn,\n    tagUrl: `https://api.github.com/repos/n8n-io/n8n/releases/tags/n8n@${nn}`,\n    htmlUrl: `https://github.com/n8n-io/n8n/releases/tag/n8n@${nn}` } },\n];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        32,
        -112
      ],
      "id": "3c0f1d51-38f7-4b8b-8ef6-1f5a07f73057",
      "name": "Code in JavaScript"
    },
    {
      "parameters": {
        "operation": "get",
        "dataTableId": {
          "__rl": true,
          "value": "IFU1i57L2SEfTHGL",
          "mode": "list",
          "cachedResultName": "release_state",
          "cachedResultUrl": "/projects/OtTy3FhDgI26ifRA/datatables/IFU1i57L2SEfTHGL"
        },
        "filters": {
          "conditions": [
            {
              "keyName": "pkg",
              "keyValue": "={{ $json.pkg }}"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.dataTable",
      "typeVersion": 1.1,
      "position": [
        192,
        -112
      ],
      "id": "3f4443e4-9824-4071-8cc6-8d2695321f7f",
      "name": "Get row(s)",
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "jsCode": "const current = $('Code in JavaScript').all().map(i => i.json);\nconst stored = $('Get row(s)').all().map(i => i.json).filter(r => r && r.pkg);\n\nreturn current\n  .filter(c => {\n    const row = stored.find(s => s.pkg === c.pkg);\n    return !row || row.last_ver !== c.ver;   // no stored row, or version changed = new release\n  })\n  .map(c => ({ json: c }));"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        352,
        -112
      ],
      "id": "0a8d0a7a-e085-4b9d-b345-451e7f469a8a",
      "name": "diff"
    },
    {
      "parameters": {
        "url": "={{ $json.tagUrl }}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        528,
        -112
      ],
      "id": "004aae51-88d0-4e5a-92d7-fabdcccc4ff4",
      "name": "release-notes"
    },
    {
      "parameters": {
        "authentication": "webhook",
        "content": "=🔔 **{{ $('diff').item.json.pkg }} {{ $('diff').item.json.ver }}** released\n\n{{ ($json.body || '').slice(0, 1500) }}\n\n{{ $('diff').item.json.htmlUrl }}",
        "options": {}
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        736,
        -112
      ],
      "id": "a6134af5-f371-4228-bc23-c81861a2de46",
      "name": "Discord",
      "webhookId": "4f0e992f-964d-4d28-ab01-26e6c817441f",
      "credentials": {
        "discordWebhookApi": {
          "id": "0RAIGf4wMYxsgVP8",
          "name": "Discord Webhook account"
        }
      }
    },
    {
      "parameters": {
        "operation": "upsert",
        "dataTableId": {
          "__rl": true,
          "value": "IFU1i57L2SEfTHGL",
          "mode": "list",
          "cachedResultName": "release_state",
          "cachedResultUrl": "/projects/OtTy3FhDgI26ifRA/datatables/IFU1i57L2SEfTHGL"
        },
        "filters": {
          "conditions": [
            {
              "keyName": "pkg",
              "keyValue": "={{ $('diff').item.json.pkg }}"
            }
          ]
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "pkg": "={{ $('diff').item.json.pkg }}",
            "last_ver": "={{ $('diff').item.json.ver }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "pkg",
              "displayName": "pkg",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "readOnly": false,
              "removed": false
            },
            {
              "id": "last_ver",
              "displayName": "last_ver",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "readOnly": false,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.dataTable",
      "typeVersion": 1.1,
      "position": [
        944,
        -112
      ],
      "id": "ae3aa0a0-63f2-4dfd-9ffa-48c8e5f50cb4",
      "name": "Upsert row(s)"
    }
  ],
  "pinData": {},
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "cc-npm",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "n8n-npm": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "cc-npm": {
      "main": [
        [
          {
            "node": "n8n-npm",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "Get row(s)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s)": {
      "main": [
        [
          {
            "node": "diff",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "diff": {
      "main": [
        [
          {
            "node": "release-notes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "release-notes": {
      "main": [
        [
          {
            "node": "Discord",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Discord": {
      "main": [
        [
          {
            "node": "Upsert row(s)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "availableInMCP": false,
    "timeSavedMode": "fixed",
    "errorWorkflow": "zs3ouzlgEfxJfUyg",
    "callerPolicy": "workflowsFromSameOwner"
  },
  "versionId": "5facca71-11ff-4f04-8b9f-5e536b42d15c",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "2d862da1dd45531ff15779bef31e5e19c87acd1c14034c331c783c8980f117a5"
  },
  "nodeGroups": [],
  "id": "h1BZSB9As2KQ9DzS",
  "tags": []
}