@hashgraphonline/standards-agent-kit 0.0.37 → 0.2.0

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.
Files changed (251) hide show
  1. package/dist/cjs/builders/hcs10/hcs10-builder.d.ts +262 -0
  2. package/dist/cjs/builders/index.d.ts +2 -0
  3. package/dist/cjs/builders/types.d.ts +10 -0
  4. package/dist/cjs/index.d.ts +3 -1
  5. package/dist/cjs/init/init.d.ts +21 -22
  6. package/dist/cjs/plugins/PluginInterface.d.ts +4 -80
  7. package/dist/cjs/plugins/PluginRegistry.d.ts +1 -47
  8. package/dist/cjs/plugins/defi/index.d.ts +7 -4
  9. package/dist/cjs/plugins/hedera/HbarPricePlugin.d.ts +7 -35
  10. package/dist/cjs/plugins/index.d.ts +0 -5
  11. package/dist/cjs/plugins/weather/index.d.ts +6 -5
  12. package/dist/cjs/standards-agent-kit.cjs +1 -1
  13. package/dist/cjs/standards-agent-kit.cjs.map +1 -1
  14. package/dist/cjs/state/state-types.d.ts +8 -8
  15. package/dist/cjs/tools/hcs10/AcceptConnectionRequestTool.d.ts +40 -0
  16. package/dist/cjs/tools/hcs10/CheckMessagesTool.d.ts +40 -0
  17. package/dist/cjs/tools/hcs10/ConnectionMonitorTool.d.ts +134 -0
  18. package/dist/cjs/tools/hcs10/FindRegistrationsTool.d.ts +34 -0
  19. package/dist/cjs/tools/hcs10/InitiateConnectionTool.d.ts +43 -0
  20. package/dist/cjs/tools/hcs10/ListConnectionsTool.d.ts +34 -0
  21. package/dist/cjs/tools/hcs10/ListUnapprovedConnectionRequestsTool.d.ts +15 -0
  22. package/dist/cjs/tools/hcs10/ManageConnectionRequestsTool.d.ts +34 -0
  23. package/dist/cjs/tools/hcs10/RegisterAgentTool.d.ts +218 -0
  24. package/dist/cjs/tools/hcs10/RetrieveProfileTool.d.ts +33 -0
  25. package/dist/cjs/tools/hcs10/SendMessageToConnectionTool.d.ts +40 -0
  26. package/dist/cjs/tools/hcs10/base-hcs10-tools.d.ts +28 -0
  27. package/dist/cjs/tools/hcs10/hcs10-tool-params.d.ts +18 -0
  28. package/dist/cjs/tools/hcs10/index.d.ts +13 -0
  29. package/dist/cjs/tools/index.d.ts +1 -13
  30. package/dist/es/builders/hcs10/hcs10-builder.d.ts +262 -0
  31. package/dist/es/builders/index.d.ts +2 -0
  32. package/dist/es/builders/types.d.ts +10 -0
  33. package/dist/es/index.d.ts +3 -1
  34. package/dist/es/init/init.d.ts +21 -22
  35. package/dist/es/plugins/PluginInterface.d.ts +4 -80
  36. package/dist/es/plugins/PluginRegistry.d.ts +1 -47
  37. package/dist/es/plugins/defi/index.d.ts +7 -4
  38. package/dist/es/plugins/hedera/HbarPricePlugin.d.ts +7 -35
  39. package/dist/es/plugins/index.d.ts +0 -5
  40. package/dist/es/plugins/weather/index.d.ts +6 -5
  41. package/dist/es/standards-agent-kit.es.js +10 -18
  42. package/dist/es/standards-agent-kit.es.js.map +1 -1
  43. package/dist/es/standards-agent-kit.es10.js +29 -76
  44. package/dist/es/standards-agent-kit.es10.js.map +1 -1
  45. package/dist/es/standards-agent-kit.es11.js +61 -384
  46. package/dist/es/standards-agent-kit.es11.js.map +1 -1
  47. package/dist/es/standards-agent-kit.es12.js +22 -190
  48. package/dist/es/standards-agent-kit.es12.js.map +1 -1
  49. package/dist/es/standards-agent-kit.es13.js +26 -138
  50. package/dist/es/standards-agent-kit.es13.js.map +1 -1
  51. package/dist/es/standards-agent-kit.es14.js +35 -59
  52. package/dist/es/standards-agent-kit.es14.js.map +1 -1
  53. package/dist/es/standards-agent-kit.es15.js +11 -117
  54. package/dist/es/standards-agent-kit.es15.js.map +1 -1
  55. package/dist/es/standards-agent-kit.es16.js +1 -1
  56. package/dist/es/standards-agent-kit.es16.js.map +1 -1
  57. package/dist/es/standards-agent-kit.es17.js +63 -46
  58. package/dist/es/standards-agent-kit.es17.js.map +1 -1
  59. package/dist/es/standards-agent-kit.es18.js +25 -74
  60. package/dist/es/standards-agent-kit.es18.js.map +1 -1
  61. package/dist/es/standards-agent-kit.es19.js +22 -13
  62. package/dist/es/standards-agent-kit.es19.js.map +1 -1
  63. package/dist/es/standards-agent-kit.es2.js +1381 -188
  64. package/dist/es/standards-agent-kit.es2.js.map +1 -1
  65. package/dist/es/standards-agent-kit.es20.js +3 -67
  66. package/dist/es/standards-agent-kit.es20.js.map +1 -1
  67. package/dist/es/standards-agent-kit.es3.js +285 -347
  68. package/dist/es/standards-agent-kit.es3.js.map +1 -1
  69. package/dist/es/standards-agent-kit.es4.js +22 -74
  70. package/dist/es/standards-agent-kit.es4.js.map +1 -1
  71. package/dist/es/standards-agent-kit.es5.js +127 -154
  72. package/dist/es/standards-agent-kit.es5.js.map +1 -1
  73. package/dist/es/standards-agent-kit.es6.js +21 -88
  74. package/dist/es/standards-agent-kit.es6.js.map +1 -1
  75. package/dist/es/standards-agent-kit.es7.js +28 -86
  76. package/dist/es/standards-agent-kit.es7.js.map +1 -1
  77. package/dist/es/standards-agent-kit.es8.js +27 -100
  78. package/dist/es/standards-agent-kit.es8.js.map +1 -1
  79. package/dist/es/standards-agent-kit.es9.js +35 -117
  80. package/dist/es/standards-agent-kit.es9.js.map +1 -1
  81. package/dist/es/state/state-types.d.ts +8 -8
  82. package/dist/es/tools/hcs10/AcceptConnectionRequestTool.d.ts +40 -0
  83. package/dist/es/tools/hcs10/CheckMessagesTool.d.ts +40 -0
  84. package/dist/es/tools/hcs10/ConnectionMonitorTool.d.ts +134 -0
  85. package/dist/es/tools/hcs10/FindRegistrationsTool.d.ts +34 -0
  86. package/dist/es/tools/hcs10/InitiateConnectionTool.d.ts +43 -0
  87. package/dist/es/tools/hcs10/ListConnectionsTool.d.ts +34 -0
  88. package/dist/es/tools/hcs10/ListUnapprovedConnectionRequestsTool.d.ts +15 -0
  89. package/dist/es/tools/hcs10/ManageConnectionRequestsTool.d.ts +34 -0
  90. package/dist/es/tools/hcs10/RegisterAgentTool.d.ts +218 -0
  91. package/dist/es/tools/hcs10/RetrieveProfileTool.d.ts +33 -0
  92. package/dist/es/tools/hcs10/SendMessageToConnectionTool.d.ts +40 -0
  93. package/dist/es/tools/hcs10/base-hcs10-tools.d.ts +28 -0
  94. package/dist/es/tools/hcs10/hcs10-tool-params.d.ts +18 -0
  95. package/dist/es/tools/hcs10/index.d.ts +13 -0
  96. package/dist/es/tools/index.d.ts +1 -13
  97. package/dist/umd/builders/hcs10/hcs10-builder.d.ts +262 -0
  98. package/dist/umd/builders/index.d.ts +2 -0
  99. package/dist/umd/builders/types.d.ts +10 -0
  100. package/dist/umd/index.d.ts +3 -1
  101. package/dist/umd/init/init.d.ts +21 -22
  102. package/dist/umd/plugins/PluginInterface.d.ts +4 -80
  103. package/dist/umd/plugins/PluginRegistry.d.ts +1 -47
  104. package/dist/umd/plugins/defi/index.d.ts +7 -4
  105. package/dist/umd/plugins/hedera/HbarPricePlugin.d.ts +7 -35
  106. package/dist/umd/plugins/index.d.ts +0 -5
  107. package/dist/umd/plugins/weather/index.d.ts +6 -5
  108. package/dist/umd/standards-agent-kit.umd.js +1 -164
  109. package/dist/umd/standards-agent-kit.umd.js.map +1 -1
  110. package/dist/umd/state/state-types.d.ts +8 -8
  111. package/dist/umd/tools/hcs10/AcceptConnectionRequestTool.d.ts +40 -0
  112. package/dist/umd/tools/hcs10/CheckMessagesTool.d.ts +40 -0
  113. package/dist/umd/tools/hcs10/ConnectionMonitorTool.d.ts +134 -0
  114. package/dist/umd/tools/hcs10/FindRegistrationsTool.d.ts +34 -0
  115. package/dist/umd/tools/hcs10/InitiateConnectionTool.d.ts +43 -0
  116. package/dist/umd/tools/hcs10/ListConnectionsTool.d.ts +34 -0
  117. package/dist/umd/tools/hcs10/ListUnapprovedConnectionRequestsTool.d.ts +15 -0
  118. package/dist/umd/tools/hcs10/ManageConnectionRequestsTool.d.ts +34 -0
  119. package/dist/umd/tools/hcs10/RegisterAgentTool.d.ts +218 -0
  120. package/dist/umd/tools/hcs10/RetrieveProfileTool.d.ts +33 -0
  121. package/dist/umd/tools/hcs10/SendMessageToConnectionTool.d.ts +40 -0
  122. package/dist/umd/tools/hcs10/base-hcs10-tools.d.ts +28 -0
  123. package/dist/umd/tools/hcs10/hcs10-tool-params.d.ts +18 -0
  124. package/dist/umd/tools/hcs10/index.d.ts +13 -0
  125. package/dist/umd/tools/index.d.ts +1 -13
  126. package/package.json +41 -41
  127. package/src/builders/hcs10/hcs10-builder.ts +2108 -0
  128. package/src/builders/index.ts +2 -0
  129. package/src/builders/types.ts +11 -0
  130. package/src/hcs10/HCS10Client.ts +3 -2
  131. package/src/index.ts +4 -2
  132. package/src/init/init.ts +85 -63
  133. package/src/plugins/PluginInterface.ts +15 -94
  134. package/src/plugins/PluginRegistry.ts +2 -98
  135. package/src/plugins/defi/index.ts +31 -118
  136. package/src/plugins/hedera/HbarPricePlugin.ts +19 -100
  137. package/src/plugins/index.ts +0 -5
  138. package/src/plugins/weather/index.ts +56 -40
  139. package/src/state/state-types.ts +9 -11
  140. package/src/tools/hcs10/AcceptConnectionRequestTool.ts +56 -0
  141. package/src/tools/hcs10/CheckMessagesTool.ts +73 -0
  142. package/src/tools/hcs10/ConnectionMonitorTool.ts +111 -0
  143. package/src/tools/hcs10/FindRegistrationsTool.ts +64 -0
  144. package/src/tools/hcs10/InitiateConnectionTool.ts +66 -0
  145. package/src/tools/hcs10/ListConnectionsTool.ts +58 -0
  146. package/src/tools/hcs10/ListUnapprovedConnectionRequestsTool.ts +26 -0
  147. package/src/tools/hcs10/ManageConnectionRequestsTool.ts +48 -0
  148. package/src/tools/hcs10/RegisterAgentTool.ts +213 -0
  149. package/src/tools/hcs10/RetrieveProfileTool.ts +61 -0
  150. package/src/tools/hcs10/SendMessageToConnectionTool.ts +45 -0
  151. package/src/tools/hcs10/base-hcs10-tools.ts +65 -0
  152. package/src/tools/hcs10/hcs10-tool-params.ts +21 -0
  153. package/src/tools/hcs10/index.ts +13 -0
  154. package/src/tools/index.ts +2 -13
  155. package/src/utils/HederaClient.ts +2 -2
  156. package/src/utils/ensure-agent-has-hbar.ts +3 -4
  157. package/dist/cjs/agents/index.d.ts +0 -0
  158. package/dist/cjs/plugins/BasePlugin.d.ts +0 -28
  159. package/dist/cjs/plugins/GenericPlugin.d.ts +0 -17
  160. package/dist/cjs/plugins/HCS10Plugin.d.ts +0 -13
  161. package/dist/cjs/plugins/PluginLoader.d.ts +0 -38
  162. package/dist/cjs/plugins/openconvai/OpenConvAIPlugin.d.ts +0 -23
  163. package/dist/cjs/plugins/openconvai/index.d.ts +0 -1
  164. package/dist/cjs/tools/AcceptConnectionRequestTool.d.ts +0 -33
  165. package/dist/cjs/tools/CheckMessagesTool.d.ts +0 -34
  166. package/dist/cjs/tools/ConnectionMonitorTool.d.ts +0 -100
  167. package/dist/cjs/tools/ConnectionTool.d.ts +0 -40
  168. package/dist/cjs/tools/FindRegistrationsTool.d.ts +0 -28
  169. package/dist/cjs/tools/InitiateConnectionTool.d.ts +0 -30
  170. package/dist/cjs/tools/ListConnectionsTool.d.ts +0 -33
  171. package/dist/cjs/tools/ListUnapprovedConnectionRequestsTool.d.ts +0 -41
  172. package/dist/cjs/tools/ManageConnectionRequestsTool.d.ts +0 -38
  173. package/dist/cjs/tools/RegisterAgentTool.d.ts +0 -188
  174. package/dist/cjs/tools/RetrieveProfileTool.d.ts +0 -34
  175. package/dist/cjs/tools/SendMessageToConnectionTool.d.ts +0 -34
  176. package/dist/cjs/tools/SendMessageTool.d.ts +0 -40
  177. package/dist/es/agents/index.d.ts +0 -0
  178. package/dist/es/plugins/BasePlugin.d.ts +0 -28
  179. package/dist/es/plugins/GenericPlugin.d.ts +0 -17
  180. package/dist/es/plugins/HCS10Plugin.d.ts +0 -13
  181. package/dist/es/plugins/PluginLoader.d.ts +0 -38
  182. package/dist/es/plugins/openconvai/OpenConvAIPlugin.d.ts +0 -23
  183. package/dist/es/plugins/openconvai/index.d.ts +0 -1
  184. package/dist/es/standards-agent-kit.es21.js +0 -92
  185. package/dist/es/standards-agent-kit.es21.js.map +0 -1
  186. package/dist/es/standards-agent-kit.es22.js +0 -7
  187. package/dist/es/standards-agent-kit.es22.js.map +0 -1
  188. package/dist/es/standards-agent-kit.es23.js +0 -106
  189. package/dist/es/standards-agent-kit.es23.js.map +0 -1
  190. package/dist/es/standards-agent-kit.es24.js +0 -7
  191. package/dist/es/standards-agent-kit.es24.js.map +0 -1
  192. package/dist/es/standards-agent-kit.es25.js +0 -7
  193. package/dist/es/standards-agent-kit.es25.js.map +0 -1
  194. package/dist/es/standards-agent-kit.es26.js +0 -85
  195. package/dist/es/standards-agent-kit.es26.js.map +0 -1
  196. package/dist/es/standards-agent-kit.es27.js +0 -28
  197. package/dist/es/standards-agent-kit.es27.js.map +0 -1
  198. package/dist/es/tools/AcceptConnectionRequestTool.d.ts +0 -33
  199. package/dist/es/tools/CheckMessagesTool.d.ts +0 -34
  200. package/dist/es/tools/ConnectionMonitorTool.d.ts +0 -100
  201. package/dist/es/tools/ConnectionTool.d.ts +0 -40
  202. package/dist/es/tools/FindRegistrationsTool.d.ts +0 -28
  203. package/dist/es/tools/InitiateConnectionTool.d.ts +0 -30
  204. package/dist/es/tools/ListConnectionsTool.d.ts +0 -33
  205. package/dist/es/tools/ListUnapprovedConnectionRequestsTool.d.ts +0 -41
  206. package/dist/es/tools/ManageConnectionRequestsTool.d.ts +0 -38
  207. package/dist/es/tools/RegisterAgentTool.d.ts +0 -188
  208. package/dist/es/tools/RetrieveProfileTool.d.ts +0 -34
  209. package/dist/es/tools/SendMessageToConnectionTool.d.ts +0 -34
  210. package/dist/es/tools/SendMessageTool.d.ts +0 -40
  211. package/dist/umd/agents/index.d.ts +0 -0
  212. package/dist/umd/plugins/BasePlugin.d.ts +0 -28
  213. package/dist/umd/plugins/GenericPlugin.d.ts +0 -17
  214. package/dist/umd/plugins/HCS10Plugin.d.ts +0 -13
  215. package/dist/umd/plugins/PluginLoader.d.ts +0 -38
  216. package/dist/umd/plugins/openconvai/OpenConvAIPlugin.d.ts +0 -23
  217. package/dist/umd/plugins/openconvai/index.d.ts +0 -1
  218. package/dist/umd/tools/AcceptConnectionRequestTool.d.ts +0 -33
  219. package/dist/umd/tools/CheckMessagesTool.d.ts +0 -34
  220. package/dist/umd/tools/ConnectionMonitorTool.d.ts +0 -100
  221. package/dist/umd/tools/ConnectionTool.d.ts +0 -40
  222. package/dist/umd/tools/FindRegistrationsTool.d.ts +0 -28
  223. package/dist/umd/tools/InitiateConnectionTool.d.ts +0 -30
  224. package/dist/umd/tools/ListConnectionsTool.d.ts +0 -33
  225. package/dist/umd/tools/ListUnapprovedConnectionRequestsTool.d.ts +0 -41
  226. package/dist/umd/tools/ManageConnectionRequestsTool.d.ts +0 -38
  227. package/dist/umd/tools/RegisterAgentTool.d.ts +0 -188
  228. package/dist/umd/tools/RetrieveProfileTool.d.ts +0 -34
  229. package/dist/umd/tools/SendMessageToConnectionTool.d.ts +0 -34
  230. package/dist/umd/tools/SendMessageTool.d.ts +0 -40
  231. package/src/agents/index.ts +0 -1
  232. package/src/plugins/BasePlugin.ts +0 -37
  233. package/src/plugins/GenericPlugin.ts +0 -19
  234. package/src/plugins/HCS10Plugin.ts +0 -14
  235. package/src/plugins/PluginLoader.ts +0 -121
  236. package/src/plugins/README.md +0 -113
  237. package/src/plugins/openconvai/OpenConvAIPlugin.ts +0 -124
  238. package/src/plugins/openconvai/index.ts +0 -1
  239. package/src/tools/AcceptConnectionRequestTool.ts +0 -196
  240. package/src/tools/CheckMessagesTool.ts +0 -194
  241. package/src/tools/ConnectionMonitorTool.ts +0 -550
  242. package/src/tools/ConnectionTool.ts +0 -231
  243. package/src/tools/FindRegistrationsTool.ts +0 -114
  244. package/src/tools/InitiateConnectionTool.ts +0 -137
  245. package/src/tools/ListConnectionsTool.ts +0 -158
  246. package/src/tools/ListUnapprovedConnectionRequestsTool.ts +0 -173
  247. package/src/tools/ManageConnectionRequestsTool.ts +0 -275
  248. package/src/tools/RegisterAgentTool.ts +0 -590
  249. package/src/tools/RetrieveProfileTool.ts +0 -94
  250. package/src/tools/SendMessageToConnectionTool.ts +0 -142
  251. package/src/tools/SendMessageTool.ts +0 -116
@@ -1,124 +1,18 @@
1
- import { StructuredTool } from "@langchain/core/tools";
2
1
  import { z } from "zod";
3
- import { Logger } from "@hashgraphonline/standards-sdk";
4
- class ListUnapprovedConnectionRequestsTool extends StructuredTool {
5
- constructor({
6
- hcsClient,
7
- stateManager,
8
- ...rest
9
- }) {
10
- super(rest);
2
+ import { BaseHCS10QueryTool } from "./standards-agent-kit.es4.js";
3
+ const ListUnapprovedConnectionRequestsZodSchema = z.object({});
4
+ class ListUnapprovedConnectionRequestsTool extends BaseHCS10QueryTool {
5
+ constructor(params) {
6
+ super(params);
11
7
  this.name = "list_unapproved_connection_requests";
12
8
  this.description = "Lists all connection requests that are not fully established, including incoming requests needing approval and outgoing requests waiting for confirmation.";
13
- this.schema = z.object({
14
- sortBy: z.enum(["time_asc", "time_desc", "name_asc", "name_desc"]).optional().describe(
15
- "Optional sorting criteria for the requests list (default: time_desc, newest first)"
16
- ),
17
- limit: z.number().optional().describe(
18
- "Optional limit on the number of requests to return (default: all)"
19
- )
20
- });
21
- this.hcsClient = hcsClient;
22
- this.stateManager = stateManager;
23
- this.logger = Logger.getInstance({
24
- module: "ListPendingRequestsTool",
25
- level: "debug"
26
- });
9
+ this.specificInputSchema = ListUnapprovedConnectionRequestsZodSchema;
27
10
  }
28
- async _call({
29
- sortBy = "time_desc",
30
- limit
31
- }) {
32
- const currentAgent = this.stateManager.getCurrentAgent();
33
- if (!currentAgent) {
34
- return "Error: Cannot list pending requests. No agent is currently active. Please register or select an agent first.";
35
- }
36
- try {
37
- const pendingRequests = await this.findAllPendingRequests();
38
- return this.formatRequestsList(pendingRequests, sortBy, limit);
39
- } catch (error) {
40
- this.logger.error(`Error in ${this.name}: ${error}`);
41
- return `Error listing pending requests: ${error instanceof Error ? error.message : String(error)}`;
42
- }
43
- }
44
- /**
45
- * Processes the connection connectionMap to find all requests
46
- * that are not fully established (incoming unapproved and outgoing pending).
47
- */
48
- async findAllPendingRequests() {
49
- const connectionsManager = this.stateManager.getConnectionsManager();
50
- if (!connectionsManager) {
51
- return [];
52
- }
53
- const currentAgent = this.stateManager.getCurrentAgent();
54
- if (!currentAgent) {
55
- return [];
56
- }
57
- await connectionsManager.fetchConnectionData(currentAgent.accountId);
58
- const pendingRequests = connectionsManager.getPendingRequests();
59
- const connectionsNeedingConfirmation = connectionsManager.getConnectionsNeedingConfirmation();
60
- return [...pendingRequests, ...connectionsNeedingConfirmation];
61
- }
62
- /**
63
- * Formats the list of pending requests for display.
64
- */
65
- formatRequestsList(requests, sortBy, limit) {
66
- if (requests.length === 0) {
67
- return "No pending connection requests found (incoming or outgoing).";
68
- }
69
- const sortedRequests = this.sortRequests(requests, sortBy);
70
- const limitedRequests = limit ? sortedRequests.slice(0, limit) : sortedRequests;
71
- let output = `Found ${requests.length} pending connection request(s):
72
-
73
- `;
74
- limitedRequests.forEach((request, index) => {
75
- const statusIndicator = request.status === "needs_confirmation" ? "🟠 Incoming" : "⚪️ Outgoing";
76
- output += `${index + 1}. ${statusIndicator} - ID: ${request.uniqueRequestKey}
77
- `;
78
- output += ` ${request.status === "needs_confirmation" ? "From:" : "To: "} ${request.targetAgentName} (${request.targetAccountId})
79
- `;
80
- output += ` Sent/Rcvd: ${request.created.toLocaleString()}
81
- `;
82
- if (request.memo) {
83
- output += ` Memo: ${request.memo}
84
- `;
85
- }
86
- if (request.profileInfo?.bio) {
87
- output += ` Bio: ${request.profileInfo.bio.substring(0, 100)}${request.profileInfo.bio.length > 100 ? "..." : ""}
88
- `;
89
- }
90
- output += "\n";
91
- });
92
- output += "Use related tools (manage_requests, accept_request) to handle these items.";
93
- return output;
94
- }
95
- /**
96
- * Sorts connection requests based on the specified criteria.
97
- */
98
- sortRequests(requests, sortBy) {
99
- const requestsCopy = [...requests];
100
- switch (sortBy) {
101
- case "time_asc":
102
- return requestsCopy.sort(
103
- (a, b) => a.created.getTime() - b.created.getTime()
104
- );
105
- case "time_desc":
106
- return requestsCopy.sort(
107
- (a, b) => b.created.getTime() - a.created.getTime()
108
- );
109
- case "name_asc":
110
- return requestsCopy.sort(
111
- (a, b) => a.targetAgentName?.localeCompare(b?.targetAgentName || "") || 0
112
- );
113
- case "name_desc":
114
- return requestsCopy.sort(
115
- (a, b) => b.targetAgentName?.localeCompare(a?.targetAgentName || "") || 0
116
- );
117
- default:
118
- return requestsCopy.sort(
119
- (a, b) => b.created.getTime() - a.created.getTime()
120
- );
121
- }
11
+ async executeQuery() {
12
+ const hcs10Builder = this.hcs10Builder;
13
+ await hcs10Builder.listUnapprovedConnectionRequests();
14
+ const result = await hcs10Builder.execute();
15
+ return "rawResult" in result ? result.rawResult : result;
122
16
  }
123
17
  }
124
18
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es15.js","sources":["../../src/tools/ListUnapprovedConnectionRequestsTool.ts"],"sourcesContent":["import { StructuredTool, ToolParams } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport {\n IStateManager,\n} from '../state/state-types';\nimport { HCS10Client } from '../hcs10/HCS10Client';\nimport {\n Logger,\n Connection,\n} from '@hashgraphonline/standards-sdk';\n\n\ntype ListPendingRequestsToolParams = ToolParams & {\n hcsClient: HCS10Client;\n stateManager: IStateManager;\n};\n\nexport class ListUnapprovedConnectionRequestsTool extends StructuredTool {\n name = 'list_unapproved_connection_requests';\n description =\n 'Lists all connection requests that are not fully established, including incoming requests needing approval and outgoing requests waiting for confirmation.';\n schema = z.object({\n sortBy: z\n .enum(['time_asc', 'time_desc', 'name_asc', 'name_desc'])\n .optional()\n .describe(\n 'Optional sorting criteria for the requests list (default: time_desc, newest first)'\n ),\n limit: z\n .number()\n .optional()\n .describe(\n 'Optional limit on the number of requests to return (default: all)'\n ),\n });\n\n private hcsClient: HCS10Client;\n private stateManager: IStateManager;\n private logger: Logger;\n\n constructor({\n hcsClient,\n stateManager,\n ...rest\n }: ListPendingRequestsToolParams) {\n super(rest);\n this.hcsClient = hcsClient;\n this.stateManager = stateManager;\n this.logger = Logger.getInstance({\n module: 'ListPendingRequestsTool',\n level: 'debug',\n });\n }\n\n protected async _call({\n sortBy = 'time_desc',\n limit,\n }: z.infer<this['schema']>): Promise<string> {\n const currentAgent = this.stateManager.getCurrentAgent();\n if (!currentAgent) {\n return 'Error: Cannot list pending requests. No agent is currently active. Please register or select an agent first.';\n }\n\n try {\n const pendingRequests = await this.findAllPendingRequests();\n return this.formatRequestsList(pendingRequests, sortBy, limit);\n } catch (error) {\n this.logger.error(`Error in ${this.name}: ${error}`);\n return `Error listing pending requests: ${\n error instanceof Error ? error.message : String(error)\n }`;\n }\n }\n\n /**\n * Processes the connection connectionMap to find all requests\n * that are not fully established (incoming unapproved and outgoing pending).\n */\n private async findAllPendingRequests(): Promise<Connection[]> {\n const connectionsManager = this.stateManager.getConnectionsManager();\n if (!connectionsManager) {\n return [];\n }\n const currentAgent = this.stateManager.getCurrentAgent();\n if (!currentAgent) {\n return [];\n }\n\n await connectionsManager.fetchConnectionData(currentAgent.accountId);\n const pendingRequests = connectionsManager.getPendingRequests();\n const connectionsNeedingConfirmation = connectionsManager.getConnectionsNeedingConfirmation();\n\n return [...pendingRequests, ...connectionsNeedingConfirmation];\n }\n\n /**\n * Formats the list of pending requests for display.\n */\n private formatRequestsList(\n requests: Connection[],\n sortBy: string,\n limit?: number\n ): string {\n if (requests.length === 0) {\n return 'No pending connection requests found (incoming or outgoing).';\n }\n\n const sortedRequests = this.sortRequests(requests, sortBy);\n const limitedRequests = limit\n ? sortedRequests.slice(0, limit)\n : sortedRequests;\n\n let output = `Found ${requests.length} pending connection request(s):\\n\\n`;\n\n limitedRequests.forEach((request, index) => {\n const statusIndicator =\n request.status === 'needs_confirmation'\n ? '🟠 Incoming'\n : '⚪️ Outgoing';\n output += `${index + 1}. ${statusIndicator} - ID: ${request.uniqueRequestKey}\\n`;\n output += ` ${\n request.status === 'needs_confirmation' ? 'From:' : 'To: '\n } ${request.targetAgentName} (${request.targetAccountId})\\n`;\n output += ` Sent/Rcvd: ${request.created.toLocaleString()}\\n`;\n if (request.memo) {\n output += ` Memo: ${request.memo}\\n`;\n }\n if (request.profileInfo?.bio) {\n output += ` Bio: ${request.profileInfo.bio.substring(0, 100)}${\n request.profileInfo.bio.length > 100 ? '...' : ''\n }\\n`;\n }\n output += '\\n';\n });\n\n output +=\n 'Use related tools (manage_requests, accept_request) to handle these items.';\n return output;\n }\n\n /**\n * Sorts connection requests based on the specified criteria.\n */\n private sortRequests(\n requests: Connection[],\n sortBy: string\n ): Connection[] {\n const requestsCopy = [...requests];\n\n switch (sortBy) {\n case 'time_asc':\n return requestsCopy.sort(\n (a, b) => a.created.getTime() - b.created.getTime()\n );\n case 'time_desc':\n return requestsCopy.sort(\n (a, b) => b.created.getTime() - a.created.getTime()\n );\n case 'name_asc':\n return requestsCopy.sort((a, b) =>\n a.targetAgentName?.localeCompare(b?.targetAgentName || '') || 0\n );\n case 'name_desc':\n return requestsCopy.sort((a, b) =>\n b.targetAgentName?.localeCompare(a?.targetAgentName || '') || 0\n );\n default:\n return requestsCopy.sort(\n (a, b) => b.created.getTime() - a.created.getTime()\n );\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-agent-kit.es15.js","sources":["../../src/tools/hcs10/ListUnapprovedConnectionRequestsTool.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseHCS10QueryTool } from './base-hcs10-tools';\nimport { HCS10QueryToolParams } from './hcs10-tool-params';\nconst ListUnapprovedConnectionRequestsZodSchema = z.object({});\n\n/**\n * Lists all connection requests that are not fully established\n */\nexport class ListUnapprovedConnectionRequestsTool extends BaseHCS10QueryTool<\n typeof ListUnapprovedConnectionRequestsZodSchema\n> {\n name = 'list_unapproved_connection_requests';\n description =\n 'Lists all connection requests that are not fully established, including incoming requests needing approval and outgoing requests waiting for confirmation.';\n specificInputSchema = ListUnapprovedConnectionRequestsZodSchema;\n constructor(params: HCS10QueryToolParams) {\n super(params);\n }\n\n protected async executeQuery(): Promise<unknown> {\n const hcs10Builder = this.hcs10Builder;\n await hcs10Builder.listUnapprovedConnectionRequests();\n const result = await hcs10Builder.execute();\n return 'rawResult' in result ? result.rawResult : result;\n }\n}"],"names":[],"mappings":";;AAGA,MAAM,4CAA4C,EAAE,OAAO,EAAE;AAKtD,MAAM,6CAA6C,mBAExD;AAAA,EAKA,YAAY,QAA8B;AACxC,UAAM,MAAM;AALd,SAAA,OAAO;AACP,SAAA,cACE;AACF,SAAA,sBAAsB;AAAA,EAGtB;AAAA,EAEA,MAAgB,eAAiC;AAC/C,UAAM,eAAe,KAAK;AAC1B,UAAM,aAAa,iCAAA;AACnB,UAAM,SAAS,MAAM,aAAa,QAAA;AAClC,WAAO,eAAe,SAAS,OAAO,YAAY;AAAA,EACpD;AACF;"}
@@ -1,4 +1,4 @@
1
- import { updateEnvFile } from "./standards-agent-kit.es27.js";
1
+ import { updateEnvFile } from "./standards-agent-kit.es19.js";
2
2
  import { Logger, ConnectionsManager } from "@hashgraphonline/standards-sdk";
3
3
  class OpenConvaiState {
4
4
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es16.js","sources":["../../src/state/open-convai-state.ts"],"sourcesContent":["import { updateEnvFile } from '../utils/state-tools';\nimport {\n RegisteredAgent,\n ActiveConnection,\n IStateManager,\n AgentPersistenceOptions,\n EnvFilePersistenceOptions,\n ConnectionStatus,\n} from './state-types';\nimport {\n ConnectionsManager,\n HCS10BaseClient,\n Connection,\n Logger,\n IConnectionsManager,\n} from '@hashgraphonline/standards-sdk';\n\n/**\n * Implementation of the IStateManager interface for the OpenConvai system.\n * Manages agent state and connection information with thread safety and\n * proper timestamp tracking.\n */\nexport class OpenConvaiState implements IStateManager {\n private currentAgent: RegisteredAgent | null = null;\n private connectionMessageTimestamps: Record<string, number> = {};\n private defaultEnvFilePath?: string;\n private defaultPrefix: string;\n private connectionsManager: IConnectionsManager | null = null;\n private logger: Logger;\n\n /**\n * Creates a new OpenConvaiState instance\n * @param options - Options for environment variable persistence\n */\n constructor(options?: {\n defaultEnvFilePath?: string;\n defaultPrefix?: string;\n baseClient?: HCS10BaseClient;\n disableLogging?: boolean;\n }) {\n this.defaultEnvFilePath = options?.defaultEnvFilePath;\n this.defaultPrefix = options?.defaultPrefix ?? 'TODD';\n const shouldSilence = options?.disableLogging || process.env.DISABLE_LOGGING === 'true';\n this.logger = new Logger({ module: 'OpenConvaiState', silent: shouldSilence });\n\n // Initialize ConnectionsManager immediately if baseClient is provided\n if (options?.baseClient) {\n this.initializeConnectionsManager(options.baseClient);\n }\n }\n\n /**\n * Initializes the ConnectionsManager\n * @param baseClient - HCS10BaseClient instance to use\n */\n initializeConnectionsManager(\n baseClient: HCS10BaseClient\n ): IConnectionsManager {\n if (!this.connectionsManager) {\n this.logger.debug('Initializing ConnectionsManager');\n this.connectionsManager = new ConnectionsManager({\n baseClient,\n logLevel: 'error',\n });\n } else {\n this.logger.debug('ConnectionsManager already initialized');\n }\n return this.connectionsManager;\n }\n\n /**\n * Gets the ConnectionsManager instance\n * @returns The ConnectionsManager instance, or null if not initialized\n */\n getConnectionsManager(): IConnectionsManager | null {\n return this.connectionsManager;\n }\n\n /**\n * Sets the current active agent and clears any previous connection data.\n * This should be called when switching between agents.\n */\n setCurrentAgent(agent: RegisteredAgent | null): void {\n this.currentAgent = agent;\n this.connectionMessageTimestamps = {};\n\n // Clear connections manager when changing agents\n if (this.connectionsManager) {\n this.connectionsManager.clearAll();\n }\n }\n\n /**\n * Returns the currently active agent or null if none is set.\n */\n getCurrentAgent(): RegisteredAgent | null {\n return this.currentAgent;\n }\n\n /**\n * Adds a new connection to the active connections list.\n * Ensures no duplicates are added based on connectionTopicId.\n * Initializes timestamp tracking for the connection.\n */\n addActiveConnection(connection: ActiveConnection): void {\n if (!this.connectionsManager) {\n this.logger.error(\n 'ConnectionsManager not initialized. Call initializeConnectionsManager before adding connections.'\n );\n throw new Error(\n 'ConnectionsManager not initialized. Call initializeConnectionsManager before adding connections.'\n );\n }\n\n // Convert from ActiveConnection to Connection\n const sdkConnection: Connection = {\n connectionTopicId: connection.connectionTopicId,\n targetAccountId: connection.targetAccountId,\n targetAgentName: connection.targetAgentName,\n targetInboundTopicId: connection.targetInboundTopicId,\n status: this.convertConnectionStatus(connection.status || 'established'),\n isPending: connection.isPending || false,\n needsConfirmation: connection.needsConfirmation || false,\n created: connection.created || new Date(),\n lastActivity: connection.lastActivity,\n profileInfo: connection.profileInfo,\n connectionRequestId: connection.connectionRequestId,\n processed: true,\n };\n\n // Add to ConnectionsManager\n this.connectionsManager.updateOrAddConnection(sdkConnection);\n\n // Initialize timestamp tracking\n this.initializeTimestampIfNeeded(connection.connectionTopicId);\n }\n\n /**\n * Updates an existing connection or adds it if not found.\n * Preserves existing properties when updating by merging objects.\n */\n updateOrAddConnection(connection: ActiveConnection): void {\n this.addActiveConnection(connection);\n }\n\n /**\n * Returns a copy of all active connections.\n */\n listConnections(): ActiveConnection[] {\n if (!this.connectionsManager) {\n this.logger.debug(\n 'ConnectionsManager not initialized, returning empty connections list'\n );\n return [];\n }\n\n // Convert SDK Connections to ActiveConnection\n return this.connectionsManager\n .getAllConnections()\n .map((conn) => this.convertToActiveConnection(conn));\n }\n\n /**\n * Finds a connection by its identifier, which can be:\n * - A 1-based index as displayed in the connection list\n * - A target account ID string\n * - A connection topic ID string\n */\n getConnectionByIdentifier(identifier: string): ActiveConnection | undefined {\n if (!this.connectionsManager) {\n return undefined;\n }\n\n const connections = this.listConnections();\n\n // Check if it's a 1-based index\n const numericIndex = parseInt(identifier) - 1;\n if (\n !isNaN(numericIndex) &&\n numericIndex >= 0 &&\n numericIndex < connections.length\n ) {\n return connections[numericIndex];\n }\n\n // Check if it's a topic ID\n const byTopicId =\n this.connectionsManager.getConnectionByTopicId(identifier);\n if (byTopicId) {\n return this.convertToActiveConnection(byTopicId);\n }\n\n // Check if it's an account ID\n const byAccountId =\n this.connectionsManager.getConnectionByAccountId(identifier);\n if (byAccountId) {\n return this.convertToActiveConnection(byAccountId);\n }\n\n return undefined;\n }\n\n /**\n * Gets the last processed message timestamp for a connection.\n * Returns 0 if no timestamp has been recorded.\n */\n getLastTimestamp(connectionTopicId: string): number {\n return this.connectionMessageTimestamps[connectionTopicId] || 0;\n }\n\n /**\n * Updates the last processed message timestamp for a connection,\n * but only if the new timestamp is more recent than the existing one.\n */\n updateTimestamp(connectionTopicId: string, timestampNanos: number): void {\n // Initialize if this is first update and skip the comparison logic\n if (!(connectionTopicId in this.connectionMessageTimestamps)) {\n this.connectionMessageTimestamps[connectionTopicId] = timestampNanos;\n return;\n }\n\n // Otherwise, only update if newer\n const currentTimestamp =\n this.connectionMessageTimestamps[connectionTopicId];\n if (timestampNanos > currentTimestamp) {\n this.connectionMessageTimestamps[connectionTopicId] = timestampNanos;\n }\n }\n\n /**\n * Helper method to initialize timestamp tracking for a connection\n * if it doesn't already exist.\n */\n private initializeTimestampIfNeeded(connectionTopicId: string): void {\n if (!(connectionTopicId in this.connectionMessageTimestamps)) {\n this.connectionMessageTimestamps[connectionTopicId] =\n Date.now() * 1_000_000;\n }\n }\n\n /**\n * Converts ConnectionStatus to SDK status format\n */\n private convertConnectionStatus(\n status: string\n ): 'pending' | 'established' | 'needs_confirmation' | 'closed' {\n switch (status) {\n case 'pending':\n return 'pending';\n case 'established':\n return 'established';\n case 'needs confirmation':\n return 'needs_confirmation';\n default:\n return 'established';\n }\n }\n\n /**\n * Converts SDK Connection to ActiveConnection\n */\n private convertToActiveConnection(conn: Connection): ActiveConnection {\n return {\n targetAccountId: conn.targetAccountId,\n targetAgentName: conn.targetAgentName || `Agent ${conn.targetAccountId}`,\n targetInboundTopicId: conn.targetInboundTopicId || '',\n connectionTopicId: conn.connectionTopicId,\n status: this.convertToStateStatus(conn.status),\n created: conn.created,\n lastActivity: conn.lastActivity,\n isPending: conn.isPending,\n needsConfirmation: conn.needsConfirmation,\n profileInfo: conn.profileInfo,\n connectionRequestId: conn.connectionRequestId,\n };\n }\n\n /**\n * Converts SDK status to state status format\n */\n private convertToStateStatus(status: string): ConnectionStatus {\n switch (status) {\n case 'pending':\n return 'pending';\n case 'established':\n return 'established';\n case 'needs_confirmation':\n return 'needs confirmation';\n case 'closed':\n return 'established'; // Mapping closed to established for compatibility\n default:\n return 'unknown';\n }\n }\n\n /**\n * Persists agent data to environment variables\n * @param agent - The agent data to persist\n * @param options - Environment file persistence options\n */\n async persistAgentData(\n agent: RegisteredAgent,\n options?: AgentPersistenceOptions\n ): Promise<void> {\n if (options?.type && options.type !== 'env-file') {\n throw new Error(\n `Unsupported persistence type: ${options.type}. Only 'env-file' is supported.`\n );\n }\n\n const envFilePath =\n (options as EnvFilePersistenceOptions)?.envFilePath ||\n this.defaultEnvFilePath ||\n process.env.ENV_FILE_PATH ||\n '.env';\n\n if (!envFilePath) {\n throw new Error(\n 'Environment file path could not be determined for agent data persistence'\n );\n }\n\n const prefix =\n (options as EnvFilePersistenceOptions)?.prefix || this.defaultPrefix;\n\n if (!agent.accountId || !agent.inboundTopicId || !agent.outboundTopicId) {\n throw new Error('Agent data incomplete, cannot persist to environment');\n }\n\n const updates: Record<string, string> = {\n [`${prefix}_ACCOUNT_ID`]: agent.accountId,\n [`${prefix}_INBOUND_TOPIC_ID`]: agent.inboundTopicId,\n [`${prefix}_OUTBOUND_TOPIC_ID`]: agent.outboundTopicId,\n };\n\n if (agent.privateKey) {\n updates[`${prefix}_PRIVATE_KEY`] = agent.privateKey;\n }\n\n if (agent.profileTopicId) {\n updates[`${prefix}_PROFILE_TOPIC_ID`] = agent.profileTopicId;\n }\n\n await updateEnvFile(envFilePath, updates);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-agent-kit.es16.js","sources":["../../src/state/open-convai-state.ts"],"sourcesContent":["import { updateEnvFile } from '../utils/state-tools';\nimport {\n RegisteredAgent,\n ActiveConnection,\n IStateManager,\n AgentPersistenceOptions,\n EnvFilePersistenceOptions,\n ConnectionStatus,\n} from './state-types';\nimport {\n ConnectionsManager,\n HCS10BaseClient,\n Connection,\n Logger,\n IConnectionsManager,\n} from '@hashgraphonline/standards-sdk';\n\n/**\n * Implementation of the IStateManager interface for the OpenConvai system.\n * Manages agent state and connection information with thread safety and\n * proper timestamp tracking.\n */\nexport class OpenConvaiState implements IStateManager {\n private currentAgent: RegisteredAgent | null = null;\n private connectionMessageTimestamps: Record<string, number> = {};\n private defaultEnvFilePath?: string;\n private defaultPrefix: string;\n private connectionsManager: IConnectionsManager | null = null;\n private logger: Logger;\n\n /**\n * Creates a new OpenConvaiState instance\n * @param options - Options for environment variable persistence\n */\n constructor(options?: {\n defaultEnvFilePath?: string;\n defaultPrefix?: string;\n baseClient?: HCS10BaseClient;\n disableLogging?: boolean;\n }) {\n this.defaultEnvFilePath = options?.defaultEnvFilePath;\n this.defaultPrefix = options?.defaultPrefix ?? 'TODD';\n const shouldSilence = options?.disableLogging || process.env.DISABLE_LOGGING === 'true';\n this.logger = new Logger({ module: 'OpenConvaiState', silent: shouldSilence });\n\n // Initialize ConnectionsManager immediately if baseClient is provided\n if (options?.baseClient) {\n this.initializeConnectionsManager(options.baseClient);\n }\n }\n\n /**\n * Initializes the ConnectionsManager\n * @param baseClient - HCS10BaseClient instance to use\n */\n initializeConnectionsManager(\n baseClient: HCS10BaseClient\n ): IConnectionsManager {\n if (!this.connectionsManager) {\n this.logger.debug('Initializing ConnectionsManager');\n this.connectionsManager = new ConnectionsManager({\n baseClient,\n logLevel: 'error',\n });\n } else {\n this.logger.debug('ConnectionsManager already initialized');\n }\n return this.connectionsManager;\n }\n\n /**\n * Gets the ConnectionsManager instance\n * @returns The ConnectionsManager instance, or null if not initialized\n */\n getConnectionsManager(): IConnectionsManager | null {\n return this.connectionsManager;\n }\n\n /**\n * Sets the current active agent and clears any previous connection data.\n * This should be called when switching between agents.\n */\n setCurrentAgent(agent: RegisteredAgent | null): void {\n this.currentAgent = agent;\n this.connectionMessageTimestamps = {};\n\n // Clear connections manager when changing agents\n if (this.connectionsManager) {\n this.connectionsManager.clearAll();\n }\n }\n\n /**\n * Returns the currently active agent or null if none is set.\n */\n getCurrentAgent(): RegisteredAgent | null {\n return this.currentAgent;\n }\n\n /**\n * Adds a new connection to the active connections list.\n * Ensures no duplicates are added based on connectionTopicId.\n * Initializes timestamp tracking for the connection.\n */\n addActiveConnection(connection: ActiveConnection): void {\n if (!this.connectionsManager) {\n this.logger.error(\n 'ConnectionsManager not initialized. Call initializeConnectionsManager before adding connections.'\n );\n throw new Error(\n 'ConnectionsManager not initialized. Call initializeConnectionsManager before adding connections.'\n );\n }\n\n // Convert from ActiveConnection to Connection\n const sdkConnection: Connection = {\n connectionTopicId: connection.connectionTopicId,\n targetAccountId: connection.targetAccountId,\n targetAgentName: connection.targetAgentName,\n targetInboundTopicId: connection.targetInboundTopicId,\n status: this.convertConnectionStatus(connection.status || 'established'),\n isPending: connection.isPending || false,\n needsConfirmation: connection.needsConfirmation || false,\n created: connection.created || new Date(),\n lastActivity: connection.lastActivity,\n profileInfo: connection.profileInfo,\n connectionRequestId: connection.connectionRequestId,\n processed: true,\n };\n\n // Add to ConnectionsManager\n this.connectionsManager.updateOrAddConnection(sdkConnection);\n\n // Initialize timestamp tracking\n this.initializeTimestampIfNeeded(connection.connectionTopicId);\n }\n\n /**\n * Updates an existing connection or adds it if not found.\n * Preserves existing properties when updating by merging objects.\n */\n updateOrAddConnection(connection: ActiveConnection): void {\n this.addActiveConnection(connection);\n }\n\n /**\n * Returns a copy of all active connections.\n */\n listConnections(): ActiveConnection[] {\n if (!this.connectionsManager) {\n this.logger.debug(\n 'ConnectionsManager not initialized, returning empty connections list'\n );\n return [];\n }\n\n // Convert SDK Connections to ActiveConnection\n return this.connectionsManager\n .getAllConnections()\n .map((conn) => this.convertToActiveConnection(conn));\n }\n\n /**\n * Finds a connection by its identifier, which can be:\n * - A 1-based index as displayed in the connection list\n * - A target account ID string\n * - A connection topic ID string\n */\n getConnectionByIdentifier(identifier: string): ActiveConnection | undefined {\n if (!this.connectionsManager) {\n return undefined;\n }\n\n const connections = this.listConnections();\n\n // Check if it's a 1-based index\n const numericIndex = parseInt(identifier) - 1;\n if (\n !isNaN(numericIndex) &&\n numericIndex >= 0 &&\n numericIndex < connections.length\n ) {\n return connections[numericIndex];\n }\n\n // Check if it's a topic ID\n const byTopicId =\n this.connectionsManager.getConnectionByTopicId(identifier);\n if (byTopicId) {\n return this.convertToActiveConnection(byTopicId);\n }\n\n // Check if it's an account ID\n const byAccountId =\n this.connectionsManager.getConnectionByAccountId(identifier);\n if (byAccountId) {\n return this.convertToActiveConnection(byAccountId);\n }\n\n return undefined;\n }\n\n /**\n * Gets the last processed message timestamp for a connection.\n * Returns 0 if no timestamp has been recorded.\n */\n getLastTimestamp(connectionTopicId: string): number {\n return this.connectionMessageTimestamps[connectionTopicId] || 0;\n }\n\n /**\n * Updates the last processed message timestamp for a connection,\n * but only if the new timestamp is more recent than the existing one.\n */\n updateTimestamp(connectionTopicId: string, timestampNanos: number): void {\n // Initialize if this is first update and skip the comparison logic\n if (!(connectionTopicId in this.connectionMessageTimestamps)) {\n this.connectionMessageTimestamps[connectionTopicId] = timestampNanos;\n return;\n }\n\n // Otherwise, only update if newer\n const currentTimestamp =\n this.connectionMessageTimestamps[connectionTopicId];\n if (timestampNanos > currentTimestamp) {\n this.connectionMessageTimestamps[connectionTopicId] = timestampNanos;\n }\n }\n\n /**\n * Helper method to initialize timestamp tracking for a connection\n * if it doesn't already exist.\n */\n private initializeTimestampIfNeeded(connectionTopicId: string): void {\n if (!(connectionTopicId in this.connectionMessageTimestamps)) {\n this.connectionMessageTimestamps[connectionTopicId] =\n Date.now() * 1_000_000;\n }\n }\n\n /**\n * Converts ConnectionStatus to SDK status format\n */\n private convertConnectionStatus(\n status: string\n ): 'pending' | 'established' | 'needs_confirmation' | 'closed' {\n switch (status) {\n case 'pending':\n return 'pending';\n case 'established':\n return 'established';\n case 'needs confirmation':\n return 'needs_confirmation';\n default:\n return 'established';\n }\n }\n\n /**\n * Converts SDK Connection to ActiveConnection\n */\n private convertToActiveConnection(conn: Connection): ActiveConnection {\n return {\n targetAccountId: conn.targetAccountId,\n targetAgentName: conn.targetAgentName || `Agent ${conn.targetAccountId}`,\n targetInboundTopicId: conn.targetInboundTopicId || '',\n connectionTopicId: conn.connectionTopicId,\n status: this.convertToStateStatus(conn.status),\n created: conn.created,\n lastActivity: conn.lastActivity,\n isPending: conn.isPending,\n needsConfirmation: conn.needsConfirmation,\n profileInfo: conn.profileInfo,\n connectionRequestId: conn.connectionRequestId,\n };\n }\n\n /**\n * Converts SDK status to state status format\n */\n private convertToStateStatus(status: string): ConnectionStatus {\n switch (status) {\n case 'pending':\n return 'pending';\n case 'established':\n return 'established';\n case 'needs_confirmation':\n return 'needs confirmation';\n case 'closed':\n return 'established'; // Mapping closed to established for compatibility\n default:\n return 'unknown';\n }\n }\n\n /**\n * Persists agent data to environment variables\n * @param agent - The agent data to persist\n * @param options - Environment file persistence options\n */\n async persistAgentData(\n agent: RegisteredAgent,\n options?: AgentPersistenceOptions\n ): Promise<void> {\n if (options?.type && options.type !== 'env-file') {\n throw new Error(\n `Unsupported persistence type: ${options.type}. Only 'env-file' is supported.`\n );\n }\n\n const envFilePath =\n (options as EnvFilePersistenceOptions)?.envFilePath ||\n this.defaultEnvFilePath ||\n process.env.ENV_FILE_PATH ||\n '.env';\n\n if (!envFilePath) {\n throw new Error(\n 'Environment file path could not be determined for agent data persistence'\n );\n }\n\n const prefix =\n (options as EnvFilePersistenceOptions)?.prefix || this.defaultPrefix;\n\n if (!agent.accountId || !agent.inboundTopicId || !agent.outboundTopicId) {\n throw new Error('Agent data incomplete, cannot persist to environment');\n }\n\n const updates: Record<string, string> = {\n [`${prefix}_ACCOUNT_ID`]: agent.accountId,\n [`${prefix}_INBOUND_TOPIC_ID`]: agent.inboundTopicId,\n [`${prefix}_OUTBOUND_TOPIC_ID`]: agent.outboundTopicId,\n };\n\n if (agent.privateKey) {\n updates[`${prefix}_PRIVATE_KEY`] = agent.privateKey;\n }\n\n if (agent.profileTopicId) {\n updates[`${prefix}_PROFILE_TOPIC_ID`] = agent.profileTopicId;\n }\n\n await updateEnvFile(envFilePath, updates);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,6 @@
1
- import { HCS10Client } from "./standards-agent-kit.es2.js";
2
- import { RegisterAgentTool } from "./standards-agent-kit.es3.js";
3
- import { SendMessageTool } from "./standards-agent-kit.es4.js";
4
- import { ConnectionTool } from "./standards-agent-kit.es5.js";
5
- import { OpenConvaiState } from "./standards-agent-kit.es16.js";
1
+ import { ServerSigner, HederaAgentKit } from "hedera-agent-kit";
2
+ import { HCS10Builder } from "./standards-agent-kit.es2.js";
3
+ import { RegisterAgentTool } from "./standards-agent-kit.es5.js";
6
4
  import { FindRegistrationsTool } from "./standards-agent-kit.es10.js";
7
5
  import { InitiateConnectionTool } from "./standards-agent-kit.es7.js";
8
6
  import { ListConnectionsTool } from "./standards-agent-kit.es8.js";
@@ -13,9 +11,10 @@ import { ManageConnectionRequestsTool } from "./standards-agent-kit.es12.js";
13
11
  import { AcceptConnectionRequestTool } from "./standards-agent-kit.es13.js";
14
12
  import { RetrieveProfileTool } from "./standards-agent-kit.es14.js";
15
13
  import { ListUnapprovedConnectionRequestsTool } from "./standards-agent-kit.es15.js";
14
+ import { OpenConvaiState } from "./standards-agent-kit.es16.js";
16
15
  import { Logger } from "@hashgraphonline/standards-sdk";
17
- import { ENV_FILE_PATH } from "./standards-agent-kit.es27.js";
18
- const initializeStandardsAgentKit = (options) => {
16
+ import { ENV_FILE_PATH } from "./standards-agent-kit.es19.js";
17
+ const initializeStandardsAgentKit = async (options) => {
19
18
  const config = options?.clientConfig || {};
20
19
  const operatorId = config.operatorId || process.env.HEDERA_OPERATOR_ID;
21
20
  const operatorPrivateKey = config.operatorKey || process.env.HEDERA_OPERATOR_KEY;
@@ -46,74 +45,92 @@ const initializeStandardsAgentKit = (options) => {
46
45
  defaultPrefix: "TODD"
47
46
  });
48
47
  logger.info("State manager initialized");
49
- const hcs10Client = new HCS10Client(operatorId, operatorPrivateKey, network, {
48
+ const signer = new ServerSigner(operatorId, operatorPrivateKey, network);
49
+ const hederaKit = new HederaAgentKit(signer);
50
+ await hederaKit.initialize();
51
+ logger.info(`HederaAgentKit initialized for ${operatorId} on ${network}`);
52
+ const hcs10Builder = new HCS10Builder(hederaKit, stateManager, {
50
53
  useEncryption: config.useEncryption,
51
- registryUrl: config.registryUrl
54
+ registryUrl: config.registryUrl,
55
+ logLevel: config.logLevel
52
56
  });
53
- logger.info(`HCS10Client initialized for ${operatorId} on ${network}`);
54
- let monitoringClient;
57
+ let monitoringHederaKit;
58
+ let monitoringHcs10Builder;
55
59
  if (options?.monitoringClient) {
56
- monitoringClient = new HCS10Client(
57
- operatorId,
58
- operatorPrivateKey,
59
- network,
60
- {
61
- useEncryption: config.useEncryption,
62
- registryUrl: config.registryUrl,
63
- logLevel: "error"
64
- }
65
- );
60
+ const monitoringSigner = new ServerSigner(operatorId, operatorPrivateKey, network);
61
+ monitoringHederaKit = new HederaAgentKit(monitoringSigner);
62
+ await monitoringHederaKit.initialize();
63
+ monitoringHcs10Builder = new HCS10Builder(monitoringHederaKit, stateManager, {
64
+ useEncryption: config.useEncryption,
65
+ registryUrl: config.registryUrl,
66
+ logLevel: "error"
67
+ });
66
68
  logger.info("Monitoring client initialized");
67
69
  }
68
70
  const tools = {};
69
- tools.registerAgentTool = new RegisterAgentTool(hcs10Client, stateManager);
70
- tools.sendMessageTool = new SendMessageTool(hcs10Client);
71
- tools.connectionTool = new ConnectionTool({
72
- client: monitoringClient || hcs10Client,
73
- stateManager
71
+ tools.registerAgentTool = new RegisterAgentTool({
72
+ hederaKit,
73
+ hcs10Builder,
74
+ logger: void 0
74
75
  });
75
76
  if (options?.createAllTools) {
76
77
  tools.findRegistrationsTool = new FindRegistrationsTool({
77
- hcsClient: hcs10Client
78
+ hederaKit,
79
+ hcs10Builder,
80
+ logger: void 0
81
+ });
82
+ tools.retrieveProfileTool = new RetrieveProfileTool({
83
+ hederaKit,
84
+ hcs10Builder,
85
+ logger: void 0
78
86
  });
79
- tools.retrieveProfileTool = new RetrieveProfileTool(hcs10Client);
80
87
  tools.initiateConnectionTool = new InitiateConnectionTool({
81
- hcsClient: hcs10Client,
82
- stateManager
88
+ hederaKit,
89
+ hcs10Builder,
90
+ logger: void 0
83
91
  });
84
92
  tools.listConnectionsTool = new ListConnectionsTool({
85
- hcsClient: hcs10Client,
86
- stateManager
93
+ hederaKit,
94
+ hcs10Builder,
95
+ logger: void 0
87
96
  });
88
97
  tools.sendMessageToConnectionTool = new SendMessageToConnectionTool({
89
- hcsClient: hcs10Client,
90
- stateManager
98
+ hederaKit,
99
+ hcs10Builder,
100
+ logger: void 0
91
101
  });
92
102
  tools.checkMessagesTool = new CheckMessagesTool({
93
- hcsClient: hcs10Client,
94
- stateManager
103
+ hederaKit,
104
+ hcs10Builder,
105
+ logger: void 0
95
106
  });
96
107
  tools.connectionMonitorTool = new ConnectionMonitorTool({
97
- hcsClient: monitoringClient || hcs10Client,
98
- stateManager
108
+ hederaKit: monitoringHederaKit || hederaKit,
109
+ hcs10Builder: monitoringHcs10Builder || hcs10Builder,
110
+ logger: void 0
99
111
  });
100
112
  tools.manageConnectionRequestsTool = new ManageConnectionRequestsTool({
101
- hcsClient: hcs10Client,
102
- stateManager
113
+ hederaKit,
114
+ hcs10Builder,
115
+ logger: void 0
103
116
  });
104
117
  tools.acceptConnectionRequestTool = new AcceptConnectionRequestTool({
105
- hcsClient: hcs10Client,
106
- stateManager
118
+ hederaKit,
119
+ hcs10Builder,
120
+ logger: void 0
107
121
  });
108
122
  tools.listUnapprovedConnectionRequestsTool = new ListUnapprovedConnectionRequestsTool({
109
- stateManager,
110
- hcsClient: hcs10Client
123
+ hederaKit,
124
+ hcs10Builder,
125
+ logger: void 0
111
126
  });
112
127
  logger.info("All tools initialized");
113
128
  }
114
129
  return {
115
- hcs10Client,
116
- monitoringClient,
130
+ hederaKit,
131
+ hcs10Builder,
132
+ monitoringHederaKit,
133
+ monitoringHcs10Builder,
117
134
  tools,
118
135
  stateManager
119
136
  };
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es17.js","sources":["../../src/init/init.ts"],"sourcesContent":["import { HCS10Client, StandardNetworkType } from '../hcs10/HCS10Client';\nimport { RegisterAgentTool } from '../tools/RegisterAgentTool';\nimport { SendMessageTool } from '../tools/SendMessageTool';\nimport { ConnectionTool } from '../tools/ConnectionTool';\nimport { IStateManager } from '../state/state-types';\nimport { OpenConvaiState } from '../state/open-convai-state';\nimport { FindRegistrationsTool } from '../tools/FindRegistrationsTool';\nimport { InitiateConnectionTool } from '../tools/InitiateConnectionTool';\nimport { ListConnectionsTool } from '../tools/ListConnectionsTool';\nimport { SendMessageToConnectionTool } from '../tools/SendMessageToConnectionTool';\nimport { CheckMessagesTool } from '../tools/CheckMessagesTool';\nimport { ConnectionMonitorTool } from '../tools/ConnectionMonitorTool';\nimport { ManageConnectionRequestsTool } from '../tools/ManageConnectionRequestsTool';\nimport { AcceptConnectionRequestTool } from '../tools/AcceptConnectionRequestTool';\nimport { RetrieveProfileTool } from '../tools/RetrieveProfileTool';\nimport { ListUnapprovedConnectionRequestsTool } from '../tools/ListUnapprovedConnectionRequestsTool';\nimport { Logger } from '@hashgraphonline/standards-sdk';\nimport { ENV_FILE_PATH } from '../utils/state-tools';\n\nexport interface HCS10ClientConfig {\n operatorId?: string;\n operatorKey?: string;\n network?: StandardNetworkType;\n useEncryption?: boolean;\n registryUrl?: string;\n logLevel?: 'debug' | 'info' | 'warn' | 'error';\n}\n\nexport interface HCS10InitializationOptions {\n clientConfig?: HCS10ClientConfig;\n stateManager?: IStateManager;\n createAllTools?: boolean;\n monitoringClient?: boolean;\n}\n\n/**\n * Tool collection containing all available tools from the standards-agent-kit\n */\nexport interface HCS10Tools {\n registerAgentTool: RegisterAgentTool;\n findRegistrationsTool: FindRegistrationsTool;\n retrieveProfileTool: RetrieveProfileTool;\n initiateConnectionTool: InitiateConnectionTool;\n listConnectionsTool: ListConnectionsTool;\n sendMessageToConnectionTool: SendMessageToConnectionTool;\n checkMessagesTool: CheckMessagesTool;\n sendMessageTool: SendMessageTool;\n connectionTool: ConnectionTool;\n connectionMonitorTool: ConnectionMonitorTool;\n manageConnectionRequestsTool: ManageConnectionRequestsTool;\n acceptConnectionRequestTool: AcceptConnectionRequestTool;\n listUnapprovedConnectionRequestsTool: ListUnapprovedConnectionRequestsTool;\n}\n\n/**\n * Initializes the HCS10 client and returns pre-registered LangChain tools.\n *\n * @param options - Initialization options\n * @returns Object containing hcs10Client and requested tools\n */\nexport const initializeStandardsAgentKit = (\n options?: HCS10InitializationOptions\n): {\n hcs10Client: HCS10Client;\n monitoringClient?: HCS10Client;\n tools: Partial<HCS10Tools>;\n stateManager: IStateManager;\n} => {\n const config = options?.clientConfig || {};\n\n const operatorId = config.operatorId || process.env.HEDERA_OPERATOR_ID;\n const operatorPrivateKey =\n config.operatorKey || process.env.HEDERA_OPERATOR_KEY;\n\n const networkEnv = config.network || process.env.HEDERA_NETWORK || 'testnet';\n\n let network: StandardNetworkType;\n if (networkEnv === 'mainnet') {\n network = 'mainnet';\n } else if (networkEnv === 'testnet') {\n network = 'testnet';\n } else {\n console.warn(\n `Unsupported network specified: '${networkEnv}'. Defaulting to 'testnet'.`\n );\n network = 'testnet';\n }\n\n if (!operatorId || !operatorPrivateKey) {\n throw new Error(\n 'Operator ID and private key must be provided either through options or environment variables.'\n );\n }\n\n const shouldSilence = process.env.DISABLE_LOGGING === 'true';\n const logger = Logger.getInstance({\n level: config.logLevel || 'info',\n silent: shouldSilence,\n });\n\n const stateManager =\n options?.stateManager ||\n new OpenConvaiState({\n defaultEnvFilePath: ENV_FILE_PATH,\n defaultPrefix: 'TODD',\n });\n logger.info('State manager initialized');\n\n const hcs10Client = new HCS10Client(operatorId, operatorPrivateKey, network, {\n useEncryption: config.useEncryption,\n registryUrl: config.registryUrl,\n });\n logger.info(`HCS10Client initialized for ${operatorId} on ${network}`);\n\n let monitoringClient: HCS10Client | undefined;\n if (options?.monitoringClient) {\n monitoringClient = new HCS10Client(\n operatorId,\n operatorPrivateKey,\n network,\n {\n useEncryption: config.useEncryption,\n registryUrl: config.registryUrl,\n logLevel: 'error',\n }\n );\n logger.info('Monitoring client initialized');\n }\n\n const tools: Partial<HCS10Tools> = {};\n\n tools.registerAgentTool = new RegisterAgentTool(hcs10Client, stateManager);\n tools.sendMessageTool = new SendMessageTool(hcs10Client);\n tools.connectionTool = new ConnectionTool({\n client: monitoringClient || hcs10Client,\n stateManager,\n });\n\n if (options?.createAllTools) {\n tools.findRegistrationsTool = new FindRegistrationsTool({\n hcsClient: hcs10Client,\n });\n tools.retrieveProfileTool = new RetrieveProfileTool(hcs10Client);\n tools.initiateConnectionTool = new InitiateConnectionTool({\n hcsClient: hcs10Client,\n stateManager,\n });\n tools.listConnectionsTool = new ListConnectionsTool({\n hcsClient: hcs10Client,\n stateManager,\n });\n tools.sendMessageToConnectionTool = new SendMessageToConnectionTool({\n hcsClient: hcs10Client,\n stateManager,\n });\n tools.checkMessagesTool = new CheckMessagesTool({\n hcsClient: hcs10Client,\n stateManager,\n });\n tools.connectionMonitorTool = new ConnectionMonitorTool({\n hcsClient: monitoringClient || hcs10Client,\n stateManager,\n });\n tools.manageConnectionRequestsTool = new ManageConnectionRequestsTool({\n hcsClient: hcs10Client,\n stateManager,\n });\n tools.acceptConnectionRequestTool = new AcceptConnectionRequestTool({\n hcsClient: hcs10Client,\n stateManager,\n });\n tools.listUnapprovedConnectionRequestsTool =\n new ListUnapprovedConnectionRequestsTool({\n stateManager,\n hcsClient: hcs10Client,\n });\n\n logger.info('All tools initialized');\n }\n\n return {\n hcs10Client,\n monitoringClient,\n tools,\n stateManager,\n };\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA4Da,MAAA,8BAA8B,CACzC,YAMG;AACG,QAAA,SAAS,SAAS,gBAAgB,CAAC;AAEzC,QAAM,aAAa,OAAO,cAAc,QAAQ,IAAI;AACpD,QAAM,qBACJ,OAAO,eAAe,QAAQ,IAAI;AAEpC,QAAM,aAAa,OAAO,WAAW,QAAQ,IAAI,kBAAkB;AAE/D,MAAA;AACJ,MAAI,eAAe,WAAW;AAClB,cAAA;AAAA,EAAA,WACD,eAAe,WAAW;AACzB,cAAA;AAAA,EAAA,OACL;AACG,YAAA;AAAA,MACN,mCAAmC,UAAU;AAAA,IAC/C;AACU,cAAA;AAAA,EAAA;AAGR,MAAA,CAAC,cAAc,CAAC,oBAAoB;AACtC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EAAA;AAGI,QAAA,gBAAgB,QAAQ,IAAI,oBAAoB;AAChD,QAAA,SAAS,OAAO,YAAY;AAAA,IAChC,OAAO,OAAO,YAAY;AAAA,IAC1B,QAAQ;AAAA,EAAA,CACT;AAED,QAAM,eACJ,SAAS,gBACT,IAAI,gBAAgB;AAAA,IAClB,oBAAoB;AAAA,IACpB,eAAe;AAAA,EAAA,CAChB;AACH,SAAO,KAAK,2BAA2B;AAEvC,QAAM,cAAc,IAAI,YAAY,YAAY,oBAAoB,SAAS;AAAA,IAC3E,eAAe,OAAO;AAAA,IACtB,aAAa,OAAO;AAAA,EAAA,CACrB;AACD,SAAO,KAAK,+BAA+B,UAAU,OAAO,OAAO,EAAE;AAEjE,MAAA;AACJ,MAAI,SAAS,kBAAkB;AAC7B,uBAAmB,IAAI;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,eAAe,OAAO;AAAA,QACtB,aAAa,OAAO;AAAA,QACpB,UAAU;AAAA,MAAA;AAAA,IAEd;AACA,WAAO,KAAK,+BAA+B;AAAA,EAAA;AAG7C,QAAM,QAA6B,CAAC;AAEpC,QAAM,oBAAoB,IAAI,kBAAkB,aAAa,YAAY;AACnE,QAAA,kBAAkB,IAAI,gBAAgB,WAAW;AACjD,QAAA,iBAAiB,IAAI,eAAe;AAAA,IACxC,QAAQ,oBAAoB;AAAA,IAC5B;AAAA,EAAA,CACD;AAED,MAAI,SAAS,gBAAgB;AACrB,UAAA,wBAAwB,IAAI,sBAAsB;AAAA,MACtD,WAAW;AAAA,IAAA,CACZ;AACK,UAAA,sBAAsB,IAAI,oBAAoB,WAAW;AACzD,UAAA,yBAAyB,IAAI,uBAAuB;AAAA,MACxD,WAAW;AAAA,MACX;AAAA,IAAA,CACD;AACK,UAAA,sBAAsB,IAAI,oBAAoB;AAAA,MAClD,WAAW;AAAA,MACX;AAAA,IAAA,CACD;AACK,UAAA,8BAA8B,IAAI,4BAA4B;AAAA,MAClE,WAAW;AAAA,MACX;AAAA,IAAA,CACD;AACK,UAAA,oBAAoB,IAAI,kBAAkB;AAAA,MAC9C,WAAW;AAAA,MACX;AAAA,IAAA,CACD;AACK,UAAA,wBAAwB,IAAI,sBAAsB;AAAA,MACtD,WAAW,oBAAoB;AAAA,MAC/B;AAAA,IAAA,CACD;AACK,UAAA,+BAA+B,IAAI,6BAA6B;AAAA,MACpE,WAAW;AAAA,MACX;AAAA,IAAA,CACD;AACK,UAAA,8BAA8B,IAAI,4BAA4B;AAAA,MAClE,WAAW;AAAA,MACX;AAAA,IAAA,CACD;AACK,UAAA,uCACJ,IAAI,qCAAqC;AAAA,MACvC;AAAA,MACA,WAAW;AAAA,IAAA,CACZ;AAEH,WAAO,KAAK,uBAAuB;AAAA,EAAA;AAG9B,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;"}
1
+ {"version":3,"file":"standards-agent-kit.es17.js","sources":["../../src/init/init.ts"],"sourcesContent":["import { HederaAgentKit, ServerSigner } from 'hedera-agent-kit';\nimport { HCS10Builder } from '../builders/hcs10/hcs10-builder';\nimport { RegisterAgentTool } from '../tools/hcs10/RegisterAgentTool';\nimport { FindRegistrationsTool } from '../tools/hcs10/FindRegistrationsTool';\nimport { InitiateConnectionTool } from '../tools/hcs10/InitiateConnectionTool';\nimport { ListConnectionsTool } from '../tools/hcs10/ListConnectionsTool';\nimport { SendMessageToConnectionTool } from '../tools/hcs10/SendMessageToConnectionTool';\nimport { CheckMessagesTool } from '../tools/hcs10/CheckMessagesTool';\nimport { ConnectionMonitorTool } from '../tools/hcs10/ConnectionMonitorTool';\nimport { ManageConnectionRequestsTool } from '../tools/hcs10/ManageConnectionRequestsTool';\nimport { AcceptConnectionRequestTool } from '../tools/hcs10/AcceptConnectionRequestTool';\nimport { RetrieveProfileTool } from '../tools/hcs10/RetrieveProfileTool';\nimport { ListUnapprovedConnectionRequestsTool } from '../tools/hcs10/ListUnapprovedConnectionRequestsTool';\nimport { IStateManager } from '../state/state-types';\nimport { OpenConvaiState } from '../state/open-convai-state';\nimport { Logger } from '@hashgraphonline/standards-sdk';\nimport { ENV_FILE_PATH } from '../utils/state-tools';\n\nexport interface HCS10ClientConfig {\n operatorId?: string;\n operatorKey?: string;\n network?: 'mainnet' | 'testnet';\n useEncryption?: boolean;\n registryUrl?: string;\n logLevel?: 'debug' | 'info' | 'warn' | 'error';\n}\n\nexport interface HCS10InitializationOptions {\n clientConfig?: HCS10ClientConfig;\n stateManager?: IStateManager;\n createAllTools?: boolean;\n monitoringClient?: boolean;\n}\n\n/**\n * Tool collection containing all available tools from the standards-agent-kit\n */\nexport interface HCS10Tools {\n registerAgentTool: RegisterAgentTool;\n findRegistrationsTool: FindRegistrationsTool;\n retrieveProfileTool: RetrieveProfileTool;\n initiateConnectionTool: InitiateConnectionTool;\n listConnectionsTool: ListConnectionsTool;\n sendMessageToConnectionTool: SendMessageToConnectionTool;\n checkMessagesTool: CheckMessagesTool;\n connectionMonitorTool: ConnectionMonitorTool;\n manageConnectionRequestsTool: ManageConnectionRequestsTool;\n acceptConnectionRequestTool: AcceptConnectionRequestTool;\n listUnapprovedConnectionRequestsTool: ListUnapprovedConnectionRequestsTool;\n}\n\n/**\n * Initializes the HCS10 client and returns pre-registered LangChain tools.\n *\n * @param options - Initialization options\n * @returns Object containing hederaKit, hcs10Builder and requested tools\n */\nexport const initializeStandardsAgentKit = async (\n options?: HCS10InitializationOptions\n): Promise<{\n hederaKit: HederaAgentKit;\n hcs10Builder: HCS10Builder;\n monitoringHederaKit?: HederaAgentKit;\n monitoringHcs10Builder?: HCS10Builder;\n tools: Partial<HCS10Tools>;\n stateManager: IStateManager;\n}> => {\n const config = options?.clientConfig || {};\n\n const operatorId = config.operatorId || process.env.HEDERA_OPERATOR_ID;\n const operatorPrivateKey =\n config.operatorKey || process.env.HEDERA_OPERATOR_KEY;\n\n const networkEnv = config.network || process.env.HEDERA_NETWORK || 'testnet';\n\n let network: 'mainnet' | 'testnet';\n if (networkEnv === 'mainnet') {\n network = 'mainnet';\n } else if (networkEnv === 'testnet') {\n network = 'testnet';\n } else {\n console.warn(\n `Unsupported network specified: '${networkEnv}'. Defaulting to 'testnet'.`\n );\n network = 'testnet';\n }\n\n if (!operatorId || !operatorPrivateKey) {\n throw new Error(\n 'Operator ID and private key must be provided either through options or environment variables.'\n );\n }\n\n const shouldSilence = process.env.DISABLE_LOGGING === 'true';\n const logger = Logger.getInstance({\n level: config.logLevel || 'info',\n silent: shouldSilence,\n });\n\n const stateManager =\n options?.stateManager ||\n new OpenConvaiState({\n defaultEnvFilePath: ENV_FILE_PATH,\n defaultPrefix: 'TODD',\n });\n logger.info('State manager initialized');\n\n // Create HederaAgentKit\n const signer = new ServerSigner(operatorId, operatorPrivateKey, network);\n const hederaKit = new HederaAgentKit(signer);\n await hederaKit.initialize();\n logger.info(`HederaAgentKit initialized for ${operatorId} on ${network}`);\n\n // Create HCS10Builder\n const hcs10Builder = new HCS10Builder(hederaKit, stateManager, {\n useEncryption: config.useEncryption,\n registryUrl: config.registryUrl,\n logLevel: config.logLevel,\n });\n\n let monitoringHederaKit: HederaAgentKit | undefined;\n let monitoringHcs10Builder: HCS10Builder | undefined;\n\n if (options?.monitoringClient) {\n const monitoringSigner = new ServerSigner(operatorId, operatorPrivateKey, network);\n monitoringHederaKit = new HederaAgentKit(monitoringSigner);\n await monitoringHederaKit.initialize();\n monitoringHcs10Builder = new HCS10Builder(monitoringHederaKit, stateManager, {\n useEncryption: config.useEncryption,\n registryUrl: config.registryUrl,\n logLevel: 'error',\n });\n logger.info('Monitoring client initialized');\n }\n\n const tools: Partial<HCS10Tools> = {};\n\n // Always create RegisterAgentTool\n tools.registerAgentTool = new RegisterAgentTool({\n hederaKit,\n hcs10Builder,\n logger: undefined,\n });\n\n if (options?.createAllTools) {\n tools.findRegistrationsTool = new FindRegistrationsTool({\n hederaKit,\n hcs10Builder,\n logger: undefined,\n });\n tools.retrieveProfileTool = new RetrieveProfileTool({\n hederaKit,\n hcs10Builder,\n logger: undefined,\n });\n tools.initiateConnectionTool = new InitiateConnectionTool({\n hederaKit,\n hcs10Builder,\n logger: undefined,\n });\n tools.listConnectionsTool = new ListConnectionsTool({\n hederaKit,\n hcs10Builder,\n logger: undefined,\n });\n tools.sendMessageToConnectionTool = new SendMessageToConnectionTool({\n hederaKit,\n hcs10Builder,\n logger: undefined,\n });\n tools.checkMessagesTool = new CheckMessagesTool({\n hederaKit,\n hcs10Builder,\n logger: undefined,\n });\n tools.connectionMonitorTool = new ConnectionMonitorTool({\n hederaKit: monitoringHederaKit || hederaKit,\n hcs10Builder: monitoringHcs10Builder || hcs10Builder,\n logger: undefined,\n });\n tools.manageConnectionRequestsTool = new ManageConnectionRequestsTool({\n hederaKit,\n hcs10Builder,\n logger: undefined,\n });\n tools.acceptConnectionRequestTool = new AcceptConnectionRequestTool({\n hederaKit,\n hcs10Builder,\n logger: undefined,\n });\n tools.listUnapprovedConnectionRequestsTool =\n new ListUnapprovedConnectionRequestsTool({\n hederaKit,\n hcs10Builder,\n logger: undefined,\n });\n\n logger.info('All tools initialized');\n }\n\n return {\n hederaKit,\n hcs10Builder,\n monitoringHederaKit,\n monitoringHcs10Builder,\n tools,\n stateManager,\n };\n};"],"names":[],"mappings":"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"}
@@ -1,82 +1,33 @@
1
- class PluginRegistry {
2
- /**
3
- * Creates a new PluginRegistry instance
4
- * @param context The context to provide to plugins during initialization
5
- */
6
- constructor(context) {
7
- this.plugins = /* @__PURE__ */ new Map();
8
- this.context = context;
9
- this.logger = context.logger;
1
+ import { BasePlugin, HederaGetHbarPriceTool } from "hedera-agent-kit";
2
+ import { HederaGetHbarPriceTool as HederaGetHbarPriceTool2 } from "hedera-agent-kit";
3
+ class HbarPricePlugin extends BasePlugin {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.id = "hedera-hbar-price";
7
+ this.name = "Hedera HBAR Price Plugin";
8
+ this.description = "Provides tools to interact with Hedera network data, specifically HBAR price.";
9
+ this.version = "1.0.0";
10
+ this.author = "Hashgraph Online";
11
+ this.tools = [];
10
12
  }
11
- /**
12
- * Register a plugin with the registry
13
- * @param plugin The plugin to register
14
- * @throws Error if a plugin with the same ID is already registered
15
- */
16
- async registerPlugin(plugin) {
17
- if (this.plugins.has(plugin.id)) {
18
- throw new Error(`Plugin with ID ${plugin.id} is already registered`);
19
- }
20
- await plugin.initialize(this.context);
21
- this.plugins.set(plugin.id, plugin);
22
- this.logger.info(`Plugin registered: ${plugin.name} (${plugin.id}) v${plugin.version}`);
13
+ async initialize(context) {
14
+ await super.initialize(context);
15
+ this.initializeTools();
23
16
  }
24
- /**
25
- * Get a plugin by ID
26
- * @param id The ID of the plugin to retrieve
27
- * @returns The plugin, or undefined if not found
28
- */
29
- getPlugin(id) {
30
- return this.plugins.get(id);
17
+ initializeTools() {
18
+ this.tools = [
19
+ new HederaGetHbarPriceTool({
20
+ hederaKit: this.context.config.hederaKit,
21
+ logger: this.context.logger
22
+ })
23
+ ];
31
24
  }
32
- /**
33
- * Get all registered plugins
34
- * @returns Array of all registered plugins
35
- */
36
- getAllPlugins() {
37
- return Array.from(this.plugins.values());
38
- }
39
- /**
40
- * Get all tools from all registered plugins
41
- * @returns Array of all tools provided by registered plugins
42
- */
43
- getAllTools() {
44
- return this.getAllPlugins().flatMap((plugin) => plugin.getTools());
45
- }
46
- /**
47
- * Unregister a plugin
48
- * @param id The ID of the plugin to unregister
49
- * @returns true if the plugin was unregistered, false if it wasn't found
50
- */
51
- async unregisterPlugin(id) {
52
- const plugin = this.plugins.get(id);
53
- if (!plugin) {
54
- return false;
55
- }
56
- if (plugin.cleanup) {
57
- try {
58
- await plugin.cleanup();
59
- } catch (error) {
60
- this.logger.error(`Error during plugin cleanup: ${error}`);
61
- }
62
- }
63
- const result = this.plugins.delete(id);
64
- if (result) {
65
- this.logger.info(`Plugin unregistered: ${plugin.name} (${plugin.id})`);
66
- }
67
- return result;
68
- }
69
- /**
70
- * Unregister all plugins
71
- */
72
- async unregisterAllPlugins() {
73
- const pluginIds = Array.from(this.plugins.keys());
74
- for (const id of pluginIds) {
75
- await this.unregisterPlugin(id);
76
- }
25
+ getTools() {
26
+ return this.tools;
77
27
  }
78
28
  }
79
29
  export {
80
- PluginRegistry
30
+ HederaGetHbarPriceTool2 as GetHbarPriceTool,
31
+ HbarPricePlugin
81
32
  };
82
33
  //# sourceMappingURL=standards-agent-kit.es18.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-agent-kit.es18.js","sources":["../../src/plugins/PluginRegistry.ts"],"sourcesContent":["import { IPlugin, PluginContext } from './PluginInterface';\nimport { StructuredTool } from '@langchain/core/tools';\nimport { Logger } from '@hashgraphonline/standards-sdk';\n\n/**\n * Registry for managing plugins in the Standards Agent Kit\n */\nexport class PluginRegistry {\n private plugins: Map<string, IPlugin> = new Map();\n private context: PluginContext;\n private logger: Logger;\n \n /**\n * Creates a new PluginRegistry instance\n * @param context The context to provide to plugins during initialization\n */\n constructor(context: PluginContext) {\n this.context = context;\n this.logger = context.logger;\n }\n \n /**\n * Register a plugin with the registry\n * @param plugin The plugin to register\n * @throws Error if a plugin with the same ID is already registered\n */\n async registerPlugin(plugin: IPlugin): Promise<void> {\n if (this.plugins.has(plugin.id)) {\n throw new Error(`Plugin with ID ${plugin.id} is already registered`);\n }\n \n await plugin.initialize(this.context);\n this.plugins.set(plugin.id, plugin);\n this.logger.info(`Plugin registered: ${plugin.name} (${plugin.id}) v${plugin.version}`);\n }\n \n /**\n * Get a plugin by ID\n * @param id The ID of the plugin to retrieve\n * @returns The plugin, or undefined if not found\n */\n getPlugin(id: string): IPlugin | undefined {\n return this.plugins.get(id);\n }\n \n /**\n * Get all registered plugins\n * @returns Array of all registered plugins\n */\n getAllPlugins(): IPlugin[] {\n return Array.from(this.plugins.values());\n }\n \n /**\n * Get all tools from all registered plugins\n * @returns Array of all tools provided by registered plugins\n */\n getAllTools(): StructuredTool[] {\n return this.getAllPlugins().flatMap(plugin => plugin.getTools());\n }\n \n /**\n * Unregister a plugin\n * @param id The ID of the plugin to unregister\n * @returns true if the plugin was unregistered, false if it wasn't found\n */\n async unregisterPlugin(id: string): Promise<boolean> {\n const plugin = this.plugins.get(id);\n if (!plugin) {\n return false;\n }\n \n if (plugin.cleanup) {\n try {\n await plugin.cleanup();\n } catch (error) {\n this.logger.error(`Error during plugin cleanup: ${error}`);\n }\n }\n \n const result = this.plugins.delete(id);\n if (result) {\n this.logger.info(`Plugin unregistered: ${plugin.name} (${plugin.id})`);\n }\n \n return result;\n }\n \n /**\n * Unregister all plugins\n */\n async unregisterAllPlugins(): Promise<void> {\n const pluginIds = Array.from(this.plugins.keys());\n for (const id of pluginIds) {\n await this.unregisterPlugin(id);\n }\n }\n}\n"],"names":[],"mappings":"AAOO,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAS1B,YAAY,SAAwB;AAR5B,SAAA,8BAAoC,IAAI;AAS9C,SAAK,UAAU;AACf,SAAK,SAAS,QAAQ;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQxB,MAAM,eAAe,QAAgC;AACnD,QAAI,KAAK,QAAQ,IAAI,OAAO,EAAE,GAAG;AAC/B,YAAM,IAAI,MAAM,kBAAkB,OAAO,EAAE,wBAAwB;AAAA,IAAA;AAG/D,UAAA,OAAO,WAAW,KAAK,OAAO;AACpC,SAAK,QAAQ,IAAI,OAAO,IAAI,MAAM;AAC7B,SAAA,OAAO,KAAK,sBAAsB,OAAO,IAAI,KAAK,OAAO,EAAE,MAAM,OAAO,OAAO,EAAE;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQxF,UAAU,IAAiC;AAClC,WAAA,KAAK,QAAQ,IAAI,EAAE;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO5B,gBAA2B;AACzB,WAAO,MAAM,KAAK,KAAK,QAAQ,QAAQ;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOzC,cAAgC;AAC9B,WAAO,KAAK,gBAAgB,QAAQ,CAAU,WAAA,OAAO,UAAU;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQjE,MAAM,iBAAiB,IAA8B;AACnD,UAAM,SAAS,KAAK,QAAQ,IAAI,EAAE;AAClC,QAAI,CAAC,QAAQ;AACJ,aAAA;AAAA,IAAA;AAGT,QAAI,OAAO,SAAS;AACd,UAAA;AACF,cAAM,OAAO,QAAQ;AAAA,eACd,OAAO;AACd,aAAK,OAAO,MAAM,gCAAgC,KAAK,EAAE;AAAA,MAAA;AAAA,IAC3D;AAGF,UAAM,SAAS,KAAK,QAAQ,OAAO,EAAE;AACrC,QAAI,QAAQ;AACL,WAAA,OAAO,KAAK,wBAAwB,OAAO,IAAI,KAAK,OAAO,EAAE,GAAG;AAAA,IAAA;AAGhE,WAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAMT,MAAM,uBAAsC;AAC1C,UAAM,YAAY,MAAM,KAAK,KAAK,QAAQ,MAAM;AAChD,eAAW,MAAM,WAAW;AACpB,YAAA,KAAK,iBAAiB,EAAE;AAAA,IAAA;AAAA,EAChC;AAEJ;"}
1
+ {"version":3,"file":"standards-agent-kit.es18.js","sources":["../../src/plugins/hedera/HbarPricePlugin.ts"],"sourcesContent":["// Re-export the HBAR price tool from hedera-agent-kit\nexport { HederaGetHbarPriceTool as GetHbarPriceTool } from 'hedera-agent-kit';\n\nimport { BasePlugin, GenericPluginContext, HederaTool, HederaAgentKit } from 'hedera-agent-kit';\nimport { HederaGetHbarPriceTool } from 'hedera-agent-kit';\n\n/**\n * Plugin to provide tools related to Hedera network information, like HBAR price.\n * Uses the built-in HederaGetHbarPriceTool from hedera-agent-kit.\n */\nexport class HbarPricePlugin extends BasePlugin<GenericPluginContext> {\n id = 'hedera-hbar-price';\n name = 'Hedera HBAR Price Plugin';\n description = 'Provides tools to interact with Hedera network data, specifically HBAR price.';\n version = '1.0.0';\n author = 'Hashgraph Online';\n\n private tools: HederaTool[] = [];\n\n override async initialize(context: GenericPluginContext): Promise<void> {\n await super.initialize(context);\n this.initializeTools();\n }\n\n private initializeTools(): void {\n this.tools = [\n new HederaGetHbarPriceTool({\n hederaKit: this.context.config.hederaKit as HederaAgentKit,\n logger: this.context.logger\n })\n ];\n }\n\n getTools(): HederaTool[] {\n return this.tools;\n }\n}"],"names":["HederaGetHbarPriceTool"],"mappings":";;AAUO,MAAM,wBAAwB,WAAiC;AAAA,EAA/D,cAAA;AAAA,UAAA,GAAA,SAAA;AACL,SAAA,KAAK;AACL,SAAA,OAAO;AACP,SAAA,cAAc;AACd,SAAA,UAAU;AACV,SAAA,SAAS;AAET,SAAQ,QAAsB,CAAA;AAAA,EAAC;AAAA,EAE/B,MAAe,WAAW,SAA8C;AACtE,UAAM,MAAM,WAAW,OAAO;AAC9B,SAAK,gBAAA;AAAA,EACP;AAAA,EAEQ,kBAAwB;AAC9B,SAAK,QAAQ;AAAA,MACX,IAAIA,uBAAuB;AAAA,QACzB,WAAW,KAAK,QAAQ,OAAO;AAAA,QAC/B,QAAQ,KAAK,QAAQ;AAAA,MAAA,CACtB;AAAA,IAAA;AAAA,EAEL;AAAA,EAEA,WAAyB;AACvB,WAAO,KAAK;AAAA,EACd;AACF;"}