@xylabs/aries 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/README.md +693 -0
  2. package/dist/actions/audit/auditPaths.mjs +22 -0
  3. package/dist/actions/audit/auditPaths.mjs.map +1 -0
  4. package/dist/actions/audit/index.mjs +739 -0
  5. package/dist/actions/audit/index.mjs.map +1 -0
  6. package/dist/actions/audit/installPlugin.mjs +298 -0
  7. package/dist/actions/audit/installPlugin.mjs.map +1 -0
  8. package/dist/actions/audit/listSessions.mjs +93 -0
  9. package/dist/actions/audit/listSessions.mjs.map +1 -0
  10. package/dist/actions/audit/openAuditDir.mjs +44 -0
  11. package/dist/actions/audit/openAuditDir.mjs.map +1 -0
  12. package/dist/actions/audit/searchAudit.mjs +77 -0
  13. package/dist/actions/audit/searchAudit.mjs.map +1 -0
  14. package/dist/actions/audit/showAiMeta.mjs +105 -0
  15. package/dist/actions/audit/showAiMeta.mjs.map +1 -0
  16. package/dist/actions/audit/showSession.mjs +105 -0
  17. package/dist/actions/audit/showSession.mjs.map +1 -0
  18. package/dist/actions/audit/statusAudit.mjs +98 -0
  19. package/dist/actions/audit/statusAudit.mjs.map +1 -0
  20. package/dist/actions/clamp/clampAudit.mjs +53 -0
  21. package/dist/actions/clamp/clampAudit.mjs.map +1 -0
  22. package/dist/actions/clamp/index.mjs +2258 -0
  23. package/dist/actions/clamp/index.mjs.map +1 -0
  24. package/dist/actions/clamp/ipcServer.mjs +55 -0
  25. package/dist/actions/clamp/ipcServer.mjs.map +1 -0
  26. package/dist/actions/clamp/policyManagement.mjs +144 -0
  27. package/dist/actions/clamp/policyManagement.mjs.map +1 -0
  28. package/dist/actions/clamp/promptUser.mjs +91 -0
  29. package/dist/actions/clamp/promptUser.mjs.map +1 -0
  30. package/dist/actions/clamp/runClamped.mjs +2107 -0
  31. package/dist/actions/clamp/runClamped.mjs.map +1 -0
  32. package/dist/actions/clamp/sandboxExec.mjs +1612 -0
  33. package/dist/actions/clamp/sandboxExec.mjs.map +1 -0
  34. package/dist/actions/clamp/shellEnvSetup.mjs +59 -0
  35. package/dist/actions/clamp/shellEnvSetup.mjs.map +1 -0
  36. package/dist/actions/clamp/shimGenerator.mjs +68 -0
  37. package/dist/actions/clamp/shimGenerator.mjs.map +1 -0
  38. package/dist/actions/clamp/terminalRenderer.mjs +145 -0
  39. package/dist/actions/clamp/terminalRenderer.mjs.map +1 -0
  40. package/dist/actions/datalake/audit/auditLog.mjs +191 -0
  41. package/dist/actions/datalake/audit/auditLog.mjs.map +1 -0
  42. package/dist/actions/datalake/createDatalake.mjs +127 -0
  43. package/dist/actions/datalake/createDatalake.mjs.map +1 -0
  44. package/dist/actions/datalake/describeDatalake.mjs +159 -0
  45. package/dist/actions/datalake/describeDatalake.mjs.map +1 -0
  46. package/dist/actions/datalake/destroyDatalake.mjs +34 -0
  47. package/dist/actions/datalake/destroyDatalake.mjs.map +1 -0
  48. package/dist/actions/datalake/dev/downDevServer.mjs +102 -0
  49. package/dist/actions/datalake/dev/downDevServer.mjs.map +1 -0
  50. package/dist/actions/datalake/dev/index.mjs +369 -0
  51. package/dist/actions/datalake/dev/index.mjs.map +1 -0
  52. package/dist/actions/datalake/dev/logsDevServer.mjs +44 -0
  53. package/dist/actions/datalake/dev/logsDevServer.mjs.map +1 -0
  54. package/dist/actions/datalake/dev/paths.mjs +25 -0
  55. package/dist/actions/datalake/dev/paths.mjs.map +1 -0
  56. package/dist/actions/datalake/dev/resetDevServer.mjs +118 -0
  57. package/dist/actions/datalake/dev/resetDevServer.mjs.map +1 -0
  58. package/dist/actions/datalake/dev/resolveServerBin.mjs +26 -0
  59. package/dist/actions/datalake/dev/resolveServerBin.mjs.map +1 -0
  60. package/dist/actions/datalake/dev/state.mjs +62 -0
  61. package/dist/actions/datalake/dev/state.mjs.map +1 -0
  62. package/dist/actions/datalake/dev/statusDevServer.mjs +101 -0
  63. package/dist/actions/datalake/dev/statusDevServer.mjs.map +1 -0
  64. package/dist/actions/datalake/dev/upDevServer.mjs +221 -0
  65. package/dist/actions/datalake/dev/upDevServer.mjs.map +1 -0
  66. package/dist/actions/datalake/dev/waitForHealth.mjs +22 -0
  67. package/dist/actions/datalake/dev/waitForHealth.mjs.map +1 -0
  68. package/dist/actions/datalake/formatters.mjs +90 -0
  69. package/dist/actions/datalake/formatters.mjs.map +1 -0
  70. package/dist/actions/datalake/grantAccess.mjs +116 -0
  71. package/dist/actions/datalake/grantAccess.mjs.map +1 -0
  72. package/dist/actions/datalake/index.mjs +361 -0
  73. package/dist/actions/datalake/index.mjs.map +1 -0
  74. package/dist/actions/datalake/listDatalakes.mjs +54 -0
  75. package/dist/actions/datalake/listDatalakes.mjs.map +1 -0
  76. package/dist/actions/datalake/login.mjs +20 -0
  77. package/dist/actions/datalake/login.mjs.map +1 -0
  78. package/dist/actions/datalake/logout.mjs +11 -0
  79. package/dist/actions/datalake/logout.mjs.map +1 -0
  80. package/dist/actions/datalake/mintToken.mjs +37 -0
  81. package/dist/actions/datalake/mintToken.mjs.map +1 -0
  82. package/dist/actions/datalake/parseSize.mjs +21 -0
  83. package/dist/actions/datalake/parseSize.mjs.map +1 -0
  84. package/dist/actions/datalake/payloads/fetchPayload.mjs +76 -0
  85. package/dist/actions/datalake/payloads/fetchPayload.mjs.map +1 -0
  86. package/dist/actions/datalake/payloads/index.mjs +271 -0
  87. package/dist/actions/datalake/payloads/index.mjs.map +1 -0
  88. package/dist/actions/datalake/payloads/mintAndConnect.mjs +46 -0
  89. package/dist/actions/datalake/payloads/mintAndConnect.mjs.map +1 -0
  90. package/dist/actions/datalake/payloads/parsePayloadsFile.mjs +71 -0
  91. package/dist/actions/datalake/payloads/parsePayloadsFile.mjs.map +1 -0
  92. package/dist/actions/datalake/payloads/pushPayloads.mjs +181 -0
  93. package/dist/actions/datalake/payloads/pushPayloads.mjs.map +1 -0
  94. package/dist/actions/datalake/payloads/tailPayloads.mjs +106 -0
  95. package/dist/actions/datalake/payloads/tailPayloads.mjs.map +1 -0
  96. package/dist/actions/datalake/resolveTarget.mjs +15 -0
  97. package/dist/actions/datalake/resolveTarget.mjs.map +1 -0
  98. package/dist/actions/datalake/revokeAccess.mjs +108 -0
  99. package/dist/actions/datalake/revokeAccess.mjs.map +1 -0
  100. package/dist/actions/datalake/useDatalake.mjs +22 -0
  101. package/dist/actions/datalake/useDatalake.mjs.map +1 -0
  102. package/dist/actions/detect/detectAiClients.mjs +405 -0
  103. package/dist/actions/detect/detectAiClients.mjs.map +1 -0
  104. package/dist/actions/detect/index.mjs +405 -0
  105. package/dist/actions/detect/index.mjs.map +1 -0
  106. package/dist/actions/hash/algorithms/blockhash.mjs +61 -0
  107. package/dist/actions/hash/algorithms/blockhash.mjs.map +1 -0
  108. package/dist/actions/hash/algorithms/chromaprint.mjs +205 -0
  109. package/dist/actions/hash/algorithms/chromaprint.mjs.map +1 -0
  110. package/dist/actions/hash/algorithms/dhash.mjs +75 -0
  111. package/dist/actions/hash/algorithms/dhash.mjs.map +1 -0
  112. package/dist/actions/hash/algorithms/index.mjs +818 -0
  113. package/dist/actions/hash/algorithms/index.mjs.map +1 -0
  114. package/dist/actions/hash/algorithms/nilsimsa.mjs +27 -0
  115. package/dist/actions/hash/algorithms/nilsimsa.mjs.map +1 -0
  116. package/dist/actions/hash/algorithms/pdq.mjs +83 -0
  117. package/dist/actions/hash/algorithms/pdq.mjs.map +1 -0
  118. package/dist/actions/hash/algorithms/phash.mjs +71 -0
  119. package/dist/actions/hash/algorithms/phash.mjs.map +1 -0
  120. package/dist/actions/hash/algorithms/sha256.mjs +24 -0
  121. package/dist/actions/hash/algorithms/sha256.mjs.map +1 -0
  122. package/dist/actions/hash/algorithms/ssdeep.mjs +203 -0
  123. package/dist/actions/hash/algorithms/ssdeep.mjs.map +1 -0
  124. package/dist/actions/hash/algorithms/tlsh.mjs +66 -0
  125. package/dist/actions/hash/algorithms/tlsh.mjs.map +1 -0
  126. package/dist/actions/hash/algorithms/types.mjs +1 -0
  127. package/dist/actions/hash/algorithms/types.mjs.map +1 -0
  128. package/dist/actions/hash/algorithms/videoFrames.mjs +404 -0
  129. package/dist/actions/hash/algorithms/videoFrames.mjs.map +1 -0
  130. package/dist/actions/hash/algorithms/xyo.mjs +30 -0
  131. package/dist/actions/hash/algorithms/xyo.mjs.map +1 -0
  132. package/dist/actions/hash/compareHashes.mjs +823 -0
  133. package/dist/actions/hash/compareHashes.mjs.map +1 -0
  134. package/dist/actions/hash/hashInput.mjs +868 -0
  135. package/dist/actions/hash/hashInput.mjs.map +1 -0
  136. package/dist/actions/hash/index.mjs +881 -0
  137. package/dist/actions/hash/index.mjs.map +1 -0
  138. package/dist/actions/hash/lib/hamming.mjs +44 -0
  139. package/dist/actions/hash/lib/hamming.mjs.map +1 -0
  140. package/dist/actions/hash/lib/levenshtein.mjs +36 -0
  141. package/dist/actions/hash/lib/levenshtein.mjs.map +1 -0
  142. package/dist/actions/hash/lib/runBinary.mjs +54 -0
  143. package/dist/actions/hash/lib/runBinary.mjs.map +1 -0
  144. package/dist/actions/hash/lib/which.mjs +36 -0
  145. package/dist/actions/hash/lib/which.mjs.map +1 -0
  146. package/dist/actions/hash/lib/withTempfile.mjs +19 -0
  147. package/dist/actions/hash/lib/withTempfile.mjs.map +1 -0
  148. package/dist/actions/index.mjs +4615 -0
  149. package/dist/actions/index.mjs.map +1 -0
  150. package/dist/actions/printVersion.mjs +12 -0
  151. package/dist/actions/printVersion.mjs.map +1 -0
  152. package/dist/actions/sync/index.mjs +51 -0
  153. package/dist/actions/sync/index.mjs.map +1 -0
  154. package/dist/actions/sync/syncAiConfig.mjs +51 -0
  155. package/dist/actions/sync/syncAiConfig.mjs.map +1 -0
  156. package/dist/actions/wallet/account/deriveAndAdd.mjs +394 -0
  157. package/dist/actions/wallet/account/deriveAndAdd.mjs.map +1 -0
  158. package/dist/actions/wallet/account/getActiveWallet.mjs +338 -0
  159. package/dist/actions/wallet/account/getActiveWallet.mjs.map +1 -0
  160. package/dist/actions/wallet/account/labelAccount.mjs +389 -0
  161. package/dist/actions/wallet/account/labelAccount.mjs.map +1 -0
  162. package/dist/actions/wallet/account/listAccounts.mjs +374 -0
  163. package/dist/actions/wallet/account/listAccounts.mjs.map +1 -0
  164. package/dist/actions/wallet/account/removeAccount.mjs +384 -0
  165. package/dist/actions/wallet/account/removeAccount.mjs.map +1 -0
  166. package/dist/actions/wallet/account/showAccount.mjs +368 -0
  167. package/dist/actions/wallet/account/showAccount.mjs.map +1 -0
  168. package/dist/actions/wallet/addressBook/storage.mjs +110 -0
  169. package/dist/actions/wallet/addressBook/storage.mjs.map +1 -0
  170. package/dist/actions/wallet/backup/exportBackup.mjs +93 -0
  171. package/dist/actions/wallet/backup/exportBackup.mjs.map +1 -0
  172. package/dist/actions/wallet/backup/importBackup.mjs +142 -0
  173. package/dist/actions/wallet/backup/importBackup.mjs.map +1 -0
  174. package/dist/actions/wallet/balance/getBalance.mjs +434 -0
  175. package/dist/actions/wallet/balance/getBalance.mjs.map +1 -0
  176. package/dist/actions/wallet/client/walletClient.mjs +64 -0
  177. package/dist/actions/wallet/client/walletClient.mjs.map +1 -0
  178. package/dist/actions/wallet/contact/contactActions.mjs +120 -0
  179. package/dist/actions/wallet/contact/contactActions.mjs.map +1 -0
  180. package/dist/actions/wallet/contact/storage.mjs +69 -0
  181. package/dist/actions/wallet/contact/storage.mjs.map +1 -0
  182. package/dist/actions/wallet/index.mjs +1439 -0
  183. package/dist/actions/wallet/index.mjs.map +1 -0
  184. package/dist/actions/wallet/network/networkActions.mjs +137 -0
  185. package/dist/actions/wallet/network/networkActions.mjs.map +1 -0
  186. package/dist/actions/wallet/network/storage.mjs +93 -0
  187. package/dist/actions/wallet/network/storage.mjs.map +1 -0
  188. package/dist/actions/wallet/password/changePassword.mjs +282 -0
  189. package/dist/actions/wallet/password/changePassword.mjs.map +1 -0
  190. package/dist/actions/wallet/password/getActiveKey.mjs +297 -0
  191. package/dist/actions/wallet/password/getActiveKey.mjs.map +1 -0
  192. package/dist/actions/wallet/password/initOrUnlock.mjs +337 -0
  193. package/dist/actions/wallet/password/initOrUnlock.mjs.map +1 -0
  194. package/dist/actions/wallet/password/passwordStorage.mjs +69 -0
  195. package/dist/actions/wallet/password/passwordStorage.mjs.map +1 -0
  196. package/dist/actions/wallet/password/setPassword.mjs +138 -0
  197. package/dist/actions/wallet/password/setPassword.mjs.map +1 -0
  198. package/dist/actions/wallet/password/validatePassword.mjs +123 -0
  199. package/dist/actions/wallet/password/validatePassword.mjs.map +1 -0
  200. package/dist/actions/wallet/passwordKey.mjs +87 -0
  201. package/dist/actions/wallet/passwordKey.mjs.map +1 -0
  202. package/dist/actions/wallet/paths.mjs +26 -0
  203. package/dist/actions/wallet/paths.mjs.map +1 -0
  204. package/dist/actions/wallet/prompt.mjs +93 -0
  205. package/dist/actions/wallet/prompt.mjs.map +1 -0
  206. package/dist/actions/wallet/seedPhrase/createPhrase.mjs +392 -0
  207. package/dist/actions/wallet/seedPhrase/createPhrase.mjs.map +1 -0
  208. package/dist/actions/wallet/seedPhrase/exportPhrase.mjs +334 -0
  209. package/dist/actions/wallet/seedPhrase/exportPhrase.mjs.map +1 -0
  210. package/dist/actions/wallet/seedPhrase/idGen.mjs +11 -0
  211. package/dist/actions/wallet/seedPhrase/idGen.mjs.map +1 -0
  212. package/dist/actions/wallet/seedPhrase/importPhrase.mjs +393 -0
  213. package/dist/actions/wallet/seedPhrase/importPhrase.mjs.map +1 -0
  214. package/dist/actions/wallet/seedPhrase/listPhrases.mjs +62 -0
  215. package/dist/actions/wallet/seedPhrase/listPhrases.mjs.map +1 -0
  216. package/dist/actions/wallet/seedPhrase/phraseStorage.mjs +89 -0
  217. package/dist/actions/wallet/seedPhrase/phraseStorage.mjs.map +1 -0
  218. package/dist/actions/wallet/seedPhrase/removePhrase.mjs +366 -0
  219. package/dist/actions/wallet/seedPhrase/removePhrase.mjs.map +1 -0
  220. package/dist/actions/wallet/seedPhrase/renamePhrase.mjs +78 -0
  221. package/dist/actions/wallet/seedPhrase/renamePhrase.mjs.map +1 -0
  222. package/dist/actions/wallet/seedPhrase/types.mjs +1 -0
  223. package/dist/actions/wallet/seedPhrase/types.mjs.map +1 -0
  224. package/dist/actions/wallet/seedPhrase/usePhrase.mjs +83 -0
  225. package/dist/actions/wallet/seedPhrase/usePhrase.mjs.map +1 -0
  226. package/dist/actions/wallet/session/machineId.mjs +145 -0
  227. package/dist/actions/wallet/session/machineId.mjs.map +1 -0
  228. package/dist/actions/wallet/session/sessionCache.mjs +221 -0
  229. package/dist/actions/wallet/session/sessionCache.mjs.map +1 -0
  230. package/dist/actions/wallet/session/unlock.mjs +307 -0
  231. package/dist/actions/wallet/session/unlock.mjs.map +1 -0
  232. package/dist/actions/wallet/sign/signPayload.mjs +637 -0
  233. package/dist/actions/wallet/sign/signPayload.mjs.map +1 -0
  234. package/dist/actions/wallet/storage.mjs +51 -0
  235. package/dist/actions/wallet/storage.mjs.map +1 -0
  236. package/dist/actions/wallet/transaction/broadcastTransaction.mjs +453 -0
  237. package/dist/actions/wallet/transaction/broadcastTransaction.mjs.map +1 -0
  238. package/dist/actions/wallet/transaction/sendTransaction.mjs +457 -0
  239. package/dist/actions/wallet/transaction/sendTransaction.mjs.map +1 -0
  240. package/dist/actions/wallet/transaction/signTransactionFile.mjs +378 -0
  241. package/dist/actions/wallet/transaction/signTransactionFile.mjs.map +1 -0
  242. package/dist/actions/xyo/index.mjs +138 -0
  243. package/dist/actions/xyo/index.mjs.map +1 -0
  244. package/dist/actions/xyo/transaction/index.mjs +138 -0
  245. package/dist/actions/xyo/transaction/index.mjs.map +1 -0
  246. package/dist/actions/xyo/transaction/validateTransactions.mjs +138 -0
  247. package/dist/actions/xyo/transaction/validateTransactions.mjs.map +1 -0
  248. package/dist/aries.mjs +8466 -0
  249. package/dist/aries.mjs.map +1 -0
  250. package/dist/bin/aries.mjs +8472 -0
  251. package/dist/bin/aries.mjs.map +1 -0
  252. package/dist/commands/aiCommand.mjs +492 -0
  253. package/dist/commands/aiCommand.mjs.map +1 -0
  254. package/dist/commands/auditAiCommand.mjs +119 -0
  255. package/dist/commands/auditAiCommand.mjs.map +1 -0
  256. package/dist/commands/auditCommand.mjs +857 -0
  257. package/dist/commands/auditCommand.mjs.map +1 -0
  258. package/dist/commands/auditInstallCommand.mjs +324 -0
  259. package/dist/commands/auditInstallCommand.mjs.map +1 -0
  260. package/dist/commands/auditListCommand.mjs +107 -0
  261. package/dist/commands/auditListCommand.mjs.map +1 -0
  262. package/dist/commands/auditOpenCommand.mjs +51 -0
  263. package/dist/commands/auditOpenCommand.mjs.map +1 -0
  264. package/dist/commands/auditSearchCommand.mjs +98 -0
  265. package/dist/commands/auditSearchCommand.mjs.map +1 -0
  266. package/dist/commands/auditShowCommand.mjs +123 -0
  267. package/dist/commands/auditShowCommand.mjs.map +1 -0
  268. package/dist/commands/auditStatusCommand.mjs +105 -0
  269. package/dist/commands/auditStatusCommand.mjs.map +1 -0
  270. package/dist/commands/clampCommand.mjs +2328 -0
  271. package/dist/commands/clampCommand.mjs.map +1 -0
  272. package/dist/commands/clampPolicyCommand.mjs +184 -0
  273. package/dist/commands/clampPolicyCommand.mjs.map +1 -0
  274. package/dist/commands/clampPolicyInitCommand.mjs +63 -0
  275. package/dist/commands/clampPolicyInitCommand.mjs.map +1 -0
  276. package/dist/commands/clampPolicyListCommand.mjs +56 -0
  277. package/dist/commands/clampPolicyListCommand.mjs.map +1 -0
  278. package/dist/commands/clampPolicyShowCommand.mjs +83 -0
  279. package/dist/commands/clampPolicyShowCommand.mjs.map +1 -0
  280. package/dist/commands/clampRunCommand.mjs +2137 -0
  281. package/dist/commands/clampRunCommand.mjs.map +1 -0
  282. package/dist/commands/datalakeAuditCommand.mjs +273 -0
  283. package/dist/commands/datalakeAuditCommand.mjs.map +1 -0
  284. package/dist/commands/datalakeCommand.mjs +1637 -0
  285. package/dist/commands/datalakeCommand.mjs.map +1 -0
  286. package/dist/commands/datalakeCreateCommand.mjs +189 -0
  287. package/dist/commands/datalakeCreateCommand.mjs.map +1 -0
  288. package/dist/commands/datalakeDescribeCommand.mjs +172 -0
  289. package/dist/commands/datalakeDescribeCommand.mjs.map +1 -0
  290. package/dist/commands/datalakeDestroyCommand.mjs +53 -0
  291. package/dist/commands/datalakeDestroyCommand.mjs.map +1 -0
  292. package/dist/commands/datalakeDevCommand.mjs +470 -0
  293. package/dist/commands/datalakeDevCommand.mjs.map +1 -0
  294. package/dist/commands/datalakeDevDownCommand.mjs +111 -0
  295. package/dist/commands/datalakeDevDownCommand.mjs.map +1 -0
  296. package/dist/commands/datalakeDevLogsCommand.mjs +65 -0
  297. package/dist/commands/datalakeDevLogsCommand.mjs.map +1 -0
  298. package/dist/commands/datalakeDevResetCommand.mjs +125 -0
  299. package/dist/commands/datalakeDevResetCommand.mjs.map +1 -0
  300. package/dist/commands/datalakeDevStatusCommand.mjs +110 -0
  301. package/dist/commands/datalakeDevStatusCommand.mjs.map +1 -0
  302. package/dist/commands/datalakeDevUpCommand.mjs +268 -0
  303. package/dist/commands/datalakeDevUpCommand.mjs.map +1 -0
  304. package/dist/commands/datalakeFetchCommand.mjs +106 -0
  305. package/dist/commands/datalakeFetchCommand.mjs.map +1 -0
  306. package/dist/commands/datalakeGrantCommand.mjs +147 -0
  307. package/dist/commands/datalakeGrantCommand.mjs.map +1 -0
  308. package/dist/commands/datalakeListCommand.mjs +61 -0
  309. package/dist/commands/datalakeListCommand.mjs.map +1 -0
  310. package/dist/commands/datalakeLoginCommand.mjs +39 -0
  311. package/dist/commands/datalakeLoginCommand.mjs.map +1 -0
  312. package/dist/commands/datalakeLogoutCommand.mjs +20 -0
  313. package/dist/commands/datalakeLogoutCommand.mjs.map +1 -0
  314. package/dist/commands/datalakePushCommand.mjs +214 -0
  315. package/dist/commands/datalakePushCommand.mjs.map +1 -0
  316. package/dist/commands/datalakeRevokeCommand.mjs +127 -0
  317. package/dist/commands/datalakeRevokeCommand.mjs.map +1 -0
  318. package/dist/commands/datalakeTailCommand.mjs +144 -0
  319. package/dist/commands/datalakeTailCommand.mjs.map +1 -0
  320. package/dist/commands/datalakeTokenCommand.mjs +61 -0
  321. package/dist/commands/datalakeTokenCommand.mjs.map +1 -0
  322. package/dist/commands/datalakeUseCommand.mjs +35 -0
  323. package/dist/commands/datalakeUseCommand.mjs.map +1 -0
  324. package/dist/commands/detectCommand.mjs +419 -0
  325. package/dist/commands/detectCommand.mjs.map +1 -0
  326. package/dist/commands/hashCommand.mjs +976 -0
  327. package/dist/commands/hashCommand.mjs.map +1 -0
  328. package/dist/commands/hashCompareCommand.mjs +865 -0
  329. package/dist/commands/hashCompareCommand.mjs.map +1 -0
  330. package/dist/commands/index.mjs +8461 -0
  331. package/dist/commands/index.mjs.map +1 -0
  332. package/dist/commands/syncCommand.mjs +66 -0
  333. package/dist/commands/syncCommand.mjs.map +1 -0
  334. package/dist/commands/versionCommand.mjs +24 -0
  335. package/dist/commands/versionCommand.mjs.map +1 -0
  336. package/dist/commands/walletAccountCommand.mjs +536 -0
  337. package/dist/commands/walletAccountCommand.mjs.map +1 -0
  338. package/dist/commands/walletAccountDeriveCommand.mjs +415 -0
  339. package/dist/commands/walletAccountDeriveCommand.mjs.map +1 -0
  340. package/dist/commands/walletAccountLabelCommand.mjs +405 -0
  341. package/dist/commands/walletAccountLabelCommand.mjs.map +1 -0
  342. package/dist/commands/walletAccountListCommand.mjs +381 -0
  343. package/dist/commands/walletAccountListCommand.mjs.map +1 -0
  344. package/dist/commands/walletAccountRemoveCommand.mjs +396 -0
  345. package/dist/commands/walletAccountRemoveCommand.mjs.map +1 -0
  346. package/dist/commands/walletAccountShowCommand.mjs +380 -0
  347. package/dist/commands/walletAccountShowCommand.mjs.map +1 -0
  348. package/dist/commands/walletBackupCommand.mjs +222 -0
  349. package/dist/commands/walletBackupCommand.mjs.map +1 -0
  350. package/dist/commands/walletBackupExportCommand.mjs +107 -0
  351. package/dist/commands/walletBackupExportCommand.mjs.map +1 -0
  352. package/dist/commands/walletBackupImportCommand.mjs +154 -0
  353. package/dist/commands/walletBackupImportCommand.mjs.map +1 -0
  354. package/dist/commands/walletBalanceCommand.mjs +448 -0
  355. package/dist/commands/walletBalanceCommand.mjs.map +1 -0
  356. package/dist/commands/walletCommand.mjs +1968 -0
  357. package/dist/commands/walletCommand.mjs.map +1 -0
  358. package/dist/commands/walletContactAddCommand.mjs +111 -0
  359. package/dist/commands/walletContactAddCommand.mjs.map +1 -0
  360. package/dist/commands/walletContactCommand.mjs +184 -0
  361. package/dist/commands/walletContactCommand.mjs.map +1 -0
  362. package/dist/commands/walletContactListCommand.mjs +66 -0
  363. package/dist/commands/walletContactListCommand.mjs.map +1 -0
  364. package/dist/commands/walletContactRemoveCommand.mjs +97 -0
  365. package/dist/commands/walletContactRemoveCommand.mjs.map +1 -0
  366. package/dist/commands/walletContactRenameCommand.mjs +114 -0
  367. package/dist/commands/walletContactRenameCommand.mjs.map +1 -0
  368. package/dist/commands/walletCreateCommand.mjs +407 -0
  369. package/dist/commands/walletCreateCommand.mjs.map +1 -0
  370. package/dist/commands/walletExportCommand.mjs +345 -0
  371. package/dist/commands/walletExportCommand.mjs.map +1 -0
  372. package/dist/commands/walletImportCommand.mjs +413 -0
  373. package/dist/commands/walletImportCommand.mjs.map +1 -0
  374. package/dist/commands/walletListCommand.mjs +69 -0
  375. package/dist/commands/walletListCommand.mjs.map +1 -0
  376. package/dist/commands/walletLockCommand.mjs +56 -0
  377. package/dist/commands/walletLockCommand.mjs.map +1 -0
  378. package/dist/commands/walletNetworkAddCommand.mjs +131 -0
  379. package/dist/commands/walletNetworkAddCommand.mjs.map +1 -0
  380. package/dist/commands/walletNetworkCommand.mjs +206 -0
  381. package/dist/commands/walletNetworkCommand.mjs.map +1 -0
  382. package/dist/commands/walletNetworkListCommand.mjs +104 -0
  383. package/dist/commands/walletNetworkListCommand.mjs.map +1 -0
  384. package/dist/commands/walletNetworkRemoveCommand.mjs +112 -0
  385. package/dist/commands/walletNetworkRemoveCommand.mjs.map +1 -0
  386. package/dist/commands/walletNetworkUseCommand.mjs +110 -0
  387. package/dist/commands/walletNetworkUseCommand.mjs.map +1 -0
  388. package/dist/commands/walletPasswordChangeCommand.mjs +291 -0
  389. package/dist/commands/walletPasswordChangeCommand.mjs.map +1 -0
  390. package/dist/commands/walletPasswordCommand.mjs +301 -0
  391. package/dist/commands/walletPasswordCommand.mjs.map +1 -0
  392. package/dist/commands/walletRemoveCommand.mjs +378 -0
  393. package/dist/commands/walletRemoveCommand.mjs.map +1 -0
  394. package/dist/commands/walletRenameCommand.mjs +94 -0
  395. package/dist/commands/walletRenameCommand.mjs.map +1 -0
  396. package/dist/commands/walletSignCommand.mjs +662 -0
  397. package/dist/commands/walletSignCommand.mjs.map +1 -0
  398. package/dist/commands/walletTxBroadcastCommand.mjs +473 -0
  399. package/dist/commands/walletTxBroadcastCommand.mjs.map +1 -0
  400. package/dist/commands/walletTxCommand.mjs +612 -0
  401. package/dist/commands/walletTxCommand.mjs.map +1 -0
  402. package/dist/commands/walletTxSendCommand.mjs +492 -0
  403. package/dist/commands/walletTxSendCommand.mjs.map +1 -0
  404. package/dist/commands/walletTxSignCommand.mjs +403 -0
  405. package/dist/commands/walletTxSignCommand.mjs.map +1 -0
  406. package/dist/commands/walletUnlockCommand.mjs +308 -0
  407. package/dist/commands/walletUnlockCommand.mjs.map +1 -0
  408. package/dist/commands/walletUseCommand.mjs +95 -0
  409. package/dist/commands/walletUseCommand.mjs.map +1 -0
  410. package/dist/commands/xyoCommand.mjs +188 -0
  411. package/dist/commands/xyoCommand.mjs.map +1 -0
  412. package/dist/commands/xyoTxCommand.mjs +178 -0
  413. package/dist/commands/xyoTxCommand.mjs.map +1 -0
  414. package/dist/commands/xyoTxValidateCommand.mjs +168 -0
  415. package/dist/commands/xyoTxValidateCommand.mjs.map +1 -0
  416. package/dist/index.d.ts +3 -0
  417. package/dist/index.mjs +8466 -0
  418. package/dist/index.mjs.map +1 -0
  419. package/dist/types/modules.d.mjs +1 -0
  420. package/dist/types/modules.d.mjs.map +1 -0
  421. package/package.json +197 -0
@@ -0,0 +1,492 @@
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
+
403
+ // src/commands/detectCommand.ts
404
+ var detectCommand = {
405
+ command: "detect",
406
+ describe: "Scan for installed AI clients",
407
+ builder: (yargs) => yargs.option("json", {
408
+ type: "boolean",
409
+ default: false,
410
+ describe: "Output as JSON"
411
+ }),
412
+ handler: (argv) => {
413
+ detectAiClients(argv.json);
414
+ }
415
+ };
416
+
417
+ // src/actions/sync/syncAiConfig.ts
418
+ import {
419
+ copyFileSync,
420
+ cpSync,
421
+ existsSync as existsSync2,
422
+ rmSync
423
+ } from "fs";
424
+ import path2 from "path";
425
+ import chalk2 from "chalk";
426
+ function resolveMapping(from, cwd) {
427
+ if (from === "claude") {
428
+ return {
429
+ destDir: path2.join(cwd, ".agents"),
430
+ destFile: path2.join(cwd, "AGENTS.md"),
431
+ sourceDir: path2.join(cwd, ".claude"),
432
+ sourceFile: path2.join(cwd, "CLAUDE.md")
433
+ };
434
+ }
435
+ return {
436
+ destDir: path2.join(cwd, ".claude"),
437
+ destFile: path2.join(cwd, "CLAUDE.md"),
438
+ sourceDir: path2.join(cwd, ".agents"),
439
+ sourceFile: path2.join(cwd, "AGENTS.md")
440
+ };
441
+ }
442
+ function syncAiConfig(from) {
443
+ const cwd = process.cwd();
444
+ const mapping = resolveMapping(from, cwd);
445
+ if (!existsSync2(mapping.sourceDir)) {
446
+ throw new Error(chalk2.red(`Source directory not found: ${mapping.sourceDir}`));
447
+ }
448
+ if (!existsSync2(mapping.sourceFile)) {
449
+ throw new Error(chalk2.red(`Source file not found: ${mapping.sourceFile}`));
450
+ }
451
+ if (existsSync2(mapping.destDir)) {
452
+ rmSync(mapping.destDir, { recursive: true });
453
+ }
454
+ if (existsSync2(mapping.destFile)) {
455
+ rmSync(mapping.destFile);
456
+ }
457
+ cpSync(mapping.sourceDir, mapping.destDir, { recursive: true });
458
+ copyFileSync(mapping.sourceFile, mapping.destFile);
459
+ const label = from === "claude" ? "Claude \u2192 Codex" : "Codex \u2192 Claude";
460
+ console.log(chalk2.green(`Synced ${label}:`));
461
+ console.log(` ${path2.basename(mapping.sourceDir)}/ \u2192 ${path2.basename(mapping.destDir)}/`);
462
+ console.log(` ${path2.basename(mapping.sourceFile)} \u2192 ${path2.basename(mapping.destFile)}`);
463
+ }
464
+
465
+ // src/commands/syncCommand.ts
466
+ var syncCommand = {
467
+ builder: (yargs) => yargs.option("from", {
468
+ choices: ["claude", "agents"],
469
+ default: "claude",
470
+ describe: "Source to sync from (the authority)",
471
+ type: "string"
472
+ }),
473
+ command: "sync",
474
+ describe: "Sync AI config between Claude Code and Codex",
475
+ handler: (argv) => {
476
+ syncAiConfig(argv.from);
477
+ }
478
+ };
479
+
480
+ // src/commands/aiCommand.ts
481
+ var aiCommand = {
482
+ command: "ai",
483
+ describe: "AI client tools",
484
+ builder: (yargs) => yargs.command(detectCommand).command(syncCommand).demandCommand(1).strictCommands(),
485
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
486
+ handler: () => {
487
+ }
488
+ };
489
+ export {
490
+ aiCommand
491
+ };
492
+ //# sourceMappingURL=aiCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/actions/detect/detectAiClients.ts","../../src/commands/detectCommand.ts","../../src/actions/sync/syncAiConfig.ts","../../src/commands/syncCommand.ts","../../src/commands/aiCommand.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","import type { CommandModule } from 'yargs'\n\nimport { detectAiClients } from '../actions/detect/index.ts'\n\nexport const detectCommand: CommandModule = {\n command: 'detect',\n describe: 'Scan for installed AI clients',\n builder: yargs =>\n yargs\n .option('json', {\n type: 'boolean',\n default: false,\n describe: 'Output as JSON',\n }),\n handler: (argv) => {\n detectAiClients(argv.json as boolean)\n },\n}\n","import {\n copyFileSync,\n cpSync,\n existsSync,\n rmSync,\n} from 'node:fs'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\n\ntype SyncSource = 'agents' | 'claude'\n\ninterface SyncMapping {\n destDir: string\n destFile: string\n sourceDir: string\n sourceFile: string\n}\n\nfunction resolveMapping(from: SyncSource, cwd: string): SyncMapping {\n if (from === 'claude') {\n return {\n destDir: path.join(cwd, '.agents'),\n destFile: path.join(cwd, 'AGENTS.md'),\n sourceDir: path.join(cwd, '.claude'),\n sourceFile: path.join(cwd, 'CLAUDE.md'),\n }\n }\n return {\n destDir: path.join(cwd, '.claude'),\n destFile: path.join(cwd, 'CLAUDE.md'),\n sourceDir: path.join(cwd, '.agents'),\n sourceFile: path.join(cwd, 'AGENTS.md'),\n }\n}\n\nexport function syncAiConfig(from: SyncSource): void {\n const cwd = process.cwd()\n const mapping = resolveMapping(from, cwd)\n\n if (!existsSync(mapping.sourceDir)) {\n throw new Error(chalk.red(`Source directory not found: ${mapping.sourceDir}`))\n }\n\n if (!existsSync(mapping.sourceFile)) {\n throw new Error(chalk.red(`Source file not found: ${mapping.sourceFile}`))\n }\n\n if (existsSync(mapping.destDir)) {\n rmSync(mapping.destDir, { recursive: true })\n }\n\n if (existsSync(mapping.destFile)) {\n rmSync(mapping.destFile)\n }\n\n cpSync(mapping.sourceDir, mapping.destDir, { recursive: true })\n copyFileSync(mapping.sourceFile, mapping.destFile)\n\n const label = from === 'claude' ? 'Claude → Codex' : 'Codex → Claude'\n console.log(chalk.green(`Synced ${label}:`))\n console.log(` ${path.basename(mapping.sourceDir)}/ → ${path.basename(mapping.destDir)}/`)\n console.log(` ${path.basename(mapping.sourceFile)} → ${path.basename(mapping.destFile)}`)\n}\n","import type { CommandModule } from 'yargs'\n\nimport { syncAiConfig } from '../actions/sync/index.ts'\n\nexport const syncCommand: CommandModule = {\n builder: yargs =>\n yargs\n .option('from', {\n choices: ['claude', 'agents'] as const,\n default: 'claude',\n describe: 'Source to sync from (the authority)',\n type: 'string',\n }),\n command: 'sync',\n describe: 'Sync AI config between Claude Code and Codex',\n handler: (argv) => {\n syncAiConfig(argv.from as 'agents' | 'claude')\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { detectCommand } from './detectCommand.ts'\nimport { syncCommand } from './syncCommand.ts'\n\nexport const aiCommand: CommandModule = {\n command: 'ai',\n describe: 'AI client tools',\n builder: yargs =>\n yargs\n .command(detectCommand)\n .command(syncCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n"],"mappings":"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","names":["existsSync","path","chalk"]}
@@ -0,0 +1,119 @@
1
+ // src/actions/audit/showAiMeta.ts
2
+ import { execSync } from "child_process";
3
+ import {
4
+ existsSync,
5
+ readdirSync,
6
+ readFileSync
7
+ } from "fs";
8
+ import { homedir } from "os";
9
+ import path from "path";
10
+ import { fileURLToPath } from "url";
11
+ import chalk from "chalk";
12
+ function getClientVersion() {
13
+ try {
14
+ const thisFile = fileURLToPath(import.meta.url);
15
+ const pkgDir = path.resolve(path.dirname(thisFile), "..", "..");
16
+ const pkg = JSON.parse(readFileSync(path.join(pkgDir, "package.json"), "utf8"));
17
+ return pkg.version;
18
+ } catch {
19
+ return void 0;
20
+ }
21
+ }
22
+ function getClaudeVersion() {
23
+ const execPath = process.env.CLAUDE_CODE_EXECPATH;
24
+ if (execPath) return path.basename(execPath);
25
+ try {
26
+ const output = execSync("claude --version", { encoding: "utf8", timeout: 5e3 }).trim();
27
+ const match = /^([\d.]+)/.exec(output);
28
+ return match?.[1];
29
+ } catch {
30
+ return void 0;
31
+ }
32
+ }
33
+ function getClaudeDir() {
34
+ return path.join(homedir(), ".claude");
35
+ }
36
+ function readRestrictions() {
37
+ try {
38
+ const raw = JSON.parse(readFileSync(path.join(getClaudeDir(), "policy-limits.json"), "utf8"));
39
+ if (!raw.restrictions) return void 0;
40
+ const result = {};
41
+ for (const [key, value] of Object.entries(raw.restrictions)) {
42
+ result[key] = value.allowed ?? false;
43
+ }
44
+ return Object.keys(result).length > 0 ? result : void 0;
45
+ } catch {
46
+ return void 0;
47
+ }
48
+ }
49
+ function readIdeName() {
50
+ try {
51
+ const ideDir = path.join(getClaudeDir(), "ide");
52
+ if (!existsSync(ideDir)) return void 0;
53
+ const lockFile = readdirSync(ideDir).find((f) => f.endsWith(".lock"));
54
+ if (!lockFile) return void 0;
55
+ const content = JSON.parse(readFileSync(path.join(ideDir, lockFile), "utf8"));
56
+ return content.ideName;
57
+ } catch {
58
+ return void 0;
59
+ }
60
+ }
61
+ var DYNAMIC_FIELDS = /* @__PURE__ */ new Set(["kind", "model", "permissionMode"]);
62
+ function printSection(label, entries) {
63
+ console.log(chalk.cyan(label));
64
+ for (const [key, value] of Object.entries(entries)) {
65
+ if (value === void 0) {
66
+ const fallback = DYNAMIC_FIELDS.has(key) ? chalk.gray("<dynamic>") : chalk.gray("unknown");
67
+ console.log(` ${chalk.white(key)}: ${fallback}`);
68
+ } else if (typeof value === "object" && value !== null) {
69
+ console.log(` ${chalk.white(key)}:`);
70
+ for (const [k, v] of Object.entries(value)) {
71
+ console.log(` ${chalk.white(k)}: ${chalk.green(String(v))}`);
72
+ }
73
+ } else {
74
+ console.log(` ${chalk.white(key)}: ${chalk.green(typeof value === "string" ? value : JSON.stringify(value))}`);
75
+ }
76
+ }
77
+ }
78
+ function showAiMeta(json) {
79
+ const ai = {
80
+ entrypoint: process.env.CLAUDE_CODE_ENTRYPOINT,
81
+ ide: readIdeName(),
82
+ kind: void 0,
83
+ model: void 0,
84
+ permissionMode: void 0,
85
+ product: "claude-code",
86
+ provider: "anthropic",
87
+ restrictions: readRestrictions(),
88
+ version: getClaudeVersion()
89
+ };
90
+ const client = {
91
+ name: "@xylabs/aries-audit-plugin",
92
+ version: getClientVersion()
93
+ };
94
+ if (json) {
95
+ console.log(JSON.stringify({ ai, client }, null, 2));
96
+ return;
97
+ }
98
+ printSection("AI", ai);
99
+ console.log();
100
+ printSection("Client", client);
101
+ }
102
+
103
+ // src/commands/auditAiCommand.ts
104
+ var auditAiCommand = {
105
+ command: "ai",
106
+ describe: "Show current AI metadata that is recorded in audit entries",
107
+ builder: (yargs) => yargs.option("json", {
108
+ type: "boolean",
109
+ default: false,
110
+ describe: "Output as JSON"
111
+ }),
112
+ handler: (argv) => {
113
+ showAiMeta(argv.json);
114
+ }
115
+ };
116
+ export {
117
+ auditAiCommand
118
+ };
119
+ //# sourceMappingURL=auditAiCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/actions/audit/showAiMeta.ts","../../src/commands/auditAiCommand.ts"],"sourcesContent":["import { execSync } from 'node:child_process'\nimport {\n existsSync, readdirSync, readFileSync,\n} from 'node:fs'\nimport { homedir } from 'node:os'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nimport chalk from 'chalk'\n\nfunction getClientVersion(): string | undefined {\n try {\n const thisFile = fileURLToPath(import.meta.url)\n const pkgDir = path.resolve(path.dirname(thisFile), '..', '..')\n const pkg = JSON.parse(readFileSync(path.join(pkgDir, 'package.json'), 'utf8')) as { version?: string }\n return pkg.version\n } catch {\n return undefined\n }\n}\n\nfunction getClaudeVersion(): string | undefined {\n const execPath = process.env.CLAUDE_CODE_EXECPATH\n if (execPath) return path.basename(execPath)\n try {\n const output = execSync('claude --version', { encoding: 'utf8', timeout: 5000 }).trim()\n const match = /^([\\d.]+)/.exec(output)\n return match?.[1]\n } catch {\n return undefined\n }\n}\n\nfunction getClaudeDir(): string {\n return path.join(homedir(), '.claude')\n}\n\nfunction readRestrictions(): Record<string, boolean> | undefined {\n try {\n const raw = JSON.parse(readFileSync(path.join(getClaudeDir(), 'policy-limits.json'), 'utf8')) as {\n restrictions?: Record<string, { allowed?: boolean }>\n }\n if (!raw.restrictions) return undefined\n const result: Record<string, boolean> = {}\n for (const [key, value] of Object.entries(raw.restrictions)) {\n result[key] = value.allowed ?? false\n }\n return Object.keys(result).length > 0 ? result : undefined\n } catch {\n return undefined\n }\n}\n\nfunction readIdeName(): string | undefined {\n try {\n const ideDir = path.join(getClaudeDir(), 'ide')\n if (!existsSync(ideDir)) return undefined\n const lockFile = readdirSync(ideDir).find(f => f.endsWith('.lock'))\n if (!lockFile) return undefined\n const content = JSON.parse(readFileSync(path.join(ideDir, lockFile), 'utf8')) as { ideName?: string }\n return content.ideName\n } catch {\n return undefined\n }\n}\n\nconst DYNAMIC_FIELDS = new Set(['kind', 'model', 'permissionMode'])\n\nfunction printSection(label: string, entries: Record<string, unknown>): void {\n console.log(chalk.cyan(label))\n for (const [key, value] of Object.entries(entries)) {\n if (value === undefined) {\n const fallback = DYNAMIC_FIELDS.has(key) ? chalk.gray('<dynamic>') : chalk.gray('unknown')\n console.log(` ${chalk.white(key)}: ${fallback}`)\n } else if (typeof value === 'object' && value !== null) {\n console.log(` ${chalk.white(key)}:`)\n for (const [k, v] of Object.entries(value)) {\n console.log(` ${chalk.white(k)}: ${chalk.green(String(v))}`)\n }\n } else {\n console.log(` ${chalk.white(key)}: ${chalk.green(typeof value === 'string' ? value : JSON.stringify(value))}`)\n }\n }\n}\n\nexport function showAiMeta(json: boolean): void {\n const ai: Record<string, unknown> = {\n entrypoint: process.env.CLAUDE_CODE_ENTRYPOINT,\n ide: readIdeName(),\n kind: undefined,\n model: undefined,\n permissionMode: undefined,\n product: 'claude-code',\n provider: 'anthropic',\n restrictions: readRestrictions(),\n version: getClaudeVersion(),\n }\n\n const client: Record<string, string | undefined> = {\n name: '@xylabs/aries-audit-plugin',\n version: getClientVersion(),\n }\n\n if (json) {\n console.log(JSON.stringify({ ai, client }, null, 2))\n return\n }\n\n printSection('AI', ai)\n console.log()\n printSection('Client', client)\n}\n","import type { CommandModule } from 'yargs'\n\nimport { showAiMeta } from '../actions/audit/index.ts'\n\nexport const auditAiCommand: CommandModule = {\n command: 'ai',\n describe: 'Show current AI metadata that is recorded in audit entries',\n builder: yargs =>\n yargs\n .option('json', {\n type: 'boolean',\n default: false,\n describe: 'Output as JSON',\n }),\n handler: (argv) => {\n showAiMeta(argv.json as boolean)\n },\n}\n"],"mappings":"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","names":[]}