@xylabs/aries 0.1.1 → 0.1.6

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 (421) hide show
  1. package/README.md +6 -688
  2. package/dist/aries.mjs +47 -8466
  3. package/package.json +15 -169
  4. package/dist/actions/audit/auditPaths.mjs +0 -22
  5. package/dist/actions/audit/auditPaths.mjs.map +0 -1
  6. package/dist/actions/audit/index.mjs +0 -739
  7. package/dist/actions/audit/index.mjs.map +0 -1
  8. package/dist/actions/audit/installPlugin.mjs +0 -298
  9. package/dist/actions/audit/installPlugin.mjs.map +0 -1
  10. package/dist/actions/audit/listSessions.mjs +0 -93
  11. package/dist/actions/audit/listSessions.mjs.map +0 -1
  12. package/dist/actions/audit/openAuditDir.mjs +0 -44
  13. package/dist/actions/audit/openAuditDir.mjs.map +0 -1
  14. package/dist/actions/audit/searchAudit.mjs +0 -77
  15. package/dist/actions/audit/searchAudit.mjs.map +0 -1
  16. package/dist/actions/audit/showAiMeta.mjs +0 -105
  17. package/dist/actions/audit/showAiMeta.mjs.map +0 -1
  18. package/dist/actions/audit/showSession.mjs +0 -105
  19. package/dist/actions/audit/showSession.mjs.map +0 -1
  20. package/dist/actions/audit/statusAudit.mjs +0 -98
  21. package/dist/actions/audit/statusAudit.mjs.map +0 -1
  22. package/dist/actions/clamp/clampAudit.mjs +0 -53
  23. package/dist/actions/clamp/clampAudit.mjs.map +0 -1
  24. package/dist/actions/clamp/index.mjs +0 -2258
  25. package/dist/actions/clamp/index.mjs.map +0 -1
  26. package/dist/actions/clamp/ipcServer.mjs +0 -55
  27. package/dist/actions/clamp/ipcServer.mjs.map +0 -1
  28. package/dist/actions/clamp/policyManagement.mjs +0 -144
  29. package/dist/actions/clamp/policyManagement.mjs.map +0 -1
  30. package/dist/actions/clamp/promptUser.mjs +0 -91
  31. package/dist/actions/clamp/promptUser.mjs.map +0 -1
  32. package/dist/actions/clamp/runClamped.mjs +0 -2107
  33. package/dist/actions/clamp/runClamped.mjs.map +0 -1
  34. package/dist/actions/clamp/sandboxExec.mjs +0 -1612
  35. package/dist/actions/clamp/sandboxExec.mjs.map +0 -1
  36. package/dist/actions/clamp/shellEnvSetup.mjs +0 -59
  37. package/dist/actions/clamp/shellEnvSetup.mjs.map +0 -1
  38. package/dist/actions/clamp/shimGenerator.mjs +0 -68
  39. package/dist/actions/clamp/shimGenerator.mjs.map +0 -1
  40. package/dist/actions/clamp/terminalRenderer.mjs +0 -145
  41. package/dist/actions/clamp/terminalRenderer.mjs.map +0 -1
  42. package/dist/actions/datalake/audit/auditLog.mjs +0 -191
  43. package/dist/actions/datalake/audit/auditLog.mjs.map +0 -1
  44. package/dist/actions/datalake/createDatalake.mjs +0 -127
  45. package/dist/actions/datalake/createDatalake.mjs.map +0 -1
  46. package/dist/actions/datalake/describeDatalake.mjs +0 -159
  47. package/dist/actions/datalake/describeDatalake.mjs.map +0 -1
  48. package/dist/actions/datalake/destroyDatalake.mjs +0 -34
  49. package/dist/actions/datalake/destroyDatalake.mjs.map +0 -1
  50. package/dist/actions/datalake/dev/downDevServer.mjs +0 -102
  51. package/dist/actions/datalake/dev/downDevServer.mjs.map +0 -1
  52. package/dist/actions/datalake/dev/index.mjs +0 -369
  53. package/dist/actions/datalake/dev/index.mjs.map +0 -1
  54. package/dist/actions/datalake/dev/logsDevServer.mjs +0 -44
  55. package/dist/actions/datalake/dev/logsDevServer.mjs.map +0 -1
  56. package/dist/actions/datalake/dev/paths.mjs +0 -25
  57. package/dist/actions/datalake/dev/paths.mjs.map +0 -1
  58. package/dist/actions/datalake/dev/resetDevServer.mjs +0 -118
  59. package/dist/actions/datalake/dev/resetDevServer.mjs.map +0 -1
  60. package/dist/actions/datalake/dev/resolveServerBin.mjs +0 -26
  61. package/dist/actions/datalake/dev/resolveServerBin.mjs.map +0 -1
  62. package/dist/actions/datalake/dev/state.mjs +0 -62
  63. package/dist/actions/datalake/dev/state.mjs.map +0 -1
  64. package/dist/actions/datalake/dev/statusDevServer.mjs +0 -101
  65. package/dist/actions/datalake/dev/statusDevServer.mjs.map +0 -1
  66. package/dist/actions/datalake/dev/upDevServer.mjs +0 -221
  67. package/dist/actions/datalake/dev/upDevServer.mjs.map +0 -1
  68. package/dist/actions/datalake/dev/waitForHealth.mjs +0 -22
  69. package/dist/actions/datalake/dev/waitForHealth.mjs.map +0 -1
  70. package/dist/actions/datalake/formatters.mjs +0 -90
  71. package/dist/actions/datalake/formatters.mjs.map +0 -1
  72. package/dist/actions/datalake/grantAccess.mjs +0 -116
  73. package/dist/actions/datalake/grantAccess.mjs.map +0 -1
  74. package/dist/actions/datalake/index.mjs +0 -361
  75. package/dist/actions/datalake/index.mjs.map +0 -1
  76. package/dist/actions/datalake/listDatalakes.mjs +0 -54
  77. package/dist/actions/datalake/listDatalakes.mjs.map +0 -1
  78. package/dist/actions/datalake/login.mjs +0 -20
  79. package/dist/actions/datalake/login.mjs.map +0 -1
  80. package/dist/actions/datalake/logout.mjs +0 -11
  81. package/dist/actions/datalake/logout.mjs.map +0 -1
  82. package/dist/actions/datalake/mintToken.mjs +0 -37
  83. package/dist/actions/datalake/mintToken.mjs.map +0 -1
  84. package/dist/actions/datalake/parseSize.mjs +0 -21
  85. package/dist/actions/datalake/parseSize.mjs.map +0 -1
  86. package/dist/actions/datalake/payloads/fetchPayload.mjs +0 -76
  87. package/dist/actions/datalake/payloads/fetchPayload.mjs.map +0 -1
  88. package/dist/actions/datalake/payloads/index.mjs +0 -271
  89. package/dist/actions/datalake/payloads/index.mjs.map +0 -1
  90. package/dist/actions/datalake/payloads/mintAndConnect.mjs +0 -46
  91. package/dist/actions/datalake/payloads/mintAndConnect.mjs.map +0 -1
  92. package/dist/actions/datalake/payloads/parsePayloadsFile.mjs +0 -71
  93. package/dist/actions/datalake/payloads/parsePayloadsFile.mjs.map +0 -1
  94. package/dist/actions/datalake/payloads/pushPayloads.mjs +0 -181
  95. package/dist/actions/datalake/payloads/pushPayloads.mjs.map +0 -1
  96. package/dist/actions/datalake/payloads/tailPayloads.mjs +0 -106
  97. package/dist/actions/datalake/payloads/tailPayloads.mjs.map +0 -1
  98. package/dist/actions/datalake/resolveTarget.mjs +0 -15
  99. package/dist/actions/datalake/resolveTarget.mjs.map +0 -1
  100. package/dist/actions/datalake/revokeAccess.mjs +0 -108
  101. package/dist/actions/datalake/revokeAccess.mjs.map +0 -1
  102. package/dist/actions/datalake/useDatalake.mjs +0 -22
  103. package/dist/actions/datalake/useDatalake.mjs.map +0 -1
  104. package/dist/actions/detect/detectAiClients.mjs +0 -405
  105. package/dist/actions/detect/detectAiClients.mjs.map +0 -1
  106. package/dist/actions/detect/index.mjs +0 -405
  107. package/dist/actions/detect/index.mjs.map +0 -1
  108. package/dist/actions/hash/algorithms/blockhash.mjs +0 -61
  109. package/dist/actions/hash/algorithms/blockhash.mjs.map +0 -1
  110. package/dist/actions/hash/algorithms/chromaprint.mjs +0 -205
  111. package/dist/actions/hash/algorithms/chromaprint.mjs.map +0 -1
  112. package/dist/actions/hash/algorithms/dhash.mjs +0 -75
  113. package/dist/actions/hash/algorithms/dhash.mjs.map +0 -1
  114. package/dist/actions/hash/algorithms/index.mjs +0 -818
  115. package/dist/actions/hash/algorithms/index.mjs.map +0 -1
  116. package/dist/actions/hash/algorithms/nilsimsa.mjs +0 -27
  117. package/dist/actions/hash/algorithms/nilsimsa.mjs.map +0 -1
  118. package/dist/actions/hash/algorithms/pdq.mjs +0 -83
  119. package/dist/actions/hash/algorithms/pdq.mjs.map +0 -1
  120. package/dist/actions/hash/algorithms/phash.mjs +0 -71
  121. package/dist/actions/hash/algorithms/phash.mjs.map +0 -1
  122. package/dist/actions/hash/algorithms/sha256.mjs +0 -24
  123. package/dist/actions/hash/algorithms/sha256.mjs.map +0 -1
  124. package/dist/actions/hash/algorithms/ssdeep.mjs +0 -203
  125. package/dist/actions/hash/algorithms/ssdeep.mjs.map +0 -1
  126. package/dist/actions/hash/algorithms/tlsh.mjs +0 -66
  127. package/dist/actions/hash/algorithms/tlsh.mjs.map +0 -1
  128. package/dist/actions/hash/algorithms/types.mjs +0 -1
  129. package/dist/actions/hash/algorithms/types.mjs.map +0 -1
  130. package/dist/actions/hash/algorithms/videoFrames.mjs +0 -404
  131. package/dist/actions/hash/algorithms/videoFrames.mjs.map +0 -1
  132. package/dist/actions/hash/algorithms/xyo.mjs +0 -30
  133. package/dist/actions/hash/algorithms/xyo.mjs.map +0 -1
  134. package/dist/actions/hash/compareHashes.mjs +0 -823
  135. package/dist/actions/hash/compareHashes.mjs.map +0 -1
  136. package/dist/actions/hash/hashInput.mjs +0 -868
  137. package/dist/actions/hash/hashInput.mjs.map +0 -1
  138. package/dist/actions/hash/index.mjs +0 -881
  139. package/dist/actions/hash/index.mjs.map +0 -1
  140. package/dist/actions/hash/lib/hamming.mjs +0 -44
  141. package/dist/actions/hash/lib/hamming.mjs.map +0 -1
  142. package/dist/actions/hash/lib/levenshtein.mjs +0 -36
  143. package/dist/actions/hash/lib/levenshtein.mjs.map +0 -1
  144. package/dist/actions/hash/lib/runBinary.mjs +0 -54
  145. package/dist/actions/hash/lib/runBinary.mjs.map +0 -1
  146. package/dist/actions/hash/lib/which.mjs +0 -36
  147. package/dist/actions/hash/lib/which.mjs.map +0 -1
  148. package/dist/actions/hash/lib/withTempfile.mjs +0 -19
  149. package/dist/actions/hash/lib/withTempfile.mjs.map +0 -1
  150. package/dist/actions/index.mjs +0 -4615
  151. package/dist/actions/index.mjs.map +0 -1
  152. package/dist/actions/printVersion.mjs +0 -12
  153. package/dist/actions/printVersion.mjs.map +0 -1
  154. package/dist/actions/sync/index.mjs +0 -51
  155. package/dist/actions/sync/index.mjs.map +0 -1
  156. package/dist/actions/sync/syncAiConfig.mjs +0 -51
  157. package/dist/actions/sync/syncAiConfig.mjs.map +0 -1
  158. package/dist/actions/wallet/account/deriveAndAdd.mjs +0 -394
  159. package/dist/actions/wallet/account/deriveAndAdd.mjs.map +0 -1
  160. package/dist/actions/wallet/account/getActiveWallet.mjs +0 -338
  161. package/dist/actions/wallet/account/getActiveWallet.mjs.map +0 -1
  162. package/dist/actions/wallet/account/labelAccount.mjs +0 -389
  163. package/dist/actions/wallet/account/labelAccount.mjs.map +0 -1
  164. package/dist/actions/wallet/account/listAccounts.mjs +0 -374
  165. package/dist/actions/wallet/account/listAccounts.mjs.map +0 -1
  166. package/dist/actions/wallet/account/removeAccount.mjs +0 -384
  167. package/dist/actions/wallet/account/removeAccount.mjs.map +0 -1
  168. package/dist/actions/wallet/account/showAccount.mjs +0 -368
  169. package/dist/actions/wallet/account/showAccount.mjs.map +0 -1
  170. package/dist/actions/wallet/addressBook/storage.mjs +0 -110
  171. package/dist/actions/wallet/addressBook/storage.mjs.map +0 -1
  172. package/dist/actions/wallet/backup/exportBackup.mjs +0 -93
  173. package/dist/actions/wallet/backup/exportBackup.mjs.map +0 -1
  174. package/dist/actions/wallet/backup/importBackup.mjs +0 -142
  175. package/dist/actions/wallet/backup/importBackup.mjs.map +0 -1
  176. package/dist/actions/wallet/balance/getBalance.mjs +0 -434
  177. package/dist/actions/wallet/balance/getBalance.mjs.map +0 -1
  178. package/dist/actions/wallet/client/walletClient.mjs +0 -64
  179. package/dist/actions/wallet/client/walletClient.mjs.map +0 -1
  180. package/dist/actions/wallet/contact/contactActions.mjs +0 -120
  181. package/dist/actions/wallet/contact/contactActions.mjs.map +0 -1
  182. package/dist/actions/wallet/contact/storage.mjs +0 -69
  183. package/dist/actions/wallet/contact/storage.mjs.map +0 -1
  184. package/dist/actions/wallet/index.mjs +0 -1439
  185. package/dist/actions/wallet/index.mjs.map +0 -1
  186. package/dist/actions/wallet/network/networkActions.mjs +0 -137
  187. package/dist/actions/wallet/network/networkActions.mjs.map +0 -1
  188. package/dist/actions/wallet/network/storage.mjs +0 -93
  189. package/dist/actions/wallet/network/storage.mjs.map +0 -1
  190. package/dist/actions/wallet/password/changePassword.mjs +0 -282
  191. package/dist/actions/wallet/password/changePassword.mjs.map +0 -1
  192. package/dist/actions/wallet/password/getActiveKey.mjs +0 -297
  193. package/dist/actions/wallet/password/getActiveKey.mjs.map +0 -1
  194. package/dist/actions/wallet/password/initOrUnlock.mjs +0 -337
  195. package/dist/actions/wallet/password/initOrUnlock.mjs.map +0 -1
  196. package/dist/actions/wallet/password/passwordStorage.mjs +0 -69
  197. package/dist/actions/wallet/password/passwordStorage.mjs.map +0 -1
  198. package/dist/actions/wallet/password/setPassword.mjs +0 -138
  199. package/dist/actions/wallet/password/setPassword.mjs.map +0 -1
  200. package/dist/actions/wallet/password/validatePassword.mjs +0 -123
  201. package/dist/actions/wallet/password/validatePassword.mjs.map +0 -1
  202. package/dist/actions/wallet/passwordKey.mjs +0 -87
  203. package/dist/actions/wallet/passwordKey.mjs.map +0 -1
  204. package/dist/actions/wallet/paths.mjs +0 -26
  205. package/dist/actions/wallet/paths.mjs.map +0 -1
  206. package/dist/actions/wallet/prompt.mjs +0 -93
  207. package/dist/actions/wallet/prompt.mjs.map +0 -1
  208. package/dist/actions/wallet/seedPhrase/createPhrase.mjs +0 -392
  209. package/dist/actions/wallet/seedPhrase/createPhrase.mjs.map +0 -1
  210. package/dist/actions/wallet/seedPhrase/exportPhrase.mjs +0 -334
  211. package/dist/actions/wallet/seedPhrase/exportPhrase.mjs.map +0 -1
  212. package/dist/actions/wallet/seedPhrase/idGen.mjs +0 -11
  213. package/dist/actions/wallet/seedPhrase/idGen.mjs.map +0 -1
  214. package/dist/actions/wallet/seedPhrase/importPhrase.mjs +0 -393
  215. package/dist/actions/wallet/seedPhrase/importPhrase.mjs.map +0 -1
  216. package/dist/actions/wallet/seedPhrase/listPhrases.mjs +0 -62
  217. package/dist/actions/wallet/seedPhrase/listPhrases.mjs.map +0 -1
  218. package/dist/actions/wallet/seedPhrase/phraseStorage.mjs +0 -89
  219. package/dist/actions/wallet/seedPhrase/phraseStorage.mjs.map +0 -1
  220. package/dist/actions/wallet/seedPhrase/removePhrase.mjs +0 -366
  221. package/dist/actions/wallet/seedPhrase/removePhrase.mjs.map +0 -1
  222. package/dist/actions/wallet/seedPhrase/renamePhrase.mjs +0 -78
  223. package/dist/actions/wallet/seedPhrase/renamePhrase.mjs.map +0 -1
  224. package/dist/actions/wallet/seedPhrase/types.mjs +0 -1
  225. package/dist/actions/wallet/seedPhrase/types.mjs.map +0 -1
  226. package/dist/actions/wallet/seedPhrase/usePhrase.mjs +0 -83
  227. package/dist/actions/wallet/seedPhrase/usePhrase.mjs.map +0 -1
  228. package/dist/actions/wallet/session/machineId.mjs +0 -145
  229. package/dist/actions/wallet/session/machineId.mjs.map +0 -1
  230. package/dist/actions/wallet/session/sessionCache.mjs +0 -221
  231. package/dist/actions/wallet/session/sessionCache.mjs.map +0 -1
  232. package/dist/actions/wallet/session/unlock.mjs +0 -307
  233. package/dist/actions/wallet/session/unlock.mjs.map +0 -1
  234. package/dist/actions/wallet/sign/signPayload.mjs +0 -637
  235. package/dist/actions/wallet/sign/signPayload.mjs.map +0 -1
  236. package/dist/actions/wallet/storage.mjs +0 -51
  237. package/dist/actions/wallet/storage.mjs.map +0 -1
  238. package/dist/actions/wallet/transaction/broadcastTransaction.mjs +0 -453
  239. package/dist/actions/wallet/transaction/broadcastTransaction.mjs.map +0 -1
  240. package/dist/actions/wallet/transaction/sendTransaction.mjs +0 -457
  241. package/dist/actions/wallet/transaction/sendTransaction.mjs.map +0 -1
  242. package/dist/actions/wallet/transaction/signTransactionFile.mjs +0 -378
  243. package/dist/actions/wallet/transaction/signTransactionFile.mjs.map +0 -1
  244. package/dist/actions/xyo/index.mjs +0 -138
  245. package/dist/actions/xyo/index.mjs.map +0 -1
  246. package/dist/actions/xyo/transaction/index.mjs +0 -138
  247. package/dist/actions/xyo/transaction/index.mjs.map +0 -1
  248. package/dist/actions/xyo/transaction/validateTransactions.mjs +0 -138
  249. package/dist/actions/xyo/transaction/validateTransactions.mjs.map +0 -1
  250. package/dist/aries.mjs.map +0 -1
  251. package/dist/bin/aries.mjs +0 -8472
  252. package/dist/bin/aries.mjs.map +0 -1
  253. package/dist/commands/aiCommand.mjs +0 -492
  254. package/dist/commands/aiCommand.mjs.map +0 -1
  255. package/dist/commands/auditAiCommand.mjs +0 -119
  256. package/dist/commands/auditAiCommand.mjs.map +0 -1
  257. package/dist/commands/auditCommand.mjs +0 -857
  258. package/dist/commands/auditCommand.mjs.map +0 -1
  259. package/dist/commands/auditInstallCommand.mjs +0 -324
  260. package/dist/commands/auditInstallCommand.mjs.map +0 -1
  261. package/dist/commands/auditListCommand.mjs +0 -107
  262. package/dist/commands/auditListCommand.mjs.map +0 -1
  263. package/dist/commands/auditOpenCommand.mjs +0 -51
  264. package/dist/commands/auditOpenCommand.mjs.map +0 -1
  265. package/dist/commands/auditSearchCommand.mjs +0 -98
  266. package/dist/commands/auditSearchCommand.mjs.map +0 -1
  267. package/dist/commands/auditShowCommand.mjs +0 -123
  268. package/dist/commands/auditShowCommand.mjs.map +0 -1
  269. package/dist/commands/auditStatusCommand.mjs +0 -105
  270. package/dist/commands/auditStatusCommand.mjs.map +0 -1
  271. package/dist/commands/clampCommand.mjs +0 -2328
  272. package/dist/commands/clampCommand.mjs.map +0 -1
  273. package/dist/commands/clampPolicyCommand.mjs +0 -184
  274. package/dist/commands/clampPolicyCommand.mjs.map +0 -1
  275. package/dist/commands/clampPolicyInitCommand.mjs +0 -63
  276. package/dist/commands/clampPolicyInitCommand.mjs.map +0 -1
  277. package/dist/commands/clampPolicyListCommand.mjs +0 -56
  278. package/dist/commands/clampPolicyListCommand.mjs.map +0 -1
  279. package/dist/commands/clampPolicyShowCommand.mjs +0 -83
  280. package/dist/commands/clampPolicyShowCommand.mjs.map +0 -1
  281. package/dist/commands/clampRunCommand.mjs +0 -2137
  282. package/dist/commands/clampRunCommand.mjs.map +0 -1
  283. package/dist/commands/datalakeAuditCommand.mjs +0 -273
  284. package/dist/commands/datalakeAuditCommand.mjs.map +0 -1
  285. package/dist/commands/datalakeCommand.mjs +0 -1637
  286. package/dist/commands/datalakeCommand.mjs.map +0 -1
  287. package/dist/commands/datalakeCreateCommand.mjs +0 -189
  288. package/dist/commands/datalakeCreateCommand.mjs.map +0 -1
  289. package/dist/commands/datalakeDescribeCommand.mjs +0 -172
  290. package/dist/commands/datalakeDescribeCommand.mjs.map +0 -1
  291. package/dist/commands/datalakeDestroyCommand.mjs +0 -53
  292. package/dist/commands/datalakeDestroyCommand.mjs.map +0 -1
  293. package/dist/commands/datalakeDevCommand.mjs +0 -470
  294. package/dist/commands/datalakeDevCommand.mjs.map +0 -1
  295. package/dist/commands/datalakeDevDownCommand.mjs +0 -111
  296. package/dist/commands/datalakeDevDownCommand.mjs.map +0 -1
  297. package/dist/commands/datalakeDevLogsCommand.mjs +0 -65
  298. package/dist/commands/datalakeDevLogsCommand.mjs.map +0 -1
  299. package/dist/commands/datalakeDevResetCommand.mjs +0 -125
  300. package/dist/commands/datalakeDevResetCommand.mjs.map +0 -1
  301. package/dist/commands/datalakeDevStatusCommand.mjs +0 -110
  302. package/dist/commands/datalakeDevStatusCommand.mjs.map +0 -1
  303. package/dist/commands/datalakeDevUpCommand.mjs +0 -268
  304. package/dist/commands/datalakeDevUpCommand.mjs.map +0 -1
  305. package/dist/commands/datalakeFetchCommand.mjs +0 -106
  306. package/dist/commands/datalakeFetchCommand.mjs.map +0 -1
  307. package/dist/commands/datalakeGrantCommand.mjs +0 -147
  308. package/dist/commands/datalakeGrantCommand.mjs.map +0 -1
  309. package/dist/commands/datalakeListCommand.mjs +0 -61
  310. package/dist/commands/datalakeListCommand.mjs.map +0 -1
  311. package/dist/commands/datalakeLoginCommand.mjs +0 -39
  312. package/dist/commands/datalakeLoginCommand.mjs.map +0 -1
  313. package/dist/commands/datalakeLogoutCommand.mjs +0 -20
  314. package/dist/commands/datalakeLogoutCommand.mjs.map +0 -1
  315. package/dist/commands/datalakePushCommand.mjs +0 -214
  316. package/dist/commands/datalakePushCommand.mjs.map +0 -1
  317. package/dist/commands/datalakeRevokeCommand.mjs +0 -127
  318. package/dist/commands/datalakeRevokeCommand.mjs.map +0 -1
  319. package/dist/commands/datalakeTailCommand.mjs +0 -144
  320. package/dist/commands/datalakeTailCommand.mjs.map +0 -1
  321. package/dist/commands/datalakeTokenCommand.mjs +0 -61
  322. package/dist/commands/datalakeTokenCommand.mjs.map +0 -1
  323. package/dist/commands/datalakeUseCommand.mjs +0 -35
  324. package/dist/commands/datalakeUseCommand.mjs.map +0 -1
  325. package/dist/commands/detectCommand.mjs +0 -419
  326. package/dist/commands/detectCommand.mjs.map +0 -1
  327. package/dist/commands/hashCommand.mjs +0 -976
  328. package/dist/commands/hashCommand.mjs.map +0 -1
  329. package/dist/commands/hashCompareCommand.mjs +0 -865
  330. package/dist/commands/hashCompareCommand.mjs.map +0 -1
  331. package/dist/commands/index.mjs +0 -8461
  332. package/dist/commands/index.mjs.map +0 -1
  333. package/dist/commands/syncCommand.mjs +0 -66
  334. package/dist/commands/syncCommand.mjs.map +0 -1
  335. package/dist/commands/versionCommand.mjs +0 -24
  336. package/dist/commands/versionCommand.mjs.map +0 -1
  337. package/dist/commands/walletAccountCommand.mjs +0 -536
  338. package/dist/commands/walletAccountCommand.mjs.map +0 -1
  339. package/dist/commands/walletAccountDeriveCommand.mjs +0 -415
  340. package/dist/commands/walletAccountDeriveCommand.mjs.map +0 -1
  341. package/dist/commands/walletAccountLabelCommand.mjs +0 -405
  342. package/dist/commands/walletAccountLabelCommand.mjs.map +0 -1
  343. package/dist/commands/walletAccountListCommand.mjs +0 -381
  344. package/dist/commands/walletAccountListCommand.mjs.map +0 -1
  345. package/dist/commands/walletAccountRemoveCommand.mjs +0 -396
  346. package/dist/commands/walletAccountRemoveCommand.mjs.map +0 -1
  347. package/dist/commands/walletAccountShowCommand.mjs +0 -380
  348. package/dist/commands/walletAccountShowCommand.mjs.map +0 -1
  349. package/dist/commands/walletBackupCommand.mjs +0 -222
  350. package/dist/commands/walletBackupCommand.mjs.map +0 -1
  351. package/dist/commands/walletBackupExportCommand.mjs +0 -107
  352. package/dist/commands/walletBackupExportCommand.mjs.map +0 -1
  353. package/dist/commands/walletBackupImportCommand.mjs +0 -154
  354. package/dist/commands/walletBackupImportCommand.mjs.map +0 -1
  355. package/dist/commands/walletBalanceCommand.mjs +0 -448
  356. package/dist/commands/walletBalanceCommand.mjs.map +0 -1
  357. package/dist/commands/walletCommand.mjs +0 -1968
  358. package/dist/commands/walletCommand.mjs.map +0 -1
  359. package/dist/commands/walletContactAddCommand.mjs +0 -111
  360. package/dist/commands/walletContactAddCommand.mjs.map +0 -1
  361. package/dist/commands/walletContactCommand.mjs +0 -184
  362. package/dist/commands/walletContactCommand.mjs.map +0 -1
  363. package/dist/commands/walletContactListCommand.mjs +0 -66
  364. package/dist/commands/walletContactListCommand.mjs.map +0 -1
  365. package/dist/commands/walletContactRemoveCommand.mjs +0 -97
  366. package/dist/commands/walletContactRemoveCommand.mjs.map +0 -1
  367. package/dist/commands/walletContactRenameCommand.mjs +0 -114
  368. package/dist/commands/walletContactRenameCommand.mjs.map +0 -1
  369. package/dist/commands/walletCreateCommand.mjs +0 -407
  370. package/dist/commands/walletCreateCommand.mjs.map +0 -1
  371. package/dist/commands/walletExportCommand.mjs +0 -345
  372. package/dist/commands/walletExportCommand.mjs.map +0 -1
  373. package/dist/commands/walletImportCommand.mjs +0 -413
  374. package/dist/commands/walletImportCommand.mjs.map +0 -1
  375. package/dist/commands/walletListCommand.mjs +0 -69
  376. package/dist/commands/walletListCommand.mjs.map +0 -1
  377. package/dist/commands/walletLockCommand.mjs +0 -56
  378. package/dist/commands/walletLockCommand.mjs.map +0 -1
  379. package/dist/commands/walletNetworkAddCommand.mjs +0 -131
  380. package/dist/commands/walletNetworkAddCommand.mjs.map +0 -1
  381. package/dist/commands/walletNetworkCommand.mjs +0 -206
  382. package/dist/commands/walletNetworkCommand.mjs.map +0 -1
  383. package/dist/commands/walletNetworkListCommand.mjs +0 -104
  384. package/dist/commands/walletNetworkListCommand.mjs.map +0 -1
  385. package/dist/commands/walletNetworkRemoveCommand.mjs +0 -112
  386. package/dist/commands/walletNetworkRemoveCommand.mjs.map +0 -1
  387. package/dist/commands/walletNetworkUseCommand.mjs +0 -110
  388. package/dist/commands/walletNetworkUseCommand.mjs.map +0 -1
  389. package/dist/commands/walletPasswordChangeCommand.mjs +0 -291
  390. package/dist/commands/walletPasswordChangeCommand.mjs.map +0 -1
  391. package/dist/commands/walletPasswordCommand.mjs +0 -301
  392. package/dist/commands/walletPasswordCommand.mjs.map +0 -1
  393. package/dist/commands/walletRemoveCommand.mjs +0 -378
  394. package/dist/commands/walletRemoveCommand.mjs.map +0 -1
  395. package/dist/commands/walletRenameCommand.mjs +0 -94
  396. package/dist/commands/walletRenameCommand.mjs.map +0 -1
  397. package/dist/commands/walletSignCommand.mjs +0 -662
  398. package/dist/commands/walletSignCommand.mjs.map +0 -1
  399. package/dist/commands/walletTxBroadcastCommand.mjs +0 -473
  400. package/dist/commands/walletTxBroadcastCommand.mjs.map +0 -1
  401. package/dist/commands/walletTxCommand.mjs +0 -612
  402. package/dist/commands/walletTxCommand.mjs.map +0 -1
  403. package/dist/commands/walletTxSendCommand.mjs +0 -492
  404. package/dist/commands/walletTxSendCommand.mjs.map +0 -1
  405. package/dist/commands/walletTxSignCommand.mjs +0 -403
  406. package/dist/commands/walletTxSignCommand.mjs.map +0 -1
  407. package/dist/commands/walletUnlockCommand.mjs +0 -308
  408. package/dist/commands/walletUnlockCommand.mjs.map +0 -1
  409. package/dist/commands/walletUseCommand.mjs +0 -95
  410. package/dist/commands/walletUseCommand.mjs.map +0 -1
  411. package/dist/commands/xyoCommand.mjs +0 -188
  412. package/dist/commands/xyoCommand.mjs.map +0 -1
  413. package/dist/commands/xyoTxCommand.mjs +0 -178
  414. package/dist/commands/xyoTxCommand.mjs.map +0 -1
  415. package/dist/commands/xyoTxValidateCommand.mjs +0 -168
  416. package/dist/commands/xyoTxValidateCommand.mjs.map +0 -1
  417. package/dist/index.d.ts +0 -3
  418. package/dist/index.mjs +0 -8466
  419. package/dist/index.mjs.map +0 -1
  420. package/dist/types/modules.d.mjs +0 -1
  421. package/dist/types/modules.d.mjs.map +0 -1
@@ -1,405 +0,0 @@
1
- // src/actions/detect/detectAiClients.ts
2
- import { execFileSync, execSync } from "child_process";
3
- import { existsSync, realpathSync } from "fs";
4
- import { homedir, platform } from "os";
5
- import path from "path";
6
- import chalk from "chalk";
7
- function getAppPaths() {
8
- const os = platform();
9
- const home = homedir();
10
- if (os === "darwin") {
11
- return ["/Applications", path.join(home, "Applications")];
12
- }
13
- if (os === "win32") {
14
- return [
15
- String.raw`C:\Program Files`,
16
- String.raw`C:\Program Files (x86)`,
17
- path.join(home, "AppData", "Local", "Programs")
18
- ];
19
- }
20
- return ["/usr/share/applications"];
21
- }
22
- function detectApp(candidate) {
23
- const appDirs = getAppPaths();
24
- for (const dir of appDirs) {
25
- for (const appPath of candidate.paths) {
26
- const full = path.join(dir, appPath);
27
- if (existsSync(full)) {
28
- return {
29
- detected: true,
30
- name: candidate.name,
31
- path: full,
32
- provider: candidate.provider,
33
- type: "app"
34
- };
35
- }
36
- }
37
- }
38
- return {
39
- detected: false,
40
- name: candidate.name,
41
- provider: candidate.provider,
42
- type: "app"
43
- };
44
- }
45
- function resolveCliPath(location) {
46
- try {
47
- return realpathSync(location);
48
- } catch {
49
- return location;
50
- }
51
- }
52
- function findCliLocation(candidate) {
53
- try {
54
- return execSync(`which ${candidate.command}`, {
55
- encoding: "utf8",
56
- stdio: ["pipe", "pipe", "pipe"],
57
- timeout: 5e3
58
- }).trim();
59
- } catch {
60
- for (const cliPath of candidate.paths ?? []) {
61
- if (existsSync(cliPath)) {
62
- return cliPath;
63
- }
64
- }
65
- }
66
- }
67
- function detectCli(candidate) {
68
- const location = findCliLocation(candidate);
69
- if (!location) {
70
- return {
71
- detected: false,
72
- name: candidate.name,
73
- provider: candidate.provider,
74
- type: "cli"
75
- };
76
- }
77
- const resolvedLocation = resolveCliPath(location);
78
- let version;
79
- if (candidate.versionFlag) {
80
- try {
81
- const output = execFileSync(resolvedLocation, [candidate.versionFlag], {
82
- encoding: "utf8",
83
- stdio: ["pipe", "pipe", "pipe"],
84
- timeout: 5e3
85
- }).trim();
86
- const match = /[\d.]+/.exec(output);
87
- version = match?.[0];
88
- } catch {
89
- }
90
- }
91
- return {
92
- detected: true,
93
- name: candidate.name,
94
- path: resolvedLocation,
95
- provider: candidate.provider,
96
- type: "cli",
97
- version
98
- };
99
- }
100
- function getVscodeExtensions() {
101
- try {
102
- const output = execSync("code --list-extensions", {
103
- encoding: "utf8",
104
- stdio: ["pipe", "pipe", "pipe"],
105
- timeout: 1e4
106
- }).trim();
107
- return new Set(output.toLowerCase().split("\n").map((e) => e.trim()));
108
- } catch {
109
- return /* @__PURE__ */ new Set();
110
- }
111
- }
112
- function detectVscode(candidate, extensions) {
113
- const extensionId = candidate.extensionIds.find((id) => extensions.has(id.toLowerCase()));
114
- const detected = Boolean(extensionId);
115
- return {
116
- detected,
117
- name: candidate.name,
118
- ...extensionId ? { path: extensionId } : {},
119
- provider: candidate.provider,
120
- type: "vscode"
121
- };
122
- }
123
- var APP_CANDIDATES = [
124
- {
125
- name: "Claude Desktop",
126
- paths: ["Claude.app"],
127
- provider: "Anthropic"
128
- },
129
- {
130
- name: "ChatGPT Desktop",
131
- paths: ["ChatGPT.app"],
132
- provider: "OpenAI"
133
- },
134
- {
135
- name: "Codex Desktop",
136
- paths: ["Codex.app", "OpenAI Codex.app"],
137
- provider: "OpenAI"
138
- },
139
- {
140
- name: "Cursor",
141
- paths: ["Cursor.app", "Cursor/Cursor.exe", "cursor.desktop"],
142
- provider: "Cursor"
143
- },
144
- {
145
- name: "Grok Desktop",
146
- paths: ["Grok.app"],
147
- provider: "xAI"
148
- },
149
- {
150
- name: "Windsurf",
151
- paths: ["Windsurf.app", "Windsurf/Windsurf.exe", "windsurf.desktop"],
152
- provider: "Windsurf"
153
- },
154
- {
155
- name: "Gemini Desktop",
156
- paths: ["Gemini.app", "Google Gemini.app"],
157
- provider: "Google"
158
- },
159
- {
160
- name: "Gemini in Android Studio",
161
- paths: ["Android Studio.app"],
162
- provider: "Google"
163
- },
164
- {
165
- name: "Kiro",
166
- paths: ["Kiro.app", "Kiro/Kiro.exe", "kiro.desktop"],
167
- provider: "Kiro"
168
- },
169
- {
170
- name: "Copilot Desktop",
171
- paths: ["Microsoft Copilot.app", "Copilot.app"],
172
- provider: "Microsoft"
173
- },
174
- {
175
- name: "Ollama",
176
- paths: ["Ollama.app", "Ollama/Ollama.exe", "ollama.desktop"],
177
- provider: "Ollama"
178
- },
179
- {
180
- name: "LM Studio",
181
- paths: ["LM Studio.app"],
182
- provider: "LM Studio"
183
- },
184
- {
185
- name: "OpenCode",
186
- paths: ["OpenCode.app"],
187
- provider: "OpenCode"
188
- }
189
- ];
190
- var CLI_CANDIDATES = [
191
- {
192
- command: "claude",
193
- name: "Claude Code",
194
- provider: "Anthropic",
195
- versionFlag: "--version"
196
- },
197
- {
198
- command: "chatgpt",
199
- name: "ChatGPT CLI",
200
- provider: "OpenAI",
201
- versionFlag: "--version"
202
- },
203
- {
204
- command: "codex",
205
- name: "Codex CLI",
206
- provider: "OpenAI",
207
- versionFlag: "--version"
208
- },
209
- {
210
- command: "cursor-agent",
211
- name: "Cursor Agent CLI",
212
- provider: "Cursor",
213
- versionFlag: "--version"
214
- },
215
- {
216
- command: "cursor",
217
- name: "Cursor Editor CLI",
218
- paths: ["/Applications/Cursor.app/Contents/Resources/app/bin/cursor"],
219
- provider: "Cursor",
220
- versionFlag: "--version"
221
- },
222
- {
223
- command: "grok",
224
- name: "Grok CLI",
225
- provider: "xAI",
226
- versionFlag: "--version"
227
- },
228
- {
229
- command: "windsurf",
230
- name: "Windsurf CLI",
231
- paths: ["/Applications/Windsurf.app/Contents/Resources/app/bin/windsurf"],
232
- provider: "Windsurf",
233
- versionFlag: "--version"
234
- },
235
- {
236
- command: "gemini",
237
- name: "Gemini CLI",
238
- provider: "Google",
239
- versionFlag: "--version"
240
- },
241
- {
242
- command: "kiro-cli",
243
- name: "Kiro CLI",
244
- provider: "Kiro",
245
- versionFlag: "version"
246
- },
247
- {
248
- command: "kiro",
249
- name: "Kiro Editor CLI",
250
- provider: "Kiro",
251
- versionFlag: "--version"
252
- },
253
- {
254
- command: "copilot",
255
- name: "GitHub Copilot CLI",
256
- provider: "Microsoft",
257
- versionFlag: "--version"
258
- },
259
- {
260
- command: "ollama",
261
- name: "Ollama CLI",
262
- paths: ["/Applications/Ollama.app/Contents/Resources/ollama"],
263
- provider: "Ollama",
264
- versionFlag: "--version"
265
- },
266
- {
267
- command: "aider",
268
- name: "Aider CLI",
269
- provider: "Aider",
270
- versionFlag: "--version"
271
- },
272
- {
273
- command: "cn",
274
- name: "Continue CLI",
275
- provider: "Continue",
276
- versionFlag: "--version"
277
- },
278
- {
279
- command: "cline",
280
- name: "Cline CLI",
281
- provider: "Cline",
282
- versionFlag: "--version"
283
- },
284
- {
285
- command: "droid",
286
- name: "Factory Droid CLI",
287
- provider: "Factory",
288
- versionFlag: "--version"
289
- },
290
- {
291
- command: "lms",
292
- name: "LM Studio CLI",
293
- provider: "LM Studio",
294
- versionFlag: "version"
295
- },
296
- {
297
- command: "opencode",
298
- name: "OpenCode CLI",
299
- provider: "OpenCode",
300
- versionFlag: "--version"
301
- }
302
- ];
303
- var VSCODE_CANDIDATES = [
304
- {
305
- extensionIds: ["anthropic.claude-code"],
306
- name: "Claude Code Extension",
307
- provider: "Anthropic"
308
- },
309
- {
310
- extensionIds: ["openai.chatgpt"],
311
- name: "Codex IDE Extension",
312
- provider: "OpenAI"
313
- },
314
- {
315
- extensionIds: ["codeium.codeium"],
316
- name: "Windsurf / Codeium Extension",
317
- provider: "Windsurf"
318
- },
319
- {
320
- extensionIds: ["github.copilot"],
321
- name: "GitHub Copilot",
322
- provider: "Microsoft"
323
- },
324
- {
325
- extensionIds: ["github.copilot-chat"],
326
- name: "GitHub Copilot Chat",
327
- provider: "Microsoft"
328
- },
329
- {
330
- extensionIds: ["google.geminicodeassist", "google.gemini-code-assist"],
331
- name: "Gemini Code Assist",
332
- provider: "Google"
333
- },
334
- {
335
- extensionIds: ["continue.continue"],
336
- name: "Continue",
337
- provider: "Continue"
338
- },
339
- {
340
- extensionIds: ["saoudrizwan.claude-dev"],
341
- name: "Cline",
342
- provider: "Cline"
343
- }
344
- ];
345
- function detectAll() {
346
- const results = [];
347
- for (const candidate of APP_CANDIDATES) {
348
- results.push(detectApp(candidate));
349
- }
350
- for (const candidate of CLI_CANDIDATES) {
351
- results.push(detectCli(candidate));
352
- }
353
- const extensions = getVscodeExtensions();
354
- for (const candidate of VSCODE_CANDIDATES) {
355
- results.push(detectVscode(candidate, extensions));
356
- }
357
- return results;
358
- }
359
- function printResults(results) {
360
- const providers = [
361
- "Anthropic",
362
- "OpenAI",
363
- "Cursor",
364
- "xAI",
365
- "Windsurf",
366
- "Google",
367
- "Kiro",
368
- "Microsoft",
369
- "Ollama",
370
- "Aider",
371
- "Continue",
372
- "Cline",
373
- "Factory",
374
- "LM Studio",
375
- "OpenCode"
376
- ];
377
- for (const provider of providers) {
378
- const clients = results.filter((c) => c.provider === provider);
379
- const found = clients.filter((c) => c.detected);
380
- console.log(chalk.cyan(provider));
381
- if (found.length === 0) {
382
- console.log(chalk.gray(" (none detected)"));
383
- } else {
384
- for (const client of found) {
385
- const info = [client.path, client.version].filter(Boolean).join(" ");
386
- console.log(` ${chalk.green("+")} ${chalk.white(client.name.padEnd(28))} ${chalk.gray(info)}`);
387
- }
388
- }
389
- console.log();
390
- }
391
- const total = results.filter((c) => c.detected).length;
392
- console.log(chalk.white(`${total} AI client${total === 1 ? "" : "s"} detected`));
393
- }
394
- function detectAiClients(json) {
395
- const results = detectAll();
396
- if (json) {
397
- console.log(JSON.stringify(results, null, 2));
398
- return;
399
- }
400
- printResults(results);
401
- }
402
- export {
403
- detectAiClients
404
- };
405
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/actions/detect/detectAiClients.ts"],"sourcesContent":["import { execFileSync, execSync } from 'node:child_process'\nimport { existsSync, realpathSync } from 'node:fs'\nimport { homedir, platform } from 'node:os'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\n\ninterface AiClient {\n detected: boolean\n name: string\n path?: string\n provider: string\n type: 'app' | 'cli' | 'vscode'\n version?: string\n}\n\ninterface AppCandidate {\n name: string\n paths: string[]\n provider: string\n}\n\ninterface CliCandidate {\n command: string\n name: string\n paths?: string[]\n provider: string\n versionFlag?: string\n}\n\ninterface VscodeCandidate {\n extensionIds: string[]\n name: string\n provider: string\n}\n\nfunction getAppPaths(): string[] {\n const os = platform()\n const home = homedir()\n if (os === 'darwin') {\n return ['/Applications', path.join(home, 'Applications')]\n }\n if (os === 'win32') {\n return [\n String.raw`C:\\Program Files`,\n String.raw`C:\\Program Files (x86)`,\n path.join(home, 'AppData', 'Local', 'Programs'),\n ]\n }\n return ['/usr/share/applications']\n}\n\nfunction detectApp(candidate: AppCandidate): AiClient {\n const appDirs = getAppPaths()\n for (const dir of appDirs) {\n for (const appPath of candidate.paths) {\n const full = path.join(dir, appPath)\n if (existsSync(full)) {\n return {\n detected: true,\n name: candidate.name,\n path: full,\n provider: candidate.provider,\n type: 'app',\n }\n }\n }\n }\n return {\n detected: false,\n name: candidate.name,\n provider: candidate.provider,\n type: 'app',\n }\n}\n\nfunction resolveCliPath(location: string): string {\n try {\n return realpathSync(location)\n } catch {\n return location\n }\n}\n\nfunction findCliLocation(candidate: CliCandidate): string | undefined {\n try {\n return execSync(`which ${candidate.command}`, {\n encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 5000,\n }).trim()\n } catch {\n for (const cliPath of candidate.paths ?? []) {\n if (existsSync(cliPath)) {\n return cliPath\n }\n }\n }\n}\n\nfunction detectCli(candidate: CliCandidate): AiClient {\n const location = findCliLocation(candidate)\n if (!location) {\n return {\n detected: false,\n name: candidate.name,\n provider: candidate.provider,\n type: 'cli',\n }\n }\n\n const resolvedLocation = resolveCliPath(location)\n let version: string | undefined\n if (candidate.versionFlag) {\n try {\n const output = execFileSync(resolvedLocation, [candidate.versionFlag], {\n encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 5000,\n }).trim()\n const match = /[\\d.]+/.exec(output)\n version = match?.[0]\n } catch {\n // version check failed, still detected\n }\n }\n\n return {\n detected: true,\n name: candidate.name,\n path: resolvedLocation,\n provider: candidate.provider,\n type: 'cli',\n version,\n }\n}\n\nfunction getVscodeExtensions(): Set<string> {\n try {\n const output = execSync('code --list-extensions', {\n encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 10_000,\n }).trim()\n return new Set(output.toLowerCase().split('\\n').map(e => e.trim()))\n } catch {\n return new Set()\n }\n}\n\nfunction detectVscode(candidate: VscodeCandidate, extensions: Set<string>): AiClient {\n const extensionId = candidate.extensionIds.find(id => extensions.has(id.toLowerCase()))\n const detected = Boolean(extensionId)\n return {\n detected,\n name: candidate.name,\n ...(extensionId ? { path: extensionId } : {}),\n provider: candidate.provider,\n type: 'vscode',\n }\n}\n\nconst APP_CANDIDATES: AppCandidate[] = [\n {\n name: 'Claude Desktop', paths: ['Claude.app'], provider: 'Anthropic',\n },\n {\n name: 'ChatGPT Desktop', paths: ['ChatGPT.app'], provider: 'OpenAI',\n },\n {\n name: 'Codex Desktop', paths: ['Codex.app', 'OpenAI Codex.app'], provider: 'OpenAI',\n },\n {\n name: 'Cursor', paths: ['Cursor.app', 'Cursor/Cursor.exe', 'cursor.desktop'], provider: 'Cursor',\n },\n {\n name: 'Grok Desktop', paths: ['Grok.app'], provider: 'xAI',\n },\n {\n name: 'Windsurf', paths: ['Windsurf.app', 'Windsurf/Windsurf.exe', 'windsurf.desktop'], provider: 'Windsurf',\n },\n {\n name: 'Gemini Desktop',\n paths: ['Gemini.app', 'Google Gemini.app'],\n provider: 'Google',\n },\n {\n name: 'Gemini in Android Studio', paths: ['Android Studio.app'], provider: 'Google',\n },\n {\n name: 'Kiro', paths: ['Kiro.app', 'Kiro/Kiro.exe', 'kiro.desktop'], provider: 'Kiro',\n },\n {\n name: 'Copilot Desktop', paths: ['Microsoft Copilot.app', 'Copilot.app'], provider: 'Microsoft',\n },\n {\n name: 'Ollama', paths: ['Ollama.app', 'Ollama/Ollama.exe', 'ollama.desktop'], provider: 'Ollama',\n },\n {\n name: 'LM Studio', paths: ['LM Studio.app'], provider: 'LM Studio',\n },\n {\n name: 'OpenCode', paths: ['OpenCode.app'], provider: 'OpenCode',\n },\n]\n\nconst CLI_CANDIDATES: CliCandidate[] = [\n {\n command: 'claude', name: 'Claude Code', provider: 'Anthropic', versionFlag: '--version',\n },\n {\n command: 'chatgpt', name: 'ChatGPT CLI', provider: 'OpenAI', versionFlag: '--version',\n },\n {\n command: 'codex', name: 'Codex CLI', provider: 'OpenAI', versionFlag: '--version',\n },\n {\n command: 'cursor-agent', name: 'Cursor Agent CLI', provider: 'Cursor', versionFlag: '--version',\n },\n {\n command: 'cursor',\n name: 'Cursor Editor CLI',\n paths: ['/Applications/Cursor.app/Contents/Resources/app/bin/cursor'],\n provider: 'Cursor',\n versionFlag: '--version',\n },\n {\n command: 'grok', name: 'Grok CLI', provider: 'xAI', versionFlag: '--version',\n },\n {\n command: 'windsurf',\n name: 'Windsurf CLI',\n paths: ['/Applications/Windsurf.app/Contents/Resources/app/bin/windsurf'],\n provider: 'Windsurf',\n versionFlag: '--version',\n },\n {\n command: 'gemini', name: 'Gemini CLI', provider: 'Google', versionFlag: '--version',\n },\n {\n command: 'kiro-cli', name: 'Kiro CLI', provider: 'Kiro', versionFlag: 'version',\n },\n {\n command: 'kiro', name: 'Kiro Editor CLI', provider: 'Kiro', versionFlag: '--version',\n },\n {\n command: 'copilot', name: 'GitHub Copilot CLI', provider: 'Microsoft', versionFlag: '--version',\n },\n {\n command: 'ollama',\n name: 'Ollama CLI',\n paths: ['/Applications/Ollama.app/Contents/Resources/ollama'],\n provider: 'Ollama',\n versionFlag: '--version',\n },\n {\n command: 'aider', name: 'Aider CLI', provider: 'Aider', versionFlag: '--version',\n },\n {\n command: 'cn', name: 'Continue CLI', provider: 'Continue', versionFlag: '--version',\n },\n {\n command: 'cline', name: 'Cline CLI', provider: 'Cline', versionFlag: '--version',\n },\n {\n command: 'droid', name: 'Factory Droid CLI', provider: 'Factory', versionFlag: '--version',\n },\n {\n command: 'lms', name: 'LM Studio CLI', provider: 'LM Studio', versionFlag: 'version',\n },\n {\n command: 'opencode', name: 'OpenCode CLI', provider: 'OpenCode', versionFlag: '--version',\n },\n]\n\nconst VSCODE_CANDIDATES: VscodeCandidate[] = [\n {\n extensionIds: ['anthropic.claude-code'], name: 'Claude Code Extension', provider: 'Anthropic',\n },\n {\n extensionIds: ['openai.chatgpt'], name: 'Codex IDE Extension', provider: 'OpenAI',\n },\n {\n extensionIds: ['codeium.codeium'], name: 'Windsurf / Codeium Extension', provider: 'Windsurf',\n },\n {\n extensionIds: ['github.copilot'], name: 'GitHub Copilot', provider: 'Microsoft',\n },\n {\n extensionIds: ['github.copilot-chat'], name: 'GitHub Copilot Chat', provider: 'Microsoft',\n },\n {\n extensionIds: ['google.geminicodeassist', 'google.gemini-code-assist'], name: 'Gemini Code Assist', provider: 'Google',\n },\n {\n extensionIds: ['continue.continue'], name: 'Continue', provider: 'Continue',\n },\n {\n extensionIds: ['saoudrizwan.claude-dev'], name: 'Cline', provider: 'Cline',\n },\n]\n\nfunction detectAll(): AiClient[] {\n const results: AiClient[] = []\n\n for (const candidate of APP_CANDIDATES) {\n results.push(detectApp(candidate))\n }\n\n for (const candidate of CLI_CANDIDATES) {\n results.push(detectCli(candidate))\n }\n\n const extensions = getVscodeExtensions()\n for (const candidate of VSCODE_CANDIDATES) {\n results.push(detectVscode(candidate, extensions))\n }\n\n return results\n}\n\nfunction printResults(results: AiClient[]): void {\n const providers = [\n 'Anthropic',\n 'OpenAI',\n 'Cursor',\n 'xAI',\n 'Windsurf',\n 'Google',\n 'Kiro',\n 'Microsoft',\n 'Ollama',\n 'Aider',\n 'Continue',\n 'Cline',\n 'Factory',\n 'LM Studio',\n 'OpenCode',\n ]\n\n for (const provider of providers) {\n const clients = results.filter(c => c.provider === provider)\n const found = clients.filter(c => c.detected)\n\n console.log(chalk.cyan(provider))\n\n if (found.length === 0) {\n console.log(chalk.gray(' (none detected)'))\n } else {\n for (const client of found) {\n const info = [client.path, client.version].filter(Boolean).join(' ')\n console.log(` ${chalk.green('+')} ${chalk.white(client.name.padEnd(28))} ${chalk.gray(info)}`)\n }\n }\n console.log()\n }\n\n const total = results.filter(c => c.detected).length\n console.log(chalk.white(`${total} AI client${total === 1 ? '' : 's'} detected`))\n}\n\nexport function detectAiClients(json: boolean): void {\n const results = detectAll()\n\n if (json) {\n console.log(JSON.stringify(results, null, 2))\n return\n }\n\n printResults(results)\n}\n"],"mappings":"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","names":[]}
@@ -1,61 +0,0 @@
1
- // src/actions/hash/algorithms/blockhash.ts
2
- import imghash from "imghash";
3
-
4
- // src/actions/hash/lib/hamming.ts
5
- function popcount8(byte) {
6
- let count = 0;
7
- let value = byte & 255;
8
- while (value !== 0) {
9
- count += value & 1;
10
- value >>>= 1;
11
- }
12
- return count;
13
- }
14
- function hammingHex(a, b) {
15
- if (a.length !== b.length) {
16
- throw new Error(`Hash length mismatch: ${a.length} vs ${b.length}`);
17
- }
18
- if (a.length % 2 !== 0) {
19
- throw new Error(`Hash hex length must be even, got ${a.length}`);
20
- }
21
- let dist = 0;
22
- for (let i = 0; i < a.length; i += 2) {
23
- const xa = Number.parseInt(a.slice(i, i + 2), 16);
24
- const xb = Number.parseInt(b.slice(i, i + 2), 16);
25
- if (Number.isNaN(xa) || Number.isNaN(xb)) {
26
- throw new TypeError(`Invalid hex at position ${i}: '${a.slice(i, i + 2)}' / '${b.slice(i, i + 2)}'`);
27
- }
28
- dist += popcount8(xa ^ xb);
29
- }
30
- return dist;
31
- }
32
-
33
- // src/actions/hash/algorithms/blockhash.ts
34
- var { hash: imghashFn } = imghash;
35
- var blockhashAlgorithm = {
36
- name: "blockhash",
37
- family: "perceptual-image",
38
- inputType: "image",
39
- async hash(input) {
40
- if (input.path !== void 0) {
41
- return await imghashFn(input.path, 8, "hex");
42
- }
43
- if (input.bytes !== void 0) {
44
- return await imghashFn(input.bytes, 8, "hex");
45
- }
46
- throw new Error("blockhash requires bytes or a path.");
47
- },
48
- async compare(a, b) {
49
- const dist = hammingHex(a, b);
50
- const bits = a.length / 2 * 8;
51
- return {
52
- distance: dist,
53
- similarity: 1 - dist / bits,
54
- metric: `hamming-${bits}`
55
- };
56
- }
57
- };
58
- export {
59
- blockhashAlgorithm
60
- };
61
- //# sourceMappingURL=blockhash.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/actions/hash/algorithms/blockhash.ts","../../../../src/actions/hash/lib/hamming.ts"],"sourcesContent":["import imghash from 'imghash'\n\nimport { hammingHex } from '../lib/hamming.ts'\nimport type { Algorithm } from './types.ts'\n\nconst { hash: imghashFn } = imghash\n\n/**\n * blockhash via the imghash package — defaults to 8×8 = 64-bit for cross-comparability\n * with phash/dhash. Imghash accepts both filepath and Buffer natively.\n */\nexport const blockhashAlgorithm: Algorithm = {\n name: 'blockhash',\n family: 'perceptual-image',\n inputType: 'image',\n async hash(input) {\n if (input.path !== undefined) {\n return await imghashFn(input.path, 8, 'hex')\n }\n if (input.bytes !== undefined) {\n return await imghashFn(input.bytes, 8, 'hex')\n }\n throw new Error('blockhash requires bytes or a path.')\n },\n async compare(a, b) {\n const dist = hammingHex(a, b)\n const bits = (a.length / 2) * 8\n return {\n distance: dist, similarity: 1 - dist / bits, metric: `hamming-${bits}`,\n }\n },\n}\n","/**\n * Population count for an 8-bit value (number of set bits).\n */\nfunction popcount8(byte: number): number {\n let count = 0\n let value = byte & 0xff\n while (value !== 0) {\n count += value & 1\n value >>>= 1\n }\n return count\n}\n\n/**\n * Hamming distance between two equal-length lowercase-hex strings.\n * Throws when the lengths differ.\n */\nexport function hammingHex(a: string, b: string): number {\n if (a.length !== b.length) {\n throw new Error(`Hash length mismatch: ${a.length} vs ${b.length}`)\n }\n if (a.length % 2 !== 0) {\n throw new Error(`Hash hex length must be even, got ${a.length}`)\n }\n let dist = 0\n for (let i = 0; i < a.length; i += 2) {\n const xa = Number.parseInt(a.slice(i, i + 2), 16)\n const xb = Number.parseInt(b.slice(i, i + 2), 16)\n if (Number.isNaN(xa) || Number.isNaN(xb)) {\n throw new TypeError(`Invalid hex at position ${i}: '${a.slice(i, i + 2)}' / '${b.slice(i, i + 2)}'`)\n }\n dist += popcount8(xa ^ xb)\n }\n return dist\n}\n\n/**\n * Bit-length of an even-length hex string.\n */\nexport function bitLengthHex(hex: string): number {\n return (hex.length / 2) * 8\n}\n\n/**\n * Population count for a 32-bit unsigned value (number of set bits).\n * Uses the parallel-prefix bit trick.\n */\nexport function popcount32(value: number): number {\n let v = Math.trunc(value)\n v = v - ((v >>> 1) & 0x55_55_55_55)\n v = (v & 0x33_33_33_33) + ((v >>> 2) & 0x33_33_33_33)\n v = (v + (v >>> 4)) & 0x0f_0f_0f_0f\n return ((v * 0x01_01_01_01) >>> 24) & 0xff\n}\n"],"mappings":";AAAA,OAAO,aAAa;;;ACGpB,SAAS,UAAU,MAAsB;AACvC,MAAI,QAAQ;AACZ,MAAI,QAAQ,OAAO;AACnB,SAAO,UAAU,GAAG;AAClB,aAAS,QAAQ;AACjB,eAAW;AAAA,EACb;AACA,SAAO;AACT;AAMO,SAAS,WAAW,GAAW,GAAmB;AACvD,MAAI,EAAE,WAAW,EAAE,QAAQ;AACzB,UAAM,IAAI,MAAM,yBAAyB,EAAE,MAAM,OAAO,EAAE,MAAM,EAAE;AAAA,EACpE;AACA,MAAI,EAAE,SAAS,MAAM,GAAG;AACtB,UAAM,IAAI,MAAM,qCAAqC,EAAE,MAAM,EAAE;AAAA,EACjE;AACA,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,GAAG;AACpC,UAAM,KAAK,OAAO,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AAChD,UAAM,KAAK,OAAO,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AAChD,QAAI,OAAO,MAAM,EAAE,KAAK,OAAO,MAAM,EAAE,GAAG;AACxC,YAAM,IAAI,UAAU,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG;AAAA,IACrG;AACA,YAAQ,UAAU,KAAK,EAAE;AAAA,EAC3B;AACA,SAAO;AACT;;;AD7BA,IAAM,EAAE,MAAM,UAAU,IAAI;AAMrB,IAAM,qBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,MAAM,KAAK,OAAO;AAChB,QAAI,MAAM,SAAS,QAAW;AAC5B,aAAO,MAAM,UAAU,MAAM,MAAM,GAAG,KAAK;AAAA,IAC7C;AACA,QAAI,MAAM,UAAU,QAAW;AAC7B,aAAO,MAAM,UAAU,MAAM,OAAO,GAAG,KAAK;AAAA,IAC9C;AACA,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AAAA,EACA,MAAM,QAAQ,GAAG,GAAG;AAClB,UAAM,OAAO,WAAW,GAAG,CAAC;AAC5B,UAAM,OAAQ,EAAE,SAAS,IAAK;AAC9B,WAAO;AAAA,MACL,UAAU;AAAA,MAAM,YAAY,IAAI,OAAO;AAAA,MAAM,QAAQ,WAAW,IAAI;AAAA,IACtE;AAAA,EACF;AACF;","names":[]}