)]}'
{
  "commit": "5f26a3445601f6ab0299d9be20ea99b67eae4d51",
  "tree": "740ba6f60a055e4e6ad8ec92e75992ca9d2b0795",
  "parents": [
    "da623b50da804963768d2633cb2686a9d91d49b9"
  ],
  "author": {
    "name": "Philip Zeyliger",
    "email": "philip@bold.dev",
    "time": "Fri Jul 04 01:30:29 2025 +0000"
  },
  "committer": {
    "name": "Philip Zeyliger",
    "email": "philip@bold.dev",
    "time": "Thu Jul 03 21:14:55 2025 -0700"
  },
  "message": "sketch/loop: add PortMonitor for TCP port monitoring with Agent integration\n\nAdd PortMonitor struct that uses Tailscale portlist library to monitor\nopen/listening TCP ports and send AgentMessage notifications to Agent\nwhen ports are opened or closed, with cached port list access method.\n\nWhen I asked Sketch to do this with the old implementation, it did\nok parsing /proc, but then it tried to conver it to ss format...\nusing a library seems to work ok!\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s8fc57de4b5583d34k\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "66ab7e1572c4222a4d04ffa23e73b1cf02835877",
      "old_mode": 33188,
      "old_path": "go.mod",
      "new_id": "18f76c2a2cfbeb506751929d164c499ba78637e3",
      "new_mode": 33188,
      "new_path": "go.mod"
    },
    {
      "type": "modify",
      "old_id": "9cbb5095dfb9d4f63bdf3e863105bb05f5eea4c9",
      "old_mode": 33188,
      "old_path": "go.sum",
      "new_id": "b00a177356f18b9814419f8b21bbe2149adcb749",
      "new_mode": 33188,
      "new_path": "go.sum"
    },
    {
      "type": "modify",
      "old_id": "8f9692401382bd3cb8dd40930ccb81b1e5f52aec",
      "old_mode": 33188,
      "old_path": "loop/agent.go",
      "new_id": "82d823ed728230284cbb8c776c0195d1b6d1fdc7",
      "new_mode": 33188,
      "new_path": "loop/agent.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c122e5117f887b560170dac1d6591ecde229dfef",
      "new_mode": 33188,
      "new_path": "loop/port_monitor.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4190e5a41f592f2c8166db0290a550fc147e6652",
      "new_mode": 33188,
      "new_path": "loop/port_monitor_demo_test.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5ad5c2ec57369588cb3a0a79222f94f2c79865d9",
      "new_mode": 33188,
      "new_path": "loop/port_monitor_test.go"
    },
    {
      "type": "modify",
      "old_id": "b6e2259644119b59fe297758d8f9e4672f0060cf",
      "old_mode": 33188,
      "old_path": "loop/server/loophttp.go",
      "new_id": "3f90f8bae6c7864b21090060b48254bd327e01f2",
      "new_mode": 33188,
      "new_path": "loop/server/loophttp.go"
    },
    {
      "type": "modify",
      "old_id": "f6ec8c7db8d472dc8460b0075d1438cbe30403d6",
      "old_mode": 33188,
      "old_path": "loop/server/loophttp_test.go",
      "new_id": "cd97b12cc0e51dc175f49eeb9c85673dc1b37ead",
      "new_mode": 33188,
      "new_path": "loop/server/loophttp_test.go"
    }
  ]
}
