acp-ts 1.1.8 → 1.1.9

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.
package/dist/agentcp.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { IAgentCP, IAgentIdentity } from "./interfaces";
2
2
  import { MessageStore } from "./messagestore";
3
3
  import { AgentMdOptions } from "./agentmd";
4
- import { ACPGroupClient, GroupOperations, ACPGroupEventHandler, CursorStore, GroupMessageStore, GroupMessage, MsgCursor } from "./group";
4
+ import { ACPGroupClient, GroupOperations, ACPGroupEventHandler, CursorStore, GroupMessageStore, GroupMessage } from "./group";
5
5
  declare class AgentCP implements IAgentCP {
6
6
  private seedPassword;
7
7
  private apUrl;
@@ -178,18 +178,15 @@ declare class AgentCP implements IAgentCP {
178
178
  pullAndStoreGroupMessages(groupId: string, afterMsgId?: number, limit?: number): Promise<GroupMessage[]>;
179
179
  /**
180
180
  * 加入群组会话(完整生命周期):
181
- * 1. register_online → 获取游标状态
182
- * 2. 如果有未读消息 → 循环 pull_messages + ACK
181
+ * 1. register_online → 告知 group.ap 在线
182
+ * 2. 将群组加入在线列表
183
183
  * 3. 启动心跳定时器(首次时启动)
184
- *
185
- * @returns msg_cursor 游标状态
186
184
  */
187
- joinGroupSession(groupId: string): Promise<MsgCursor>;
185
+ joinGroupSession(groupId: string): Promise<void>;
188
186
  /**
189
187
  * 离开群组会话(优雅退出):
190
- * 1. unregister_online
191
- * 2. 从在线群组列表移除
192
- * 3. 如果没有在线群组了,停止心跳定时器
188
+ * 1. 从在线群组列表移除
189
+ * 2. 如果没有在线群组了,unregister_online + 停止心跳定时器
193
190
  */
194
191
  leaveGroupSession(groupId: string): Promise<void>;
195
192
  /**
@@ -213,7 +210,7 @@ declare class AgentCP implements IAgentCP {
213
210
  */
214
211
  private _stopHeartbeat;
215
212
  /**
216
- * 对所有在线群组发送心跳
213
+ * 发送心跳保活
217
214
  */
218
215
  private _sendHeartbeats;
219
216
  /**
package/dist/agentcp.js CHANGED
@@ -685,47 +685,38 @@ class AgentCP {
685
685
  // ============================================================
686
686
  /**
687
687
  * 加入群组会话(完整生命周期):
688
- * 1. register_online → 获取游标状态
689
- * 2. 如果有未读消息 → 循环 pull_messages + ACK
688
+ * 1. register_online → 告知 group.ap 在线
689
+ * 2. 将群组加入在线列表
690
690
  * 3. 启动心跳定时器(首次时启动)
691
- *
692
- * @returns msg_cursor 游标状态
693
691
  */
694
692
  async joinGroupSession(groupId) {
695
693
  if (!this.groupOps || !this._groupTargetAid) {
696
694
  throw new Error('群组客户端未初始化,请先调用 initGroupClient');
697
695
  }
698
- // Step 1: register_online
699
- const result = await this.groupOps.registerOnline(this._groupTargetAid, groupId);
700
- const cursor = result.msg_cursor;
696
+ // Step 1: register_online(仅通知 group.ap 在线,不再返回游标)
697
+ await this.groupOps.registerOnline(this._groupTargetAid);
701
698
  this._onlineGroups.add(groupId);
702
- console.log(`[Group] joinGroupSession: group=${groupId} unread=${cursor.unread_count} current=${cursor.current_msg_id} latest=${cursor.latest_msg_id}`);
703
- // Step 2: 如果有未读消息,使用自动游标模式拉取
704
- if (cursor.unread_count > 0) {
705
- await this.pullAndStoreGroupMessages(groupId, 0, 0);
706
- }
707
- // Step 3: 启动心跳定时器(首次加入群组时启动)
699
+ console.log(`[Group] joinGroupSession: group=${groupId}`);
700
+ // Step 2: 启动心跳定时器(首次加入群组时启动)
708
701
  this._ensureHeartbeat();
709
- return cursor;
710
702
  }
711
703
  /**
712
704
  * 离开群组会话(优雅退出):
713
- * 1. unregister_online
714
- * 2. 从在线群组列表移除
715
- * 3. 如果没有在线群组了,停止心跳定时器
705
+ * 1. 从在线群组列表移除
706
+ * 2. 如果没有在线群组了,unregister_online + 停止心跳定时器
716
707
  */
717
708
  async leaveGroupSession(groupId) {
718
709
  if (!this.groupOps || !this._groupTargetAid)
719
710
  return;
720
- try {
721
- await this.groupOps.unregisterOnline(this._groupTargetAid, groupId);
722
- }
723
- catch (e) {
724
- console.warn(`[Group] unregisterOnline failed: group=${groupId}`, e.message || e);
725
- }
726
711
  this._onlineGroups.delete(groupId);
727
- // 如果没有在线群组了,停止心跳
712
+ // 如果没有在线群组了,通知 group.ap 下线并停止心跳
728
713
  if (this._onlineGroups.size === 0) {
714
+ try {
715
+ await this.groupOps.unregisterOnline(this._groupTargetAid);
716
+ }
717
+ catch (e) {
718
+ console.warn(`[Group] unregisterOnline failed`, e.message || e);
719
+ }
729
720
  this._stopHeartbeat();
730
721
  }
731
722
  }
@@ -779,16 +770,14 @@ class AgentCP {
779
770
  }
780
771
  }
781
772
  /**
782
- * 对所有在线群组发送心跳
773
+ * 发送心跳保活
783
774
  */
784
775
  _sendHeartbeats() {
785
776
  if (!this.groupOps || !this._groupTargetAid)
786
777
  return;
787
- for (const groupId of this._onlineGroups) {
788
- this.groupOps.heartbeat(this._groupTargetAid, groupId).catch(e => {
789
- console.warn(`[Group] heartbeat failed: group=${groupId}`, e.message || e);
790
- });
791
- }
778
+ this.groupOps.heartbeat(this._groupTargetAid).catch(e => {
779
+ console.warn(`[Group] heartbeat failed`, e.message || e);
780
+ });
792
781
  }
793
782
  /**
794
783
  * 关闭群消息存储,刷新所有未写入的数据
@@ -2,7 +2,7 @@
2
2
  * ACP Group Operations package.
3
3
  * Mirrors Python SDK: agentcp/group/__init__.py
4
4
  */
5
- export { GroupErrorCode, GroupError, GroupRequest, GroupResponse, GroupNotify, buildGroupRequest, groupRequestToJson, parseGroupResponse, parseGroupNotify, GroupMessage, GroupEvent, MsgCursor, EventCursor, CursorState, createMsgCursor, createEventCursor, RegisterOnlineResp, CreateGroupResp, SendMessageResp, PullMessagesResp, PullEventsResp, GroupInfoResp, BanlistResp, BatchReviewResp, PendingRequestsResp, MembersResp, AdminsResp, RulesResp, AnnouncementResp, JoinRequirementsResp, MasterResp, InviteCodeResp, InviteCodeListResp, BroadcastLockResp, BroadcastPermissionResp, SyncStatusResp, SyncLogResp, ChecksumResp, PublicGroupInfoResp, SearchGroupsResp, DigestResp, MembershipInfo, ListMyGroupsResp, GetFileResp, GetSummaryResp, GetMetricsResp, NOTIFY_NEW_MESSAGE, NOTIFY_NEW_EVENT, NOTIFY_GROUP_INVITE, NOTIFY_JOIN_APPROVED, NOTIFY_JOIN_REJECTED, NOTIFY_JOIN_REQUEST_RECEIVED, NOTIFY_GROUP_MESSAGE, NOTIFY_GROUP_EVENT, EVENT_MEMBER_JOINED, EVENT_MEMBER_REMOVED, EVENT_MEMBER_LEFT, EVENT_MEMBER_BANNED, EVENT_META_UPDATED, EVENT_RULES_UPDATED, EVENT_ANNOUNCEMENT_UPDATED, EVENT_GROUP_DISSOLVED, EVENT_MASTER_TRANSFERRED, EVENT_GROUP_SUSPENDED, EVENT_GROUP_RESUMED, EVENT_MEMBER_UNBANNED, EVENT_JOIN_REQUIREMENTS_UPDATED, EVENT_INVITE_CODE_CREATED, EVENT_INVITE_CODE_REVOKED, } from './types';
5
+ export { GroupErrorCode, GroupError, GroupRequest, GroupResponse, GroupNotify, buildGroupRequest, groupRequestToJson, parseGroupResponse, parseGroupNotify, GroupMessage, GroupEvent, MsgCursor, EventCursor, CursorState, createMsgCursor, createEventCursor, CreateGroupResp, SendMessageResp, PullMessagesResp, PullEventsResp, GroupInfoResp, BanlistResp, BatchReviewResp, PendingRequestsResp, MembersResp, AdminsResp, RulesResp, AnnouncementResp, JoinRequirementsResp, MasterResp, InviteCodeResp, InviteCodeListResp, BroadcastLockResp, BroadcastPermissionResp, SyncStatusResp, SyncLogResp, ChecksumResp, PublicGroupInfoResp, SearchGroupsResp, DigestResp, MembershipInfo, ListMyGroupsResp, GetFileResp, GetSummaryResp, GetMetricsResp, NOTIFY_NEW_MESSAGE, NOTIFY_NEW_EVENT, NOTIFY_GROUP_INVITE, NOTIFY_JOIN_APPROVED, NOTIFY_JOIN_REJECTED, NOTIFY_JOIN_REQUEST_RECEIVED, NOTIFY_GROUP_MESSAGE, NOTIFY_GROUP_EVENT, EVENT_MEMBER_JOINED, EVENT_MEMBER_REMOVED, EVENT_MEMBER_LEFT, EVENT_MEMBER_BANNED, EVENT_META_UPDATED, EVENT_RULES_UPDATED, EVENT_ANNOUNCEMENT_UPDATED, EVENT_GROUP_DISSOLVED, EVENT_MASTER_TRANSFERRED, EVENT_GROUP_SUSPENDED, EVENT_GROUP_RESUMED, EVENT_MEMBER_UNBANNED, EVENT_JOIN_REQUIREMENTS_UPDATED, EVENT_INVITE_CODE_CREATED, EVENT_INVITE_CODE_REVOKED, } from './types';
6
6
  export { ACPGroupClient, SendFunc } from './client';
7
7
  export { GroupOperations, SyncHandler } from './operations';
8
8
  export { ACPGroupEventHandler, EventProcessor, dispatchAcpNotify, dispatchEvent, } from './events';
@@ -3,7 +3,7 @@
3
3
  * Mirrors Python SDK: agentcp/group/operations.py
4
4
  */
5
5
  import { ACPGroupClient } from './client';
6
- import { RegisterOnlineResp, CreateGroupResp, SendMessageResp, PullMessagesResp, PullEventsResp, CursorState, GroupInfoResp, BanlistResp, BatchReviewResp, PendingRequestsResp, MembersResp, AdminsResp, RulesResp, AnnouncementResp, JoinRequirementsResp, MasterResp, InviteCodeResp, InviteCodeListResp, BroadcastLockResp, BroadcastPermissionResp, SyncStatusResp, SyncLogResp, ChecksumResp, PublicGroupInfoResp, SearchGroupsResp, DigestResp, ListMyGroupsResp, GetFileResp, GetSummaryResp, GetMetricsResp } from './types';
6
+ import { CreateGroupResp, SendMessageResp, PullMessagesResp, PullEventsResp, CursorState, GroupInfoResp, BanlistResp, BatchReviewResp, PendingRequestsResp, MembersResp, AdminsResp, RulesResp, AnnouncementResp, JoinRequirementsResp, MasterResp, InviteCodeResp, InviteCodeListResp, BroadcastLockResp, BroadcastPermissionResp, SyncStatusResp, SyncLogResp, ChecksumResp, PublicGroupInfoResp, SearchGroupsResp, DigestResp, ListMyGroupsResp, GetFileResp, GetSummaryResp, GetMetricsResp } from './types';
7
7
  /**
8
8
  * Callback interface for syncGroup.
9
9
  */
@@ -43,20 +43,20 @@ export declare class GroupOperations {
43
43
  message?: string;
44
44
  }): Promise<string>;
45
45
  /**
46
- * 注册上线,获取游标状态。
47
- * 客户端每次启动或重新连接时,必须对每个群组调用。
46
+ * 注册上线,告知 group.ap 当前客户端在线,可以接收消息推送。
47
+ * 客户端每次启动或重新连接时调用一次即可。
48
48
  */
49
- registerOnline(targetAid: string, groupId: string): Promise<RegisterOnlineResp>;
49
+ registerOnline(targetAid: string): Promise<void>;
50
50
  /**
51
51
  * 主动下线(优雅退出)。
52
52
  * 客户端退出时调用,立即从在线列表移除。
53
53
  */
54
- unregisterOnline(targetAid: string, groupId: string): Promise<void>;
54
+ unregisterOnline(targetAid: string): Promise<void>;
55
55
  /**
56
56
  * 心跳保活。
57
57
  * 在线注册有 5 分钟超时,SDK 需定时发送(建议 2~4 分钟)。
58
58
  */
59
- heartbeat(targetAid: string, groupId: string): Promise<void>;
59
+ heartbeat(targetAid: string): Promise<void>;
60
60
  createGroup(targetAid: string, name: string, options?: {
61
61
  alias?: string;
62
62
  subject?: string;
@@ -62,31 +62,27 @@ class GroupOperations {
62
62
  // Phase 0: Lifecycle (register / heartbeat / unregister)
63
63
  // ============================================================
64
64
  /**
65
- * 注册上线,获取游标状态。
66
- * 客户端每次启动或重新连接时,必须对每个群组调用。
65
+ * 注册上线,告知 group.ap 当前客户端在线,可以接收消息推送。
66
+ * 客户端每次启动或重新连接时调用一次即可。
67
67
  */
68
- async registerOnline(targetAid, groupId) {
69
- const resp = await this._client.sendRequest(targetAid, groupId, "register_online", null);
68
+ async registerOnline(targetAid) {
69
+ const resp = await this._client.sendRequest(targetAid, "", "register_online", null);
70
70
  this._check(resp, "register_online");
71
- const d = resp.data || {};
72
- return {
73
- msg_cursor: (0, types_1.createMsgCursor)(d.msg_cursor),
74
- };
75
71
  }
76
72
  /**
77
73
  * 主动下线(优雅退出)。
78
74
  * 客户端退出时调用,立即从在线列表移除。
79
75
  */
80
- async unregisterOnline(targetAid, groupId) {
81
- const resp = await this._client.sendRequest(targetAid, groupId, "unregister_online", null);
76
+ async unregisterOnline(targetAid) {
77
+ const resp = await this._client.sendRequest(targetAid, "", "unregister_online", null);
82
78
  this._check(resp, "unregister_online");
83
79
  }
84
80
  /**
85
81
  * 心跳保活。
86
82
  * 在线注册有 5 分钟超时,SDK 需定时发送(建议 2~4 分钟)。
87
83
  */
88
- async heartbeat(targetAid, groupId) {
89
- const resp = await this._client.sendRequest(targetAid, groupId, "heartbeat", null);
84
+ async heartbeat(targetAid) {
85
+ const resp = await this._client.sendRequest(targetAid, "", "heartbeat", null);
90
86
  this._check(resp, "heartbeat");
91
87
  }
92
88
  // ============================================================
@@ -85,9 +85,6 @@ export interface CursorState {
85
85
  msg_cursor: MsgCursor;
86
86
  event_cursor: EventCursor;
87
87
  }
88
- export interface RegisterOnlineResp {
89
- msg_cursor: MsgCursor;
90
- }
91
88
  export interface CreateGroupResp {
92
89
  group_id: string;
93
90
  group_url: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acp-ts",
3
- "version": "1.1.8",
3
+ "version": "1.1.9",
4
4
  "description": "基于 ACP智能体通信协议 的智能体通信库,提供智能体身份管理和实时通信功能",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",