Jelajahi Sumber

修复 iOS 本地历史分页响应

LSamien 1 bulan lalu
induk
melakukan
5ce9fb8d27
7 mengubah file dengan 25 tambahan dan 10 penghapusan
  1. 1 1
      README.md
  2. 4 0
      docs/releases/v0.3.24.md
  3. 2 2
      package-lock.json
  4. 1 1
      package.json
  5. 3 3
      release.json
  6. 10 2
      src/server/chatCache.ts
  7. 4 1
      tests/server/chatCache.test.ts

+ 1 - 1
README.md

@@ -1,6 +1,6 @@
 # 夭夭 Web
 
-当前发布版本:**v0.3.23**,配套 iOS **1.3(181)**。详见 [发布说明](docs/releases/v0.3.23.md)。
+当前发布版本:**v0.3.24**,配套 iOS **1.3(181)**。详见 [发布说明](docs/releases/v0.3.24.md)。
 
 夭夭 Web 为网页和 iOS 提供统一的 Agent、群聊、文件库及语音配置服务。Hermes 通过标准 9119 HTTP/WebSocket 接口执行任务;无需安装 Yaoyao 插件。
 

+ 4 - 0
docs/releases/v0.3.24.md

@@ -0,0 +1,4 @@
+# v0.3.24
+
+- 修复 15300 本地消息页缺少 iOS Gateway 所需的 `session_id` 与 `pagination.has_more`,避免“加载更早消息”出现数据缺失。
+- 本地消息页同时保留 Web 所需的会话摘要,Web 与 iOS 继续共用同一持久化数据。

+ 2 - 2
package-lock.json

@@ -1,12 +1,12 @@
 {
   "name": "hermes-yaoyao",
-  "version": "0.3.23",
+  "version": "0.3.24",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "hermes-yaoyao",
-      "version": "0.3.23",
+      "version": "0.3.24",
       "license": "BSL-1.1",
       "dependencies": {
         "@koa/bodyparser": "^5.0.0",

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "hermes-yaoyao",
-  "version": "0.3.23",
+  "version": "0.3.24",
   "private": true,
   "license": "BSL-1.1",
   "description": "夭夭 Web:直连 Hermes 9119 的聊天、团队、文件库与产物工作台",

+ 3 - 3
release.json

@@ -1,6 +1,6 @@
 {
   "schemaVersion": 1,
-  "releaseVersion": "0.3.23",
-  "webVersion": "0.3.23",
-  "gitTag": "v0.3.23"
+  "releaseVersion": "0.3.24",
+  "webVersion": "0.3.24",
+  "gitTag": "v0.3.24"
 }

+ 10 - 2
src/server/chatCache.ts

@@ -177,8 +177,16 @@ export class ChatCacheStore {
       AND position>=? AND position<? ORDER BY position`).all(owner, profile, sessionID, start, end) as Array<{ data: string }>
     const messages = rows.map(row => JSON.parse(row.data))
     const body = Buffer.from(JSON.stringify({
-      session: JSON.parse(String(session.data)), messages,
-      pagination: { total, returned: messages.length, offset, limit, hasMore: start > 0 },
+      session_id: sessionID,
+      session: JSON.parse(String(session.data)),
+      messages,
+      pagination: {
+        total,
+        returned: messages.length,
+        offset,
+        limit,
+        has_more: start > 0,
+      },
     }))
     return {
       response: { status: 200, headers: new Headers({ 'content-type': 'application/json; charset=utf-8' }), body },

+ 4 - 1
tests/server/chatCache.test.ts

@@ -62,7 +62,10 @@ describe('durable source=web chat cache', () => {
     }))
 
     const page = f.store.messagePage(owner, profile, sessionID, 0, 100)
-    expect(JSON.parse(page!.response.body.toString()).messages.map((item: { id: string }) => item.id)).toEqual(['m1', 'm2'])
+    const payload = JSON.parse(page!.response.body.toString())
+    expect(payload.session_id).toBe(sessionID)
+    expect(payload.pagination).toMatchObject({ total: 2, returned: 2, offset: 0, limit: 100, has_more: false })
+    expect(payload.messages.map((item: { id: string }) => item.id)).toEqual(['m1', 'm2'])
     expect(f.store.messagePage('another-owner', profile, sessionID, 0, 100)).toBeUndefined()
     f.store.close()
   })