@hashgraphonline/conversational-agent 0.2.216 → 0.2.217

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 (312) hide show
  1. package/cli/readme.md +181 -0
  2. package/dist/cjs/index.cjs +1 -1
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/cjs/index.d.ts +1 -0
  5. package/dist/cjs/plugins/community/swarm/SwarmPlugin.d.ts +17 -0
  6. package/dist/cjs/plugins/community/swarm/__tests__/SwarmPlugin.mocks.d.ts +1 -0
  7. package/dist/cjs/plugins/community/swarm/__tests__/SwarmPlugin.test.d.ts +1 -0
  8. package/dist/cjs/plugins/community/swarm/__tests__/tools/CreatePostageStampTool.test.d.ts +1 -0
  9. package/dist/cjs/plugins/community/swarm/__tests__/tools/DownloadDataTool.test.d.ts +1 -0
  10. package/dist/cjs/plugins/community/swarm/__tests__/tools/DownloadFilesTool.test.d.ts +1 -0
  11. package/dist/cjs/plugins/community/swarm/__tests__/tools/ExtendPostageStampTool.test.d.ts +1 -0
  12. package/dist/cjs/plugins/community/swarm/__tests__/tools/GetPostageStampTool.test.d.ts +1 -0
  13. package/dist/cjs/plugins/community/swarm/__tests__/tools/ListPostageStampsTool.test.d.ts +1 -0
  14. package/dist/cjs/plugins/community/swarm/__tests__/tools/QueryUploadProgressTool.test.d.ts +1 -0
  15. package/dist/cjs/plugins/community/swarm/__tests__/tools/ReadFeedTool.test.d.ts +1 -0
  16. package/dist/cjs/plugins/community/swarm/__tests__/tools/SwarmTool.mocks.d.ts +14 -0
  17. package/dist/cjs/plugins/community/swarm/__tests__/tools/UpdateFeedTool.test.d.ts +1 -0
  18. package/dist/cjs/plugins/community/swarm/__tests__/tools/UploadDataTool.test.d.ts +1 -0
  19. package/dist/cjs/plugins/community/swarm/__tests__/tools/UploadFileTool.test.d.ts +1 -0
  20. package/dist/cjs/plugins/community/swarm/__tests__/tools/UploadFolderTool.test.d.ts +1 -0
  21. package/dist/cjs/plugins/community/swarm/config.d.ts +6 -0
  22. package/dist/cjs/plugins/community/swarm/constants.d.ts +8 -0
  23. package/dist/cjs/plugins/community/swarm/index.d.ts +2 -0
  24. package/dist/cjs/plugins/community/swarm/model.d.ts +23 -0
  25. package/dist/cjs/plugins/community/swarm/tools/CreatePostageStampTool.d.ts +47 -0
  26. package/dist/cjs/plugins/community/swarm/tools/DownloadDataTool.d.ts +35 -0
  27. package/dist/cjs/plugins/community/swarm/tools/DownloadFilesTool.d.ts +41 -0
  28. package/dist/cjs/plugins/community/swarm/tools/ExtendPostageStampTool.d.ts +47 -0
  29. package/dist/cjs/plugins/community/swarm/tools/GetPostageStampTool.d.ts +35 -0
  30. package/dist/cjs/plugins/community/swarm/tools/ListPostageStampsTool.d.ts +53 -0
  31. package/dist/cjs/plugins/community/swarm/tools/QueryUploadProgressTool.d.ts +35 -0
  32. package/dist/cjs/plugins/community/swarm/tools/ReadFeedTool.d.ts +41 -0
  33. package/dist/cjs/plugins/community/swarm/tools/UpdateFeedTool.d.ts +47 -0
  34. package/dist/cjs/plugins/community/swarm/tools/UploadDataTool.d.ts +47 -0
  35. package/dist/cjs/plugins/community/swarm/tools/UploadFileTool.d.ts +53 -0
  36. package/dist/cjs/plugins/community/swarm/tools/UploadFolderTool.d.ts +47 -0
  37. package/dist/cjs/plugins/community/swarm/utils.d.ts +22 -0
  38. package/dist/cjs/plugins/index.d.ts +1 -0
  39. package/dist/esm/index.js +33 -31
  40. package/dist/esm/index.js.map +1 -1
  41. package/dist/esm/index10.js +13 -677
  42. package/dist/esm/index10.js.map +1 -1
  43. package/dist/esm/index11.js +601 -234
  44. package/dist/esm/index11.js.map +1 -1
  45. package/dist/esm/index12.js +296 -136
  46. package/dist/esm/index12.js.map +1 -1
  47. package/dist/esm/index13.js +127 -235
  48. package/dist/esm/index13.js.map +1 -1
  49. package/dist/esm/index14.js +247 -84
  50. package/dist/esm/index14.js.map +1 -1
  51. package/dist/esm/index15.js +81 -159
  52. package/dist/esm/index15.js.map +1 -1
  53. package/dist/esm/index16.js +155 -229
  54. package/dist/esm/index16.js.map +1 -1
  55. package/dist/esm/index17.js +238 -140
  56. package/dist/esm/index17.js.map +1 -1
  57. package/dist/esm/index18.js +139 -493
  58. package/dist/esm/index18.js.map +1 -1
  59. package/dist/esm/index19.js +479 -91
  60. package/dist/esm/index19.js.map +1 -1
  61. package/dist/esm/index20.js +88 -147
  62. package/dist/esm/index20.js.map +1 -1
  63. package/dist/esm/index21.js +127 -666
  64. package/dist/esm/index21.js.map +1 -1
  65. package/dist/esm/index22.js +698 -44
  66. package/dist/esm/index22.js.map +1 -1
  67. package/dist/esm/index23.js +45 -304
  68. package/dist/esm/index23.js.map +1 -1
  69. package/dist/esm/index24.js +303 -153
  70. package/dist/esm/index24.js.map +1 -1
  71. package/dist/esm/index25.js +150 -117
  72. package/dist/esm/index25.js.map +1 -1
  73. package/dist/esm/index26.js +154 -18
  74. package/dist/esm/index26.js.map +1 -1
  75. package/dist/esm/index27.js +18 -22
  76. package/dist/esm/index27.js.map +1 -1
  77. package/dist/esm/index28.js +15 -74
  78. package/dist/esm/index28.js.map +1 -1
  79. package/dist/esm/index29.js +70 -295
  80. package/dist/esm/index29.js.map +1 -1
  81. package/dist/esm/index30.js +279 -100
  82. package/dist/esm/index30.js.map +1 -1
  83. package/dist/esm/index31.js +86 -922
  84. package/dist/esm/index31.js.map +1 -1
  85. package/dist/esm/index32.js +904 -189
  86. package/dist/esm/index32.js.map +1 -1
  87. package/dist/esm/index33.js +185 -1169
  88. package/dist/esm/index33.js.map +1 -1
  89. package/dist/esm/index34.js +1218 -112
  90. package/dist/esm/index34.js.map +1 -1
  91. package/dist/esm/index35.js +111 -99
  92. package/dist/esm/index35.js.map +1 -1
  93. package/dist/esm/index36.js +113 -8
  94. package/dist/esm/index36.js.map +1 -1
  95. package/dist/esm/index37.js +8 -45
  96. package/dist/esm/index37.js.map +1 -1
  97. package/dist/esm/index38.js +41 -102
  98. package/dist/esm/index38.js.map +1 -1
  99. package/dist/esm/index39.js +96 -55
  100. package/dist/esm/index39.js.map +1 -1
  101. package/dist/esm/index4.js +1 -1
  102. package/dist/esm/index40.js +58 -71
  103. package/dist/esm/index40.js.map +1 -1
  104. package/dist/esm/index41.js +79 -21
  105. package/dist/esm/index41.js.map +1 -1
  106. package/dist/esm/index42.js +21 -5
  107. package/dist/esm/index42.js.map +1 -1
  108. package/dist/esm/index43.js +4 -11
  109. package/dist/esm/index43.js.map +1 -1
  110. package/dist/esm/index44.js +12 -322
  111. package/dist/esm/index44.js.map +1 -1
  112. package/dist/esm/index45.js +280 -142
  113. package/dist/esm/index45.js.map +1 -1
  114. package/dist/esm/index46.js +181 -24
  115. package/dist/esm/index46.js.map +1 -1
  116. package/dist/esm/index47.js +7 -95
  117. package/dist/esm/index47.js.map +1 -1
  118. package/dist/esm/index48.js +77 -7
  119. package/dist/esm/index48.js.map +1 -1
  120. package/dist/esm/index49.js +75 -0
  121. package/dist/esm/index49.js.map +1 -0
  122. package/dist/esm/index5.js +2 -2
  123. package/dist/esm/index50.js +57 -0
  124. package/dist/esm/index50.js.map +1 -0
  125. package/dist/esm/index51.js +103 -0
  126. package/dist/esm/index51.js.map +1 -0
  127. package/dist/esm/index52.js +79 -0
  128. package/dist/esm/index52.js.map +1 -0
  129. package/dist/esm/index53.js +75 -0
  130. package/dist/esm/index53.js.map +1 -0
  131. package/dist/esm/index54.js +124 -0
  132. package/dist/esm/index54.js.map +1 -0
  133. package/dist/esm/index55.js +58 -0
  134. package/dist/esm/index55.js.map +1 -0
  135. package/dist/esm/index56.js +83 -0
  136. package/dist/esm/index56.js.map +1 -0
  137. package/dist/esm/index57.js +100 -0
  138. package/dist/esm/index57.js.map +1 -0
  139. package/dist/esm/index58.js +118 -0
  140. package/dist/esm/index58.js.map +1 -0
  141. package/dist/esm/index59.js +108 -0
  142. package/dist/esm/index59.js.map +1 -0
  143. package/dist/esm/index6.js +132 -833
  144. package/dist/esm/index6.js.map +1 -1
  145. package/dist/esm/index60.js +30 -0
  146. package/dist/esm/index60.js.map +1 -0
  147. package/dist/esm/index61.js +98 -0
  148. package/dist/esm/index61.js.map +1 -0
  149. package/dist/esm/index62.js +131 -0
  150. package/dist/esm/index62.js.map +1 -0
  151. package/dist/esm/index63.js +19 -0
  152. package/dist/esm/index63.js.map +1 -0
  153. package/dist/esm/index7.js +826 -75
  154. package/dist/esm/index7.js.map +1 -1
  155. package/dist/esm/index8.js +91 -13
  156. package/dist/esm/index8.js.map +1 -1
  157. package/dist/esm/index9.js +13 -17
  158. package/dist/esm/index9.js.map +1 -1
  159. package/dist/types/index.d.ts +1 -0
  160. package/dist/types/plugins/community/swarm/SwarmPlugin.d.ts +17 -0
  161. package/dist/types/plugins/community/swarm/__tests__/SwarmPlugin.mocks.d.ts +1 -0
  162. package/dist/types/plugins/community/swarm/__tests__/SwarmPlugin.test.d.ts +1 -0
  163. package/dist/types/plugins/community/swarm/__tests__/tools/CreatePostageStampTool.test.d.ts +1 -0
  164. package/dist/types/plugins/community/swarm/__tests__/tools/DownloadDataTool.test.d.ts +1 -0
  165. package/dist/types/plugins/community/swarm/__tests__/tools/DownloadFilesTool.test.d.ts +1 -0
  166. package/dist/types/plugins/community/swarm/__tests__/tools/ExtendPostageStampTool.test.d.ts +1 -0
  167. package/dist/types/plugins/community/swarm/__tests__/tools/GetPostageStampTool.test.d.ts +1 -0
  168. package/dist/types/plugins/community/swarm/__tests__/tools/ListPostageStampsTool.test.d.ts +1 -0
  169. package/dist/types/plugins/community/swarm/__tests__/tools/QueryUploadProgressTool.test.d.ts +1 -0
  170. package/dist/types/plugins/community/swarm/__tests__/tools/ReadFeedTool.test.d.ts +1 -0
  171. package/dist/types/plugins/community/swarm/__tests__/tools/SwarmTool.mocks.d.ts +14 -0
  172. package/dist/types/plugins/community/swarm/__tests__/tools/UpdateFeedTool.test.d.ts +1 -0
  173. package/dist/types/plugins/community/swarm/__tests__/tools/UploadDataTool.test.d.ts +1 -0
  174. package/dist/types/plugins/community/swarm/__tests__/tools/UploadFileTool.test.d.ts +1 -0
  175. package/dist/types/plugins/community/swarm/__tests__/tools/UploadFolderTool.test.d.ts +1 -0
  176. package/dist/types/plugins/community/swarm/config.d.ts +6 -0
  177. package/dist/types/plugins/community/swarm/constants.d.ts +8 -0
  178. package/dist/types/plugins/community/swarm/index.d.ts +2 -0
  179. package/dist/types/plugins/community/swarm/model.d.ts +23 -0
  180. package/dist/types/plugins/community/swarm/tools/CreatePostageStampTool.d.ts +47 -0
  181. package/dist/types/plugins/community/swarm/tools/DownloadDataTool.d.ts +35 -0
  182. package/dist/types/plugins/community/swarm/tools/DownloadFilesTool.d.ts +41 -0
  183. package/dist/types/plugins/community/swarm/tools/ExtendPostageStampTool.d.ts +47 -0
  184. package/dist/types/plugins/community/swarm/tools/GetPostageStampTool.d.ts +35 -0
  185. package/dist/types/plugins/community/swarm/tools/ListPostageStampsTool.d.ts +53 -0
  186. package/dist/types/plugins/community/swarm/tools/QueryUploadProgressTool.d.ts +35 -0
  187. package/dist/types/plugins/community/swarm/tools/ReadFeedTool.d.ts +41 -0
  188. package/dist/types/plugins/community/swarm/tools/UpdateFeedTool.d.ts +47 -0
  189. package/dist/types/plugins/community/swarm/tools/UploadDataTool.d.ts +47 -0
  190. package/dist/types/plugins/community/swarm/tools/UploadFileTool.d.ts +53 -0
  191. package/dist/types/plugins/community/swarm/tools/UploadFolderTool.d.ts +47 -0
  192. package/dist/types/plugins/community/swarm/utils.d.ts +22 -0
  193. package/dist/types/plugins/index.d.ts +1 -0
  194. package/package.json +36 -26
  195. package/src/index.ts +1 -0
  196. package/src/plugins/community/swarm/README.md +279 -0
  197. package/src/plugins/community/swarm/SwarmPlugin.ts +178 -0
  198. package/src/plugins/community/swarm/__tests__/SwarmPlugin.mocks.ts +105 -0
  199. package/src/plugins/community/swarm/__tests__/SwarmPlugin.test.ts +93 -0
  200. package/src/plugins/community/swarm/__tests__/tools/CreatePostageStampTool.test.ts +152 -0
  201. package/src/plugins/community/swarm/__tests__/tools/DownloadDataTool.test.ts +93 -0
  202. package/src/plugins/community/swarm/__tests__/tools/DownloadFilesTool.test.ts +163 -0
  203. package/src/plugins/community/swarm/__tests__/tools/ExtendPostageStampTool.test.ts +132 -0
  204. package/src/plugins/community/swarm/__tests__/tools/GetPostageStampTool.test.ts +83 -0
  205. package/src/plugins/community/swarm/__tests__/tools/ListPostageStampsTool.test.ts +219 -0
  206. package/src/plugins/community/swarm/__tests__/tools/QueryUploadProgressTool.test.ts +169 -0
  207. package/src/plugins/community/swarm/__tests__/tools/ReadFeedTool.test.ts +133 -0
  208. package/src/plugins/community/swarm/__tests__/tools/SwarmTool.mocks.ts +67 -0
  209. package/src/plugins/community/swarm/__tests__/tools/UpdateFeedTool.test.ts +148 -0
  210. package/src/plugins/community/swarm/__tests__/tools/UploadDataTool.test.ts +125 -0
  211. package/src/plugins/community/swarm/__tests__/tools/UploadFileTool.test.ts +194 -0
  212. package/src/plugins/community/swarm/__tests__/tools/UploadFolderTool.test.ts +118 -0
  213. package/src/plugins/community/swarm/config.ts +6 -0
  214. package/src/plugins/community/swarm/constants.ts +12 -0
  215. package/src/plugins/community/swarm/index.ts +2 -0
  216. package/src/plugins/community/swarm/model.ts +23 -0
  217. package/src/plugins/community/swarm/tools/CreatePostageStampTool.ts +137 -0
  218. package/src/plugins/community/swarm/tools/DownloadDataTool.ts +79 -0
  219. package/src/plugins/community/swarm/tools/DownloadFilesTool.ts +155 -0
  220. package/src/plugins/community/swarm/tools/ExtendPostageStampTool.ts +112 -0
  221. package/src/plugins/community/swarm/tools/GetPostageStampTool.ts +92 -0
  222. package/src/plugins/community/swarm/tools/ListPostageStampsTool.ts +124 -0
  223. package/src/plugins/community/swarm/tools/QueryUploadProgressTool.ts +109 -0
  224. package/src/plugins/community/swarm/tools/ReadFeedTool.ts +110 -0
  225. package/src/plugins/community/swarm/tools/UpdateFeedTool.ts +149 -0
  226. package/src/plugins/community/swarm/tools/UploadDataTool.ts +109 -0
  227. package/src/plugins/community/swarm/tools/UploadFileTool.ts +163 -0
  228. package/src/plugins/community/swarm/tools/UploadFolderTool.ts +150 -0
  229. package/src/plugins/community/swarm/utils.ts +172 -0
  230. package/src/plugins/index.ts +1 -0
  231. package/cli/dist/CLIApp.d.ts +0 -11
  232. package/cli/dist/CLIApp.d.ts.map +0 -1
  233. package/cli/dist/CLIApp.js +0 -128
  234. package/cli/dist/CLIApp.js.map +0 -1
  235. package/cli/dist/LocalConversationalAgent.d.ts +0 -37
  236. package/cli/dist/LocalConversationalAgent.js +0 -58
  237. package/cli/dist/app.d.ts +0 -18
  238. package/cli/dist/app.d.ts.map +0 -1
  239. package/cli/dist/app.js +0 -14
  240. package/cli/dist/app.js.map +0 -1
  241. package/cli/dist/cli.d.ts +0 -3
  242. package/cli/dist/cli.d.ts.map +0 -1
  243. package/cli/dist/cli.js +0 -87
  244. package/cli/dist/cli.js.map +0 -1
  245. package/cli/dist/components/AppContainer.d.ts +0 -16
  246. package/cli/dist/components/AppContainer.js +0 -24
  247. package/cli/dist/components/AppScreens.d.ts +0 -2
  248. package/cli/dist/components/AppScreens.js +0 -259
  249. package/cli/dist/components/ChatScreen.d.ts +0 -21
  250. package/cli/dist/components/ChatScreen.d.ts.map +0 -1
  251. package/cli/dist/components/ChatScreen.js +0 -40
  252. package/cli/dist/components/ChatScreen.js.map +0 -1
  253. package/cli/dist/components/DebugLoadingScreen.d.ts +0 -5
  254. package/cli/dist/components/DebugLoadingScreen.js +0 -31
  255. package/cli/dist/components/LoadingScreen.d.ts +0 -3
  256. package/cli/dist/components/LoadingScreen.d.ts.map +0 -1
  257. package/cli/dist/components/LoadingScreen.js +0 -17
  258. package/cli/dist/components/LoadingScreen.js.map +0 -1
  259. package/cli/dist/components/LoadingScreenDebug.d.ts +0 -5
  260. package/cli/dist/components/LoadingScreenDebug.js +0 -27
  261. package/cli/dist/components/MCPConfigScreen.d.ts +0 -28
  262. package/cli/dist/components/MCPConfigScreen.d.ts.map +0 -1
  263. package/cli/dist/components/MCPConfigScreen.js +0 -186
  264. package/cli/dist/components/MCPConfigScreen.js.map +0 -1
  265. package/cli/dist/components/ScreenRouter.d.ts +0 -13
  266. package/cli/dist/components/ScreenRouter.d.ts.map +0 -1
  267. package/cli/dist/components/ScreenRouter.js +0 -23
  268. package/cli/dist/components/ScreenRouter.js.map +0 -1
  269. package/cli/dist/components/SetupScreen.d.ts +0 -16
  270. package/cli/dist/components/SetupScreen.d.ts.map +0 -1
  271. package/cli/dist/components/SetupScreen.js +0 -67
  272. package/cli/dist/components/SetupScreen.js.map +0 -1
  273. package/cli/dist/components/SingleLoadingScreen.d.ts +0 -5
  274. package/cli/dist/components/SingleLoadingScreen.js +0 -27
  275. package/cli/dist/components/StatusBadge.d.ts +0 -10
  276. package/cli/dist/components/StatusBadge.d.ts.map +0 -1
  277. package/cli/dist/components/StatusBadge.js +0 -24
  278. package/cli/dist/components/StatusBadge.js.map +0 -1
  279. package/cli/dist/components/TerminalWindow.d.ts +0 -9
  280. package/cli/dist/components/TerminalWindow.d.ts.map +0 -1
  281. package/cli/dist/components/TerminalWindow.js +0 -19
  282. package/cli/dist/components/TerminalWindow.js.map +0 -1
  283. package/cli/dist/components/WelcomeScreen.d.ts +0 -12
  284. package/cli/dist/components/WelcomeScreen.d.ts.map +0 -1
  285. package/cli/dist/components/WelcomeScreen.js +0 -47
  286. package/cli/dist/components/WelcomeScreen.js.map +0 -1
  287. package/cli/dist/context/AppContext.d.ts +0 -68
  288. package/cli/dist/context/AppContext.js +0 -363
  289. package/cli/dist/headless-runner.d.ts +0 -17
  290. package/cli/dist/headless-runner.d.ts.map +0 -1
  291. package/cli/dist/headless-runner.js +0 -128
  292. package/cli/dist/headless-runner.js.map +0 -1
  293. package/cli/dist/hooks/useInitializeAgent.d.ts +0 -19
  294. package/cli/dist/hooks/useInitializeAgent.d.ts.map +0 -1
  295. package/cli/dist/hooks/useInitializeAgent.js +0 -29
  296. package/cli/dist/hooks/useInitializeAgent.js.map +0 -1
  297. package/cli/dist/hooks/useStableState.d.ts +0 -38
  298. package/cli/dist/hooks/useStableState.d.ts.map +0 -1
  299. package/cli/dist/hooks/useStableState.js +0 -69
  300. package/cli/dist/hooks/useStableState.js.map +0 -1
  301. package/cli/dist/managers/AgentManager.d.ts +0 -58
  302. package/cli/dist/managers/AgentManager.d.ts.map +0 -1
  303. package/cli/dist/managers/AgentManager.js +0 -121
  304. package/cli/dist/managers/AgentManager.js.map +0 -1
  305. package/cli/dist/managers/ConfigManager.d.ts +0 -54
  306. package/cli/dist/managers/ConfigManager.d.ts.map +0 -1
  307. package/cli/dist/managers/ConfigManager.js +0 -188
  308. package/cli/dist/managers/ConfigManager.js.map +0 -1
  309. package/cli/dist/types.d.ts +0 -52
  310. package/cli/dist/types.d.ts.map +0 -1
  311. package/cli/dist/types.js +0 -34
  312. package/cli/dist/types.js.map +0 -1
@@ -1,84 +1,25 @@
1
- import { EntityFormat } from "./index26.js";
2
- import { HRLResolver, HederaMirrorNode } from "@hashgraphonline/standards-sdk";
3
- const _StringNormalizationConverter = class _StringNormalizationConverter {
1
+ import { EntityFormat } from "./index27.js";
2
+ class TopicIdToHrlConverter {
4
3
  constructor() {
5
- this.sourceFormat = EntityFormat.ANY;
4
+ this.sourceFormat = EntityFormat.TOPIC_ID;
6
5
  this.targetFormat = EntityFormat.HRL;
7
6
  }
7
+ /**
8
+ * Check if the source string is a valid topic ID
9
+ */
8
10
  canConvert(source, _context) {
9
- if (typeof source !== "string") {
10
- return false;
11
- }
12
- if (/^hcs:\/\/\d\/0\.0\.\d+$/i.test(source)) {
13
- return false;
14
- }
15
- if (/inscription-cdn\/(0\.0\.\d+)/i.test(source)) {
16
- return true;
17
- }
18
- if (/^content-ref:(0\.0\.\d+)$/i.test(source)) {
19
- return true;
20
- }
21
- if (/^0\.0\.\d+$/.test(source)) {
22
- const hasPreference = Boolean(
23
- _context?.toolPreferences?.inscription === "hrl" || _context?.toolPreferences?.topic === "hrl"
24
- );
25
- return hasPreference;
26
- }
27
- return false;
11
+ return /^0\.0\.\d+$/.test(source);
28
12
  }
29
- async convert(source, context) {
30
- const toolPrefs = context.toolPreferences;
31
- const fallbackStandard = toolPrefs?.hrlStandard || toolPrefs?.inscriptionHrlStandard || "1";
13
+ /**
14
+ * Convert topic ID to HRL format based on network type
15
+ */
16
+ async convert(topicId, context) {
32
17
  const networkType = context.networkType || "testnet";
33
- const resolver = new HRLResolver();
34
- const cdnMatch = source.match(/inscription-cdn\/(0\.0\.\d+)/i);
35
- if (cdnMatch && cdnMatch[1]) {
36
- try {
37
- const mirror = new HederaMirrorNode(networkType);
38
- mirror.configureRetry({
39
- maxRetries: 3,
40
- maxDelayMs: 1e3
41
- });
42
- const resolved = await mirror.getTopicInfo(cdnMatch[1]);
43
- const memo = resolved && resolved.memo || "";
44
- const match = memo.match(/^hcs-(\d+)/);
45
- const standard = match && match[1] ? match[1] : "1";
46
- return `hcs://${standard}/${cdnMatch[1]}`;
47
- } catch {
48
- return `hcs://${fallbackStandard}/${cdnMatch[1]}`;
49
- }
50
- }
51
- const contentRefMatch = source.match(/^content-ref:(0\.0\.\d+)$/i);
52
- if (contentRefMatch && contentRefMatch[1]) {
53
- try {
54
- const resolved = await resolver.resolve(contentRefMatch[1], {
55
- network: networkType
56
- });
57
- const parsed = resolver.parseHRL(`hcs://1/${resolved.topicId}`);
58
- const std = parsed?.standard || fallbackStandard;
59
- return `hcs://${std}/${resolved.topicId}`;
60
- } catch {
61
- return `hcs://${fallbackStandard}/${contentRefMatch[1]}`;
62
- }
63
- }
64
- if (/^0\.0\.\d+$/.test(source)) {
65
- try {
66
- const resolved = await resolver.resolve(source, {
67
- network: networkType
68
- });
69
- const parsed = resolver.parseHRL(`hcs://1/${resolved.topicId}`);
70
- const std = parsed?.standard || fallbackStandard;
71
- return `hcs://${std}/${resolved.topicId}`;
72
- } catch {
73
- return `hcs://${fallbackStandard}/${source}`;
74
- }
75
- }
76
- return source;
18
+ const networkId = networkType === "mainnet" ? "0" : "1";
19
+ return `hcs://${networkId}/${topicId}`;
77
20
  }
78
- };
79
- _StringNormalizationConverter.standardCache = /* @__PURE__ */ new Map();
80
- let StringNormalizationConverter = _StringNormalizationConverter;
21
+ }
81
22
  export {
82
- StringNormalizationConverter
23
+ TopicIdToHrlConverter
83
24
  };
84
25
  //# sourceMappingURL=index28.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index28.js","sources":["../../src/services/formatters/converters/string-normalization-converter.ts"],"sourcesContent":["import {\n EntityFormat,\n type FormatConverter,\n type ConversionContext,\n} from '../types';\nimport {\n HederaMirrorNode,\n HRLResolver,\n type NetworkType,\n} from '@hashgraphonline/standards-sdk';\n\n/**\n * Generic converter that normalizes various string entity references (cdn urls, content-ref, raw topic id)\n * into canonical HRL. It declares source ANY -> HRL and internally short-circuits if unsupported.\n */\nexport class StringNormalizationConverter\n implements FormatConverter<string, string>\n{\n sourceFormat = EntityFormat.ANY;\n targetFormat = EntityFormat.HRL;\n\n private static standardCache: Map<string, string> = new Map();\n\n canConvert(source: string, _context: ConversionContext): boolean {\n if (typeof source !== 'string') {\n return false;\n }\n if (/^hcs:\\/\\/\\d\\/0\\.0\\.\\d+$/i.test(source)) {\n return false;\n }\n if (/inscription-cdn\\/(0\\.0\\.\\d+)/i.test(source)) {\n return true;\n }\n if (/^content-ref:(0\\.0\\.\\d+)$/i.test(source)) {\n return true;\n }\n if (/^0\\.0\\.\\d+$/.test(source)) {\n const hasPreference = Boolean(\n (_context as unknown as { toolPreferences?: Record<string, string> })\n ?.toolPreferences?.inscription === 'hrl' ||\n (_context as unknown as { toolPreferences?: Record<string, string> })\n ?.toolPreferences?.topic === 'hrl'\n );\n return hasPreference;\n }\n return false;\n }\n\n async convert(source: string, context: ConversionContext): Promise<string> {\n const toolPrefs = (\n context as unknown as { toolPreferences?: Record<string, string> }\n ).toolPreferences;\n const fallbackStandard =\n toolPrefs?.hrlStandard || toolPrefs?.inscriptionHrlStandard || '1';\n const networkType = (context.networkType as string) || 'testnet';\n\n const resolver = new HRLResolver();\n\n const cdnMatch = source.match(/inscription-cdn\\/(0\\.0\\.\\d+)/i);\n if (cdnMatch && cdnMatch[1]) {\n try {\n const mirror = new HederaMirrorNode(networkType as NetworkType);\n mirror.configureRetry({\n maxRetries: 3,\n maxDelayMs: 1000,\n });\n const resolved = await mirror.getTopicInfo(cdnMatch[1]);\n const memo = (resolved && (resolved as { memo?: string }).memo) || '';\n const match = memo.match(/^hcs-(\\d+)/);\n const standard = match && match[1] ? match[1] : '1';\n return `hcs://${standard}/${cdnMatch[1]}`;\n } catch {\n return `hcs://${fallbackStandard}/${cdnMatch[1]}`;\n }\n }\n\n const contentRefMatch = source.match(/^content-ref:(0\\.0\\.\\d+)$/i);\n if (contentRefMatch && contentRefMatch[1]) {\n try {\n const resolved = await resolver.resolve(contentRefMatch[1], {\n network: networkType as NetworkType,\n });\n const parsed = resolver.parseHRL(`hcs://1/${resolved.topicId}`);\n const std = parsed?.standard || fallbackStandard;\n return `hcs://${std}/${resolved.topicId}`;\n } catch {\n return `hcs://${fallbackStandard}/${contentRefMatch[1]}`;\n }\n }\n\n if (/^0\\.0\\.\\d+$/.test(source)) {\n try {\n const resolved = await resolver.resolve(source, {\n network: networkType as NetworkType,\n });\n const parsed = resolver.parseHRL(`hcs://1/${resolved.topicId}`);\n const std = parsed?.standard || fallbackStandard;\n return `hcs://${std}/${resolved.topicId}`;\n } catch {\n return `hcs://${fallbackStandard}/${source}`;\n }\n }\n\n return source;\n }\n}\n"],"names":[],"mappings":";;AAeO,MAAM,gCAAN,MAAM,8BAEb;AAAA,EAFO,cAAA;AAGL,SAAA,eAAe,aAAa;AAC5B,SAAA,eAAe,aAAa;AAAA,EAAA;AAAA,EAI5B,WAAW,QAAgB,UAAsC;AAC/D,QAAI,OAAO,WAAW,UAAU;AAC9B,aAAO;AAAA,IACT;AACA,QAAI,2BAA2B,KAAK,MAAM,GAAG;AAC3C,aAAO;AAAA,IACT;AACA,QAAI,gCAAgC,KAAK,MAAM,GAAG;AAChD,aAAO;AAAA,IACT;AACA,QAAI,6BAA6B,KAAK,MAAM,GAAG;AAC7C,aAAO;AAAA,IACT;AACA,QAAI,cAAc,KAAK,MAAM,GAAG;AAC9B,YAAM,gBAAgB;AAAA,QACnB,UACG,iBAAiB,gBAAgB,SAClC,UACG,iBAAiB,UAAU;AAAA,MAAA;AAEnC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,QAAgB,SAA6C;AACzE,UAAM,YACJ,QACA;AACF,UAAM,mBACJ,WAAW,eAAe,WAAW,0BAA0B;AACjE,UAAM,cAAe,QAAQ,eAA0B;AAEvD,UAAM,WAAW,IAAI,YAAA;AAErB,UAAM,WAAW,OAAO,MAAM,+BAA+B;AAC7D,QAAI,YAAY,SAAS,CAAC,GAAG;AAC3B,UAAI;AACF,cAAM,SAAS,IAAI,iBAAiB,WAA0B;AAC9D,eAAO,eAAe;AAAA,UACpB,YAAY;AAAA,UACZ,YAAY;AAAA,QAAA,CACb;AACD,cAAM,WAAW,MAAM,OAAO,aAAa,SAAS,CAAC,CAAC;AACtD,cAAM,OAAQ,YAAa,SAA+B,QAAS;AACnE,cAAM,QAAQ,KAAK,MAAM,YAAY;AACrC,cAAM,WAAW,SAAS,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI;AAChD,eAAO,SAAS,QAAQ,IAAI,SAAS,CAAC,CAAC;AAAA,MACzC,QAAQ;AACN,eAAO,SAAS,gBAAgB,IAAI,SAAS,CAAC,CAAC;AAAA,MACjD;AAAA,IACF;AAEA,UAAM,kBAAkB,OAAO,MAAM,4BAA4B;AACjE,QAAI,mBAAmB,gBAAgB,CAAC,GAAG;AACzC,UAAI;AACF,cAAM,WAAW,MAAM,SAAS,QAAQ,gBAAgB,CAAC,GAAG;AAAA,UAC1D,SAAS;AAAA,QAAA,CACV;AACD,cAAM,SAAS,SAAS,SAAS,WAAW,SAAS,OAAO,EAAE;AAC9D,cAAM,MAAM,QAAQ,YAAY;AAChC,eAAO,SAAS,GAAG,IAAI,SAAS,OAAO;AAAA,MACzC,QAAQ;AACN,eAAO,SAAS,gBAAgB,IAAI,gBAAgB,CAAC,CAAC;AAAA,MACxD;AAAA,IACF;AAEA,QAAI,cAAc,KAAK,MAAM,GAAG;AAC9B,UAAI;AACF,cAAM,WAAW,MAAM,SAAS,QAAQ,QAAQ;AAAA,UAC9C,SAAS;AAAA,QAAA,CACV;AACD,cAAM,SAAS,SAAS,SAAS,WAAW,SAAS,OAAO,EAAE;AAC9D,cAAM,MAAM,QAAQ,YAAY;AAChC,eAAO,SAAS,GAAG,IAAI,SAAS,OAAO;AAAA,MACzC,QAAQ;AACN,eAAO,SAAS,gBAAgB,IAAI,MAAM;AAAA,MAC5C;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AApFE,8BAAe,oCAAyC,IAAA;AANnD,IAAM,+BAAN;"}
1
+ {"version":3,"file":"index28.js","sources":["../../src/services/formatters/converters/topic-id-to-hrl-converter.ts"],"sourcesContent":["import { EntityFormat, FormatConverter, ConversionContext } from '../types';\n\n/**\n * Converts Hedera topic IDs to HRL format for consensus service messages\n */\nexport class TopicIdToHrlConverter implements FormatConverter<string, string> {\n sourceFormat = EntityFormat.TOPIC_ID;\n targetFormat = EntityFormat.HRL;\n\n /**\n * Check if the source string is a valid topic ID\n */\n canConvert(source: string, _context: ConversionContext): boolean {\n return /^0\\.0\\.\\d+$/.test(source);\n }\n\n /**\n * Convert topic ID to HRL format based on network type\n */\n async convert(topicId: string, context: ConversionContext): Promise<string> {\n const networkType = context.networkType || 'testnet';\n const networkId = networkType === 'mainnet' ? '0' : '1';\n return `hcs://${networkId}/${topicId}`;\n }\n}\n"],"names":[],"mappings":";AAKO,MAAM,sBAAiE;AAAA,EAAvE,cAAA;AACL,SAAA,eAAe,aAAa;AAC5B,SAAA,eAAe,aAAa;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAK5B,WAAW,QAAgB,UAAsC;AAC/D,WAAO,cAAc,KAAK,MAAM;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,SAAiB,SAA6C;AAC1E,UAAM,cAAc,QAAQ,eAAe;AAC3C,UAAM,YAAY,gBAAgB,YAAY,MAAM;AACpD,WAAO,SAAS,SAAS,IAAI,OAAO;AAAA,EACtC;AACF;"}
@@ -1,309 +1,84 @@
1
- import { Logger } from "@hashgraphonline/standards-sdk";
2
- import { EntityFormat } from "./index26.js";
3
- import "./index28.js";
4
- class ParameterService {
5
- constructor(formatConverterRegistry, networkType) {
6
- this.logger = new Logger({ module: "ParameterService" });
7
- this.formatConverterRegistry = formatConverterRegistry;
8
- this.networkType = networkType;
1
+ import { EntityFormat } from "./index27.js";
2
+ import { HRLResolver, HederaMirrorNode } from "@hashgraphonline/standards-sdk";
3
+ const _StringNormalizationConverter = class _StringNormalizationConverter {
4
+ constructor() {
5
+ this.sourceFormat = EntityFormat.ANY;
6
+ this.targetFormat = EntityFormat.HRL;
9
7
  }
10
- /**
11
- * Unified preprocessing entrypoint (DRY):
12
- * - Optional AI-driven resolution via provided entityResolver
13
- * - Deterministic post-pass for safe format enforcement
14
- */
15
- async preprocessParameters(toolName, parameters, entities = [], options) {
16
- const sessionId = options?.sessionId;
17
- const entityResolver = options?.entityResolver;
18
- const preferences = options?.preferences;
19
- let working = { ...parameters };
20
- if (entityResolver && entities.length > 0) {
21
- try {
22
- this.logger.info("AI-driven preprocessing phase", {
23
- toolName,
24
- entityCount: entities.length,
25
- sessionId
26
- });
27
- const aiProcessed = { ...working };
28
- for (const [paramName, paramValue] of Object.entries(working)) {
29
- if (typeof paramValue === "string") {
30
- const resolved = await entityResolver.resolveReferences(
31
- paramValue,
32
- entities
33
- );
34
- const converted = await this.convertParameterEntities(
35
- resolved,
36
- entities,
37
- preferences
38
- );
39
- aiProcessed[paramName] = converted;
40
- } else if (Array.isArray(paramValue)) {
41
- const out = [];
42
- for (const item of paramValue) {
43
- if (typeof item === "string") {
44
- const resolved = await entityResolver.resolveReferences(
45
- item,
46
- entities
47
- );
48
- const converted = await this.convertParameterEntities(
49
- resolved,
50
- entities,
51
- preferences
52
- );
53
- out.push(converted);
54
- } else {
55
- out.push(item);
56
- }
57
- }
58
- aiProcessed[paramName] = out;
59
- }
60
- }
61
- working = aiProcessed;
62
- } catch (error) {
63
- const message = error instanceof Error ? error.message : "unknown";
64
- this.logger.warn(
65
- "AI phase failed; continuing with deterministic pass",
66
- {
67
- toolName,
68
- error: message
69
- }
70
- );
71
- }
72
- }
73
- try {
74
- const processed = { ...working };
75
- for (const [paramName, paramValue] of Object.entries(working)) {
76
- if (typeof paramValue === "string") {
77
- const converted = await this.convertParameterEntities(
78
- paramValue,
79
- entities,
80
- preferences
81
- );
82
- processed[paramName] = converted;
83
- } else if (Array.isArray(paramValue)) {
84
- const out = [];
85
- for (const item of paramValue) {
86
- if (typeof item === "string") {
87
- const converted = await this.convertParameterEntities(
88
- item,
89
- entities,
90
- preferences
91
- );
92
- out.push(converted);
93
- } else {
94
- out.push(item);
95
- }
96
- }
97
- processed[paramName] = out;
98
- }
99
- }
100
- working = processed;
101
- } catch (e) {
102
- this.logger.warn("Deterministic post-pass failed", {
103
- toolName,
104
- error: e instanceof Error ? e.message : "unknown"
105
- });
8
+ canConvert(source, _context) {
9
+ if (typeof source !== "string") {
10
+ return false;
106
11
  }
107
- return working;
108
- }
109
- /**
110
- * Attach unified preprocessing callback directly to the agent.
111
- */
112
- attachToAgent(agent, deps) {
113
- const getSessionId = deps?.getSessionId ?? (() => null);
114
- const getEntities = deps?.getEntities ?? (async () => []);
115
- const entityResolver = deps?.entityResolver;
116
- const maybe = agent;
117
- const attach = (target) => {
118
- const t = target;
119
- if (typeof t.setParameterPreprocessingCallback === "function") {
120
- t.setParameterPreprocessingCallback(
121
- async (toolName, parameters) => {
122
- const sessionId = getSessionId();
123
- const entities = await getEntities(sessionId);
124
- const opts = {};
125
- if (entityResolver) {
126
- opts.entityResolver = entityResolver;
127
- }
128
- if (sessionId) {
129
- opts.sessionId = sessionId;
130
- }
131
- return this.preprocessParameters(toolName, parameters, entities, opts);
132
- }
133
- );
134
- this.logger.info("Parameter preprocessing callback attached");
135
- return true;
136
- }
12
+ if (/^hcs:\/\/\d\/0\.0\.\d+$/i.test(source)) {
137
13
  return false;
138
- };
139
- if (!attach(agent) && typeof maybe.getAgent === "function") {
140
- const underlying = maybe.getAgent();
141
- if (underlying) {
142
- void attach(underlying);
143
- }
144
14
  }
145
- }
146
- /**
147
- * Preprocess tool parameters by applying format conversions based on tool's entity resolution preferences
148
- */
149
- async preprocessToolParameters(toolName, parameters, entities, sessionId) {
150
- try {
151
- if (!entities || entities.length === 0) {
152
- this.logger.info(
153
- "Tool parameter preprocessing skipped - no entities provided:",
154
- {
155
- toolName,
156
- originalParams: Object.keys(parameters)
157
- }
158
- );
159
- return parameters;
160
- }
161
- const processedParameters = { ...parameters };
162
- const preferences = void 0;
163
- let hasChanges = false;
164
- for (const [paramName, paramValue] of Object.entries(parameters)) {
165
- if (typeof paramValue === "string") {
166
- const convertedValue = await this.convertParameterEntities(
167
- paramValue,
168
- entities,
169
- preferences
170
- );
171
- if (convertedValue !== paramValue) {
172
- processedParameters[paramName] = convertedValue;
173
- hasChanges = true;
174
- this.logger.info("Parameter entity conversion applied:", {
175
- toolName,
176
- paramName,
177
- original: paramValue,
178
- converted: convertedValue
179
- });
180
- }
181
- } else if (Array.isArray(paramValue)) {
182
- const originalArray = paramValue;
183
- const convertedArray = [];
184
- let arrayChanged = false;
185
- for (const item of originalArray) {
186
- if (typeof item === "string") {
187
- const convertedItem = await this.convertParameterEntities(
188
- item,
189
- entities,
190
- preferences
191
- );
192
- convertedArray.push(convertedItem);
193
- if (convertedItem !== item) {
194
- arrayChanged = true;
195
- this.logger.info("Parameter array item conversion applied:", {
196
- toolName,
197
- paramName,
198
- original: item,
199
- converted: convertedItem
200
- });
201
- }
202
- } else {
203
- convertedArray.push(item);
204
- }
205
- }
206
- if (arrayChanged) {
207
- processedParameters[paramName] = convertedArray;
208
- hasChanges = true;
209
- }
210
- }
211
- }
212
- this.logger.info("Tool parameter preprocessing completed:", {
213
- toolName,
214
- originalParams: Object.keys(parameters),
215
- hasChanges,
216
- sessionId
217
- });
218
- return processedParameters;
219
- } catch (error) {
220
- this.logger.warn("Tool parameter preprocessing failed:", {
221
- toolName,
222
- error: error instanceof Error ? error.message : "Unknown error"
223
- });
224
- return parameters;
15
+ if (/inscription-cdn\/(0\.0\.\d+)/i.test(source)) {
16
+ return true;
225
17
  }
18
+ if (/^content-ref:(0\.0\.\d+)$/i.test(source)) {
19
+ return true;
20
+ }
21
+ if (/^0\.0\.\d+$/.test(source)) {
22
+ const hasPreference = Boolean(
23
+ _context?.toolPreferences?.inscription === "hrl" || _context?.toolPreferences?.topic === "hrl"
24
+ );
25
+ return hasPreference;
26
+ }
27
+ return false;
226
28
  }
227
- /**
228
- * Convert entity references in a parameter value based on tool preferences
229
- */
230
- async convertParameterEntities(parameterValue, entities, preferences) {
231
- let convertedValue = parameterValue;
232
- for (const entity of entities) {
233
- const containsEntityId = convertedValue.includes(entity.entityId);
234
- const containsEntityName = convertedValue.includes(entity.entityName);
235
- if (!containsEntityId && !containsEntityName) {
236
- continue;
29
+ async convert(source, context) {
30
+ const toolPrefs = context.toolPreferences;
31
+ const fallbackStandard = toolPrefs?.hrlStandard || toolPrefs?.inscriptionHrlStandard || "1";
32
+ const networkType = context.networkType || "testnet";
33
+ const resolver = new HRLResolver();
34
+ const cdnMatch = source.match(/inscription-cdn\/(0\.0\.\d+)/i);
35
+ if (cdnMatch && cdnMatch[1]) {
36
+ try {
37
+ const mirror = new HederaMirrorNode(networkType);
38
+ mirror.configureRetry({
39
+ maxRetries: 3,
40
+ maxDelayMs: 1e3
41
+ });
42
+ const resolved = await mirror.getTopicInfo(cdnMatch[1]);
43
+ const memo = resolved && resolved.memo || "";
44
+ const match = memo.match(/^hcs-(\d+)/);
45
+ const standard = match && match[1] ? match[1] : "1";
46
+ return `hcs://${standard}/${cdnMatch[1]}`;
47
+ } catch {
48
+ return `hcs://${fallbackStandard}/${cdnMatch[1]}`;
237
49
  }
238
- let targetFormat = null;
239
- if (entity.entityType === EntityFormat.TOPIC_ID) {
240
- if (preferences?.inscription === "hrl" || preferences?.topic === "hrl") {
241
- targetFormat = EntityFormat.HRL;
242
- } else if (preferences?.inscription === "topicId" || preferences?.topic === "topicId") {
243
- targetFormat = EntityFormat.TOPIC_ID;
244
- }
245
- } else if (entity.entityType === EntityFormat.TOKEN_ID) {
246
- if (preferences?.token === "tokenId") {
247
- targetFormat = EntityFormat.TOKEN_ID;
248
- } else if (preferences?.token === "symbol") {
249
- targetFormat = EntityFormat.SYMBOL;
250
- }
251
- } else if (entity.entityType === EntityFormat.ACCOUNT_ID) {
252
- if (preferences?.account === "accountId" || preferences?.supplyKey === "accountId" || preferences?.adminKey === "accountId") {
253
- targetFormat = EntityFormat.ACCOUNT_ID;
254
- } else if (preferences?.account === "alias") {
255
- targetFormat = EntityFormat.ALIAS;
256
- }
50
+ }
51
+ const contentRefMatch = source.match(/^content-ref:(0\.0\.\d+)$/i);
52
+ if (contentRefMatch && contentRefMatch[1]) {
53
+ try {
54
+ const resolved = await resolver.resolve(contentRefMatch[1], {
55
+ network: networkType
56
+ });
57
+ const parsed = resolver.parseHRL(`hcs://1/${resolved.topicId}`);
58
+ const std = parsed?.standard || fallbackStandard;
59
+ return `hcs://${std}/${resolved.topicId}`;
60
+ } catch {
61
+ return `hcs://${fallbackStandard}/${contentRefMatch[1]}`;
257
62
  }
258
- if (targetFormat) {
259
- try {
260
- const context = {
261
- networkType: this.networkType,
262
- sessionId: "unknown"
263
- };
264
- if (preferences) {
265
- context.toolPreferences = preferences;
266
- }
267
- const convertedEntityValue = await this.formatConverterRegistry.convertEntity(
268
- entity.entityId,
269
- targetFormat,
270
- context
271
- );
272
- if (containsEntityId) {
273
- convertedValue = convertedValue.replace(
274
- new RegExp(`\\b${entity.entityId.replace(/\./g, "\\.")}\\b`, "g"),
275
- convertedEntityValue
276
- );
277
- }
278
- if (containsEntityName) {
279
- convertedValue = convertedValue.replace(
280
- new RegExp(
281
- `\\b${entity.entityName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`,
282
- "g"
283
- ),
284
- convertedEntityValue
285
- );
286
- }
287
- this.logger.info("Applied format conversion to parameter:", {
288
- entityId: entity.entityId,
289
- entityType: entity.entityType,
290
- targetFormat,
291
- convertedValue: convertedEntityValue,
292
- parameterValue: convertedValue
293
- });
294
- } catch (error) {
295
- this.logger.warn("Format conversion failed for parameter:", {
296
- entityId: entity.entityId,
297
- targetFormat,
298
- error: error instanceof Error ? error.message : "Unknown error"
299
- });
300
- }
63
+ }
64
+ if (/^0\.0\.\d+$/.test(source)) {
65
+ try {
66
+ const resolved = await resolver.resolve(source, {
67
+ network: networkType
68
+ });
69
+ const parsed = resolver.parseHRL(`hcs://1/${resolved.topicId}`);
70
+ const std = parsed?.standard || fallbackStandard;
71
+ return `hcs://${std}/${resolved.topicId}`;
72
+ } catch {
73
+ return `hcs://${fallbackStandard}/${source}`;
301
74
  }
302
75
  }
303
- return convertedValue;
76
+ return source;
304
77
  }
305
- }
78
+ };
79
+ _StringNormalizationConverter.standardCache = /* @__PURE__ */ new Map();
80
+ let StringNormalizationConverter = _StringNormalizationConverter;
306
81
  export {
307
- ParameterService
82
+ StringNormalizationConverter
308
83
  };
309
84
  //# sourceMappingURL=index29.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index29.js","sources":["../../src/services/parameter-service.ts"],"sourcesContent":["import { Logger, type NetworkType } from '@hashgraphonline/standards-sdk';\nimport { EntityFormat, FormatConverterRegistry } from './formatters';\nimport type { EntityAssociation } from '../memory/smart-memory-manager';\n\n/**\n * Service for processing tool parameters and applying entity format conversions\n */\nexport class ParameterService {\n private logger: Logger;\n private formatConverterRegistry: FormatConverterRegistry;\n private networkType: NetworkType;\n\n constructor(\n formatConverterRegistry: FormatConverterRegistry,\n networkType: NetworkType\n ) {\n this.logger = new Logger({ module: 'ParameterService' });\n this.formatConverterRegistry = formatConverterRegistry;\n this.networkType = networkType;\n }\n\n /**\n * Unified preprocessing entrypoint (DRY):\n * - Optional AI-driven resolution via provided entityResolver\n * - Deterministic post-pass for safe format enforcement\n */\n async preprocessParameters(\n toolName: string,\n parameters: Record<string, unknown>,\n entities: EntityAssociation[] = [],\n options?: {\n entityResolver?: {\n resolveReferences: (\n message: string,\n entities: EntityAssociation[]\n ) => Promise<string>;\n };\n sessionId?: string;\n preferences?: Record<string, string>;\n }\n ): Promise<Record<string, unknown>> {\n const sessionId = options?.sessionId;\n const entityResolver = options?.entityResolver;\n const preferences = options?.preferences;\n\n let working: Record<string, unknown> = { ...parameters };\n\n if (entityResolver && entities.length > 0) {\n try {\n this.logger.info('AI-driven preprocessing phase', {\n toolName,\n entityCount: entities.length,\n sessionId,\n });\n\n const aiProcessed: Record<string, unknown> = { ...working };\n for (const [paramName, paramValue] of Object.entries(working)) {\n if (typeof paramValue === 'string') {\n const resolved = await entityResolver.resolveReferences(\n paramValue,\n entities\n );\n const converted = await this.convertParameterEntities(\n resolved,\n entities,\n preferences\n );\n aiProcessed[paramName] = converted;\n } else if (Array.isArray(paramValue)) {\n const out: unknown[] = [];\n for (const item of paramValue) {\n if (typeof item === 'string') {\n const resolved = await entityResolver.resolveReferences(\n item,\n entities\n );\n const converted = await this.convertParameterEntities(\n resolved,\n entities,\n preferences\n );\n out.push(converted);\n } else {\n out.push(item);\n }\n }\n aiProcessed[paramName] = out;\n }\n }\n working = aiProcessed;\n } catch (error) {\n const message = error instanceof Error ? error.message : 'unknown';\n this.logger.warn(\n 'AI phase failed; continuing with deterministic pass',\n {\n toolName,\n error: message,\n }\n );\n }\n }\n\n try {\n const processed: Record<string, unknown> = { ...working };\n for (const [paramName, paramValue] of Object.entries(working)) {\n if (typeof paramValue === 'string') {\n const converted = await this.convertParameterEntities(\n paramValue,\n entities,\n preferences\n );\n processed[paramName] = converted;\n } else if (Array.isArray(paramValue)) {\n const out: unknown[] = [];\n for (const item of paramValue) {\n if (typeof item === 'string') {\n const converted = await this.convertParameterEntities(\n item,\n entities,\n preferences\n );\n out.push(converted);\n } else {\n out.push(item);\n }\n }\n processed[paramName] = out;\n }\n }\n working = processed;\n } catch (e) {\n this.logger.warn('Deterministic post-pass failed', {\n toolName,\n error: e instanceof Error ? e.message : 'unknown',\n });\n }\n\n return working;\n }\n\n /**\n * Attach unified preprocessing callback directly to the agent.\n */\n attachToAgent(\n agent: unknown,\n deps?: {\n getSessionId?: () => string | null;\n getEntities?: (sessionId: string | null) => Promise<EntityAssociation[]>;\n entityResolver?: {\n resolveReferences: (\n message: string,\n entities: EntityAssociation[]\n ) => Promise<string>;\n };\n }\n ): void {\n const getSessionId = deps?.getSessionId ?? (() => null);\n const getEntities =\n deps?.getEntities ?? (async () => [] as EntityAssociation[]);\n const entityResolver = deps?.entityResolver;\n\n const maybe = agent as {\n setParameterPreprocessingCallback?: (\n callback: (\n toolName: string,\n parameters: Record<string, unknown>,\n toolContext?: {\n entityResolutionPreferences?: Record<string, string>;\n }\n ) => Promise<Record<string, unknown>>\n ) => void;\n getAgent?: () => unknown;\n };\n\n const attach = (target: unknown): boolean => {\n const t = target as {\n setParameterPreprocessingCallback?: (\n callback: (\n toolName: string,\n parameters: Record<string, unknown>,\n toolContext?: {\n entityResolutionPreferences?: Record<string, string>;\n }\n ) => Promise<Record<string, unknown>>\n ) => void;\n };\n if (typeof t.setParameterPreprocessingCallback === 'function') {\n t.setParameterPreprocessingCallback(\n async (\n toolName: string,\n parameters: Record<string, unknown>\n ): Promise<Record<string, unknown>> => {\n const sessionId = getSessionId();\n const entities = await getEntities(sessionId);\n const opts: {\n entityResolver?: {\n resolveReferences: (\n message: string,\n entities: EntityAssociation[]\n ) => Promise<string>;\n };\n sessionId?: string;\n preferences?: Record<string, string>;\n } = {};\n if (entityResolver) {\n opts.entityResolver = entityResolver;\n }\n if (sessionId) {\n opts.sessionId = sessionId;\n }\n return this.preprocessParameters(toolName, parameters, entities, opts);\n }\n );\n this.logger.info('Parameter preprocessing callback attached');\n return true;\n }\n return false;\n };\n\n if (!attach(agent) && typeof maybe.getAgent === 'function') {\n const underlying = maybe.getAgent();\n if (underlying) {\n void attach(underlying);\n }\n }\n }\n\n /**\n * Preprocess tool parameters by applying format conversions based on tool's entity resolution preferences\n */\n async preprocessToolParameters(\n toolName: string,\n parameters: Record<string, unknown>,\n entities?: EntityAssociation[],\n sessionId?: string\n ): Promise<Record<string, unknown>> {\n try {\n if (!entities || entities.length === 0) {\n this.logger.info(\n 'Tool parameter preprocessing skipped - no entities provided:',\n {\n toolName,\n originalParams: Object.keys(parameters),\n }\n );\n return parameters;\n }\n\n const processedParameters = { ...parameters };\n const preferences: Record<string, string> | undefined = undefined;\n let hasChanges = false;\n\n for (const [paramName, paramValue] of Object.entries(parameters)) {\n if (typeof paramValue === 'string') {\n const convertedValue = await this.convertParameterEntities(\n paramValue,\n entities,\n preferences\n );\n\n if (convertedValue !== paramValue) {\n processedParameters[paramName] = convertedValue;\n hasChanges = true;\n\n this.logger.info('Parameter entity conversion applied:', {\n toolName,\n paramName,\n original: paramValue,\n converted: convertedValue,\n });\n }\n } else if (Array.isArray(paramValue)) {\n const originalArray = paramValue as unknown[];\n const convertedArray: unknown[] = [];\n let arrayChanged = false;\n\n for (const item of originalArray) {\n if (typeof item === 'string') {\n const convertedItem = await this.convertParameterEntities(\n item,\n entities,\n preferences\n );\n\n convertedArray.push(convertedItem);\n\n if (convertedItem !== item) {\n arrayChanged = true;\n this.logger.info('Parameter array item conversion applied:', {\n toolName,\n paramName,\n original: item,\n converted: convertedItem,\n });\n }\n } else {\n convertedArray.push(item);\n }\n }\n\n if (arrayChanged) {\n processedParameters[paramName] = convertedArray;\n hasChanges = true;\n }\n }\n }\n\n this.logger.info('Tool parameter preprocessing completed:', {\n toolName,\n originalParams: Object.keys(parameters),\n hasChanges,\n sessionId,\n });\n\n return processedParameters;\n } catch (error) {\n this.logger.warn('Tool parameter preprocessing failed:', {\n toolName,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n return parameters;\n }\n }\n\n /**\n * Convert entity references in a parameter value based on tool preferences\n */\n async convertParameterEntities(\n parameterValue: string,\n entities: EntityAssociation[],\n preferences?: Record<string, string>\n ): Promise<string> {\n let convertedValue = parameterValue;\n\n for (const entity of entities) {\n const containsEntityId = convertedValue.includes(entity.entityId);\n const containsEntityName = convertedValue.includes(entity.entityName);\n\n if (!containsEntityId && !containsEntityName) {\n continue;\n }\n\n let targetFormat: EntityFormat | null = null;\n\n if (entity.entityType === EntityFormat.TOPIC_ID) {\n if (\n preferences?.inscription === 'hrl' ||\n preferences?.topic === 'hrl'\n ) {\n targetFormat = EntityFormat.HRL;\n } else if (\n preferences?.inscription === 'topicId' ||\n preferences?.topic === 'topicId'\n ) {\n targetFormat = EntityFormat.TOPIC_ID;\n }\n } else if (entity.entityType === EntityFormat.TOKEN_ID) {\n if (preferences?.token === 'tokenId') {\n targetFormat = EntityFormat.TOKEN_ID;\n } else if (preferences?.token === 'symbol') {\n targetFormat = EntityFormat.SYMBOL;\n }\n } else if (entity.entityType === EntityFormat.ACCOUNT_ID) {\n if (\n preferences?.account === 'accountId' ||\n preferences?.supplyKey === 'accountId' ||\n preferences?.adminKey === 'accountId'\n ) {\n targetFormat = EntityFormat.ACCOUNT_ID;\n } else if (preferences?.account === 'alias') {\n targetFormat = EntityFormat.ALIAS;\n }\n }\n\n if (targetFormat) {\n try {\n const context: {\n networkType?: string | NetworkType;\n sessionId?: string;\n toolPreferences?: Record<string, string>;\n } = {\n networkType: this.networkType,\n sessionId: 'unknown',\n };\n if (preferences) {\n context.toolPreferences = preferences;\n }\n const convertedEntityValue = await this.formatConverterRegistry.convertEntity(\n entity.entityId,\n targetFormat,\n context as never\n );\n\n if (containsEntityId) {\n convertedValue = convertedValue.replace(\n new RegExp(`\\\\b${entity.entityId.replace(/\\./g, '\\\\.')}\\\\b`, 'g'),\n convertedEntityValue\n );\n }\n\n if (containsEntityName) {\n convertedValue = convertedValue.replace(\n new RegExp(\n `\\\\b${entity.entityName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\b`,\n 'g'\n ),\n convertedEntityValue\n );\n }\n\n this.logger.info('Applied format conversion to parameter:', {\n entityId: entity.entityId,\n entityType: entity.entityType,\n targetFormat,\n convertedValue: convertedEntityValue,\n parameterValue: convertedValue,\n });\n } catch (error) {\n this.logger.warn('Format conversion failed for parameter:', {\n entityId: entity.entityId,\n targetFormat,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n }\n }\n }\n\n return convertedValue;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index29.js","sources":["../../src/services/formatters/converters/string-normalization-converter.ts"],"sourcesContent":["import {\n EntityFormat,\n type FormatConverter,\n type ConversionContext,\n} from '../types';\nimport {\n HederaMirrorNode,\n HRLResolver,\n type NetworkType,\n} from '@hashgraphonline/standards-sdk';\n\n/**\n * Generic converter that normalizes various string entity references (cdn urls, content-ref, raw topic id)\n * into canonical HRL. It declares source ANY -> HRL and internally short-circuits if unsupported.\n */\nexport class StringNormalizationConverter\n implements FormatConverter<string, string>\n{\n sourceFormat = EntityFormat.ANY;\n targetFormat = EntityFormat.HRL;\n\n private static standardCache: Map<string, string> = new Map();\n\n canConvert(source: string, _context: ConversionContext): boolean {\n if (typeof source !== 'string') {\n return false;\n }\n if (/^hcs:\\/\\/\\d\\/0\\.0\\.\\d+$/i.test(source)) {\n return false;\n }\n if (/inscription-cdn\\/(0\\.0\\.\\d+)/i.test(source)) {\n return true;\n }\n if (/^content-ref:(0\\.0\\.\\d+)$/i.test(source)) {\n return true;\n }\n if (/^0\\.0\\.\\d+$/.test(source)) {\n const hasPreference = Boolean(\n (_context as unknown as { toolPreferences?: Record<string, string> })\n ?.toolPreferences?.inscription === 'hrl' ||\n (_context as unknown as { toolPreferences?: Record<string, string> })\n ?.toolPreferences?.topic === 'hrl'\n );\n return hasPreference;\n }\n return false;\n }\n\n async convert(source: string, context: ConversionContext): Promise<string> {\n const toolPrefs = (\n context as unknown as { toolPreferences?: Record<string, string> }\n ).toolPreferences;\n const fallbackStandard =\n toolPrefs?.hrlStandard || toolPrefs?.inscriptionHrlStandard || '1';\n const networkType = (context.networkType as string) || 'testnet';\n\n const resolver = new HRLResolver();\n\n const cdnMatch = source.match(/inscription-cdn\\/(0\\.0\\.\\d+)/i);\n if (cdnMatch && cdnMatch[1]) {\n try {\n const mirror = new HederaMirrorNode(networkType as NetworkType);\n mirror.configureRetry({\n maxRetries: 3,\n maxDelayMs: 1000,\n });\n const resolved = await mirror.getTopicInfo(cdnMatch[1]);\n const memo = (resolved && (resolved as { memo?: string }).memo) || '';\n const match = memo.match(/^hcs-(\\d+)/);\n const standard = match && match[1] ? match[1] : '1';\n return `hcs://${standard}/${cdnMatch[1]}`;\n } catch {\n return `hcs://${fallbackStandard}/${cdnMatch[1]}`;\n }\n }\n\n const contentRefMatch = source.match(/^content-ref:(0\\.0\\.\\d+)$/i);\n if (contentRefMatch && contentRefMatch[1]) {\n try {\n const resolved = await resolver.resolve(contentRefMatch[1], {\n network: networkType as NetworkType,\n });\n const parsed = resolver.parseHRL(`hcs://1/${resolved.topicId}`);\n const std = parsed?.standard || fallbackStandard;\n return `hcs://${std}/${resolved.topicId}`;\n } catch {\n return `hcs://${fallbackStandard}/${contentRefMatch[1]}`;\n }\n }\n\n if (/^0\\.0\\.\\d+$/.test(source)) {\n try {\n const resolved = await resolver.resolve(source, {\n network: networkType as NetworkType,\n });\n const parsed = resolver.parseHRL(`hcs://1/${resolved.topicId}`);\n const std = parsed?.standard || fallbackStandard;\n return `hcs://${std}/${resolved.topicId}`;\n } catch {\n return `hcs://${fallbackStandard}/${source}`;\n }\n }\n\n return source;\n }\n}\n"],"names":[],"mappings":";;AAeO,MAAM,gCAAN,MAAM,8BAEb;AAAA,EAFO,cAAA;AAGL,SAAA,eAAe,aAAa;AAC5B,SAAA,eAAe,aAAa;AAAA,EAAA;AAAA,EAI5B,WAAW,QAAgB,UAAsC;AAC/D,QAAI,OAAO,WAAW,UAAU;AAC9B,aAAO;AAAA,IACT;AACA,QAAI,2BAA2B,KAAK,MAAM,GAAG;AAC3C,aAAO;AAAA,IACT;AACA,QAAI,gCAAgC,KAAK,MAAM,GAAG;AAChD,aAAO;AAAA,IACT;AACA,QAAI,6BAA6B,KAAK,MAAM,GAAG;AAC7C,aAAO;AAAA,IACT;AACA,QAAI,cAAc,KAAK,MAAM,GAAG;AAC9B,YAAM,gBAAgB;AAAA,QACnB,UACG,iBAAiB,gBAAgB,SAClC,UACG,iBAAiB,UAAU;AAAA,MAAA;AAEnC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,QAAgB,SAA6C;AACzE,UAAM,YACJ,QACA;AACF,UAAM,mBACJ,WAAW,eAAe,WAAW,0BAA0B;AACjE,UAAM,cAAe,QAAQ,eAA0B;AAEvD,UAAM,WAAW,IAAI,YAAA;AAErB,UAAM,WAAW,OAAO,MAAM,+BAA+B;AAC7D,QAAI,YAAY,SAAS,CAAC,GAAG;AAC3B,UAAI;AACF,cAAM,SAAS,IAAI,iBAAiB,WAA0B;AAC9D,eAAO,eAAe;AAAA,UACpB,YAAY;AAAA,UACZ,YAAY;AAAA,QAAA,CACb;AACD,cAAM,WAAW,MAAM,OAAO,aAAa,SAAS,CAAC,CAAC;AACtD,cAAM,OAAQ,YAAa,SAA+B,QAAS;AACnE,cAAM,QAAQ,KAAK,MAAM,YAAY;AACrC,cAAM,WAAW,SAAS,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI;AAChD,eAAO,SAAS,QAAQ,IAAI,SAAS,CAAC,CAAC;AAAA,MACzC,QAAQ;AACN,eAAO,SAAS,gBAAgB,IAAI,SAAS,CAAC,CAAC;AAAA,MACjD;AAAA,IACF;AAEA,UAAM,kBAAkB,OAAO,MAAM,4BAA4B;AACjE,QAAI,mBAAmB,gBAAgB,CAAC,GAAG;AACzC,UAAI;AACF,cAAM,WAAW,MAAM,SAAS,QAAQ,gBAAgB,CAAC,GAAG;AAAA,UAC1D,SAAS;AAAA,QAAA,CACV;AACD,cAAM,SAAS,SAAS,SAAS,WAAW,SAAS,OAAO,EAAE;AAC9D,cAAM,MAAM,QAAQ,YAAY;AAChC,eAAO,SAAS,GAAG,IAAI,SAAS,OAAO;AAAA,MACzC,QAAQ;AACN,eAAO,SAAS,gBAAgB,IAAI,gBAAgB,CAAC,CAAC;AAAA,MACxD;AAAA,IACF;AAEA,QAAI,cAAc,KAAK,MAAM,GAAG;AAC9B,UAAI;AACF,cAAM,WAAW,MAAM,SAAS,QAAQ,QAAQ;AAAA,UAC9C,SAAS;AAAA,QAAA,CACV;AACD,cAAM,SAAS,SAAS,SAAS,WAAW,SAAS,OAAO,EAAE;AAC9D,cAAM,MAAM,QAAQ,YAAY;AAChC,eAAO,SAAS,GAAG,IAAI,SAAS,OAAO;AAAA,MACzC,QAAQ;AACN,eAAO,SAAS,gBAAgB,IAAI,MAAM;AAAA,MAC5C;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AApFE,8BAAe,oCAAyC,IAAA;AANnD,IAAM,+BAAN;"}