@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.
- package/README.md +693 -0
- package/dist/actions/audit/auditPaths.mjs +22 -0
- package/dist/actions/audit/auditPaths.mjs.map +1 -0
- package/dist/actions/audit/index.mjs +739 -0
- package/dist/actions/audit/index.mjs.map +1 -0
- package/dist/actions/audit/installPlugin.mjs +298 -0
- package/dist/actions/audit/installPlugin.mjs.map +1 -0
- package/dist/actions/audit/listSessions.mjs +93 -0
- package/dist/actions/audit/listSessions.mjs.map +1 -0
- package/dist/actions/audit/openAuditDir.mjs +44 -0
- package/dist/actions/audit/openAuditDir.mjs.map +1 -0
- package/dist/actions/audit/searchAudit.mjs +77 -0
- package/dist/actions/audit/searchAudit.mjs.map +1 -0
- package/dist/actions/audit/showAiMeta.mjs +105 -0
- package/dist/actions/audit/showAiMeta.mjs.map +1 -0
- package/dist/actions/audit/showSession.mjs +105 -0
- package/dist/actions/audit/showSession.mjs.map +1 -0
- package/dist/actions/audit/statusAudit.mjs +98 -0
- package/dist/actions/audit/statusAudit.mjs.map +1 -0
- package/dist/actions/clamp/clampAudit.mjs +53 -0
- package/dist/actions/clamp/clampAudit.mjs.map +1 -0
- package/dist/actions/clamp/index.mjs +2258 -0
- package/dist/actions/clamp/index.mjs.map +1 -0
- package/dist/actions/clamp/ipcServer.mjs +55 -0
- package/dist/actions/clamp/ipcServer.mjs.map +1 -0
- package/dist/actions/clamp/policyManagement.mjs +144 -0
- package/dist/actions/clamp/policyManagement.mjs.map +1 -0
- package/dist/actions/clamp/promptUser.mjs +91 -0
- package/dist/actions/clamp/promptUser.mjs.map +1 -0
- package/dist/actions/clamp/runClamped.mjs +2107 -0
- package/dist/actions/clamp/runClamped.mjs.map +1 -0
- package/dist/actions/clamp/sandboxExec.mjs +1612 -0
- package/dist/actions/clamp/sandboxExec.mjs.map +1 -0
- package/dist/actions/clamp/shellEnvSetup.mjs +59 -0
- package/dist/actions/clamp/shellEnvSetup.mjs.map +1 -0
- package/dist/actions/clamp/shimGenerator.mjs +68 -0
- package/dist/actions/clamp/shimGenerator.mjs.map +1 -0
- package/dist/actions/clamp/terminalRenderer.mjs +145 -0
- package/dist/actions/clamp/terminalRenderer.mjs.map +1 -0
- package/dist/actions/datalake/audit/auditLog.mjs +191 -0
- package/dist/actions/datalake/audit/auditLog.mjs.map +1 -0
- package/dist/actions/datalake/createDatalake.mjs +127 -0
- package/dist/actions/datalake/createDatalake.mjs.map +1 -0
- package/dist/actions/datalake/describeDatalake.mjs +159 -0
- package/dist/actions/datalake/describeDatalake.mjs.map +1 -0
- package/dist/actions/datalake/destroyDatalake.mjs +34 -0
- package/dist/actions/datalake/destroyDatalake.mjs.map +1 -0
- package/dist/actions/datalake/dev/downDevServer.mjs +102 -0
- package/dist/actions/datalake/dev/downDevServer.mjs.map +1 -0
- package/dist/actions/datalake/dev/index.mjs +369 -0
- package/dist/actions/datalake/dev/index.mjs.map +1 -0
- package/dist/actions/datalake/dev/logsDevServer.mjs +44 -0
- package/dist/actions/datalake/dev/logsDevServer.mjs.map +1 -0
- package/dist/actions/datalake/dev/paths.mjs +25 -0
- package/dist/actions/datalake/dev/paths.mjs.map +1 -0
- package/dist/actions/datalake/dev/resetDevServer.mjs +118 -0
- package/dist/actions/datalake/dev/resetDevServer.mjs.map +1 -0
- package/dist/actions/datalake/dev/resolveServerBin.mjs +26 -0
- package/dist/actions/datalake/dev/resolveServerBin.mjs.map +1 -0
- package/dist/actions/datalake/dev/state.mjs +62 -0
- package/dist/actions/datalake/dev/state.mjs.map +1 -0
- package/dist/actions/datalake/dev/statusDevServer.mjs +101 -0
- package/dist/actions/datalake/dev/statusDevServer.mjs.map +1 -0
- package/dist/actions/datalake/dev/upDevServer.mjs +221 -0
- package/dist/actions/datalake/dev/upDevServer.mjs.map +1 -0
- package/dist/actions/datalake/dev/waitForHealth.mjs +22 -0
- package/dist/actions/datalake/dev/waitForHealth.mjs.map +1 -0
- package/dist/actions/datalake/formatters.mjs +90 -0
- package/dist/actions/datalake/formatters.mjs.map +1 -0
- package/dist/actions/datalake/grantAccess.mjs +116 -0
- package/dist/actions/datalake/grantAccess.mjs.map +1 -0
- package/dist/actions/datalake/index.mjs +361 -0
- package/dist/actions/datalake/index.mjs.map +1 -0
- package/dist/actions/datalake/listDatalakes.mjs +54 -0
- package/dist/actions/datalake/listDatalakes.mjs.map +1 -0
- package/dist/actions/datalake/login.mjs +20 -0
- package/dist/actions/datalake/login.mjs.map +1 -0
- package/dist/actions/datalake/logout.mjs +11 -0
- package/dist/actions/datalake/logout.mjs.map +1 -0
- package/dist/actions/datalake/mintToken.mjs +37 -0
- package/dist/actions/datalake/mintToken.mjs.map +1 -0
- package/dist/actions/datalake/parseSize.mjs +21 -0
- package/dist/actions/datalake/parseSize.mjs.map +1 -0
- package/dist/actions/datalake/payloads/fetchPayload.mjs +76 -0
- package/dist/actions/datalake/payloads/fetchPayload.mjs.map +1 -0
- package/dist/actions/datalake/payloads/index.mjs +271 -0
- package/dist/actions/datalake/payloads/index.mjs.map +1 -0
- package/dist/actions/datalake/payloads/mintAndConnect.mjs +46 -0
- package/dist/actions/datalake/payloads/mintAndConnect.mjs.map +1 -0
- package/dist/actions/datalake/payloads/parsePayloadsFile.mjs +71 -0
- package/dist/actions/datalake/payloads/parsePayloadsFile.mjs.map +1 -0
- package/dist/actions/datalake/payloads/pushPayloads.mjs +181 -0
- package/dist/actions/datalake/payloads/pushPayloads.mjs.map +1 -0
- package/dist/actions/datalake/payloads/tailPayloads.mjs +106 -0
- package/dist/actions/datalake/payloads/tailPayloads.mjs.map +1 -0
- package/dist/actions/datalake/resolveTarget.mjs +15 -0
- package/dist/actions/datalake/resolveTarget.mjs.map +1 -0
- package/dist/actions/datalake/revokeAccess.mjs +108 -0
- package/dist/actions/datalake/revokeAccess.mjs.map +1 -0
- package/dist/actions/datalake/useDatalake.mjs +22 -0
- package/dist/actions/datalake/useDatalake.mjs.map +1 -0
- package/dist/actions/detect/detectAiClients.mjs +405 -0
- package/dist/actions/detect/detectAiClients.mjs.map +1 -0
- package/dist/actions/detect/index.mjs +405 -0
- package/dist/actions/detect/index.mjs.map +1 -0
- package/dist/actions/hash/algorithms/blockhash.mjs +61 -0
- package/dist/actions/hash/algorithms/blockhash.mjs.map +1 -0
- package/dist/actions/hash/algorithms/chromaprint.mjs +205 -0
- package/dist/actions/hash/algorithms/chromaprint.mjs.map +1 -0
- package/dist/actions/hash/algorithms/dhash.mjs +75 -0
- package/dist/actions/hash/algorithms/dhash.mjs.map +1 -0
- package/dist/actions/hash/algorithms/index.mjs +818 -0
- package/dist/actions/hash/algorithms/index.mjs.map +1 -0
- package/dist/actions/hash/algorithms/nilsimsa.mjs +27 -0
- package/dist/actions/hash/algorithms/nilsimsa.mjs.map +1 -0
- package/dist/actions/hash/algorithms/pdq.mjs +83 -0
- package/dist/actions/hash/algorithms/pdq.mjs.map +1 -0
- package/dist/actions/hash/algorithms/phash.mjs +71 -0
- package/dist/actions/hash/algorithms/phash.mjs.map +1 -0
- package/dist/actions/hash/algorithms/sha256.mjs +24 -0
- package/dist/actions/hash/algorithms/sha256.mjs.map +1 -0
- package/dist/actions/hash/algorithms/ssdeep.mjs +203 -0
- package/dist/actions/hash/algorithms/ssdeep.mjs.map +1 -0
- package/dist/actions/hash/algorithms/tlsh.mjs +66 -0
- package/dist/actions/hash/algorithms/tlsh.mjs.map +1 -0
- package/dist/actions/hash/algorithms/types.mjs +1 -0
- package/dist/actions/hash/algorithms/types.mjs.map +1 -0
- package/dist/actions/hash/algorithms/videoFrames.mjs +404 -0
- package/dist/actions/hash/algorithms/videoFrames.mjs.map +1 -0
- package/dist/actions/hash/algorithms/xyo.mjs +30 -0
- package/dist/actions/hash/algorithms/xyo.mjs.map +1 -0
- package/dist/actions/hash/compareHashes.mjs +823 -0
- package/dist/actions/hash/compareHashes.mjs.map +1 -0
- package/dist/actions/hash/hashInput.mjs +868 -0
- package/dist/actions/hash/hashInput.mjs.map +1 -0
- package/dist/actions/hash/index.mjs +881 -0
- package/dist/actions/hash/index.mjs.map +1 -0
- package/dist/actions/hash/lib/hamming.mjs +44 -0
- package/dist/actions/hash/lib/hamming.mjs.map +1 -0
- package/dist/actions/hash/lib/levenshtein.mjs +36 -0
- package/dist/actions/hash/lib/levenshtein.mjs.map +1 -0
- package/dist/actions/hash/lib/runBinary.mjs +54 -0
- package/dist/actions/hash/lib/runBinary.mjs.map +1 -0
- package/dist/actions/hash/lib/which.mjs +36 -0
- package/dist/actions/hash/lib/which.mjs.map +1 -0
- package/dist/actions/hash/lib/withTempfile.mjs +19 -0
- package/dist/actions/hash/lib/withTempfile.mjs.map +1 -0
- package/dist/actions/index.mjs +4615 -0
- package/dist/actions/index.mjs.map +1 -0
- package/dist/actions/printVersion.mjs +12 -0
- package/dist/actions/printVersion.mjs.map +1 -0
- package/dist/actions/sync/index.mjs +51 -0
- package/dist/actions/sync/index.mjs.map +1 -0
- package/dist/actions/sync/syncAiConfig.mjs +51 -0
- package/dist/actions/sync/syncAiConfig.mjs.map +1 -0
- package/dist/actions/wallet/account/deriveAndAdd.mjs +394 -0
- package/dist/actions/wallet/account/deriveAndAdd.mjs.map +1 -0
- package/dist/actions/wallet/account/getActiveWallet.mjs +338 -0
- package/dist/actions/wallet/account/getActiveWallet.mjs.map +1 -0
- package/dist/actions/wallet/account/labelAccount.mjs +389 -0
- package/dist/actions/wallet/account/labelAccount.mjs.map +1 -0
- package/dist/actions/wallet/account/listAccounts.mjs +374 -0
- package/dist/actions/wallet/account/listAccounts.mjs.map +1 -0
- package/dist/actions/wallet/account/removeAccount.mjs +384 -0
- package/dist/actions/wallet/account/removeAccount.mjs.map +1 -0
- package/dist/actions/wallet/account/showAccount.mjs +368 -0
- package/dist/actions/wallet/account/showAccount.mjs.map +1 -0
- package/dist/actions/wallet/addressBook/storage.mjs +110 -0
- package/dist/actions/wallet/addressBook/storage.mjs.map +1 -0
- package/dist/actions/wallet/backup/exportBackup.mjs +93 -0
- package/dist/actions/wallet/backup/exportBackup.mjs.map +1 -0
- package/dist/actions/wallet/backup/importBackup.mjs +142 -0
- package/dist/actions/wallet/backup/importBackup.mjs.map +1 -0
- package/dist/actions/wallet/balance/getBalance.mjs +434 -0
- package/dist/actions/wallet/balance/getBalance.mjs.map +1 -0
- package/dist/actions/wallet/client/walletClient.mjs +64 -0
- package/dist/actions/wallet/client/walletClient.mjs.map +1 -0
- package/dist/actions/wallet/contact/contactActions.mjs +120 -0
- package/dist/actions/wallet/contact/contactActions.mjs.map +1 -0
- package/dist/actions/wallet/contact/storage.mjs +69 -0
- package/dist/actions/wallet/contact/storage.mjs.map +1 -0
- package/dist/actions/wallet/index.mjs +1439 -0
- package/dist/actions/wallet/index.mjs.map +1 -0
- package/dist/actions/wallet/network/networkActions.mjs +137 -0
- package/dist/actions/wallet/network/networkActions.mjs.map +1 -0
- package/dist/actions/wallet/network/storage.mjs +93 -0
- package/dist/actions/wallet/network/storage.mjs.map +1 -0
- package/dist/actions/wallet/password/changePassword.mjs +282 -0
- package/dist/actions/wallet/password/changePassword.mjs.map +1 -0
- package/dist/actions/wallet/password/getActiveKey.mjs +297 -0
- package/dist/actions/wallet/password/getActiveKey.mjs.map +1 -0
- package/dist/actions/wallet/password/initOrUnlock.mjs +337 -0
- package/dist/actions/wallet/password/initOrUnlock.mjs.map +1 -0
- package/dist/actions/wallet/password/passwordStorage.mjs +69 -0
- package/dist/actions/wallet/password/passwordStorage.mjs.map +1 -0
- package/dist/actions/wallet/password/setPassword.mjs +138 -0
- package/dist/actions/wallet/password/setPassword.mjs.map +1 -0
- package/dist/actions/wallet/password/validatePassword.mjs +123 -0
- package/dist/actions/wallet/password/validatePassword.mjs.map +1 -0
- package/dist/actions/wallet/passwordKey.mjs +87 -0
- package/dist/actions/wallet/passwordKey.mjs.map +1 -0
- package/dist/actions/wallet/paths.mjs +26 -0
- package/dist/actions/wallet/paths.mjs.map +1 -0
- package/dist/actions/wallet/prompt.mjs +93 -0
- package/dist/actions/wallet/prompt.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/createPhrase.mjs +392 -0
- package/dist/actions/wallet/seedPhrase/createPhrase.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/exportPhrase.mjs +334 -0
- package/dist/actions/wallet/seedPhrase/exportPhrase.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/idGen.mjs +11 -0
- package/dist/actions/wallet/seedPhrase/idGen.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/importPhrase.mjs +393 -0
- package/dist/actions/wallet/seedPhrase/importPhrase.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/listPhrases.mjs +62 -0
- package/dist/actions/wallet/seedPhrase/listPhrases.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/phraseStorage.mjs +89 -0
- package/dist/actions/wallet/seedPhrase/phraseStorage.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/removePhrase.mjs +366 -0
- package/dist/actions/wallet/seedPhrase/removePhrase.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/renamePhrase.mjs +78 -0
- package/dist/actions/wallet/seedPhrase/renamePhrase.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/types.mjs +1 -0
- package/dist/actions/wallet/seedPhrase/types.mjs.map +1 -0
- package/dist/actions/wallet/seedPhrase/usePhrase.mjs +83 -0
- package/dist/actions/wallet/seedPhrase/usePhrase.mjs.map +1 -0
- package/dist/actions/wallet/session/machineId.mjs +145 -0
- package/dist/actions/wallet/session/machineId.mjs.map +1 -0
- package/dist/actions/wallet/session/sessionCache.mjs +221 -0
- package/dist/actions/wallet/session/sessionCache.mjs.map +1 -0
- package/dist/actions/wallet/session/unlock.mjs +307 -0
- package/dist/actions/wallet/session/unlock.mjs.map +1 -0
- package/dist/actions/wallet/sign/signPayload.mjs +637 -0
- package/dist/actions/wallet/sign/signPayload.mjs.map +1 -0
- package/dist/actions/wallet/storage.mjs +51 -0
- package/dist/actions/wallet/storage.mjs.map +1 -0
- package/dist/actions/wallet/transaction/broadcastTransaction.mjs +453 -0
- package/dist/actions/wallet/transaction/broadcastTransaction.mjs.map +1 -0
- package/dist/actions/wallet/transaction/sendTransaction.mjs +457 -0
- package/dist/actions/wallet/transaction/sendTransaction.mjs.map +1 -0
- package/dist/actions/wallet/transaction/signTransactionFile.mjs +378 -0
- package/dist/actions/wallet/transaction/signTransactionFile.mjs.map +1 -0
- package/dist/actions/xyo/index.mjs +138 -0
- package/dist/actions/xyo/index.mjs.map +1 -0
- package/dist/actions/xyo/transaction/index.mjs +138 -0
- package/dist/actions/xyo/transaction/index.mjs.map +1 -0
- package/dist/actions/xyo/transaction/validateTransactions.mjs +138 -0
- package/dist/actions/xyo/transaction/validateTransactions.mjs.map +1 -0
- package/dist/aries.mjs +8466 -0
- package/dist/aries.mjs.map +1 -0
- package/dist/bin/aries.mjs +8472 -0
- package/dist/bin/aries.mjs.map +1 -0
- package/dist/commands/aiCommand.mjs +492 -0
- package/dist/commands/aiCommand.mjs.map +1 -0
- package/dist/commands/auditAiCommand.mjs +119 -0
- package/dist/commands/auditAiCommand.mjs.map +1 -0
- package/dist/commands/auditCommand.mjs +857 -0
- package/dist/commands/auditCommand.mjs.map +1 -0
- package/dist/commands/auditInstallCommand.mjs +324 -0
- package/dist/commands/auditInstallCommand.mjs.map +1 -0
- package/dist/commands/auditListCommand.mjs +107 -0
- package/dist/commands/auditListCommand.mjs.map +1 -0
- package/dist/commands/auditOpenCommand.mjs +51 -0
- package/dist/commands/auditOpenCommand.mjs.map +1 -0
- package/dist/commands/auditSearchCommand.mjs +98 -0
- package/dist/commands/auditSearchCommand.mjs.map +1 -0
- package/dist/commands/auditShowCommand.mjs +123 -0
- package/dist/commands/auditShowCommand.mjs.map +1 -0
- package/dist/commands/auditStatusCommand.mjs +105 -0
- package/dist/commands/auditStatusCommand.mjs.map +1 -0
- package/dist/commands/clampCommand.mjs +2328 -0
- package/dist/commands/clampCommand.mjs.map +1 -0
- package/dist/commands/clampPolicyCommand.mjs +184 -0
- package/dist/commands/clampPolicyCommand.mjs.map +1 -0
- package/dist/commands/clampPolicyInitCommand.mjs +63 -0
- package/dist/commands/clampPolicyInitCommand.mjs.map +1 -0
- package/dist/commands/clampPolicyListCommand.mjs +56 -0
- package/dist/commands/clampPolicyListCommand.mjs.map +1 -0
- package/dist/commands/clampPolicyShowCommand.mjs +83 -0
- package/dist/commands/clampPolicyShowCommand.mjs.map +1 -0
- package/dist/commands/clampRunCommand.mjs +2137 -0
- package/dist/commands/clampRunCommand.mjs.map +1 -0
- package/dist/commands/datalakeAuditCommand.mjs +273 -0
- package/dist/commands/datalakeAuditCommand.mjs.map +1 -0
- package/dist/commands/datalakeCommand.mjs +1637 -0
- package/dist/commands/datalakeCommand.mjs.map +1 -0
- package/dist/commands/datalakeCreateCommand.mjs +189 -0
- package/dist/commands/datalakeCreateCommand.mjs.map +1 -0
- package/dist/commands/datalakeDescribeCommand.mjs +172 -0
- package/dist/commands/datalakeDescribeCommand.mjs.map +1 -0
- package/dist/commands/datalakeDestroyCommand.mjs +53 -0
- package/dist/commands/datalakeDestroyCommand.mjs.map +1 -0
- package/dist/commands/datalakeDevCommand.mjs +470 -0
- package/dist/commands/datalakeDevCommand.mjs.map +1 -0
- package/dist/commands/datalakeDevDownCommand.mjs +111 -0
- package/dist/commands/datalakeDevDownCommand.mjs.map +1 -0
- package/dist/commands/datalakeDevLogsCommand.mjs +65 -0
- package/dist/commands/datalakeDevLogsCommand.mjs.map +1 -0
- package/dist/commands/datalakeDevResetCommand.mjs +125 -0
- package/dist/commands/datalakeDevResetCommand.mjs.map +1 -0
- package/dist/commands/datalakeDevStatusCommand.mjs +110 -0
- package/dist/commands/datalakeDevStatusCommand.mjs.map +1 -0
- package/dist/commands/datalakeDevUpCommand.mjs +268 -0
- package/dist/commands/datalakeDevUpCommand.mjs.map +1 -0
- package/dist/commands/datalakeFetchCommand.mjs +106 -0
- package/dist/commands/datalakeFetchCommand.mjs.map +1 -0
- package/dist/commands/datalakeGrantCommand.mjs +147 -0
- package/dist/commands/datalakeGrantCommand.mjs.map +1 -0
- package/dist/commands/datalakeListCommand.mjs +61 -0
- package/dist/commands/datalakeListCommand.mjs.map +1 -0
- package/dist/commands/datalakeLoginCommand.mjs +39 -0
- package/dist/commands/datalakeLoginCommand.mjs.map +1 -0
- package/dist/commands/datalakeLogoutCommand.mjs +20 -0
- package/dist/commands/datalakeLogoutCommand.mjs.map +1 -0
- package/dist/commands/datalakePushCommand.mjs +214 -0
- package/dist/commands/datalakePushCommand.mjs.map +1 -0
- package/dist/commands/datalakeRevokeCommand.mjs +127 -0
- package/dist/commands/datalakeRevokeCommand.mjs.map +1 -0
- package/dist/commands/datalakeTailCommand.mjs +144 -0
- package/dist/commands/datalakeTailCommand.mjs.map +1 -0
- package/dist/commands/datalakeTokenCommand.mjs +61 -0
- package/dist/commands/datalakeTokenCommand.mjs.map +1 -0
- package/dist/commands/datalakeUseCommand.mjs +35 -0
- package/dist/commands/datalakeUseCommand.mjs.map +1 -0
- package/dist/commands/detectCommand.mjs +419 -0
- package/dist/commands/detectCommand.mjs.map +1 -0
- package/dist/commands/hashCommand.mjs +976 -0
- package/dist/commands/hashCommand.mjs.map +1 -0
- package/dist/commands/hashCompareCommand.mjs +865 -0
- package/dist/commands/hashCompareCommand.mjs.map +1 -0
- package/dist/commands/index.mjs +8461 -0
- package/dist/commands/index.mjs.map +1 -0
- package/dist/commands/syncCommand.mjs +66 -0
- package/dist/commands/syncCommand.mjs.map +1 -0
- package/dist/commands/versionCommand.mjs +24 -0
- package/dist/commands/versionCommand.mjs.map +1 -0
- package/dist/commands/walletAccountCommand.mjs +536 -0
- package/dist/commands/walletAccountCommand.mjs.map +1 -0
- package/dist/commands/walletAccountDeriveCommand.mjs +415 -0
- package/dist/commands/walletAccountDeriveCommand.mjs.map +1 -0
- package/dist/commands/walletAccountLabelCommand.mjs +405 -0
- package/dist/commands/walletAccountLabelCommand.mjs.map +1 -0
- package/dist/commands/walletAccountListCommand.mjs +381 -0
- package/dist/commands/walletAccountListCommand.mjs.map +1 -0
- package/dist/commands/walletAccountRemoveCommand.mjs +396 -0
- package/dist/commands/walletAccountRemoveCommand.mjs.map +1 -0
- package/dist/commands/walletAccountShowCommand.mjs +380 -0
- package/dist/commands/walletAccountShowCommand.mjs.map +1 -0
- package/dist/commands/walletBackupCommand.mjs +222 -0
- package/dist/commands/walletBackupCommand.mjs.map +1 -0
- package/dist/commands/walletBackupExportCommand.mjs +107 -0
- package/dist/commands/walletBackupExportCommand.mjs.map +1 -0
- package/dist/commands/walletBackupImportCommand.mjs +154 -0
- package/dist/commands/walletBackupImportCommand.mjs.map +1 -0
- package/dist/commands/walletBalanceCommand.mjs +448 -0
- package/dist/commands/walletBalanceCommand.mjs.map +1 -0
- package/dist/commands/walletCommand.mjs +1968 -0
- package/dist/commands/walletCommand.mjs.map +1 -0
- package/dist/commands/walletContactAddCommand.mjs +111 -0
- package/dist/commands/walletContactAddCommand.mjs.map +1 -0
- package/dist/commands/walletContactCommand.mjs +184 -0
- package/dist/commands/walletContactCommand.mjs.map +1 -0
- package/dist/commands/walletContactListCommand.mjs +66 -0
- package/dist/commands/walletContactListCommand.mjs.map +1 -0
- package/dist/commands/walletContactRemoveCommand.mjs +97 -0
- package/dist/commands/walletContactRemoveCommand.mjs.map +1 -0
- package/dist/commands/walletContactRenameCommand.mjs +114 -0
- package/dist/commands/walletContactRenameCommand.mjs.map +1 -0
- package/dist/commands/walletCreateCommand.mjs +407 -0
- package/dist/commands/walletCreateCommand.mjs.map +1 -0
- package/dist/commands/walletExportCommand.mjs +345 -0
- package/dist/commands/walletExportCommand.mjs.map +1 -0
- package/dist/commands/walletImportCommand.mjs +413 -0
- package/dist/commands/walletImportCommand.mjs.map +1 -0
- package/dist/commands/walletListCommand.mjs +69 -0
- package/dist/commands/walletListCommand.mjs.map +1 -0
- package/dist/commands/walletLockCommand.mjs +56 -0
- package/dist/commands/walletLockCommand.mjs.map +1 -0
- package/dist/commands/walletNetworkAddCommand.mjs +131 -0
- package/dist/commands/walletNetworkAddCommand.mjs.map +1 -0
- package/dist/commands/walletNetworkCommand.mjs +206 -0
- package/dist/commands/walletNetworkCommand.mjs.map +1 -0
- package/dist/commands/walletNetworkListCommand.mjs +104 -0
- package/dist/commands/walletNetworkListCommand.mjs.map +1 -0
- package/dist/commands/walletNetworkRemoveCommand.mjs +112 -0
- package/dist/commands/walletNetworkRemoveCommand.mjs.map +1 -0
- package/dist/commands/walletNetworkUseCommand.mjs +110 -0
- package/dist/commands/walletNetworkUseCommand.mjs.map +1 -0
- package/dist/commands/walletPasswordChangeCommand.mjs +291 -0
- package/dist/commands/walletPasswordChangeCommand.mjs.map +1 -0
- package/dist/commands/walletPasswordCommand.mjs +301 -0
- package/dist/commands/walletPasswordCommand.mjs.map +1 -0
- package/dist/commands/walletRemoveCommand.mjs +378 -0
- package/dist/commands/walletRemoveCommand.mjs.map +1 -0
- package/dist/commands/walletRenameCommand.mjs +94 -0
- package/dist/commands/walletRenameCommand.mjs.map +1 -0
- package/dist/commands/walletSignCommand.mjs +662 -0
- package/dist/commands/walletSignCommand.mjs.map +1 -0
- package/dist/commands/walletTxBroadcastCommand.mjs +473 -0
- package/dist/commands/walletTxBroadcastCommand.mjs.map +1 -0
- package/dist/commands/walletTxCommand.mjs +612 -0
- package/dist/commands/walletTxCommand.mjs.map +1 -0
- package/dist/commands/walletTxSendCommand.mjs +492 -0
- package/dist/commands/walletTxSendCommand.mjs.map +1 -0
- package/dist/commands/walletTxSignCommand.mjs +403 -0
- package/dist/commands/walletTxSignCommand.mjs.map +1 -0
- package/dist/commands/walletUnlockCommand.mjs +308 -0
- package/dist/commands/walletUnlockCommand.mjs.map +1 -0
- package/dist/commands/walletUseCommand.mjs +95 -0
- package/dist/commands/walletUseCommand.mjs.map +1 -0
- package/dist/commands/xyoCommand.mjs +188 -0
- package/dist/commands/xyoCommand.mjs.map +1 -0
- package/dist/commands/xyoTxCommand.mjs +178 -0
- package/dist/commands/xyoTxCommand.mjs.map +1 -0
- package/dist/commands/xyoTxValidateCommand.mjs +168 -0
- package/dist/commands/xyoTxValidateCommand.mjs.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.mjs +8466 -0
- package/dist/index.mjs.map +1 -0
- package/dist/types/modules.d.mjs +1 -0
- package/dist/types/modules.d.mjs.map +1 -0
- 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/detect/detectAiClients.ts","../../src/commands/detectCommand.ts","../../src/actions/sync/syncAiConfig.ts","../../src/commands/syncCommand.ts","../../src/commands/aiCommand.ts","../../src/actions/audit/installPlugin.ts","../../src/actions/audit/listSessions.ts","../../src/actions/audit/auditPaths.ts","../../src/actions/audit/openAuditDir.ts","../../src/actions/audit/searchAudit.ts","../../src/actions/audit/showAiMeta.ts","../../src/actions/audit/showSession.ts","../../src/actions/audit/statusAudit.ts","../../src/commands/auditAiCommand.ts","../../src/commands/auditInstallCommand.ts","../../src/commands/auditListCommand.ts","../../src/commands/auditOpenCommand.ts","../../src/commands/auditSearchCommand.ts","../../src/commands/auditShowCommand.ts","../../src/commands/auditStatusCommand.ts","../../src/commands/auditCommand.ts","../../src/actions/clamp/clampAudit.ts","../../src/actions/clamp/ipcServer.ts","../../src/actions/clamp/policyManagement.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/clampPolicyInitCommand.ts","../../src/commands/clampPolicyListCommand.ts","../../src/commands/clampPolicyShowCommand.ts","../../src/commands/clampPolicyCommand.ts","../../src/commands/clampRunCommand.ts","../../src/commands/clampCommand.ts","../../src/actions/datalake/audit/auditLog.ts","../../src/actions/datalake/dev/paths.ts","../../src/commands/datalakeAuditCommand.ts","../../src/commands/datalakeCreateCommand.ts","../../src/actions/datalake/createDatalake.ts","../../src/actions/datalake/formatters.ts","../../src/actions/datalake/parseSize.ts","../../src/actions/datalake/describeDatalake.ts","../../src/actions/datalake/payloads/mintAndConnect.ts","../../src/actions/datalake/resolveTarget.ts","../../src/actions/datalake/destroyDatalake.ts","../../src/actions/datalake/grantAccess.ts","../../src/actions/datalake/listDatalakes.ts","../../src/actions/datalake/login.ts","../../src/actions/datalake/logout.ts","../../src/actions/datalake/mintToken.ts","../../src/actions/datalake/revokeAccess.ts","../../src/actions/datalake/useDatalake.ts","../../src/commands/datalakeDescribeCommand.ts","../../src/commands/datalakeDestroyCommand.ts","../../src/actions/datalake/dev/downDevServer.ts","../../src/actions/datalake/dev/state.ts","../../src/actions/datalake/dev/logsDevServer.ts","../../src/actions/datalake/dev/resetDevServer.ts","../../src/actions/datalake/dev/statusDevServer.ts","../../src/actions/datalake/dev/upDevServer.ts","../../src/actions/datalake/dev/resolveServerBin.ts","../../src/actions/datalake/dev/waitForHealth.ts","../../src/commands/datalakeDevDownCommand.ts","../../src/commands/datalakeDevLogsCommand.ts","../../src/commands/datalakeDevResetCommand.ts","../../src/commands/datalakeDevStatusCommand.ts","../../src/commands/datalakeDevUpCommand.ts","../../src/commands/datalakeDevCommand.ts","../../src/actions/datalake/payloads/fetchPayload.ts","../../src/actions/datalake/payloads/parsePayloadsFile.ts","../../src/actions/datalake/payloads/pushPayloads.ts","../../src/actions/datalake/payloads/tailPayloads.ts","../../src/commands/datalakeFetchCommand.ts","../../src/commands/datalakeGrantCommand.ts","../../src/commands/datalakeListCommand.ts","../../src/commands/datalakeLoginCommand.ts","../../src/commands/datalakeLogoutCommand.ts","../../src/commands/datalakePushCommand.ts","../../src/commands/datalakeRevokeCommand.ts","../../src/commands/datalakeTailCommand.ts","../../src/commands/datalakeTokenCommand.ts","../../src/commands/datalakeUseCommand.ts","../../src/commands/datalakeCommand.ts","../../src/actions/hash/algorithms/blockhash.ts","../../src/actions/hash/lib/hamming.ts","../../src/actions/hash/lib/runBinary.ts","../../src/actions/hash/lib/which.ts","../../src/actions/hash/lib/withTempfile.ts","../../src/actions/hash/algorithms/chromaprint.ts","../../src/actions/hash/algorithms/dhash.ts","../../src/actions/hash/algorithms/nilsimsa.ts","../../src/actions/hash/algorithms/pdq.ts","../../src/actions/hash/algorithms/phash.ts","../../src/actions/hash/algorithms/sha256.ts","../../src/actions/hash/lib/levenshtein.ts","../../src/actions/hash/algorithms/ssdeep.ts","../../src/actions/hash/algorithms/tlsh.ts","../../src/actions/hash/algorithms/videoFrames.ts","../../src/actions/hash/algorithms/xyo.ts","../../src/actions/hash/algorithms/index.ts","../../src/actions/hash/compareHashes.ts","../../src/actions/hash/hashInput.ts","../../src/commands/hashCompareCommand.ts","../../src/commands/hashCommand.ts","../../src/actions/printVersion.ts","../../src/actions/wallet/account/deriveAndAdd.ts","../../src/actions/wallet/paths.ts","../../src/actions/wallet/storage.ts","../../src/actions/wallet/addressBook/storage.ts","../../src/actions/wallet/account/getActiveWallet.ts","../../src/actions/wallet/prompt.ts","../../src/actions/wallet/session/sessionCache.ts","../../src/actions/wallet/passwordKey.ts","../../src/actions/wallet/session/machineId.ts","../../src/actions/wallet/password/passwordStorage.ts","../../src/actions/wallet/password/validatePassword.ts","../../src/actions/wallet/password/getActiveKey.ts","../../src/actions/wallet/seedPhrase/phraseStorage.ts","../../src/actions/wallet/account/labelAccount.ts","../../src/actions/wallet/account/listAccounts.ts","../../src/actions/wallet/account/removeAccount.ts","../../src/actions/wallet/account/showAccount.ts","../../src/actions/wallet/backup/exportBackup.ts","../../src/actions/wallet/contact/storage.ts","../../src/actions/wallet/backup/importBackup.ts","../../src/actions/wallet/balance/getBalance.ts","../../src/actions/wallet/client/walletClient.ts","../../src/actions/wallet/network/storage.ts","../../src/actions/wallet/contact/contactActions.ts","../../src/actions/wallet/network/networkActions.ts","../../src/actions/wallet/password/changePassword.ts","../../src/actions/wallet/seedPhrase/createPhrase.ts","../../src/actions/wallet/password/setPassword.ts","../../src/actions/wallet/password/initOrUnlock.ts","../../src/actions/wallet/seedPhrase/idGen.ts","../../src/actions/wallet/seedPhrase/exportPhrase.ts","../../src/actions/wallet/seedPhrase/importPhrase.ts","../../src/actions/wallet/seedPhrase/listPhrases.ts","../../src/actions/wallet/seedPhrase/removePhrase.ts","../../src/actions/wallet/seedPhrase/renamePhrase.ts","../../src/actions/wallet/seedPhrase/usePhrase.ts","../../src/actions/wallet/session/unlock.ts","../../src/actions/wallet/sign/signPayload.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-builder@5.5.2_@bitauth+libauth@3.0.0_@scure+base@2.2.0_@xylab_4c4b2704d625c906bfa16bd14f65b27b/node_modules/@xyo-network/boundwitness-builder/src/BoundWitnessBuilder.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-builder@5.5.2_@bitauth+libauth@3.0.0_@scure+base@2.2.0_@xylab_4c4b2704d625c906bfa16bd14f65b27b/node_modules/@xyo-network/boundwitness-builder/src/GeneratedBoundWitnessFields.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-builder@5.5.2_@bitauth+libauth@3.0.0_@scure+base@2.2.0_@xylab_4c4b2704d625c906bfa16bd14f65b27b/node_modules/@xyo-network/boundwitness-builder/src/uniqueAddresses.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-builder@5.5.2_@bitauth+libauth@3.0.0_@scure+base@2.2.0_@xylab_4c4b2704d625c906bfa16bd14f65b27b/node_modules/@xyo-network/boundwitness-builder/src/uniqueAccounts.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-builder@5.5.2_@bitauth+libauth@3.0.0_@scure+base@2.2.0_@xylab_4c4b2704d625c906bfa16bd14f65b27b/node_modules/@xyo-network/boundwitness-builder/src/combinationsByBoundwitness.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-builder@5.5.2_@bitauth+libauth@3.0.0_@scure+base@2.2.0_@xylab_4c4b2704d625c906bfa16bd14f65b27b/node_modules/@xyo-network/boundwitness-builder/src/intraBoundwitnessSchemaCombinations.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-builder@5.5.2_@bitauth+libauth@3.0.0_@scure+base@2.2.0_@xylab_4c4b2704d625c906bfa16bd14f65b27b/node_modules/@xyo-network/boundwitness-builder/src/Query/QueryBoundWitnessBuilder.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-model@5.5.2_@xylabs+sdk-js@5.0.101_@opentelemetry+api@1.9.1_@_815cc9f8526e164e787cddfcee3cd298/node_modules/@xyo-network/boundwitness-model/src/BoundWitness/BoundWitness.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-model@5.5.2_@xylabs+sdk-js@5.0.101_@opentelemetry+api@1.9.1_@_815cc9f8526e164e787cddfcee3cd298/node_modules/@xyo-network/boundwitness-model/src/BoundWitness/BoundWitnessSchema.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-model@5.5.2_@xylabs+sdk-js@5.0.101_@opentelemetry+api@1.9.1_@_815cc9f8526e164e787cddfcee3cd298/node_modules/@xyo-network/boundwitness-model/src/BoundWitness/Signatures.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-model@5.5.2_@xylabs+sdk-js@5.0.101_@opentelemetry+api@1.9.1_@_815cc9f8526e164e787cddfcee3cd298/node_modules/@xyo-network/boundwitness-model/src/BoundWitness/BoundWitnessJsonSchema.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-model@5.5.2_@xylabs+sdk-js@5.0.101_@opentelemetry+api@1.9.1_@_815cc9f8526e164e787cddfcee3cd298/node_modules/@xyo-network/boundwitness-model/src/BoundWitness/HydratedBoundWitness.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-model@5.5.2_@xylabs+sdk-js@5.0.101_@opentelemetry+api@1.9.1_@_815cc9f8526e164e787cddfcee3cd298/node_modules/@xyo-network/boundwitness-model/src/BoundWitness/SignedBoundWitness.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-model@5.5.2_@xylabs+sdk-js@5.0.101_@opentelemetry+api@1.9.1_@_815cc9f8526e164e787cddfcee3cd298/node_modules/@xyo-network/boundwitness-model/src/BoundWitness/UnsignedBoundWitness.ts","../../../../node_modules/.pnpm/@xyo-network+boundwitness-model@5.5.2_@xylabs+sdk-js@5.0.101_@opentelemetry+api@1.9.1_@_815cc9f8526e164e787cddfcee3cd298/node_modules/@xyo-network/boundwitness-model/src/QueryBoundWitness.ts","../../src/actions/wallet/transaction/broadcastTransaction.ts","../../src/actions/wallet/transaction/sendTransaction.ts","../../src/actions/wallet/transaction/signTransactionFile.ts","../../src/actions/index.ts","../../src/commands/versionCommand.ts","../../src/commands/walletAccountDeriveCommand.ts","../../src/commands/walletAccountLabelCommand.ts","../../src/commands/walletAccountListCommand.ts","../../src/commands/walletAccountRemoveCommand.ts","../../src/commands/walletAccountShowCommand.ts","../../src/commands/walletAccountCommand.ts","../../src/commands/walletBackupExportCommand.ts","../../src/commands/walletBackupImportCommand.ts","../../src/commands/walletBackupCommand.ts","../../src/commands/walletBalanceCommand.ts","../../src/commands/walletContactAddCommand.ts","../../src/commands/walletContactListCommand.ts","../../src/commands/walletContactRemoveCommand.ts","../../src/commands/walletContactRenameCommand.ts","../../src/commands/walletContactCommand.ts","../../src/commands/walletCreateCommand.ts","../../src/commands/walletExportCommand.ts","../../src/commands/walletImportCommand.ts","../../src/commands/walletListCommand.ts","../../src/commands/walletLockCommand.ts","../../src/commands/walletNetworkAddCommand.ts","../../src/commands/walletNetworkListCommand.ts","../../src/commands/walletNetworkRemoveCommand.ts","../../src/commands/walletNetworkUseCommand.ts","../../src/commands/walletNetworkCommand.ts","../../src/commands/walletPasswordChangeCommand.ts","../../src/commands/walletPasswordCommand.ts","../../src/commands/walletRemoveCommand.ts","../../src/commands/walletRenameCommand.ts","../../src/commands/walletSignCommand.ts","../../src/commands/walletTxBroadcastCommand.ts","../../src/commands/walletTxSendCommand.ts","../../src/commands/walletTxSignCommand.ts","../../src/commands/walletTxCommand.ts","../../src/commands/walletUnlockCommand.ts","../../src/commands/walletUseCommand.ts","../../src/commands/walletCommand.ts","../../src/actions/xyo/transaction/validateTransactions.ts","../../src/commands/xyoTxValidateCommand.ts","../../src/commands/xyoTxCommand.ts","../../src/commands/xyoCommand.ts","../../src/commands/index.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 { execFileSync, execSync } from 'node:child_process'\nimport { existsSync, realpathSync } from 'node:fs'\nimport { homedir, platform } from 'node:os'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\n\ninterface AiClient {\n detected: boolean\n name: string\n path?: string\n provider: string\n type: 'app' | 'cli' | 'vscode'\n version?: string\n}\n\ninterface AppCandidate {\n name: string\n paths: string[]\n provider: string\n}\n\ninterface CliCandidate {\n command: string\n name: string\n paths?: string[]\n provider: string\n versionFlag?: string\n}\n\ninterface VscodeCandidate {\n extensionIds: string[]\n name: string\n provider: string\n}\n\nfunction getAppPaths(): string[] {\n const os = platform()\n const home = homedir()\n if (os === 'darwin') {\n return ['/Applications', path.join(home, 'Applications')]\n }\n if (os === 'win32') {\n return [\n String.raw`C:\\Program Files`,\n String.raw`C:\\Program Files (x86)`,\n path.join(home, 'AppData', 'Local', 'Programs'),\n ]\n }\n return ['/usr/share/applications']\n}\n\nfunction detectApp(candidate: AppCandidate): AiClient {\n const appDirs = getAppPaths()\n for (const dir of appDirs) {\n for (const appPath of candidate.paths) {\n const full = path.join(dir, appPath)\n if (existsSync(full)) {\n return {\n detected: true,\n name: candidate.name,\n path: full,\n provider: candidate.provider,\n type: 'app',\n }\n }\n }\n }\n return {\n detected: false,\n name: candidate.name,\n provider: candidate.provider,\n type: 'app',\n }\n}\n\nfunction resolveCliPath(location: string): string {\n try {\n return realpathSync(location)\n } catch {\n return location\n }\n}\n\nfunction findCliLocation(candidate: CliCandidate): string | undefined {\n try {\n return execSync(`which ${candidate.command}`, {\n encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 5000,\n }).trim()\n } catch {\n for (const cliPath of candidate.paths ?? []) {\n if (existsSync(cliPath)) {\n return cliPath\n }\n }\n }\n}\n\nfunction detectCli(candidate: CliCandidate): AiClient {\n const location = findCliLocation(candidate)\n if (!location) {\n return {\n detected: false,\n name: candidate.name,\n provider: candidate.provider,\n type: 'cli',\n }\n }\n\n const resolvedLocation = resolveCliPath(location)\n let version: string | undefined\n if (candidate.versionFlag) {\n try {\n const output = execFileSync(resolvedLocation, [candidate.versionFlag], {\n encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 5000,\n }).trim()\n const match = /[\\d.]+/.exec(output)\n version = match?.[0]\n } catch {\n // version check failed, still detected\n }\n }\n\n return {\n detected: true,\n name: candidate.name,\n path: resolvedLocation,\n provider: candidate.provider,\n type: 'cli',\n version,\n }\n}\n\nfunction getVscodeExtensions(): Set<string> {\n try {\n const output = execSync('code --list-extensions', {\n encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 10_000,\n }).trim()\n return new Set(output.toLowerCase().split('\\n').map(e => e.trim()))\n } catch {\n return new Set()\n }\n}\n\nfunction detectVscode(candidate: VscodeCandidate, extensions: Set<string>): AiClient {\n const extensionId = candidate.extensionIds.find(id => extensions.has(id.toLowerCase()))\n const detected = Boolean(extensionId)\n return {\n detected,\n name: candidate.name,\n ...(extensionId ? { path: extensionId } : {}),\n provider: candidate.provider,\n type: 'vscode',\n }\n}\n\nconst APP_CANDIDATES: AppCandidate[] = [\n {\n name: 'Claude Desktop', paths: ['Claude.app'], provider: 'Anthropic',\n },\n {\n name: 'ChatGPT Desktop', paths: ['ChatGPT.app'], provider: 'OpenAI',\n },\n {\n name: 'Codex Desktop', paths: ['Codex.app', 'OpenAI Codex.app'], provider: 'OpenAI',\n },\n {\n name: 'Cursor', paths: ['Cursor.app', 'Cursor/Cursor.exe', 'cursor.desktop'], provider: 'Cursor',\n },\n {\n name: 'Grok Desktop', paths: ['Grok.app'], provider: 'xAI',\n },\n {\n name: 'Windsurf', paths: ['Windsurf.app', 'Windsurf/Windsurf.exe', 'windsurf.desktop'], provider: 'Windsurf',\n },\n {\n name: 'Gemini Desktop',\n paths: ['Gemini.app', 'Google Gemini.app'],\n provider: 'Google',\n },\n {\n name: 'Gemini in Android Studio', paths: ['Android Studio.app'], provider: 'Google',\n },\n {\n name: 'Kiro', paths: ['Kiro.app', 'Kiro/Kiro.exe', 'kiro.desktop'], provider: 'Kiro',\n },\n {\n name: 'Copilot Desktop', paths: ['Microsoft Copilot.app', 'Copilot.app'], provider: 'Microsoft',\n },\n {\n name: 'Ollama', paths: ['Ollama.app', 'Ollama/Ollama.exe', 'ollama.desktop'], provider: 'Ollama',\n },\n {\n name: 'LM Studio', paths: ['LM Studio.app'], provider: 'LM Studio',\n },\n {\n name: 'OpenCode', paths: ['OpenCode.app'], provider: 'OpenCode',\n },\n]\n\nconst CLI_CANDIDATES: CliCandidate[] = [\n {\n command: 'claude', name: 'Claude Code', provider: 'Anthropic', versionFlag: '--version',\n },\n {\n command: 'chatgpt', name: 'ChatGPT CLI', provider: 'OpenAI', versionFlag: '--version',\n },\n {\n command: 'codex', name: 'Codex CLI', provider: 'OpenAI', versionFlag: '--version',\n },\n {\n command: 'cursor-agent', name: 'Cursor Agent CLI', provider: 'Cursor', versionFlag: '--version',\n },\n {\n command: 'cursor',\n name: 'Cursor Editor CLI',\n paths: ['/Applications/Cursor.app/Contents/Resources/app/bin/cursor'],\n provider: 'Cursor',\n versionFlag: '--version',\n },\n {\n command: 'grok', name: 'Grok CLI', provider: 'xAI', versionFlag: '--version',\n },\n {\n command: 'windsurf',\n name: 'Windsurf CLI',\n paths: ['/Applications/Windsurf.app/Contents/Resources/app/bin/windsurf'],\n provider: 'Windsurf',\n versionFlag: '--version',\n },\n {\n command: 'gemini', name: 'Gemini CLI', provider: 'Google', versionFlag: '--version',\n },\n {\n command: 'kiro-cli', name: 'Kiro CLI', provider: 'Kiro', versionFlag: 'version',\n },\n {\n command: 'kiro', name: 'Kiro Editor CLI', provider: 'Kiro', versionFlag: '--version',\n },\n {\n command: 'copilot', name: 'GitHub Copilot CLI', provider: 'Microsoft', versionFlag: '--version',\n },\n {\n command: 'ollama',\n name: 'Ollama CLI',\n paths: ['/Applications/Ollama.app/Contents/Resources/ollama'],\n provider: 'Ollama',\n versionFlag: '--version',\n },\n {\n command: 'aider', name: 'Aider CLI', provider: 'Aider', versionFlag: '--version',\n },\n {\n command: 'cn', name: 'Continue CLI', provider: 'Continue', versionFlag: '--version',\n },\n {\n command: 'cline', name: 'Cline CLI', provider: 'Cline', versionFlag: '--version',\n },\n {\n command: 'droid', name: 'Factory Droid CLI', provider: 'Factory', versionFlag: '--version',\n },\n {\n command: 'lms', name: 'LM Studio CLI', provider: 'LM Studio', versionFlag: 'version',\n },\n {\n command: 'opencode', name: 'OpenCode CLI', provider: 'OpenCode', versionFlag: '--version',\n },\n]\n\nconst VSCODE_CANDIDATES: VscodeCandidate[] = [\n {\n extensionIds: ['anthropic.claude-code'], name: 'Claude Code Extension', provider: 'Anthropic',\n },\n {\n extensionIds: ['openai.chatgpt'], name: 'Codex IDE Extension', provider: 'OpenAI',\n },\n {\n extensionIds: ['codeium.codeium'], name: 'Windsurf / Codeium Extension', provider: 'Windsurf',\n },\n {\n extensionIds: ['github.copilot'], name: 'GitHub Copilot', provider: 'Microsoft',\n },\n {\n extensionIds: ['github.copilot-chat'], name: 'GitHub Copilot Chat', provider: 'Microsoft',\n },\n {\n extensionIds: ['google.geminicodeassist', 'google.gemini-code-assist'], name: 'Gemini Code Assist', provider: 'Google',\n },\n {\n extensionIds: ['continue.continue'], name: 'Continue', provider: 'Continue',\n },\n {\n extensionIds: ['saoudrizwan.claude-dev'], name: 'Cline', provider: 'Cline',\n },\n]\n\nfunction detectAll(): AiClient[] {\n const results: AiClient[] = []\n\n for (const candidate of APP_CANDIDATES) {\n results.push(detectApp(candidate))\n }\n\n for (const candidate of CLI_CANDIDATES) {\n results.push(detectCli(candidate))\n }\n\n const extensions = getVscodeExtensions()\n for (const candidate of VSCODE_CANDIDATES) {\n results.push(detectVscode(candidate, extensions))\n }\n\n return results\n}\n\nfunction printResults(results: AiClient[]): void {\n const providers = [\n 'Anthropic',\n 'OpenAI',\n 'Cursor',\n 'xAI',\n 'Windsurf',\n 'Google',\n 'Kiro',\n 'Microsoft',\n 'Ollama',\n 'Aider',\n 'Continue',\n 'Cline',\n 'Factory',\n 'LM Studio',\n 'OpenCode',\n ]\n\n for (const provider of providers) {\n const clients = results.filter(c => c.provider === provider)\n const found = clients.filter(c => c.detected)\n\n console.log(chalk.cyan(provider))\n\n if (found.length === 0) {\n console.log(chalk.gray(' (none detected)'))\n } else {\n for (const client of found) {\n const info = [client.path, client.version].filter(Boolean).join(' ')\n console.log(` ${chalk.green('+')} ${chalk.white(client.name.padEnd(28))} ${chalk.gray(info)}`)\n }\n }\n console.log()\n }\n\n const total = results.filter(c => c.detected).length\n console.log(chalk.white(`${total} AI client${total === 1 ? '' : 's'} detected`))\n}\n\nexport function detectAiClients(json: boolean): void {\n const results = detectAll()\n\n if (json) {\n console.log(JSON.stringify(results, null, 2))\n return\n }\n\n printResults(results)\n}\n","import type { CommandModule } from 'yargs'\n\nimport { detectAiClients } from '../actions/detect/index.ts'\n\nexport const detectCommand: CommandModule = {\n command: 'detect',\n describe: 'Scan for installed AI clients',\n builder: yargs =>\n yargs\n .option('json', {\n type: 'boolean',\n default: false,\n describe: 'Output as JSON',\n }),\n handler: (argv) => {\n detectAiClients(argv.json as boolean)\n },\n}\n","import {\n copyFileSync,\n cpSync,\n existsSync,\n rmSync,\n} from 'node:fs'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\n\ntype SyncSource = 'agents' | 'claude'\n\ninterface SyncMapping {\n destDir: string\n destFile: string\n sourceDir: string\n sourceFile: string\n}\n\nfunction resolveMapping(from: SyncSource, cwd: string): SyncMapping {\n if (from === 'claude') {\n return {\n destDir: path.join(cwd, '.agents'),\n destFile: path.join(cwd, 'AGENTS.md'),\n sourceDir: path.join(cwd, '.claude'),\n sourceFile: path.join(cwd, 'CLAUDE.md'),\n }\n }\n return {\n destDir: path.join(cwd, '.claude'),\n destFile: path.join(cwd, 'CLAUDE.md'),\n sourceDir: path.join(cwd, '.agents'),\n sourceFile: path.join(cwd, 'AGENTS.md'),\n }\n}\n\nexport function syncAiConfig(from: SyncSource): void {\n const cwd = process.cwd()\n const mapping = resolveMapping(from, cwd)\n\n if (!existsSync(mapping.sourceDir)) {\n throw new Error(chalk.red(`Source directory not found: ${mapping.sourceDir}`))\n }\n\n if (!existsSync(mapping.sourceFile)) {\n throw new Error(chalk.red(`Source file not found: ${mapping.sourceFile}`))\n }\n\n if (existsSync(mapping.destDir)) {\n rmSync(mapping.destDir, { recursive: true })\n }\n\n if (existsSync(mapping.destFile)) {\n rmSync(mapping.destFile)\n }\n\n cpSync(mapping.sourceDir, mapping.destDir, { recursive: true })\n copyFileSync(mapping.sourceFile, mapping.destFile)\n\n const label = from === 'claude' ? 'Claude → Codex' : 'Codex → Claude'\n console.log(chalk.green(`Synced ${label}:`))\n console.log(` ${path.basename(mapping.sourceDir)}/ → ${path.basename(mapping.destDir)}/`)\n console.log(` ${path.basename(mapping.sourceFile)} → ${path.basename(mapping.destFile)}`)\n}\n","import type { CommandModule } from 'yargs'\n\nimport { syncAiConfig } from '../actions/sync/index.ts'\n\nexport const syncCommand: CommandModule = {\n builder: yargs =>\n yargs\n .option('from', {\n choices: ['claude', 'agents'] as const,\n default: 'claude',\n describe: 'Source to sync from (the authority)',\n type: 'string',\n }),\n command: 'sync',\n describe: 'Sync AI config between Claude Code and Codex',\n handler: (argv) => {\n syncAiConfig(argv.from as 'agents' | 'claude')\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { detectCommand } from './detectCommand.ts'\nimport { syncCommand } from './syncCommand.ts'\n\nexport const aiCommand: CommandModule = {\n command: 'ai',\n describe: 'AI client tools',\n builder: yargs =>\n yargs\n .command(detectCommand)\n .command(syncCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","import {\n existsSync, mkdirSync, readFileSync, writeFileSync,\n} from 'node:fs'\nimport { homedir } from 'node:os'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\n\ntype AuditProvider = 'claude' | 'codex'\n\ninterface CodexHookDefinition {\n command: string\n statusMessage?: string\n type: 'command'\n}\n\ninterface CodexHookMatcher {\n hooks: CodexHookDefinition[]\n matcher?: string\n}\n\ninterface CodexHooksConfig {\n hooks?: Record<string, CodexHookMatcher[]>\n}\n\nfunction findMonorepoRoot(startDir: string): string | undefined {\n let dir = startDir\n while (dir !== path.dirname(dir)) {\n if (existsSync(path.join(dir, 'pnpm-workspace.yaml'))) return dir\n dir = path.dirname(dir)\n }\n return undefined\n}\n\nfunction getRepoRoot(): string {\n const root = findMonorepoRoot(process.cwd())\n if (!root) throw new Error('Could not find monorepo root (pnpm-workspace.yaml)')\n return root\n}\n\nfunction resolveClaudeHooksDist(): string {\n return path.join(getRepoRoot(), 'packages', 'audit-plugin', 'dist', 'hooks')\n}\n\nfunction getClaudeSettingsPath(): string {\n return path.join(homedir(), '.claude', 'settings.json')\n}\n\nfunction readClaudeSettings(): Record<string, unknown> {\n const settingsPath = getClaudeSettingsPath()\n if (!existsSync(settingsPath)) return {}\n const raw = readFileSync(settingsPath, 'utf8')\n return JSON.parse(raw) as Record<string, unknown>\n}\n\nfunction writeClaudeSettings(settings: Record<string, unknown>): void {\n const settingsPath = getClaudeSettingsPath()\n mkdirSync(path.dirname(settingsPath), { recursive: true })\n writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\\n', 'utf8')\n}\n\nfunction buildClaudeHooks(hooksDir: string): Record<string, unknown[]> {\n return {\n SessionStart: [\n {\n matcher: '',\n hooks: [{\n type: 'command', command: `node ${hooksDir}/session-start.mjs`, timeout: 5,\n }],\n },\n ],\n UserPromptSubmit: [\n {\n matcher: '',\n hooks: [{\n type: 'command', command: `node ${hooksDir}/user-prompt-submit.mjs`, timeout: 5,\n }],\n },\n ],\n PostToolUse: [\n {\n matcher: '',\n hooks: [{\n type: 'command', command: `node ${hooksDir}/post-tool-use.mjs`, timeout: 5,\n }],\n },\n ],\n Stop: [\n {\n matcher: '',\n hooks: [{\n type: 'command', command: `node ${hooksDir}/stop.mjs`, timeout: 5,\n }],\n },\n ],\n }\n}\n\nfunction getCodexConfigPath(): string {\n return path.join(homedir(), '.codex', 'config.toml')\n}\n\nfunction getCodexHooksPath(): string {\n return path.join(getRepoRoot(), '.codex', 'hooks.json')\n}\n\nfunction readCodexConfig(): string {\n const configPath = getCodexConfigPath()\n if (!existsSync(configPath)) return ''\n return readFileSync(configPath, 'utf8')\n}\n\nfunction writeCodexConfig(config: string): void {\n const configPath = getCodexConfigPath()\n mkdirSync(path.dirname(configPath), { recursive: true })\n writeFileSync(configPath, config, 'utf8')\n}\n\nfunction enableCodexHooksFeature(): void {\n const config = readCodexConfig()\n const lines = config === '' ? [] : config.split('\\n')\n const featuresIndex = lines.findIndex(line => line.trim() === '[features]')\n\n if (featuresIndex === -1) {\n const separator = config === '' || config.endsWith('\\n\\n') || config.endsWith('\\n') ? '' : '\\n'\n writeCodexConfig(config + separator + '[features]\\ncodex_hooks = true\\n')\n return\n }\n\n const sectionEnd = lines.findIndex(\n (line, index) => index > featuresIndex && /^\\s*\\[.*\\]\\s*$/.test(line),\n )\n const endIndex = sectionEnd === -1 ? lines.length : sectionEnd\n const codexHooksIndex = lines.findIndex(\n (line, index) => index > featuresIndex && index < endIndex && /^\\s*codex_hooks\\s*=/.test(line),\n )\n\n if (codexHooksIndex === -1) {\n lines.splice(endIndex, 0, 'codex_hooks = true')\n } else {\n lines[codexHooksIndex] = 'codex_hooks = true'\n }\n\n writeCodexConfig(lines.join('\\n'))\n}\n\nfunction readCodexHooks(): CodexHooksConfig {\n const hooksPath = getCodexHooksPath()\n if (!existsSync(hooksPath)) return {}\n return JSON.parse(readFileSync(hooksPath, 'utf8')) as CodexHooksConfig\n}\n\nfunction writeCodexHooks(config: CodexHooksConfig): void {\n const hooksPath = getCodexHooksPath()\n mkdirSync(path.dirname(hooksPath), { recursive: true })\n writeFileSync(hooksPath, JSON.stringify(config, null, 2) + '\\n', 'utf8')\n}\n\nfunction buildCodexHookCommand(eventName: string): string {\n const recorderPath = path.join(getRepoRoot(), 'packages', 'audit-plugin', 'dist', 'codex', 'record-event.mjs')\n return `node \"${recorderPath}\" ${eventName}`\n}\n\nfunction buildCodexHooks(): Record<string, CodexHookMatcher[]> {\n return {\n PostToolUse: [\n {\n hooks: [\n {\n command: buildCodexHookCommand('PostToolUse'),\n statusMessage: 'Recording Codex audit entry',\n type: 'command',\n },\n ],\n matcher: 'Bash',\n },\n ],\n SessionStart: [\n {\n hooks: [\n {\n command: buildCodexHookCommand('SessionStart'),\n statusMessage: 'Recording Codex audit entry',\n type: 'command',\n },\n ],\n matcher: 'startup|resume',\n },\n ],\n Stop: [\n {\n hooks: [\n {\n command: buildCodexHookCommand('Stop'),\n statusMessage: 'Recording Codex audit entry',\n type: 'command',\n },\n ],\n },\n ],\n UserPromptSubmit: [\n {\n hooks: [\n {\n command: buildCodexHookCommand('UserPromptSubmit'),\n statusMessage: 'Recording Codex audit entry',\n type: 'command',\n },\n ],\n },\n ],\n }\n}\n\nfunction isManagedCodexHook(hook: CodexHookDefinition): boolean {\n return hook.command.includes(path.join('packages', 'audit-plugin', 'dist', 'codex', 'record-event.mjs'))\n}\n\nfunction mergeCodexHooks(existing: CodexHooksConfig): CodexHooksConfig {\n const mergedHooks = existing.hooks ? { ...existing.hooks } : {}\n const managedHooks = buildCodexHooks()\n\n for (const [eventName, groups] of Object.entries(managedHooks)) {\n const remaining = (mergedHooks[eventName] ?? [])\n .map(group => ({\n ...group,\n hooks: group.hooks.filter(hook => !isManagedCodexHook(hook)),\n }))\n .filter(group => group.hooks.length > 0)\n\n mergedHooks[eventName] = [...remaining, ...groups]\n }\n\n return { hooks: mergedHooks }\n}\n\nfunction removeManagedCodexHooks(existing: CodexHooksConfig): CodexHooksConfig {\n const nextHooks: Record<string, CodexHookMatcher[]> = {}\n\n for (const [eventName, groups] of Object.entries(existing.hooks ?? {})) {\n const remaining = groups\n .map(group => ({\n ...group,\n hooks: group.hooks.filter(hook => !isManagedCodexHook(hook)),\n }))\n .filter(group => group.hooks.length > 0)\n\n if (remaining.length > 0) {\n nextHooks[eventName] = remaining\n }\n }\n\n return Object.keys(nextHooks).length > 0 ? { hooks: nextHooks } : {}\n}\n\nfunction installClaudePlugin(): void {\n const hooksDir = resolveClaudeHooksDist()\n\n if (!existsSync(hooksDir)) {\n console.log(chalk.red(`Hook scripts not found: ${hooksDir}`))\n console.log(chalk.gray('Make sure @xylabs/aries-audit-plugin is built (pnpm xy build).'))\n return\n }\n\n const settings = readClaudeSettings()\n settings.hooks = buildClaudeHooks(hooksDir)\n writeClaudeSettings(settings)\n\n console.log(chalk.green('Claude audit hooks installed into ~/.claude/settings.json'))\n console.log(` ${chalk.gray('Hook scripts:')} ${hooksDir}`)\n console.log(chalk.yellow('\\nRestart Claude Code for the hooks to take effect.'))\n}\n\nfunction uninstallClaudePlugin(): void {\n const settings = readClaudeSettings()\n\n if (!settings.hooks) {\n console.log(chalk.yellow('No Claude hooks configured in ~/.claude/settings.json'))\n return\n }\n\n delete settings.hooks\n writeClaudeSettings(settings)\n\n console.log(chalk.green('Claude audit hooks removed from ~/.claude/settings.json'))\n console.log(chalk.yellow('Restart Claude Code for the change to take effect.'))\n}\n\nfunction installCodexPlugin(): void {\n const recorderPath = path.join(getRepoRoot(), 'packages', 'audit-plugin', 'dist', 'codex', 'record-event.mjs')\n\n if (!existsSync(recorderPath)) {\n console.log(chalk.red(`Codex recorder not found: ${recorderPath}`))\n console.log(chalk.gray('Make sure @xylabs/aries-audit-plugin is built (pnpm xy build).'))\n return\n }\n\n enableCodexHooksFeature()\n const hooks = mergeCodexHooks(readCodexHooks())\n writeCodexHooks(hooks)\n\n console.log(chalk.green('Codex audit hooks installed'))\n console.log(` ${chalk.gray('Hooks file:')} ${getCodexHooksPath()}`)\n console.log(` ${chalk.gray('Config file:')} ${getCodexConfigPath()}`)\n console.log(chalk.yellow('\\nRestart Codex CLI in this repo for the hooks to take effect.'))\n}\n\nfunction uninstallCodexPlugin(): void {\n const hooksPath = getCodexHooksPath()\n if (!existsSync(hooksPath)) {\n console.log(chalk.yellow('No repo-local Codex hooks file found to update.'))\n return\n }\n\n const hooks = removeManagedCodexHooks(readCodexHooks())\n writeCodexHooks(hooks)\n\n console.log(chalk.green('Codex audit hooks removed from repo-local hooks.json'))\n console.log(` ${chalk.gray('Hooks file:')} ${hooksPath}`)\n console.log(chalk.gray('Leaving features.codex_hooks enabled in ~/.codex/config.toml to avoid disabling unrelated hooks.'))\n}\n\nexport function installPlugin(provider?: AuditProvider): void {\n if (!provider) {\n installClaudePlugin()\n console.log()\n installCodexPlugin()\n return\n }\n\n if (provider === 'claude') {\n installClaudePlugin()\n return\n }\n\n installCodexPlugin()\n}\n\nexport function uninstallPlugin(provider?: AuditProvider): void {\n if (!provider) {\n uninstallClaudePlugin()\n console.log()\n uninstallCodexPlugin()\n return\n }\n\n if (provider === 'claude') {\n uninstallClaudePlugin()\n return\n }\n\n uninstallCodexPlugin()\n}\n","import {\n existsSync, readdirSync, readFileSync,\n} from 'node:fs'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { getAuditSearchDirs } from './auditPaths.ts'\n\ninterface AuditEntryParsed {\n event?: string\n schema?: string\n sessionId?: string\n timestamp?: string\n}\n\ninterface SessionSummary {\n date: string\n entryCount: number\n events: Record<string, number>\n firstTimestamp: string\n lastTimestamp: string\n sessionId: string\n}\n\nfunction summarizeSession(filePath: string, date: string): SessionSummary | undefined {\n const content = readFileSync(filePath, 'utf8').trim()\n if (!content) return undefined\n\n const lines = content.split('\\n')\n const events: Record<string, number> = {}\n let firstTimestamp = ''\n let lastTimestamp = ''\n let sessionId = 'unknown'\n\n for (const line of lines) {\n try {\n const entry = JSON.parse(line) as AuditEntryParsed\n if (!firstTimestamp) firstTimestamp = entry.timestamp ?? ''\n lastTimestamp = entry.timestamp ?? ''\n sessionId = entry.sessionId ?? sessionId\n const eventName = entry.event ?? 'unknown'\n events[eventName] = (events[eventName] ?? 0) + 1\n } catch {\n // skip malformed lines\n }\n }\n\n return {\n date, entryCount: lines.length, events, firstTimestamp, lastTimestamp, sessionId,\n }\n}\n\nexport function listSessions(date?: string): void {\n const auditDirs = getAuditSearchDirs().filter(dir => existsSync(dir))\n if (auditDirs.length === 0) {\n console.log(chalk.yellow('No audit logs found.'))\n return\n }\n\n const dates = date\n ? [date]\n : [...new Set(\n auditDirs.flatMap(auditDir =>\n readdirSync(auditDir).filter(d => /^\\d{4}-\\d{2}-\\d{2}$/.test(d))),\n )]\n .toSorted((a, b) => a.localeCompare(b))\n .toReversed()\n\n let found = false\n\n for (const d of dates) {\n const files = auditDirs.flatMap((auditDir) => {\n const dayDir = path.join(auditDir, d)\n if (!existsSync(dayDir)) return []\n return readdirSync(dayDir)\n .filter(f => f.endsWith('.jsonl'))\n .map(file => path.join(dayDir, file))\n })\n if (files.length === 0) continue\n\n found = true\n console.log(chalk.cyan(`\\n${d}`))\n\n for (const file of files) {\n const summary = summarizeSession(file, d)\n if (!summary) continue\n\n const timeRange = `${summary.firstTimestamp.slice(11, 19)} - ${summary.lastTimestamp.slice(11, 19)}`\n const eventSummary = Object.entries(summary.events)\n .map(([k, v]) => `${k}:${v}`)\n .join(' ')\n\n console.log(\n ` ${chalk.white(summary.sessionId.slice(0, 12).padEnd(12))} ${chalk.gray(timeRange)} ${chalk.green(String(summary.entryCount).padStart(4))} entries ${chalk.gray(eventSummary)}`,\n )\n }\n }\n\n if (!found) {\n console.log(chalk.yellow('No audit logs found.'))\n }\n}\n","import { homedir } from 'node:os'\nimport path from 'node:path'\n\nexport type AuditProvider = 'claude' | 'codex'\n\nexport function getAuditRootDir(): string {\n return path.join(homedir(), '.aries', 'audit-logs')\n}\n\nexport function getAuditDir(provider?: AuditProvider): string {\n return provider ? path.join(getAuditRootDir(), provider) : getAuditRootDir()\n}\n\nexport function getAuditSearchDirs(): string[] {\n return [\n getAuditDir('claude'),\n getAuditDir('codex'),\n getAuditRootDir(),\n ]\n}\n","import { execSync } from 'node:child_process'\nimport { existsSync, mkdirSync } from 'node:fs'\nimport { platform } from 'node:os'\n\nimport chalk from 'chalk'\n\nimport { getAuditDir } from './auditPaths.ts'\n\nexport function openAuditDir(): void {\n const dir = getAuditDir()\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n console.log(chalk.yellow(`Created audit log directory: ${dir}`))\n }\n\n const os = platform()\n switch (os) {\n case 'darwin': {\n execSync(`open \"${dir}\"`)\n break\n }\n case 'win32': {\n execSync(`explorer \"${dir}\"`)\n break\n }\n default: {\n execSync(`xdg-open \"${dir}\"`)\n break\n }\n }\n\n console.log(chalk.green(`Opened: ${dir}`))\n}\n","import {\n existsSync, readdirSync, readFileSync,\n} from 'node:fs'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { getAuditSearchDirs } from './auditPaths.ts'\n\ninterface AuditEntryParsed {\n data?: Record<string, unknown>\n event?: string\n schema?: string\n sessionId?: string\n timestamp?: string\n}\n\nexport function searchAudit(query: string, date?: string, limit = 50): void {\n const auditDirs = getAuditSearchDirs().filter(dir => existsSync(dir))\n if (auditDirs.length === 0) {\n console.log(chalk.yellow('No audit logs found.'))\n return\n }\n\n const dates = date\n ? [date]\n : [...new Set(\n auditDirs.flatMap(auditDir =>\n readdirSync(auditDir).filter(d => /^\\d{4}-\\d{2}-\\d{2}$/.test(d))),\n )]\n .toSorted((a, b) => a.localeCompare(b))\n .toReversed()\n\n const lowerQuery = query.toLowerCase()\n let matchCount = 0\n\n for (const d of dates) {\n const files = auditDirs.flatMap((auditDir) => {\n const dayDir = path.join(auditDir, d)\n if (!existsSync(dayDir)) return []\n return readdirSync(dayDir)\n .filter(f => f.endsWith('.jsonl'))\n .map(file => path.join(dayDir, file))\n })\n\n for (const file of files) {\n const content = readFileSync(file, 'utf8').trim()\n if (!content) continue\n\n for (const line of content.split('\\n')) {\n if (!line.toLowerCase().includes(lowerQuery)) continue\n\n try {\n const entry = JSON.parse(line) as AuditEntryParsed\n const time = (entry.timestamp ?? '').slice(0, 19)\n const event = entry.event ?? 'unknown'\n\n const snippet = JSON.stringify(entry.data).slice(0, 150)\n console.log(`${chalk.gray(time)} ${chalk.cyan((entry.sessionId ?? '').slice(0, 8))} ${chalk.yellow(event)} ${snippet}`)\n\n matchCount++\n if (matchCount >= limit) {\n console.log(chalk.gray(`\\n... showing first ${limit} matches`))\n return\n }\n } catch {\n // skip malformed\n }\n }\n }\n }\n\n if (matchCount === 0) {\n console.log(chalk.yellow(`No matches found for: ${query}`))\n } else {\n console.log(chalk.gray(`\\n${matchCount} match${matchCount === 1 ? '' : 'es'} found`))\n }\n}\n","import { execSync } from 'node:child_process'\nimport {\n existsSync, readdirSync, readFileSync,\n} from 'node:fs'\nimport { homedir } from 'node:os'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nimport chalk from 'chalk'\n\nfunction getClientVersion(): string | undefined {\n try {\n const thisFile = fileURLToPath(import.meta.url)\n const pkgDir = path.resolve(path.dirname(thisFile), '..', '..')\n const pkg = JSON.parse(readFileSync(path.join(pkgDir, 'package.json'), 'utf8')) as { version?: string }\n return pkg.version\n } catch {\n return undefined\n }\n}\n\nfunction getClaudeVersion(): string | undefined {\n const execPath = process.env.CLAUDE_CODE_EXECPATH\n if (execPath) return path.basename(execPath)\n try {\n const output = execSync('claude --version', { encoding: 'utf8', timeout: 5000 }).trim()\n const match = /^([\\d.]+)/.exec(output)\n return match?.[1]\n } catch {\n return undefined\n }\n}\n\nfunction getClaudeDir(): string {\n return path.join(homedir(), '.claude')\n}\n\nfunction readRestrictions(): Record<string, boolean> | undefined {\n try {\n const raw = JSON.parse(readFileSync(path.join(getClaudeDir(), 'policy-limits.json'), 'utf8')) as {\n restrictions?: Record<string, { allowed?: boolean }>\n }\n if (!raw.restrictions) return undefined\n const result: Record<string, boolean> = {}\n for (const [key, value] of Object.entries(raw.restrictions)) {\n result[key] = value.allowed ?? false\n }\n return Object.keys(result).length > 0 ? result : undefined\n } catch {\n return undefined\n }\n}\n\nfunction readIdeName(): string | undefined {\n try {\n const ideDir = path.join(getClaudeDir(), 'ide')\n if (!existsSync(ideDir)) return undefined\n const lockFile = readdirSync(ideDir).find(f => f.endsWith('.lock'))\n if (!lockFile) return undefined\n const content = JSON.parse(readFileSync(path.join(ideDir, lockFile), 'utf8')) as { ideName?: string }\n return content.ideName\n } catch {\n return undefined\n }\n}\n\nconst DYNAMIC_FIELDS = new Set(['kind', 'model', 'permissionMode'])\n\nfunction printSection(label: string, entries: Record<string, unknown>): void {\n console.log(chalk.cyan(label))\n for (const [key, value] of Object.entries(entries)) {\n if (value === undefined) {\n const fallback = DYNAMIC_FIELDS.has(key) ? chalk.gray('<dynamic>') : chalk.gray('unknown')\n console.log(` ${chalk.white(key)}: ${fallback}`)\n } else if (typeof value === 'object' && value !== null) {\n console.log(` ${chalk.white(key)}:`)\n for (const [k, v] of Object.entries(value)) {\n console.log(` ${chalk.white(k)}: ${chalk.green(String(v))}`)\n }\n } else {\n console.log(` ${chalk.white(key)}: ${chalk.green(typeof value === 'string' ? value : JSON.stringify(value))}`)\n }\n }\n}\n\nexport function showAiMeta(json: boolean): void {\n const ai: Record<string, unknown> = {\n entrypoint: process.env.CLAUDE_CODE_ENTRYPOINT,\n ide: readIdeName(),\n kind: undefined,\n model: undefined,\n permissionMode: undefined,\n product: 'claude-code',\n provider: 'anthropic',\n restrictions: readRestrictions(),\n version: getClaudeVersion(),\n }\n\n const client: Record<string, string | undefined> = {\n name: '@xylabs/aries-audit-plugin',\n version: getClientVersion(),\n }\n\n if (json) {\n console.log(JSON.stringify({ ai, client }, null, 2))\n return\n }\n\n printSection('AI', ai)\n console.log()\n printSection('Client', client)\n}\n","import {\n existsSync, readdirSync, readFileSync,\n} from 'node:fs'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { getAuditSearchDirs } from './auditPaths.ts'\n\ninterface AiMetaParsed {\n entrypoint?: string\n ide?: string\n kind?: string\n model?: string\n permissionMode?: string\n product?: string\n provider?: string\n restrictions?: Record<string, boolean>\n version?: string\n}\n\ninterface AuditEntryData {\n permissionMode?: string\n prompt?: string\n response?: string\n toolInput?: string\n toolName?: string\n}\n\ninterface AuditEntryParsed {\n ai?: AiMetaParsed\n data?: AuditEntryData\n event?: string\n schema?: string\n sessionId?: string\n timestamp?: string\n}\n\nfunction findSessionFile(sessionId: string): string | undefined {\n const auditDirs = getAuditSearchDirs().filter(dir => existsSync(dir))\n if (auditDirs.length === 0) return undefined\n\n const dates = [...new Set(\n auditDirs.flatMap(auditDir =>\n readdirSync(auditDir).filter(d => /^\\d{4}-\\d{2}-\\d{2}$/.test(d))),\n )]\n .toSorted((a, b) => a.localeCompare(b))\n .toReversed()\n\n for (const date of dates) {\n for (const auditDir of auditDirs) {\n const dayDir = path.join(auditDir, date)\n if (!existsSync(dayDir)) continue\n const files = readdirSync(dayDir).filter(f => f.includes(sessionId) && f.endsWith('.jsonl'))\n if (files.length > 0) return path.join(dayDir, files[0])\n }\n }\n\n return undefined\n}\n\nfunction formatSessionStart(time: string, entry: AuditEntryParsed): string {\n const version = entry.ai?.version ? ` v${entry.ai.version}` : ''\n const mode = entry.data?.permissionMode ? ` mode=${entry.data.permissionMode}` : ''\n return `${chalk.gray(time)} ${chalk.blue('SESSION START')}${version}${mode}`\n}\n\nfunction formatEntry(entry: AuditEntryParsed): string {\n const time = (entry.timestamp ?? '').slice(11, 23)\n const event = entry.event ?? 'unknown'\n const data = entry.data\n\n switch (event) {\n case 'SessionStart': {\n return formatSessionStart(time, entry)\n }\n case 'UserPromptSubmit': {\n return `${chalk.gray(time)} ${chalk.green('PROMPT')} ${String(data?.prompt ?? '').slice(0, 200)}`\n }\n case 'PostToolUse': {\n return `${chalk.gray(time)} ${chalk.yellow('TOOL')} ${chalk.white(String(data?.toolName ?? ''))} ${chalk.gray(String(data?.toolInput ?? '').slice(0, 120))}`\n }\n case 'Stop': {\n return `${chalk.gray(time)} ${chalk.magenta('RESPONSE')} ${String(data?.response ?? '').slice(0, 200)}`\n }\n default: {\n return `${chalk.gray(time)} ${event} ${JSON.stringify(data)}`\n }\n }\n}\n\nexport function showSession(sessionId: string, format: string): void {\n const filePath = findSessionFile(sessionId)\n if (!filePath) {\n console.log(chalk.red(`No audit log found for session: ${sessionId}`))\n return\n }\n\n const content = readFileSync(filePath, 'utf8').trim()\n if (!content) {\n console.log(chalk.yellow('Session log is empty.'))\n return\n }\n\n const lines = content.split('\\n')\n\n if (format === 'json') {\n for (const line of lines) {\n console.log(line)\n }\n return\n }\n\n console.log(chalk.cyan(`Session: ${sessionId}`))\n console.log(chalk.cyan(`File: ${filePath}`))\n console.log(chalk.cyan(`Entries: ${lines.length}`))\n console.log()\n\n for (const line of lines) {\n try {\n const entry = JSON.parse(line) as AuditEntryParsed\n console.log(formatEntry(entry))\n } catch {\n console.log(chalk.red(` [malformed] ${line.slice(0, 80)}`))\n }\n }\n}\n","import {\n existsSync, readdirSync, readFileSync, statSync,\n} from 'node:fs'\nimport { homedir } from 'node:os'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\n\nimport {\n getAuditDir, getAuditRootDir, getAuditSearchDirs,\n} from './auditPaths.ts'\n\nfunction getDirectorySize(dir: string): number {\n let size = 0\n if (!existsSync(dir)) return size\n\n for (const entry of readdirSync(dir)) {\n const fullPath = path.join(dir, entry)\n const stat = statSync(fullPath)\n size += stat.isDirectory() ? getDirectorySize(fullPath) : stat.size\n }\n return size\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\nfunction countSessions(dir: string): number {\n if (!existsSync(dir)) return 0\n let count = 0\n for (const date of readdirSync(dir)) {\n const dayDir = path.join(dir, date)\n const stat = statSync(dayDir)\n if (stat.isDirectory()) {\n count += readdirSync(dayDir).filter(f => f.endsWith('.jsonl')).length\n }\n }\n return count\n}\n\nfunction checkHooksInstalled(): boolean {\n const settingsPath = path.join(homedir(), '.claude', 'settings.json')\n if (!existsSync(settingsPath)) return false\n try {\n const settings = JSON.parse(readFileSync(settingsPath, 'utf8')) as Record<string, unknown>\n return settings.hooks != null\n } catch {\n return false\n }\n}\n\nexport function statusAudit(): void {\n const auditRootDir = getAuditRootDir()\n const auditDirs = getAuditSearchDirs().filter(dir => existsSync(dir))\n\n console.log(chalk.cyan('Audit Plugin Status'))\n console.log()\n\n // Hook installation\n if (checkHooksInstalled()) {\n console.log(` ${chalk.green('Hooks:')} configured in ~/.claude/settings.json`)\n } else {\n console.log(` ${chalk.red('Hooks:')} not installed (run: aries audit install)`)\n }\n\n console.log()\n\n // Audit logs\n console.log(` ${chalk.gray('Log root:')} ${auditRootDir}`)\n console.log(` ${chalk.gray('Claude logs:')} ${getAuditDir('claude')}`)\n console.log(` ${chalk.gray('Codex logs:')} ${getAuditDir('codex')}`)\n\n if (auditDirs.length > 0) {\n const sessions = auditDirs.reduce((sum, dir) => sum + countSessions(dir), 0)\n const size = auditDirs.reduce((sum, dir) => sum + getDirectorySize(dir), 0)\n const dates = [...new Set(\n auditDirs.flatMap(dir => readdirSync(dir).filter(d => /^\\d{4}-\\d{2}-\\d{2}$/.test(d))),\n )]\n const sorted = dates.toSorted((a, b) => a.localeCompare(b))\n\n console.log(` ${chalk.gray('Sessions:')} ${sessions}`)\n console.log(` ${chalk.gray('Date range:')} ${sorted[0] ?? 'none'} - ${sorted.at(-1) ?? 'none'}`)\n console.log(` ${chalk.gray('Disk usage:')} ${formatBytes(size)}`)\n } else {\n console.log(` ${chalk.gray('No logs yet')}`)\n }\n}\n","import type { CommandModule } from 'yargs'\n\nimport { showAiMeta } from '../actions/audit/index.ts'\n\nexport const auditAiCommand: CommandModule = {\n command: 'ai',\n describe: 'Show current AI metadata that is recorded in audit entries',\n builder: yargs =>\n yargs\n .option('json', {\n type: 'boolean',\n default: false,\n describe: 'Output as JSON',\n }),\n handler: (argv) => {\n showAiMeta(argv.json as boolean)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { installPlugin, uninstallPlugin } from '../actions/audit/index.ts'\n\ntype AuditProvider = 'claude' | 'codex'\n\ninterface AuditInstallArguments {\n provider?: AuditProvider\n}\n\nexport const auditInstallCommand: CommandModule<object, AuditInstallArguments> = {\n command: 'install [provider]',\n describe: 'Install the audit plugin for Claude, Codex, or both',\n builder: yargs => yargs.positional('provider', {\n choices: ['claude', 'codex'] as const,\n describe: 'Which AI client to install the audit plugin for. Defaults to both.',\n type: 'string',\n }),\n handler: (argv) => {\n installPlugin(argv.provider)\n },\n}\n\nexport const auditUninstallCommand: CommandModule<object, AuditInstallArguments> = {\n command: 'uninstall [provider]',\n describe: 'Uninstall the audit plugin for Claude, Codex, or both',\n builder: yargs => yargs.positional('provider', {\n choices: ['claude', 'codex'] as const,\n describe: 'Which AI client to uninstall the audit plugin for. Defaults to both.',\n type: 'string',\n }),\n handler: (argv) => {\n uninstallPlugin(argv.provider)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { listSessions } from '../actions/audit/index.ts'\n\nexport const auditListCommand: CommandModule = {\n command: 'list',\n describe: 'List audit sessions',\n builder: yargs =>\n yargs.option('date', {\n alias: 'd',\n type: 'string',\n describe: 'Filter by date (YYYY-MM-DD)',\n }),\n handler: (argv) => {\n listSessions(argv.date as string | undefined)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { openAuditDir } from '../actions/audit/index.ts'\n\nexport const auditOpenCommand: CommandModule = {\n command: 'open',\n describe: 'Open the audit log directory in Finder / File Explorer',\n handler: () => {\n openAuditDir()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { searchAudit } from '../actions/audit/index.ts'\n\nexport const auditSearchCommand: CommandModule = {\n command: 'search <query>',\n describe: 'Search audit logs',\n builder: yargs =>\n yargs\n .positional('query', {\n type: 'string',\n describe: 'Search text',\n demandOption: true,\n })\n .option('date', {\n alias: 'd',\n type: 'string',\n describe: 'Filter by date (YYYY-MM-DD)',\n })\n .option('limit', {\n alias: 'n',\n type: 'number',\n default: 50,\n describe: 'Max results',\n }),\n handler: (argv) => {\n searchAudit(argv.query as string, argv.date as string | undefined, argv.limit as number)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { showSession } from '../actions/audit/index.ts'\n\nexport const auditShowCommand: CommandModule = {\n command: 'show <session-id>',\n describe: 'Show audit trail for a session',\n builder: yargs =>\n yargs\n .positional('session-id', {\n type: 'string',\n describe: 'Session ID (or prefix)',\n demandOption: true,\n })\n .option('format', {\n alias: 'f',\n type: 'string',\n choices: ['text', 'json'] as const,\n default: 'text',\n describe: 'Output format',\n }),\n handler: (argv) => {\n showSession(argv['session-id'] as string, argv.format as string)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { statusAudit } from '../actions/audit/index.ts'\n\nexport const auditStatusCommand: CommandModule = {\n command: 'status',\n describe: 'Show audit plugin status and log statistics',\n handler: () => {\n statusAudit()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { auditAiCommand } from './auditAiCommand.ts'\nimport { auditInstallCommand, auditUninstallCommand } from './auditInstallCommand.ts'\nimport { auditListCommand } from './auditListCommand.ts'\nimport { auditOpenCommand } from './auditOpenCommand.ts'\nimport { auditSearchCommand } from './auditSearchCommand.ts'\nimport { auditShowCommand } from './auditShowCommand.ts'\nimport { auditStatusCommand } from './auditStatusCommand.ts'\n\nexport const auditCommand: CommandModule = {\n command: 'audit',\n describe: 'Manage the Claude Code audit trail',\n builder: yargs =>\n yargs\n .command(auditAiCommand)\n .command(auditListCommand)\n .command(auditShowCommand)\n .command(auditSearchCommand)\n .command(auditInstallCommand)\n .command(auditUninstallCommand)\n .command(auditOpenCommand)\n .command(auditStatusCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\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 existsSync, readdirSync, readFileSync, writeFileSync,\n} from 'node:fs'\nimport path from 'node:path'\n\nimport type { ClampPolicy, FilesystemAccessRules } from '@xylabs/aries-clamp-core'\nimport { CLAMP_POLICY_DIR } from '@xylabs/aries-clamp-core'\nimport chalk from 'chalk'\n\nexport function listPolicies(): void {\n const policies: { name: string; source: string }[] = []\n\n if (existsSync(CLAMP_POLICY_DIR)) {\n for (const file of readdirSync(CLAMP_POLICY_DIR)) {\n if (file.endsWith('.json')) {\n policies.push({\n name: file.replace(/\\.json$/, ''),\n source: CLAMP_POLICY_DIR,\n })\n }\n }\n }\n\n const localPath = path.join(process.cwd(), '.aries-clamp.json')\n if (existsSync(localPath)) {\n try {\n const policy = JSON.parse(readFileSync(localPath, 'utf8')) as ClampPolicy\n policies.push({ name: policy.name ?? '(local)', source: localPath })\n } catch {\n policies.push({ name: '(local - parse error)', source: localPath })\n }\n }\n\n if (policies.length === 0) {\n console.log(chalk.yellow('No policies found.'))\n console.log(chalk.gray(` Policy directory: ${CLAMP_POLICY_DIR}`))\n console.log(chalk.gray(' Run \"aries clamp policy init\" to create a starter policy.'))\n return\n }\n\n console.log(chalk.cyan('\\nAvailable policies:\\n'))\n for (const p of policies) {\n console.log(` ${chalk.white(p.name)} ${chalk.gray(`(${p.source})`)}`)\n }\n console.log('')\n}\n\nfunction printAccessRules(label: string, rules: FilesystemAccessRules | undefined): void {\n if (!rules) return\n console.log(chalk.white(` ${label}:`))\n if (rules.allow?.length) console.log(chalk.white(` allow: ${rules.allow.join(', ')}`))\n if (rules.prompt?.length) console.log(chalk.yellow(` prompt: ${rules.prompt.join(', ')}`))\n if (rules.deny?.length) console.log(chalk.red(` deny: ${rules.deny.join(', ')}`))\n}\n\nfunction printProcessRules(policy: ClampPolicy): void {\n if (!policy.process) return\n console.log(chalk.green('\\n Process rules:'))\n if (policy.process.allow?.length) {\n console.log(chalk.white(` allow: ${policy.process.allow.join(', ')}`))\n }\n if (policy.process.prompt?.length) {\n console.log(chalk.yellow(` prompt: ${policy.process.prompt.join(', ')}`))\n }\n if (policy.process.deny?.length) {\n console.log(chalk.red(` deny: ${policy.process.deny.join(', ')}`))\n }\n}\n\nfunction printFilesystemRules(policy: ClampPolicy): void {\n if (!policy.filesystem) return\n console.log(chalk.green('\\n Filesystem rules:'))\n printAccessRules('read', policy.filesystem.read)\n printAccessRules('write', policy.filesystem.write)\n}\n\nfunction resolvePolicyPath(name: string): string | undefined {\n const namedPath = path.join(CLAMP_POLICY_DIR, `${name}.json`)\n if (existsSync(namedPath)) return namedPath\n if (existsSync(name)) return name\n return undefined\n}\n\nexport function showPolicy(name: string): void {\n const policyPath = resolvePolicyPath(name)\n if (!policyPath) {\n console.error(chalk.red(`Policy not found: ${name}`))\n return\n }\n\n const policy = JSON.parse(readFileSync(policyPath, 'utf8')) as ClampPolicy\n\n console.log(chalk.cyan(`\\nPolicy: ${policy.name}`))\n if (policy.description) {\n console.log(chalk.gray(` ${policy.description}`))\n }\n console.log('')\n console.log(chalk.white(` Default action: ${policy.defaultAction ?? 'prompt'}`))\n console.log(chalk.white(` Audit: ${policy.audit === false ? 'disabled' : 'enabled'}`))\n\n printProcessRules(policy)\n printFilesystemRules(policy)\n\n if (policy.network) {\n console.log(chalk.green(`\\n Network: ${policy.network.allow ? 'allowed' : 'denied'}`))\n }\n console.log('')\n}\n\nexport function initPolicy(): void {\n const targetPath = path.join(process.cwd(), '.aries-clamp.json')\n\n if (existsSync(targetPath)) {\n console.error(chalk.yellow('.aries-clamp.json already exists in this directory.'))\n return\n }\n\n const starterPolicy: ClampPolicy = {\n audit: true,\n defaultAction: 'prompt',\n description: 'Starter clamp policy',\n filesystem: {\n write: {\n allow: ['./src/**', './tests/**'],\n deny: ['/etc/**', '/usr/**'],\n },\n },\n name: 'local',\n process: {\n allow: [\n 'node',\n 'npm',\n 'pnpm',\n 'git',\n 'tsc',\n 'ls',\n 'cat',\n 'echo',\n ],\n deny: ['sudo', 'docker'],\n prompt: [\n 'rm',\n 'curl',\n 'wget',\n 'chmod',\n ],\n },\n }\n\n writeFileSync(targetPath, JSON.stringify(starterPolicy, null, 2) + '\\n', 'utf8')\n console.log(chalk.green(`Created ${targetPath}`))\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 { initPolicy } from '../actions/clamp/index.ts'\n\nexport const clampPolicyInitCommand: CommandModule = {\n command: 'init',\n describe: 'Create a starter .aries-clamp.json in the current directory',\n handler: () => {\n initPolicy()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { listPolicies } from '../actions/clamp/index.ts'\n\nexport const clampPolicyListCommand: CommandModule = {\n command: 'list',\n describe: 'List available clamp policies',\n handler: () => {\n listPolicies()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { showPolicy } from '../actions/clamp/index.ts'\n\nexport const clampPolicyShowCommand: CommandModule = {\n command: 'show <name>',\n describe: 'Show details of a clamp policy',\n builder: yargs =>\n yargs.positional('name', {\n demandOption: true,\n describe: 'Policy name or file path',\n type: 'string',\n }),\n handler: (argv) => {\n showPolicy(argv.name as string)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { clampPolicyInitCommand } from './clampPolicyInitCommand.ts'\nimport { clampPolicyListCommand } from './clampPolicyListCommand.ts'\nimport { clampPolicyShowCommand } from './clampPolicyShowCommand.ts'\n\nexport const clampPolicyCommand: CommandModule = {\n command: 'policy',\n describe: 'Manage clamp sandbox policies',\n builder: yargs =>\n yargs\n .command(clampPolicyListCommand)\n .command(clampPolicyShowCommand)\n .command(clampPolicyInitCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\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","import type { CommandModule } from 'yargs'\n\nimport { clampPolicyCommand } from './clampPolicyCommand.ts'\nimport { clampRunCommand } from './clampRunCommand.ts'\n\nexport const clampCommand: CommandModule = {\n command: 'clamp',\n describe: 'Run commands inside a permission-controlled sandbox',\n builder: yargs =>\n yargs\n .command(clampRunCommand)\n .command(clampPolicyCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","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","import type { DatalakeRegion, DatalakeTier } from '@xylabs/aries-datalake-core'\nimport { DATALAKE_REGIONS, DATALAKE_TIERS } from '@xylabs/aries-datalake-core'\nimport type { CommandModule } from 'yargs'\n\nimport { createDatalake } from '../actions/datalake/index.ts'\n\nexport const datalakeCreateCommand: CommandModule = {\n command: 'create <name>',\n describe: 'Provision a new datalake',\n builder: yargs =>\n yargs\n .positional('name', {\n type: 'string',\n describe: 'Human-friendly name (unique per owner)',\n demandOption: true,\n })\n .option('tier', {\n alias: 't',\n type: 'string',\n choices: DATALAKE_TIERS,\n default: 'small',\n describe: 'Service tier',\n })\n .option('size', {\n alias: 's',\n type: 'string',\n describe: 'Capacity (e.g. 10GB, 100GB, 1TB)',\n })\n .option('iops', {\n type: 'number',\n describe: 'Provisioned IOPS target',\n })\n .option('region', {\n alias: 'r',\n type: 'string',\n choices: DATALAKE_REGIONS,\n describe: 'Deployment region',\n })\n .option('retention-days', {\n type: 'number',\n describe: 'Retention in days (omit for tier default)',\n })\n .option('verify-hashes', {\n type: 'boolean',\n default: false,\n describe: 'Reject inserts whose $hash does not match the content digest',\n })\n .option('rate-auth-per-minute', {\n type: 'number',\n describe: 'Override: authenticated requests per minute',\n })\n .option('rate-anon-per-minute', {\n type: 'number',\n describe: 'Override: anonymous requests per minute',\n })\n .option('rate-burst-factor', {\n type: 'number',\n describe: 'Override: rate-limit burst factor (1 = no burst)',\n }),\n handler: async (argv) => {\n await createDatalake({\n name: argv.name as string,\n tier: argv.tier as DatalakeTier,\n size: argv.size as string | undefined,\n iops: argv.iops as number | undefined,\n region: argv.region as DatalakeRegion | undefined,\n retentionDays: argv['retention-days'] as number | undefined,\n verifyHashes: argv['verify-hashes'] as boolean,\n rateAuthPerMinute: argv['rate-auth-per-minute'] as number | undefined,\n rateAnonPerMinute: argv['rate-anon-per-minute'] as number | undefined,\n rateBurstFactor: argv['rate-burst-factor'] as number | undefined,\n })\n },\n}\n","import { createDatalakeClient } from '@xylabs/aries-datalake-client'\nimport type {\n DatalakeConfig, DatalakeRegion, DatalakeTier, RateLimitOverrides,\n} from '@xylabs/aries-datalake-core'\nimport chalk from 'chalk'\n\nimport { printDatalakeDetail } from './formatters.ts'\nimport { parseSize } from './parseSize.ts'\n\nexport interface CreateDatalakeOptions {\n name: string\n tier: DatalakeTier\n size?: string\n iops?: number\n region?: DatalakeRegion\n retentionDays?: number\n verifyHashes?: boolean\n rateAuthPerMinute?: number\n rateAnonPerMinute?: number\n rateBurstFactor?: number\n}\n\nfunction buildRateLimits(options: CreateDatalakeOptions): RateLimitOverrides | undefined {\n if (\n options.rateAuthPerMinute === undefined\n && options.rateAnonPerMinute === undefined\n && options.rateBurstFactor === undefined\n ) return undefined\n return {\n authenticatedPerMinute: options.rateAuthPerMinute,\n anonymousPerMinute: options.rateAnonPerMinute,\n burstFactor: options.rateBurstFactor,\n }\n}\n\nexport async function createDatalake(options: CreateDatalakeOptions): Promise<void> {\n const client = createDatalakeClient()\n const config: DatalakeConfig = {\n tier: options.tier,\n sizeBytes: options.size === undefined ? undefined : parseSize(options.size),\n iops: options.iops,\n region: options.region,\n retentionDays: options.retentionDays,\n verifyHashes: options.verifyHashes,\n rateLimits: buildRateLimits(options),\n }\n\n console.log(chalk.gray(`provisioning ${options.name} (tier=${options.tier})...`))\n const descriptor = await client.create({ name: options.name, config })\n console.log(chalk.green(`created ${descriptor.name} (${descriptor.id})`))\n printDatalakeDetail(descriptor)\n}\n","import type {\n DatalakeDescriptor, DatalakeStatus, DatalakeUsage, RateLimitOverrides,\n} from '@xylabs/aries-datalake-core'\nimport chalk from 'chalk'\n\nconst STATUS_COLORS: Record<DatalakeStatus, (s: string) => string> = {\n pending: chalk.gray,\n provisioning: chalk.yellow,\n ready: chalk.green,\n resizing: chalk.yellow,\n deprovisioning: chalk.yellow,\n deleted: chalk.gray,\n error: chalk.red,\n}\n\nexport function formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 ** 2) return `${(bytes / 1024).toFixed(1)} KB`\n if (bytes < 1024 ** 3) return `${(bytes / 1024 ** 2).toFixed(1)} MB`\n if (bytes < 1024 ** 4) return `${(bytes / 1024 ** 3).toFixed(1)} GB`\n return `${(bytes / 1024 ** 4).toFixed(1)} TB`\n}\n\nexport function formatStatus(status: DatalakeStatus): string {\n const colorize = STATUS_COLORS[status] ?? chalk.white\n return colorize(status)\n}\n\nexport function printDatalakeRow(datalake: DatalakeDescriptor): void {\n const size = datalake.config.sizeBytes ? formatBytes(datalake.config.sizeBytes) : '—'\n const name = chalk.white(datalake.name.padEnd(20))\n const tier = chalk.cyan(datalake.config.tier.padEnd(8))\n const region = chalk.gray((datalake.config.region ?? '—').padEnd(12))\n const status = formatStatus(datalake.status).padEnd(14)\n console.log(` ${name} ${tier} ${region} ${size.padStart(8)} ${status}`)\n}\n\nfunction printRateLimits(limits: RateLimitOverrides): void {\n const parts: string[] = []\n if (limits.authenticatedPerMinute !== undefined) parts.push(`auth=${limits.authenticatedPerMinute}/min`)\n if (limits.anonymousPerMinute !== undefined) parts.push(`anon=${limits.anonymousPerMinute}/min`)\n if (limits.burstFactor !== undefined) parts.push(`burst=${limits.burstFactor}x`)\n if (parts.length > 0) {\n console.log(` ${chalk.gray('limits:')} ${parts.join(' ')}`)\n }\n}\n\nfunction printUsage(usage: DatalakeUsage): void {\n console.log()\n console.log(chalk.cyan(' usage'))\n console.log(` ${chalk.gray('payloads:')} ${usage.payloadCount}`)\n console.log(` ${chalk.gray('stored:')} ${formatBytes(usage.bytesStored)} / ${formatBytes(usage.bytesStoredLimit)}`)\n console.log(` ${chalk.gray('reads 24h:')} ${usage.readsLast24h}`)\n console.log(` ${chalk.gray('writes 24h:')} ${usage.writesLast24h}`)\n}\n\nfunction printAcl(acl: DatalakeDescriptor['acl']): void {\n if (acl.length === 0) return\n console.log()\n console.log(chalk.cyan(' access'))\n for (const entry of acl) {\n const principal = entry.principal === 'public' ? chalk.yellow('public') : entry.principal\n console.log(` ${principal.padEnd(24)} ${chalk.magenta(entry.role)} ${chalk.gray(entry.grantedAt)}`)\n }\n}\n\nexport function printDatalakeDetail(datalake: DatalakeDescriptor): void {\n console.log(chalk.cyan(`\\n${datalake.name}`))\n console.log(` ${chalk.gray('id:')} ${datalake.id}`)\n console.log(` ${chalk.gray('status:')} ${formatStatus(datalake.status)}`)\n if (datalake.url) {\n console.log(` ${chalk.gray('url:')} ${datalake.url}`)\n }\n console.log(` ${chalk.gray('owner:')} ${datalake.ownerId}`)\n console.log(` ${chalk.gray('tier:')} ${datalake.config.tier}`)\n console.log(` ${chalk.gray('region:')} ${datalake.config.region ?? '—'}`)\n console.log(` ${chalk.gray('size:')} ${datalake.config.sizeBytes ? formatBytes(datalake.config.sizeBytes) : '—'}`)\n console.log(` ${chalk.gray('iops:')} ${datalake.config.iops ?? '—'}`)\n console.log(` ${chalk.gray('retention:')} ${datalake.config.retentionDays ?? 'forever'}`)\n if (datalake.config.verifyHashes) {\n console.log(` ${chalk.gray('verify:')} ${chalk.green('hashes enforced')}`)\n }\n if (datalake.config.rateLimits) printRateLimits(datalake.config.rateLimits)\n console.log(` ${chalk.gray('created:')} ${datalake.createdAt}`)\n console.log(` ${chalk.gray('updated:')} ${datalake.updatedAt}`)\n if (datalake.usage) printUsage(datalake.usage)\n printAcl(datalake.acl)\n if (datalake.errorMessage) {\n console.log()\n console.log(` ${chalk.red('error:')} ${datalake.errorMessage}`)\n }\n}\n","const SIZE_UNITS: Record<string, number> = {\n b: 1,\n kb: 1024,\n mb: 1024 ** 2,\n gb: 1024 ** 3,\n tb: 1024 ** 4,\n}\n\n/**\n * Parse human-readable sizes like \"10GB\", \"500MB\", \"1tb\" into bytes.\n * Throws on unrecognized input so the CLI surfaces a clear error.\n */\nexport function parseSize(input: string): number {\n const match = /^(\\d+(?:\\.\\d+)?)\\s*([a-zA-Z]+)?$/.exec(input.trim())\n if (!match) throw new Error(`Invalid size: ${input}`)\n const value = Number(match[1])\n const unitRaw = (match[2] ?? 'b').toLowerCase()\n const unit = SIZE_UNITS[unitRaw]\n if (unit === undefined) throw new Error(`Unknown size unit: ${match[2]}`)\n return Math.round(value * unit)\n}\n","import type { DatalakeUsageReport } from '@xylabs/aries-datalake-client'\nimport { createDatalakeClient } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nimport { printDatalakeDetail } from './formatters.ts'\nimport { mintAndConnect } from './payloads/mintAndConnect.ts'\nimport { resolveTarget } from './resolveTarget.ts'\n\nexport async function describeDatalake(idOrName: string | undefined): Promise<void> {\n const client = createDatalakeClient()\n const target = resolveTarget(idOrName)\n const descriptor = await client.describe(target)\n printDatalakeDetail(descriptor)\n\n if (descriptor.status !== 'ready') return\n\n // Best-effort live-quota probe against the data plane. Requires a viewer\n // token from the control plane; any failure is surfaced as a note, not\n // an error — `describe` still works without the data plane reachable.\n try {\n const connection = await mintAndConnect({ idOrName: target, role: 'viewer' })\n const usage = await connection.client.usage()\n printLiveUsage(usage)\n } catch (error) {\n console.log()\n console.log(chalk.gray(\n ` (live quota unavailable: ${error instanceof Error ? error.message : String(error)})`,\n ))\n }\n}\n\nfunction printLiveUsage(usage: DatalakeUsageReport): void {\n console.log()\n console.log(chalk.cyan(' live'))\n console.log(` ${chalk.gray('payloads:')} ${usage.payloadCount}`)\n const limits = usage.rateLimits\n if (limits?.authenticated) {\n const { remaining, limit } = limits.authenticated\n console.log(` ${chalk.gray('auth quota:')} ${remaining}/${limit}`)\n }\n if (limits?.anonymous) {\n const { remaining, limit } = limits.anonymous\n console.log(` ${chalk.gray('anon quota:')} ${remaining}/${limit}`)\n }\n}\n","import type { PayloadsClient } from '@xylabs/aries-datalake-client'\nimport { createDatalakeClient, RestPayloadsClient } from '@xylabs/aries-datalake-client'\nimport type { DatalakeRole } from '@xylabs/aries-datalake-core'\nimport { XyoPayloadsClient } from '@xylabs/aries-datalake-xl1-adapter'\n\nimport { resolveTarget } from '../resolveTarget.ts'\n\nexport interface Connection {\n client: PayloadsClient\n datalakeName: string\n datalakeId: string\n url: string\n transport: 'native' | 'xl1-sdk'\n}\n\nexport interface MintAndConnectOptions {\n idOrName?: string\n role: DatalakeRole\n ttlSeconds?: number\n /**\n * When `true`, use the real `@xyo-network/xl1-protocol-sdk`\n * `RestDataLakeRunner` / `RestDataLakeViewer` for insert and get,\n * proving byte-level wire compatibility. Other methods fall back to the\n * native `RestPayloadsClient` since the XL1 SDK doesn't implement them.\n */\n useXl1Sdk?: boolean\n}\n\n/**\n * Resolves the target datalake, mints a scoped token via the control plane,\n * and returns a data-plane client wired with that token. Centralizes what\n * every payload command has to do before it can talk to the data plane.\n */\nexport async function mintAndConnect(options: MintAndConnectOptions): Promise<Connection> {\n const controlClient = createDatalakeClient()\n const target = resolveTarget(options.idOrName)\n const descriptor = await controlClient.describe(target)\n if (!descriptor.url) {\n throw new Error(`Datalake ${descriptor.name} has no URL yet (status=${descriptor.status})`)\n }\n const token = await controlClient.mintToken({\n datalakeId: descriptor.id,\n role: options.role,\n ttlSeconds: options.ttlSeconds ?? 3600,\n })\n const clientOptions = {\n baseUrl: token.url,\n datalakeId: descriptor.id,\n authToken: token.token,\n }\n return {\n client: options.useXl1Sdk\n ? new XyoPayloadsClient(clientOptions)\n : new RestPayloadsClient(clientOptions),\n datalakeName: descriptor.name,\n datalakeId: descriptor.id,\n url: token.url,\n transport: options.useXl1Sdk ? 'xl1-sdk' : 'native',\n }\n}\n","import { getDefaultDatalake } from '@xylabs/aries-datalake-client'\n\n/**\n * Resolves the target datalake name/id for commands that take an optional\n * argument. Falls back to the one set via `aries datalake use`.\n */\nexport function resolveTarget(argValue: string | undefined): string {\n const target = argValue ?? getDefaultDatalake()\n if (!target) {\n throw new Error(\n 'No datalake specified and no default set. '\n + 'Pass <name> or run `aries datalake use <name>`.',\n )\n }\n return target\n}\n","import { createDatalakeClient } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nimport { resolveTarget } from './resolveTarget.ts'\n\nexport interface DestroyDatalakeOptions {\n idOrName?: string\n force?: boolean\n}\n\nexport async function destroyDatalake(options: DestroyDatalakeOptions): Promise<void> {\n const client = createDatalakeClient()\n const target = resolveTarget(options.idOrName)\n\n if (!options.force) {\n console.log(chalk.yellow(\n `Refusing to destroy ${target} without --force. `\n + 'This operation permanently deletes the datalake and all its payloads.',\n ))\n process.exitCode = 1\n return\n }\n\n await client.destroy(target)\n console.log(chalk.green(`destroyed ${target}`))\n}\n","import { createDatalakeClient } from '@xylabs/aries-datalake-client'\nimport type { DatalakePrincipal, DatalakeRole } from '@xylabs/aries-datalake-core'\nimport chalk from 'chalk'\n\nimport { printDatalakeDetail } from './formatters.ts'\nimport { resolveTarget } from './resolveTarget.ts'\n\nexport interface GrantAccessOptions {\n idOrName?: string\n principal: DatalakePrincipal\n role: DatalakeRole\n confirmPublic?: boolean\n}\n\nexport async function grantAccess(options: GrantAccessOptions): Promise<void> {\n const client = createDatalakeClient()\n const target = resolveTarget(options.idOrName)\n\n if (options.principal === 'public' && options.role === 'runner' && !options.confirmPublic) {\n console.log(chalk.yellow(\n 'Granting `public runner` makes anonymous writes possible. '\n + 'Re-run with --confirm-public to proceed.',\n ))\n process.exitCode = 1\n return\n }\n\n const descriptor = await client.describe(target)\n const updated = await client.grant({\n datalakeId: descriptor.id,\n principal: options.principal,\n role: options.role,\n })\n console.log(chalk.green(`granted ${options.role} to ${options.principal} on ${updated.name}`))\n printDatalakeDetail(updated)\n}\n","import { createDatalakeClient } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nimport { printDatalakeRow } from './formatters.ts'\n\nexport async function listDatalakes(): Promise<void> {\n const client = createDatalakeClient()\n const datalakes = await client.list()\n\n if (datalakes.length === 0) {\n console.log(chalk.yellow('No datalakes yet. Create one with `aries datalake create <name>`.'))\n return\n }\n\n console.log(\n chalk.gray(' ')\n + chalk.gray('name'.padEnd(20))\n + ' '\n + chalk.gray('tier'.padEnd(8))\n + ' '\n + chalk.gray('region'.padEnd(12))\n + ' '\n + chalk.gray(' size')\n + ' '\n + chalk.gray('status'),\n )\n for (const datalake of datalakes) {\n printDatalakeRow(datalake)\n }\n}\n","import { saveCredentials } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nexport interface LoginOptions {\n baseUrl?: string\n token?: string\n}\n\n/**\n * P0 stub: accepts a pre-issued token + base URL and writes credentials to\n * disk. The real OAuth device-flow ships in P1 alongside the control plane.\n */\nexport async function login(options: LoginOptions): Promise<void> {\n const baseUrl = options.baseUrl ?? process.env.ARIES_DATALAKE_API\n const token = options.token ?? process.env.ARIES_DATALAKE_TOKEN\n\n if (!baseUrl || !token) {\n console.log(chalk.yellow(\n 'P0 login requires --base-url and --token (or ARIES_DATALAKE_API + ARIES_DATALAKE_TOKEN). '\n + 'OAuth device-flow lands in P1.',\n ))\n process.exitCode = 1\n return\n }\n\n saveCredentials({ baseUrl, authToken: token })\n console.log(chalk.green(`credentials saved for ${baseUrl}`))\n}\n","import { clearCredentials } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nexport async function logout(): Promise<void> {\n clearCredentials()\n console.log(chalk.green('signed out'))\n}\n","import { createDatalakeClient } from '@xylabs/aries-datalake-client'\nimport type { DatalakeRole } from '@xylabs/aries-datalake-core'\nimport chalk from 'chalk'\n\nimport { resolveTarget } from './resolveTarget.ts'\n\nexport interface MintTokenOptions {\n idOrName?: string\n role: DatalakeRole\n ttlSeconds?: number\n}\n\nexport async function mintToken(options: MintTokenOptions): Promise<void> {\n const client = createDatalakeClient()\n const target = resolveTarget(options.idOrName)\n const descriptor = await client.describe(target)\n const token = await client.mintToken({\n datalakeId: descriptor.id,\n role: options.role,\n ttlSeconds: options.ttlSeconds,\n })\n\n console.log(chalk.cyan('datalake token'))\n console.log(` ${chalk.gray('url:')} ${token.url}`)\n console.log(` ${chalk.gray('role:')} ${token.role}`)\n console.log(` ${chalk.gray('exp:')} ${token.expiresAt}`)\n console.log()\n console.log(token.token)\n}\n","import { createDatalakeClient } from '@xylabs/aries-datalake-client'\nimport type { DatalakePrincipal } from '@xylabs/aries-datalake-core'\nimport chalk from 'chalk'\n\nimport { printDatalakeDetail } from './formatters.ts'\nimport { resolveTarget } from './resolveTarget.ts'\n\nexport interface RevokeAccessOptions {\n idOrName?: string\n principal: DatalakePrincipal\n}\n\nexport async function revokeAccess(options: RevokeAccessOptions): Promise<void> {\n const client = createDatalakeClient()\n const target = resolveTarget(options.idOrName)\n const descriptor = await client.describe(target)\n const updated = await client.revoke({\n datalakeId: descriptor.id,\n principal: options.principal,\n })\n console.log(chalk.green(`revoked access for ${options.principal} on ${updated.name}`))\n printDatalakeDetail(updated)\n}\n","import {\n clearDefaultDatalake, createDatalakeClient, setDefaultDatalake,\n} from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nexport async function useDatalake(name: string | undefined): Promise<void> {\n if (!name) {\n clearDefaultDatalake()\n console.log(chalk.green('cleared default datalake'))\n return\n }\n\n const client = createDatalakeClient()\n const descriptor = await client.describe(name)\n setDefaultDatalake(descriptor.name, descriptor.id)\n console.log(chalk.green(`default datalake set to ${descriptor.name} (${descriptor.id})`))\n}\n","import type { CommandModule } from 'yargs'\n\nimport { describeDatalake } from '../actions/datalake/index.ts'\n\nexport const datalakeDescribeCommand: CommandModule = {\n command: 'describe [name]',\n describe: 'Show details for a datalake (falls back to the default)',\n builder: yargs =>\n yargs.positional('name', {\n type: 'string',\n describe: 'Datalake name or id',\n }),\n handler: async (argv) => {\n await describeDatalake(argv.name as string | undefined)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { destroyDatalake } from '../actions/datalake/index.ts'\n\nexport const datalakeDestroyCommand: CommandModule = {\n command: 'destroy [name]',\n describe: 'Permanently delete a datalake',\n builder: yargs =>\n yargs\n .positional('name', {\n type: 'string',\n describe: 'Datalake name or id',\n })\n .option('force', {\n alias: 'f',\n type: 'boolean',\n default: false,\n describe: 'Required confirmation flag',\n }),\n handler: async (argv) => {\n await destroyDatalake({\n idOrName: argv.name as string | undefined,\n force: argv.force as boolean,\n })\n },\n}\n","import { clearCredentials, loadCredentials } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nimport {\n clearDevState, isProcessAlive, readDevState,\n} from './state.ts'\n\n/**\n * Stops the dev server spawned by `upDevServer`. Sends SIGTERM, waits up to\n * `gracePeriodMs` for a clean exit, then SIGKILLs if the process is still\n * around. Clears credentials only when they still point at the dev server —\n * we never want to stomp a user's real sign-in.\n */\nexport interface DownDevServerOptions {\n gracePeriodMs?: number\n}\n\nconst DEFAULT_GRACE_MS = 2000\nconst POLL_MS = 50\n\nexport async function downDevServer(options: DownDevServerOptions = {}): Promise<void> {\n const state = readDevState()\n if (!state) {\n console.log(chalk.yellow('dev server is not running'))\n return\n }\n const graceMs = options.gracePeriodMs ?? DEFAULT_GRACE_MS\n\n if (!isProcessAlive(state.pid)) {\n cleanup(state.controlUrl)\n console.log(chalk.green(`dev server pid ${state.pid} was already stopped — cleaned up state`))\n return\n }\n\n try {\n process.kill(state.pid, 'SIGTERM')\n } catch (error) {\n const code = (error as NodeJS.ErrnoException).code\n if (code !== 'ESRCH') throw error\n }\n\n const deadline = Date.now() + graceMs\n while (Date.now() < deadline && isProcessAlive(state.pid)) {\n await delay(POLL_MS)\n }\n if (isProcessAlive(state.pid)) {\n try {\n process.kill(state.pid, 'SIGKILL')\n } catch {\n // best effort\n }\n }\n\n cleanup(state.controlUrl)\n console.log(chalk.green(`dev server pid ${state.pid} stopped`))\n}\n\nfunction cleanup(controlUrl: string): void {\n const credentials = loadCredentials()\n if (credentials?.baseUrl === controlUrl) {\n clearCredentials()\n }\n clearDevState()\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n","import {\n existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync,\n} from 'node:fs'\n\nimport {\n getDevDir, getDevPidPath, getDevStatePath,\n} from './paths.ts'\n\n/**\n * On-disk bookkeeping for a running dev server. Lives in `~/.aries/dev/` so\n * it survives across CLI invocations and can be queried by `dev status` /\n * `dev logs` / `dev down`.\n */\nexport interface DevState {\n pid: number\n controlUrl: string\n planeUrl: string\n controlPort: number\n planePort: number\n /** User id the dev auth token resolves to on the control plane. */\n userId: string\n /** Bearer token accepted by the dev control plane (written to credentials). */\n authToken: string\n /** Secret the dev control plane HMAC-signs data-plane JWTs with. */\n signingSecret: string\n /** ISO-8601 startup time. */\n startedAt: string\n}\n\nexport function readDevState(): DevState | undefined {\n const filePath = getDevStatePath()\n if (!existsSync(filePath)) return undefined\n try {\n return JSON.parse(readFileSync(filePath, 'utf8')) as DevState\n } catch {\n return undefined\n }\n}\n\nexport function writeDevState(state: DevState): void {\n const dir = getDevDir()\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true })\n writeFileSync(getDevStatePath(), JSON.stringify(state, undefined, 2), 'utf8')\n writeFileSync(getDevPidPath(), String(state.pid), 'utf8')\n}\n\nexport function clearDevState(): void {\n for (const filePath of [getDevStatePath(), getDevPidPath()]) {\n if (existsSync(filePath)) unlinkSync(filePath)\n }\n}\n\n/**\n * Returns true iff the pid is still a live process. `kill(pid, 0)` throws\n * ESRCH when the process doesn't exist and EPERM when it does but we can't\n * signal it — both answer the question we're asking.\n */\nexport function isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0)\n return true\n } catch (error) {\n const code = (error as NodeJS.ErrnoException).code\n return code === 'EPERM'\n }\n}\n","import { spawn } from 'node:child_process'\nimport { existsSync, readFileSync } from 'node:fs'\n\nimport chalk from 'chalk'\n\nimport { getDevLogPath } from './paths.ts'\n\nexport interface LogsDevServerOptions {\n follow?: boolean\n /** Number of tail lines to print when not following. */\n lines?: number\n}\n\n/**\n * Streams or dumps the dev server log file. Uses `tail -f` for the follow\n * case so the output stays bounded; for one-shot we read the file and print\n * the last `lines` lines ourselves (portable, no shell subprocess).\n */\nexport async function logsDevServer(options: LogsDevServerOptions = {}): Promise<void> {\n const logPath = getDevLogPath()\n if (!existsSync(logPath)) {\n console.log(chalk.yellow('no dev server log file yet'))\n return\n }\n\n if (options.follow) {\n const child = spawn('tail', ['-n', String(options.lines ?? 50), '-f', logPath], { stdio: 'inherit' })\n await new Promise<void>((resolve) => {\n child.on('exit', (code) => {\n process.exitCode = code ?? 0\n resolve()\n })\n })\n return\n }\n\n const lines = readFileSync(logPath, 'utf8').split('\\n')\n const tail = lines.slice(-(options.lines ?? 50))\n process.stdout.write(tail.join('\\n'))\n if (!tail.at(-1)?.endsWith('\\n')) process.stdout.write('\\n')\n}\n","import { existsSync, rmSync } from 'node:fs'\n\nimport chalk from 'chalk'\n\nimport { downDevServer } from './downDevServer.ts'\nimport { getDevDir } from './paths.ts'\n\n/**\n * Stops the dev server and deletes all dev state. Useful after a crashed\n * server leaves stale sockets or a dirty log file.\n */\nexport async function resetDevServer(): Promise<void> {\n await downDevServer()\n const dir = getDevDir()\n if (!existsSync(dir)) {\n console.log(chalk.green('nothing to reset'))\n return\n }\n rmSync(dir, { recursive: true, force: true })\n console.log(chalk.green(`reset ${dir}`))\n}\n","import chalk from 'chalk'\n\nimport { getDevLogPath } from './paths.ts'\nimport { isProcessAlive, readDevState } from './state.ts'\n\nexport async function statusDevServer(): Promise<void> {\n const state = readDevState()\n if (!state) {\n console.log(chalk.yellow('dev server not running'))\n process.exitCode = 3\n return\n }\n\n const alive = isProcessAlive(state.pid)\n const healthy = alive ? await pingHealth(state.controlUrl) : false\n const uptime = formatUptime(state.startedAt)\n\n console.log(chalk.cyan('dev server status'))\n console.log(` ${chalk.gray('state:')} ${statusLabel(alive, healthy)}`)\n console.log(` ${chalk.gray('pid:')} ${state.pid}`)\n console.log(` ${chalk.gray('control:')} ${state.controlUrl}`)\n console.log(` ${chalk.gray('data:')} ${state.planeUrl}`)\n console.log(` ${chalk.gray('user:')} ${state.userId}`)\n console.log(` ${chalk.gray('started:')} ${state.startedAt}${uptime ? ` (${uptime})` : ''}`)\n console.log(` ${chalk.gray('log:')} ${getDevLogPath()}`)\n\n if (alive && !healthy) {\n process.exitCode = 2\n } else if (!alive) {\n process.exitCode = 3\n }\n}\n\nfunction statusLabel(alive: boolean, healthy: boolean): string {\n if (alive && healthy) return chalk.green('running + healthy')\n if (alive) return chalk.yellow('running but unresponsive')\n return chalk.red('stale state (process gone)')\n}\n\nasync function pingHealth(controlUrl: string): Promise<boolean> {\n try {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), 1000)\n const response = await fetch(`${controlUrl}/v1/health`, { signal: controller.signal })\n clearTimeout(timeout)\n return response.ok\n } catch {\n return false\n }\n}\n\nfunction formatUptime(startedAt: string): string {\n const started = new Date(startedAt).getTime()\n if (Number.isNaN(started)) return ''\n const seconds = Math.max(0, Math.floor((Date.now() - started) / 1000))\n if (seconds < 60) return `${seconds}s`\n const minutes = Math.floor(seconds / 60)\n if (minutes < 60) return `${minutes}m ${seconds % 60}s`\n const hours = Math.floor(minutes / 60)\n return `${hours}h ${minutes % 60}m`\n}\n","import type { ChildProcess } from 'node:child_process'\nimport { spawn } from 'node:child_process'\nimport { randomBytes } from 'node:crypto'\nimport {\n existsSync, mkdirSync, openSync,\n} from 'node:fs'\nimport path from 'node:path'\n\nimport { saveCredentials } from '@xylabs/aries-datalake-client'\nimport chalk from 'chalk'\n\nimport { getDevDir, getDevLogPath } from './paths.ts'\nimport { resolveServerBin } from './resolveServerBin.ts'\nimport {\n clearDevState, type DevState, isProcessAlive, readDevState, writeDevState,\n} from './state.ts'\nimport { waitForHealth } from './waitForHealth.ts'\n\nexport interface UpDevServerOptions {\n controlPort?: number\n planePort?: number\n /** Seconds to wait for the dev server to become healthy. Default 10. */\n timeoutSeconds?: number\n /** Override the bearer token. Default: random hex. */\n authToken?: string\n /** Override the HMAC signing secret. Default: random hex. */\n signingSecret?: string\n /** Override the user id the dev token resolves to. Default: 'dev-user'. */\n userId?: string\n /**\n * Persist the datalake + payload stores to `<ARIES_HOME>/dev/store/` so\n * state survives a `dev down` + `dev up` cycle. Default: false.\n */\n persist?: boolean\n /**\n * Enable the data-plane audit log. When true, every request is appended\n * to `<ARIES_HOME>/dev/audit.log` as JSONL.\n */\n audit?: boolean\n /**\n * Use a rotating directory writer instead of a single file. Files live at\n * `<ARIES_HOME>/dev/audit/audit-YYYY-MM-DD.log`.\n */\n auditRotate?: boolean\n /** Retention window in days when rotation is enabled. */\n auditKeepDays?: number\n}\n\nconst DEFAULT_CONTROL_PORT = 8787\nconst DEFAULT_PLANE_PORT = 8788\nconst DEFAULT_TIMEOUT_SECONDS = 10\n\ninterface ResolvedOptions {\n controlPort: number\n planePort: number\n controlUrl: string\n planeUrl: string\n userId: string\n authToken: string\n signingSecret: string\n timeoutMs: number\n persistDir?: string\n auditLogPath?: string\n auditDir?: string\n auditKeepDays?: number\n}\n\nfunction resolveOptions(options: UpDevServerOptions): ResolvedOptions {\n const controlPort = options.controlPort ?? DEFAULT_CONTROL_PORT\n const planePort = options.planePort ?? DEFAULT_PLANE_PORT\n const rotate = options.auditRotate === true\n return {\n controlPort,\n planePort,\n controlUrl: `http://127.0.0.1:${controlPort}`,\n planeUrl: `http://127.0.0.1:${planePort}`,\n userId: options.userId ?? 'dev-user',\n authToken: options.authToken ?? randomBytes(16).toString('hex'),\n signingSecret: options.signingSecret ?? randomBytes(32).toString('hex'),\n timeoutMs: (options.timeoutSeconds ?? DEFAULT_TIMEOUT_SECONDS) * 1000,\n persistDir: options.persist ? path.join(getDevDir(), 'store') : undefined,\n auditLogPath: options.audit && !rotate ? path.join(getDevDir(), 'audit.log') : undefined,\n auditDir: options.audit && rotate ? path.join(getDevDir(), 'audit') : undefined,\n auditKeepDays: rotate ? options.auditKeepDays : undefined,\n }\n}\n\nfunction spawnDaemon(binPath: string, resolved: ResolvedOptions): ChildProcess {\n const devDir = getDevDir()\n if (!existsSync(devDir)) mkdirSync(devDir, { recursive: true })\n const logFd = openSync(getDevLogPath(), 'a')\n\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n CONTROL_PORT: String(resolved.controlPort),\n PLANE_PORT: String(resolved.planePort),\n HOST: '127.0.0.1',\n DATALAKE_CONTROL_TOKENS: `${resolved.authToken}=${resolved.userId}`,\n TOKEN_SIGNING_SECRET: resolved.signingSecret,\n DATALAKE_ORIGIN_URL: resolved.planeUrl,\n LOG_LEVEL: process.env.LOG_LEVEL ?? 'info',\n }\n if (resolved.persistDir) env.DATALAKE_PERSIST_DIR = resolved.persistDir\n if (resolved.auditLogPath) env.DATALAKE_AUDIT_LOG = resolved.auditLogPath\n if (resolved.auditDir) env.DATALAKE_AUDIT_DIR = resolved.auditDir\n if (resolved.auditKeepDays !== undefined) env.DATALAKE_AUDIT_MAX_AGE_DAYS = String(resolved.auditKeepDays)\n\n const child = spawn(process.execPath, [binPath], {\n detached: true,\n stdio: ['ignore', logFd, logFd],\n env,\n })\n child.unref()\n return child\n}\n\nfunction describeAudit(resolved: ResolvedOptions): string {\n if (resolved.auditDir) {\n return `rotating ${resolved.auditDir}${resolved.auditKeepDays ? ` (keep ${resolved.auditKeepDays}d)` : ''}`\n }\n return resolved.auditLogPath ?? 'disabled'\n}\n\nfunction printReadyBanner(state: DevState, resolved: ResolvedOptions): void {\n console.log(chalk.green('dev server ready'))\n console.log(` ${chalk.gray('control:')} ${state.controlUrl}`)\n console.log(` ${chalk.gray('data:')} ${state.planeUrl}`)\n console.log(` ${chalk.gray('user:')} ${state.userId}`)\n console.log(` ${chalk.gray('log:')} ${getDevLogPath()}`)\n console.log(` ${chalk.gray('store:')} ${resolved.persistDir ? `persisted (${resolved.persistDir})` : 'in-memory'}`)\n console.log(` ${chalk.gray('audit:')} ${describeAudit(resolved)}`)\n console.log(chalk.gray('\\nCLI is configured — try `aries datalake list`'))\n}\n\nexport async function upDevServer(options: UpDevServerOptions = {}): Promise<DevState> {\n const existing = readDevState()\n if (existing && isProcessAlive(existing.pid)) {\n console.log(chalk.yellow(`dev server already running (pid ${existing.pid}) at ${existing.controlUrl}`))\n return existing\n }\n if (existing) clearDevState()\n\n const resolved = resolveOptions(options)\n const child = spawnDaemon(resolveServerBin(), resolved)\n if (!child.pid) throw new Error('Failed to spawn dev server process')\n\n console.log(chalk.gray(`starting dev server (pid ${child.pid})...`))\n const healthy = await waitForHealth(resolved.controlUrl, resolved.timeoutMs)\n if (!healthy) {\n try {\n process.kill(child.pid, 'SIGTERM')\n } catch {\n // best effort\n }\n throw new Error(\n `Dev server did not become healthy within ${resolved.timeoutMs / 1000}s. `\n + `Check logs at ${getDevLogPath()}`,\n )\n }\n\n const state: DevState = {\n pid: child.pid,\n controlUrl: resolved.controlUrl,\n planeUrl: resolved.planeUrl,\n controlPort: resolved.controlPort,\n planePort: resolved.planePort,\n userId: resolved.userId,\n authToken: resolved.authToken,\n signingSecret: resolved.signingSecret,\n startedAt: new Date().toISOString(),\n }\n writeDevState(state)\n saveCredentials({\n baseUrl: resolved.controlUrl, authToken: resolved.authToken, userId: resolved.userId,\n })\n printReadyBanner(state, resolved)\n return state\n}\n","import { existsSync } from 'node:fs'\nimport { createRequire } from 'node:module'\nimport path from 'node:path'\n\n// Static type-only import so `deplint` recognizes the package as a declared\n// dependency. The bin path itself is resolved at runtime via `require.resolve`.\nimport type { BuildPlaneOptions as _KeepAsDep } from '@xylabs/aries-datalake-plane'\n\nconst require = createRequire(import.meta.url)\n\n/**\n * Resolves the absolute path to `aries-datalake-dev` (the plane/control dev\n * server binary) from the installed `@xylabs/aries-datalake-plane` package.\n * Throws with an actionable message if the package isn't available — e.g.\n * when someone installs `@xylabs/aries` standalone without the dev server.\n */\nexport function resolveServerBin(): string {\n let packageJsonPath: string\n try {\n packageJsonPath = require.resolve('@xylabs/aries-datalake-plane/package.json')\n } catch {\n throw new Error(\n '@xylabs/aries-datalake-plane is not installed. '\n + 'Install it as a dev dependency to use `aries datalake dev` locally.',\n )\n }\n const binPath = path.join(path.dirname(packageJsonPath), 'dist', 'bin', 'devServer.mjs')\n if (!existsSync(binPath)) {\n throw new Error(\n `Dev server binary not found at ${binPath}. `\n + 'Run `pnpm xy compile` to build it.',\n )\n }\n return binPath\n}\n","const POLL_INTERVAL_MS = 100\n\n/**\n * Polls `GET <baseUrl>/v1/health` until it returns 200 or the timeout\n * expires. Returns `true` on success, `false` on timeout. Callers should\n * kill the daemon on failure; it never came up.\n */\nexport async function waitForHealth(baseUrl: string, timeoutMs: number): Promise<boolean> {\n const deadline = Date.now() + timeoutMs\n const url = `${baseUrl.replace(/\\/$/, '')}/v1/health`\n while (Date.now() < deadline) {\n try {\n const response = await fetch(url)\n if (response.ok) return true\n } catch {\n // ECONNREFUSED while the listener is still starting — keep polling.\n }\n await delay(POLL_INTERVAL_MS)\n }\n return false\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n","import type { CommandModule } from 'yargs'\n\nimport { downDevServer } from '../actions/datalake/dev/index.ts'\n\nexport const datalakeDevDownCommand: CommandModule = {\n command: 'down',\n describe: 'Stop the local dev server (if running) and clear its credentials',\n handler: async () => {\n await downDevServer()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { logsDevServer } from '../actions/datalake/dev/index.ts'\n\nexport const datalakeDevLogsCommand: CommandModule = {\n command: 'logs',\n describe: 'Print recent dev server log output',\n builder: yargs =>\n yargs\n .option('follow', {\n alias: 'f',\n type: 'boolean',\n default: false,\n describe: 'Stream new lines as they arrive',\n })\n .option('lines', {\n alias: 'n',\n type: 'number',\n default: 50,\n describe: 'Number of tail lines to show',\n }),\n handler: async (argv) => {\n await logsDevServer({\n follow: argv.follow as boolean,\n lines: argv.lines as number,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { resetDevServer } from '../actions/datalake/dev/index.ts'\n\nexport const datalakeDevResetCommand: CommandModule = {\n command: 'reset',\n describe: 'Stop the dev server and wipe all its local state',\n handler: async () => {\n await resetDevServer()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { statusDevServer } from '../actions/datalake/dev/index.ts'\n\nexport const datalakeDevStatusCommand: CommandModule = {\n command: 'status',\n describe: 'Report whether the local dev server is running and healthy',\n handler: async () => {\n await statusDevServer()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { upDevServer } from '../actions/datalake/dev/index.ts'\n\nexport const datalakeDevUpCommand: CommandModule = {\n command: 'up',\n describe: 'Start the local control + data plane dev server and wire the CLI to it',\n builder: yargs =>\n yargs\n .option('control-port', {\n type: 'number',\n default: 8787,\n describe: 'Control-plane port',\n })\n .option('plane-port', {\n type: 'number',\n default: 8788,\n describe: 'Data-plane port',\n })\n .option('timeout', {\n type: 'number',\n default: 10,\n describe: 'Seconds to wait for health',\n })\n .option('persist', {\n type: 'boolean',\n default: false,\n describe: 'Persist store state to disk so it survives restarts',\n })\n .option('audit', {\n type: 'boolean',\n default: false,\n describe: 'Write a JSONL audit log of every data-plane request',\n })\n .option('audit-rotate', {\n type: 'boolean',\n default: false,\n describe: 'Rotate the audit log daily (writes to <home>/dev/audit/)',\n })\n .option('audit-keep-days', {\n type: 'number',\n describe: 'Prune rotated audit files older than this many days',\n }),\n handler: async (argv) => {\n await upDevServer({\n controlPort: argv['control-port'] as number,\n planePort: argv['plane-port'] as number,\n timeoutSeconds: argv.timeout as number,\n persist: argv.persist as boolean,\n audit: argv.audit as boolean,\n auditRotate: argv['audit-rotate'] as boolean,\n auditKeepDays: argv['audit-keep-days'] as number | undefined,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { datalakeDevDownCommand } from './datalakeDevDownCommand.ts'\nimport { datalakeDevLogsCommand } from './datalakeDevLogsCommand.ts'\nimport { datalakeDevResetCommand } from './datalakeDevResetCommand.ts'\nimport { datalakeDevStatusCommand } from './datalakeDevStatusCommand.ts'\nimport { datalakeDevUpCommand } from './datalakeDevUpCommand.ts'\n\nexport const datalakeDevCommand: CommandModule = {\n command: 'dev',\n describe: 'Run a local datalake control + data plane for development & testing',\n builder: yargs =>\n yargs\n .command(datalakeDevUpCommand)\n .command(datalakeDevDownCommand)\n .command(datalakeDevStatusCommand)\n .command(datalakeDevLogsCommand)\n .command(datalakeDevResetCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","import { DatalakeApiError } from '@xylabs/aries-datalake-core'\nimport chalk from 'chalk'\n\nimport { mintAndConnect } from './mintAndConnect.ts'\n\nexport interface FetchPayloadOptions {\n idOrName?: string\n hash: string\n /** If true, print raw JSON without chalk-formatted header. */\n raw?: boolean\n /** If true, fetch via the real XL1 SDK's `RestDataLakeViewer`. */\n xl1Sdk?: boolean\n}\n\nexport async function fetchPayload(options: FetchPayloadOptions): Promise<void> {\n const connection = await mintAndConnect({\n idOrName: options.idOrName, role: 'viewer', useXl1Sdk: options.xl1Sdk,\n })\n try {\n const payload = await connection.client.get(options.hash)\n if (options.raw) {\n process.stdout.write(`${JSON.stringify(payload)}\\n`)\n return\n }\n console.log(chalk.cyan(`${connection.datalakeName} / ${options.hash}`))\n console.log(JSON.stringify(payload, undefined, 2))\n } catch (error) {\n if (error instanceof DatalakeApiError && error.code === 'not_found') {\n console.log(chalk.yellow(`payload not found: ${options.hash}`))\n process.exitCode = 3\n return\n }\n throw error\n }\n}\n","import { readFileSync } from 'node:fs'\nimport path from 'node:path'\n\nimport type { Payload } from '@xylabs/aries-datalake-core'\n\n/**\n * Parses a file into an array of payloads. Supports two formats:\n *\n * - `.json`: must be either a top-level array of payloads, or `{ payloads: [...] }`\n * - `.jsonl` / `.ndjson`: one JSON object per line\n *\n * Each payload must have `schema` and `$hash` strings. Invalid rows throw\n * with the line number for JSONL or the array index for JSON.\n */\nexport function parsePayloadsFile(filePath: string): Payload[] {\n const absolute = path.resolve(filePath)\n const raw = readFileSync(absolute, 'utf8')\n const ext = path.extname(absolute).toLowerCase()\n\n if (ext === '.jsonl' || ext === '.ndjson') {\n return parseJsonl(raw)\n }\n if (ext === '.json') {\n return parseJson(raw)\n }\n\n // Fall back on content sniffing — accept JSONL if no `.json` extension.\n const trimmed = raw.trim()\n if (trimmed.startsWith('{') && trimmed.endsWith('}') && trimmed.includes('\\n{')) {\n return parseJsonl(raw)\n }\n return parseJson(raw)\n}\n\nfunction parseJson(raw: string): Payload[] {\n const parsed: unknown = JSON.parse(raw)\n const candidates: unknown[] | undefined = Array.isArray(parsed)\n ? parsed\n : isPayloadsEnvelope(parsed)\n ? parsed.payloads\n : undefined\n if (!candidates) {\n throw new Error('Expected an array of payloads or { \"payloads\": [...] }')\n }\n const result: Payload[] = []\n for (const [index, candidate] of candidates.entries()) {\n validatePayload(candidate, `index ${index}`)\n result.push(candidate)\n }\n return result\n}\n\nfunction parseJsonl(raw: string): Payload[] {\n const lines = raw.split('\\n')\n const payloads: Payload[] = []\n for (const [i, line_] of lines.entries()) {\n const line = line_?.trim()\n if (!line) continue\n let parsed: unknown\n try {\n parsed = JSON.parse(line)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(`Line ${i + 1}: invalid JSON (${message})`, { cause: error })\n }\n validatePayload(parsed, `line ${i + 1}`)\n payloads.push(parsed)\n }\n return payloads\n}\n\nfunction isPayloadsEnvelope(value: unknown): value is { payloads: Payload[] } {\n if (typeof value !== 'object' || value === null) return false\n const record = value as Record<string, unknown>\n return Array.isArray(record.payloads)\n}\n\nfunction validatePayload(value: unknown, where: string): asserts value is Payload {\n if (typeof value !== 'object' || value === null) {\n throw new Error(`${where}: not an object`)\n }\n const record = value as Record<string, unknown>\n if (typeof record.schema !== 'string' || record.schema.length === 0) {\n throw new Error(`${where}: missing or invalid \\`schema\\``)\n }\n if (typeof record.$hash !== 'string' || record.$hash.length === 0) {\n throw new Error(`${where}: missing or invalid \\`$hash\\``)\n }\n}\n","import type { Payload } from '@xylabs/aries-datalake-core'\nimport { xyoVerifyPayloadHash } from '@xylabs/aries-datalake-core'\nimport chalk from 'chalk'\n\nimport { mintAndConnect } from './mintAndConnect.ts'\nimport { parsePayloadsFile } from './parsePayloadsFile.ts'\n\nexport interface PushPayloadsOptions {\n idOrName?: string\n /** Path to a JSON or JSONL file containing payloads. */\n file: string\n /** Max payloads per HTTP request. Data plane caps at 1 000. */\n batchSize?: number\n /**\n * If true, each payload's `$hash` is checked locally against the\n * XL1-canonical content digest before we send. Catches hash/content\n * drift early with a pointer to the exact offending hash.\n */\n verify?: boolean\n /**\n * If true, use the real `@xyo-network/xl1-protocol-sdk`\n * `RestDataLakeRunner` for the upload — exercises the XL1 SDK's exact\n * wire format against our XL1-compat routes.\n */\n xl1Sdk?: boolean\n}\n\nconst DEFAULT_BATCH_SIZE = 500\n\nfunction printRejectedList(label: string, hashes: string[], cap: number, color: (s: string) => string): void {\n console.log(color(label))\n for (const hash of hashes.slice(0, cap)) {\n console.log(` ${hash}`)\n }\n if (hashes.length > cap) {\n console.log(chalk.gray(` ... and ${hashes.length - cap} more`))\n }\n}\n\n/**\n * Returns `true` when every payload's `$hash` matches the XL1-canonical\n * digest. On failure, prints the offending hashes and sets `process.exitCode = 1`.\n */\nasync function verifyLocally(payloads: Payload[]): Promise<boolean> {\n const mismatches: string[] = []\n for (const payload of payloads) {\n if (!(await xyoVerifyPayloadHash(payload))) mismatches.push(payload.$hash)\n }\n if (mismatches.length === 0) {\n console.log(chalk.gray(`verified ${payloads.length} payload hashes locally (XL1-canonical)`))\n return true\n }\n printRejectedList(\n `refusing to push: ${mismatches.length} payload(s) have mismatched $hash`,\n mismatches,\n 10,\n chalk.red,\n )\n process.exitCode = 1\n return false\n}\n\n/**\n * Reads a payloads file and bulk-inserts into the target datalake. Splits\n * into multiple requests if the file exceeds the batch size, reporting\n * cumulative totals.\n */\nexport async function pushPayloads(options: PushPayloadsOptions): Promise<void> {\n const payloads = parsePayloadsFile(options.file)\n if (payloads.length === 0) {\n console.log(chalk.yellow(`${options.file} contained 0 payloads — nothing to push`))\n return\n }\n\n if (options.verify && !(await verifyLocally(payloads))) return\n\n const connection = await mintAndConnect({\n idOrName: options.idOrName, role: 'runner', useXl1Sdk: options.xl1Sdk,\n })\n console.log(chalk.gray(\n `pushing ${payloads.length} payloads to ${connection.datalakeName} `\n + `(${connection.datalakeId}) via ${connection.transport}...`,\n ))\n\n const batchSize = options.batchSize ?? DEFAULT_BATCH_SIZE\n let inserted = 0\n let duplicates = 0\n const rejected: string[] = []\n\n for (let offset = 0; offset < payloads.length; offset += batchSize) {\n const batch = payloads.slice(offset, offset + batchSize)\n const result = await connection.client.insert(batch)\n inserted += result.inserted\n duplicates += result.duplicates\n rejected.push(...result.rejected)\n }\n\n console.log(chalk.green(\n `push complete: inserted=${inserted} duplicates=${duplicates} rejected=${rejected.length}`,\n ))\n if (rejected.length > 0) {\n printRejectedList('rejected hashes:', rejected, 20, chalk.yellow)\n }\n}\n","import chalk from 'chalk'\n\nimport { mintAndConnect } from './mintAndConnect.ts'\n\nexport interface TailPayloadsOptions {\n idOrName?: string\n /** Start from the current tail and keep polling for new payloads. */\n follow?: boolean\n /** One-shot page size. Defaults to 50. */\n limit?: number\n /** Start cursor. When following from \"now\", this is the last seen hash. */\n cursor?: string\n /** Schema filter. */\n schemas?: string[]\n /** Poll interval when following, in ms. Defaults to 1 000. */\n pollIntervalMs?: number\n /** Max polls when following. Omit for unlimited. Used in tests. */\n maxPolls?: number\n}\n\nconst DEFAULT_LIMIT = 50\nconst DEFAULT_POLL_MS = 1000\n\n/**\n * Streams payloads from a datalake. In one-shot mode prints the first page.\n * In follow mode pages forward to the end then polls `/next` from the last\n * cursor every `pollIntervalMs`, emitting new payloads as they land.\n */\nexport async function tailPayloads(options: TailPayloadsOptions): Promise<void> {\n const connection = await mintAndConnect({ idOrName: options.idOrName, role: 'viewer' })\n const limit = options.limit ?? DEFAULT_LIMIT\n\n let cursor = options.cursor\n let totalSeen = 0\n\n // Initial page(s): drain forward until we reach end-of-stream. In `follow`\n // mode we print these as backlog; in one-shot mode we stop after one page.\n while (true) {\n const page = await connection.client.next({\n limit, cursor, schemas: options.schemas,\n })\n for (const payload of page.payloads) {\n printPayload(payload)\n totalSeen += 1\n }\n if (!options.follow) {\n if (totalSeen === 0) {\n console.log(chalk.yellow(`${connection.datalakeName}: no payloads yet`))\n }\n return\n }\n if (page.payloads.length < limit) {\n cursor = page.nextCursor ?? cursor\n break\n }\n cursor = page.nextCursor ?? cursor\n }\n\n const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_MS\n console.log(chalk.gray(`following ${connection.datalakeName} (Ctrl+C to stop)`))\n\n let polls = 0\n while (options.maxPolls === undefined || polls < options.maxPolls) {\n await delay(pollIntervalMs)\n polls += 1\n const page = await connection.client.next({\n limit, cursor, schemas: options.schemas,\n })\n for (const payload of page.payloads) {\n printPayload(payload)\n totalSeen += 1\n }\n if (page.nextCursor) cursor = page.nextCursor\n }\n}\n\nfunction printPayload(payload: { $hash: string; schema: string }): void {\n const timestamp = new Date().toISOString()\n console.log(`${chalk.gray(timestamp)} ${chalk.cyan(payload.$hash.slice(0, 12))} ${chalk.magenta(payload.schema)}`)\n console.log(` ${JSON.stringify(payload)}`)\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n","import type { CommandModule } from 'yargs'\n\nimport { fetchPayload } from '../actions/datalake/payloads/index.ts'\n\nexport const datalakeFetchCommand: CommandModule = {\n command: 'fetch <hash> [name]',\n describe: 'Fetch a single payload by content hash',\n builder: yargs =>\n yargs\n .positional('hash', {\n type: 'string',\n describe: 'Content hash of the payload to fetch',\n demandOption: true,\n })\n .positional('name', {\n type: 'string',\n describe: 'Datalake name or id (defaults to current)',\n })\n .option('raw', {\n type: 'boolean',\n default: false,\n describe: 'Print only the raw JSON payload (no header)',\n })\n .option('xl1-sdk', {\n type: 'boolean',\n default: false,\n describe: 'Use the real @xyo-network/xl1-protocol-sdk RestDataLakeViewer',\n }),\n handler: async (argv) => {\n await fetchPayload({\n hash: argv.hash as string,\n idOrName: argv.name as string | undefined,\n raw: argv.raw as boolean,\n xl1Sdk: argv['xl1-sdk'] as boolean,\n })\n },\n}\n","import type { DatalakeRole } from '@xylabs/aries-datalake-core'\nimport type { CommandModule } from 'yargs'\n\nimport { grantAccess } from '../actions/datalake/index.ts'\n\nexport const datalakeGrantCommand: CommandModule = {\n command: 'grant <name> <principal>',\n describe: 'Grant a role on a datalake (principal=user-id or \"public\")',\n builder: yargs =>\n yargs\n .positional('name', {\n type: 'string',\n describe: 'Datalake name or id',\n demandOption: true,\n })\n .positional('principal', {\n type: 'string',\n describe: 'User id, or the literal \"public\"',\n demandOption: true,\n })\n .option('role', {\n alias: 'r',\n type: 'string',\n choices: ['viewer', 'runner'] as const,\n default: 'viewer',\n describe: 'Role to grant',\n })\n .option('confirm-public', {\n type: 'boolean',\n default: false,\n describe: 'Required to grant `public runner` (anonymous writes)',\n }),\n handler: async (argv) => {\n await grantAccess({\n idOrName: argv.name as string,\n principal: argv.principal as string,\n role: argv.role as DatalakeRole,\n confirmPublic: argv['confirm-public'] as boolean,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { listDatalakes } from '../actions/datalake/index.ts'\n\nexport const datalakeListCommand: CommandModule = {\n command: 'list',\n describe: 'List your datalakes',\n handler: async () => {\n await listDatalakes()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { login } from '../actions/datalake/index.ts'\n\nexport const datalakeLoginCommand: CommandModule = {\n command: 'login',\n describe: 'Sign in to the datalake control plane',\n builder: yargs =>\n yargs\n .option('base-url', {\n type: 'string',\n describe: 'Control-plane base URL (P0: required)',\n })\n .option('token', {\n type: 'string',\n describe: 'Pre-issued auth token (P0: required; OAuth lands in P1)',\n }),\n handler: async (argv) => {\n await login({\n baseUrl: argv['base-url'] as string | undefined,\n token: argv.token as string | undefined,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { logout } from '../actions/datalake/index.ts'\n\nexport const datalakeLogoutCommand: CommandModule = {\n command: 'logout',\n describe: 'Clear stored datalake credentials',\n handler: async () => {\n await logout()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { pushPayloads } from '../actions/datalake/payloads/index.ts'\n\nexport const datalakePushCommand: CommandModule = {\n command: 'push <file> [name]',\n describe: 'Insert payloads from a JSON or JSONL file into a datalake',\n builder: yargs =>\n yargs\n .positional('file', {\n type: 'string',\n describe: 'Path to a .json (array) or .jsonl (one payload per line) file',\n demandOption: true,\n })\n .positional('name', {\n type: 'string',\n describe: 'Target datalake name or id (defaults to current)',\n })\n .option('batch-size', {\n type: 'number',\n default: 500,\n describe: 'Max payloads per HTTP request',\n })\n .option('verify', {\n type: 'boolean',\n default: false,\n describe: 'Verify each payload\\'s $hash against content locally before pushing',\n })\n .option('xl1-sdk', {\n type: 'boolean',\n default: false,\n describe: 'Use the real @xyo-network/xl1-protocol-sdk RestDataLakeRunner',\n }),\n handler: async (argv) => {\n await pushPayloads({\n file: argv.file as string,\n idOrName: argv.name as string | undefined,\n batchSize: argv['batch-size'] as number,\n verify: argv.verify as boolean,\n xl1Sdk: argv['xl1-sdk'] as boolean,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { revokeAccess } from '../actions/datalake/index.ts'\n\nexport const datalakeRevokeCommand: CommandModule = {\n command: 'revoke <name> <principal>',\n describe: 'Revoke a principal\\'s access to a datalake',\n builder: yargs =>\n yargs\n .positional('name', {\n type: 'string',\n describe: 'Datalake name or id',\n demandOption: true,\n })\n .positional('principal', {\n type: 'string',\n describe: 'User id, or the literal \"public\"',\n demandOption: true,\n }),\n handler: async (argv) => {\n await revokeAccess({\n idOrName: argv.name as string,\n principal: argv.principal as string,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { tailPayloads } from '../actions/datalake/payloads/index.ts'\n\nexport const datalakeTailCommand: CommandModule = {\n command: 'tail [name]',\n describe: 'Stream payloads from a datalake (Ctrl+C to stop with --follow)',\n builder: yargs =>\n yargs\n .positional('name', {\n type: 'string',\n describe: 'Datalake name or id (defaults to current)',\n })\n .option('follow', {\n alias: 'f',\n type: 'boolean',\n default: false,\n describe: 'Keep polling for new payloads after draining the backlog',\n })\n .option('limit', {\n alias: 'n',\n type: 'number',\n default: 50,\n describe: 'Max payloads per page',\n })\n .option('cursor', {\n type: 'string',\n describe: 'Resume after this hash (exclusive)',\n })\n .option('schemas', {\n type: 'string',\n describe: 'Comma-separated list of schemas to include',\n })\n .option('poll-interval', {\n type: 'number',\n default: 1000,\n describe: 'Poll interval in ms when following',\n }),\n handler: async (argv) => {\n await tailPayloads({\n idOrName: argv.name as string | undefined,\n follow: argv.follow as boolean,\n limit: argv.limit as number,\n cursor: argv.cursor as string | undefined,\n schemas: argv.schemas ? (argv.schemas as string).split(',') : undefined,\n pollIntervalMs: argv['poll-interval'] as number,\n })\n },\n}\n","import type { DatalakeRole } from '@xylabs/aries-datalake-core'\nimport type { CommandModule } from 'yargs'\n\nimport { mintToken } from '../actions/datalake/index.ts'\n\nexport const datalakeTokenCommand: CommandModule = {\n command: 'token [name]',\n describe: 'Mint a scoped JWT for SDK use',\n builder: yargs =>\n yargs\n .positional('name', {\n type: 'string',\n describe: 'Datalake name or id (defaults to current)',\n })\n .option('role', {\n alias: 'r',\n type: 'string',\n choices: ['viewer', 'runner'] as const,\n default: 'viewer',\n describe: 'Role encoded in the token',\n })\n .option('ttl', {\n type: 'number',\n describe: 'Lifetime in seconds (server-capped)',\n }),\n handler: async (argv) => {\n await mintToken({\n idOrName: argv.name as string | undefined,\n role: argv.role as DatalakeRole,\n ttlSeconds: argv.ttl as number | undefined,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { useDatalake } from '../actions/datalake/index.ts'\n\nexport const datalakeUseCommand: CommandModule = {\n command: 'use [name]',\n describe: 'Set the default datalake for subsequent commands (omit name to clear)',\n builder: yargs =>\n yargs.positional('name', {\n type: 'string',\n describe: 'Datalake name or id',\n }),\n handler: async (argv) => {\n await useDatalake(argv.name as string | undefined)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { datalakeAuditCommand } from './datalakeAuditCommand.ts'\nimport { datalakeCreateCommand } from './datalakeCreateCommand.ts'\nimport { datalakeDescribeCommand } from './datalakeDescribeCommand.ts'\nimport { datalakeDestroyCommand } from './datalakeDestroyCommand.ts'\nimport { datalakeDevCommand } from './datalakeDevCommand.ts'\nimport { datalakeFetchCommand } from './datalakeFetchCommand.ts'\nimport { datalakeGrantCommand } from './datalakeGrantCommand.ts'\nimport { datalakeListCommand } from './datalakeListCommand.ts'\nimport { datalakeLoginCommand } from './datalakeLoginCommand.ts'\nimport { datalakeLogoutCommand } from './datalakeLogoutCommand.ts'\nimport { datalakePushCommand } from './datalakePushCommand.ts'\nimport { datalakeRevokeCommand } from './datalakeRevokeCommand.ts'\nimport { datalakeTailCommand } from './datalakeTailCommand.ts'\nimport { datalakeTokenCommand } from './datalakeTokenCommand.ts'\nimport { datalakeUseCommand } from './datalakeUseCommand.ts'\n\nexport const datalakeCommand: CommandModule = {\n command: 'datalake',\n describe: 'Provision and manage on-demand XL1 datalakes',\n builder: yargs =>\n yargs\n .command(datalakeLoginCommand)\n .command(datalakeLogoutCommand)\n .command(datalakeCreateCommand)\n .command(datalakeListCommand)\n .command(datalakeDescribeCommand)\n .command(datalakeDestroyCommand)\n .command(datalakeGrantCommand)\n .command(datalakeRevokeCommand)\n .command(datalakeTokenCommand)\n .command(datalakeUseCommand)\n .command(datalakePushCommand)\n .command(datalakeFetchCommand)\n .command(datalakeTailCommand)\n .command(datalakeAuditCommand)\n .command(datalakeDevCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","import imghash from 'imghash'\n\nimport { hammingHex } from '../lib/hamming.ts'\nimport type { Algorithm } from './types.ts'\n\nconst { hash: imghashFn } = imghash\n\n/**\n * blockhash via the imghash package — defaults to 8×8 = 64-bit for cross-comparability\n * with phash/dhash. Imghash accepts both filepath and Buffer natively.\n */\nexport const blockhashAlgorithm: Algorithm = {\n name: 'blockhash',\n family: 'perceptual-image',\n inputType: 'image',\n async hash(input) {\n if (input.path !== undefined) {\n return await imghashFn(input.path, 8, 'hex')\n }\n if (input.bytes !== undefined) {\n return await imghashFn(input.bytes, 8, 'hex')\n }\n throw new Error('blockhash requires bytes or a path.')\n },\n async compare(a, b) {\n const dist = hammingHex(a, b)\n const bits = (a.length / 2) * 8\n return {\n distance: dist, similarity: 1 - dist / bits, metric: `hamming-${bits}`,\n }\n },\n}\n","/**\n * Population count for an 8-bit value (number of set bits).\n */\nfunction popcount8(byte: number): number {\n let count = 0\n let value = byte & 0xff\n while (value !== 0) {\n count += value & 1\n value >>>= 1\n }\n return count\n}\n\n/**\n * Hamming distance between two equal-length lowercase-hex strings.\n * Throws when the lengths differ.\n */\nexport function hammingHex(a: string, b: string): number {\n if (a.length !== b.length) {\n throw new Error(`Hash length mismatch: ${a.length} vs ${b.length}`)\n }\n if (a.length % 2 !== 0) {\n throw new Error(`Hash hex length must be even, got ${a.length}`)\n }\n let dist = 0\n for (let i = 0; i < a.length; i += 2) {\n const xa = Number.parseInt(a.slice(i, i + 2), 16)\n const xb = Number.parseInt(b.slice(i, i + 2), 16)\n if (Number.isNaN(xa) || Number.isNaN(xb)) {\n throw new TypeError(`Invalid hex at position ${i}: '${a.slice(i, i + 2)}' / '${b.slice(i, i + 2)}'`)\n }\n dist += popcount8(xa ^ xb)\n }\n return dist\n}\n\n/**\n * Bit-length of an even-length hex string.\n */\nexport function bitLengthHex(hex: string): number {\n return (hex.length / 2) * 8\n}\n\n/**\n * Population count for a 32-bit unsigned value (number of set bits).\n * Uses the parallel-prefix bit trick.\n */\nexport function popcount32(value: number): number {\n let v = Math.trunc(value)\n v = v - ((v >>> 1) & 0x55_55_55_55)\n v = (v & 0x33_33_33_33) + ((v >>> 2) & 0x33_33_33_33)\n v = (v + (v >>> 4)) & 0x0f_0f_0f_0f\n return ((v * 0x01_01_01_01) >>> 24) & 0xff\n}\n","import { spawn } from 'node:child_process'\n\nexport interface RunBinaryOptions {\n binary: string\n args?: readonly string[]\n /** When provided, written to the child's stdin and stdin is closed. */\n stdin?: Buffer\n /** When true, the child's stdout is captured as a Buffer. Otherwise as utf8. */\n binaryOutput?: boolean\n /** Cap stdout capture at this many bytes. Default 64 MiB. */\n maxBytes?: number\n}\n\nexport interface RunBinaryResult {\n stdout: Buffer\n stderr: string\n exitCode: number\n}\n\n/**\n * Spawn a binary, optionally write to its stdin, and capture stdout/stderr.\n * Throws if the child exits non-zero.\n */\nexport async function runBinary(options: RunBinaryOptions): Promise<RunBinaryResult> {\n const maxBytes = options.maxBytes ?? 64 * 1024 * 1024\n return await new Promise((resolve, reject) => {\n const child = spawn(options.binary, [...(options.args ?? [])], { stdio: ['pipe', 'pipe', 'pipe'] })\n\n const stdoutChunks: Buffer[] = []\n let stdoutBytes = 0\n let stderr = ''\n let killedForOverflow = false\n\n child.stdout.on('data', (chunk: Buffer) => {\n stdoutBytes += chunk.length\n if (stdoutBytes > maxBytes) {\n if (!killedForOverflow) {\n killedForOverflow = true\n child.kill('SIGKILL')\n }\n return\n }\n stdoutChunks.push(chunk)\n })\n child.stderr.on('data', (chunk: Buffer) => {\n stderr += chunk.toString('utf8')\n })\n\n child.on('error', err => reject(err))\n child.on('close', (code) => {\n if (killedForOverflow) {\n reject(new Error(`${options.binary} stdout exceeded ${maxBytes} bytes`))\n return\n }\n const exitCode = code ?? -1\n const stdout = Buffer.concat(stdoutChunks)\n if (exitCode !== 0) {\n const tail = stderr.trim().split(/\\r?\\n/).slice(-3).join('\\n')\n reject(new Error(`${options.binary} exited ${exitCode}${tail.length > 0 ? `: ${tail}` : ''}`))\n return\n }\n resolve({\n stdout, stderr, exitCode,\n })\n })\n\n if (options.stdin === undefined) {\n child.stdin.end()\n } else {\n child.stdin.end(options.stdin)\n }\n })\n}\n","import { spawn } from 'node:child_process'\n\nimport type { RequiredBinary } from '../algorithms/types.ts'\n\n/**\n * Resolve a binary name to its absolute path on the user's PATH.\n * Returns null if not found.\n */\nexport async function which(binary: string): Promise<string | null> {\n return await new Promise((resolve) => {\n const cmd = process.platform === 'win32' ? 'where' : 'command'\n const args = process.platform === 'win32' ? [binary] : ['-v', binary]\n const child = spawn(cmd, args, { shell: process.platform !== 'win32' })\n\n let stdout = ''\n child.stdout.on('data', (chunk: Buffer) => {\n stdout += chunk.toString('utf8')\n })\n child.on('error', () => resolve(null))\n child.on('close', (code) => {\n if (code === 0) {\n const path = stdout.split(/\\r?\\n/).find(line => line.trim().length > 0)?.trim() ?? null\n resolve(path)\n } else {\n resolve(null)\n }\n })\n })\n}\n\n/**\n * Throw a clearly-actionable error when a required binary is missing.\n */\nexport async function requireBinary(req: RequiredBinary): Promise<string> {\n const path = await which(req.binary)\n if (path !== null) return path\n const lines = [`${req.binary} binary not found on PATH. Install with:`]\n if (req.install.brew !== undefined) lines.push(` macOS: brew install ${req.install.brew}`)\n if (req.install.apt !== undefined) lines.push(` Debian: apt install ${req.install.apt}`)\n if (req.install.choco !== undefined) lines.push(` Windows: choco install ${req.install.choco}`)\n throw new Error(lines.join('\\n'))\n}\n","import { randomBytes } from 'node:crypto'\nimport { rm, writeFile } from 'node:fs/promises'\nimport OS from 'node:os'\nimport PATH from 'node:path'\n\n/**\n * Write a buffer to a tempfile, run `fn` with its path, and unlink afterwards.\n * `extension` is included in the filename when provided (no leading dot).\n */\nexport async function withTempfile<T>(\n bytes: Buffer,\n extension: string | undefined,\n fn: (path: string) => Promise<T>,\n): Promise<T> {\n const ext = extension !== undefined && extension.length > 0 ? `.${extension}` : ''\n const path = PATH.join(OS.tmpdir(), `aries-hash-${randomBytes(8).toString('hex')}${ext}`)\n await writeFile(path, bytes)\n try {\n return await fn(path)\n } finally {\n await rm(path, { force: true })\n }\n}\n","import { popcount32 } from '../lib/hamming.ts'\nimport { runBinary } from '../lib/runBinary.ts'\nimport { requireBinary } from '../lib/which.ts'\nimport { withTempfile } from '../lib/withTempfile.ts'\nimport type { Algorithm, RequiredBinary } from './types.ts'\n\nconst FPCALC_BIN: RequiredBinary = {\n binary: 'fpcalc',\n install: {\n brew: 'chromaprint',\n apt: 'libchromaprint-tools',\n choco: 'chromaprint',\n },\n}\n\ninterface ChromaprintFingerprint {\n algorithm: 'chromaprint'\n duration: number\n fingerprint: number[]\n}\n\ninterface FpcalcJsonRaw {\n duration: number\n fingerprint: number[]\n}\n\nasync function runFpcalc(path: string): Promise<ChromaprintFingerprint> {\n await requireBinary(FPCALC_BIN)\n // -raw: output the fingerprint as a comma-separated list of 32-bit integers.\n // -json: combine with -raw to get JSON whose `fingerprint` is an int[].\n const { stdout } = await runBinary({ binary: 'fpcalc', args: ['-raw', '-json', path] })\n const parsed = JSON.parse(stdout.toString('utf8')) as FpcalcJsonRaw\n if (typeof parsed.duration !== 'number' || !Array.isArray(parsed.fingerprint)) {\n throw new TypeError('fpcalc returned unexpected JSON shape.')\n }\n return {\n algorithm: 'chromaprint',\n duration: parsed.duration,\n fingerprint: parsed.fingerprint,\n }\n}\n\nfunction parseChromaprintHash(raw: string): ChromaprintFingerprint {\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw new Error('chromaprint hash must be a JSON document produced by `aries hash --algorithm chromaprint`.')\n }\n const obj = parsed as Partial<ChromaprintFingerprint>\n if (obj.algorithm !== 'chromaprint' || typeof obj.duration !== 'number' || !Array.isArray(obj.fingerprint)) {\n throw new Error('chromaprint hash JSON missing required fields (algorithm, duration, fingerprint).')\n }\n return obj as ChromaprintFingerprint\n}\n\n/**\n * Compare two chromaprint fingerprints by windowed Hamming distance over their 32-bit\n * frame integers. We slide one fingerprint over the other to find the best alignment\n * offset; bits matching across the overlap → similarity, lower is better.\n */\nfunction compareFingerprints(a: number[], b: number[]): { similarity: number; distance: number; offset: number } {\n if (a.length === 0 || b.length === 0) {\n return {\n similarity: 0, distance: Number.NaN, offset: 0,\n }\n }\n\n const span = Math.min(a.length, b.length)\n const maxOffset = Math.max(a.length, b.length) - span\n let best = {\n similarity: 0,\n distance: 32 * span,\n offset: 0,\n }\n\n for (let offset = -maxOffset; offset <= maxOffset; offset++) {\n const aStart = Math.max(0, -offset)\n const bStart = Math.max(0, offset)\n const overlap = Math.min(a.length - aStart, b.length - bStart)\n if (overlap < Math.max(8, span / 4)) continue\n let bits = 0\n for (let i = 0; i < overlap; i++) {\n bits += popcount32(a[aStart + i] ^ b[bStart + i])\n }\n const similarity = 1 - bits / (32 * overlap)\n if (similarity > best.similarity) {\n best = {\n similarity, distance: bits, offset,\n }\n }\n }\n return best\n}\n\nexport const chromaprintAlgorithm: Algorithm = {\n name: 'chromaprint',\n family: 'audio',\n inputType: 'audio',\n requires: [FPCALC_BIN],\n async hash(input) {\n const fp = input.path === undefined\n ? input.bytes === undefined\n ? null\n : await withTempfile(input.bytes, 'audio.bin', async path => await runFpcalc(path))\n : await runFpcalc(input.path)\n if (fp === null) {\n throw new Error('chromaprint requires bytes or a path.')\n }\n return JSON.stringify(fp)\n },\n async compare(a, b) {\n const fpA = parseChromaprintHash(a)\n const fpB = parseChromaprintHash(b)\n const result = compareFingerprints(fpA.fingerprint, fpB.fingerprint)\n return {\n similarity: result.similarity,\n distance: Number.isFinite(result.distance) ? result.distance : undefined,\n metric: 'chromaprint-windowed-hamming',\n }\n },\n}\n","import { readFile } from 'node:fs/promises'\n\nimport sharp from 'sharp'\n\nimport { hammingHex } from '../lib/hamming.ts'\nimport type { Algorithm } from './types.ts'\n\n/**\n * dHash (difference hash): resize to 9×8 grayscale, then for each row produce 8 bits\n * representing whether pixel[i] > pixel[i+1]. 8 rows × 8 bits = 64 bits → 16 hex chars.\n */\nexport const dhashAlgorithm: Algorithm = {\n name: 'dhash',\n family: 'perceptual-image',\n inputType: 'image',\n async hash(input) {\n const source = input.bytes ?? (input.path === undefined ? undefined : await readFile(input.path))\n if (source === undefined) {\n throw new Error('dhash requires bytes or a path.')\n }\n const raw = await sharp(source)\n .resize(9, 8, { fit: 'fill' })\n .grayscale()\n .raw()\n .toBuffer()\n if (raw.length !== 9 * 8) {\n throw new Error(`dhash unexpected raw buffer length ${raw.length}`)\n }\n let bits = ''\n for (let row = 0; row < 8; row++) {\n for (let col = 0; col < 8; col++) {\n const left = raw[row * 9 + col]\n const right = raw[row * 9 + col + 1]\n bits += left > right ? '1' : '0'\n }\n }\n let hex = ''\n for (let i = 0; i < bits.length; i += 4) {\n hex += Number.parseInt(bits.slice(i, i + 4), 2).toString(16)\n }\n return hex\n },\n async compare(a, b) {\n const dist = hammingHex(a, b)\n const bits = (a.length / 2) * 8\n return {\n distance: dist, similarity: 1 - dist / bits, metric: `hamming-${bits}`,\n }\n },\n}\n","import { Nilsimsa } from 'nilsimsa'\n\nimport type { Algorithm } from './types.ts'\n\nexport const nilsimsaAlgorithm: Algorithm = {\n name: 'nilsimsa',\n family: 'fuzzy-byte',\n inputType: 'bytes',\n async hash(input) {\n if (input.bytes === undefined) {\n throw new Error('nilsimsa requires loaded bytes.')\n }\n const n = new Nilsimsa(input.bytes)\n return n.digest('hex')\n },\n async compare(a, b) {\n // Nilsimsa.compare returns a similarity score in [-128, 128].\n // 128 = identical; 0 ≈ unrelated; -128 = perfectly anti-correlated.\n const raw = Nilsimsa.compare(a, b, 'hex')\n const similarity = Math.max(0, Math.min(1, (raw + 128) / 256))\n return {\n distance: 128 - raw, similarity, metric: 'nilsimsa-score',\n }\n },\n}\n","import { createRequire } from 'node:module'\n\nimport sharp from 'sharp'\n\nimport { hammingHex } from '../lib/hamming.ts'\nimport type { Algorithm } from './types.ts'\n\n/**\n * pdq-wasm ships a CommonJS entry that uses `require` to load its bundled WASM file.\n * Aries is ESM, so we use `createRequire` to bridge — this picks the CJS dist via the\n * package's `exports.require` condition, which can resolve the relative WASM path.\n */\nconst require = createRequire(import.meta.url)\ninterface PDQHashResult { hash: Uint8Array; quality: number }\ninterface PDQModule {\n init(): Promise<void>\n hash(input: { data: Uint8Array; width: number; height: number; channels: 1 | 3 }): PDQHashResult\n toHex(hash: Uint8Array): string\n}\nconst { PDQ } = require('pdq-wasm') as { PDQ: PDQModule }\n\nlet initialized = false\nasync function ensureInit(): Promise<void> {\n if (initialized) return\n await PDQ.init()\n initialized = true\n}\n\n/**\n * Decode the input image to RGB raw bytes that pdq-wasm can consume directly.\n * sharp handles JPEG/PNG/WebP/AVIF/etc. transparently.\n */\nasync function toRgbRaw(source: Buffer | string): Promise<{ data: Uint8Array; width: number; height: number }> {\n const { data, info } = await sharp(source).removeAlpha().raw().toBuffer({ resolveWithObject: true })\n return {\n data: new Uint8Array(data.buffer, data.byteOffset, data.byteLength),\n width: info.width,\n height: info.height,\n }\n}\n\nexport const pdqAlgorithm: Algorithm = {\n name: 'pdq',\n family: 'perceptual-image',\n inputType: 'image',\n async hash(input) {\n const source = input.path ?? input.bytes\n if (source === undefined) {\n throw new Error('pdq requires bytes or a path.')\n }\n await ensureInit()\n const rgb = await toRgbRaw(source)\n const result = PDQ.hash({\n data: rgb.data, width: rgb.width, height: rgb.height, channels: 3,\n })\n return PDQ.toHex(result.hash)\n },\n async compare(a, b) {\n const dist = hammingHex(a, b)\n const bits = (a.length / 2) * 8\n return {\n distance: dist, similarity: 1 - dist / bits, metric: `hamming-${bits}`,\n }\n },\n}\n","import phashLib from 'sharp-phash'\n\nimport { hammingHex } from '../lib/hamming.ts'\nimport type { Algorithm } from './types.ts'\n\nconst phash = phashLib as unknown as (image: Buffer | string) => Promise<string>\n\n/**\n * sharp-phash returns a 64-character '01' binary string. We pack it into 16-char hex\n * for parity with the other perceptual image algorithms.\n */\nfunction binaryToHex(bin: string): string {\n if (!/^[01]+$/.test(bin)) {\n throw new TypeError(`phash returned unexpected output: ${bin.slice(0, 20)}…`)\n }\n const padded = bin.padStart(Math.ceil(bin.length / 4) * 4, '0')\n let hex = ''\n for (let i = 0; i < padded.length; i += 4) {\n hex += Number.parseInt(padded.slice(i, i + 4), 2).toString(16)\n }\n return hex\n}\n\nexport const phashAlgorithm: Algorithm = {\n name: 'phash',\n family: 'perceptual-image',\n inputType: 'image',\n async hash(input) {\n const source = input.path ?? input.bytes\n if (source === undefined) {\n throw new Error('phash requires bytes or a path.')\n }\n const bin = await phash(source)\n return binaryToHex(bin)\n },\n async compare(a, b) {\n const dist = hammingHex(a, b)\n const bits = (a.length / 2) * 8\n return {\n distance: dist, similarity: 1 - dist / bits, metric: `hamming-${bits}`,\n }\n },\n}\n","import { createHash } from 'node:crypto'\n\nimport type { Algorithm } from './types.ts'\n\nexport const sha256Algorithm: Algorithm = {\n name: 'sha256',\n family: 'strict',\n inputType: 'bytes',\n async hash(input) {\n if (input.bytes === undefined) {\n throw new Error('sha256 requires loaded bytes.')\n }\n return createHash('sha256').update(input.bytes).digest('hex')\n },\n async compare(a, b) {\n return {\n similarity: a === b ? 1 : 0,\n distance: a === b ? 0 : 1,\n metric: 'exact-match',\n }\n },\n}\n","/**\n * Standard Levenshtein edit distance between two strings.\n * O(m·n) time, O(min(m,n)) space.\n */\nexport function levenshtein(a: string, b: string): number {\n if (a === b) return 0\n if (a.length === 0) return b.length\n if (b.length === 0) return a.length\n\n // Make `s1` the longer string so the row width is min(m,n)+1.\n let s1 = a\n let s2 = b\n if (s1.length < s2.length) {\n const tmp = s1\n s1 = s2\n s2 = tmp\n }\n\n const m = s1.length\n const n = s2.length\n let prev: number[] = Array.from({ length: n + 1 }, (_, j) => j)\n let curr: number[] = Array.from({ length: n + 1 }, () => 0)\n\n for (let i = 1; i <= m; i++) {\n curr[0] = i\n const cp1 = s1.codePointAt(i - 1)\n for (let j = 1; j <= n; j++) {\n const cost = cp1 === s2.codePointAt(j - 1) ? 0 : 1\n const del = prev[j] + 1\n const ins = curr[j - 1] + 1\n const sub = prev[j - 1] + cost\n curr[j] = Math.min(del, ins, sub)\n }\n const tmp = prev\n prev = curr\n curr = tmp\n }\n return prev[n]\n}\n","import { levenshtein } from '../lib/levenshtein.ts'\nimport { runBinary } from '../lib/runBinary.ts'\nimport { requireBinary } from '../lib/which.ts'\nimport type { Algorithm, RequiredBinary } from './types.ts'\n\nconst SSDEEP_BIN: RequiredBinary = {\n binary: 'ssdeep',\n install: {\n brew: 'ssdeep',\n apt: 'ssdeep',\n choco: 'ssdeep',\n },\n}\n\n/**\n * Parse an ssdeep hash of the form `<block_size>:<h1>:<h2>` (filename suffix is dropped).\n */\nfunction parseSsdeepHash(raw: string): { blockSize: number; h1: string; h2: string } {\n const cleaned = raw.replace(/,.*$/u, '').trim()\n const parts = cleaned.split(':')\n if (parts.length < 3) {\n throw new Error(`Invalid ssdeep hash: ${raw}`)\n }\n const blockSize = Number.parseInt(parts[0], 10)\n if (!Number.isFinite(blockSize) || blockSize <= 0) {\n throw new Error(`Invalid ssdeep block size: ${parts[0]}`)\n }\n return {\n blockSize, h1: parts[1], h2: parts[2],\n }\n}\n\nfunction levenshteinSimilarity(a: string, b: string): number {\n if (a.length === 0 && b.length === 0) return 1\n const dist = levenshtein(a, b)\n const maxLen = Math.max(a.length, b.length, 1)\n return Math.max(0, 1 - dist / maxLen)\n}\n\n/**\n * Approximate ssdeep similarity using Levenshtein on whichever sub-hash pair shares a\n * compatible block size (1×, 2×, or 0.5×). Returns 0 if block sizes are incompatible.\n *\n * This is NOT the canonical ssdeep score — that algorithm applies a block-size\n * attenuation curve we don't replicate here. The metric label `ssdeep-levenshtein`\n * makes that explicit.\n */\nfunction ssdeepSimilarity(rawA: string, rawB: string): { similarity: number; distance: number } {\n const a = parseSsdeepHash(rawA)\n const b = parseSsdeepHash(rawB)\n if (a.blockSize === b.blockSize) {\n const s1 = levenshteinSimilarity(a.h1, b.h1)\n const s2 = levenshteinSimilarity(a.h2, b.h2)\n const similarity = Math.max(s1, s2)\n const distance = Math.round((1 - similarity) * Math.max(a.h1.length, b.h1.length, a.h2.length, b.h2.length))\n return { similarity, distance }\n }\n if (a.blockSize === b.blockSize * 2) {\n const similarity = levenshteinSimilarity(a.h2, b.h1)\n return { similarity, distance: Math.round((1 - similarity) * Math.max(a.h2.length, b.h1.length)) }\n }\n if (b.blockSize === a.blockSize * 2) {\n const similarity = levenshteinSimilarity(a.h1, b.h2)\n return { similarity, distance: Math.round((1 - similarity) * Math.max(a.h1.length, b.h2.length)) }\n }\n return { similarity: 0, distance: Number.NaN }\n}\n\nexport const ssdeepAlgorithm: Algorithm = {\n name: 'ssdeep',\n family: 'fuzzy-byte',\n inputType: 'bytes',\n requires: [SSDEEP_BIN],\n async hash(input) {\n if (input.bytes === undefined) {\n throw new Error('ssdeep requires loaded bytes.')\n }\n await requireBinary(SSDEEP_BIN)\n // -b: bare output (no header line, no filename column)\n // -s: silent — suppress warnings/banner\n // We still get a header, so parse defensively.\n const { stdout } = await runBinary({\n binary: 'ssdeep', args: ['-b', '-s'], stdin: input.bytes,\n })\n const text = stdout.toString('utf8')\n const lines = text.split(/\\r?\\n/).map(l => l.trim()).filter(l => l.length > 0)\n // Skip the \"ssdeep,1.1--blocksize:hash:hash,filename\" header if present.\n const hashLine = lines.find(l => !l.startsWith('ssdeep,')) ?? lines.at(-1)\n if (hashLine === undefined) {\n throw new Error('ssdeep produced no output.')\n }\n return hashLine.replace(/,.*$/u, '')\n },\n async compare(a, b) {\n const { similarity, distance } = ssdeepSimilarity(a, b)\n return {\n similarity, distance: Number.isFinite(distance) ? distance : undefined, metric: 'ssdeep-levenshtein',\n }\n },\n}\n","import tlsh from 'tlsh'\n\nimport { hammingHex } from '../lib/hamming.ts'\nimport type { Algorithm } from './types.ts'\n\n/**\n * The `tlsh` npm package exports a single function: `tlsh(data: string): string`.\n * It does NOT expose the canonical diff algorithm publicly. We use a Hamming-distance\n * proxy over the hash bytes for `compare`. This is a reasonable approximation, not the\n * canonical TLSH-diff score — the metric label `tlsh-bit-hamming` makes that explicit.\n */\n\nexport const tlshAlgorithm: Algorithm = {\n name: 'tlsh',\n family: 'fuzzy-byte',\n inputType: 'bytes',\n async hash(input) {\n if (input.bytes === undefined) {\n throw new Error('tlsh requires loaded bytes.')\n }\n if (input.bytes.length < 50) {\n throw new Error(`tlsh requires at least 50 bytes of input (got ${input.bytes.length}).`)\n }\n return tlsh(input.bytes.toString('binary'))\n },\n async compare(a, b) {\n if (a.length !== b.length) {\n throw new Error(`tlsh hash length mismatch: ${a.length} vs ${b.length}`)\n }\n // TLSH hashes carry a leading version/type byte that's identical for hashes\n // produced by the same library — skip 4 hex chars (version+checksum bytes)\n // before measuring distance for slightly more meaningful comparison.\n const skip = a.length >= 8 ? 4 : 0\n const aBody = a.slice(skip)\n const bBody = b.slice(skip)\n const distance = hammingHex(aBody, bBody)\n const bits = (aBody.length / 2) * 8\n return {\n distance,\n similarity: 1 - distance / bits,\n metric: 'tlsh-bit-hamming',\n }\n },\n}\n","import { randomBytes } from 'node:crypto'\nimport {\n mkdtemp, readdir, readFile, rm,\n} from 'node:fs/promises'\nimport OS from 'node:os'\nimport PATH from 'node:path'\n\nimport { hammingHex } from '../lib/hamming.ts'\nimport { runBinary } from '../lib/runBinary.ts'\nimport { requireBinary } from '../lib/which.ts'\nimport { withTempfile } from '../lib/withTempfile.ts'\nimport { pdqAlgorithm } from './pdq.ts'\nimport { phashAlgorithm } from './phash.ts'\nimport type { Algorithm, RequiredBinary } from './types.ts'\n\nconst FFMPEG_BIN: RequiredBinary = {\n binary: 'ffmpeg',\n install: {\n brew: 'ffmpeg',\n apt: 'ffmpeg',\n choco: 'ffmpeg',\n },\n}\n\nexport type FrameAlgorithmName = 'phash' | 'pdq'\nexport const SUPPORTED_FRAME_ALGORITHMS = ['phash', 'pdq'] as const\n\ninterface VideoFramesFingerprint {\n algorithm: 'video-frames'\n fps: number\n frameAlgorithm: FrameAlgorithmName\n duration: number\n frames: { t: number; hash: string }[]\n}\n\nexport const DEFAULT_FPS = 1\nexport const DEFAULT_FRAME_ALGORITHM: FrameAlgorithmName = 'phash'\n\nasync function extractFrames(videoPath: string, fps: number): Promise<{ frames: Buffer[] }> {\n await requireBinary(FFMPEG_BIN)\n const dir = await mkdtemp(PATH.join(OS.tmpdir(), `aries-vframes-${randomBytes(6).toString('hex')}-`))\n try {\n await runBinary({\n binary: 'ffmpeg',\n args: [\n '-hide_banner',\n '-loglevel',\n 'error',\n '-i',\n videoPath,\n '-vf',\n `fps=${fps},scale=128:128:force_original_aspect_ratio=disable`,\n '-q:v',\n '5',\n PATH.join(dir, 'frame-%05d.jpg'),\n ],\n })\n const entries = (await readdir(dir)).filter(name => name.endsWith('.jpg')).toSorted()\n const frames = await Promise.all(entries.map(async name => await readFile(PATH.join(dir, name))))\n return { frames }\n } finally {\n await rm(dir, { recursive: true, force: true })\n }\n}\n\nfunction frameHasher(name: FrameAlgorithmName): (bytes: Buffer) => Promise<string> {\n switch (name) {\n case 'phash': { return async bytes => await phashAlgorithm.hash({ bytes })\n }\n case 'pdq': { return async bytes => await pdqAlgorithm.hash({ bytes })\n }\n }\n}\n\nasync function fingerprintVideo(\n videoPath: string,\n fps: number,\n frameAlgorithm: FrameAlgorithmName,\n): Promise<VideoFramesFingerprint> {\n const { frames } = await extractFrames(videoPath, fps)\n const hashFrame = frameHasher(frameAlgorithm)\n const hashes = await Promise.all(frames.map(async (frame, idx) => ({\n t: idx / fps,\n hash: await hashFrame(frame),\n })))\n return {\n algorithm: 'video-frames',\n fps,\n frameAlgorithm,\n duration: frames.length / fps,\n frames: hashes,\n }\n}\n\nfunction parseVideoFramesHash(raw: string): VideoFramesFingerprint {\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw new Error('video-frames hash must be JSON produced by `aries hash --algorithm video-frames`.')\n }\n const obj = parsed as Partial<VideoFramesFingerprint>\n if (\n obj.algorithm !== 'video-frames'\n || typeof obj.fps !== 'number'\n || typeof obj.duration !== 'number'\n || !Array.isArray(obj.frames)\n ) {\n throw new Error('video-frames hash JSON missing required fields.')\n }\n // frameAlgorithm was added in a later revision; default to phash when older hashes lack it.\n if (obj.frameAlgorithm === undefined) {\n return { ...obj, frameAlgorithm: 'phash' } as VideoFramesFingerprint\n }\n return obj as VideoFramesFingerprint\n}\n\ninterface VideoFramesCompareDetails {\n similarity: number\n distance: number\n bestOffsetSeconds: number\n overlapSeconds: number\n}\n\n/** Sliding-window Hamming distance over the two frame sequences. */\nfunction compareFrameSequences(\n a: VideoFramesFingerprint,\n b: VideoFramesFingerprint,\n): VideoFramesCompareDetails {\n const fps = Math.min(a.fps, b.fps)\n if (a.frames.length === 0 || b.frames.length === 0) {\n return {\n similarity: 0, distance: Number.NaN, bestOffsetSeconds: 0, overlapSeconds: 0,\n }\n }\n const minLen = Math.min(a.frames.length, b.frames.length)\n const maxOffset = Math.max(a.frames.length, b.frames.length) - 1\n let best: VideoFramesCompareDetails = {\n similarity: 0,\n distance: Number.NaN,\n bestOffsetSeconds: 0,\n overlapSeconds: 0,\n }\n const minOverlap = Math.max(2, Math.floor(minLen / 4))\n for (let offset = -maxOffset; offset <= maxOffset; offset++) {\n const aStart = Math.max(0, -offset)\n const bStart = Math.max(0, offset)\n const overlap = Math.min(a.frames.length - aStart, b.frames.length - bStart)\n if (overlap < minOverlap) continue\n let totalBits = 0\n let bitWidth = 0\n for (let i = 0; i < overlap; i++) {\n const ah = a.frames[aStart + i].hash\n const bh = b.frames[bStart + i].hash\n if (ah.length !== bh.length) continue\n totalBits += hammingHex(ah, bh)\n bitWidth += (ah.length / 2) * 8\n }\n if (bitWidth === 0) continue\n const similarity = 1 - totalBits / bitWidth\n if (similarity > best.similarity) {\n best = {\n similarity,\n distance: totalBits,\n bestOffsetSeconds: offset / fps,\n overlapSeconds: overlap / fps,\n }\n }\n }\n return best\n}\n\nfunction parseFps(options: Record<string, unknown> | undefined): number {\n const raw = options?.fps\n if (raw === undefined) return DEFAULT_FPS\n const value = typeof raw === 'string' ? Number.parseFloat(raw) : Number(raw)\n if (!Number.isFinite(value) || value <= 0 || value > 60) {\n const display = typeof raw === 'string' || typeof raw === 'number' ? String(raw) : '<non-scalar>'\n throw new RangeError(`Invalid --fps ${display}: expected a number in (0, 60].`)\n }\n return value\n}\n\nfunction parseFrameAlgorithm(options: Record<string, unknown> | undefined): FrameAlgorithmName {\n const raw = options?.frameAlgorithm\n if (raw === undefined) return DEFAULT_FRAME_ALGORITHM\n if (typeof raw !== 'string' || !(SUPPORTED_FRAME_ALGORITHMS as readonly string[]).includes(raw)) {\n const display = typeof raw === 'string' ? raw : `<${typeof raw}>`\n throw new RangeError(`Invalid --frame-algorithm ${display}: expected one of ${SUPPORTED_FRAME_ALGORITHMS.join(', ')}.`)\n }\n return raw as FrameAlgorithmName\n}\n\nexport const videoFramesAlgorithm: Algorithm = {\n name: 'video-frames',\n family: 'video',\n inputType: 'video',\n requires: [FFMPEG_BIN],\n async hash(input) {\n const fps = parseFps(input.options)\n const frameAlgorithm = parseFrameAlgorithm(input.options)\n const fp = input.path === undefined\n ? input.bytes === undefined\n ? null\n : await withTempfile(input.bytes, 'video.bin', async path => await fingerprintVideo(path, fps, frameAlgorithm))\n : await fingerprintVideo(input.path, fps, frameAlgorithm)\n if (fp === null) {\n throw new Error('video-frames requires bytes or a path.')\n }\n return JSON.stringify(fp)\n },\n async compare(a, b) {\n const fpA = parseVideoFramesHash(a)\n const fpB = parseVideoFramesHash(b)\n if (fpA.frameAlgorithm !== fpB.frameAlgorithm) {\n throw new Error(`Cannot compare video-frames hashes with different frame algorithms (${fpA.frameAlgorithm} vs ${fpB.frameAlgorithm}).`)\n }\n const result = compareFrameSequences(fpA, fpB)\n return {\n similarity: result.similarity,\n distance: Number.isFinite(result.distance) ? result.distance : undefined,\n metric: `frame-sequence-${fpA.frameAlgorithm}@${fpA.fps}fps`,\n }\n },\n}\n","import { ObjectHasher } from '@xyo-network/hash'\n\nimport type { Algorithm } from './types.ts'\n\nexport const xyoAlgorithm: Algorithm = {\n name: 'xyo',\n family: 'strict',\n inputType: 'bytes',\n async hash(input) {\n if (input.bytes === undefined) {\n throw new Error('xyo requires loaded bytes.')\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(input.bytes.toString('utf8'))\n } catch {\n throw new Error('xyo requires valid JSON input.')\n }\n return await ObjectHasher.hash(parsed as Record<string, unknown>)\n },\n async compare(a, b) {\n return {\n similarity: a === b ? 1 : 0,\n distance: a === b ? 0 : 1,\n metric: 'exact-match',\n }\n },\n}\n","import { blockhashAlgorithm } from './blockhash.ts'\nimport { chromaprintAlgorithm } from './chromaprint.ts'\nimport { dhashAlgorithm } from './dhash.ts'\nimport { nilsimsaAlgorithm } from './nilsimsa.ts'\nimport { pdqAlgorithm } from './pdq.ts'\nimport { phashAlgorithm } from './phash.ts'\nimport { sha256Algorithm } from './sha256.ts'\nimport { ssdeepAlgorithm } from './ssdeep.ts'\nimport { tlshAlgorithm } from './tlsh.ts'\nimport type { Algorithm } from './types.ts'\nimport { videoFramesAlgorithm } from './videoFrames.ts'\nimport { xyoAlgorithm } from './xyo.ts'\n\nconst REGISTRY: ReadonlyMap<string, Algorithm> = new Map([\n sha256Algorithm,\n xyoAlgorithm,\n tlshAlgorithm,\n nilsimsaAlgorithm,\n ssdeepAlgorithm,\n phashAlgorithm,\n dhashAlgorithm,\n blockhashAlgorithm,\n pdqAlgorithm,\n chromaprintAlgorithm,\n videoFramesAlgorithm,\n].map(algo => [algo.name, algo]))\n\nexport function getAlgorithm(name: string): Algorithm {\n const algo = REGISTRY.get(name)\n if (algo === undefined) {\n const known = [...REGISTRY.keys()].join(', ')\n throw new Error(`Unknown algorithm '${name}'. Known: ${known}`)\n }\n return algo\n}\n\nexport function listAlgorithms(): readonly string[] {\n return [...REGISTRY.keys()]\n}\n\nexport type {\n Algorithm, AlgorithmFamily, AlgorithmInputType, CompareResult, HashInput,\n} from './types.ts'\n","import { getAlgorithm } from './algorithms/index.ts'\nimport type { CompareResult } from './algorithms/types.ts'\n\nexport interface CompareOptions {\n algorithm: string\n hashA: string\n hashB: string\n}\n\nexport async function compareHashes(options: CompareOptions): Promise<CompareResult> {\n const algo = getAlgorithm(options.algorithm)\n if (algo.compare === undefined) {\n throw new Error(`Algorithm '${algo.name}' does not support comparison.`)\n }\n return await algo.compare(options.hashA, options.hashB)\n}\n","import { readFile } from 'node:fs/promises'\n\nimport { getAlgorithm } from './algorithms/index.ts'\nimport type { Algorithm } from './algorithms/types.ts'\n\nexport interface HashOptions {\n algorithm: string\n base64: boolean\n file?: string\n string?: string\n /** Convenience flag: when true, force algorithm 'xyo' regardless of `algorithm`. */\n xyo?: boolean\n /** Algorithm-specific options forwarded to the algorithm (e.g. `{ fps: 2 }`). */\n algorithmOptions?: Record<string, unknown>\n}\n\nexport async function hashInput(options: HashOptions): Promise<string> {\n if (options.string !== undefined && options.file !== undefined) {\n throw new Error('Cannot use both --string and a file path.')\n }\n\n const name = options.xyo === true ? 'xyo' : options.algorithm\n const algo = getAlgorithm(name)\n\n const result = await runAlgorithm(algo, options)\n return options.base64 ? toBase64IfHex(result) : result\n}\n\nasync function runAlgorithm(algo: Algorithm, options: HashOptions): Promise<string> {\n const algorithmOptions = options.algorithmOptions\n switch (algo.inputType) {\n case 'bytes': {\n const bytes = await readBytes(options)\n return await algo.hash({ bytes, options: algorithmOptions })\n }\n case 'image':\n case 'audio':\n case 'video': {\n // Path-preferred algorithms: pass the path directly when we have one;\n // otherwise materialize stdin/string bytes into the algorithm via `bytes`\n // (each algo handles tempfile fallback when its underlying lib needs a path).\n if (options.file !== undefined) {\n return await algo.hash({ path: options.file, options: algorithmOptions })\n }\n const bytes = await readBytes(options)\n return await algo.hash({ bytes, options: algorithmOptions })\n }\n }\n}\n\nasync function readBytes(options: HashOptions): Promise<Buffer> {\n if (options.string !== undefined) return Buffer.from(options.string, 'utf8')\n if (options.file !== undefined) return await readFile(options.file)\n if (process.stdin.isTTY) {\n throw new Error('No input provided. Pass a file path, --string, or pipe input via stdin.')\n }\n return await readStdin()\n}\n\nasync function readStdin(): Promise<Buffer> {\n const chunks: Buffer[] = []\n const stream: NodeJS.ReadableStream = process.stdin\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))\n }\n return Buffer.concat(chunks)\n}\n\n/**\n * Re-encode a hex hash as base64; passes non-hex output through unchanged\n * (e.g. tlsh / nilsimsa / structured fingerprints aren't necessarily hex).\n */\nfunction toBase64IfHex(hash: string): string {\n if (hash.length % 2 === 0 && /^[0-9a-fA-F]+$/.test(hash)) {\n return Buffer.from(hash, 'hex').toString('base64')\n }\n return hash\n}\n","import type { CommandModule } from 'yargs'\n\nimport { compareHashes } from '../actions/hash/compareHashes.ts'\n\nexport const hashCompareCommand: CommandModule = {\n command: 'compare <hashA> <hashB>',\n describe: 'Compare two hashes produced by `aries hash`',\n builder: yargs =>\n yargs\n .positional('hashA', {\n type: 'string',\n demandOption: true,\n describe: 'First hash',\n })\n .positional('hashB', {\n type: 'string',\n demandOption: true,\n describe: 'Second hash',\n })\n .option('algorithm', {\n alias: 'a',\n type: 'string',\n demandOption: true,\n describe: 'Algorithm that produced the hashes',\n })\n .option('json', {\n type: 'boolean',\n default: false,\n describe: 'Print full result as JSON',\n })\n .example('$0 hash compare <hashA> <hashB> -a tlsh', String.raw`Compare two TLSH hashes (text output: similarity\\tmetric\\tdistance)`)\n .example('$0 hash compare <hashA> <hashB> -a pdq --json', 'Full JSON result for two PDQ hashes')\n .example('$0 hash compare \"$(cat a.fp.json)\" \"$(cat b.fp.json)\" -a video-frames', 'Compare two video-frames JSON fingerprints')\n .epilogue(String.raw`Output format (plain): <similarity 0..1>\\t<metric>[\\tdistance=<n>]. Compare needs only the hash strings — works across machines.`),\n handler: async (argv) => {\n try {\n const result = await compareHashes({\n algorithm: argv.algorithm as string,\n hashA: argv.hashA as string,\n hashB: argv.hashB as string,\n })\n if (argv.json === true) {\n console.log(JSON.stringify(result))\n } else {\n const distancePart = result.distance === undefined ? '' : `\\tdistance=${result.distance}`\n console.log(`${result.similarity.toFixed(4)}\\t${result.metric}${distancePart}`)\n }\n } catch (error) {\n console.error((error as Error).message)\n process.exitCode = 1\n }\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { listAlgorithms } from '../actions/hash/algorithms/index.ts'\nimport { hashInput } from '../actions/hash/index.ts'\nimport { hashCompareCommand } from './hashCompareCommand.ts'\n\nconst ALGORITHMS = listAlgorithms()\n\nexport const hashCommand: CommandModule = {\n command: 'hash [file]',\n describe: 'Generate a hash of a file, string, or piped stdin (sha256, xyo, fuzzy, perceptual)',\n builder: yargs =>\n yargs\n .command(hashCompareCommand)\n .positional('file', {\n describe: 'Path to file to hash',\n type: 'string',\n })\n .option('algorithm', {\n alias: 'a',\n type: 'string',\n default: 'sha256',\n choices: ALGORITHMS,\n describe: 'Hash algorithm to use',\n })\n .option('string', {\n alias: 's',\n type: 'string',\n describe: 'Hash this string instead of a file/stdin',\n })\n .option('xyo', {\n alias: 'x',\n type: 'boolean',\n default: false,\n describe: 'Shortcut for --algorithm xyo (input must be JSON)',\n })\n .option('base64', {\n type: 'boolean',\n default: false,\n describe: 'Output as base64 (only meaningful for hex-output algorithms)',\n })\n .option('fps', {\n type: 'number',\n describe: 'Frames per second to sample (video-frames only; default 1)',\n })\n .option('frame-algorithm', {\n type: 'string',\n choices: ['phash', 'pdq'] as const,\n describe: 'Per-frame hash algorithm (video-frames only; default phash)',\n })\n .example('$0 hash ./payload.json', 'SHA-256 of a file')\n .example('$0 hash --string \"hello\"', 'SHA-256 of a string')\n .example('echo hello | $0 hash', 'SHA-256 from piped stdin')\n .example('$0 hash --xyo ./payload.json', 'XYO canonical-JSON hash (key-order-independent)')\n .example('$0 hash -a tlsh ./binary.exe', 'TLSH byte-fuzzy hash (≥50 bytes input)')\n .example('$0 hash -a pdq ./photo.jpg', '256-bit Meta PDQ image hash via WASM')\n .example('$0 hash -a chromaprint ./song.mp3', 'Chromaprint audio fingerprint (needs fpcalc)')\n .example('$0 hash -a video-frames --fps 1 ./movie.mkv', 'Video frame-pHash sequence (needs ffmpeg)')\n .example('$0 hash -a video-frames --fps 1 --frame-algorithm pdq ./movie.mkv', 'vPDQ-style: per-frame PDQ instead of pHash')\n .epilogue('See `aries hash compare --help` to compare two hashes. Full reference: https://github.com/xylabs/ariestools/blob/main/packages/aries/README.md'),\n handler: async (argv) => {\n try {\n const algorithmOptions: Record<string, unknown> = {}\n if (argv.fps !== undefined) algorithmOptions.fps = argv.fps\n if (argv['frame-algorithm'] !== undefined) algorithmOptions.frameAlgorithm = argv['frame-algorithm']\n const result = await hashInput({\n algorithm: argv.algorithm as string,\n algorithmOptions,\n base64: argv.base64 as boolean,\n file: argv.file as string | undefined,\n string: argv.string as string | undefined,\n xyo: argv.xyo as boolean,\n })\n console.log(result)\n } catch (error) {\n console.error((error as Error).message)\n process.exitCode = 1\n }\n },\n}\n","import chalk from 'chalk'\n\nexport function printVersion(): void {\n console.log(chalk.cyan('ariestools'))\n console.log(` Node: ${process.version}`)\n console.log(` Platform: ${process.platform}`)\n console.log(` Arch: ${process.arch}`)\n}\n","import chalk from 'chalk'\n\nimport { upsertAddressBookEntry } from '../addressBook/storage.ts'\nimport { deriveAccount, getActiveWallet } from './getActiveWallet.ts'\n\nexport interface DeriveAndAddOptions {\n offset: string\n label?: string\n}\n\nexport async function deriveAndAdd(options: DeriveAndAddOptions): Promise<void> {\n const { rootWallet } = await getActiveWallet()\n const account = await deriveAccount(rootWallet, options.offset)\n upsertAddressBookEntry(rootWallet.address, { offset: options.offset, label: options.label })\n console.log(chalk.green(`Derived account at offset ${chalk.cyan(options.offset)}: 0x${account.address}`))\n if (options.label) console.log(chalk.gray(` label: ${options.label}`))\n}\n","import OS from 'node:os'\nimport PATH from 'node:path'\n\nexport interface WalletPaths {\n root: string\n password: string\n phrases: string\n active: string\n addressBooks: string\n contacts: string\n networks: string\n session: string\n machineId: string\n}\n\nexport function walletRoot(): string {\n const override = process.env.ARIES_WALLET_HOME\n if (override) return override\n return PATH.join(OS.homedir(), '.aries', 'wallet')\n}\n\nexport function walletPaths(root: string = walletRoot()): WalletPaths {\n return {\n root,\n password: PATH.join(root, 'password.json'),\n phrases: PATH.join(root, 'phrases.json'),\n active: PATH.join(root, 'active.json'),\n addressBooks: PATH.join(root, 'address-books.json'),\n contacts: PATH.join(root, 'contacts.json'),\n networks: PATH.join(root, 'networks.json'),\n session: PATH.join(root, 'session.json'),\n machineId: PATH.join(root, '.machine-id'),\n }\n}\n","import FS from 'node:fs'\nimport PATH from 'node:path'\n\nimport { walletRoot } from './paths.ts'\n\nexport function ensureWalletDir(root: string = walletRoot()): void {\n if (!FS.existsSync(root)) {\n FS.mkdirSync(root, { recursive: true, mode: 0o700 })\n return\n }\n try {\n FS.chmodSync(root, 0o700)\n } catch {\n // best-effort on platforms without chmod\n }\n}\n\nexport function readJsonFile<T>(file: string): T | undefined {\n if (!FS.existsSync(file)) return undefined\n const raw = FS.readFileSync(file, 'utf8')\n if (raw.trim().length === 0) return undefined\n return JSON.parse(raw) as T\n}\n\nexport function writeJsonFile(file: string, value: unknown): void {\n ensureWalletDir(PATH.dirname(file))\n const tmp = `${file}.tmp`\n FS.writeFileSync(tmp, `${JSON.stringify(value, null, 2)}\\n`, { mode: 0o600 })\n FS.renameSync(tmp, file)\n try {\n FS.chmodSync(file, 0o600)\n } catch {\n // best-effort\n }\n}\n\nexport function deleteFile(file: string): void {\n if (FS.existsSync(file)) FS.unlinkSync(file)\n}\n","import { walletPaths } from '../paths.ts'\nimport { readJsonFile, writeJsonFile } from '../storage.ts'\n\nexport interface AddressBookEntry {\n offset: string\n label?: string\n}\n\nexport interface AddressBook {\n entries: AddressBookEntry[]\n rootAddress: string\n version: number\n}\n\nexport type AddressBooksFile = Record<string, AddressBook>\n\nconst ADDRESS_BOOK_VERSION = 1\n\nexport function readAllAddressBooks(): AddressBooksFile {\n return readJsonFile<AddressBooksFile>(walletPaths().addressBooks) ?? {}\n}\n\nexport function writeAllAddressBooks(data: AddressBooksFile): void {\n writeJsonFile(walletPaths().addressBooks, data)\n}\n\nexport function readAddressBook(rootAddress: string): AddressBook {\n const all = readAllAddressBooks()\n const key = rootAddress.toLowerCase()\n return all[key] ?? {\n rootAddress: key,\n entries: [{ offset: '0' }, { offset: '1' }, { offset: '2' }],\n version: ADDRESS_BOOK_VERSION,\n }\n}\n\nexport function writeAddressBook(book: AddressBook): void {\n const all = readAllAddressBooks()\n all[book.rootAddress.toLowerCase()] = book\n writeAllAddressBooks(all)\n}\n\nexport function removeAddressBook(rootAddress: string): void {\n const all = readAllAddressBooks()\n const key = rootAddress.toLowerCase()\n if (key in all) {\n delete all[key]\n writeAllAddressBooks(all)\n }\n}\n\nexport function upsertAddressBookEntry(rootAddress: string, entry: AddressBookEntry): AddressBook {\n const book = readAddressBook(rootAddress)\n const existing = book.entries.find(e => e.offset === entry.offset)\n if (existing) {\n if (entry.label !== undefined) existing.label = entry.label\n } else {\n book.entries.push(entry)\n }\n writeAddressBook(book)\n return book\n}\n\nexport function removeAddressBookEntry(rootAddress: string, offset: string): AddressBook {\n const book = readAddressBook(rootAddress)\n book.entries = book.entries.filter(e => e.offset !== offset)\n writeAddressBook(book)\n return book\n}\n","import { HDWallet } from '@xyo-network/sdk-js'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport { DEFAULT_WALLET_PATH } from '@xyo-network/xl1-protocol-sdk'\n\nimport { getActiveKey } from '../password/getActiveKey.ts'\nimport { decryptWithKey } from '../passwordKey.ts'\nimport { getActivePhrase } from '../seedPhrase/phraseStorage.ts'\nimport type { SeedPhraseRecord } from '../seedPhrase/types.ts'\n\nexport interface ActiveWallet {\n record: SeedPhraseRecord\n mnemonic: string\n rootWallet: WalletInstance\n}\n\nexport async function getActiveWallet(): Promise<ActiveWallet> {\n const record = getActivePhrase()\n if (!record) throw new Error('No active wallet. Run `aries wallet create` or `aries wallet import` first.')\n const key = await getActiveKey()\n const mnemonic = await decryptWithKey(key, record.encryptedPhrase)\n const rootWallet = await HDWallet.fromPhrase(mnemonic, DEFAULT_WALLET_PATH)\n return {\n record, mnemonic, rootWallet,\n }\n}\n\nexport async function deriveAccount(rootWallet: WalletInstance, offset: string): Promise<WalletInstance> {\n return await rootWallet.derivePath(offset)\n}\n","import { execFileSync } from 'node:child_process'\nimport {\n closeSync, openSync, readSync, writeSync,\n} from 'node:fs'\n\nconst CTRL_C = 0x03\nconst ENTER = 0x0d\nconst NEWLINE = 0x0a\nconst BACKSPACE_DELETE = 0x7f\nconst BACKSPACE = 0x08\n\nexport interface PromptOptions {\n prompt: string\n mask?: boolean\n}\n\nfunction readChars(readFd: number, writeFd: number, mask: boolean): string {\n const chars: number[] = []\n const buf = Buffer.alloc(1)\n for (;;) {\n const bytes = readSync(readFd, buf, 0, 1, null)\n if (bytes === 0) break\n const ch = buf[0]\n if (ch === ENTER || ch === NEWLINE) break\n if (ch === CTRL_C) {\n writeSync(writeFd, '\\n')\n throw new Error('Aborted')\n }\n if (ch === BACKSPACE_DELETE || ch === BACKSPACE) {\n if (chars.length > 0) {\n chars.pop()\n writeSync(writeFd, '\\b \\b')\n }\n continue\n }\n chars.push(ch)\n writeSync(writeFd, mask ? '*' : String.fromCodePoint(ch))\n }\n writeSync(writeFd, '\\n')\n return Buffer.from(chars).toString('utf8')\n}\n\nfunction saveStty(readFd: number): string | undefined {\n try {\n return execFileSync('stty', ['-g'], {\n stdio: [readFd, 'pipe', 'ignore'],\n encoding: 'utf8',\n }).trim()\n } catch {\n return undefined\n }\n}\n\nfunction applyStty(readFd: number, args: string[]): void {\n try {\n execFileSync('stty', args, { stdio: [readFd, 'ignore', 'ignore'] })\n } catch { /* ignore */ }\n}\n\nexport function promptTty(options: PromptOptions): string {\n const readFd = openSync('/dev/tty', 'r')\n const writeFd = openSync('/dev/tty', 'w')\n const saved = saveStty(readFd)\n try {\n if (saved) applyStty(readFd, ['-echo', '-icanon', 'min', '1', 'time', '0'])\n writeSync(writeFd, options.prompt)\n return readChars(readFd, writeFd, options.mask === true)\n } finally {\n if (saved) applyStty(readFd, [saved])\n try {\n closeSync(readFd)\n } catch { /* ignore */ }\n try {\n closeSync(writeFd)\n } catch { /* ignore */ }\n }\n}\n\nexport function promptPassword(prompt = 'Password: '): string {\n const env = process.env.ARIES_WALLET_PASSWORD\n if (env !== undefined && env.length > 0) return env\n return promptTty({ prompt, mask: true })\n}\n\nexport function promptText(prompt: string): string {\n return promptTty({ prompt, mask: false })\n}\n\nexport function confirm(prompt: string): boolean {\n const answer = promptTty({ prompt: `${prompt} [y/N] `, mask: false }).trim().toLowerCase()\n return answer === 'y' || answer === 'yes'\n}\n","import { webcrypto } from 'node:crypto'\n\nimport {\n decryptWithKey, encryptWithKey, PasswordKey,\n} from '../passwordKey.ts'\nimport { walletPaths } from '../paths.ts'\nimport {\n deleteFile, readJsonFile, writeJsonFile,\n} from '../storage.ts'\nimport { deriveMachineKey } from './machineId.ts'\n\ninterface SessionData {\n encryptedKey: string\n expiresAt: number\n}\n\nconst subtle = webcrypto.subtle\n\nexport const DEFAULT_SESSION_TTL_SECONDS = 15 * 60\n\nexport async function unlockSession(passwordKey: webcrypto.CryptoKey, ttlSeconds: number = DEFAULT_SESSION_TTL_SECONDS): Promise<number> {\n const machineKey = await deriveMachineKey()\n const exported = await subtle.exportKey('raw', passwordKey)\n const exportedBase64 = Buffer.from(new Uint8Array(exported)).toString('base64')\n const encryptedKey = await encryptWithKey(machineKey, exportedBase64)\n const expiresAt = Date.now() + ttlSeconds * 1000\n const data: SessionData = { encryptedKey, expiresAt }\n writeJsonFile(walletPaths().session, data)\n return expiresAt\n}\n\nexport function lockSession(): void {\n deleteFile(walletPaths().session)\n}\n\nexport async function readSession(): Promise<webcrypto.CryptoKey | undefined> {\n const data = readJsonFile<SessionData>(walletPaths().session)\n if (!data) return undefined\n if (data.expiresAt <= Date.now()) {\n lockSession()\n return undefined\n }\n try {\n const machineKey = await deriveMachineKey()\n const exportedBase64 = await decryptWithKey(machineKey, data.encryptedKey)\n const raw = Buffer.from(exportedBase64, 'base64')\n return await PasswordKey.importExtractableKey(\n raw.buffer.slice(raw.byteOffset, raw.byteOffset + raw.byteLength),\n )\n } catch {\n lockSession()\n return undefined\n }\n}\n\nexport function readSessionExpiry(): number | undefined {\n const data = readJsonFile<SessionData>(walletPaths().session)\n if (!data) return undefined\n if (data.expiresAt <= Date.now()) return undefined\n return data.expiresAt\n}\n","import { webcrypto } from 'node:crypto'\n\nconst subtle = webcrypto.subtle\n\nconst INITIALIZATION_VECTOR_LENGTH = 12\nconst PBKDF2_ITERATIONS = 100_000\nconst SALT_BYTES = 16\n\nexport interface PasswordValues {\n hash: string\n salt: string\n}\n\nexport class PasswordKey {\n readonly password: string\n readonly salt: string\n\n constructor(password: string, salt: string = PasswordKey.generateSalt()) {\n this.password = password\n this.salt = salt\n }\n\n static async decryptString(key: webcrypto.CryptoKey, data: string): Promise<string> {\n const encryptedData = new Uint8Array(Buffer.from(data, 'base64'))\n const iv = encryptedData.slice(0, INITIALIZATION_VECTOR_LENGTH)\n const ciphertext = encryptedData.slice(INITIALIZATION_VECTOR_LENGTH)\n const decrypted = await subtle.decrypt({ name: 'AES-GCM', iv }, key, ciphertext)\n return new TextDecoder('utf-8').decode(decrypted)\n }\n\n static async encryptString(key: webcrypto.CryptoKey, data: string): Promise<string> {\n const iv = webcrypto.getRandomValues(new Uint8Array(INITIALIZATION_VECTOR_LENGTH))\n const ciphertext = await subtle.encrypt({ name: 'AES-GCM', iv }, key, new TextEncoder().encode(data))\n const combined = new Uint8Array(iv.length + ciphertext.byteLength)\n combined.set(iv, 0)\n combined.set(new Uint8Array(ciphertext), iv.length)\n return Buffer.from(combined).toString('base64')\n }\n\n static generateSalt(): string {\n const array = new Uint8Array(SALT_BYTES)\n webcrypto.getRandomValues(array)\n return [...array].map(byte => byte.toString(16).padStart(2, '0')).join('')\n }\n\n static async getHashFromKey(key: webcrypto.CryptoKey): Promise<string> {\n const exported = await subtle.exportKey('raw', key)\n const digest = await subtle.digest('SHA-256', exported)\n return [...new Uint8Array(digest)].map(byte => byte.toString(16).padStart(2, '0')).join('')\n }\n\n static async importEncryptionKey(rawKey: ArrayBuffer): Promise<webcrypto.CryptoKey> {\n return await subtle.importKey('raw', rawKey, { name: 'AES-GCM' }, false, ['encrypt', 'decrypt'])\n }\n\n static async importExtractableKey(rawKey: ArrayBuffer): Promise<webcrypto.CryptoKey> {\n return await subtle.importKey('raw', rawKey, { name: 'AES-GCM' }, true, ['encrypt', 'decrypt'])\n }\n\n static async serializeKey(key: webcrypto.CryptoKey, salt: string = PasswordKey.generateSalt()): Promise<PasswordValues> {\n const hash = await PasswordKey.getHashFromKey(key)\n return { hash, salt }\n }\n\n async deriveKey(): Promise<webcrypto.CryptoKey> {\n const encoder = new TextEncoder()\n const passphraseKey = await subtle.importKey(\n 'raw',\n encoder.encode(this.password),\n { name: 'PBKDF2' },\n false,\n ['deriveKey'],\n )\n return await subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: encoder.encode(this.salt),\n iterations: PBKDF2_ITERATIONS,\n hash: 'SHA-256',\n },\n passphraseKey,\n { name: 'AES-GCM', length: 256 },\n true,\n ['encrypt', 'decrypt'],\n )\n }\n}\n\nexport async function encryptWithKey(key: webcrypto.CryptoKey, data: string): Promise<string> {\n const exported = await subtle.exportKey('raw', key)\n const encKey = await PasswordKey.importEncryptionKey(exported)\n return await PasswordKey.encryptString(encKey, data)\n}\n\nexport async function decryptWithKey(key: webcrypto.CryptoKey, data: string): Promise<string> {\n const exported = await subtle.exportKey('raw', key)\n const encKey = await PasswordKey.importEncryptionKey(exported)\n return await PasswordKey.decryptString(encKey, data)\n}\n","import { webcrypto } from 'node:crypto'\nimport FS from 'node:fs'\nimport OS from 'node:os'\n\nimport { PasswordKey } from '../passwordKey.ts'\nimport { walletPaths } from '../paths.ts'\nimport { ensureWalletDir } from '../storage.ts'\n\nfunction generateMachineSecret(): string {\n const bytes = new Uint8Array(32)\n webcrypto.getRandomValues(bytes)\n return [...bytes].map(b => b.toString(16).padStart(2, '0')).join('')\n}\n\nexport function loadMachineSecret(): string {\n ensureWalletDir()\n const path = walletPaths().machineId\n if (FS.existsSync(path)) {\n return FS.readFileSync(path, 'utf8').trim()\n }\n const secret = generateMachineSecret()\n FS.writeFileSync(path, `${secret}\\n`, { mode: 0o600 })\n try {\n FS.chmodSync(path, 0o600)\n } catch { /* best-effort */ }\n return secret\n}\n\nexport async function deriveMachineKey(): Promise<webcrypto.CryptoKey> {\n const secret = loadMachineSecret()\n const stable = `${OS.hostname()}:${OS.userInfo().username}:${secret}`\n const passwordKey = new PasswordKey(stable, 'aries-wallet-machine-kek-v1')\n return await passwordKey.deriveKey()\n}\n","import type { PasswordValues } from '../passwordKey.ts'\nimport { walletPaths } from '../paths.ts'\nimport { readJsonFile, writeJsonFile } from '../storage.ts'\n\nexport function readPassword(): PasswordValues | undefined {\n return readJsonFile<PasswordValues>(walletPaths().password)\n}\n\nexport function writePassword(values: PasswordValues): void {\n writeJsonFile(walletPaths().password, values)\n}\n\nexport function hasPassword(): boolean {\n return readPassword() !== undefined\n}\n","import type { webcrypto } from 'node:crypto'\n\nimport { PasswordKey } from '../passwordKey.ts'\nimport { readPassword } from './passwordStorage.ts'\n\nexport async function validatePassword(password: string): Promise<webcrypto.CryptoKey | undefined> {\n const stored = readPassword()\n if (!stored) return undefined\n const passwordKey = new PasswordKey(password, stored.salt)\n const key = await passwordKey.deriveKey()\n const hash = await PasswordKey.getHashFromKey(key)\n if (hash !== stored.hash) return undefined\n return key\n}\n","import type { webcrypto } from 'node:crypto'\n\nimport { promptPassword } from '../prompt.ts'\nimport { readSession } from '../session/sessionCache.ts'\nimport { hasPassword } from './passwordStorage.ts'\nimport { validatePassword } from './validatePassword.ts'\n\nexport async function getActiveKey(): Promise<webcrypto.CryptoKey> {\n if (!hasPassword()) {\n throw new Error('Wallet not initialized. Run `aries wallet create` or `aries wallet import` first.')\n }\n const cached = await readSession()\n if (cached) return cached\n const password = promptPassword('Wallet password: ')\n const key = await validatePassword(password)\n if (!key) throw new Error('Incorrect password.')\n return key\n}\n","import { walletPaths } from '../paths.ts'\nimport { readJsonFile, writeJsonFile } from '../storage.ts'\nimport type {\n ActiveFile, PhrasesFile, SeedPhraseRecord,\n} from './types.ts'\n\nexport function readPhrases(): SeedPhraseRecord[] {\n const data = readJsonFile<PhrasesFile>(walletPaths().phrases)\n return data?.phrases ?? []\n}\n\nexport function writePhrases(phrases: SeedPhraseRecord[]): void {\n writeJsonFile(walletPaths().phrases, { phrases })\n}\n\nexport function readActive(): ActiveFile {\n return readJsonFile<ActiveFile>(walletPaths().active) ?? {}\n}\n\nexport function writeActive(active: ActiveFile): void {\n writeJsonFile(walletPaths().active, active)\n}\n\nexport function findPhrase(id: string): SeedPhraseRecord | undefined {\n return readPhrases().find(p => p.id === id || p.label === id)\n}\n\nexport function getActivePhrase(): SeedPhraseRecord | undefined {\n const phrases = readPhrases()\n if (phrases.length === 0) return undefined\n const active = readActive()\n if (active.phraseId) {\n const found = phrases.find(p => p.id === active.phraseId)\n if (found) return found\n }\n return phrases[0]\n}\n","import chalk from 'chalk'\n\nimport { upsertAddressBookEntry } from '../addressBook/storage.ts'\nimport { getActiveWallet } from './getActiveWallet.ts'\n\nexport async function labelAccount(offset: string, label: string): Promise<void> {\n const { rootWallet } = await getActiveWallet()\n upsertAddressBookEntry(rootWallet.address, { offset, label })\n console.log(chalk.green(`Labeled account ${chalk.cyan(offset)} as ${chalk.white(label)}`))\n}\n","import chalk from 'chalk'\n\nimport { readAddressBook } from '../addressBook/storage.ts'\nimport { deriveAccount, getActiveWallet } from './getActiveWallet.ts'\n\nexport async function listAccounts(): Promise<void> {\n const { record, rootWallet } = await getActiveWallet()\n const book = readAddressBook(rootWallet.address)\n console.log(chalk.cyan(`Wallet ${record.label} (${record.id})`))\n console.log(chalk.gray(` root: ${rootWallet.address}`))\n console.log()\n if (book.entries.length === 0) {\n console.log(chalk.gray(' No derived accounts. Run `aries wallet account derive <offset>`.'))\n return\n }\n for (const entry of book.entries) {\n const account = await deriveAccount(rootWallet, entry.offset)\n const offset = chalk.cyan(entry.offset.padEnd(6))\n const label = chalk.white((entry.label ?? '').padEnd(20))\n console.log(` ${offset} ${label} 0x${account.address}`)\n }\n}\n","import chalk from 'chalk'\n\nimport { removeAddressBookEntry } from '../addressBook/storage.ts'\nimport { getActiveWallet } from './getActiveWallet.ts'\n\nexport async function removeAccount(offset: string): Promise<void> {\n const { rootWallet } = await getActiveWallet()\n removeAddressBookEntry(rootWallet.address, offset)\n console.log(chalk.green(`Removed account at offset ${chalk.cyan(offset)} from address book`))\n}\n","import chalk from 'chalk'\n\nimport { readAddressBook } from '../addressBook/storage.ts'\nimport { deriveAccount, getActiveWallet } from './getActiveWallet.ts'\n\nexport async function showAccount(offset: string): Promise<void> {\n const { rootWallet } = await getActiveWallet()\n const book = readAddressBook(rootWallet.address)\n const entry = book.entries.find(e => e.offset === offset)\n const account = await deriveAccount(rootWallet, offset)\n console.log(chalk.cyan(`Account ${offset}`))\n console.log(` ${chalk.gray('label:')} ${entry?.label ?? '—'}`)\n console.log(` ${chalk.gray('address:')} 0x${account.address}`)\n if (account.public) console.log(` ${chalk.gray('public:')} ${account.public.hex}`)\n console.log(` ${chalk.gray('path:')} ${offset}`)\n}\n","import FS from 'node:fs'\n\nimport chalk from 'chalk'\n\nimport { readAllAddressBooks } from '../addressBook/storage.ts'\nimport { readContacts } from '../contact/storage.ts'\n\nconst SCHEMA = 'network.xyo.wallet.backup'\nconst VERSION = 1\nconst ADDRESS_BOOK_SCHEMA = 'network.xyo.wallet.addressBook'\nconst CONTACTS_SCHEMA = 'network.xyo.wallet.contacts'\n\nexport interface ExportBackupOptions {\n file: string\n}\n\nexport function exportBackup(options: ExportBackupOptions): void {\n const exportedAt = new Date().toISOString()\n const entries: unknown[] = []\n const sources: string[] = []\n\n const addressBooks = readAllAddressBooks()\n for (const book of Object.values(addressBooks)) {\n entries.push({\n ...book,\n schema: ADDRESS_BOOK_SCHEMA,\n exportedAt,\n })\n if (!sources.includes(ADDRESS_BOOK_SCHEMA)) sources.push(ADDRESS_BOOK_SCHEMA)\n }\n\n const contacts = readContacts()\n if (contacts.entries.length > 0) {\n entries.push({\n ...contacts,\n schema: CONTACTS_SCHEMA,\n exportedAt,\n })\n sources.push(CONTACTS_SCHEMA)\n }\n\n const backup = {\n schema: SCHEMA,\n version: VERSION,\n entries,\n exportedAt,\n sources,\n }\n FS.writeFileSync(options.file, `${JSON.stringify(backup, null, 2)}\\n`, { mode: 0o600 })\n console.log(chalk.green(`Backup written to ${options.file}`))\n console.log(chalk.gray(` ${entries.length} entries, sources: ${sources.join(', ')}`))\n}\n","import { walletPaths } from '../paths.ts'\nimport { readJsonFile, writeJsonFile } from '../storage.ts'\n\nexport interface ContactEntry {\n address: string\n label: string\n createdAt: string\n updatedAt: string\n}\n\nexport interface ContactsFile {\n entries: ContactEntry[]\n version: number\n}\n\nconst CONTACTS_VERSION = 1\n\nexport function readContacts(): ContactsFile {\n return readJsonFile<ContactsFile>(walletPaths().contacts) ?? {\n entries: [],\n version: CONTACTS_VERSION,\n }\n}\n\nexport function writeContacts(file: ContactsFile): void {\n writeJsonFile(walletPaths().contacts, file)\n}\n","import FS from 'node:fs'\n\nimport chalk from 'chalk'\n\nimport type { AddressBook } from '../addressBook/storage.ts'\nimport { readAllAddressBooks, writeAllAddressBooks } from '../addressBook/storage.ts'\nimport type { ContactEntry, ContactsFile } from '../contact/storage.ts'\nimport { readContacts, writeContacts } from '../contact/storage.ts'\n\ninterface BackupEntry {\n schema: string\n exportedAt?: string\n}\n\ninterface AddressBookEntryFile extends BackupEntry, AddressBook {\n schema: 'network.xyo.wallet.addressBook'\n}\n\ninterface ContactsEntryFile extends BackupEntry, ContactsFile {\n schema: 'network.xyo.wallet.contacts'\n}\n\ninterface BackupFile {\n schema: string\n version: number\n entries: BackupEntry[]\n exportedAt: string\n sources?: string[]\n}\n\nexport interface ImportBackupOptions {\n file: string\n}\n\nexport function importBackup(options: ImportBackupOptions): void {\n const raw = FS.readFileSync(options.file, 'utf8')\n const parsed = JSON.parse(raw) as BackupFile\n if (parsed.schema !== 'network.xyo.wallet.backup') {\n throw new Error(`Not a wallet backup (schema=${parsed.schema}).`)\n }\n\n const allBooks = readAllAddressBooks()\n let booksImported = 0\n let contactsImported = 0\n const existingContacts = readContacts()\n\n for (const entry of parsed.entries) {\n if (entry.schema === 'network.xyo.wallet.addressBook') {\n const book = entry as AddressBookEntryFile\n const key = book.rootAddress.toLowerCase()\n const merged: AddressBook = allBooks[key]\n ? mergeAddressBooks(allBooks[key], book)\n : {\n rootAddress: key, entries: book.entries, version: book.version,\n }\n allBooks[key] = merged\n booksImported++\n } else if (entry.schema === 'network.xyo.wallet.contacts') {\n const contacts = entry as ContactsEntryFile\n for (const contact of contacts.entries) {\n upsertContact(existingContacts, contact)\n contactsImported++\n }\n }\n }\n\n if (booksImported > 0) writeAllAddressBooks(allBooks)\n if (contactsImported > 0) writeContacts(existingContacts)\n\n console.log(chalk.green(`Imported backup from ${options.file}`))\n console.log(chalk.gray(` address books: ${booksImported}, contacts: ${contactsImported}`))\n}\n\nfunction mergeAddressBooks(existing: AddressBook, incoming: AddressBook): AddressBook {\n const merged: AddressBook = {\n rootAddress: existing.rootAddress,\n version: Math.max(existing.version, incoming.version),\n entries: [...existing.entries],\n }\n for (const entry of incoming.entries) {\n const found = merged.entries.find(e => e.offset === entry.offset)\n if (found) {\n if (entry.label !== undefined) found.label = entry.label\n } else {\n merged.entries.push(entry)\n }\n }\n return merged\n}\n\nfunction upsertContact(file: ContactsFile, contact: ContactEntry): void {\n const normalized = contact.address.toLowerCase()\n const found = file.entries.find(e => e.address.toLowerCase() === normalized)\n if (found) {\n found.label = contact.label\n found.updatedAt = contact.updatedAt\n } else {\n file.entries.push({ ...contact, address: normalized })\n }\n}\n","import { XL1Amount } from '@xyo-network/xl1-protocol-sdk'\nimport chalk from 'chalk'\n\nimport { deriveAccount, getActiveWallet } from '../account/getActiveWallet.ts'\nimport { createReadOnlyClient } from '../client/walletClient.ts'\nimport { getActiveNetwork } from '../network/storage.ts'\n\nexport interface GetBalanceOptions {\n offset?: string\n}\n\nexport async function getBalance(options: GetBalanceOptions = {}): Promise<void> {\n const offset = options.offset ?? '0'\n const { rootWallet } = await getActiveWallet()\n const account = await deriveAccount(rootWallet, offset)\n const network = getActiveNetwork()\n const { viewer } = await createReadOnlyClient(network.rpcUrl)\n const atto = await viewer.account.balance.accountBalance(account.address)\n const display = new XL1Amount(atto).toString()\n console.log(`${chalk.cyan('balance:')} ${display} XL1`)\n console.log(`${chalk.gray('atto:')} ${atto}`)\n console.log(`${chalk.gray('address:')} 0x${account.address}`)\n console.log(`${chalk.gray('network:')} ${network.id} (${network.rpcUrl})`)\n}\n","import type { AccountInstance } from '@xyo-network/sdk-js'\nimport type {\n XyoConnection, XyoGatewayRunner, XyoRunner, XyoViewer,\n} from '@xyo-network/xl1-sdk'\nimport {\n basicRemoteViewerLocator,\n ProviderFactoryLocator,\n SimpleXyoConnectionRunner,\n SimpleXyoGatewayRunner,\n SimpleXyoRunner,\n SimpleXyoSigner,\n XyoGatewayRunnerMoniker,\n XyoRunnerMoniker,\n XyoViewerMoniker,\n} from '@xyo-network/xl1-sdk'\n\ninterface BlockValidatorsRef {\n validateHydratedBlock?: unknown\n validateHydratedBlockState?: unknown\n}\n\nasync function loadValidators(): Promise<BlockValidatorsRef | undefined> {\n try {\n const mod = await import('@xyo-network/chain-validation') as BlockValidatorsRef\n return {\n validateHydratedBlock: mod.validateHydratedBlock,\n validateHydratedBlockState: mod.validateHydratedBlockState,\n }\n } catch {\n return undefined\n }\n}\n\nexport interface WalletClient {\n gateway: XyoGatewayRunner\n runner: XyoRunner\n viewer: XyoViewer\n connection: XyoConnection\n locator: unknown\n}\n\nexport interface ReadOnlyWalletClient {\n viewer: XyoViewer\n locator: unknown\n}\n\nexport async function createReadOnlyClient(rpcUrl: string): Promise<ReadOnlyWalletClient> {\n const validators = await loadValidators()\n const viewerLocator = await basicRemoteViewerLocator(\n 'aries-wallet-readonly',\n { rpc: { protocol: 'http', url: rpcUrl } },\n undefined,\n validators ? { validators: validators as never } : undefined,\n )\n const viewer = await viewerLocator.getInstance<XyoViewer>(XyoViewerMoniker)\n return { viewer, locator: viewerLocator }\n}\n\nexport async function createWalletClient(rpcUrl: string, account: AccountInstance): Promise<WalletClient> {\n const validators = await loadValidators()\n const viewerLocator = await basicRemoteViewerLocator(\n 'aries-wallet',\n { rpc: { protocol: 'http', url: rpcUrl } },\n undefined,\n validators ? { validators: validators as never } : undefined,\n )\n const locator = new ProviderFactoryLocator(viewerLocator.context, {})\n locator.register(SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account }))\n locator.register(SimpleXyoGatewayRunner.factory<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.dependencies, {}))\n locator.register(SimpleXyoRunner.factory<SimpleXyoRunner>(SimpleXyoRunner.dependencies, {}))\n locator.register(SimpleXyoConnectionRunner.factory<SimpleXyoConnectionRunner>(SimpleXyoConnectionRunner.dependencies, {}))\n locator.validateDependencies()\n const gateway = await locator.getInstance<XyoGatewayRunner>(XyoGatewayRunnerMoniker)\n const runner = await locator.getInstance<XyoRunner>(XyoRunnerMoniker)\n const viewer = await locator.getInstance<XyoViewer>(XyoViewerMoniker)\n return {\n gateway,\n runner,\n viewer,\n connection: gateway.connection,\n locator,\n }\n}\n","import { walletPaths } from '../paths.ts'\nimport { readJsonFile, writeJsonFile } from '../storage.ts'\n\nexport interface NetworkRecord {\n id: string\n label: string\n rpcUrl: string\n chainId?: string\n isCustom: boolean\n}\n\nexport interface NetworksFile {\n networks: NetworkRecord[]\n activeId: string\n}\n\nconst DEFAULT_NETWORKS: NetworkRecord[] = [\n {\n id: 'xl1-mainnet',\n label: 'XL1 Mainnet',\n rpcUrl: 'https://node.xyo.network',\n isCustom: false,\n },\n {\n id: 'xl1-testnet',\n label: 'XL1 Testnet',\n rpcUrl: 'https://testnet.node.xyo.network',\n isCustom: false,\n },\n]\n\nexport function readNetworks(): NetworksFile {\n const data = readJsonFile<NetworksFile>(walletPaths().networks)\n if (data) return data\n const seeded: NetworksFile = {\n networks: DEFAULT_NETWORKS,\n activeId: DEFAULT_NETWORKS[0].id,\n }\n writeJsonFile(walletPaths().networks, seeded)\n return seeded\n}\n\nexport function writeNetworks(file: NetworksFile): void {\n writeJsonFile(walletPaths().networks, file)\n}\n\nexport function getActiveNetwork(): NetworkRecord {\n const file = readNetworks()\n const found = file.networks.find(n => n.id === file.activeId)\n if (!found) throw new Error(`Active network ${file.activeId} not found.`)\n return found\n}\n","import chalk from 'chalk'\n\nimport { readContacts, writeContacts } from './storage.ts'\n\nfunction normalize(address: string): string {\n return address.toLowerCase()\n}\n\nexport function listContacts(): void {\n const file = readContacts()\n if (file.entries.length === 0) {\n console.log(chalk.gray('No contacts. Run `aries wallet contact add <address> <label>` to add one.'))\n return\n }\n for (const entry of file.entries) {\n console.log(` ${chalk.white(entry.label.padEnd(20))} ${entry.address}`)\n }\n}\n\nexport function addContact(address: string, label: string): void {\n const file = readContacts()\n const now = new Date().toISOString()\n const normalized = normalize(address)\n const existing = file.entries.find(e => normalize(e.address) === normalized)\n if (existing) {\n existing.label = label\n existing.updatedAt = now\n } else {\n file.entries.push({\n address: normalized, label, createdAt: now, updatedAt: now,\n })\n }\n writeContacts(file)\n console.log(chalk.green(`Saved contact ${chalk.cyan(label)} (${normalized})`))\n}\n\nexport function renameContact(address: string, label: string): void {\n addContact(address, label)\n}\n\nexport function removeContact(address: string): void {\n const file = readContacts()\n const normalized = normalize(address)\n const before = file.entries.length\n file.entries = file.entries.filter(e => normalize(e.address) !== normalized)\n if (file.entries.length === before) throw new Error(`Contact not found: ${address}`)\n writeContacts(file)\n console.log(chalk.green(`Removed contact ${normalized}`))\n}\n","import chalk from 'chalk'\n\nimport type { NetworkRecord } from './storage.ts'\nimport { readNetworks, writeNetworks } from './storage.ts'\n\nexport function listNetworks(): void {\n const file = readNetworks()\n for (const network of file.networks) {\n const marker = network.id === file.activeId ? chalk.green('* ') : ' '\n const id = chalk.cyan(network.id.padEnd(20))\n const label = chalk.white(network.label.padEnd(20))\n const custom = network.isCustom ? chalk.gray('(custom)') : ''\n console.log(`${marker}${id} ${label} ${network.rpcUrl} ${custom}`)\n }\n}\n\nexport function useNetwork(id: string): void {\n const file = readNetworks()\n const found = file.networks.find(n => n.id === id)\n if (!found) throw new Error(`Network not found: ${id}`)\n file.activeId = id\n writeNetworks(file)\n console.log(chalk.green(`Active network set to ${chalk.cyan(id)}`))\n}\n\nexport interface AddNetworkOptions {\n id: string\n rpcUrl: string\n label?: string\n chainId?: string\n}\n\nexport function addNetwork(options: AddNetworkOptions): void {\n const file = readNetworks()\n if (file.networks.some(n => n.id === options.id)) {\n throw new Error(`Network already exists: ${options.id}`)\n }\n const record: NetworkRecord = {\n id: options.id,\n label: options.label ?? options.id,\n rpcUrl: options.rpcUrl,\n chainId: options.chainId,\n isCustom: true,\n }\n file.networks.push(record)\n writeNetworks(file)\n console.log(chalk.green(`Added network ${chalk.cyan(options.id)} (${options.rpcUrl})`))\n}\n\nexport function removeNetwork(id: string): void {\n const file = readNetworks()\n const target = file.networks.find(n => n.id === id)\n if (!target) throw new Error(`Network not found: ${id}`)\n if (!target.isCustom) throw new Error(`Cannot remove built-in network: ${id}`)\n file.networks = file.networks.filter(n => n.id !== id)\n if (file.activeId === id) file.activeId = file.networks[0]?.id ?? ''\n writeNetworks(file)\n console.log(chalk.green(`Removed network ${chalk.cyan(id)}`))\n}\n","import chalk from 'chalk'\n\nimport {\n decryptWithKey, encryptWithKey, PasswordKey,\n} from '../passwordKey.ts'\nimport { promptPassword } from '../prompt.ts'\nimport { readPhrases, writePhrases } from '../seedPhrase/phraseStorage.ts'\nimport { lockSession } from '../session/sessionCache.ts'\nimport { writePassword } from './passwordStorage.ts'\nimport { validatePassword } from './validatePassword.ts'\n\nexport async function changePassword(): Promise<void> {\n const current = promptPassword('Current password: ')\n const oldKey = await validatePassword(current)\n if (!oldKey) throw new Error('Incorrect password.')\n\n const next = promptPassword('New password: ')\n const confirmed = promptPassword('Confirm new password: ')\n if (next !== confirmed) throw new Error('Passwords do not match.')\n if (next.length === 0) throw new Error('Password cannot be empty.')\n\n const salt = PasswordKey.generateSalt()\n const newKey = await new PasswordKey(next, salt).deriveKey()\n\n const phrases = readPhrases()\n for (const phrase of phrases) {\n const mnemonic = await decryptWithKey(oldKey, phrase.encryptedPhrase)\n phrase.encryptedPhrase = await encryptWithKey(newKey, mnemonic)\n }\n writePhrases(phrases)\n writePassword(await PasswordKey.serializeKey(newKey, salt))\n lockSession()\n console.log(chalk.green('Password changed. Re-unlock to start a new session.'))\n}\n","import { HDWallet } from '@xyo-network/sdk-js'\nimport chalk from 'chalk'\n\nimport { initOrUnlock } from '../password/initOrUnlock.ts'\nimport { encryptWithKey } from '../passwordKey.ts'\nimport { generatePhraseId } from './idGen.ts'\nimport {\n readPhrases, writeActive, writePhrases,\n} from './phraseStorage.ts'\nimport type { SeedPhraseRecord } from './types.ts'\n\nexport interface CreatePhraseOptions {\n label: string\n}\n\nexport async function createPhrase(options: CreatePhraseOptions): Promise<SeedPhraseRecord> {\n const key = await initOrUnlock()\n const mnemonic = HDWallet.generateMnemonic()\n const encryptedPhrase = await encryptWithKey(key, mnemonic)\n const record: SeedPhraseRecord = {\n id: generatePhraseId(),\n label: options.label,\n walletKind: 'user',\n encryptedPhrase,\n createdAt: Date.now(),\n }\n const phrases = readPhrases()\n phrases.push(record)\n writePhrases(phrases)\n if (phrases.length === 1) writeActive({ phraseId: record.id })\n console.log(chalk.green(`Created wallet ${chalk.cyan(record.label)} (id ${record.id})`))\n console.log()\n console.log(chalk.yellow('Recovery phrase — write this down and store it safely:'))\n console.log()\n console.log(` ${chalk.white(mnemonic)}`)\n console.log()\n console.log(chalk.gray('You will not be shown this phrase again unless you run `aries wallet export`.'))\n return record\n}\n","import type { webcrypto } from 'node:crypto'\n\nimport { PasswordKey } from '../passwordKey.ts'\nimport { writePassword } from './passwordStorage.ts'\n\nexport interface SetPasswordResult {\n key: webcrypto.CryptoKey\n salt: string\n}\n\nexport async function setPassword(password: string): Promise<SetPasswordResult> {\n if (password.length === 0) throw new Error('Password cannot be empty')\n const salt = PasswordKey.generateSalt()\n const passwordKey = new PasswordKey(password, salt)\n const key = await passwordKey.deriveKey()\n const values = await PasswordKey.serializeKey(key, salt)\n writePassword(values)\n return { key, salt }\n}\n","import type { webcrypto } from 'node:crypto'\n\nimport { promptPassword } from '../prompt.ts'\nimport { getActiveKey } from './getActiveKey.ts'\nimport { hasPassword } from './passwordStorage.ts'\nimport { setPassword } from './setPassword.ts'\n\nexport async function initOrUnlock(): Promise<webcrypto.CryptoKey> {\n if (hasPassword()) return await getActiveKey()\n const fromEnv = process.env.ARIES_WALLET_PASSWORD\n if (fromEnv !== undefined && fromEnv.length > 0) {\n const { key } = await setPassword(fromEnv)\n return key\n }\n const password = promptPassword('Set wallet password: ')\n const confirmed = promptPassword('Confirm password: ')\n if (password !== confirmed) throw new Error('Passwords do not match.')\n const { key } = await setPassword(password)\n return key\n}\n","import { webcrypto } from 'node:crypto'\n\nexport function generatePhraseId(): string {\n const bytes = new Uint8Array(8)\n webcrypto.getRandomValues(bytes)\n return [...bytes].map(b => b.toString(16).padStart(2, '0')).join('')\n}\n","import chalk from 'chalk'\n\nimport { getActiveKey } from '../password/getActiveKey.ts'\nimport { decryptWithKey } from '../passwordKey.ts'\nimport { findPhrase, getActivePhrase } from './phraseStorage.ts'\n\nexport interface ExportPhraseOptions {\n id?: string\n}\n\nexport async function exportPhrase(options: ExportPhraseOptions = {}): Promise<string> {\n const record = options.id ? findPhrase(options.id) : getActivePhrase()\n if (!record) throw new Error('Wallet not found.')\n const key = await getActiveKey()\n const mnemonic = await decryptWithKey(key, record.encryptedPhrase)\n console.log(chalk.yellow(`Recovery phrase for ${chalk.cyan(record.label)} (id ${record.id}):`))\n console.log()\n console.log(` ${chalk.white(mnemonic)}`)\n return mnemonic\n}\n","import { HDWallet } from '@xyo-network/sdk-js'\nimport chalk from 'chalk'\n\nimport { initOrUnlock } from '../password/initOrUnlock.ts'\nimport { encryptWithKey } from '../passwordKey.ts'\nimport { promptText } from '../prompt.ts'\nimport { generatePhraseId } from './idGen.ts'\nimport {\n readPhrases, writeActive, writePhrases,\n} from './phraseStorage.ts'\nimport type { SeedPhraseRecord } from './types.ts'\n\nexport interface ImportPhraseOptions {\n label: string\n phrase?: string\n}\n\nexport async function importPhrase(options: ImportPhraseOptions): Promise<SeedPhraseRecord> {\n const key = await initOrUnlock()\n const mnemonic = (options.phrase ?? promptText('Recovery phrase: ')).trim()\n if (mnemonic.split(/\\s+/).length < 12) {\n throw new Error('Recovery phrase must be at least 12 words.')\n }\n await HDWallet.fromPhrase(mnemonic)\n const encryptedPhrase = await encryptWithKey(key, mnemonic)\n const record: SeedPhraseRecord = {\n id: generatePhraseId(),\n label: options.label,\n walletKind: 'user',\n encryptedPhrase,\n createdAt: Date.now(),\n }\n const phrases = readPhrases()\n phrases.push(record)\n writePhrases(phrases)\n if (phrases.length === 1) writeActive({ phraseId: record.id })\n console.log(chalk.green(`Imported wallet ${chalk.cyan(record.label)} (id ${record.id})`))\n return record\n}\n","import chalk from 'chalk'\n\nimport { readActive, readPhrases } from './phraseStorage.ts'\n\nexport function listPhrases(): void {\n const phrases = readPhrases()\n if (phrases.length === 0) {\n console.log(chalk.gray('No wallets. Run `aries wallet create` or `aries wallet import` to add one.'))\n return\n }\n const active = readActive()\n for (const phrase of phrases) {\n const marker = phrase.id === active.phraseId ? chalk.green('* ') : ' '\n const created = new Date(phrase.createdAt).toISOString()\n console.log(`${marker}${chalk.cyan(phrase.label.padEnd(20))} ${chalk.gray(phrase.id)} ${chalk.gray(created)}`)\n }\n}\n","import { HDWallet } from '@xyo-network/sdk-js'\nimport { DEFAULT_WALLET_PATH } from '@xyo-network/xl1-protocol-sdk'\nimport chalk from 'chalk'\n\nimport { removeAddressBook } from '../addressBook/storage.ts'\nimport { getActiveKey } from '../password/getActiveKey.ts'\nimport { decryptWithKey } from '../passwordKey.ts'\nimport {\n readActive, readPhrases, writeActive, writePhrases,\n} from './phraseStorage.ts'\n\nexport interface RemovePhraseOptions {\n id: string\n}\n\nexport async function removePhrase(options: RemovePhraseOptions): Promise<void> {\n const phrases = readPhrases()\n const target = phrases.find(p => p.id === options.id || p.label === options.id)\n if (!target) throw new Error(`Wallet not found: ${options.id}`)\n try {\n const key = await getActiveKey()\n const mnemonic = await decryptWithKey(key, target.encryptedPhrase)\n const root = await HDWallet.fromPhrase(mnemonic, DEFAULT_WALLET_PATH)\n removeAddressBook(root.address)\n } catch (e) {\n console.warn(chalk.yellow(`Warning: failed to clean up address book: ${(e as Error).message}`))\n }\n const remaining = phrases.filter(p => p.id !== target.id)\n writePhrases(remaining)\n const active = readActive()\n if (active.phraseId === target.id) {\n writeActive({ ...active, phraseId: remaining[0]?.id })\n }\n console.log(chalk.green(`Removed wallet ${chalk.cyan(target.label)} (id ${target.id})`))\n}\n","import chalk from 'chalk'\n\nimport { readPhrases, writePhrases } from './phraseStorage.ts'\n\nexport function renamePhrase(id: string, label: string): void {\n const phrases = readPhrases()\n const target = phrases.find(p => p.id === id || p.label === id)\n if (!target) throw new Error(`Wallet not found: ${id}`)\n target.label = label\n writePhrases(phrases)\n console.log(chalk.green(`Renamed wallet ${target.id} to ${chalk.cyan(label)}`))\n}\n","import chalk from 'chalk'\n\nimport {\n findPhrase, readActive, writeActive,\n} from './phraseStorage.ts'\n\nexport function usePhrase(id: string): void {\n const record = findPhrase(id)\n if (!record) throw new Error(`Wallet not found: ${id}`)\n const active = readActive()\n writeActive({ ...active, phraseId: record.id })\n console.log(chalk.green(`Active wallet set to ${chalk.cyan(record.label)} (id ${record.id})`))\n}\n","import chalk from 'chalk'\n\nimport { hasPassword } from '../password/passwordStorage.ts'\nimport { validatePassword } from '../password/validatePassword.ts'\nimport { promptPassword } from '../prompt.ts'\nimport {\n DEFAULT_SESSION_TTL_SECONDS, lockSession, unlockSession,\n} from './sessionCache.ts'\n\nexport interface UnlockOptions {\n ttl?: number\n}\n\nexport async function unlock(options: UnlockOptions = {}): Promise<void> {\n if (!hasPassword()) {\n throw new Error('Wallet not initialized. Run `aries wallet create` or `aries wallet import` first.')\n }\n const password = promptPassword('Wallet password: ')\n const key = await validatePassword(password)\n if (!key) throw new Error('Incorrect password.')\n const ttl = options.ttl ?? DEFAULT_SESSION_TTL_SECONDS\n const expiresAt = await unlockSession(key, ttl)\n console.log(chalk.green(`Wallet unlocked. Session expires ${new Date(expiresAt).toISOString()}.`))\n}\n\nexport function lock(): void {\n lockSession()\n console.log(chalk.green('Wallet locked.'))\n}\n","import FS from 'node:fs'\n\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport chalk from 'chalk'\n\nimport { deriveAccount, getActiveWallet } from '../account/getActiveWallet.ts'\n\nexport interface SignPayloadOptions {\n file: string\n offset?: string\n output?: string\n}\n\nexport async function signPayload(options: SignPayloadOptions): Promise<void> {\n const offset = options.offset ?? '0'\n const raw = FS.readFileSync(options.file, 'utf8')\n const payload = JSON.parse(raw) as Payload\n if (typeof payload.schema !== 'string' || payload.schema.length === 0) {\n throw new Error('Payload must have a non-empty `schema` string field.')\n }\n const { rootWallet } = await getActiveWallet()\n const account = await deriveAccount(rootWallet, offset)\n const [boundwitness, payloads] = await new BoundWitnessBuilder().payload(payload).signer(account).build()\n const result = { boundwitness, payloads }\n const json = JSON.stringify(result, null, 2)\n if (options.output) {\n FS.writeFileSync(options.output, `${json}\\n`)\n console.log(chalk.green(`Signed payload written to ${options.output}`))\n } else {\n console.log(json)\n }\n}\n","import type {\n Address, Hash, Hex,\n} from '@xylabs/sdk-js'\nimport {\n asAddress, asHash, assertEx,\n hexFromArrayBuffer, toArrayBuffer,\n} from '@xylabs/sdk-js'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type {\n BoundWitness,\n PossiblySigned,\n Signed,\n Unsigned,\n} from '@xyo-network/boundwitness-model'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport {\n ObjectHasher, removeEmptyFields, sortFields,\n} from '@xyo-network/hash'\nimport type { PayloadBuilderOptions } from '@xyo-network/payload-builder'\nimport { omitSchema, PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n ModuleError, Payload, Schema,\n WithoutClientMeta,\n WithoutMeta,\n WithoutSchema,\n WithoutStorageMeta,\n} from '@xyo-network/payload-model'\nimport { Mutex } from 'async-mutex'\n\nimport { GeneratedBoundWitnessFields } from './GeneratedBoundWitnessFields.ts'\nimport { uniqueAccounts } from './uniqueAccounts.ts'\n\nexport class BoundWitnessBuilder<\n TBoundWitness extends BoundWitness = BoundWitness,\n TPayload extends Payload = Payload>\n extends PayloadBuilder<\n TBoundWitness,\n Promise<[PossiblySigned<TBoundWitness>, TPayload[], ModuleError[]]>\n > {\n private static readonly _buildMutex = new Mutex()\n\n private _accounts: AccountInstance[] = []\n private _errorHashes?: Hash[]\n private _errors: ModuleError[] = []\n private _payloadHashes?: Hash[]\n private _payloadSchemas?: Schema[]\n private _payloads: TPayload[] = []\n\n constructor(options?: Omit<PayloadBuilderOptions, 'schema'>) {\n super({ ...options, schema: BoundWitnessSchema })\n }\n\n protected get addresses(): Address[] {\n uniqueAccounts(this._accounts, true)\n return this._accounts.map(account => account.address.toLowerCase()) as Address[]\n }\n\n protected get payloadSchemas(): string[] {\n return (\n this._payloadSchemas\n ?? this._payloads.map((payload) => {\n return assertEx(payload.schema, () => this.missingSchemaMessage(payload))\n })\n )\n }\n\n protected get previousHashBytes(): (ArrayBufferLike | null)[] {\n return this._accounts.map(account => account.previousHashBytes ?? null)\n }\n\n protected get previousHashes(): (Hash | null)[] {\n return this._accounts.map(account => account.previousHash ?? null)\n }\n\n static addressIndex<T extends BoundWitness>(payload: T, address: Address) {\n const index = payload.addresses.indexOf(address)\n if (index === -1) {\n throw new Error('Invalid address')\n }\n return index\n }\n\n static previousHash<T extends BoundWitness>(boundWitness: T, address: Address) {\n return asHash(boundWitness.previous_hashes[this.addressIndex(boundWitness, address)])?.toLowerCase()\n }\n\n protected static async linkingFields<T extends BoundWitness>(\n accounts: AccountInstance[],\n payloads?: Payload[],\n ): Promise<Pick<T, GeneratedBoundWitnessFields>> {\n const addresses = accounts.map(account => asAddress(hexFromArrayBuffer(account.addressBytes, { prefix: false }), true))\n const previous_hashes = accounts.map(account => account.previousHash ?? null)\n const payload_hashes = payloads ? await BoundWitnessBuilder.hashes(payloads) : []\n const payload_schemas = payloads?.map(({ schema }) => schema) ?? []\n return {\n addresses, payload_hashes, payload_schemas, previous_hashes,\n }\n }\n\n protected static signature<T extends BoundWitness>(payload: T, address: Address) {\n return payload.$signatures[this.addressIndex(payload, address)]\n }\n\n protected static async signatures(accounts: AccountInstance[], dataHash: Hash): Promise<string[]> {\n const hashBytes = toArrayBuffer(dataHash)\n const previousHashesBytes = accounts?.map(account => account.previousHashBytes)\n return await Promise.all(accounts.map(async (account, index) => hexFromArrayBuffer((await account.sign(hashBytes, previousHashesBytes[index]))[0])))\n }\n\n private static validateGeneratedFields(fields: Pick<BoundWitness, GeneratedBoundWitnessFields>) {\n assertEx(fields.payload_hashes?.length === fields.payload_schemas?.length, () => 'Payload hash/schema mismatch')\n assertEx(!(fields.payload_hashes as (Hash | null)[]).includes(null), () => 'nulls found in hashes')\n assertEx(!(fields.payload_schemas as (Schema | null)[]).includes(null), () => 'nulls found in schemas')\n }\n\n override async build(): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>\n override async build(sign: false): Promise<[Unsigned<TBoundWitness>, TPayload[], ModuleError[]]>\n override async build(sign: true): Promise<[Signed<TBoundWitness>, TPayload[], ModuleError[]]>\n override async build(sign = true): Promise<[PossiblySigned<TBoundWitness>, TPayload[], ModuleError[]]> {\n return await BoundWitnessBuilder._buildMutex.runExclusive(async () => {\n const dataHashableFields = await this.dataHashableFields()\n const $signatures = sign ? await this.sign() : this.addresses.map(() => null)\n\n const ret = {\n ...this._meta, ...dataHashableFields, ...this._fields, $signatures,\n } as Signed<TBoundWitness>\n return [\n ret,\n this._payloads,\n this._errors,\n ]\n })\n }\n\n async dataHash() {\n const dataHashableFields = await this.dataHashableFields()\n const hash = await ObjectHasher.hash(dataHashableFields)\n return hash\n }\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const generatedFields: Pick<TBoundWitness, GeneratedBoundWitnessFields> = await this.generatedFields()\n BoundWitnessBuilder.validateGeneratedFields(generatedFields)\n const fields: WithoutSchema<TBoundWitness> = {\n ...PayloadBuilder.omitMeta(this._fields ?? {}),\n ...generatedFields,\n } as WithoutSchema<TBoundWitness>\n return await BoundWitnessBuilder.dataHashableFields<TBoundWitness>(this._schema, fields)\n }\n\n error(payload?: ModuleError) {\n assertEx(this._errorHashes === undefined, () => 'Can not set errors when hashes already set')\n if (payload) {\n this._errors.push(assertEx(sortFields(payload)))\n }\n return this\n }\n\n errors(errors?: (ModuleError | null)[]) {\n if (errors) {\n for (const error of errors) {\n if (error !== null) {\n this.error(error)\n }\n }\n }\n return this\n }\n\n override fields(fields: WithoutSchema<Omit<WithoutStorageMeta<WithoutClientMeta<TBoundWitness>>,\n 'addresses' | 'payload_hashes' | 'payload_schemas' | 'previous_hashes'>>): this {\n // clean it up just incase\n const clone = structuredClone(fields) as unknown as Partial<TBoundWitness>\n for (const field of GeneratedBoundWitnessFields) {\n delete clone[field]\n }\n // we need to do the cast here since ts seems to not like nested, yet same, generics\n this._fields\n = BoundWitnessBuilder.omitStorageMeta(\n BoundWitnessBuilder.omitClientMeta(\n omitSchema(removeEmptyFields(clone)),\n ),\n ) as unknown as WithoutStorageMeta<WithoutClientMeta<WithoutSchema<TBoundWitness>>>\n return this\n }\n\n hashes(hashes: Hash[], schema: Schema[]) {\n assertEx(this.payloads.length === 0, () => 'Can not set hashes when payloads already set')\n this._payloadHashes = hashes\n this._payloadSchemas = schema\n return this\n }\n\n payload(payload?: TPayload) {\n assertEx(this._payloadHashes === undefined, () => 'Can not set payloads when hashes already set')\n if (payload) {\n this._payloads.push(assertEx(sortFields<TPayload>(payload)))\n }\n return this\n }\n\n payloads(payloads?: (TPayload | null)[]) {\n if (payloads)\n for (const payload of payloads) {\n if (payload !== null) {\n this.payload(payload)\n }\n }\n return this\n }\n\n signer(account: AccountInstance) {\n uniqueAccounts([...this._accounts, account], true)\n this._accounts?.push(account)\n return this\n }\n\n signers(accounts: AccountInstance[]) {\n uniqueAccounts([...this._accounts, ...accounts], true)\n this._accounts?.push(...accounts)\n return this\n }\n\n sourceQuery(sourceQuery: Hash) {\n this._meta = {\n ...this._meta,\n $sourceQuery: sourceQuery,\n } as typeof this._meta\n return this\n }\n\n /** @deprecated use signer instead */\n witness(account: AccountInstance) {\n this._accounts?.push(account)\n return this\n }\n\n /** @deprecated use signers instead */\n witnesses(accounts: AccountInstance[]) {\n this._accounts?.push(...accounts)\n return this\n }\n\n protected async sign(): Promise<Hex[]> {\n uniqueAccounts(this._accounts, true)\n const hashBytes = toArrayBuffer(await this.dataHash())\n return await Promise.all(this._accounts.map(async account => hexFromArrayBuffer((await account.sign(hashBytes))[0])))\n }\n\n private async generatedFields(): Promise<Pick<TBoundWitness, GeneratedBoundWitnessFields>> {\n return await BoundWitnessBuilder.linkingFields(this._accounts, this._payloads)\n }\n\n private missingSchemaMessage(payload: Payload) {\n return `Builder: Missing Schema\\n${JSON.stringify(payload, null, 2)}`\n }\n}\n","export const GeneratedBoundWitnessFields = ['addresses', 'payload_hashes', 'payload_schemas', 'previous_hashes'] as const\nexport type GeneratedBoundWitnessFields = typeof GeneratedBoundWitnessFields[number]\n","import type { Address } from '@xylabs/sdk-js'\n\nexport const uniqueAddresses = (addresses: Address[], throwOnFalse = false) => {\n const addressesSet = new Set<Address>()\n for (const address of addresses) {\n if (addressesSet.has(address)) {\n if (throwOnFalse) {\n throw new Error('Duplicate address')\n }\n return false\n }\n addressesSet.add(address)\n }\n return true\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\n\nimport { uniqueAddresses } from './uniqueAddresses.ts'\n\nexport const uniqueAccounts = (accounts: AccountInstance[], throwOnFalse = false) => {\n return uniqueAddresses(accounts.map(account => account.address), throwOnFalse)\n}\n","import {\n asHash, difference, exists,\n} from '@xylabs/sdk-js'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\n\n/**\n * Returns tuples of bound witnesses and their payloads from the supplied payloads. Omits\n * bound witnesses where the payloads were not included in the supplied payloads.\n * @param payloads An array of bound witnesses and payloads\n * @returns An array of tuples of bound witnesses and their payloads\n */\nexport const combinationsByBoundwitness = async (payloads: Payload[]): Promise<[BoundWitness, ...Payload[]][]> => {\n const bws = new Set<BoundWitness>(payloads.filter(x => isBoundWitness(x)))\n const remaining = difference(new Set(payloads), bws)\n const payloadDictionary = await PayloadBuilder.toHashMap([...remaining])\n const results = [] as [BoundWitness, ...Payload[]][]\n for (const bw of bws) {\n const { payload_hashes } = bw\n const p = payload_hashes.map(h => payloadDictionary[asHash(h, true)]).filter(exists)\n if (p.length === payload_hashes.length) {\n const complete = [bw, ...p] as [BoundWitness, ...Payload[]]\n results.push(complete)\n }\n }\n return results\n}\n","import { asHash, type Hash } from '@xylabs/sdk-js'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport type { Schema } from '@xyo-network/payload-model'\n\n/**\n * Returns all the possible combinations of payloads for the supplied schemas within the bound witness\n * @param boundwitness The bound witness to search\n * @param schemas The schemas to search for unique combinations of\n * @returns The payload hashes corresponding to the unique combinations of the supplied schemas\n */\nexport const intraBoundwitnessSchemaCombinations = (boundwitness: BoundWitness, schemas: Schema[]): Hash[][] => {\n // Map to store the indices of each element in the source array\n const indexMap: Record<string, number[]> = {}\n\n // Populate the index map with positions of each element\n for (const [index, element] of boundwitness.payload_schemas.entries()) {\n if (!indexMap[element]) {\n indexMap[element] = []\n }\n indexMap[element].push(index)\n }\n\n // Initialize an array to store unique combinations\n let uniqueCombinations = [[]] as number[][]\n\n // Iterate over each element in the target array\n for (const element of schemas) {\n const newCombinations: number[][] = []\n // Get the array of indices for the current element\n const indices = indexMap[element] || []\n\n // Iterate over existing combinations\n for (const combination of uniqueCombinations) {\n // Iterate over each index in the indices array\n for (const index of indices) {\n // Check if the index is already in the combination\n if (!combination.includes(index)) {\n const newCombination = [...combination, index]\n // Only add the new combination if its length matches the current target index\n if (newCombination.length === schemas.indexOf(element) + 1) {\n newCombinations.push(newCombination)\n }\n }\n }\n }\n\n // Update the unique combinations for the next iteration\n uniqueCombinations = newCombinations\n }\n\n return uniqueCombinations.map((indexes) => {\n return indexes.map((index) => {\n return asHash(boundwitness.payload_hashes[index], true)\n })\n })\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { QueryBoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload'\nimport type { Query, WithoutMeta } from '@xyo-network/payload-model'\n\nimport { BoundWitnessBuilder } from '../BoundWitnessBuilder.ts'\n\nexport class QueryBoundWitnessBuilder<\n TBoundWitness extends QueryBoundWitness = QueryBoundWitness,\n TQuery extends Query = Query,\n> extends BoundWitnessBuilder<TBoundWitness> {\n private _query: TQuery | undefined\n\n override async dataHashableFields(): Promise<WithoutMeta<TBoundWitness>> {\n const fields = {\n ...(await super.dataHashableFields()),\n query: await PayloadBuilder.dataHash(assertEx(this._query, () => 'No Query Specified')),\n } as TBoundWitness\n return { ...fields } as WithoutMeta<TBoundWitness>\n }\n\n query<T extends TQuery>(query: T) {\n this.payload(query)\n this._query = query\n return this\n }\n}\n","import {\n AddressZod, HashZod,\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport { PayloadZod, SchemaZod } from '@xyo-network/payload-model'\nimport z from 'zod'\n\nimport { BoundWitnessSchema } from './BoundWitnessSchema.ts'\nimport type { SignedSignaturesMeta, UnsignedSignaturesMeta } from './Signatures.ts'\nimport { SignaturesMetaZod } from './Signatures.ts'\n\nexport const BoundWitnessRequiredFieldsZod = z.object({\n addresses: z.array(AddressZod),\n payload_hashes: z.array(HashZod),\n payload_schemas: z.array(SchemaZod),\n previous_hashes: z.array(HashZod.nullable()),\n})\n\nexport type BoundWitnessRequiredFields = z.infer<typeof BoundWitnessRequiredFieldsZod>\n\nexport const BoundWitnessMetaZod = z.object({\n $destination: AddressZod.optional(),\n $sourceQuery: HashZod.optional(),\n}).extend(SignaturesMetaZod.shape)\n\nexport type BoundWitnessMeta = z.infer<typeof BoundWitnessMetaZod>\n\nexport const BoundWitnessZod = PayloadZod\n .safeExtend({ schema: z.literal(BoundWitnessSchema) })\n .safeExtend(BoundWitnessRequiredFieldsZod.shape)\n .safeExtend(BoundWitnessMetaZod.shape)\n // .refine(data => data.$signatures.length === data.addresses.length, { message: '$signatures length must equal addresses length' })\n\nexport type BoundWitness = z.infer<typeof BoundWitnessZod>\n\nexport const isBoundWitness = zodIsFactory(BoundWitnessZod)\nexport const asBoundWitness = zodAsFactory(BoundWitnessZod, 'asBoundWitness')\nexport const toBoundWitness = zodToFactory(BoundWitnessZod, 'toBoundWitness')\n\nexport const AnyBoundWitnessZod = BoundWitnessZod.loose()\nexport type AnyBoundWitness = z.infer<typeof AnyBoundWitnessZod>\n\nexport type Unsigned<T extends BoundWitness> = Omit<T, '$signatures'> & UnsignedSignaturesMeta\n\nexport type Signed<T extends BoundWitness> = Omit<T, '$signatures'> & SignedSignaturesMeta\n\nexport type PossiblySigned<T extends BoundWitness> = Unsigned<T> | Signed<T>\n","import { asSchema } from '@xyo-network/payload-model'\n\nexport const BoundWitnessSchema = asSchema('network.xyo.boundwitness', true)\nexport type BoundWitnessSchema = typeof BoundWitnessSchema\n","import { HexZod } from '@xylabs/sdk-js'\nimport z from 'zod'\n\nexport const SignaturesMetaZod = z.object({ $signatures: z.array(z.union([HexZod, z.null()])) })\nexport const UnsignedSignaturesMetaZod = z.object({ $signatures: z.array(z.null()) })\nexport const SignedSignaturesMetaZod = z.object({ $signatures: z.array(HexZod).min(1) })\n\nexport type SignaturesMeta = z.infer<typeof SignaturesMetaZod>\nexport type UnsignedSignaturesMeta = z.infer<typeof UnsignedSignaturesMetaZod>\nexport type SignedSignaturesMeta = z.infer<typeof SignedSignaturesMetaZod>\n","// Should type as JSONSchemaType<BoundWitness> once ajv/eslint issue is fixed\n// https://github.com/microsoft/TypeScript/issues/44851\n\nexport const BoundWitnessJsonSchema = () => {\n return {\n $id: 'https://schemas.xyo.network/2.0/boundwitness',\n additionalProperties: false,\n properties: {\n addresses: { items: { type: 'string' }, type: 'array' },\n payload_hashes: { items: { type: 'string' }, type: 'array' },\n payload_schemas: { items: { type: 'string' }, type: 'array' },\n previous_hashes: { items: { nullable: true, type: 'string' }, type: 'array' },\n schema: { type: 'string' },\n },\n required: ['addresses', 'payload_hashes', 'payload_schemas', 'previous_hashes', 'schema'],\n type: 'object',\n }\n}\n","import { PayloadZod } from '@xyo-network/payload-model'\nimport z from 'zod'\n\nimport { type BoundWitness, BoundWitnessZod } from './BoundWitness.ts'\nimport { SignedBoundWitnessZod } from './SignedBoundWitness.ts'\nimport { UnsignedBoundWitnessZod } from './UnsignedBoundWitness.ts'\n\nexport function HydratedBoundWitnessZodBuilder<T extends z.ZodType<BoundWitness>>(bwZod: T) {\n return z.tuple([bwZod, z.array(PayloadZod.loose())])\n}\n\nexport const HydratedBoundWitnessZod = HydratedBoundWitnessZodBuilder(BoundWitnessZod)\n// export type HydratedBoundWitness = z.infer<typeof HydratedBoundWitnessZod>\n\nexport const SignedHydratedBoundWitnessZod = HydratedBoundWitnessZodBuilder(SignedBoundWitnessZod)\n// export type SignedHydratedBoundWitness = z.infer<typeof SignedHydratedBoundWitnessZod>\n\nexport const UnsignedHydratedBoundWitnessZod = HydratedBoundWitnessZodBuilder(UnsignedBoundWitnessZod)\n// export type UnsignedHydratedBoundWitness = z.infer<typeof UnsignedHydratedBoundWitnessZod>\n","import type z from 'zod'\n\nimport { BoundWitnessZod } from './BoundWitness.ts'\nimport { SignedSignaturesMetaZod } from './Signatures.ts'\n\nexport const SignedBoundWitnessZod = BoundWitnessZod.extend(SignedSignaturesMetaZod.shape)\nexport type SignedBoundWitness = z.infer<typeof SignedBoundWitnessZod>\n\nexport const AnySignedBoundWitnessZod = SignedBoundWitnessZod.loose()\nexport type AnySignedBoundWitness = z.infer<typeof AnySignedBoundWitnessZod>\n","import type z from 'zod'\n\nimport { BoundWitnessZod } from './BoundWitness.ts'\nimport { UnsignedSignaturesMetaZod } from './Signatures.ts'\n\nexport const UnsignedBoundWitnessZod = BoundWitnessZod.extend(UnsignedSignaturesMetaZod.shape)\nexport type UnsignedBoundWitness = z.infer<typeof UnsignedBoundWitnessZod>\n\nexport const AnyUnsignedBoundWitnessZod = UnsignedBoundWitnessZod.loose()\nexport type AnyUnsignedBoundWitness = z.infer<typeof AnyUnsignedBoundWitnessZod>\n","import type { Hash } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { isStorageMeta } from '@xyo-network/payload-model'\n\nimport { type BoundWitness, isBoundWitness } from './BoundWitness/index.ts'\n\nexport interface QueryBoundWitnessFields {\n error_hashes?: Hash[]\n query: Hash\n}\n\nexport type UnsignedQueryBoundWitness = BoundWitness & QueryBoundWitnessFields\n\nexport type QueryBoundWitness = UnsignedQueryBoundWitness\n\nexport const isQueryBoundWitness = (x?: unknown): x is QueryBoundWitness => isBoundWitness(x) && (x as QueryBoundWitness)?.query !== undefined\nexport const isQueryBoundWitnessWithStorageMeta = (x?: unknown): x is WithStorageMeta<QueryBoundWitness> => isQueryBoundWitness(x) && isStorageMeta(x)\n","import FS from 'node:fs'\n\nimport chalk from 'chalk'\n\nimport { deriveAccount, getActiveWallet } from '../account/getActiveWallet.ts'\nimport { createWalletClient } from '../client/walletClient.ts'\nimport { getActiveNetwork } from '../network/storage.ts'\n\nexport interface BroadcastTransactionOptions {\n file: string\n offset?: string\n}\n\nfunction reviveBigints(_key: string, value: unknown): unknown {\n if (typeof value === 'string' && /^-?\\d+n$/.test(value)) {\n return BigInt(value.slice(0, -1))\n }\n return value\n}\n\nexport async function broadcastTransaction(options: BroadcastTransactionOptions): Promise<void> {\n const offset = options.offset ?? '0'\n const raw = FS.readFileSync(options.file, 'utf8')\n const signedTx = JSON.parse(raw, reviveBigints) as never\n const network = getActiveNetwork()\n const { rootWallet } = await getActiveWallet()\n const account = await deriveAccount(rootWallet, offset)\n console.log(chalk.gray(`Connecting to ${network.rpcUrl}...`))\n const { runner } = await createWalletClient(network.rpcUrl, account)\n const hash = await runner.broadcastTransaction(signedTx)\n console.log(chalk.green(`Broadcast accepted: ${hash}`))\n}\n","import { asAddress, assertEx } from '@xylabs/sdk-js'\nimport { XL1Amount } from '@xyo-network/xl1-protocol-sdk'\nimport chalk from 'chalk'\n\nimport { deriveAccount, getActiveWallet } from '../account/getActiveWallet.ts'\nimport { createWalletClient } from '../client/walletClient.ts'\nimport { getActiveNetwork } from '../network/storage.ts'\n\nexport interface SendTransactionOptions {\n recipient: string\n amount: string\n offset?: string\n attempts?: number\n delay?: number\n}\n\nexport async function sendTransaction(options: SendTransactionOptions): Promise<void> {\n const offset = options.offset ?? '0'\n const { rootWallet } = await getActiveWallet()\n const account = await deriveAccount(rootWallet, offset)\n const network = getActiveNetwork()\n\n const recipient = assertEx(asAddress(options.recipient.toLowerCase().replace(/^0x/, '')), () => `Invalid recipient address: ${options.recipient}`)\n const amountXL1 = XL1Amount.fromXL1(BigInt(options.amount) as never)\n\n console.log(chalk.gray(`Connecting to ${network.rpcUrl}...`))\n const { gateway } = await createWalletClient(network.rpcUrl, account)\n\n console.log(chalk.gray(`Submitting transfer of ${options.amount} XL1 to 0x${recipient}...`))\n const hash = await gateway.send(recipient, amountXL1.atto)\n console.log(chalk.gray(`Tx submitted: ${hash}`))\n\n const attempts = options.attempts ?? 30\n const delay = options.delay ?? 2000\n console.log(chalk.gray(`Confirming (up to ${attempts} attempts, ${delay}ms apart)...`))\n await gateway.confirmSubmittedTransaction(hash, { attempts, delay })\n\n console.log(chalk.green(`Sent ${options.amount} XL1 → 0x${recipient}`))\n console.log(`${chalk.gray('hash:')} ${hash}`)\n console.log(`${chalk.gray('from:')} 0x${account.address}`)\n console.log(`${chalk.gray('network:')} ${network.id}`)\n}\n","import FS from 'node:fs'\n\nimport type { Payload } from '@xyo-network/payload-model'\nimport { buildTransaction } from '@xyo-network/xl1-protocol-sdk'\nimport chalk from 'chalk'\n\nimport { deriveAccount, getActiveWallet } from '../account/getActiveWallet.ts'\n\ninterface UnsignedTransactionFile {\n chain: string\n onChainPayloads?: Payload[]\n offChainPayloads?: Payload[]\n nbf: number | string\n exp: number | string\n fees?: {\n base: string | number | bigint\n gasLimit: string | number | bigint\n gasPrice: string | number | bigint\n priority: string | number | bigint\n }\n}\n\nfunction asBigint(value: string | number | bigint): bigint {\n return typeof value === 'bigint' ? value : BigInt(value)\n}\n\nexport interface SignTransactionOptions {\n file: string\n offset?: string\n output?: string\n}\n\nexport async function signTransactionFile(options: SignTransactionOptions): Promise<void> {\n const offset = options.offset ?? '0'\n const raw = FS.readFileSync(options.file, 'utf8')\n const tx = JSON.parse(raw) as UnsignedTransactionFile\n const { rootWallet } = await getActiveWallet()\n const account = await deriveAccount(rootWallet, offset)\n const fees = tx.fees\n ? {\n base: asBigint(tx.fees.base),\n gasLimit: asBigint(tx.fees.gasLimit),\n gasPrice: asBigint(tx.fees.gasPrice),\n priority: asBigint(tx.fees.priority),\n }\n : undefined\n // Cast to runtime-required branded types; the SDK validates them internally.\n const signed = await buildTransaction(\n tx.chain as never,\n (tx.onChainPayloads ?? []) as never,\n tx.offChainPayloads ?? [],\n account,\n asBigint(tx.nbf) as never,\n asBigint(tx.exp) as never,\n undefined,\n fees,\n )\n const serialized = JSON.stringify(signed, (_key, value: unknown) => (typeof value === 'bigint' ? value.toString() : value), 2)\n if (options.output) {\n FS.writeFileSync(options.output, `${serialized}\\n`)\n console.log(chalk.green(`Signed transaction written to ${options.output}`))\n } else {\n console.log(serialized)\n }\n}\n","export { installPlugin, uninstallPlugin } from './audit/index.ts'\nexport { listSessions } from './audit/index.ts'\nexport { searchAudit } from './audit/index.ts'\nexport { showSession } from './audit/index.ts'\nexport { statusAudit } from './audit/index.ts'\nexport { runClamped } from './clamp/index.ts'\nexport { detectAiClients } from './detect/index.ts'\nexport { printVersion } from './printVersion.ts'\nexport { syncAiConfig } from './sync/index.ts'\nexport * from './wallet/index.ts'\nexport { executeWitness, registerWitnessCommand } from '@xylabs/aries-witness-cli'\n","import type { CommandModule } from 'yargs'\n\nimport { printVersion } from '../actions/index.ts'\n\nexport const versionCommand: CommandModule = {\n command: 'info',\n describe: 'Display ariestools version and environment info',\n handler: () => {\n printVersion()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { deriveAndAdd } from '../actions/wallet/index.ts'\n\nexport const walletAccountDeriveCommand: CommandModule = {\n command: 'derive <offset>',\n describe: 'Derive a new account at the given HD offset',\n builder: yargs =>\n yargs\n .positional('offset', {\n type: 'string', demandOption: true, describe: 'HD path offset (e.g. 0)',\n })\n .option('label', {\n alias: 'l', type: 'string', describe: 'Friendly label for the account',\n }),\n handler: async (argv) => {\n await deriveAndAdd({\n offset: argv.offset as string,\n label: argv.label as string | undefined,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { labelAccount } from '../actions/wallet/index.ts'\n\nexport const walletAccountLabelCommand: CommandModule = {\n command: 'label <offset> <label>',\n describe: 'Label a derived account',\n builder: yargs =>\n yargs\n .positional('offset', {\n type: 'string', demandOption: true, describe: 'HD path offset',\n })\n .positional('label', {\n type: 'string', demandOption: true, describe: 'Label text',\n }),\n handler: async (argv) => {\n await labelAccount(argv.offset as string, argv.label as string)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { listAccounts } from '../actions/wallet/index.ts'\n\nexport const walletAccountListCommand: CommandModule = {\n command: 'list',\n describe: 'List derived accounts in the active wallet',\n handler: async () => {\n await listAccounts()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { removeAccount } from '../actions/wallet/index.ts'\n\nexport const walletAccountRemoveCommand: CommandModule = {\n command: 'remove <offset>',\n describe: 'Remove an account from the address book',\n builder: yargs =>\n yargs.positional('offset', {\n type: 'string', demandOption: true, describe: 'HD path offset',\n }),\n handler: async (argv) => {\n await removeAccount(argv.offset as string)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { showAccount } from '../actions/wallet/index.ts'\n\nexport const walletAccountShowCommand: CommandModule = {\n command: 'show <offset>',\n describe: 'Show details for a derived account',\n builder: yargs =>\n yargs.positional('offset', {\n type: 'string', demandOption: true, describe: 'HD path offset (e.g. 0)',\n }),\n handler: async (argv) => {\n await showAccount(argv.offset as string)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { walletAccountDeriveCommand } from './walletAccountDeriveCommand.ts'\nimport { walletAccountLabelCommand } from './walletAccountLabelCommand.ts'\nimport { walletAccountListCommand } from './walletAccountListCommand.ts'\nimport { walletAccountRemoveCommand } from './walletAccountRemoveCommand.ts'\nimport { walletAccountShowCommand } from './walletAccountShowCommand.ts'\n\nexport const walletAccountCommand: CommandModule = {\n command: 'account',\n describe: 'Manage derived accounts in the active wallet',\n builder: yargs =>\n yargs\n .command(walletAccountListCommand)\n .command(walletAccountShowCommand)\n .command(walletAccountDeriveCommand)\n .command(walletAccountLabelCommand)\n .command(walletAccountRemoveCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","import type { CommandModule } from 'yargs'\n\nimport { exportBackup } from '../actions/wallet/index.ts'\n\nexport const walletBackupExportCommand: CommandModule = {\n command: 'export <file>',\n describe: 'Export address books and contacts to a backup JSON file',\n builder: yargs =>\n yargs.positional('file', {\n type: 'string', demandOption: true, describe: 'Output backup file path',\n }),\n handler: (argv) => {\n exportBackup({ file: argv.file as string })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { importBackup } from '../actions/wallet/index.ts'\n\nexport const walletBackupImportCommand: CommandModule = {\n command: 'import <file>',\n describe: 'Import a wallet backup JSON file (merges into current state)',\n builder: yargs =>\n yargs.positional('file', {\n type: 'string', demandOption: true, describe: 'Backup file path',\n }),\n handler: (argv) => {\n importBackup({ file: argv.file as string })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { walletBackupExportCommand } from './walletBackupExportCommand.ts'\nimport { walletBackupImportCommand } from './walletBackupImportCommand.ts'\n\nexport const walletBackupCommand: CommandModule = {\n command: 'backup',\n describe: 'Export and import wallet data (address books, contacts)',\n builder: yargs =>\n yargs\n .command(walletBackupExportCommand)\n .command(walletBackupImportCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","import type { CommandModule } from 'yargs'\n\nimport { getBalance } from '../actions/wallet/index.ts'\n\nexport const walletBalanceCommand: CommandModule = {\n command: 'balance [offset]',\n describe: 'Fetch the on-chain balance for a derived account (default offset 0)',\n builder: yargs =>\n yargs.positional('offset', {\n type: 'string', describe: 'HD path offset', default: '0',\n }),\n handler: async (argv) => {\n await getBalance({ offset: argv.offset as string | undefined })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { addContact } from '../actions/wallet/index.ts'\n\nexport const walletContactAddCommand: CommandModule = {\n command: 'add <address> <label>',\n describe: 'Add or update a contact',\n builder: yargs =>\n yargs\n .positional('address', {\n type: 'string', demandOption: true, describe: 'Address (0x...)',\n })\n .positional('label', {\n type: 'string', demandOption: true, describe: 'Friendly label',\n }),\n handler: (argv) => {\n addContact(argv.address as string, argv.label as string)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { listContacts } from '../actions/wallet/index.ts'\n\nexport const walletContactListCommand: CommandModule = {\n command: 'list',\n describe: 'List address-book contacts',\n handler: () => {\n listContacts()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { removeContact } from '../actions/wallet/index.ts'\n\nexport const walletContactRemoveCommand: CommandModule = {\n command: 'remove <address>',\n describe: 'Remove a contact',\n builder: yargs =>\n yargs.positional('address', {\n type: 'string', demandOption: true, describe: 'Address (0x...)',\n }),\n handler: (argv) => {\n removeContact(argv.address as string)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { renameContact } from '../actions/wallet/index.ts'\n\nexport const walletContactRenameCommand: CommandModule = {\n command: 'rename <address> <label>',\n describe: 'Rename an existing contact',\n builder: yargs =>\n yargs\n .positional('address', {\n type: 'string', demandOption: true, describe: 'Address (0x...)',\n })\n .positional('label', {\n type: 'string', demandOption: true, describe: 'New label',\n }),\n handler: (argv) => {\n renameContact(argv.address as string, argv.label as string)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { walletContactAddCommand } from './walletContactAddCommand.ts'\nimport { walletContactListCommand } from './walletContactListCommand.ts'\nimport { walletContactRemoveCommand } from './walletContactRemoveCommand.ts'\nimport { walletContactRenameCommand } from './walletContactRenameCommand.ts'\n\nexport const walletContactCommand: CommandModule = {\n command: 'contact',\n describe: 'Manage external address-book contacts',\n builder: yargs =>\n yargs\n .command(walletContactListCommand)\n .command(walletContactAddCommand)\n .command(walletContactRenameCommand)\n .command(walletContactRemoveCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","import type { CommandModule } from 'yargs'\n\nimport { createPhrase } from '../actions/wallet/index.ts'\n\nexport const walletCreateCommand: CommandModule = {\n command: 'create',\n describe: 'Generate a new XL1 wallet (random recovery phrase)',\n builder: yargs =>\n yargs.option('label', {\n alias: 'l',\n type: 'string',\n default: 'primary',\n describe: 'Friendly label for the wallet',\n }),\n handler: async (argv) => {\n await createPhrase({ label: argv.label as string })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { exportPhrase } from '../actions/wallet/index.ts'\n\nexport const walletExportCommand: CommandModule = {\n command: 'export',\n describe: 'Print the recovery phrase for the active (or specified) wallet',\n builder: yargs =>\n yargs.option('id', {\n type: 'string',\n describe: 'Wallet id or label (defaults to active wallet)',\n }),\n handler: async (argv) => {\n await exportPhrase({ id: argv.id as string | undefined })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { importPhrase } from '../actions/wallet/index.ts'\n\nexport const walletImportCommand: CommandModule = {\n command: 'import',\n describe: 'Import an existing XL1 recovery phrase',\n builder: yargs =>\n yargs\n .option('label', {\n alias: 'l',\n type: 'string',\n default: 'imported',\n describe: 'Friendly label for the wallet',\n })\n .option('phrase', {\n alias: 'p',\n type: 'string',\n describe: 'Recovery phrase (skips interactive prompt)',\n }),\n handler: async (argv) => {\n await importPhrase({\n label: argv.label as string,\n phrase: argv.phrase as string | undefined,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { listPhrases } from '../actions/wallet/index.ts'\n\nexport const walletListCommand: CommandModule = {\n command: 'list',\n describe: 'List stored wallets',\n handler: () => {\n listPhrases()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { lock } from '../actions/wallet/index.ts'\n\nexport const walletLockCommand: CommandModule = {\n command: 'lock',\n describe: 'Clear the cached unlocked session',\n handler: () => {\n lock()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { addNetwork } from '../actions/wallet/index.ts'\n\nexport const walletNetworkAddCommand: CommandModule = {\n command: 'add <id> <rpcUrl>',\n describe: 'Add a custom network',\n builder: yargs =>\n yargs\n .positional('id', {\n type: 'string', demandOption: true, describe: 'Network id (unique)',\n })\n .positional('rpcUrl', {\n type: 'string', demandOption: true, describe: 'Gateway RPC URL',\n })\n .option('label', {\n alias: 'l', type: 'string', describe: 'Friendly label',\n })\n .option('chain-id', { type: 'string', describe: 'Chain id (hex)' }),\n handler: (argv) => {\n addNetwork({\n id: argv.id as string,\n rpcUrl: argv.rpcUrl as string,\n label: argv.label as string | undefined,\n chainId: argv['chain-id'] as string | undefined,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { listNetworks } from '../actions/wallet/index.ts'\n\nexport const walletNetworkListCommand: CommandModule = {\n command: 'list',\n describe: 'List configured networks',\n handler: () => {\n listNetworks()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { removeNetwork } from '../actions/wallet/index.ts'\n\nexport const walletNetworkRemoveCommand: CommandModule = {\n command: 'remove <id>',\n describe: 'Remove a custom network',\n builder: yargs =>\n yargs.positional('id', {\n type: 'string', demandOption: true, describe: 'Network id',\n }),\n handler: (argv) => {\n removeNetwork(argv.id as string)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { useNetwork } from '../actions/wallet/index.ts'\n\nexport const walletNetworkUseCommand: CommandModule = {\n command: 'use <id>',\n describe: 'Set the active network',\n builder: yargs =>\n yargs.positional('id', {\n type: 'string', demandOption: true, describe: 'Network id',\n }),\n handler: (argv) => {\n useNetwork(argv.id as string)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { walletNetworkAddCommand } from './walletNetworkAddCommand.ts'\nimport { walletNetworkListCommand } from './walletNetworkListCommand.ts'\nimport { walletNetworkRemoveCommand } from './walletNetworkRemoveCommand.ts'\nimport { walletNetworkUseCommand } from './walletNetworkUseCommand.ts'\n\nexport const walletNetworkCommand: CommandModule = {\n command: 'network',\n describe: 'Manage XL1 network configurations',\n builder: yargs =>\n yargs\n .command(walletNetworkListCommand)\n .command(walletNetworkUseCommand)\n .command(walletNetworkAddCommand)\n .command(walletNetworkRemoveCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","import type { CommandModule } from 'yargs'\n\nimport { changePassword } from '../actions/wallet/index.ts'\n\nexport const walletPasswordChangeCommand: CommandModule = {\n command: 'change',\n describe: 'Change the wallet password (re-encrypts every stored phrase)',\n handler: async () => {\n await changePassword()\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { walletPasswordChangeCommand } from './walletPasswordChangeCommand.ts'\n\nexport const walletPasswordCommand: CommandModule = {\n command: 'password',\n describe: 'Manage the wallet password',\n builder: yargs =>\n yargs\n .command(walletPasswordChangeCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","import type { CommandModule } from 'yargs'\n\nimport { removePhrase } from '../actions/wallet/index.ts'\n\nexport const walletRemoveCommand: CommandModule = {\n command: 'remove <id>',\n describe: 'Delete a stored wallet (and its address book)',\n builder: yargs =>\n yargs.positional('id', {\n type: 'string',\n describe: 'Wallet id or label',\n demandOption: true,\n }),\n handler: async (argv) => {\n await removePhrase({ id: argv.id as string })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { renamePhrase } from '../actions/wallet/index.ts'\n\nexport const walletRenameCommand: CommandModule = {\n command: 'rename <id> <label>',\n describe: 'Rename a stored wallet',\n builder: yargs =>\n yargs\n .positional('id', {\n type: 'string', demandOption: true, describe: 'Wallet id or current label',\n })\n .positional('label', {\n type: 'string', demandOption: true, describe: 'New label',\n }),\n handler: (argv) => {\n renamePhrase(argv.id as string, argv.label as string)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { signPayload } from '../actions/wallet/index.ts'\n\nexport const walletSignCommand: CommandModule = {\n command: 'sign <file>',\n describe: 'Sign a JSON payload with a derived account (produces a BoundWitness)',\n builder: yargs =>\n yargs\n .positional('file', {\n type: 'string', demandOption: true, describe: 'Path to a JSON payload file',\n })\n .option('offset', {\n alias: 'o', type: 'string', default: '0', describe: 'HD path offset of the signer',\n })\n .option('output', {\n alias: 'O', type: 'string', describe: 'Write output to file instead of stdout',\n }),\n handler: async (argv) => {\n await signPayload({\n file: argv.file as string,\n offset: argv.offset as string | undefined,\n output: argv.output as string | undefined,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { broadcastTransaction } from '../actions/wallet/index.ts'\n\nexport const walletTxBroadcastCommand: CommandModule = {\n command: 'broadcast <file>',\n describe: 'Broadcast a signed transaction JSON file via the active network',\n builder: yargs =>\n yargs\n .positional('file', {\n type: 'string', demandOption: true, describe: 'Path to signed transaction JSON',\n })\n .option('offset', {\n alias: 'o', type: 'string', default: '0', describe: 'HD path offset for client connection',\n }),\n handler: async (argv) => {\n await broadcastTransaction({\n file: argv.file as string,\n offset: argv.offset as string | undefined,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { sendTransaction } from '../actions/wallet/index.ts'\n\nexport const walletTxSendCommand: CommandModule = {\n command: 'send <recipient> <amount>',\n describe: 'Build, sign, and broadcast an XL1 transfer through the active network gateway',\n builder: yargs =>\n yargs\n .positional('recipient', {\n type: 'string', demandOption: true, describe: 'Recipient address (0x...)',\n })\n .positional('amount', {\n type: 'string', demandOption: true, describe: 'Amount in whole XL1',\n })\n .option('offset', {\n alias: 'o', type: 'string', default: '0', describe: 'HD path offset of the sender',\n })\n .option('attempts', {\n type: 'number', default: 30, describe: 'Confirmation polling attempts',\n })\n .option('delay', {\n type: 'number', default: 2000, describe: 'Delay between confirmation attempts (ms)',\n }),\n handler: async (argv) => {\n await sendTransaction({\n recipient: argv.recipient as string,\n amount: argv.amount as string,\n offset: argv.offset as string | undefined,\n attempts: argv.attempts as number,\n delay: argv.delay as number,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { signTransactionFile } from '../actions/wallet/index.ts'\n\nexport const walletTxSignCommand: CommandModule = {\n command: 'sign <file>',\n describe: 'Sign an unsigned transaction JSON file',\n builder: yargs =>\n yargs\n .positional('file', {\n type: 'string', demandOption: true, describe: 'Path to unsigned transaction JSON',\n })\n .option('offset', {\n alias: 'o', type: 'string', default: '0', describe: 'HD path offset of the signer',\n })\n .option('output', {\n alias: 'O', type: 'string', describe: 'Write signed tx to file instead of stdout',\n }),\n handler: async (argv) => {\n await signTransactionFile({\n file: argv.file as string,\n offset: argv.offset as string | undefined,\n output: argv.output as string | undefined,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { walletTxBroadcastCommand } from './walletTxBroadcastCommand.ts'\nimport { walletTxSendCommand } from './walletTxSendCommand.ts'\nimport { walletTxSignCommand } from './walletTxSignCommand.ts'\n\nexport const walletTxCommand: CommandModule = {\n command: 'tx',\n describe: 'Build, sign, and broadcast XL1 transactions',\n builder: yargs =>\n yargs\n .command(walletTxSendCommand)\n .command(walletTxSignCommand)\n .command(walletTxBroadcastCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","import type { CommandModule } from 'yargs'\n\nimport { unlock } from '../actions/wallet/index.ts'\n\nexport const walletUnlockCommand: CommandModule = {\n command: 'unlock',\n describe: 'Cache the wallet password (encrypted at rest) for a TTL',\n builder: yargs =>\n yargs.option('ttl', {\n type: 'number',\n default: 900,\n describe: 'Session lifetime in seconds (default 900 = 15 min)',\n }),\n handler: async (argv) => {\n await unlock({ ttl: argv.ttl as number })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { usePhrase } from '../actions/wallet/index.ts'\n\nexport const walletUseCommand: CommandModule = {\n command: 'use <id>',\n describe: 'Set the active wallet',\n builder: yargs =>\n yargs.positional('id', {\n type: 'string',\n describe: 'Wallet id or label',\n demandOption: true,\n }),\n handler: (argv) => {\n usePhrase(argv.id as string)\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { walletAccountCommand } from './walletAccountCommand.ts'\nimport { walletBackupCommand } from './walletBackupCommand.ts'\nimport { walletBalanceCommand } from './walletBalanceCommand.ts'\nimport { walletContactCommand } from './walletContactCommand.ts'\nimport { walletCreateCommand } from './walletCreateCommand.ts'\nimport { walletExportCommand } from './walletExportCommand.ts'\nimport { walletImportCommand } from './walletImportCommand.ts'\nimport { walletListCommand } from './walletListCommand.ts'\nimport { walletLockCommand } from './walletLockCommand.ts'\nimport { walletNetworkCommand } from './walletNetworkCommand.ts'\nimport { walletPasswordCommand } from './walletPasswordCommand.ts'\nimport { walletRemoveCommand } from './walletRemoveCommand.ts'\nimport { walletRenameCommand } from './walletRenameCommand.ts'\nimport { walletSignCommand } from './walletSignCommand.ts'\nimport { walletTxCommand } from './walletTxCommand.ts'\nimport { walletUnlockCommand } from './walletUnlockCommand.ts'\nimport { walletUseCommand } from './walletUseCommand.ts'\n\nexport const walletCommand: CommandModule = {\n command: 'wallet',\n describe: 'XL1 wallet — manage seed phrases, accounts, transactions, and contacts',\n builder: yargs =>\n yargs\n .command(walletCreateCommand)\n .command(walletImportCommand)\n .command(walletExportCommand)\n .command(walletListCommand)\n .command(walletUseCommand)\n .command(walletRenameCommand)\n .command(walletRemoveCommand)\n .command(walletUnlockCommand)\n .command(walletLockCommand)\n .command(walletPasswordCommand)\n .command(walletAccountCommand)\n .command(walletBalanceCommand)\n .command(walletSignCommand)\n .command(walletTxCommand)\n .command(walletNetworkCommand)\n .command(walletContactCommand)\n .command(walletBackupCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","import FS, { existsSync } from 'node:fs'\nimport path from 'node:path'\n\nimport type { Payload } from '@xyo-network/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\nimport type { HydratedTransactionWithHashMeta } from '@xyo-network/xl1-sdk'\nimport {\n isHydratedTransaction,\n isTransactionBoundWitness,\n validateTransaction,\n} from '@xyo-network/xl1-sdk'\nimport chalk from 'chalk'\n\nexport interface ValidateTransactionsOptions {\n data?: string\n detail?: boolean\n}\n\ninterface ValidationResult {\n errors: string[]\n index: number\n source: string\n valid: boolean\n}\n\ntype RawTuple = [unknown, unknown[]]\n\nfunction isRawTuple(value: unknown): value is RawTuple {\n return Array.isArray(value) && value.length === 2 && Array.isArray(value[1])\n}\n\nfunction parseSingleOrBatch(raw: string, source: string): [RawTuple, string][] {\n const parsed: unknown = JSON.parse(raw)\n if (isRawTuple(parsed)) {\n return [[parsed, source]]\n }\n if (Array.isArray(parsed) && parsed.length > 0 && parsed.every(isRawTuple)) {\n return parsed.map((tx, i) => [tx, `${source}[${i}]`])\n }\n throw new Error(`${source}: expected a transaction tuple [bw, payloads[]] or array of tuples`)\n}\n\nfunction parseJsonl(raw: string, source: string): [RawTuple, string][] {\n const results: [RawTuple, string][] = []\n for (const [i, rawLine] of raw.split('\\n').entries()) {\n const line = rawLine?.trim()\n if (!line) continue\n let parsed: unknown\n try {\n parsed = JSON.parse(line)\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error)\n throw new Error(`${source} line ${i + 1}: invalid JSON (${msg})`, { cause: error })\n }\n if (!isRawTuple(parsed)) {\n throw new Error(`${source} line ${i + 1}: expected a transaction tuple [bw, payloads[]]`)\n }\n results.push([parsed, `${source}:${i + 1}`])\n }\n return results\n}\n\nfunction parseInput(data: string): [RawTuple, string][] {\n const absolute = path.resolve(data)\n if (existsSync(absolute)) {\n const raw = FS.readFileSync(absolute, 'utf8')\n const ext = path.extname(absolute).toLowerCase()\n if (ext === '.jsonl' || ext === '.ndjson') {\n return parseJsonl(raw, data)\n }\n return parseSingleOrBatch(raw, data)\n }\n return parseSingleOrBatch(data, '<inline>')\n}\n\nasync function readStdin(): Promise<string> {\n return new Promise((resolve, reject) => {\n let buf = ''\n process.stdin.setEncoding('utf8')\n process.stdin.on('data', (chunk: string) => {\n buf += chunk\n })\n process.stdin.on('end', () => resolve(buf))\n process.stdin.on('error', reject)\n })\n}\n\nasync function validateOne(raw: RawTuple, source: string, index: number): Promise<ValidationResult> {\n const [bwRaw, payloadsRaw] = raw\n const errors: string[] = []\n\n if (!isTransactionBoundWitness(bwRaw)) {\n return {\n errors: ['not a valid transaction BoundWitness'],\n index,\n source,\n valid: false,\n }\n }\n\n try {\n const bwWithMeta = await PayloadBuilder.addHashMeta(bwRaw as Payload)\n const payloadsWithMeta = await Promise.all(\n (payloadsRaw as Payload[]).map(p => PayloadBuilder.addHashMeta(p)),\n )\n const tx = [bwWithMeta, payloadsWithMeta] as unknown as HydratedTransactionWithHashMeta\n\n if (isHydratedTransaction(tx)) {\n const chainId = bwRaw.chain as string\n const txErrors = await validateTransaction({ chainId } as never, tx)\n for (const err of txErrors) {\n errors.push(String(err))\n }\n } else {\n errors.push('transaction failed structural shape check (isHydratedTransaction)')\n }\n } catch (ex) {\n errors.push(`Validation threw: ${ex instanceof Error ? ex.message : String(ex)}`)\n }\n\n return {\n errors,\n index,\n source,\n valid: errors.length === 0,\n }\n}\n\nexport async function validateTransactions(options: ValidateTransactionsOptions): Promise<void> {\n let rawTransactions: [RawTuple, string][]\n\n if (options.data !== undefined) {\n rawTransactions = parseInput(options.data)\n } else if (process.stdin.isTTY) {\n console.error(chalk.red('No input: provide a file path, inline JSON, or pipe data to stdin.'))\n process.exitCode = 1\n return\n } else {\n const stdin = await readStdin()\n rawTransactions = parseSingleOrBatch(stdin.trim(), '<stdin>')\n }\n\n const results = await Promise.all(rawTransactions.map(([tx, source], i) => validateOne(tx, source, i)))\n\n const validCount = results.filter(r => r.valid).length\n const invalidCount = results.filter(r => !r.valid).length\n\n console.log(`Total: ${results.length}`)\n console.log(chalk.green(`Valid: ${validCount}`))\n if (invalidCount > 0) {\n console.log(chalk.red(`Invalid: ${invalidCount}`))\n }\n\n if (options.detail === true || invalidCount > 0) {\n for (const result of results.filter(r => !r.valid)) {\n console.log(chalk.red(`\\n[${result.index}] ${result.source}`))\n for (const err of result.errors) {\n console.log(chalk.red(` - ${err}`))\n }\n }\n }\n\n if (invalidCount > 0) {\n process.exitCode = 1\n }\n}\n","import type { CommandModule } from 'yargs'\n\nimport { validateTransactions } from '../actions/xyo/index.ts'\n\nexport const xyoTxValidateCommand: CommandModule = {\n command: 'validate [data]',\n describe: 'Validate one or more XL1 transactions (file, inline JSON, or stdin)',\n builder: yargs =>\n yargs\n .positional('data', {\n type: 'string',\n describe: 'Path to a .json/.jsonl file, or an inline transaction JSON tuple [bw, payloads[]]',\n })\n .option('detail', {\n alias: 'd',\n type: 'boolean',\n default: false,\n describe: 'Print per-transaction error details (always shown for invalid transactions)',\n })\n .example(\n '$0 xyo tx validate ./tx.json',\n 'Validate a single signed transaction from a file',\n )\n .example(\n '$0 xyo tx validate ./txs.jsonl',\n 'Validate a batch of transactions, one per line',\n )\n .example(\n 'cat txs.jsonl | $0 xyo tx validate',\n 'Validate transactions piped from stdin',\n ),\n handler: async (argv) => {\n await validateTransactions({\n data: argv.data as string | undefined,\n detail: argv.detail as boolean,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { xyoTxValidateCommand } from './xyoTxValidateCommand.ts'\n\nexport const xyoTxCommand: CommandModule = {\n command: 'tx',\n describe: 'XL1 transaction utilities',\n builder: yargs =>\n yargs\n .command(xyoTxValidateCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","import type { CommandModule } from 'yargs'\n\nimport { xyoTxCommand } from './xyoTxCommand.ts'\n\nexport const xyoCommand: CommandModule = {\n command: 'xyo',\n describe: 'XYO protocol utilities',\n builder: yargs =>\n yargs\n .command(xyoTxCommand)\n .demandCommand(1)\n .strictCommands(),\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n handler: () => {},\n}\n","export { aiCommand } from './aiCommand.ts'\nexport { auditCommand } from './auditCommand.ts'\nexport { clampCommand } from './clampCommand.ts'\nexport { datalakeCommand } from './datalakeCommand.ts'\nexport { hashCommand } from './hashCommand.ts'\nexport { syncCommand } from './syncCommand.ts'\nexport { versionCommand } from './versionCommand.ts'\nexport { walletCommand } from './walletCommand.ts'\nexport { xyoCommand } from './xyoCommand.ts'\nexport { witnessCommand } from '@xylabs/aries-witness-cli'\n"],"mappings":"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","names":["EventEmitter2","Terminal","ConoutConnection","path","WindowsPtyAgent","WindowsTerminal","path","UnixTerminal","CustomWriteStream","spawn","existsSync","path","chalk","existsSync","homedir","path","chalk","existsSync","readFileSync","path","chalk","homedir","path","readFileSync","existsSync","chalk","path","execSync","existsSync","mkdirSync","platform","chalk","existsSync","mkdirSync","chalk","platform","execSync","existsSync","readdirSync","readFileSync","path","chalk","existsSync","chalk","readdirSync","path","readFileSync","execSync","existsSync","readdirSync","readFileSync","homedir","path","chalk","pkg","existsSync","readdirSync","readFileSync","path","chalk","existsSync","readdirSync","path","chalk","readFileSync","existsSync","readdirSync","readFileSync","homedir","path","chalk","existsSync","readdirSync","path","homedir","readFileSync","chalk","existsSync","readdirSync","readFileSync","writeFileSync","path","chalk","cleanup","promptText","rmSync","tmpdir","path","chalk","rmSync","writeFileSync","path","chalk","path","writeFileSync","chalk","rmSync","platform","mkdtempSync","rmSync","writeFileSync","homedir","tmpdir","path","existsSync","mkdtempSync","writeFileSync","tmpdir","path","require","chalk","decision","path","rmSync","tmpdir","spawn","existsSync","readdirSync","statSync","unlinkSync","path","createInterface","chalk","homedir","path","path","existsSync","readdirSync","statSync","files","formatEntry","chalk","createInterface","spawn","unlinkSync","createDatalakeClient","chalk","chalk","formatBytes","createDatalakeClient","chalk","createDatalakeClient","chalk","createDatalakeClient","createDatalakeClient","createDatalakeClient","chalk","createDatalakeClient","chalk","createDatalakeClient","chalk","createDatalakeClient","chalk","createDatalakeClient","chalk","createDatalakeClient","chalk","createDatalakeClient","chalk","chalk","chalk","createDatalakeClient","chalk","createDatalakeClient","chalk","createDatalakeClient","chalk","createDatalakeClient","chalk","createDatalakeClient","chalk","clearCredentials","chalk","existsSync","mkdirSync","readFileSync","unlinkSync","writeFileSync","existsSync","readFileSync","mkdirSync","writeFileSync","unlinkSync","chalk","clearCredentials","spawn","existsSync","readFileSync","chalk","existsSync","chalk","spawn","readFileSync","existsSync","rmSync","chalk","existsSync","chalk","rmSync","chalk","chalk","spawn","existsSync","mkdirSync","openSync","path","saveCredentials","chalk","existsSync","createRequire","path","require","delay","path","existsSync","mkdirSync","openSync","spawn","chalk","saveCredentials","chalk","chalk","readFileSync","path","chalk","chalk","chalk","chalk","delay","spawn","spawn","path","randomBytes","path","path","createRequire","sharp","require","createRequire","sharp","randomBytes","readFile","rm","OS","PATH","PATH","OS","randomBytes","readFile","rm","path","readFile","readFile","chalk","chalk","OS","PATH","PATH","PATH","execFileSync","closeSync","openSync","writeSync","webcrypto","webcrypto","FS","OS","webcrypto","path","FS","OS","subtle","webcrypto","chalk","chalk","chalk","chalk","chalk","chalk","chalk","chalk","chalk","FS","chalk","FS","chalk","FS","chalk","FS","chalk","chalk","chalk","chalk","chalk","chalk","chalk","chalk","chalk","HDWallet","chalk","key","webcrypto","HDWallet","chalk","chalk","chalk","HDWallet","chalk","HDWallet","chalk","chalk","chalk","HDWallet","DEFAULT_WALLET_PATH","chalk","HDWallet","DEFAULT_WALLET_PATH","chalk","chalk","chalk","chalk","chalk","chalk","chalk","FS","z","PayloadZod","z","PayloadZod","ObjectHasher","asHash","PayloadBuilder","asHash","assertEx","ObjectHasher","chalk","FS","chalk","FS","chalk","FS","chalk","asAddress","assertEx","XL1Amount","chalk","assertEx","asAddress","XL1Amount","chalk","delay","FS","chalk","FS","chalk","FS","existsSync","path","PayloadBuilder","chalk","parseJsonl","readStdin"]}
|