)]}'
{
  "commit": "30aaacd00e0df1f48db3fcd3e263149f84e00391",
  "tree": "52e634086430981cf90a2cf5817635232ce2b021",
  "parents": [
    "1b6837da6361f1d735ac9ef1ea8cfc245918ff35"
  ],
  "author": {
    "name": "吴晟 Wu Sheng",
    "email": "wu.sheng@foxmail.com",
    "time": "Tue Sep 15 23:03:29 2026 +0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Sep 15 23:03:29 2026 +0800"
  },
  "message": "Read AI agent conversation files over the OAP\u0027s HTTP route (#235)\n\nThe OAP drops the getConversationRawFiles GraphQL query. A conversation\u0027s\nstored Session Data files are read from its HTTP route beside the view,\nGET /ai-agent/conversations/{conversation}/v1/files, and the view and the\nfiles route now both require the service and the sender\u0027s instance.\n\n- ai-agent files requires --instance-name, --session and --seqs. A file is\n  chosen by its session and its landed seq, which the conversation\u0027s\n  asz.view document lists; there is no read of every file. The seqs are\n  asked for 32 at a time, the route\u0027s limit, over one HTTP client.\n- The body, application/vnd.skywalking.asz.files+ndjson, is read file by\n  file: a naming line, then exactly the bytes it names, then the newline\n  that follows a non-empty file not ending with one. Each file is checked\n  against its sha256, and a size no response carries is never allocated.\n- --export writes through os.Root, so a file\u0027s name cannot reach outside\n  the export directory, through \"..\" or through a symbolic link.\n- ai-agent view requires --instance-name.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5e1abc269fbbff3a7d15637f5c6ad635b3b5c9d6",
      "old_mode": 33188,
      "old_path": "CHANGES.md",
      "new_id": "63d55f8f303c7d2065793c466a390301cb4c7b67",
      "new_mode": 33188,
      "new_path": "CHANGES.md"
    },
    {
      "type": "delete",
      "old_id": "824e2c884dc63593ab871b17719ee2cee0bd3550",
      "old_mode": 33188,
      "old_path": "assets/graphqls/aiagent/ConversationRawFiles.graphql",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "6eec3df75945d6f3ef3bc61cc42f4b2b230247a0",
      "old_mode": 33188,
      "old_path": "internal/commands/aiagent/aiagent.go",
      "new_id": "6ad5c3c51be740bb918db40a296300bc363f079a",
      "new_mode": 33188,
      "new_path": "internal/commands/aiagent/aiagent.go"
    },
    {
      "type": "modify",
      "old_id": "f3cb2933f8ab9f3ac5276c904a7b1b448c913b1f",
      "old_mode": 33188,
      "old_path": "internal/commands/aiagent/files.go",
      "new_id": "b0ac9b004c5fd64dc9fe807c0baffae38034c52a",
      "new_mode": 33188,
      "new_path": "internal/commands/aiagent/files.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1ed6964561f594d3e1af60e5fca42c6c492f8022",
      "new_mode": 33188,
      "new_path": "internal/commands/aiagent/files_test.go"
    },
    {
      "type": "modify",
      "old_id": "2bbb385202e38e04f30e4ecf935deda5b06ec203",
      "old_mode": 33188,
      "old_path": "internal/commands/aiagent/view.go",
      "new_id": "1eaf88241892e6c0f8896845638460d2f1774042",
      "new_mode": 33188,
      "new_path": "internal/commands/aiagent/view.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c8a0ae24b965bda916f1ab51ad62d8ba07f16f54",
      "new_mode": 33188,
      "new_path": "pkg/aiagent/files/files.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3b00357d2577233830da40c563a37aac89f03138",
      "new_mode": 33188,
      "new_path": "pkg/aiagent/files/files_test.go"
    },
    {
      "type": "modify",
      "old_id": "94546c62c419e8890a839063c84cc398cbe263a2",
      "old_mode": 33188,
      "old_path": "pkg/aiagent/view/view.go",
      "new_id": "9042ada263ea570c21d3b8762b12a3b959a42abc",
      "new_mode": 33188,
      "new_path": "pkg/aiagent/view/view.go"
    },
    {
      "type": "modify",
      "old_id": "dadf6168bf3f641cf6584388b63a10cb6b5f3c47",
      "old_mode": 33188,
      "old_path": "pkg/aiagent/view/view_test.go",
      "new_id": "fb9089ce7dad717925da624a4fc9ae7ddb589322",
      "new_mode": 33188,
      "new_path": "pkg/aiagent/view/view_test.go"
    },
    {
      "type": "modify",
      "old_id": "fce0246f2e3a1d50ac1c0cedfcce41ed1bad2ad3",
      "old_mode": 33188,
      "old_path": "pkg/graphql/aiagent/conversation.go",
      "new_id": "b9ebd264c532829d6f4e4f0c66632216cc71776a",
      "new_mode": 33188,
      "new_path": "pkg/graphql/aiagent/conversation.go"
    }
  ]
}
