protocol.json 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. {
  2. "protocol": "ordinary-chat-transcript-v2",
  3. "snapshot": {
  4. "protocol": "ordinary-chat-transcript-v2",
  5. "epoch": "fixture-epoch",
  6. "cursor": 1,
  7. "profile": "p",
  8. "sessionId": "s",
  9. "messages": [
  10. {
  11. "id": "answer",
  12. "source_message_id": "upstream-a",
  13. "turn_id": "turn-1",
  14. "segment_kind": "answer",
  15. "seq": 2,
  16. "revision": 1,
  17. "role": "assistant",
  18. "content": "前半段",
  19. "reasoning": "思考",
  20. "status": "streaming"
  21. }
  22. ],
  23. "session": {},
  24. "hasOlder": true,
  25. "total": 2,
  26. "state": "current",
  27. "running": true,
  28. "queued": false
  29. },
  30. "events": [
  31. {
  32. "cursor": 2,
  33. "previousCursor": 1,
  34. "epoch": "fixture-epoch",
  35. "profile": "p",
  36. "sessionId": "s",
  37. "type": "message.patch",
  38. "total": 2,
  39. "data": {
  40. "id": "answer",
  41. "seq": 2,
  42. "baseRevision": 1,
  43. "revision": 2,
  44. "contentAppend": "后半段",
  45. "reasoningAppend": "继续"
  46. }
  47. },
  48. {
  49. "cursor": 2,
  50. "previousCursor": 1,
  51. "epoch": "fixture-epoch",
  52. "profile": "p",
  53. "sessionId": "s",
  54. "type": "message.patch",
  55. "total": 2,
  56. "data": {
  57. "id": "answer",
  58. "seq": 2,
  59. "baseRevision": 1,
  60. "revision": 2,
  61. "contentAppend": "后半段",
  62. "reasoningAppend": "继续"
  63. }
  64. },
  65. {
  66. "cursor": 3,
  67. "previousCursor": 2,
  68. "epoch": "fixture-epoch",
  69. "profile": "p",
  70. "sessionId": "s",
  71. "type": "message.upsert",
  72. "total": 2,
  73. "data": {
  74. "id": "answer",
  75. "source_message_id": "persisted-42",
  76. "turn_id": "turn-1",
  77. "segment_kind": "answer",
  78. "seq": 2,
  79. "revision": 3,
  80. "role": "assistant",
  81. "content": "前半段后半段",
  82. "reasoning": "思考继续",
  83. "status": "complete",
  84. "final_result": true
  85. }
  86. },
  87. {
  88. "cursor": 4,
  89. "previousCursor": 3,
  90. "epoch": "fixture-epoch",
  91. "profile": "p",
  92. "sessionId": "s",
  93. "type": "message.deleted",
  94. "total": 1,
  95. "data": { "id": "old-preview", "seq": 1, "revision": 2 }
  96. }
  97. ],
  98. "stalePage": {
  99. "protocol": "ordinary-chat-transcript-v2",
  100. "epoch": "fixture-epoch",
  101. "cursor": 1,
  102. "profile": "p",
  103. "sessionId": "s",
  104. "messages": [
  105. {
  106. "id": "old-preview",
  107. "seq": 1,
  108. "revision": 1,
  109. "role": "assistant",
  110. "content": "前半段",
  111. "status": "complete"
  112. }
  113. ],
  114. "deletedIds": [],
  115. "session": {},
  116. "hasOlder": false,
  117. "total": 2,
  118. "state": "current"
  119. },
  120. "expectedMessages": [
  121. {
  122. "id": "answer",
  123. "source_message_id": "persisted-42",
  124. "turn_id": "turn-1",
  125. "segment_kind": "answer",
  126. "seq": 2,
  127. "revision": 3,
  128. "role": "assistant",
  129. "content": "前半段后半段",
  130. "reasoning": "思考继续",
  131. "status": "complete",
  132. "final_result": true
  133. }
  134. ]
  135. }