@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 @@
1
+ {"version":3,"sources":["../../../../node_modules/.pnpm/node-pty@1.1.0/node_modules/node-pty/src/utils.ts","../../../../node_modules/.pnpm/node-pty@1.1.0/node_modules/node-pty/src/eventEmitter2.ts","../../../../node_modules/.pnpm/node-pty@1.1.0/node_modules/node-pty/src/terminal.ts","../../../../node_modules/.pnpm/node-pty@1.1.0/node_modules/node-pty/src/shared/conout.ts","../../../../node_modules/.pnpm/node-pty@1.1.0/node_modules/node-pty/src/windowsConoutConnection.ts","../../../../node_modules/.pnpm/node-pty@1.1.0/node_modules/node-pty/src/windowsPtyAgent.ts","../../../../node_modules/.pnpm/node-pty@1.1.0/node_modules/node-pty/src/windowsTerminal.ts","../../../../node_modules/.pnpm/node-pty@1.1.0/node_modules/node-pty/src/unixTerminal.ts","../../../../node_modules/.pnpm/node-pty@1.1.0/node_modules/node-pty/src/index.ts","../../src/actions/clamp/clampAudit.ts","../../src/actions/clamp/ipcServer.ts","../../src/actions/clamp/promptUser.ts","../../src/actions/clamp/runClamped.ts","../../src/actions/clamp/sandboxExec.ts","../../src/actions/clamp/terminalRenderer.ts","../../src/actions/clamp/shellEnvSetup.ts","../../src/actions/clamp/shimGenerator.ts","../../src/commands/clampRunCommand.ts"],"sourcesContent":["/**\n * Copyright (c) 2017, Daniel Imms (MIT License).\n * Copyright (c) 2018, Microsoft Corporation (MIT License).\n */\n\nexport function assign(target: any, ...sources: any[]): any {\n sources.forEach(source => Object.keys(source).forEach(key => target[key] = source[key]));\n return target;\n}\n\n\nexport function loadNativeModule(name: string): {dir: string, module: any} {\n // Check build, debug, and then prebuilds.\n const dirs = ['build/Release', 'build/Debug', `prebuilds/${process.platform}-${process.arch}`];\n // Check relative to the parent dir for unbundled and then the current dir for bundled\n const relative = ['..', '.'];\n let lastError: unknown;\n for (const d of dirs) {\n for (const r of relative) {\n const dir = `${r}/${d}/`;\n try {\n return { dir, module: require(`${dir}/${name}.node`) };\n } catch (e) {\n lastError = e;\n }\n }\n }\n throw new Error(`Failed to load native module: ${name}.node, checked: ${dirs.join(', ')}: ${lastError}`);\n}\n","/**\n * Copyright (c) 2019, Microsoft Corporation (MIT License).\n */\n\nimport { IDisposable } from './types';\n\ninterface IListener<T> {\n (e: T): void;\n}\n\nexport interface IEvent<T> {\n (listener: (e: T) => any): IDisposable;\n}\n\nexport class EventEmitter2<T> {\n private _listeners: IListener<T>[] = [];\n private _event?: IEvent<T>;\n\n public get event(): IEvent<T> {\n if (!this._event) {\n this._event = (listener: (e: T) => any) => {\n this._listeners.push(listener);\n const disposable = {\n dispose: () => {\n for (let i = 0; i < this._listeners.length; i++) {\n if (this._listeners[i] === listener) {\n this._listeners.splice(i, 1);\n return;\n }\n }\n }\n };\n return disposable;\n };\n }\n return this._event;\n }\n\n public fire(data: T): void {\n const queue: IListener<T>[] = [];\n for (let i = 0; i < this._listeners.length; i++) {\n queue.push(this._listeners[i]);\n }\n for (let i = 0; i < queue.length; i++) {\n queue[i].call(undefined, data);\n }\n }\n}\n","/**\n * Copyright (c) 2012-2015, Christopher Jeffrey (MIT License)\n * Copyright (c) 2016, Daniel Imms (MIT License).\n * Copyright (c) 2018, Microsoft Corporation (MIT License).\n */\n\nimport { Socket } from 'net';\nimport { EventEmitter } from 'events';\nimport { ITerminal, IPtyForkOptions, IProcessEnv } from './interfaces';\nimport { EventEmitter2, IEvent } from './eventEmitter2';\nimport { IExitEvent } from './types';\n\nexport const DEFAULT_COLS: number = 80;\nexport const DEFAULT_ROWS: number = 24;\n\n/**\n * Default messages to indicate PAUSE/RESUME for automatic flow control.\n * To avoid conflicts with rebound XON/XOFF control codes (such as on-my-zsh),\n * the sequences can be customized in `IPtyForkOptions`.\n */\nconst FLOW_CONTROL_PAUSE = '\\x13'; // defaults to XOFF\nconst FLOW_CONTROL_RESUME = '\\x11'; // defaults to XON\n\nexport abstract class Terminal implements ITerminal {\n protected _socket!: Socket; // HACK: This is unsafe\n protected _pid: number = 0;\n protected _fd: number = 0;\n protected _pty: any;\n\n protected _file!: string; // HACK: This is unsafe\n protected _name!: string; // HACK: This is unsafe\n protected _cols: number = 0;\n protected _rows: number = 0;\n\n protected _readable: boolean = false;\n protected _writable: boolean = false;\n\n protected _internalee: EventEmitter;\n private _flowControlPause: string;\n private _flowControlResume: string;\n public handleFlowControl: boolean;\n\n private _onData = new EventEmitter2<string>();\n public get onData(): IEvent<string> { return this._onData.event; }\n private _onExit = new EventEmitter2<IExitEvent>();\n public get onExit(): IEvent<IExitEvent> { return this._onExit.event; }\n\n public get pid(): number { return this._pid; }\n public get cols(): number { return this._cols; }\n public get rows(): number { return this._rows; }\n\n constructor(opt?: IPtyForkOptions) {\n // for 'close'\n this._internalee = new EventEmitter();\n\n // setup flow control handling\n this.handleFlowControl = !!(opt?.handleFlowControl);\n this._flowControlPause = opt?.flowControlPause || FLOW_CONTROL_PAUSE;\n this._flowControlResume = opt?.flowControlResume || FLOW_CONTROL_RESUME;\n\n if (!opt) {\n return;\n }\n\n // Do basic type checks here in case node-pty is being used within JavaScript. If the wrong\n // types go through to the C++ side it can lead to hard to diagnose exceptions.\n this._checkType('name', opt.name ? opt.name : undefined, 'string');\n this._checkType('cols', opt.cols ? opt.cols : undefined, 'number');\n this._checkType('rows', opt.rows ? opt.rows : undefined, 'number');\n this._checkType('cwd', opt.cwd ? opt.cwd : undefined, 'string');\n this._checkType('env', opt.env ? opt.env : undefined, 'object');\n this._checkType('uid', opt.uid ? opt.uid : undefined, 'number');\n this._checkType('gid', opt.gid ? opt.gid : undefined, 'number');\n this._checkType('encoding', opt.encoding ? opt.encoding : undefined, 'string');\n }\n\n protected abstract _write(data: string | Buffer): void;\n\n public write(data: string | Buffer): void {\n if (this.handleFlowControl) {\n // PAUSE/RESUME messages are not forwarded to the pty\n if (data === this._flowControlPause) {\n this.pause();\n return;\n }\n if (data === this._flowControlResume) {\n this.resume();\n return;\n }\n }\n // everything else goes to the real pty\n this._write(data);\n }\n\n protected _forwardEvents(): void {\n this.on('data', e => this._onData.fire(e));\n this.on('exit', (exitCode, signal) => this._onExit.fire({ exitCode, signal }));\n }\n\n protected _checkType<T>(name: string, value: T | undefined, type: string, allowArray: boolean = false): void {\n if (value === undefined) {\n return;\n }\n if (allowArray) {\n if (Array.isArray(value)) {\n value.forEach((v, i) => {\n if (typeof v !== type) {\n throw new Error(`${name}[${i}] must be a ${type} (not a ${typeof v[i]})`);\n }\n });\n return;\n }\n }\n if (typeof value !== type) {\n throw new Error(`${name} must be a ${type} (not a ${typeof value})`);\n }\n }\n\n /** See net.Socket.end */\n public end(data: string): void {\n this._socket.end(data);\n }\n\n /** See stream.Readable.pipe */\n public pipe(dest: any, options: any): any {\n return this._socket.pipe(dest, options);\n }\n\n /** See net.Socket.pause */\n public pause(): Socket {\n return this._socket.pause();\n }\n\n /** See net.Socket.resume */\n public resume(): Socket {\n return this._socket.resume();\n }\n\n /** See net.Socket.setEncoding */\n public setEncoding(encoding: string | null): void {\n if ((this._socket as any)._decoder) {\n delete (this._socket as any)._decoder;\n }\n if (encoding) {\n this._socket.setEncoding(encoding);\n }\n }\n\n public addListener(eventName: string, listener: (...args: any[]) => any): void { this.on(eventName, listener); }\n public on(eventName: string, listener: (...args: any[]) => any): void {\n if (eventName === 'close') {\n this._internalee.on('close', listener);\n return;\n }\n this._socket.on(eventName, listener);\n }\n\n public emit(eventName: string, ...args: any[]): any {\n if (eventName === 'close') {\n return this._internalee.emit.apply(this._internalee, arguments as any);\n }\n return this._socket.emit.apply(this._socket, arguments as any);\n }\n\n public listeners(eventName: string): Function[] {\n return this._socket.listeners(eventName);\n }\n\n public removeListener(eventName: string, listener: (...args: any[]) => any): void {\n this._socket.removeListener(eventName, listener);\n }\n\n public removeAllListeners(eventName: string): void {\n this._socket.removeAllListeners(eventName);\n }\n\n public once(eventName: string, listener: (...args: any[]) => any): void {\n this._socket.once(eventName, listener);\n }\n\n public abstract resize(cols: number, rows: number): void;\n public abstract clear(): void;\n public abstract destroy(): void;\n public abstract kill(signal?: string): void;\n\n public abstract get process(): string;\n public abstract get master(): Socket| undefined;\n public abstract get slave(): Socket | undefined;\n\n protected _close(): void {\n this._socket.readable = false;\n this.write = () => {};\n this.end = () => {};\n this._writable = false;\n this._readable = false;\n }\n\n protected _parseEnv(env: IProcessEnv): string[] {\n const keys = Object.keys(env || {});\n const pairs = [];\n\n for (let i = 0; i < keys.length; i++) {\n if (keys[i] === undefined) {\n continue;\n }\n pairs.push(keys[i] + '=' + env[keys[i]]);\n }\n\n return pairs;\n }\n}\n","/**\n * Copyright (c) 2020, Microsoft Corporation (MIT License).\n */\n\nexport interface IWorkerData {\n conoutPipeName: string;\n}\n\nexport const enum ConoutWorkerMessage {\n READY = 1\n}\n\nexport function getWorkerPipeName(conoutPipeName: string): string {\n return `${conoutPipeName}-worker`;\n}\n","/**\n * Copyright (c) 2020, Microsoft Corporation (MIT License).\n */\n\nimport { Worker } from 'worker_threads';\nimport { Socket } from 'net';\nimport { IDisposable } from './types';\nimport { IWorkerData, ConoutWorkerMessage, getWorkerPipeName } from './shared/conout';\nimport { join } from 'path';\nimport { IEvent, EventEmitter2 } from './eventEmitter2';\n\n/**\n * The amount of time to wait for additional data after the conpty shell process has exited before\n * shutting down the worker and sockets. The timer will be reset if a new data event comes in after\n * the timer has started.\n */\nconst FLUSH_DATA_INTERVAL = 1000;\n\n/**\n * Connects to and manages the lifecycle of the conout socket. This socket must be drained on\n * another thread in order to avoid deadlocks where Conpty waits for the out socket to drain\n * when `ClosePseudoConsole` is called. This happens when data is being written to the terminal when\n * the pty is closed.\n *\n * See also:\n * - https://github.com/microsoft/node-pty/issues/375\n * - https://github.com/microsoft/vscode/issues/76548\n * - https://github.com/microsoft/terminal/issues/1810\n * - https://docs.microsoft.com/en-us/windows/console/closepseudoconsole\n */\nexport class ConoutConnection implements IDisposable {\n private _worker: Worker;\n private _drainTimeout: NodeJS.Timeout | undefined;\n private _isDisposed: boolean = false;\n\n private _onReady = new EventEmitter2<void>();\n public get onReady(): IEvent<void> { return this._onReady.event; }\n\n constructor(\n private _conoutPipeName: string,\n private _useConptyDll: boolean\n ) {\n const workerData: IWorkerData = {\n conoutPipeName: _conoutPipeName\n };\n const scriptPath = __dirname.replace('node_modules.asar', 'node_modules.asar.unpacked');\n this._worker = new Worker(join(scriptPath, 'worker/conoutSocketWorker.js'), { workerData });\n this._worker.on('message', (message: ConoutWorkerMessage) => {\n switch (message) {\n case ConoutWorkerMessage.READY:\n this._onReady.fire();\n return;\n default:\n console.warn('Unexpected ConoutWorkerMessage', message);\n }\n });\n }\n\n dispose(): void {\n if (!this._useConptyDll && this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n // Drain all data from the socket before closing\n this._drainDataAndClose();\n }\n\n connectSocket(socket: Socket): void {\n socket.connect(getWorkerPipeName(this._conoutPipeName));\n }\n\n private _drainDataAndClose(): void {\n if (this._drainTimeout) {\n clearTimeout(this._drainTimeout);\n }\n this._drainTimeout = setTimeout(() => this._destroySocket(), FLUSH_DATA_INTERVAL);\n }\n\n private async _destroySocket(): Promise<void> {\n await this._worker.terminate();\n }\n}\n","/**\n * Copyright (c) 2012-2015, Christopher Jeffrey, Peter Sunde (MIT License)\n * Copyright (c) 2016, Daniel Imms (MIT License).\n * Copyright (c) 2018, Microsoft Corporation (MIT License).\n */\n\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { fork } from 'child_process';\nimport { Socket } from 'net';\nimport { ArgvOrCommandLine } from './types';\nimport { ConoutConnection } from './windowsConoutConnection';\nimport { loadNativeModule } from './utils';\n\nlet conptyNative: IConptyNative;\nlet winptyNative: IWinptyNative;\n\n/**\n * The amount of time to wait for additional data after the conpty shell process has exited before\n * shutting down the socket. The timer will be reset if a new data event comes in after the timer\n * has started.\n */\nconst FLUSH_DATA_INTERVAL = 1000;\n\n/**\n * This agent sits between the WindowsTerminal class and provides a common interface for both conpty\n * and winpty.\n */\nexport class WindowsPtyAgent {\n private _inSocket: Socket;\n private _outSocket: Socket;\n private _pid: number = 0;\n private _innerPid: number = 0;\n private _closeTimeout: NodeJS.Timer | undefined;\n private _exitCode: number | undefined;\n private _conoutSocketWorker: ConoutConnection;\n\n private _fd: any;\n private _pty: number;\n private _ptyNative: IConptyNative | IWinptyNative;\n\n public get inSocket(): Socket { return this._inSocket; }\n public get outSocket(): Socket { return this._outSocket; }\n public get fd(): any { return this._fd; }\n public get innerPid(): number { return this._innerPid; }\n public get pty(): number { return this._pty; }\n\n constructor(\n file: string,\n args: ArgvOrCommandLine,\n env: string[],\n cwd: string,\n cols: number,\n rows: number,\n debug: boolean,\n private _useConpty: boolean | undefined,\n private _useConptyDll: boolean = false,\n conptyInheritCursor: boolean = false\n ) {\n if (this._useConpty === undefined || this._useConpty === true) {\n this._useConpty = this._getWindowsBuildNumber() >= 18309;\n }\n if (this._useConpty) {\n if (!conptyNative) {\n conptyNative = loadNativeModule('conpty').module;\n }\n } else {\n if (!winptyNative) {\n winptyNative = loadNativeModule('pty').module;\n }\n }\n this._ptyNative = this._useConpty ? conptyNative : winptyNative;\n\n // Sanitize input variable.\n cwd = path.resolve(cwd);\n\n // Compose command line\n const commandLine = argsToCommandLine(file, args);\n\n // Open pty session.\n let term: IConptyProcess | IWinptyProcess;\n if (this._useConpty) {\n term = (this._ptyNative as IConptyNative).startProcess(file, cols, rows, debug, this._generatePipeName(), conptyInheritCursor, this._useConptyDll);\n } else {\n term = (this._ptyNative as IWinptyNative).startProcess(file, commandLine, env, cwd, cols, rows, debug);\n this._pid = (term as IWinptyProcess).pid;\n this._innerPid = (term as IWinptyProcess).innerPid;\n }\n\n // Not available on windows.\n this._fd = term.fd;\n\n // Generated incremental number that has no real purpose besides using it\n // as a terminal id.\n this._pty = term.pty;\n\n // Create terminal pipe IPC channel and forward to a local unix socket.\n this._outSocket = new Socket();\n this._outSocket.setEncoding('utf8');\n // The conout socket must be ready out on another thread to avoid deadlocks\n this._conoutSocketWorker = new ConoutConnection(term.conout, this._useConptyDll);\n this._conoutSocketWorker.onReady(() => {\n this._conoutSocketWorker.connectSocket(this._outSocket);\n });\n this._outSocket.on('connect', () => {\n this._outSocket.emit('ready_datapipe');\n });\n\n const inSocketFD = fs.openSync(term.conin, 'w');\n this._inSocket = new Socket({\n fd: inSocketFD,\n readable: false,\n writable: true\n });\n this._inSocket.setEncoding('utf8');\n\n if (this._useConpty) {\n const connect = (this._ptyNative as IConptyNative).connect(this._pty, commandLine, cwd, env, this._useConptyDll, c => this._$onProcessExit(c));\n this._innerPid = connect.pid;\n }\n }\n\n public resize(cols: number, rows: number): void {\n if (this._useConpty) {\n if (this._exitCode !== undefined) {\n throw new Error('Cannot resize a pty that has already exited');\n }\n (this._ptyNative as IConptyNative).resize(this._pty, cols, rows, this._useConptyDll);\n return;\n }\n (this._ptyNative as IWinptyNative).resize(this._pid, cols, rows);\n }\n\n public clear(): void {\n if (this._useConpty) {\n (this._ptyNative as IConptyNative).clear(this._pty, this._useConptyDll);\n }\n }\n\n public kill(): void {\n // Tell the agent to kill the pty, this releases handles to the process\n if (this._useConpty) {\n if (!this._useConptyDll) {\n this._inSocket.readable = false;\n this._outSocket.readable = false;\n this._getConsoleProcessList().then(consoleProcessList => {\n consoleProcessList.forEach((pid: number) => {\n try {\n process.kill(pid);\n } catch (e) {\n // Ignore if process cannot be found (kill ESRCH error)\n }\n });\n });\n (this._ptyNative as IConptyNative).kill(this._pty, this._useConptyDll);\n this._conoutSocketWorker.dispose();\n } else {\n // Close the input write handle to signal the end of session.\n this._inSocket.destroy();\n (this._ptyNative as IConptyNative).kill(this._pty, this._useConptyDll);\n this._outSocket.on('data', () => {\n this._conoutSocketWorker.dispose();\n });\n }\n } else {\n // Because pty.kill closes the handle, it will kill most processes by itself.\n // Process IDs can be reused as soon as all handles to them are\n // dropped, so we want to immediately kill the entire console process list.\n // If we do not force kill all processes here, node servers in particular\n // seem to become detached and remain running (see\n // Microsoft/vscode#26807).\n const processList: number[] = (this._ptyNative as IWinptyNative).getProcessList(this._pid);\n (this._ptyNative as IWinptyNative).kill(this._pid, this._innerPid);\n processList.forEach(pid => {\n try {\n process.kill(pid);\n } catch (e) {\n // Ignore if process cannot be found (kill ESRCH error)\n }\n });\n }\n }\n\n private _getConsoleProcessList(): Promise<number[]> {\n return new Promise<number[]>(resolve => {\n const agent = fork(path.join(__dirname, 'conpty_console_list_agent'), [ this._innerPid.toString() ]);\n agent.on('message', message => {\n clearTimeout(timeout);\n resolve(message.consoleProcessList);\n });\n const timeout = setTimeout(() => {\n // Something went wrong, just send back the shell PID\n agent.kill();\n resolve([ this._innerPid ]);\n }, 5000);\n });\n }\n\n public get exitCode(): number | undefined {\n if (this._useConpty) {\n return this._exitCode;\n }\n const winptyExitCode = (this._ptyNative as IWinptyNative).getExitCode(this._innerPid);\n return winptyExitCode === -1 ? undefined : winptyExitCode;\n }\n\n private _getWindowsBuildNumber(): number {\n const osVersion = (/(\\d+)\\.(\\d+)\\.(\\d+)/g).exec(os.release());\n let buildNumber: number = 0;\n if (osVersion && osVersion.length === 4) {\n buildNumber = parseInt(osVersion[3]);\n }\n return buildNumber;\n }\n\n private _generatePipeName(): string {\n return `conpty-${Math.random() * 10000000}`;\n }\n\n /**\n * Triggered from the native side when a contpy process exits.\n */\n private _$onProcessExit(exitCode: number): void {\n this._exitCode = exitCode;\n if (!this._useConptyDll) {\n this._flushDataAndCleanUp();\n this._outSocket.on('data', () => this._flushDataAndCleanUp());\n }\n }\n\n private _flushDataAndCleanUp(): void {\n if (this._useConptyDll) {\n return;\n }\n if (this._closeTimeout) {\n clearTimeout(this._closeTimeout);\n }\n this._closeTimeout = setTimeout(() => this._cleanUpProcess(), FLUSH_DATA_INTERVAL);\n }\n\n private _cleanUpProcess(): void {\n if (this._useConptyDll) {\n return;\n }\n this._inSocket.readable = false;\n this._outSocket.readable = false;\n this._outSocket.destroy();\n }\n}\n\n// Convert argc/argv into a Win32 command-line following the escaping convention\n// documented on MSDN (e.g. see CommandLineToArgvW documentation). Copied from\n// winpty project.\nexport function argsToCommandLine(file: string, args: ArgvOrCommandLine): string {\n if (isCommandLine(args)) {\n if (args.length === 0) {\n return file;\n }\n return `${argsToCommandLine(file, [])} ${args}`;\n }\n const argv = [file];\n Array.prototype.push.apply(argv, args);\n let result = '';\n for (let argIndex = 0; argIndex < argv.length; argIndex++) {\n if (argIndex > 0) {\n result += ' ';\n }\n const arg = argv[argIndex];\n // if it is empty or it contains whitespace and is not already quoted\n const hasLopsidedEnclosingQuote = xOr((arg[0] !== '\"'), (arg[arg.length - 1] !== '\"'));\n const hasNoEnclosingQuotes = ((arg[0] !== '\"') && (arg[arg.length - 1] !== '\"'));\n const quote =\n arg === '' ||\n (arg.indexOf(' ') !== -1 ||\n arg.indexOf('\\t') !== -1) &&\n ((arg.length > 1) &&\n (hasLopsidedEnclosingQuote || hasNoEnclosingQuotes));\n if (quote) {\n result += '\\\"';\n }\n let bsCount = 0;\n for (let i = 0; i < arg.length; i++) {\n const p = arg[i];\n if (p === '\\\\') {\n bsCount++;\n } else if (p === '\"') {\n result += repeatText('\\\\', bsCount * 2 + 1);\n result += '\"';\n bsCount = 0;\n } else {\n result += repeatText('\\\\', bsCount);\n bsCount = 0;\n result += p;\n }\n }\n if (quote) {\n result += repeatText('\\\\', bsCount * 2);\n result += '\\\"';\n } else {\n result += repeatText('\\\\', bsCount);\n }\n }\n return result;\n}\n\nfunction isCommandLine(args: ArgvOrCommandLine): args is string {\n return typeof args === 'string';\n}\n\nfunction repeatText(text: string, count: number): string {\n let result = '';\n for (let i = 0; i < count; i++) {\n result += text;\n }\n return result;\n}\n\nfunction xOr(arg1: boolean, arg2: boolean): boolean {\n return ((arg1 && !arg2) || (!arg1 && arg2));\n}\n","/**\n * Copyright (c) 2012-2015, Christopher Jeffrey, Peter Sunde (MIT License)\n * Copyright (c) 2016, Daniel Imms (MIT License).\n * Copyright (c) 2018, Microsoft Corporation (MIT License).\n */\n\nimport { Socket } from 'net';\nimport { Terminal, DEFAULT_COLS, DEFAULT_ROWS } from './terminal';\nimport { WindowsPtyAgent } from './windowsPtyAgent';\nimport { IPtyOpenOptions, IWindowsPtyForkOptions } from './interfaces';\nimport { ArgvOrCommandLine } from './types';\nimport { assign } from './utils';\n\nconst DEFAULT_FILE = 'cmd.exe';\nconst DEFAULT_NAME = 'Windows Shell';\n\nexport class WindowsTerminal extends Terminal {\n private _isReady: boolean;\n private _deferreds: { run: () => void }[];\n private _agent: WindowsPtyAgent;\n\n constructor(file?: string, args?: ArgvOrCommandLine, opt?: IWindowsPtyForkOptions) {\n super(opt);\n\n this._checkType('args', args, 'string', true);\n\n // Initialize arguments\n args = args || [];\n file = file || DEFAULT_FILE;\n opt = opt || {};\n opt.env = opt.env || process.env;\n\n if (opt.encoding) {\n console.warn('Setting encoding on Windows is not supported');\n }\n\n const env = assign({}, opt.env);\n this._cols = opt.cols || DEFAULT_COLS;\n this._rows = opt.rows || DEFAULT_ROWS;\n const cwd = opt.cwd || process.cwd();\n const name = opt.name || env.TERM || DEFAULT_NAME;\n const parsedEnv = this._parseEnv(env);\n\n // If the terminal is ready\n this._isReady = false;\n\n // Functions that need to run after `ready` event is emitted.\n this._deferreds = [];\n\n // Create new termal.\n this._agent = new WindowsPtyAgent(file, args, parsedEnv, cwd, this._cols, this._rows, false, opt.useConpty, opt.useConptyDll, opt.conptyInheritCursor);\n this._socket = this._agent.outSocket;\n\n // Not available until `ready` event emitted.\n this._pid = this._agent.innerPid;\n this._fd = this._agent.fd;\n this._pty = this._agent.pty;\n\n // The forked windows terminal is not available until `ready` event is\n // emitted.\n this._socket.on('ready_datapipe', () => {\n\n // Run deferreds and set ready state once the first data event is received.\n this._socket.once('data', () => {\n // Wait until the first data event is fired then we can run deferreds.\n if (!this._isReady) {\n // Terminal is now ready and we can avoid having to defer method\n // calls.\n this._isReady = true;\n\n // Execute all deferred methods\n this._deferreds.forEach(fn => {\n // NB! In order to ensure that `this` has all its references\n // updated any variable that need to be available in `this` before\n // the deferred is run has to be declared above this forEach\n // statement.\n fn.run();\n });\n\n // Reset\n this._deferreds = [];\n }\n });\n\n // Shutdown if `error` event is emitted.\n this._socket.on('error', err => {\n // Close terminal session.\n this._close();\n\n // EIO, happens when someone closes our child process: the only process\n // in the terminal.\n // node < 0.6.14: errno 5\n // node >= 0.6.14: read EIO\n if ((<any>err).code) {\n if (~(<any>err).code.indexOf('errno 5') || ~(<any>err).code.indexOf('EIO')) return;\n }\n\n // Throw anything else.\n if (this.listeners('error').length < 2) {\n throw err;\n }\n });\n\n // Cleanup after the socket is closed.\n this._socket.on('close', () => {\n this.emit('exit', this._agent.exitCode);\n this._close();\n });\n\n });\n\n this._file = file;\n this._name = name;\n\n this._readable = true;\n this._writable = true;\n\n this._forwardEvents();\n }\n\n protected _write(data: string | Buffer): void {\n this._defer(this._doWrite, data);\n }\n\n private _doWrite(data: string | Buffer): void {\n this._agent.inSocket.write(data);\n }\n\n /**\n * openpty\n */\n\n public static open(options?: IPtyOpenOptions): void {\n throw new Error('open() not supported on windows, use Fork() instead.');\n }\n\n /**\n * TTY\n */\n\n public resize(cols: number, rows: number): void {\n if (cols <= 0 || rows <= 0 || isNaN(cols) || isNaN(rows) || cols === Infinity || rows === Infinity) {\n throw new Error('resizing must be done using positive cols and rows');\n }\n this._deferNoArgs(() => {\n this._agent.resize(cols, rows);\n this._cols = cols;\n this._rows = rows;\n });\n }\n\n public clear(): void {\n this._deferNoArgs(() => {\n this._agent.clear();\n });\n }\n\n public destroy(): void {\n this._deferNoArgs(() => {\n this.kill();\n });\n }\n\n public kill(signal?: string): void {\n this._deferNoArgs(() => {\n if (signal) {\n throw new Error('Signals not supported on windows.');\n }\n this._close();\n this._agent.kill();\n });\n }\n\n private _deferNoArgs<A>(deferredFn: () => void): void {\n // If the terminal is ready, execute.\n if (this._isReady) {\n deferredFn.call(this);\n return;\n }\n\n // Queue until terminal is ready.\n this._deferreds.push({\n run: () => deferredFn.call(this)\n });\n }\n\n private _defer<A>(deferredFn: (arg: A) => void, arg: A): void {\n // If the terminal is ready, execute.\n if (this._isReady) {\n deferredFn.call(this, arg);\n return;\n }\n\n // Queue until terminal is ready.\n this._deferreds.push({\n run: () => deferredFn.call(this, arg)\n });\n }\n\n public get process(): string { return this._name; }\n public get master(): Socket { throw new Error('master is not supported on Windows'); }\n public get slave(): Socket { throw new Error('slave is not supported on Windows'); }\n}\n","/**\n * Copyright (c) 2012-2015, Christopher Jeffrey (MIT License)\n * Copyright (c) 2016, Daniel Imms (MIT License).\n * Copyright (c) 2018, Microsoft Corporation (MIT License).\n */\nimport * as fs from 'fs';\nimport * as net from 'net';\nimport * as path from 'path';\nimport * as tty from 'tty';\nimport { Terminal, DEFAULT_COLS, DEFAULT_ROWS } from './terminal';\nimport { IProcessEnv, IPtyForkOptions, IPtyOpenOptions } from './interfaces';\nimport { ArgvOrCommandLine, IDisposable } from './types';\nimport { assign, loadNativeModule } from './utils';\n\nconst native = loadNativeModule('pty');\nconst pty: IUnixNative = native.module;\nlet helperPath = native.dir + '/spawn-helper';\nhelperPath = path.resolve(__dirname, helperPath);\nhelperPath = helperPath.replace('app.asar', 'app.asar.unpacked');\nhelperPath = helperPath.replace('node_modules.asar', 'node_modules.asar.unpacked');\n\nconst DEFAULT_FILE = 'sh';\nconst DEFAULT_NAME = 'xterm';\nconst DESTROY_SOCKET_TIMEOUT_MS = 200;\n\nexport class UnixTerminal extends Terminal {\n protected _fd: number;\n protected _pty: string;\n\n protected _file: string;\n protected _name: string;\n\n protected _readable: boolean;\n protected _writable: boolean;\n\n private _boundClose: boolean = false;\n private _emittedClose: boolean = false;\n\n private _writeStream: CustomWriteStream;\n\n private _master: net.Socket | undefined;\n private _slave: net.Socket | undefined;\n\n public get master(): net.Socket | undefined { return this._master; }\n public get slave(): net.Socket | undefined { return this._slave; }\n\n constructor(file?: string, args?: ArgvOrCommandLine, opt?: IPtyForkOptions) {\n super(opt);\n\n if (typeof args === 'string') {\n throw new Error('args as a string is not supported on unix.');\n }\n\n // Initialize arguments\n args = args || [];\n file = file || DEFAULT_FILE;\n opt = opt || {};\n opt.env = opt.env || process.env;\n\n this._cols = opt.cols || DEFAULT_COLS;\n this._rows = opt.rows || DEFAULT_ROWS;\n const uid = opt.uid ?? -1;\n const gid = opt.gid ?? -1;\n const env: IProcessEnv = assign({}, opt.env);\n\n if (opt.env === process.env) {\n this._sanitizeEnv(env);\n }\n\n const cwd = opt.cwd || process.cwd();\n env.PWD = cwd;\n const name = opt.name || env.TERM || DEFAULT_NAME;\n env.TERM = name;\n const parsedEnv = this._parseEnv(env);\n\n const encoding = (opt.encoding === undefined ? 'utf8' : opt.encoding);\n\n const onexit = (code: number, signal: number): void => {\n // XXX Sometimes a data event is emitted after exit. Wait til socket is\n // destroyed.\n if (!this._emittedClose) {\n if (this._boundClose) {\n return;\n }\n this._boundClose = true;\n // From macOS High Sierra 10.13.2 sometimes the socket never gets\n // closed. A timeout is applied here to avoid the terminal never being\n // destroyed when this occurs.\n let timeout: NodeJS.Timeout | null = setTimeout(() => {\n timeout = null;\n // Destroying the socket now will cause the close event to fire\n this._socket.destroy();\n }, DESTROY_SOCKET_TIMEOUT_MS);\n this.once('close', () => {\n if (timeout !== null) {\n clearTimeout(timeout);\n }\n this.emit('exit', code, signal);\n });\n return;\n }\n this.emit('exit', code, signal);\n };\n\n // fork\n const term = pty.fork(file, args, parsedEnv, cwd, this._cols, this._rows, uid, gid, (encoding === 'utf8'), helperPath, onexit);\n\n this._socket = new tty.ReadStream(term.fd);\n if (encoding !== null) {\n this._socket.setEncoding(encoding);\n }\n this._writeStream = new CustomWriteStream(term.fd, (encoding || undefined) as BufferEncoding);\n\n // setup\n this._socket.on('error', (err: any) => {\n // NOTE: fs.ReadStream gets EAGAIN twice at first:\n if (err.code) {\n if (~err.code.indexOf('EAGAIN')) {\n return;\n }\n }\n\n // close\n this._close();\n // EIO on exit from fs.ReadStream:\n if (!this._emittedClose) {\n this._emittedClose = true;\n this.emit('close');\n }\n\n // EIO, happens when someone closes our child process: the only process in\n // the terminal.\n // node < 0.6.14: errno 5\n // node >= 0.6.14: read EIO\n if (err.code) {\n if (~err.code.indexOf('errno 5') || ~err.code.indexOf('EIO')) {\n return;\n }\n }\n\n // throw anything else\n if (this.listeners('error').length < 2) {\n throw err;\n }\n });\n\n this._pid = term.pid;\n this._fd = term.fd;\n this._pty = term.pty;\n\n this._file = file;\n this._name = name;\n\n this._readable = true;\n this._writable = true;\n\n this._socket.on('close', () => {\n if (this._emittedClose) {\n return;\n }\n this._emittedClose = true;\n this._close();\n this.emit('close');\n });\n\n this._forwardEvents();\n }\n\n protected _write(data: string | Buffer): void {\n this._writeStream.write(data);\n }\n\n /* Accessors */\n get fd(): number { return this._fd; }\n get ptsName(): string { return this._pty; }\n\n /**\n * openpty\n */\n\n public static open(opt: IPtyOpenOptions): UnixTerminal {\n const self: UnixTerminal = Object.create(UnixTerminal.prototype);\n opt = opt || {};\n\n if (arguments.length > 1) {\n opt = {\n cols: arguments[1],\n rows: arguments[2]\n };\n }\n\n const cols = opt.cols || DEFAULT_COLS;\n const rows = opt.rows || DEFAULT_ROWS;\n const encoding = (opt.encoding === undefined ? 'utf8' : opt.encoding);\n\n // open\n const term: IUnixOpenProcess = pty.open(cols, rows);\n\n self._master = new tty.ReadStream(term.master);\n if (encoding !== null) {\n self._master.setEncoding(encoding);\n }\n self._master.resume();\n\n self._slave = new tty.ReadStream(term.slave);\n if (encoding !== null) {\n self._slave.setEncoding(encoding);\n }\n self._slave.resume();\n\n self._socket = self._master;\n self._pid = -1;\n self._fd = term.master;\n self._pty = term.pty;\n\n self._file = process.argv[0] || 'node';\n self._name = process.env.TERM || '';\n\n self._readable = true;\n self._writable = true;\n\n self._socket.on('error', err => {\n self._close();\n if (self.listeners('error').length < 2) {\n throw err;\n }\n });\n\n self._socket.on('close', () => {\n self._close();\n });\n\n return self;\n }\n\n public destroy(): void {\n this._close();\n\n // Need to close the read stream so node stops reading a dead file\n // descriptor. Then we can safely SIGHUP the shell.\n this._socket.once('close', () => {\n this.kill('SIGHUP');\n });\n\n this._socket.destroy();\n this._writeStream.dispose();\n }\n\n public kill(signal?: string): void {\n try {\n process.kill(this.pid, signal || 'SIGHUP');\n } catch (e) { /* swallow */ }\n }\n\n /**\n * Gets the name of the process.\n */\n public get process(): string {\n if (process.platform === 'darwin') {\n const title = pty.process(this._fd);\n return (title !== 'kernel_task') ? title : this._file;\n }\n\n return pty.process(this._fd, this._pty) || this._file;\n }\n\n /**\n * TTY\n */\n\n public resize(cols: number, rows: number): void {\n if (cols <= 0 || rows <= 0 || isNaN(cols) || isNaN(rows) || cols === Infinity || rows === Infinity) {\n throw new Error('resizing must be done using positive cols and rows');\n }\n pty.resize(this._fd, cols, rows);\n this._cols = cols;\n this._rows = rows;\n }\n\n public clear(): void {\n\n }\n\n private _sanitizeEnv(env: IProcessEnv): void {\n // Make sure we didn't start our server from inside tmux.\n delete env['TMUX'];\n delete env['TMUX_PANE'];\n\n // Make sure we didn't start our server from inside screen.\n // http://web.mit.edu/gnu/doc/html/screen_20.html\n delete env['STY'];\n delete env['WINDOW'];\n\n // Delete some variables that might confuse our terminal.\n delete env['WINDOWID'];\n delete env['TERMCAP'];\n delete env['COLUMNS'];\n delete env['LINES'];\n }\n}\n\ninterface IWriteTask {\n /** The buffer being written. */\n buffer: Buffer;\n /** The current offset of not yet written data. */\n offset: number;\n}\n\n/**\n * A custom write stream that writes directly to a file descriptor with proper\n * handling of backpressure and errors. This avoids some event loop exhaustion\n * issues that can occur when using the standard APIs in Node.\n */\nclass CustomWriteStream implements IDisposable {\n\n private readonly _writeQueue: IWriteTask[] = [];\n private _writeImmediate: NodeJS.Immediate | undefined;\n\n constructor(\n private readonly _fd: number,\n private readonly _encoding: BufferEncoding\n ) {\n }\n\n dispose(): void {\n clearImmediate(this._writeImmediate);\n this._writeImmediate = undefined;\n }\n\n write(data: string | Buffer): void {\n // Writes are put in a queue and processed asynchronously in order to handle\n // backpressure from the kernel buffer.\n const buffer = typeof data === 'string'\n ? Buffer.from(data, this._encoding)\n : Buffer.from(data);\n\n if (buffer.byteLength !== 0) {\n this._writeQueue.push({ buffer, offset: 0 });\n if (this._writeQueue.length === 1) {\n this._processWriteQueue();\n }\n }\n }\n\n private _processWriteQueue(): void {\n this._writeImmediate = undefined;\n\n if (this._writeQueue.length === 0) {\n return;\n }\n\n const task = this._writeQueue[0];\n\n // Write to the underlying file descriptor and handle it directly, rather\n // than using the `net.Socket`/`tty.WriteStream` wrappers which swallow and\n // mask errors like EAGAIN and can cause the thread to block indefinitely.\n fs.write(this._fd, task.buffer, task.offset, (err, written) => {\n if (err) {\n if ('code' in err && err.code === 'EAGAIN') {\n // `setImmediate` is used to yield to the event loop and re-attempt\n // the write later.\n this._writeImmediate = setImmediate(() => this._processWriteQueue());\n } else {\n // Stop processing immediately on unexpected error and log\n this._writeQueue.length = 0;\n console.error('Unhandled pty write error', err);\n }\n return;\n }\n\n task.offset += written;\n if (task.offset >= task.buffer.byteLength) {\n this._writeQueue.shift();\n }\n\n // Since there is more room in the kernel buffer, we can continue to write\n // until we hit EAGAIN or exhaust the queue.\n //\n // Note that old versions of bash, like v3.2 which ships in macOS, appears\n // to have a bug in its readline implementation that causes data\n // corruption when writes to the pty happens too quickly. Instead of\n // trying to workaround that we just accept it so that large pastes are as\n // fast as possible.\n // Context: https://github.com/microsoft/node-pty/issues/833\n this._processWriteQueue();\n });\n }\n}\n","/**\n * Copyright (c) 2012-2015, Christopher Jeffrey, Peter Sunde (MIT License)\n * Copyright (c) 2016, Daniel Imms (MIT License).\n * Copyright (c) 2018, Microsoft Corporation (MIT License).\n */\n\nimport { ITerminal, IPtyOpenOptions, IPtyForkOptions, IWindowsPtyForkOptions } from './interfaces';\nimport { ArgvOrCommandLine } from './types';\nimport { loadNativeModule } from './utils';\n\nlet terminalCtor: any;\nif (process.platform === 'win32') {\n terminalCtor = require('./windowsTerminal').WindowsTerminal;\n} else {\n terminalCtor = require('./unixTerminal').UnixTerminal;\n}\n\n/**\n * Forks a process as a pseudoterminal.\n * @param file The file to launch.\n * @param args The file's arguments as argv (string[]) or in a pre-escaped\n * CommandLine format (string). Note that the CommandLine option is only\n * available on Windows and is expected to be escaped properly.\n * @param options The options of the terminal.\n * @throws When the file passed to spawn with does not exists.\n * @see CommandLineToArgvW https://msdn.microsoft.com/en-us/library/windows/desktop/bb776391(v=vs.85).aspx\n * @see Parsing C++ Comamnd-Line Arguments https://msdn.microsoft.com/en-us/library/17w5ykft.aspx\n * @see GetCommandLine https://msdn.microsoft.com/en-us/library/windows/desktop/ms683156.aspx\n */\nexport function spawn(file?: string, args?: ArgvOrCommandLine, opt?: IPtyForkOptions | IWindowsPtyForkOptions): ITerminal {\n return new terminalCtor(file, args, opt);\n}\n\n/** @deprecated */\nexport function fork(file?: string, args?: ArgvOrCommandLine, opt?: IPtyForkOptions | IWindowsPtyForkOptions): ITerminal {\n return new terminalCtor(file, args, opt);\n}\n\n/** @deprecated */\nexport function createTerminal(file?: string, args?: ArgvOrCommandLine, opt?: IPtyForkOptions | IWindowsPtyForkOptions): ITerminal {\n return new terminalCtor(file, args, opt);\n}\n\nexport function open(options: IPtyOpenOptions): ITerminal {\n return terminalCtor.open(options);\n}\n\n/**\n * Expose the native API when not Windows, note that this is not public API and\n * could be removed at any time.\n */\nexport const native = (process.platform !== 'win32' ? loadNativeModule('pty').module : null);\n","import { writeAuditEntry } from '@xylabs/aries-audit-core'\nimport type { ClampPolicy } from '@xylabs/aries-clamp-core'\nimport { CLAMP_AUDIT_SCHEMA } from '@xylabs/aries-clamp-core'\n\nexport type ClampDecision = 'allowed' | 'denied' | 'prompted-allow' | 'prompted-deny'\n\nexport function logClampPermission(\n options: {\n args: string[]\n command: string\n decision: ClampDecision\n policy: ClampPolicy\n sessionId: string\n },\n): void {\n writeAuditEntry({\n ai: { product: 'clamp', provider: 'aries' },\n client: { name: '@xylabs/aries', version: '0.1.0' },\n cwd: process.cwd(),\n data: {\n args: options.args,\n command: options.command,\n decision: options.decision,\n policy: options.policy.name,\n },\n event: 'ClampPermission',\n schema: CLAMP_AUDIT_SCHEMA,\n sessionId: options.sessionId,\n timestamp: new Date().toISOString(),\n })\n}\n\nexport function logClampStart(\n options: {\n command: string\n policy: ClampPolicy\n sessionId: string\n },\n): void {\n writeAuditEntry({\n ai: { product: 'clamp', provider: 'aries' },\n client: { name: '@xylabs/aries', version: '0.1.0' },\n cwd: process.cwd(),\n data: {\n command: options.command,\n policy: options.policy.name,\n },\n event: 'ClampStart',\n schema: CLAMP_AUDIT_SCHEMA,\n sessionId: options.sessionId,\n timestamp: new Date().toISOString(),\n })\n}\n\nexport function logClampStop(\n options: {\n exitCode: number | null\n sessionId: string\n },\n): void {\n writeAuditEntry({\n ai: { product: 'clamp', provider: 'aries' },\n client: { name: '@xylabs/aries', version: '0.1.0' },\n cwd: process.cwd(),\n data: { exitCode: options.exitCode },\n event: 'ClampStop',\n schema: CLAMP_AUDIT_SCHEMA,\n sessionId: options.sessionId,\n timestamp: new Date().toISOString(),\n })\n}\n","import {\n createServer, type Server, type Socket,\n} from 'node:net'\n\nimport type { PermissionRequest, PermissionResponse } from '@xylabs/aries-clamp-core'\n\nexport interface IpcServerOptions {\n onPermissionRequest: (request: PermissionRequest) => Promise<PermissionResponse>\n socketPath: string\n}\n\nexport interface IpcServerHandle {\n close: () => void\n listening: Promise<void>\n server: Server\n}\n\nexport function createIpcServer(options: IpcServerOptions): IpcServerHandle {\n const { socketPath, onPermissionRequest } = options\n\n const server = createServer((socket: Socket) => {\n let data = ''\n\n socket.on('data', (chunk) => {\n data += chunk.toString()\n const newlineIdx = data.indexOf('\\n')\n if (newlineIdx === -1) return\n\n const line = data.slice(0, newlineIdx)\n data = data.slice(newlineIdx + 1)\n\n let request: PermissionRequest\n try {\n request = JSON.parse(line) as PermissionRequest\n } catch {\n socket.end(JSON.stringify({\n allowed: false, reason: 'Invalid request', requestId: 'unknown', type: 'permission-response',\n }) + '\\n')\n return\n }\n\n onPermissionRequest(request)\n .then((response) => {\n socket.end(JSON.stringify(response) + '\\n')\n })\n .catch(() => {\n const errorResponse: PermissionResponse = {\n allowed: false,\n reason: 'Internal error',\n requestId: request.requestId,\n type: 'permission-response',\n }\n socket.end(JSON.stringify(errorResponse) + '\\n')\n })\n })\n\n socket.on('error', () => {\n // Connection errors are non-fatal for the server\n })\n })\n\n const listening = new Promise<void>((resolve, reject) => {\n server.listen(socketPath, () => resolve())\n server.on('error', reject)\n })\n\n return {\n close: () => server.close(),\n listening,\n server,\n }\n}\n","import {\n closeSync, openSync, writeSync,\n} from 'node:fs'\nimport { createInterface } from 'node:readline'\nimport { ReadStream } from 'node:tty'\n\nimport type { TerminalRendererHandle } from './terminalRenderer.ts'\n\nexport type PromptDecision = 'allow-always' | 'allow-once' | 'deny'\n\nfunction parseAnswer(answer: string): PromptDecision {\n const trimmed = answer.trim().toLowerCase()\n if (trimmed === 'y' || trimmed === 'yes') return 'allow-once'\n if (trimmed === 'a' || trimmed === 'always') return 'allow-always'\n return 'deny'\n}\n\nfunction promptViaTty(fullCommand: string): Promise<PromptDecision> {\n let readFd: number\n let writeFd: number\n try {\n readFd = openSync('/dev/tty', 'r')\n writeFd = openSync('/dev/tty', 'w')\n } catch {\n return Promise.resolve('deny')\n }\n\n const ttyIn = new ReadStream(readFd)\n writeSync(writeFd, `\\n[clamp] \"${fullCommand}\" — Allow? [y/N/a(lways)] `)\n\n const rl = createInterface({ input: ttyIn, terminal: false })\n\n return new Promise<PromptDecision>((resolve) => {\n const cleanup = () => {\n rl.close()\n ttyIn.destroy()\n try {\n closeSync(writeFd)\n } catch { /* ignore */ }\n }\n\n rl.once('line', (answer) => {\n cleanup()\n resolve(parseAnswer(answer))\n })\n\n rl.once('close', () => resolve('deny'))\n ttyIn.on('error', () => {\n cleanup()\n resolve('deny')\n })\n })\n}\n\nfunction promptViaRenderer(\n fullCommand: string,\n renderer: TerminalRendererHandle,\n): Promise<PromptDecision> {\n const promptText = `[clamp] \"${fullCommand}\" — Allow? [y/N/a(lways)] `\n renderer.setStatusLine(promptText)\n\n // Read from /dev/tty for the answer (stdin is going to the PTY)\n let readFd: number\n try {\n readFd = openSync('/dev/tty', 'r')\n } catch {\n renderer.setStatusLine('[clamp] No TTY — denied')\n return Promise.resolve('deny')\n }\n\n const ttyIn = new ReadStream(readFd)\n const rl = createInterface({ input: ttyIn, terminal: false })\n\n return new Promise<PromptDecision>((resolve) => {\n const cleanup = () => {\n rl.close()\n ttyIn.destroy()\n renderer.setStatusLine('[clamp] Ready')\n }\n\n rl.once('line', (answer) => {\n const decision = parseAnswer(answer)\n cleanup()\n resolve(decision)\n })\n\n rl.once('close', () => {\n cleanup()\n resolve('deny')\n })\n\n ttyIn.on('error', () => {\n cleanup()\n resolve('deny')\n })\n })\n}\n\nexport async function promptUser(\n command: string,\n args: string[],\n renderer?: TerminalRendererHandle,\n): Promise<PromptDecision> {\n const fullCommand = [command, ...args].join(' ')\n\n if (renderer) {\n return promptViaRenderer(fullCommand, renderer)\n }\n return promptViaTty(fullCommand)\n}\n","/* eslint-disable unicorn/no-process-exit */\nimport { randomUUID } from 'node:crypto'\nimport { rmSync, unlinkSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport path from 'node:path'\n\nimport type {\n ClampPolicy, PermissionRequest, PermissionResponse,\n} from '@xylabs/aries-clamp-core'\nimport {\n CLAMP_IPC_ENV, CLAMP_ORIGINAL_PATH_ENV, CLAMP_SESSION_ENV, loadPolicy, matchProcess,\n} from '@xylabs/aries-clamp-core'\nimport chalk from 'chalk'\n\nimport type { ClampDecision } from './clampAudit.ts'\nimport {\n logClampPermission, logClampStart, logClampStop,\n} from './clampAudit.ts'\nimport { createIpcServer } from './ipcServer.ts'\nimport { promptUser } from './promptUser.ts'\nimport type { SandboxExecResult } from './sandboxExec.ts'\nimport { spawnSandboxed } from './sandboxExec.ts'\nimport { createShellEnvOverrides } from './shellEnvSetup.ts'\nimport { generateShimDirectory } from './shimGenerator.ts'\nimport type { TerminalRendererHandle } from './terminalRenderer.ts'\n\nfunction printDryRun(command: string, args: string[], policy: ClampPolicy, auditEnabled: boolean): void {\n console.log(chalk.cyan('\\n[clamp] Dry run — would sandbox with:\\n'))\n console.log(chalk.white(` Command: ${command} ${args.join(' ')}`))\n console.log(chalk.white(` Policy: ${policy.name}`))\n console.log(chalk.white(` Default action: ${policy.defaultAction ?? 'prompt'}`))\n console.log(chalk.white(` Audit: ${auditEnabled ? 'enabled' : 'disabled'}`))\n if (policy.process) {\n console.log(chalk.green(` Allowed: ${policy.process.allow?.join(', ') ?? '(none)'}`))\n console.log(chalk.yellow(` Prompted: ${policy.process.prompt?.join(', ') ?? '(none)'}`))\n console.log(chalk.red(` Denied: ${policy.process.deny?.join(', ') ?? '(none)'}`))\n }\n if (policy.filesystem) {\n console.log(chalk.white(' Filesystem sandbox: enabled'))\n }\n console.log('')\n}\n\nasync function resolveDecision(\n command: string,\n args: string[],\n alwaysAllow: Set<string>,\n renderer?: TerminalRendererHandle,\n): Promise<ClampDecision> {\n const answer = await promptUser(command, args, renderer)\n if (answer === 'allow-always') {\n alwaysAllow.add(command)\n return 'prompted-allow'\n }\n return answer === 'allow-once' ? 'prompted-allow' : 'prompted-deny'\n}\n\ninterface SandboxRef {\n sandbox?: SandboxExecResult\n}\n\nfunction createPermissionHandler(\n policy: ClampPolicy,\n sessionId: string,\n auditEnabled: boolean,\n alwaysAllow: Set<string>,\n sandboxRef: SandboxRef,\n) {\n const defaultAction = policy.defaultAction ?? 'prompt'\n\n return async (request: PermissionRequest): Promise<PermissionResponse> => {\n const {\n command: reqCommand, args: reqArgs, requestId,\n } = request\n\n if (alwaysAllow.has(reqCommand)) {\n if (auditEnabled) {\n logClampPermission({\n args: reqArgs, command: reqCommand, decision: 'allowed', policy, sessionId,\n })\n }\n return {\n allowed: true, requestId, type: 'permission-response',\n }\n }\n\n const level = matchProcess(reqCommand, policy.process, defaultAction)\n\n if (level === 'allow' || level === 'deny') {\n const decision: ClampDecision = level === 'allow' ? 'allowed' : 'denied'\n if (auditEnabled) {\n logClampPermission({\n args: reqArgs, command: reqCommand, decision, policy, sessionId,\n })\n }\n return {\n allowed: level === 'allow',\n reason: level === 'deny' ? `Policy \"${policy.name}\": deny` : undefined,\n requestId,\n type: 'permission-response',\n }\n }\n\n // Prompt: pause PTY output, ask user via status bar, resume\n sandboxRef.sandbox?.pause()\n const decision = await resolveDecision(reqCommand, reqArgs, alwaysAllow, sandboxRef.sandbox?.renderer)\n sandboxRef.sandbox?.resume()\n\n if (auditEnabled) {\n logClampPermission({\n args: reqArgs, command: reqCommand, decision, policy, sessionId,\n })\n }\n\n const allowed = decision === 'prompted-allow'\n return {\n allowed,\n reason: allowed ? undefined : `Policy \"${policy.name}\": denied by user`,\n requestId,\n type: 'permission-response',\n }\n }\n}\n\nfunction buildChildEnv(\n shimDir: string,\n socketPath: string,\n sessionId: string,\n shellEnv: Record<string, string>,\n): Record<string, string | undefined> {\n const originalPath = process.env.PATH ?? ''\n return {\n ...process.env,\n ...shellEnv,\n PATH: `${shimDir}${path.delimiter}${originalPath}`,\n [CLAMP_IPC_ENV]: socketPath,\n [CLAMP_ORIGINAL_PATH_ENV]: originalPath,\n [CLAMP_SESSION_ENV]: sessionId,\n }\n}\n\nfunction cleanupResources(socketPath: string, shimDir: string): void {\n try {\n unlinkSync(socketPath)\n } catch { /* ignore */ }\n try {\n rmSync(shimDir, { force: true, recursive: true })\n } catch { /* ignore */ }\n}\n\nfunction parseArgs(argv: Record<string, unknown>) {\n return {\n args: (argv.args as string[] | undefined) ?? [],\n auditEnabled: (argv.audit as boolean) !== false,\n command: argv.command as string,\n dryRun: (argv['dry-run'] as boolean) ?? false,\n policyOption: argv.policy as string | undefined,\n }\n}\n\nexport async function runClamped(argv: Record<string, unknown>): Promise<void> {\n const {\n command, args, policyOption, auditEnabled, dryRun,\n } = parseArgs(argv)\n\n let policy: ClampPolicy\n try {\n policy = loadPolicy({ path: policyOption })\n } catch (err) {\n console.error(chalk.red(`Failed to load policy: ${String(err)}`))\n process.exit(1)\n }\n\n if (dryRun) {\n printDryRun(command, args, policy, auditEnabled)\n return\n }\n\n const sessionId = randomUUID()\n const shimDir = await generateShimDirectory(policy)\n const shellOverrides = createShellEnvOverrides(shimDir)\n const socketPath = path.join(tmpdir(), `aries-clamp-${process.pid}-${randomUUID().slice(0, 8)}.sock`)\n\n const sandboxRef: SandboxRef = {}\n const handler = createPermissionHandler(policy, sessionId, auditEnabled, new Set<string>(), sandboxRef)\n const ipcHandle = createIpcServer({ onPermissionRequest: handler, socketPath })\n await ipcHandle.listening\n\n if (auditEnabled) logClampStart({\n command, policy, sessionId,\n })\n\n console.error(chalk.cyan(`[clamp] Session ${sessionId.slice(0, 8)} — policy: ${policy.name}`))\n\n const childEnv = buildChildEnv(shimDir, socketPath, sessionId, shellOverrides.env)\n const sandbox = spawnSandboxed({\n args, command, env: childEnv, policy,\n })\n sandboxRef.sandbox = sandbox\n\n // Set initial status line if renderer is available\n sandbox.renderer?.setStatusLine(`[clamp] policy: ${policy.name} | allowed: 0 | denied: 0`)\n\n const exitCode = await sandbox.exitCode\n\n sandbox.cleanup()\n shellOverrides.cleanup()\n ipcHandle.close()\n cleanupResources(socketPath, shimDir)\n\n if (auditEnabled) logClampStop({ exitCode, sessionId })\n\n console.error(chalk.gray(`\\n[clamp] Session ended (exit code: ${exitCode})`))\n process.exit(exitCode ?? 1)\n}\n","import { spawn } from 'node:child_process'\nimport {\n mkdtempSync, rmSync, writeFileSync,\n} from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport path from 'node:path'\n\nimport type { ClampPolicy } from '@xylabs/aries-clamp-core'\nimport { detectPlatform, generateMacOSProfile } from '@xylabs/aries-clamp-core'\nimport chalk from 'chalk'\n\n// Lazy-loaded: node-pty is a native module that may not be available in standalone builds\n// import * as pty from 'node-pty'\nimport type { TerminalRendererHandle } from './terminalRenderer.ts'\nimport { createTerminalRenderer } from './terminalRenderer.ts'\n\nexport interface SandboxExecOptions {\n args: string[]\n command: string\n env: Record<string, string | undefined>\n policy: ClampPolicy\n}\n\nexport interface SandboxExecResult {\n cleanup: () => void\n exitCode: Promise<number | null>\n pause: () => void\n renderer: TerminalRendererHandle | undefined\n resume: () => void\n}\n\nfunction createMacOSSandbox(policy: ClampPolicy): { args: string[]; cleanup: () => void } {\n const profileContent = generateMacOSProfile(policy, process.cwd())\n const profileDir = mkdtempSync(path.join(tmpdir(), 'aries-clamp-sb-'))\n const profilePath = path.join(profileDir, 'sandbox.sb')\n writeFileSync(profilePath, profileContent, 'utf8')\n console.error(chalk.gray('[clamp] macOS sandbox enabled'))\n return {\n args: ['-f', profilePath],\n cleanup: () => {\n try {\n rmSync(profileDir, { force: true, recursive: true })\n } catch { /* ignore */ }\n },\n }\n}\n\nfunction resolveSpawnCommand(\n command: string,\n args: string[],\n policy: ClampPolicy,\n): { cleanupFns: (() => void)[]; spawnArgs: string[]; spawnCommand: string } {\n const platform = detectPlatform()\n const cleanupFns: (() => void)[] = []\n\n if (platform === 'darwin' && policy.filesystem) {\n const sandbox = createMacOSSandbox(policy)\n cleanupFns.push(sandbox.cleanup)\n return {\n cleanupFns, spawnArgs: [...sandbox.args, command, ...args], spawnCommand: 'sandbox-exec',\n }\n }\n\n if (platform === 'linux' && policy.filesystem) {\n console.error(chalk.yellow('[clamp] Linux filesystem sandbox: Landlock integration pending'))\n } else if (policy.filesystem) {\n console.error(chalk.yellow(`[clamp] OS filesystem sandbox not available on ${platform}`))\n }\n\n return {\n cleanupFns, spawnArgs: args, spawnCommand: command,\n }\n}\n\nfunction cleanEnvRecord(env: Record<string, string | undefined>): Record<string, string> {\n const clean: Record<string, string> = {}\n for (const [k, v] of Object.entries(env)) {\n if (v !== undefined) clean[k] = v\n }\n return clean\n}\n\nfunction spawnWithRenderedPty(\n spawnCommand: string,\n spawnArgs: string[],\n env: Record<string, string>,\n): SandboxExecResult & { ok: true } | { ok: false } {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/consistent-type-imports\n const pty = require('node-pty') as typeof import('node-pty')\n const renderer = createTerminalRenderer()\n const innerRows = (process.stdout.rows ?? 24) - 2\n\n const ptyProcess = pty.spawn(spawnCommand, spawnArgs, {\n cols: process.stdout.columns ?? 80,\n cwd: process.cwd(),\n env,\n name: process.env.TERM ?? 'xterm-256color',\n rows: innerRows,\n })\n\n let paused = false\n\n // Feed PTY output into the headless terminal for rendering\n ptyProcess.onData((data) => {\n if (!paused) {\n renderer.write(data)\n }\n })\n\n // Forward stdin to PTY\n if (process.stdin.isTTY) process.stdin.setRawMode(true)\n process.stdin.resume()\n const onStdin = (data: Buffer) => {\n ptyProcess.write(data.toString())\n }\n process.stdin.on('data', onStdin)\n\n // Handle resize\n const onResize = () => {\n const newInnerRows = (process.stdout.rows ?? 24) - 2\n ptyProcess.resize(process.stdout.columns ?? 80, newInnerRows)\n }\n process.stdout.on('resize', onResize)\n\n const exitCode = new Promise<number | null>((resolve) => {\n ptyProcess.onExit(({ exitCode: code }) => {\n process.stdin.removeListener('data', onStdin)\n process.stdout.removeListener('resize', onResize)\n if (process.stdin.isTTY) process.stdin.setRawMode(false)\n process.stdin.pause()\n renderer.destroy()\n resolve(code)\n })\n })\n\n return {\n cleanup: () => { /* renderer handles cleanup on exit */ },\n exitCode,\n ok: true,\n pause: () => { paused = true },\n renderer,\n resume: () => {\n paused = false\n renderer.render()\n },\n }\n } catch {\n return { ok: false }\n }\n}\n\nfunction spawnFallback(\n spawnCommand: string,\n spawnArgs: string[],\n env: Record<string, string | undefined>,\n): SandboxExecResult {\n console.error(chalk.yellow('[clamp] PTY unavailable, falling back to basic stdio passthrough'))\n const child = spawn(spawnCommand, spawnArgs, { env, stdio: 'inherit' })\n const exitCode = new Promise<number | null>((resolve) => {\n child.on('close', code => resolve(code))\n child.on('error', () => resolve(1))\n })\n const noop = () => { /* no PTY to control */ }\n return {\n cleanup: noop, exitCode, pause: noop, renderer: undefined, resume: noop,\n }\n}\n\nexport function spawnSandboxed(options: SandboxExecOptions): SandboxExecResult {\n const { env, policy } = options\n const {\n spawnCommand, spawnArgs, cleanupFns,\n } = resolveSpawnCommand(options.command, options.args, policy)\n\n const cleanEnv = cleanEnvRecord(env)\n const ptyResult = spawnWithRenderedPty(spawnCommand, spawnArgs, cleanEnv)\n const result = ptyResult.ok ? ptyResult : spawnFallback(spawnCommand, spawnArgs, env)\n\n const originalCleanup = result.cleanup\n return {\n ...result,\n cleanup: () => {\n originalCleanup()\n for (const fn of cleanupFns) fn()\n },\n }\n}\n","import type { IBufferCell, Terminal as TerminalType } from '@xterm/headless'\nimport pkg from '@xterm/headless'\n\nconst { Terminal } = pkg\n\nconst STATUS_BAR_HEIGHT = 2\n\n// ANSI escape helpers\nconst ESC = '\\u001B['\nconst moveTo = (row: number, col: number) => `${ESC}${row};${col}H`\nconst resetStyle = `${ESC}0m`\nconst hideCursor = `${ESC}?25l`\nconst showCursor = `${ESC}?25h`\nconst clearScreen = `${ESC}2J`\nconst setBg = (r: number, g: number, b: number) => `${ESC}48;2;${r};${g};${b}m`\nconst setFg = (r: number, g: number, b: number) => `${ESC}38;2;${r};${g};${b}m`\nconst fgPalette = (n: number) => `${ESC}38;5;${n}m`\nconst bgPalette = (n: number) => `${ESC}48;5;${n}m`\nconst bold = `${ESC}1m`\nconst dim = `${ESC}2m`\nconst italic = `${ESC}3m`\nconst underline = `${ESC}4m`\nconst inverse = `${ESC}7m`\nconst strikethrough = `${ESC}9m`\n\ninterface CellStyle {\n attrs: string\n bg: string\n fg: string\n}\n\nfunction getCellStyle(cell: IBufferCell | undefined): CellStyle {\n if (!cell) return {\n attrs: '', bg: '', fg: '',\n }\n\n let fg = ''\n let bg = ''\n let attrs = ''\n\n if (cell.isFgRGB()) {\n const color = cell.getFgColor()\n fg = setFg((color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF)\n } else if (cell.getFgColorMode() !== 0) {\n fg = fgPalette(cell.getFgColor())\n }\n\n if (cell.isBgRGB()) {\n const color = cell.getBgColor()\n bg = setBg((color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF)\n } else if (cell.getBgColorMode() !== 0) {\n bg = bgPalette(cell.getBgColor())\n }\n\n if (cell.isBold()) attrs += bold\n if (cell.isDim()) attrs += dim\n if (cell.isItalic()) attrs += italic\n if (cell.isUnderline()) attrs += underline\n if (cell.isInverse()) attrs += inverse\n if (cell.isStrikethrough()) attrs += strikethrough\n\n return {\n attrs, bg, fg,\n }\n}\n\nexport interface TerminalRendererHandle {\n destroy: () => void\n render: () => void\n setStatusLine: (line: string) => void\n terminal: TerminalType\n write: (data: string) => void\n}\n\nexport function createTerminalRenderer(): TerminalRendererHandle {\n const realCols = process.stdout.columns ?? 80\n const realRows = process.stdout.rows ?? 24\n const innerRows = realRows - STATUS_BAR_HEIGHT\n\n const terminal = new Terminal({\n cols: realCols,\n rows: innerRows,\n })\n\n let statusLine = ''\n let renderScheduled = false\n\n function renderBuffer(): void {\n const buf = terminal.buffer.active\n const cols = terminal.cols\n const rows = terminal.rows\n const output: string[] = [hideCursor]\n\n for (let y = 0; y < rows; y++) {\n const line = buf.getLine(y)\n output.push(moveTo(y + 1, 1))\n\n if (!line) {\n output.push(resetStyle + ' '.repeat(cols))\n continue\n }\n\n let lineStr = ''\n let lastStyle = ''\n\n for (let x = 0; x < cols; x++) {\n const cell = line.getCell(x)\n if (!cell || cell.getWidth() === 0) continue\n\n const style = getCellStyle(cell)\n const styleStr = resetStyle + style.fg + style.bg + style.attrs\n\n if (styleStr !== lastStyle) {\n lineStr += styleStr\n lastStyle = styleStr\n }\n\n const ch = cell.getChars()\n lineStr += ch || ' '\n }\n\n output.push(lineStr + resetStyle)\n }\n\n // Draw status bar\n const statusRow = realRows - 1\n output.push(\n moveTo(statusRow, 1),\n resetStyle + dim + '─'.repeat(realCols) + resetStyle,\n moveTo(statusRow + 1, 1),\n resetStyle,\n statusLine.padEnd(realCols).slice(0, realCols),\n resetStyle,\n )\n\n // Position cursor where the virtual terminal's cursor is\n const cursorY = buf.cursorY + 1\n const cursorX = buf.cursorX + 1\n output.push(moveTo(cursorY, cursorX), showCursor)\n\n process.stdout.write(output.join(''))\n }\n\n function scheduleRender(): void {\n if (renderScheduled) return\n renderScheduled = true\n setImmediate(() => {\n renderScheduled = false\n renderBuffer()\n })\n }\n\n function handleResize(): void {\n const newCols = process.stdout.columns ?? 80\n const newRows = process.stdout.rows ?? 24\n const newInnerRows = newRows - STATUS_BAR_HEIGHT\n terminal.resize(newCols, newInnerRows)\n process.stdout.write(clearScreen)\n scheduleRender()\n }\n\n process.stdout.on('resize', handleResize)\n\n // Initial clear\n process.stdout.write(clearScreen + moveTo(1, 1))\n\n return {\n destroy: () => {\n process.stdout.removeListener('resize', handleResize)\n process.stdout.write(clearScreen + moveTo(1, 1) + showCursor + resetStyle)\n terminal.dispose()\n },\n render: scheduleRender,\n setStatusLine: (line: string) => {\n statusLine = line\n scheduleRender()\n },\n terminal,\n write: (data: string) => {\n terminal.write(data)\n scheduleRender()\n },\n }\n}\n","import {\n mkdtempSync, rmSync, writeFileSync,\n} from 'node:fs'\nimport { homedir, tmpdir } from 'node:os'\nimport path from 'node:path'\n\n/**\n * Creates temp shell config files that re-prepend the shim directory to PATH\n * after the user's normal shell profile loads. This is necessary because login\n * shells (used by Claude Code, etc.) source ~/.zshrc / ~/.bashrc which reset PATH.\n *\n * Strategy:\n * - For zsh: set ZDOTDIR to a temp dir with a .zshenv that sources the real\n * .zshenv and then prepends the shim dir to PATH. .zshenv runs first, before\n * .zshrc, but we also create .zshrc that re-prepends AFTER .zshrc would run.\n * - For bash: set BASH_ENV to a script that prepends PATH.\n * - Both: set ENV for POSIX sh compatibility.\n */\nexport function createShellEnvOverrides(shimDir: string): {\n cleanup: () => void\n env: Record<string, string>\n} {\n const tmpDir = mkdtempSync(path.join(tmpdir(), 'aries-clamp-env-'))\n const home = homedir()\n\n // Create a .zshenv that sources the real one then fixes PATH\n const zshenv = [\n '# Aries Clamp: source real .zshenv then re-prepend shim dir',\n `[ -f \"${home}/.zshenv\" ] && ZDOTDIR=\"${home}\" source \"${home}/.zshenv\"`,\n `export PATH=\"${shimDir}:\\${PATH}\"`,\n ].join('\\n') + '\\n'\n writeFileSync(path.join(tmpDir, '.zshenv'), zshenv, 'utf8')\n\n // Create a .zshrc that sources the real one then re-prepends\n // (because .zshrc often modifies PATH again)\n const zshrc = [\n '# Aries Clamp: source real .zshrc then re-prepend shim dir',\n `[ -f \"${home}/.zshrc\" ] && ZDOTDIR=\"${home}\" source \"${home}/.zshrc\"`,\n `export PATH=\"${shimDir}:\\${PATH}\"`,\n ].join('\\n') + '\\n'\n writeFileSync(path.join(tmpDir, '.zshrc'), zshrc, 'utf8')\n\n // Create a .zprofile that sources the real one then re-prepends\n const zprofile = [\n '# Aries Clamp: source real .zprofile then re-prepend shim dir',\n `[ -f \"${home}/.zprofile\" ] && ZDOTDIR=\"${home}\" source \"${home}/.zprofile\"`,\n `export PATH=\"${shimDir}:\\${PATH}\"`,\n ].join('\\n') + '\\n'\n writeFileSync(path.join(tmpDir, '.zprofile'), zprofile, 'utf8')\n\n // Bash ENV script (sourced by non-interactive bash and sh)\n const bashEnv = [\n '# Aries Clamp: prepend shim dir to PATH',\n `export PATH=\"${shimDir}:\\${PATH}\"`,\n ].join('\\n') + '\\n'\n const bashEnvPath = path.join(tmpDir, 'bash_env.sh')\n writeFileSync(bashEnvPath, bashEnv, 'utf8')\n\n // Bash startup script for interactive bash\n const bashrc = [\n '# Aries Clamp: source real .bashrc then re-prepend shim dir',\n `[ -f \"${home}/.bashrc\" ] && source \"${home}/.bashrc\"`,\n `export PATH=\"${shimDir}:\\${PATH}\"`,\n ].join('\\n') + '\\n'\n writeFileSync(path.join(tmpDir, '.bashrc'), bashrc, 'utf8')\n\n return {\n cleanup: () => {\n try {\n rmSync(tmpDir, { force: true, recursive: true })\n } catch { /* ignore */ }\n },\n env: {\n BASH_ENV: bashEnvPath,\n ENV: bashEnvPath,\n ZDOTDIR: tmpDir,\n },\n }\n}\n","import {\n chmodSync, existsSync, mkdtempSync, writeFileSync,\n} from 'node:fs'\nimport { createRequire } from 'node:module'\nimport { tmpdir } from 'node:os'\nimport path from 'node:path'\n\nimport type { ClampPolicy } from '@xylabs/aries-clamp-core'\n\n// Common commands that should be shimmed even if not in policy\nconst DANGEROUS_COMMANDS = [\n 'chmod',\n 'chown',\n 'curl',\n 'docker',\n 'kill',\n 'killall',\n 'mv',\n 'pkill',\n 'rm',\n 'rmdir',\n 'sudo',\n 'wget',\n]\n\nfunction getGatekeeperPath(): string {\n // Use createRequire to resolve the package from the current file's context\n const require = createRequire(import.meta.url)\n try {\n const pluginPkg = require.resolve('@xylabs/aries-clamp-plugin/package.json')\n return path.join(path.dirname(pluginPkg), 'dist', 'shim', 'gatekeeper.mjs')\n } catch {\n // Fallback: walk up from cwd to find packages/clamp-plugin\n const candidates = [\n path.resolve('packages', 'clamp-plugin', 'dist', 'shim', 'gatekeeper.mjs'),\n path.resolve('node_modules', '@xylabs', 'aries-clamp-plugin', 'dist', 'shim', 'gatekeeper.mjs'),\n ]\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate\n }\n throw new Error('Could not find gatekeeper.mjs — is @xylabs/aries-clamp-plugin built?')\n }\n}\n\nexport async function generateShimDirectory(policy: ClampPolicy): Promise<string> {\n const shimDir = mkdtempSync(path.join(tmpdir(), 'aries-clamp-'))\n const gatekeeperPath = getGatekeeperPath()\n const nodePath = process.execPath\n\n // Collect all commands that need shims\n const commands = new Set<string>()\n\n const processRules = policy.process\n if (processRules) {\n for (const cmd of processRules.allow ?? []) commands.add(cmd)\n for (const cmd of processRules.prompt ?? []) commands.add(cmd)\n for (const cmd of processRules.deny ?? []) commands.add(cmd)\n }\n\n // Add dangerous commands for prompt-by-default\n for (const cmd of DANGEROUS_COMMANDS) {\n commands.add(cmd)\n }\n\n // Generate a wrapper script for each command\n for (const cmd of commands) {\n const shimPath = path.join(shimDir, cmd)\n const script = `#!/bin/sh\\nexec \"${nodePath}\" \"${gatekeeperPath}\" \"${cmd}\" \"$@\"\\n`\n writeFileSync(shimPath, script, 'utf8')\n chmodSync(shimPath, 0o755)\n }\n\n return shimDir\n}\n","import type { CommandModule } from 'yargs'\n\nimport { runClamped } from '../actions/clamp/index.ts'\n\nexport const clampRunCommand: CommandModule = {\n builder: yargs =>\n yargs\n .positional('command', {\n demandOption: true,\n describe: 'Command to run inside the sandbox',\n type: 'string',\n })\n .positional('args', {\n array: true,\n describe: 'Arguments for the command',\n type: 'string',\n })\n .option('policy', {\n alias: 'p',\n describe: 'Policy file path or name',\n type: 'string',\n })\n .option('audit', {\n default: true,\n describe: 'Enable audit logging',\n type: 'boolean',\n })\n .option('dry-run', {\n default: false,\n describe: 'Show what would be sandboxed without running',\n type: 'boolean',\n }),\n command: 'run <command> [args..]',\n describe: 'Run a command inside the clamp sandbox',\n handler: async (argv) => {\n await runClamped(argv)\n },\n}\n"],"mappings":"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","names":["EventEmitter2","Terminal","ConoutConnection","path","WindowsPtyAgent","WindowsTerminal","path","UnixTerminal","CustomWriteStream","spawn","rmSync","tmpdir","path","chalk","mkdtempSync","rmSync","writeFileSync","tmpdir","path","mkdtempSync","writeFileSync","tmpdir","path","require","chalk","decision","path","rmSync","tmpdir"]}
@@ -0,0 +1,273 @@
1
+ // src/actions/datalake/audit/auditLog.ts
2
+ import { spawn } from "child_process";
3
+ import {
4
+ createReadStream,
5
+ existsSync,
6
+ readdirSync,
7
+ statSync,
8
+ unlinkSync
9
+ } from "fs";
10
+ import path2 from "path";
11
+ import { createInterface } from "readline";
12
+ import { createDatalakeClient } from "@xylabs/aries-datalake-client";
13
+ import chalk from "chalk";
14
+
15
+ // src/actions/datalake/dev/paths.ts
16
+ import { homedir } from "os";
17
+ import path from "path";
18
+ function getAriesHome() {
19
+ return process.env.ARIES_HOME ?? path.join(homedir(), ".aries");
20
+ }
21
+ function getDevDir() {
22
+ return path.join(getAriesHome(), "dev");
23
+ }
24
+
25
+ // src/actions/datalake/audit/auditLog.ts
26
+ var AUDIT_FILE_PATTERN = /^audit-\d{4}-\d{2}-\d{2}\.log$/;
27
+ function defaultSingleFile() {
28
+ return path2.join(getDevDir(), "audit.log");
29
+ }
30
+ function defaultRotationDir() {
31
+ return path2.join(getDevDir(), "audit");
32
+ }
33
+ function listRotatedFiles(directory) {
34
+ if (!existsSync(directory)) return [];
35
+ return readdirSync(directory).filter((file) => AUDIT_FILE_PATTERN.test(file)).toSorted().map((file) => path2.join(directory, file));
36
+ }
37
+ function resolveSource(override) {
38
+ if (override) {
39
+ if (!existsSync(override)) return void 0;
40
+ const stat = statSync(override);
41
+ if (stat.isDirectory()) {
42
+ const files2 = listRotatedFiles(override);
43
+ if (files2.length === 0) return void 0;
44
+ return {
45
+ files: files2,
46
+ tailFile: files2.at(-1),
47
+ description: override
48
+ };
49
+ }
50
+ return {
51
+ files: [override],
52
+ tailFile: override,
53
+ description: override
54
+ };
55
+ }
56
+ const single = defaultSingleFile();
57
+ if (existsSync(single)) {
58
+ return {
59
+ files: [single],
60
+ tailFile: single,
61
+ description: single
62
+ };
63
+ }
64
+ const rotDir = defaultRotationDir();
65
+ const files = listRotatedFiles(rotDir);
66
+ if (files.length === 0) return void 0;
67
+ return {
68
+ files,
69
+ tailFile: files.at(-1),
70
+ description: rotDir
71
+ };
72
+ }
73
+ async function resolveDatalakeId(target) {
74
+ if (target.startsWith("dl_")) return target;
75
+ const client = createDatalakeClient();
76
+ const descriptor = await client.describe(target);
77
+ return descriptor.id;
78
+ }
79
+ async function buildFilters(options) {
80
+ return {
81
+ datalakeId: options.datalake ? await resolveDatalakeId(options.datalake) : void 0,
82
+ statusPrefix: options.status,
83
+ method: options.method?.toUpperCase(),
84
+ authenticated: options.authenticated === void 0 ? void 0 : options.authenticated === "true",
85
+ grepRegex: options.grep ? new RegExp(options.grep) : void 0
86
+ };
87
+ }
88
+ function matchesFilters(line, entry, filters) {
89
+ if (filters.datalakeId && entry.datalakeId !== filters.datalakeId) return false;
90
+ if (filters.statusPrefix && !String(entry.statusCode).startsWith(filters.statusPrefix)) return false;
91
+ if (filters.method && entry.method !== filters.method) return false;
92
+ if (filters.authenticated !== void 0 && entry.authenticated !== filters.authenticated) return false;
93
+ if (filters.grepRegex && !filters.grepRegex.test(line)) return false;
94
+ return true;
95
+ }
96
+ function formatEntry(entry) {
97
+ const when = entry.time.slice(11, 19);
98
+ const status = entry.statusCode >= 500 ? chalk.red(String(entry.statusCode)) : entry.statusCode >= 400 ? chalk.yellow(String(entry.statusCode)) : chalk.green(String(entry.statusCode));
99
+ const subject = entry.authenticated ? chalk.magenta(entry.subject) : chalk.gray(entry.subject);
100
+ const duration = chalk.gray(`${entry.durationMs}ms`);
101
+ return `${chalk.gray(when)} ${status} ${entry.method.padEnd(6)} ${entry.path} ${subject} ${duration}`;
102
+ }
103
+ function parseLine(line) {
104
+ try {
105
+ return JSON.parse(line);
106
+ } catch {
107
+ return void 0;
108
+ }
109
+ }
110
+ async function auditLog(options = {}) {
111
+ const source = resolveSource(options.file);
112
+ if (!source) {
113
+ const location = options.file ?? `${defaultSingleFile()} or ${defaultRotationDir()}`;
114
+ console.log(chalk.yellow(`no audit log at ${location}`));
115
+ console.log(chalk.gray("enable with `aries datalake dev up --audit` (or --audit --audit-rotate)"));
116
+ process.exitCode = 3;
117
+ return;
118
+ }
119
+ const filters = await buildFilters(options);
120
+ if (options.follow) {
121
+ await followLog(source.tailFile, filters, options.lines ?? 0);
122
+ return;
123
+ }
124
+ await dumpTail(source.files, filters, options.lines ?? 50);
125
+ }
126
+ async function dumpTail(files, filters, limit) {
127
+ const ring = [];
128
+ for (const filePath of files) {
129
+ const stream = createReadStream(filePath, { encoding: "utf8" });
130
+ const rl = createInterface({ input: stream, crlfDelay: Infinity });
131
+ for await (const line of rl) {
132
+ if (!line.trim()) continue;
133
+ const entry = parseLine(line);
134
+ if (!entry) continue;
135
+ if (!matchesFilters(line, entry, filters)) continue;
136
+ ring.push(formatEntry(entry));
137
+ if (ring.length > limit) ring.shift();
138
+ }
139
+ }
140
+ for (const row of ring) console.log(row);
141
+ }
142
+ async function followLog(filePath, filters, initialLines) {
143
+ if (initialLines > 0) {
144
+ await dumpTail([filePath], filters, initialLines);
145
+ }
146
+ const startOffset = statSync(filePath).size;
147
+ const child = spawn("tail", ["-f", "-c", "+0", filePath], { stdio: ["ignore", "pipe", "inherit"] });
148
+ child.stdout.setEncoding("utf8");
149
+ let buffer = "";
150
+ let bytesSeen = 0;
151
+ child.stdout.on("data", (chunk) => {
152
+ bytesSeen += Buffer.byteLength(chunk, "utf8");
153
+ buffer += chunk;
154
+ const lines = buffer.split("\n");
155
+ buffer = lines.pop() ?? "";
156
+ if (bytesSeen < startOffset) return;
157
+ for (const line of lines) {
158
+ if (!line.trim()) continue;
159
+ const entry = parseLine(line);
160
+ if (!entry) continue;
161
+ if (!matchesFilters(line, entry, filters)) continue;
162
+ console.log(formatEntry(entry));
163
+ }
164
+ });
165
+ await new Promise((resolve) => {
166
+ child.on("exit", (code) => {
167
+ process.exitCode = code ?? 0;
168
+ resolve();
169
+ });
170
+ });
171
+ }
172
+ function purgeAuditLog(options) {
173
+ const directory = options.directory ?? defaultRotationDir();
174
+ if (!existsSync(directory)) return [];
175
+ const cutoff = Date.now() - options.maxAgeDays * 864e5;
176
+ const removed = [];
177
+ for (const file of readdirSync(directory)) {
178
+ if (!AUDIT_FILE_PATTERN.test(file)) continue;
179
+ const fullPath = path2.join(directory, file);
180
+ const stat = statSync(fullPath);
181
+ if (stat.mtimeMs >= cutoff) continue;
182
+ if (!options.dryRun) unlinkSync(fullPath);
183
+ removed.push(fullPath);
184
+ }
185
+ return removed;
186
+ }
187
+
188
+ // src/commands/datalakeAuditCommand.ts
189
+ var viewCommand = {
190
+ command: ["view", "$0"],
191
+ describe: "Print audit log rows (default)",
192
+ builder: (yargs) => yargs.option("follow", {
193
+ alias: "f",
194
+ type: "boolean",
195
+ default: false,
196
+ describe: "Stream new rows as they arrive (tails the most recent file)"
197
+ }).option("lines", {
198
+ alias: "n",
199
+ type: "number",
200
+ default: 50,
201
+ describe: "Tail this many rows (0 = start fresh in --follow mode)"
202
+ }).option("datalake", {
203
+ alias: "d",
204
+ type: "string",
205
+ describe: "Filter by datalake name or id"
206
+ }).option("status", {
207
+ type: "string",
208
+ describe: "Status code prefix filter (e.g. 4 matches 4xx)"
209
+ }).option("method", {
210
+ type: "string",
211
+ describe: "HTTP method filter (GET, POST, etc.)"
212
+ }).option("authenticated", {
213
+ type: "string",
214
+ choices: ["true", "false"],
215
+ describe: "Show only authenticated or only anonymous requests"
216
+ }).option("grep", {
217
+ type: "string",
218
+ describe: "Regex pattern applied to the raw JSON line"
219
+ }).option("file", {
220
+ type: "string",
221
+ describe: "File or directory (auto-detects rotation layout)"
222
+ }),
223
+ handler: async (argv) => {
224
+ await auditLog({
225
+ follow: argv.follow,
226
+ lines: argv.lines,
227
+ datalake: argv.datalake,
228
+ status: argv.status,
229
+ method: argv.method,
230
+ authenticated: argv.authenticated,
231
+ grep: argv.grep,
232
+ file: argv.file
233
+ });
234
+ }
235
+ };
236
+ var purgeCommand = {
237
+ command: "purge",
238
+ describe: "Delete rotated audit files older than --max-age-days",
239
+ builder: (yargs) => yargs.option("max-age-days", {
240
+ type: "number",
241
+ demandOption: true,
242
+ describe: "Retention window; files older than this are deleted"
243
+ }).option("directory", {
244
+ type: "string",
245
+ describe: "Rotation directory (defaults to <ARIES_HOME>/dev/audit)"
246
+ }).option("dry-run", {
247
+ type: "boolean",
248
+ default: false,
249
+ describe: "Report what would be deleted without removing anything"
250
+ }),
251
+ handler: (argv) => {
252
+ const removed = purgeAuditLog({
253
+ maxAgeDays: argv["max-age-days"],
254
+ directory: argv.directory,
255
+ dryRun: argv["dry-run"]
256
+ });
257
+ const verb = argv["dry-run"] ? "would remove" : "removed";
258
+ console.log(`${verb} ${removed.length} file(s):`);
259
+ for (const file of removed) console.log(` ${file}`);
260
+ }
261
+ };
262
+ var datalakeAuditCommand = {
263
+ command: "audit",
264
+ describe: "Inspect or prune the data-plane audit log (dev server)",
265
+ builder: (yargs) => yargs.command(viewCommand).command(purgeCommand),
266
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
267
+ handler: () => {
268
+ }
269
+ };
270
+ export {
271
+ datalakeAuditCommand
272
+ };
273
+ //# sourceMappingURL=datalakeAuditCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/actions/datalake/audit/auditLog.ts","../../src/actions/datalake/dev/paths.ts","../../src/commands/datalakeAuditCommand.ts"],"sourcesContent":["import { spawn } from 'node:child_process'\nimport {\n createReadStream, existsSync, readdirSync, statSync, unlinkSync,\n} from 'node:fs'\nimport path from 'node:path'\nimport { createInterface } from 'node:readline'\n\nimport { createDatalakeClient, type DatalakeClient } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nimport { getDevDir } from '../dev/paths.ts'\n\nexport interface AuditEntry {\n time: string\n requestId: string\n method: string\n path: string\n datalakeId?: string\n subject: string\n authenticated: boolean\n statusCode: number\n durationMs: number\n ip: string\n}\n\nexport interface AuditOptions {\n /**\n * Override the audit source. Pass a file to read one log, a directory to\n * scan a rotation set, or omit entirely to auto-detect between\n * `<home>/dev/audit.log` (single file) and `<home>/dev/audit/` (rotating).\n */\n file?: string\n /** Follow mode — stream new lines as they arrive. */\n follow?: boolean\n /** Max rows to print (when not following). Default 50. */\n lines?: number\n /** Filter by datalake id or name (resolves name via control plane). */\n datalake?: string\n /** Filter by status code prefix (e.g. `4` matches 4xx). */\n status?: string\n /** Filter by HTTP method. */\n method?: string\n /** Filter: only authenticated, only anonymous, or both. */\n authenticated?: 'true' | 'false'\n /** Regex applied to the raw JSON line. */\n grep?: string\n}\n\nexport interface PurgeAuditOptions {\n /** Directory of rotated files. Defaults to `<home>/dev/audit/`. */\n directory?: string\n /** Drop any file older than this many days. Required. */\n maxAgeDays: number\n /** Don't delete, just report. */\n dryRun?: boolean\n}\n\ninterface ResolvedFilters {\n datalakeId?: string\n statusPrefix?: string\n method?: string\n authenticated?: boolean\n grepRegex?: RegExp\n}\n\ninterface ResolvedSource {\n /** Files to read, in chronological order (oldest → newest). */\n files: string[]\n /** File to tail in follow mode (always the newest). */\n tailFile: string\n /** Human-readable description for error messages. */\n description: string\n}\n\nconst AUDIT_FILE_PATTERN = /^audit-\\d{4}-\\d{2}-\\d{2}\\.log$/\n\nfunction defaultSingleFile(): string {\n return path.join(getDevDir(), 'audit.log')\n}\n\nfunction defaultRotationDir(): string {\n return path.join(getDevDir(), 'audit')\n}\n\nfunction listRotatedFiles(directory: string): string[] {\n if (!existsSync(directory)) return []\n return readdirSync(directory)\n .filter(file => AUDIT_FILE_PATTERN.test(file))\n .toSorted()\n .map(file => path.join(directory, file))\n}\n\nfunction resolveSource(override: string | undefined): ResolvedSource | undefined {\n if (override) {\n if (!existsSync(override)) return undefined\n const stat = statSync(override)\n if (stat.isDirectory()) {\n const files = listRotatedFiles(override)\n if (files.length === 0) return undefined\n return {\n files, tailFile: files.at(-1)!, description: override,\n }\n }\n return {\n files: [override], tailFile: override, description: override,\n }\n }\n const single = defaultSingleFile()\n if (existsSync(single)) {\n return {\n files: [single], tailFile: single, description: single,\n }\n }\n const rotDir = defaultRotationDir()\n const files = listRotatedFiles(rotDir)\n if (files.length === 0) return undefined\n return {\n files, tailFile: files.at(-1)!, description: rotDir,\n }\n}\n\nasync function resolveDatalakeId(target: string): Promise<string> {\n if (target.startsWith('dl_')) return target\n const client: DatalakeClient = createDatalakeClient()\n const descriptor = await client.describe(target)\n return descriptor.id\n}\n\nasync function buildFilters(options: AuditOptions): Promise<ResolvedFilters> {\n return {\n datalakeId: options.datalake ? await resolveDatalakeId(options.datalake) : undefined,\n statusPrefix: options.status,\n method: options.method?.toUpperCase(),\n authenticated: options.authenticated === undefined ? undefined : options.authenticated === 'true',\n grepRegex: options.grep ? new RegExp(options.grep) : undefined,\n }\n}\n\nfunction matchesFilters(line: string, entry: AuditEntry, filters: ResolvedFilters): boolean {\n if (filters.datalakeId && entry.datalakeId !== filters.datalakeId) return false\n if (filters.statusPrefix && !String(entry.statusCode).startsWith(filters.statusPrefix)) return false\n if (filters.method && entry.method !== filters.method) return false\n if (filters.authenticated !== undefined && entry.authenticated !== filters.authenticated) return false\n if (filters.grepRegex && !filters.grepRegex.test(line)) return false\n return true\n}\n\nfunction formatEntry(entry: AuditEntry): string {\n const when = entry.time.slice(11, 19)\n const status = entry.statusCode >= 500\n ? chalk.red(String(entry.statusCode))\n : entry.statusCode >= 400\n ? chalk.yellow(String(entry.statusCode))\n : chalk.green(String(entry.statusCode))\n const subject = entry.authenticated ? chalk.magenta(entry.subject) : chalk.gray(entry.subject)\n const duration = chalk.gray(`${entry.durationMs}ms`)\n return `${chalk.gray(when)} ${status} ${entry.method.padEnd(6)} ${entry.path} ${subject} ${duration}`\n}\n\nfunction parseLine(line: string): AuditEntry | undefined {\n try {\n return JSON.parse(line) as AuditEntry\n } catch {\n return undefined\n }\n}\n\nexport async function auditLog(options: AuditOptions = {}): Promise<void> {\n const source = resolveSource(options.file)\n if (!source) {\n const location = options.file ?? `${defaultSingleFile()} or ${defaultRotationDir()}`\n console.log(chalk.yellow(`no audit log at ${location}`))\n console.log(chalk.gray('enable with `aries datalake dev up --audit` (or --audit --audit-rotate)'))\n process.exitCode = 3\n return\n }\n\n const filters = await buildFilters(options)\n\n if (options.follow) {\n await followLog(source.tailFile, filters, options.lines ?? 0)\n return\n }\n\n await dumpTail(source.files, filters, options.lines ?? 50)\n}\n\nasync function dumpTail(files: string[], filters: ResolvedFilters, limit: number): Promise<void> {\n // Ring-buffer across all files in chronological order; retain last N matches.\n const ring: string[] = []\n for (const filePath of files) {\n const stream = createReadStream(filePath, { encoding: 'utf8' })\n const rl = createInterface({ input: stream, crlfDelay: Infinity })\n for await (const line of rl) {\n if (!line.trim()) continue\n const entry = parseLine(line)\n if (!entry) continue\n if (!matchesFilters(line, entry, filters)) continue\n ring.push(formatEntry(entry))\n if (ring.length > limit) ring.shift()\n }\n }\n for (const row of ring) console.log(row)\n}\n\nasync function followLog(filePath: string, filters: ResolvedFilters, initialLines: number): Promise<void> {\n if (initialLines > 0) {\n await dumpTail([filePath], filters, initialLines)\n }\n const startOffset = statSync(filePath).size\n const child = spawn('tail', ['-f', '-c', '+0', filePath], { stdio: ['ignore', 'pipe', 'inherit'] })\n child.stdout.setEncoding('utf8')\n let buffer = ''\n let bytesSeen = 0\n child.stdout.on('data', (chunk: string) => {\n bytesSeen += Buffer.byteLength(chunk, 'utf8')\n buffer += chunk\n const lines = buffer.split('\\n')\n buffer = lines.pop() ?? ''\n if (bytesSeen < startOffset) return\n for (const line of lines) {\n if (!line.trim()) continue\n const entry = parseLine(line)\n if (!entry) continue\n if (!matchesFilters(line, entry, filters)) continue\n console.log(formatEntry(entry))\n }\n })\n await new Promise<void>((resolve) => {\n child.on('exit', (code) => {\n process.exitCode = code ?? 0\n resolve()\n })\n })\n}\n\n/**\n * Prunes rotated audit files older than `maxAgeDays`. Returns the list of\n * removed file paths (or the would-be-removed list when `dryRun=true`).\n */\nexport function purgeAuditLog(options: PurgeAuditOptions): string[] {\n const directory = options.directory ?? defaultRotationDir()\n if (!existsSync(directory)) return []\n const cutoff = Date.now() - options.maxAgeDays * 86_400_000\n const removed: string[] = []\n for (const file of readdirSync(directory)) {\n if (!AUDIT_FILE_PATTERN.test(file)) continue\n const fullPath = path.join(directory, file)\n const stat = statSync(fullPath)\n if (stat.mtimeMs >= cutoff) continue\n if (!options.dryRun) unlinkSync(fullPath)\n removed.push(fullPath)\n }\n return removed\n}\n","import { homedir } from 'node:os'\nimport path from 'node:path'\n\nfunction getAriesHome(): string {\n return process.env.ARIES_HOME ?? path.join(homedir(), '.aries')\n}\n\nexport function getDevDir(): string {\n return path.join(getAriesHome(), 'dev')\n}\n\nexport function getDevStatePath(): string {\n return path.join(getDevDir(), 'state.json')\n}\n\nexport function getDevPidPath(): string {\n return path.join(getDevDir(), 'pid')\n}\n\nexport function getDevLogPath(): string {\n return path.join(getDevDir(), 'server.log')\n}\n","import type { CommandModule } from 'yargs'\n\nimport { auditLog, purgeAuditLog } from '../actions/datalake/audit/auditLog.ts'\n\nconst viewCommand: CommandModule = {\n command: ['view', '$0'],\n describe: 'Print audit log rows (default)',\n builder: yargs =>\n yargs\n .option('follow', {\n alias: 'f',\n type: 'boolean',\n default: false,\n describe: 'Stream new rows as they arrive (tails the most recent file)',\n })\n .option('lines', {\n alias: 'n',\n type: 'number',\n default: 50,\n describe: 'Tail this many rows (0 = start fresh in --follow mode)',\n })\n .option('datalake', {\n alias: 'd',\n type: 'string',\n describe: 'Filter by datalake name or id',\n })\n .option('status', {\n type: 'string',\n describe: 'Status code prefix filter (e.g. 4 matches 4xx)',\n })\n .option('method', {\n type: 'string',\n describe: 'HTTP method filter (GET, POST, etc.)',\n })\n .option('authenticated', {\n type: 'string',\n choices: ['true', 'false'] as const,\n describe: 'Show only authenticated or only anonymous requests',\n })\n .option('grep', {\n type: 'string',\n describe: 'Regex pattern applied to the raw JSON line',\n })\n .option('file', {\n type: 'string',\n describe: 'File or directory (auto-detects rotation layout)',\n }),\n handler: async (argv) => {\n await auditLog({\n follow: argv.follow as boolean,\n lines: argv.lines as number,\n datalake: argv.datalake as string | undefined,\n status: argv.status as string | undefined,\n method: argv.method as string | undefined,\n authenticated: argv.authenticated as 'true' | 'false' | undefined,\n grep: argv.grep as string | undefined,\n file: argv.file as string | undefined,\n })\n },\n}\n\nconst purgeCommand: CommandModule = {\n command: 'purge',\n describe: 'Delete rotated audit files older than --max-age-days',\n builder: yargs =>\n yargs\n .option('max-age-days', {\n type: 'number',\n demandOption: true,\n describe: 'Retention window; files older than this are deleted',\n })\n .option('directory', {\n type: 'string',\n describe: 'Rotation directory (defaults to <ARIES_HOME>/dev/audit)',\n })\n .option('dry-run', {\n type: 'boolean',\n default: false,\n describe: 'Report what would be deleted without removing anything',\n }),\n handler: (argv) => {\n const removed = purgeAuditLog({\n maxAgeDays: argv['max-age-days'] as number,\n directory: argv.directory as string | undefined,\n dryRun: argv['dry-run'] as boolean,\n })\n const verb = argv['dry-run'] ? 'would remove' : 'removed'\n console.log(`${verb} ${removed.length} file(s):`)\n for (const file of removed) console.log(` ${file}`)\n },\n}\n\nexport const datalakeAuditCommand: CommandModule = {\n command: 'audit',\n describe: 'Inspect or prune the data-plane audit log (dev server)',\n builder: yargs =>\n yargs\n .command(viewCommand)\n .command(purgeCommand),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n"],"mappings":"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","names":["path","path","files"]}