@yach.zhiyinlou.com/yach 2.13.3 → 2.14.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -58,6 +58,7 @@ export const YACH_TOOL_SCOPES = {
58
58
  yach_group_add_members: ["im:group_user:add"],
59
59
  yach_group_list_members: ["im:group_member:list"],
60
60
  yach_group_remove_members: [],
61
+ yach_group_dismiss: ["im:group:delete"],
61
62
  yach_im_message_recall: [],
62
63
  yach_weekly_list: ["weekly:list"],
63
64
  yach_weekly_draft_get: ["weekly:draft:info"],
@@ -70,6 +71,9 @@ export const YACH_TOOL_SCOPES = {
70
71
  yach_team_list: ["user:team:list:info"],
71
72
  yach_topic_publish_post: ["squad:create"],
72
73
  yach_topic_publish_comment: ["squad:doc_comment:send"],
74
+ yach_topic_list_posts: ["squad:post:list"],
75
+ yach_topic_list_post_comments: ["squad:post:comment:list"],
76
+ yach_topic_list_post_comment_replies: ["squad:post:comment:reply:list"],
73
77
  yach_meeting_record_text: ["meeting:record:text"],
74
78
  yach_meeting_attended_list: ["meeting:attended:list"],
75
79
  yach_voice_note_minutes_list: ["voice_note:minutes:list"],
@@ -82,7 +86,10 @@ export const YACH_TOOL_SCOPES = {
82
86
  yach_space_node_activity_list: ["lore:activity:list"],
83
87
  yach_doc_sheet_update: ["doc:sheet:update"],
84
88
  yach_doc_sheet_append: ["doc:sheet:v2:append"],
85
- yach_weekly_work_summary: ["weekly:work:content:submit", "weekly:work:content:query"],
89
+ yach_weekly_work_summary: [
90
+ "weekly:work:content:submit",
91
+ "weekly:work:content:query",
92
+ ],
86
93
  yach_calendar_share: ["schedule:share:v2"],
87
94
  yach_calendar_group_create: ["schedule:group:create_or_join"],
88
95
  // 获取节假日仅支持 app_access_token,app 模式不做 user scope 预检
@@ -1 +1 @@
1
- {"version":3,"file":"tool-scopes.js","sourceRoot":"","sources":["../../../src/core/tool-scopes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-scopes.js","sourceRoot":"","sources":["../../../src/core/tool-scopes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA0GH,wDAAwD;AACxD,8DAA8D;AAC9D,yBAAyB;AAEzB,0EAA0E;AAE1E,+BAA+B;AAC/B,MAAM,CAAC,MAAM,gBAAgB,GAAwC;IACnE,oBAAoB,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAElE,kBAAkB,EAAE,CAAC,kBAAkB,CAAC;IACxC,oBAAoB,EAAE,CAAC,kBAAkB,CAAC;IAC1C,oBAAoB,EAAE,CAAC,oBAAoB,CAAC;IAC5C,oBAAoB,EAAE,CAAC,oBAAoB,CAAC;IAC5C,aAAa,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC;IAClD,eAAe,EAAE,CAAC,oBAAoB,CAAC;IACvC,oBAAoB,EAAE;QACpB,iBAAiB;QACjB,qBAAqB;KACtB;IACD,eAAe,EAAE,CAAC,qBAAqB,EAAE,uBAAuB,CAAC;IACjE,eAAe,EAAE,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;IAC7D,kBAAkB,EAAE;QAClB,iBAAiB;QACjB,uBAAuB;QACvB,cAAc;QACd,sBAAsB;QACtB,+BAA+B;KAChC;IACD,sBAAsB,EAAE,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;IACvE,sBAAsB,EAAE;QACtB,sBAAsB;QACtB,+BAA+B;KAChC;IACD,cAAc,EAAE;QACd,sBAAsB,EAAE,QAAQ;QAChC,mBAAmB,EAAE,QAAQ;QAC7B,kBAAkB,EAAE,QAAQ;QAC5B,kBAAkB,EAAE,QAAQ;KAC7B;IACD,mBAAmB,EAAE,CAAC,uBAAuB,CAAC;IAC9C,yBAAyB,EAAE,CAAC,6BAA6B,CAAC;IAC1D,gBAAgB,EAAE,CAAC,uBAAuB,CAAC;IAC3C,oBAAoB,EAAE,EAAE;IACxB,gBAAgB,EAAE,CAAC,iBAAiB,EAAE,eAAe,CAAC;IACtD,iBAAiB,EAAE,EAAE;IACrB,iBAAiB,EAAE,CAAC,iBAAiB,CAAC;IACtC,sBAAsB,EAAE,CAAC,mBAAmB,CAAC;IAC7C,uBAAuB,EAAE,CAAC,sBAAsB,CAAC;IACjD,yBAAyB,EAAE,EAAE;IAC7B,kBAAkB,EAAE,CAAC,iBAAiB,CAAC;IACvC,sBAAsB,EAAE,EAAE;IAC1B,gBAAgB,EAAE,CAAC,aAAa,CAAC;IACjC,qBAAqB,EAAE,CAAC,mBAAmB,CAAC;IAC5C,sBAAsB,EAAE;QACtB,mBAAmB;QACnB,kBAAkB;QAClB,mBAAmB;KACpB;IACD,aAAa,EAAE,CAAC,UAAU,CAAC;IAC3B,cAAc,EAAE,CAAC,qBAAqB,CAAC;IACvC,uBAAuB,EAAE,CAAC,cAAc,CAAC;IACzC,0BAA0B,EAAE,CAAC,wBAAwB,CAAC;IACtD,qBAAqB,EAAE,CAAC,iBAAiB,CAAC;IAC1C,6BAA6B,EAAE,CAAC,yBAAyB,CAAC;IAC1D,oCAAoC,EAAE,CAAC,+BAA+B,CAAC;IACvE,wBAAwB,EAAE,CAAC,qBAAqB,CAAC;IACjD,0BAA0B,EAAE,CAAC,uBAAuB,CAAC;IACrD,4BAA4B,EAAE,CAAC,yBAAyB,CAAC;IACzD,sBAAsB,EAAE,CAAC,kBAAkB,CAAC;IAC5C,oBAAoB,EAAE,CAAC,gBAAgB,CAAC;IACxC,8BAA8B,EAAE,CAAC,sBAAsB,CAAC;IACxD,8BAA8B,EAAE,CAAC,6BAA6B,CAAC;IAC/D,oBAAoB,EAAE,CAAC,oBAAoB,CAAC;IAC5C,4BAA4B,EAAE,CAAC,kBAAkB,CAAC;IAClD,6BAA6B,EAAE,CAAC,oBAAoB,CAAC;IACrD,qBAAqB,EAAE,CAAC,kBAAkB,CAAC;IAC3C,qBAAqB,EAAE,CAAC,qBAAqB,CAAC;IAC9C,wBAAwB,EAAE;QACxB,4BAA4B;QAC5B,2BAA2B;KAC5B;IACD,mBAAmB,EAAE,CAAC,mBAAmB,CAAC;IAC1C,0BAA0B,EAAE,CAAC,+BAA+B,CAAC;IAC7D,mDAAmD;IACnD,sBAAsB,EAAE,EAAE;CAC3B,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAA6B;IAC7D,OAAO,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC"}
@@ -52,6 +52,14 @@ export class YachGroupApi {
52
52
  if (!isOk(data.code))
53
53
  throw new Error(`[yach-group] removeMembers error: ${JSON.stringify(data)}`);
54
54
  }
55
+ /** 解散群(POST /group/dismiss) */
56
+ async dismissGroup(groupId) {
57
+ const token = await this.getToken();
58
+ const res = await postForm(`${this.baseUrl}/group/dismiss?access_token=${encodeURIComponent(token)}`, { group_tid: groupId });
59
+ const data = (await res.json());
60
+ if (!isOk(data.code))
61
+ throw new Error(`[yach-group] dismissGroup error: ${JSON.stringify(data)}`);
62
+ }
55
63
  /** 获取群成员列表(POST /group/users/list) */
56
64
  async listMembers(groupId) {
57
65
  const token = await this.getToken();
@@ -1 +1 @@
1
- {"version":3,"file":"group.js","sourceRoot":"","sources":["../../../src/oapi/group.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"group.js","sourceRoot":"","sources":["../../../src/oapi/group.ts"],"names":[],"mappings":"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"}
@@ -81,5 +81,117 @@ export class YachTopicApi {
81
81
  log.debug("publishComment ok", { docId, result: result.obj });
82
82
  return result.obj || {};
83
83
  }
84
+ /**
85
+ * 获取话题群帖子列表(分页)
86
+ *
87
+ * @param params.squadId 话题群ID
88
+ * @param params.pageSize 每页条数,范围 1-50(可选,超界服务端自动截断)
89
+ * @param params.lastDocId 分页游标,首页留空;翻页传上一页响应的 next_last_doc_id
90
+ */
91
+ async listPosts(params) {
92
+ const token = await this.getToken();
93
+ log.debug("listPosts", {
94
+ squadId: params.squadId,
95
+ pageSize: params.pageSize,
96
+ lastDocId: params.lastDocId,
97
+ });
98
+ const body = {
99
+ access_token: token,
100
+ squad_id: params.squadId,
101
+ };
102
+ if (params.pageSize !== undefined)
103
+ body.page_size = params.pageSize;
104
+ if (params.lastDocId)
105
+ body.last_doc_id = params.lastDocId;
106
+ const res = await oapiFetch(`${this.baseUrl}/openapi/v2/squad/post/list`, {
107
+ method: "POST",
108
+ headers: { "Content-Type": "application/json" },
109
+ body: JSON.stringify(body),
110
+ });
111
+ const result = (await res.json());
112
+ if (result.code !== 200 && result.code !== 0) {
113
+ throw new YachApiError(`[yach-oapi] listPosts error: ${JSON.stringify(result)}\n` +
114
+ ` request: /openapi/v2/squad/post/list squad_id=${params.squadId}`, result.code);
115
+ }
116
+ return result.obj ?? {
117
+ info: { squad_id: params.squadId, squad_name: "" },
118
+ list: [],
119
+ has_more: false,
120
+ next_last_doc_id: null,
121
+ };
122
+ }
123
+ /**
124
+ * 获取话题群帖子评论列表(分页)
125
+ *
126
+ * 返回一级评论数组,每条一级评论在 child 中随附有限条二级回复(楼中楼)。
127
+ * 二级回复的更多内容需用专门的回复列表接口按 child.last_id 翻页。
128
+ *
129
+ * @param params.mid 帖子标识(来自帖子列表的 mid,格式 doc_id-ctime)
130
+ * @param params.lastCid 一级评论分页游标,首页留空;翻页传上一页响应的 last_id
131
+ * @param params.replyLimit 每条一级评论随附的二级回复条数,范围 1-10(超界服务端自动截断)
132
+ */
133
+ async listPostComments(params) {
134
+ const token = await this.getToken();
135
+ log.debug("listPostComments", {
136
+ mid: params.mid,
137
+ lastCid: params.lastCid,
138
+ replyLimit: params.replyLimit,
139
+ });
140
+ const body = {
141
+ access_token: token,
142
+ mid: params.mid,
143
+ };
144
+ if (params.lastCid)
145
+ body.last_cid = params.lastCid;
146
+ if (params.replyLimit !== undefined)
147
+ body.reply_limit = params.replyLimit;
148
+ const res = await oapiFetch(`${this.baseUrl}/openapi/v2/squad/post/comment/list`, {
149
+ method: "POST",
150
+ headers: { "Content-Type": "application/json" },
151
+ body: JSON.stringify(body),
152
+ });
153
+ const result = (await res.json());
154
+ if (result.code !== 200 && result.code !== 0) {
155
+ throw new YachApiError(`[yach-oapi] listPostComments error: ${JSON.stringify(result)}\n` +
156
+ ` request: /openapi/v2/squad/post/comment/list mid=${params.mid}`, result.code);
157
+ }
158
+ return result.obj ?? { list: [], has_more: false, last_id: "", comment_count: 0 };
159
+ }
160
+ /**
161
+ * 获取话题群帖子评论的回复列表(二级/三级回复,分页)
162
+ *
163
+ * 用于续拉某条一级评论下的二级回复(评论列表中 child 只随附有限条)。
164
+ * 返回扁平回复数组,每条带 target 指向被回复对象。
165
+ *
166
+ * @param params.mid 帖子标识(格式 doc_id-ctime)
167
+ * @param params.cid 一级评论 ID
168
+ * @param params.lastCid 回复分页游标,首页留空;翻页传上一页响应的 last_id
169
+ */
170
+ async listPostCommentReplies(params) {
171
+ const token = await this.getToken();
172
+ log.debug("listPostCommentReplies", {
173
+ mid: params.mid,
174
+ cid: params.cid,
175
+ lastCid: params.lastCid,
176
+ });
177
+ const body = {
178
+ access_token: token,
179
+ mid: params.mid,
180
+ cid: params.cid,
181
+ };
182
+ if (params.lastCid)
183
+ body.last_cid = params.lastCid;
184
+ const res = await oapiFetch(`${this.baseUrl}/openapi/v2/squad/post/comment/reply/list`, {
185
+ method: "POST",
186
+ headers: { "Content-Type": "application/json" },
187
+ body: JSON.stringify(body),
188
+ });
189
+ const result = (await res.json());
190
+ if (result.code !== 200 && result.code !== 0) {
191
+ throw new YachApiError(`[yach-oapi] listPostCommentReplies error: ${JSON.stringify(result)}\n` +
192
+ ` request: /openapi/v2/squad/post/comment/reply/list mid=${params.mid} cid=${params.cid}`, result.code);
193
+ }
194
+ return result.obj ?? { list: [], has_more: false, last_id: "", reply_count: 0 };
195
+ }
84
196
  }
85
197
  //# sourceMappingURL=topic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"topic.js","sourceRoot":"","sources":["../../../src/oapi/topic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"topic.js","sourceRoot":"","sources":["../../../src/oapi/topic.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * yach_group — 知音楼群组管理工具(app token)
3
3
  *
4
- * 支持 action:create / add_members / list_members / remove_members
4
+ * 支持 action:create / add_members / list_members / remove_members / dismiss
5
5
  */
6
6
  import { Type } from "@sinclair/typebox";
7
7
  import { jsonResult } from "openclaw/plugin-sdk/agent-runtime";
@@ -9,8 +9,8 @@ import { createYachToolClient } from "../../core/tool-client.js";
9
9
  import { handleInvokeErrorWithAutoAuth } from "../auto-auth.js";
10
10
  import { StringEnum } from "../helpers.js";
11
11
  const GroupSchema = Type.Object({
12
- action: StringEnum(["create", "add_members", "list_members", "remove_members"], {
13
- description: "操作类型:create 创建群;add_members 添加群成员;list_members 获取群成员列表;remove_members 删除群成员",
12
+ action: StringEnum(["create", "add_members", "list_members", "remove_members", "dismiss"], {
13
+ description: "操作类型:create 创建群;add_members 添加群成员;list_members 获取群成员列表;remove_members 删除群成员;dismiss 解散群",
14
14
  }),
15
15
  // create
16
16
  group_name: Type.Optional(Type.String({ description: "群名称(create 必填)" })),
@@ -23,7 +23,7 @@ const GroupSchema = Type.Object({
23
23
  tpl_ext: Type.Optional(Type.String({ description: "群应用跳转需要的业务参数(create 可选)" })),
24
24
  unique_key: Type.Optional(Type.String({ description: "用于验证幂等性的唯一值(create 可选)" })),
25
25
  // add_members / remove_members / list_members
26
- group_id: Type.Optional(Type.String({ description: "群ID(add_members/remove_members/list_members 必填)" })),
26
+ group_id: Type.Optional(Type.String({ description: "群ID(add_members/remove_members/list_members/dismiss 必填)" })),
27
27
  op_uid: Type.Optional(Type.String({ description: "操作用户ID(add_members/remove_members 必填)" })),
28
28
  // list_members
29
29
  page: Type.Optional(Type.Number({ description: "当前页数(list_members 可选,默认1)" })),
@@ -34,7 +34,7 @@ export function createGroupTool() {
34
34
  name: "yach_group",
35
35
  label: "知音楼群组管理",
36
36
  description: "知音楼群组管理(使用 app token):" +
37
- "create 创建群;add_members 添加群成员;list_members 获取群成员列表;remove_members 删除群成员。" +
37
+ "create 创建群;add_members 添加群成员;list_members 获取群成员列表;remove_members 删除群成员;dismiss 解散群。" +
38
38
  "群成员数量限制:最多1000人。",
39
39
  parameters: GroupSchema,
40
40
  execute: async (_toolCallId, rawParams) => {
@@ -80,6 +80,13 @@ export function createGroupTool() {
80
80
  await client.invoke("yach_group_remove_members", (c) => c.group.removeMembers(params.group_id, params.member_user_ids, params.op_uid), { as: "app" });
81
81
  return jsonResult({ ok: true });
82
82
  }
83
+ case "dismiss": {
84
+ if (!params.group_id) {
85
+ return jsonResult({ ok: false, error: "dismiss: group_id 为必填" });
86
+ }
87
+ await client.invoke("yach_group_dismiss", (c) => c.group.dismissGroup(params.group_id), { as: "user" });
88
+ return jsonResult({ ok: true });
89
+ }
83
90
  default:
84
91
  return jsonResult({ ok: false, error: `未知 action: ${params.action}` });
85
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/group/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/group/index.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,18 @@
1
1
  /**
2
2
  * Yach Topic Tools — 话题群(小队)工具
3
3
  *
4
- * 提供话题群中发布帖子、评论功能。
4
+ * 提供话题群中发布帖子、评论、帖子列表、帖子评论列表、评论回复列表查询功能。
5
5
  */
6
6
  import { createTopicPublishPostTool } from "./publish-post.js";
7
7
  import { createTopicPublishCommentTool } from "./publish-comment.js";
8
+ import { createTopicListPostsTool } from "./list-posts.js";
9
+ import { createTopicListPostCommentsTool } from "./list-post-comments.js";
10
+ import { createTopicListPostCommentRepliesTool } from "./list-post-comment-replies.js";
8
11
  export function registerTopicTools(api) {
9
12
  api.registerTool(createTopicPublishPostTool());
10
13
  api.registerTool(createTopicPublishCommentTool());
14
+ api.registerTool(createTopicListPostsTool());
15
+ api.registerTool(createTopicListPostCommentsTool());
16
+ api.registerTool(createTopicListPostCommentRepliesTool());
11
17
  }
12
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/topic/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAErE,MAAM,UAAU,kBAAkB,CAAC,GAAsB;IACvD,GAAG,CAAC,YAAY,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAC/C,GAAG,CAAC,YAAY,CAAC,6BAA6B,EAAE,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/topic/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,qCAAqC,EAAE,MAAM,gCAAgC,CAAC;AAEvF,MAAM,UAAU,kBAAkB,CAAC,GAAsB;IACvD,GAAG,CAAC,YAAY,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAC/C,GAAG,CAAC,YAAY,CAAC,6BAA6B,EAAE,CAAC,CAAC;IAClD,GAAG,CAAC,YAAY,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC7C,GAAG,CAAC,YAAY,CAAC,+BAA+B,EAAE,CAAC,CAAC;IACpD,GAAG,CAAC,YAAY,CAAC,qCAAqC,EAAE,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * yach_topic_list_post_comment_replies — 获取话题群帖子评论的回复列表
3
+ *
4
+ * 续拉某条一级评论下的二级/三级回复(评论列表中 child 只随附有限条)。
5
+ * 返回扁平回复数组,每条带 target 指向被回复对象。分页用 last_id/has_more。
6
+ *
7
+ * ## 参数
8
+ * - mid 帖子标识(必填,格式 doc_id-ctime)
9
+ * - cid 一级评论 ID(必填)
10
+ * - last_cid 回复分页游标(可选):首页留空;翻页传上一页响应的 last_id
11
+ *
12
+ * ## 权限
13
+ * 需 OAuth 授权(user_access_token)
14
+ * scope: squad:post:comment:reply:list
15
+ */
16
+ import { Type } from "@sinclair/typebox";
17
+ import { jsonResult } from "openclaw/plugin-sdk/agent-runtime";
18
+ import { createYachToolClient } from "../../core/tool-client.js";
19
+ import { handleInvokeErrorWithAutoAuth } from "../auto-auth.js";
20
+ function unixToReadableString(unixTime, timezone = "Asia/Shanghai") {
21
+ return new Date(unixTime * 1000).toLocaleString("zh-CN", { timeZone: timezone, hour12: false });
22
+ }
23
+ const ListPostCommentRepliesSchema = Type.Object({
24
+ mid: Type.String({
25
+ description: "帖子标识(必填,格式 doc_id-ctime,来自帖子列表的 mid)",
26
+ }),
27
+ cid: Type.String({
28
+ description: "一级评论 ID(必填,来自评论列表 list[].cid 或 child.list[].target.cid)",
29
+ }),
30
+ last_cid: Type.Optional(Type.String({
31
+ description: "回复分页游标(可选):首页留空;翻页传上一页响应的 last_id",
32
+ })),
33
+ });
34
+ export function createTopicListPostCommentRepliesTool() {
35
+ return {
36
+ name: "yach_topic_list_post_comment_replies",
37
+ label: "话题群帖子评论回复列表",
38
+ description: "获取指定一级评论下的二级/三级回复列表(分页)。用于续拉评论列表中 child 未取全的回复。" +
39
+ "返回扁平回复数组,每条带 target 指向被回复对象。mid+cid 必填;分页用响应 last_id 作为下一页 last_cid,reply_count=0 表示已拉完。" +
40
+ "以当前用户身份调用,需 OAuth 授权。",
41
+ parameters: ListPostCommentRepliesSchema,
42
+ execute: async (_toolCallId, rawParams) => {
43
+ const params = rawParams;
44
+ if (!params.mid || !params.cid) {
45
+ return jsonResult({ ok: false, error: "mid、cid 为必填" });
46
+ }
47
+ const client = createYachToolClient();
48
+ try {
49
+ const result = await client.invoke("yach_topic_list_post_comment_replies", (c) => c.topic.listPostCommentReplies({
50
+ mid: params.mid,
51
+ cid: params.cid,
52
+ lastCid: params.last_cid,
53
+ }), { as: "user" });
54
+ // 把每条回复的 ctime(秒级时间戳)转成可读时间
55
+ if (result?.list) {
56
+ result.list = result.list.map((reply) => ({
57
+ ...reply,
58
+ ctime_str: reply.ctime != null ? unixToReadableString(reply.ctime) : undefined,
59
+ }));
60
+ }
61
+ return jsonResult({ ok: true, ...result });
62
+ }
63
+ catch (err) {
64
+ return handleInvokeErrorWithAutoAuth(err, undefined, {
65
+ toolName: "yach_topic_list_post_comment_replies",
66
+ });
67
+ }
68
+ },
69
+ };
70
+ }
71
+ //# sourceMappingURL=list-post-comment-replies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-post-comment-replies.js","sourceRoot":"","sources":["../../../../src/tools/topic/list-post-comment-replies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAEhE,SAAS,oBAAoB,CAAC,QAAgB,EAAE,QAAQ,GAAG,eAAe;IACxE,OAAO,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,4BAA4B,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/C,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,sCAAsC;KACpD,CAAC;IACF,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,yDAAyD;KACvE,CAAC;IACF,QAAQ,EAAE,IAAI,CAAC,QAAQ,CACrB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EAAE,mCAAmC;KACjD,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,qCAAqC;IACnD,OAAO;QACL,IAAI,EAAE,sCAAsC;QAC5C,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,iDAAiD;YACjD,0FAA0F;YAC1F,uBAAuB;QACzB,UAAU,EAAE,4BAA4B;QACxC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,SAId,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBAC/B,OAAO,UAAU,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;YACzD,CAAC;YAED,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;YAEtC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,sCAAsC,EACtC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC;oBAC7B,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,OAAO,EAAE,MAAM,CAAC,QAAQ;iBACzB,CAAC,EACJ,EAAE,EAAE,EAAE,MAAM,EAAE,CACf,CAAC;gBAEF,4BAA4B;gBAC5B,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;oBACjB,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;wBAC7C,GAAG,KAAK;wBACR,SAAS,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;qBAC/E,CAAC,CAAC,CAAC;gBACN,CAAC;gBAED,OAAO,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,6BAA6B,CAAC,GAAG,EAAE,SAAS,EAAE;oBACnD,QAAQ,EAAE,sCAAsC;iBACjD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * yach_topic_list_post_comments — 获取话题群帖子评论列表
3
+ *
4
+ * 按帖子标识拉取一级评论,每条一级评论在 child 中随附有限条二级回复(楼中楼)。
5
+ * 一级评论分页用 last_id;二级回复更多内容需用专门的回复列表接口按 child.last_id 翻页。
6
+ *
7
+ * ## 参数
8
+ * - mid 帖子标识(必填,来自帖子列表的 mid,格式 doc_id-ctime)
9
+ * - last_cid 一级评论分页游标(可选):首页留空;翻页传上一页响应的 last_id
10
+ * - reply_limit 每条一级评论随附的二级回复条数(可选,1-10,超界服务端自动截断)
11
+ *
12
+ * ## 权限
13
+ * 需 OAuth 授权(user_access_token)
14
+ * scope: squad:post:comment:list
15
+ */
16
+ import { Type } from "@sinclair/typebox";
17
+ import { jsonResult } from "openclaw/plugin-sdk/agent-runtime";
18
+ import { createYachToolClient } from "../../core/tool-client.js";
19
+ import { handleInvokeErrorWithAutoAuth } from "../auto-auth.js";
20
+ function unixToReadableString(unixTime, timezone = "Asia/Shanghai") {
21
+ return new Date(unixTime * 1000).toLocaleString("zh-CN", { timeZone: timezone, hour12: false });
22
+ }
23
+ /** 递归为每层评论的 ctime 补上可读时间字符串,避免模型误换算 */
24
+ function withReadableCtime(items) {
25
+ return (items ?? []).map((item) => ({
26
+ ...item,
27
+ ctime_str: item.ctime != null ? unixToReadableString(item.ctime) : undefined,
28
+ child: item.child
29
+ ? { ...item.child, list: withReadableCtime(item.child.list) }
30
+ : item.child,
31
+ }));
32
+ }
33
+ const ListPostCommentsSchema = Type.Object({
34
+ mid: Type.String({
35
+ description: "帖子标识(必填,来自帖子列表的 mid,格式 doc_id-ctime)",
36
+ }),
37
+ last_cid: Type.Optional(Type.String({
38
+ description: "一级评论分页游标(可选):首页留空;翻页传上一页响应的 last_id",
39
+ })),
40
+ reply_limit: Type.Optional(Type.Number({
41
+ description: "每条一级评论随附的二级回复条数,范围 1-10(可选,超界服务端自动截断到边界值)",
42
+ })),
43
+ });
44
+ export function createTopicListPostCommentsTool() {
45
+ return {
46
+ name: "yach_topic_list_post_comments",
47
+ label: "话题群帖子评论列表",
48
+ description: "获取指定帖子的评论列表(分页)。返回一级评论数组,每条一级评论在 child 中随附有限条二级回复(楼中楼)。" +
49
+ "一级评论分页用响应的 last_id 作为下一页 last_cid;二级回复更多内容需用专门的回复列表接口按 child.last_id 翻页。" +
50
+ "mid 来自帖子列表(yach_topic_list_posts 返回的 list[].mid)。以当前用户身份调用,需 OAuth 授权。",
51
+ parameters: ListPostCommentsSchema,
52
+ execute: async (_toolCallId, rawParams) => {
53
+ const params = rawParams;
54
+ if (!params.mid) {
55
+ return jsonResult({ ok: false, error: "mid 为必填" });
56
+ }
57
+ const client = createYachToolClient();
58
+ try {
59
+ const result = await client.invoke("yach_topic_list_post_comments", (c) => c.topic.listPostComments({
60
+ mid: params.mid,
61
+ lastCid: params.last_cid,
62
+ replyLimit: params.reply_limit,
63
+ }), { as: "user" });
64
+ // 递归把每层评论的 ctime(秒级时间戳)转成可读时间
65
+ if (result?.list) {
66
+ result.list = withReadableCtime(result.list);
67
+ }
68
+ return jsonResult({ ok: true, ...result });
69
+ }
70
+ catch (err) {
71
+ return handleInvokeErrorWithAutoAuth(err, undefined, {
72
+ toolName: "yach_topic_list_post_comments",
73
+ });
74
+ }
75
+ },
76
+ };
77
+ }
78
+ //# sourceMappingURL=list-post-comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-post-comments.js","sourceRoot":"","sources":["../../../../src/tools/topic/list-post-comments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * yach_topic_list_posts — 获取话题群帖子列表
3
+ *
4
+ * 分页拉取指定话题群的帖子。返回每个帖子的 doc_id、mid、发帖人、文本、
5
+ * 图片/视频/链接/标签、评论数等。mid 可用于进一步拉取帖子评论列表。
6
+ *
7
+ * ## 参数
8
+ * - squad_id 话题群ID(必填,即 publish_post 返回的 squadId)
9
+ * - page_size 每页条数,范围 1-50(可选,超界服务端自动截断)
10
+ * - last_doc_id 分页游标(可选):首页留空;翻页传上一页响应的 next_last_doc_id
11
+ *
12
+ * ## 权限
13
+ * 需 OAuth 授权(user_access_token)
14
+ */
15
+ import { Type } from "@sinclair/typebox";
16
+ import { jsonResult } from "openclaw/plugin-sdk/agent-runtime";
17
+ import { createYachToolClient } from "../../core/tool-client.js";
18
+ import { handleInvokeErrorWithAutoAuth } from "../auto-auth.js";
19
+ function unixToReadableString(unixTime, timezone = "Asia/Shanghai") {
20
+ return new Date(unixTime * 1000).toLocaleString("zh-CN", { timeZone: timezone, hour12: false });
21
+ }
22
+ const ListPostsSchema = Type.Object({
23
+ squad_id: Type.String({
24
+ description: "话题群ID(必填,即 publish_post 返回的 squadId)",
25
+ }),
26
+ page_size: Type.Optional(Type.Number({
27
+ description: "每页条数,范围 1-50(可选,超界服务端自动截断到边界值)",
28
+ })),
29
+ last_doc_id: Type.Optional(Type.String({
30
+ description: "分页游标(可选):首页留空;翻页传上一页响应的 next_last_doc_id",
31
+ })),
32
+ });
33
+ export function createTopicListPostsTool() {
34
+ return {
35
+ name: "yach_topic_list_posts",
36
+ label: "话题群帖子列表",
37
+ description: "获取指定话题群的帖子列表(分页)。返回每个帖子的 doc_id、mid、发帖人、文本、图片/视频/链接/标签、评论数等。" +
38
+ "mid 用于进一步拉取帖子评论列表。以当前用户身份调用,需 OAuth 授权。",
39
+ parameters: ListPostsSchema,
40
+ execute: async (_toolCallId, rawParams) => {
41
+ const params = rawParams;
42
+ if (!params.squad_id) {
43
+ return jsonResult({ ok: false, error: "squad_id 为必填" });
44
+ }
45
+ const client = createYachToolClient();
46
+ try {
47
+ const result = await client.invoke("yach_topic_list_posts", (c) => c.topic.listPosts({
48
+ squadId: params.squad_id,
49
+ pageSize: params.page_size,
50
+ lastDocId: params.last_doc_id,
51
+ }), { as: "user" });
52
+ // 把 ctime(秒级时间戳)转成可读时间,避免模型误换算
53
+ if (result?.list) {
54
+ result.list = result.list.map((post) => ({
55
+ ...post,
56
+ ctime_str: post.ctime != null ? unixToReadableString(post.ctime) : undefined,
57
+ }));
58
+ }
59
+ return jsonResult({ ok: true, ...result });
60
+ }
61
+ catch (err) {
62
+ return handleInvokeErrorWithAutoAuth(err, undefined, { toolName: "yach_topic_list_posts" });
63
+ }
64
+ },
65
+ };
66
+ }
67
+ //# sourceMappingURL=list-posts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-posts.js","sourceRoot":"","sources":["../../../../src/tools/topic/list-posts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAEhE,SAAS,oBAAoB,CAAC,QAAgB,EAAE,QAAQ,GAAG,eAAe;IACxE,OAAO,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;IAClC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,sCAAsC;KACpD,CAAC;IACF,SAAS,EAAE,IAAI,CAAC,QAAQ,CACtB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EAAE,gCAAgC;KAC9C,CAAC,CACH;IACD,WAAW,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EAAE,0CAA0C;KACxD,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,8DAA8D;YAC9D,yCAAyC;QAC3C,UAAU,EAAE,eAAe;QAC3B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,SAId,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,OAAO,UAAU,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;YAEtC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAChC,uBAAuB,EACvB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;oBAChB,OAAO,EAAE,MAAM,CAAC,QAAQ;oBACxB,QAAQ,EAAE,MAAM,CAAC,SAAS;oBAC1B,SAAS,EAAE,MAAM,CAAC,WAAW;iBAC9B,CAAC,EACJ,EAAE,EAAE,EAAE,MAAM,EAAE,CACf,CAAC;gBAEF,+BAA+B;gBAC/B,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;oBACjB,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;wBAC5C,GAAG,IAAI;wBACP,SAAS,EACP,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;qBACpE,CAAC,CAAC,CAAC;gBACN,CAAC;gBAED,OAAO,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,6BAA6B,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,uBAAuB,EAAE,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -32,6 +32,9 @@
32
32
  "yach_okr",
33
33
  "yach_topic_publish_post",
34
34
  "yach_topic_publish_comment",
35
+ "yach_topic_list_posts",
36
+ "yach_topic_list_post_comments",
37
+ "yach_topic_list_post_comment_replies",
35
38
  "yach_group",
36
39
  "yach_meeting_record_text",
37
40
  "yach_meeting_attended_list",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yach.zhiyinlou.com/yach",
3
- "version": "2.13.3",
3
+ "version": "2.14.0-beta.1",
4
4
  "description": "OpenClaw Yach (知音楼) channel plugin",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -64,7 +64,7 @@
64
64
  "order": 80
65
65
  },
66
66
  "install": {
67
- "npmSpec": "@yach.zhiyinlou.com/yach@2.13.3",
67
+ "npmSpec": "@yach.zhiyinlou.com/yach@2.14.0-beta.1",
68
68
  "defaultChoice": "npm",
69
69
  "minHostVersion": ">=2026.3.22"
70
70
  }
@@ -2,7 +2,7 @@
2
2
  name: yach-group
3
3
  description: >
4
4
  ⚠️ 调用本工具任何能力前,必须先用 read 工具完整读取本文件,然后遵从具体规则使用。
5
- 知音楼群组管理能力。用户要"创建群/加人进群/踢人出群/看群成员"时使用。
5
+ 知音楼群组管理能力。用户要"创建群/加人进群/踢人出群/看群成员/解散群"时使用。
6
6
  ---
7
7
 
8
8
  ## 工具:`yach_group`
@@ -15,6 +15,7 @@ description: >
15
15
  | `add_members` | `group_id`, `member_user_ids`, `op_uid` | 添加群成员 |
16
16
  | `list_members` | `group_id` | 获取群成员列表 |
17
17
  | `remove_members` | `group_id`, `member_user_ids`, `op_uid` | 删除群成员 |
18
+ | `dismiss` | `group_id` | 解散群(不可恢复,仅群主可操作) |
18
19
 
19
20
  ## 参数详解
20
21
 
@@ -54,6 +55,14 @@ description: >
54
55
  | `member_user_ids` | ✅ | 要删除的成员用户 ID 数组 |
55
56
  | `op_uid` | ✅ | 操作人用户 ID |
56
57
 
58
+ ### 解散群 (`dismiss`)
59
+
60
+ | 参数 | 必填 | 说明 |
61
+ | --- | --- | --- |
62
+ | `group_id` | ✅ | 群 ID(`group_tid`) |
63
+
64
+ > ⚠️ 解散群是不可恢复操作,整个群及群成员关系将永久删除。调用前必须向用户二次确认。仅群主有权解散。
65
+
57
66
  ## 返回结构
58
67
 
59
68
  ### 创建群
@@ -122,6 +131,12 @@ description: >
122
131
  把 yach100004 从群 2771361680 里移除,操作人是 yach100001
123
132
  ```
124
133
 
134
+ ### 5. 解散群
135
+
136
+ ```
137
+ 把群 2771361680 解散
138
+ ```
139
+
125
140
  ## 常见错误
126
141
 
127
142
  - 创建群失败 → 检查 `owner_user_id` 格式是否正确(`yach` 开头)
@@ -2,7 +2,7 @@
2
2
  name: yach-topic
3
3
  description: >
4
4
  ⚠️ 调用本工具任何能力前,必须先用 read 工具完整读取本文件,然后遵从具体规则使用。
5
- 知音楼话题群互动能力。当用户提到"在话题群发帖/对话题群帖子评论/话题群互动/话题群讨论/话题群求助/话题群分享"时使用。重点关注话题群中的发布、评论、@提醒等互动场景。
5
+ 知音楼话题群互动能力。当用户提到"在话题群发帖/对话题群帖子评论/查看话题群帖子/查看帖子评论/查看评论回复/话题群互动/话题群讨论/话题群求助/话题群分享"时使用。重点关注话题群中的发布、评论、列表浏览、@提醒等互动场景。
6
6
  ---
7
7
 
8
8
  ## 核心场景识别
@@ -10,6 +10,9 @@ description: >
10
10
  **判断使用场景**:
11
11
  - 用户说"发个帖子/发布一条/分享到话题群" → 使用 `yach_topic_publish_post`
12
12
  - 用户说"评论一下/回复这条/对帖子表态" → 使用 `yach_topic_publish_comment`
13
+ - 用户说"看看话题群有哪些帖子/帖子列表/话题群里发了什么" → 使用 `yach_topic_list_posts`
14
+ - 用户说"看看帖子评论/帖子下都有谁回复/评论列表" → 使用 `yach_topic_list_post_comments`
15
+ - 用户说"展开这条评论的回复/楼中楼还有哪些/回复列表" → 使用 `yach_topic_list_post_comment_replies`
13
16
  - 用户提到具体"话题群/squad/话题讨论"时,主动询问是否需要互动
14
17
 
15
18
  ---
@@ -126,6 +129,389 @@ description: >
126
129
 
127
130
  ---
128
131
 
132
+ ## 工具:`yach_topic_list_posts`
133
+
134
+ ### 参数速查
135
+
136
+ | 参数 | 必填 | 说明 |
137
+ | --- | --- | --- |
138
+ | `squad_id` | ✅ | 话题群ID(即 `publish_post` 返回的 `squadId`,数字格式) |
139
+ | `page_size` | — | 每页条数,范围 1-50,超界服务端自动截断 |
140
+ | `last_doc_id` | — | 分页游标:首页留空;翻页传上一页响应的 `next_last_doc_id` |
141
+
142
+ ### 使用模式
143
+
144
+ **首页拉取**:
145
+ ```json
146
+ { "squad_id": "34718885", "page_size": 20 }
147
+ ```
148
+
149
+ **翻页拉取**(用上一页返回的 `next_last_doc_id`):
150
+ ```json
151
+ { "squad_id": "34718885", "page_size": 20, "last_doc_id": "235421" }
152
+ ```
153
+
154
+ ### 返回结构
155
+
156
+ ```json
157
+ {
158
+ "ok": true,
159
+ "info": { "squad_id": "34718885", "squad_name": "dddd" },
160
+ "list": [
161
+ {
162
+ "doc_id": "235421",
163
+ "squad_id": "34718885",
164
+ "user_id": "821391600142946348",
165
+ "user_name": "王威",
166
+ "ctime": 1785400556,
167
+ "ctime_str": "2026/8/26 18:09:16",
168
+ "mid": "235421-1785400556",
169
+ "comment_count": 51,
170
+ "text": "第二个帖子@聂军瑞 [暗中观察]",
171
+ "at_users": [
172
+ { "text": "", "type": "mention", "index": 5, "atName": "@聂军瑞", "user_id": "yach167680" }
173
+ ],
174
+ "image_list": [{ "url": "https://yach-static-test.zhiyinlou.com/.../x.png" }],
175
+ "video_list": [{ "url": "https://yach-static-test.zhiyinlou.com/.../x.mp4" }],
176
+ "link_list": [{ "url": "www.baidu.com" }],
177
+ "tag_list": [{ "id": 426, "name": "滚滚滚" }]
178
+ }
179
+ ],
180
+ "has_more": true,
181
+ "next_last_doc_id": "235421"
182
+ }
183
+ ```
184
+
185
+ **顶层字段**
186
+
187
+ | 字段 | 说明 |
188
+ | --- | --- |
189
+ | `ok` | 工具调用是否成功 |
190
+ | `info` | 话题群基本信息 |
191
+ | `info.squad_id` | 话题群 ID |
192
+ | `info.squad_name` | 话题群名称 |
193
+ | `list` | 帖子数组,按时间倒序排列 |
194
+ | `has_more` | 是否还有更多帖子;`true` 时可用 `next_last_doc_id` 翻页 |
195
+ | `next_last_doc_id` | 下一页游标;`has_more=false` 时为 `null`,首页请求时不传此参数 |
196
+
197
+ **帖子字段 `list[]`**
198
+
199
+ | 字段 | 说明 |
200
+ | --- | --- |
201
+ | `doc_id` | 帖子 ID(字符串数字,如 `"235421"`);调用 `publish_comment` 评论此帖时作为 `doc_id` 传入 |
202
+ | `squad_id` | 帖子所属话题群 ID |
203
+ | `user_id` | 发帖人 ID(内部长整型字符串,如 `"821391600142946348"`,**非** `yach` 开头;如需 yach 开头的用户 ID 见 `at_users[].user_id`) |
204
+ | `user_name` | 发帖人姓名 |
205
+ | `ctime` | 发帖时间,秒级 Unix 时间戳(整数) |
206
+ | `ctime_str` | 发帖时间可读字符串(本工具由 `ctime` 转换得来,如 `"2026/8/26 18:09:16"`,**勿自行换算 `ctime`**,直接读此字段) |
207
+ | `mid` | 帖子标识,格式 `doc_id-ctime`(如 `"235421-1785400556"`);用于拉取帖子评论列表 |
208
+ | `comment_count` | 该帖子的评论总数(整数) |
209
+ | `text` | 帖子正文文本,可能含 `@某人` 与表情占位符(如 `[暗中观察]`) |
210
+ | `at_users` | 帖子正文中 @ 的人员列表,数组;无 @ 时为空数组 |
211
+ | `image_list` | 帖子附图列表,数组;每项含 `url`,最多 9 张 |
212
+ | `video_list` | 帖子附视频列表,数组;每项含 `url` |
213
+ | `link_list` | 帖子中包含的链接列表,数组;每项含 `url` |
214
+ | `tag_list` | 帖子标签列表,数组;每项含 `id` 与 `name` |
215
+
216
+ **`at_users[]` 子字段**(帖子正文里每个 @ 的详情)
217
+
218
+ | 字段 | 说明 |
219
+ | --- | --- |
220
+ | `text` | 占位文本,一般为空字符串 |
221
+ | `type` | 固定值 `"mention"` |
222
+ | `index` | 该 @ 在 `text` 原文中的字符起始位置(整数) |
223
+ | `atName` | @ 的展示名,如 `"@聂军瑞"` |
224
+ | `user_id` | 被 @ 人的用户 ID(`yach` 开头,如 `"yach167680"`) |
225
+
226
+ **`image_list[]` / `video_list[]` / `link_list[]` 子字段**
227
+
228
+ | 字段 | 说明 |
229
+ | --- | --- |
230
+ | `url` | 资源链接:图片/视频为可访问 URL,链接为帖子中出现的网址 |
231
+
232
+ **`tag_list[]` 子字段**
233
+
234
+ | 字段 | 说明 |
235
+ | --- | --- |
236
+ | `id` | 标签 ID(整数) |
237
+ | `name` | 标签名称 |
238
+
239
+ ### 智能建议
240
+
241
+ **翻页策略**:
242
+ - 只看近期帖子 → 单次 `page_size=20` 即可
243
+ - 浏览全部 → 循环用 `next_last_doc_id` 翻页,直到 `has_more=false`
244
+ - 找特定帖子 → 按页拉取后在 `text`/`user_name` 中匹配
245
+
246
+ **与发帖/评论联动**:
247
+ - 先 `list_posts` 拿到 `doc_id`,再用 `publish_comment` 对该帖评论
248
+ - `publish_post` 返回的 `squadId` 可直接作为本工具的 `squad_id`
249
+
250
+ ---
251
+
252
+ ## 工具:`yach_topic_list_post_comments`
253
+
254
+ ### 参数速查
255
+
256
+ | 参数 | 必填 | 说明 |
257
+ | --- | --- | --- |
258
+ | `mid` | ✅ | 帖子标识,来自 `list_posts` 返回的 `list[].mid`,格式 `doc_id-ctime` |
259
+ | `last_cid` | — | 一级评论分页游标:首页留空;翻页传上一页响应的 `last_id` |
260
+ | `reply_limit` | — | 每条一级评论随附的二级回复条数,范围 1-10,超界服务端自动截断 |
261
+
262
+ ### 使用模式
263
+
264
+ **首页拉取**:
265
+ ```json
266
+ { "mid": "235421-1785400556", "reply_limit": 5 }
267
+ ```
268
+
269
+ **翻页拉取**(用上一页返回的 `last_id` 作为 `last_cid`):
270
+ ```json
271
+ { "mid": "235421-1785400556", "last_cid": "894517223958482944", "reply_limit": 5 }
272
+ ```
273
+
274
+ ### 返回结构
275
+
276
+ 返回一级评论数组,每条一级评论在 `child` 中随附有限条二级回复(楼中楼)。二级回复更多内容需用专门的回复列表接口按 `child.last_id` 翻页。
277
+
278
+ ```json
279
+ {
280
+ "ok": true,
281
+ "list": [
282
+ {
283
+ "mid": "235421-1785400556",
284
+ "cid": "892796134291042588",
285
+ "user_id": "821391600142946348",
286
+ "uname": "王威",
287
+ "upic": "https://.../avatar.png",
288
+ "ctime": 1785400600,
289
+ "ctime_str": "2026/8/26 18:10:00",
290
+ "level": 1,
291
+ "comment": [{ "type": "mention", "atName": "@聂军瑞", "user_id": "yach167680" }],
292
+ "attachment": [],
293
+ "child": {
294
+ "list": [
295
+ {
296
+ "mid": "235421-1785400556",
297
+ "cid": "892796134291042601",
298
+ "user_id": "821391600142946348",
299
+ "uname": "王威",
300
+ "upic": "https://.../avatar.png",
301
+ "ctime": 1785400659,
302
+ "ctime_str": "2026/8/26 18:10:59",
303
+ "level": 2,
304
+ "comment": [{ "type": "text", "value": "这是1个小回复" }],
305
+ "attachment": [{ "type": "file", "fileUrl": "https://.../x.md" }],
306
+ "target": { "cid": "892796134291042588", "user_id": "821391600142946348", "uname": "王威", "upic": "https://.../avatar.png" }
307
+ }
308
+ ],
309
+ "last_id": "892796134291042603",
310
+ "reply_total": 3
311
+ }
312
+ }
313
+ ],
314
+ "has_more": true,
315
+ "last_id": "894517223958482944",
316
+ "comment_count": 51
317
+ }
318
+ ```
319
+
320
+ **顶层字段**
321
+
322
+ | 字段 | 说明 |
323
+ | --- | --- |
324
+ | `ok` | 工具调用是否成功 |
325
+ | `list` | 一级评论数组 |
326
+ | `has_more` | 是否还有更多一级评论;`true` 时用 `last_id` 作为下一页 `last_cid` |
327
+ | `last_id` | 当前页最后一条一级评论的 `cid`,作为下一页 `last_cid`;`has_more=false` 时无下一页 |
328
+ | `comment_count` | 该帖子评论总数 |
329
+
330
+ **一级评论字段 `list[]`**
331
+
332
+ | 字段 | 说明 |
333
+ | --- | --- |
334
+ | `mid` | 帖子标识(`doc_id-ctime`) |
335
+ | `cid` | 回复 ID;对评论发表二级回复时按此定位 |
336
+ | `user_id` | 回复人 ID(内部长整型字符串,**非** `yach` 开头;`yach` 开头的用户 ID 见 `comment[].user_id`) |
337
+ | `uname` | 回复人姓名 |
338
+ | `upic` | 回复人头像 URL |
339
+ | `ctime` | 回复时间,秒级 Unix 时间戳(整数) |
340
+ | `ctime_str` | 回复时间可读字符串(本工具由 `ctime` 转换,**勿自行换算 `ctime`**,直接读此字段) |
341
+ | `level` | 回复层级:`1`=一级评论,`2`=二级回复,`3`=三级回复 |
342
+ | `comment` | 评论内容片段数组,见下;按顺序拼接即为完整评论正文 |
343
+ | `attachment` | 附件数组,见下;无附件时为空数组 |
344
+ | `child` | 二级回复(楼中楼),**仅一级评论上有**;二级/三级回复无此字段 |
345
+ | `target` | 该回复所回复的目标对象,**仅二级/三级回复上有**;一级评论无此字段 |
346
+
347
+ **`comment[]` 内容片段子字段**(文本与 @ 人混合排列)
348
+
349
+ | 字段 | 说明 |
350
+ | --- | --- |
351
+ | `type` | 片段类型:`text`(文本)/ `mention`(@ 人) |
352
+ | `value` | `type=text` 时为该段文本内容;`type=mention` 时为空字符串 |
353
+ | `text` | `type=mention` 时的占位文本,一般为空字符串 |
354
+ | `index` | `type=mention` 时为该 @ 在原文中的字符起始位置(整数) |
355
+ | `atName` | `type=mention` 时的 @ 展示名,如 `"@聂军瑞"` |
356
+ | `user_id` | `type=mention` 时为被 @ 人 ID(`yach` 开头,如 `"yach167680"`) |
357
+
358
+ > 拼接规则:遍历 `comment[]`,`type=text` 取 `value`,`type=mention` 取 `atName`,按 `index` 顺序拼成完整正文。
359
+
360
+ **`attachment[]` 附件子字段**
361
+
362
+ | 字段 | 说明 |
363
+ | --- | --- |
364
+ | `type` | 附件类型,如 `file` |
365
+ | `fileUrl` | 文件 URL |
366
+
367
+ **`child` 二级回复字段**(仅一级评论上有)
368
+
369
+ | 字段 | 说明 |
370
+ | --- | --- |
371
+ | `child.list` | 二级回复数组,每项结构同一级评论(含 `cid`/`uname`/`comment`/`attachment` 等),`level=2` |
372
+ | `child.last_id` | 二级回复分页游标;更多二级回复需用专门的回复列表接口按此翻页 |
373
+ | `child.reply_total` | 该一级评论下的二级回复总数 |
374
+
375
+ **`target` 目标对象子字段**(仅二级/三级回复上有,指被回复的对象)
376
+
377
+ | 字段 | 说明 |
378
+ | --- | --- |
379
+ | `cid` | 被回复评论/回复的 `cid` |
380
+ | `user_id` | 被回复人 ID(内部长整型) |
381
+ | `uname` | 被回复人姓名 |
382
+ | `upic` | 被回复人头像 URL |
383
+
384
+ ### 智能建议
385
+
386
+ **分页策略**:
387
+ - 一级评论分页:用响应 `last_id` 作为下一页 `last_cid`,循环到 `has_more=false`
388
+ - 二级回复分页:`child.reply_total` 大于 `child.list` 实际返回数时,表示二级回复未取全,需用专门回复列表接口按 `child.last_id` 续拉
389
+ - `reply_limit` 调大(最多 10)可减少二级回复续拉次数
390
+
391
+ **与帖子列表联动**:
392
+ - 先 `list_posts` 拿到 `mid`,再用本工具拉评论
393
+ - `comment_count`(顶层)与 `list_posts` 返回的 `list[].comment_count` 一致,可据此判断是否需要翻页
394
+
395
+ ---
396
+
397
+ ## 工具:`yach_topic_list_post_comment_replies`
398
+
399
+ ### 参数速查
400
+
401
+ | 参数 | 必填 | 说明 |
402
+ | --- | --- | --- |
403
+ | `mid` | ✅ | 帖子标识,格式 `doc_id-ctime`(来自 `list_posts` 的 `list[].mid`) |
404
+ | `cid` | ✅ | 一级评论 ID(来自 `list_post_comments` 的 `list[].cid`,或 `child.list[].target.cid`) |
405
+ | `last_cid` | — | 回复分页游标:首页留空;翻页传上一页响应的 `last_id` |
406
+
407
+ ### 使用模式
408
+
409
+ **首页拉取**(展开某条一级评论的回复):
410
+ ```json
411
+ { "mid": "235421-1785400556", "cid": "892796134291042590" }
412
+ ```
413
+
414
+ **翻页拉取**(用上一页返回的 `last_id` 作为 `last_cid`):
415
+ ```json
416
+ { "mid": "235421-1785400556", "cid": "892796134291042590", "last_cid": "894550953955651784" }
417
+ ```
418
+
419
+ ### 返回结构
420
+
421
+ 返回扁平的二级/三级回复数组,每条带 `target` 指向被回复对象(无 `child` 嵌套)。
422
+
423
+ ```json
424
+ {
425
+ "ok": true,
426
+ "list": [
427
+ {
428
+ "mid": "235421-1785400556",
429
+ "cid": "894517223954288833",
430
+ "user_id": "821391600142946348",
431
+ "uname": "王威",
432
+ "upic": "https://.../avatar.png",
433
+ "ctime": 1785809825,
434
+ "ctime_str": "2026/9/1 11:23:45",
435
+ "level": 2,
436
+ "comment": [{ "type": "text", "value": "测试文件私有桶" }],
437
+ "attachment": [{ "type": "file", "fileUrl": "https://.../x.md" }],
438
+ "target": { "cid": "892796134291042590", "user_id": "821391600142946348", "uname": "王威", "upic": "https://.../avatar.png" }
439
+ }
440
+ ],
441
+ "has_more": true,
442
+ "last_id": "894550953955651784",
443
+ "reply_count": 24
444
+ }
445
+ ```
446
+
447
+ **顶层字段**
448
+
449
+ | 字段 | 说明 |
450
+ | --- | --- |
451
+ | `ok` | 工具调用是否成功 |
452
+ | `list` | 回复数组(扁平,无 `child` 嵌套) |
453
+ | `has_more` | 是否还有更多回复;`true` 时用 `last_id` 作为下一页 `last_cid` |
454
+ | `last_id` | 当前页最后一条回复的 `cid`,作为下一页 `last_cid` |
455
+ | `reply_count` | 剩余可分页回复数(**含本次返回**);为 `0` 表示已拉取完毕。注意与评论列表中 `child.reply_total`(总数)含义不同 |
456
+
457
+ **回复字段 `list[]`**
458
+
459
+ | 字段 | 说明 |
460
+ | --- | --- |
461
+ | `mid` | 帖子标识(`doc_id-ctime`) |
462
+ | `cid` | 回复 ID |
463
+ | `user_id` | 回复人 ID(内部长整型字符串,**非** `yach` 开头;`yach` 开头的用户 ID 见 `comment[].user_id`) |
464
+ | `uname` | 回复人姓名 |
465
+ | `upic` | 回复人头像 URL |
466
+ | `ctime` | 回复时间,秒级 Unix 时间戳(整数) |
467
+ | `ctime_str` | 回复时间可读字符串(本工具由 `ctime` 转换,**勿自行换算 `ctime`**,直接读此字段) |
468
+ | `level` | 回复层级:`2`=二级回复,`3`=三级回复 |
469
+ | `comment` | 内容片段数组,见下;按顺序拼接即为完整回复正文 |
470
+ | `attachment` | 附件数组,见下;无附件时为空数组 |
471
+ | `target` | 该回复所回复的目标对象(被回复的评论/回复),见下 |
472
+
473
+ **`comment[]` 内容片段子字段**(文本与 @ 人混合排列)
474
+
475
+ | 字段 | 说明 |
476
+ | --- | --- |
477
+ | `type` | 片段类型:`text`(文本)/ `mention`(@ 人) |
478
+ | `value` | `type=text` 时为该段文本内容;`type=mention` 时为空字符串 |
479
+ | `text` | `type=mention` 时的占位文本,一般为空字符串 |
480
+ | `index` | `type=mention` 时为该 @ 在原文中的字符起始位置(整数) |
481
+ | `atName` | `type=mention` 时的 @ 展示名,如 `"@聂军瑞"` |
482
+ | `user_id` | `type=mention` 时为被 @ 人 ID(`yach` 开头,如 `"yach167680"`) |
483
+
484
+ > 拼接规则:遍历 `comment[]`,`type=text` 取 `value`,`type=mention` 取 `atName`,按 `index` 顺序拼成完整正文。
485
+
486
+ **`attachment[]` 附件子字段**
487
+
488
+ | 字段 | 说明 |
489
+ | --- | --- |
490
+ | `type` | 附件类型:`img`(图片)/ `video`(视频)/ `file`(其他文件) |
491
+ | `fileUrl` | 附件 URL |
492
+
493
+ **`target` 目标对象子字段**(指被回复的对象)
494
+
495
+ | 字段 | 说明 |
496
+ | --- | --- |
497
+ | `cid` | 被回复评论/回复的 `cid` |
498
+ | `user_id` | 被回复人 ID(内部长整型) |
499
+ | `uname` | 被回复人姓名 |
500
+ | `upic` | 被回复人头像 URL |
501
+
502
+ ### 智能建议
503
+
504
+ **分页策略**:
505
+ - 用响应 `last_id` 作为下一页 `last_cid`,循环到 `has_more=false` 或 `reply_count=0`
506
+ - `reply_count` 是剩余可分页数(含本次),可据此预估还需几次翻页
507
+
508
+ **与评论列表联动**:
509
+ - 先 `list_post_comments` 拿到一级评论 `cid`,再用本工具拉其下的回复
510
+ - 评论列表中 `child.reply_total` 大于 `child.list` 实际返回数时,用本工具按 `child.last_id` 续拉(首页 `last_cid` 留空,或直接传 `child.last_id`)
511
+ - 三级回复(`level=3`)也会在本接口返回中混合出现,`target.cid` 指向其所回复的对象
512
+
513
+ ---
514
+
129
515
  ## 常见交互流程
130
516
 
131
517
  ### 1. 问题求助流程
@@ -146,6 +532,25 @@ description: >
146
532
  → 或找不到相关帖子时创建新帖 → 在帖子中展开讨论
147
533
  ```
148
534
 
535
+ ### 4. 浏览帖子流程
536
+ ```
537
+ 用户想看话题群内容 → 用 list_posts 拉取首页 → 按需用 next_last_doc_id 翻页
538
+ → 找到目标帖子的 doc_id/mid → 可对其评论或进一步拉取评论列表
539
+ ```
540
+
541
+ ### 5. 查看帖子评论流程
542
+ ```
543
+ 用户想看某帖子评论 → 先从 list_posts 拿到 mid → 用 list_post_comments 拉取一级评论
544
+ → 按需用 last_id 翻页 → 一级评论的 child 里看二级回复,reply_total 大于返回数时用回复列表接口续拉
545
+ ```
546
+
547
+ ### 6. 展开楼中楼回复流程
548
+ ```
549
+ 用户想看某条评论的所有回复 → 从 list_post_comments 拿到一级评论 cid(及 mid)
550
+ → 用 list_post_comment_replies 拉取回复 → 按需用 last_id 翻页,直到 has_more=false / reply_count=0
551
+ → 回复的 target 指向被回复对象,据此理清对话脉络
552
+ ```
553
+
149
554
  ---
150
555
 
151
556
  ## 错误处理与验证
@@ -199,5 +604,8 @@ description: >
199
604
  话题群功能需要以下OAuth权限:
200
605
  - `squad:create` - 发布帖子
201
606
  - `squad:doc_comment:send` - 发表评论
607
+ - `squad:post:list` - 查看话题群帖子列表
608
+ - `squad:post:comment:list` - 查看帖子评论列表
609
+ - `squad:post:comment:reply:list` - 查看评论回复列表
202
610
 
203
611
  如遇授权错误,引导用户完成OAuth授权流程。