@fredlackey/devutils 0.0.1 → 0.0.2
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 +5 -5
- package/package.json +1 -1
- package/src/commands/install.js +374 -36
- package/src/installs/adobe-creative-cloud.js +527 -25
- package/src/installs/adobe-creative-cloud.md +605 -0
- package/src/installs/appcleaner.js +303 -26
- package/src/installs/appcleaner.md +699 -0
- package/src/installs/apt-transport-https.js +390 -0
- package/src/installs/apt-transport-https.md +678 -0
- package/src/installs/atomicparsley.js +624 -26
- package/src/installs/atomicparsley.md +795 -0
- package/src/installs/aws-cli.js +779 -26
- package/src/installs/aws-cli.md +727 -0
- package/src/installs/balena-etcher.js +688 -26
- package/src/installs/balena-etcher.md +761 -0
- package/src/installs/bambu-studio.js +912 -26
- package/src/installs/bambu-studio.md +780 -0
- package/src/installs/bash-completion.js +554 -23
- package/src/installs/bash-completion.md +833 -0
- package/src/installs/bash.js +399 -26
- package/src/installs/bash.md +993 -0
- package/src/installs/beyond-compare.js +585 -26
- package/src/installs/beyond-compare.md +813 -0
- package/src/installs/build-essential.js +511 -26
- package/src/installs/build-essential.md +977 -0
- package/src/installs/ca-certificates.js +618 -0
- package/src/installs/ca-certificates.md +937 -0
- package/src/installs/caffeine.js +490 -26
- package/src/installs/caffeine.md +839 -0
- package/src/installs/camtasia.js +577 -25
- package/src/installs/camtasia.md +762 -0
- package/src/installs/chatgpt.js +458 -26
- package/src/installs/chatgpt.md +814 -0
- package/src/installs/chocolatey.js +447 -0
- package/src/installs/chocolatey.md +661 -0
- package/src/installs/chrome-canary.js +472 -26
- package/src/installs/chrome-canary.md +641 -0
- package/src/installs/chromium.js +645 -26
- package/src/installs/chromium.md +838 -0
- package/src/installs/claude-code.js +558 -26
- package/src/installs/claude-code.md +1173 -0
- package/src/installs/curl.js +361 -26
- package/src/installs/curl.md +714 -0
- package/src/installs/cursor.js +561 -26
- package/src/installs/cursor.md +970 -0
- package/src/installs/dbschema.js +674 -26
- package/src/installs/dbschema.md +925 -0
- package/src/installs/dependencies.md +435 -0
- package/src/installs/development-tools.js +600 -0
- package/src/installs/development-tools.md +977 -0
- package/src/installs/docker.js +1010 -25
- package/src/installs/docker.md +1109 -0
- package/src/installs/drawio.js +1001 -26
- package/src/installs/drawio.md +795 -0
- package/src/installs/elmedia-player.js +328 -25
- package/src/installs/elmedia-player.md +556 -0
- package/src/installs/ffmpeg.js +870 -25
- package/src/installs/ffmpeg.md +852 -0
- package/src/installs/file.js +464 -0
- package/src/installs/file.md +987 -0
- package/src/installs/gemini-cli.js +793 -26
- package/src/installs/gemini-cli.md +1153 -0
- package/src/installs/git.js +382 -26
- package/src/installs/git.md +907 -0
- package/src/installs/gitego.js +931 -26
- package/src/installs/gitego.md +1172 -0
- package/src/installs/go.js +913 -26
- package/src/installs/go.md +958 -0
- package/src/installs/google-chrome.js +801 -25
- package/src/installs/google-chrome.md +862 -0
- package/src/installs/gpg.js +412 -73
- package/src/installs/gpg.md +1056 -0
- package/src/installs/homebrew.js +1015 -26
- package/src/installs/homebrew.md +988 -0
- package/src/installs/imageoptim.js +950 -26
- package/src/installs/imageoptim.md +1119 -0
- package/src/installs/installers.json +2297 -0
- package/src/installs/jq.js +382 -26
- package/src/installs/jq.md +809 -0
- package/src/installs/keyboard-maestro.js +701 -26
- package/src/installs/keyboard-maestro.md +825 -0
- package/src/installs/latex.js +771 -26
- package/src/installs/latex.md +1095 -0
- package/src/installs/lftp.js +338 -26
- package/src/installs/lftp.md +907 -0
- package/src/installs/lsb-release.js +346 -0
- package/src/installs/lsb-release.md +814 -0
- package/src/installs/messenger.js +829 -26
- package/src/installs/messenger.md +900 -0
- package/src/installs/microsoft-office.js +550 -26
- package/src/installs/microsoft-office.md +760 -0
- package/src/installs/microsoft-teams.js +782 -25
- package/src/installs/microsoft-teams.md +886 -0
- package/src/installs/node.js +886 -26
- package/src/installs/node.md +1153 -0
- package/src/installs/nordpass.js +698 -26
- package/src/installs/nordpass.md +921 -0
- package/src/installs/nvm.js +977 -26
- package/src/installs/nvm.md +1057 -0
- package/src/installs/openssh.js +734 -64
- package/src/installs/openssh.md +1056 -0
- package/src/installs/pandoc.js +644 -26
- package/src/installs/pandoc.md +1036 -0
- package/src/installs/pinentry.js +492 -26
- package/src/installs/pinentry.md +1142 -0
- package/src/installs/pngyu.js +851 -26
- package/src/installs/pngyu.md +896 -0
- package/src/installs/postman.js +781 -26
- package/src/installs/postman.md +940 -0
- package/src/installs/procps.js +425 -0
- package/src/installs/procps.md +851 -0
- package/src/installs/safari-tech-preview.js +355 -25
- package/src/installs/safari-tech-preview.md +533 -0
- package/src/installs/sfnt2woff.js +640 -26
- package/src/installs/sfnt2woff.md +795 -0
- package/src/installs/shellcheck.js +463 -26
- package/src/installs/shellcheck.md +1005 -0
- package/src/installs/slack.js +722 -25
- package/src/installs/slack.md +865 -0
- package/src/installs/snagit.js +566 -25
- package/src/installs/snagit.md +844 -0
- package/src/installs/software-properties-common.js +372 -0
- package/src/installs/software-properties-common.md +805 -0
- package/src/installs/spotify.js +858 -25
- package/src/installs/spotify.md +901 -0
- package/src/installs/studio-3t.js +803 -26
- package/src/installs/studio-3t.md +918 -0
- package/src/installs/sublime-text.js +780 -25
- package/src/installs/sublime-text.md +914 -0
- package/src/installs/superwhisper.js +687 -25
- package/src/installs/superwhisper.md +630 -0
- package/src/installs/tailscale.js +727 -26
- package/src/installs/tailscale.md +1100 -0
- package/src/installs/tar.js +389 -0
- package/src/installs/tar.md +946 -0
- package/src/installs/termius.js +780 -26
- package/src/installs/termius.md +844 -0
- package/src/installs/terraform.js +761 -26
- package/src/installs/terraform.md +899 -0
- package/src/installs/tidal.js +752 -25
- package/src/installs/tidal.md +864 -0
- package/src/installs/tmux.js +328 -26
- package/src/installs/tmux.md +1030 -0
- package/src/installs/tree.js +393 -26
- package/src/installs/tree.md +833 -0
- package/src/installs/unzip.js +460 -0
- package/src/installs/unzip.md +879 -0
- package/src/installs/vim.js +403 -26
- package/src/installs/vim.md +1040 -0
- package/src/installs/vlc.js +803 -26
- package/src/installs/vlc.md +927 -0
- package/src/installs/vscode.js +825 -26
- package/src/installs/vscode.md +1002 -0
- package/src/installs/wget.js +415 -0
- package/src/installs/wget.md +791 -0
- package/src/installs/whatsapp.js +710 -25
- package/src/installs/whatsapp.md +854 -0
- package/src/installs/winpty.js +352 -0
- package/src/installs/winpty.md +620 -0
- package/src/installs/woff2.js +535 -26
- package/src/installs/woff2.md +977 -0
- package/src/installs/wsl.js +572 -0
- package/src/installs/wsl.md +699 -0
- package/src/installs/xcode-clt.js +520 -0
- package/src/installs/xcode-clt.md +351 -0
- package/src/installs/xcode.js +542 -26
- package/src/installs/xcode.md +573 -0
- package/src/installs/yarn.js +806 -26
- package/src/installs/yarn.md +1074 -0
- package/src/installs/yq.js +636 -26
- package/src/installs/yq.md +944 -0
- package/src/installs/yt-dlp.js +683 -26
- package/src/installs/yt-dlp.md +946 -0
- package/src/installs/yum-utils.js +297 -0
- package/src/installs/yum-utils.md +648 -0
- package/src/installs/zoom.js +740 -25
- package/src/installs/zoom.md +884 -0
- package/src/scripts/README.md +567 -45
- package/src/scripts/STATUS.md +208 -0
- package/src/scripts/afk.js +395 -7
- package/src/scripts/backup-all.js +731 -9
- package/src/scripts/backup-source.js +711 -8
- package/src/scripts/brewd.js +373 -7
- package/src/scripts/brewi.js +505 -9
- package/src/scripts/brewr.js +512 -9
- package/src/scripts/brews.js +462 -9
- package/src/scripts/brewu.js +488 -7
- package/src/scripts/c.js +185 -7
- package/src/scripts/ccurl.js +325 -8
- package/src/scripts/certbot-crontab-init.js +488 -8
- package/src/scripts/certbot-init.js +641 -9
- package/src/scripts/ch.js +339 -7
- package/src/scripts/claude-danger.js +253 -8
- package/src/scripts/clean-dev.js +419 -8
- package/src/scripts/clear-dns-cache.js +525 -7
- package/src/scripts/clone.js +417 -7
- package/src/scripts/code-all.js +420 -7
- package/src/scripts/count-files.js +195 -8
- package/src/scripts/count-folders.js +195 -8
- package/src/scripts/count.js +248 -8
- package/src/scripts/d.js +203 -7
- package/src/scripts/datauri.js +373 -8
- package/src/scripts/delete-files.js +363 -7
- package/src/scripts/docker-clean.js +410 -8
- package/src/scripts/dp.js +426 -7
- package/src/scripts/e.js +375 -9
- package/src/scripts/empty-trash.js +497 -7
- package/src/scripts/evm.js +428 -9
- package/src/scripts/fetch-github-repos.js +441 -10
- package/src/scripts/get-channel.js +329 -8
- package/src/scripts/get-course.js +384 -11
- package/src/scripts/get-dependencies.js +290 -9
- package/src/scripts/get-folder.js +783 -10
- package/src/scripts/get-tunes.js +411 -10
- package/src/scripts/get-video.js +352 -9
- package/src/scripts/git-backup.js +561 -9
- package/src/scripts/git-clone.js +477 -9
- package/src/scripts/git-pup.js +303 -7
- package/src/scripts/git-push.js +380 -8
- package/src/scripts/h.js +607 -9
- package/src/scripts/hide-desktop-icons.js +483 -7
- package/src/scripts/hide-hidden-files.js +522 -7
- package/src/scripts/install-dependencies-from.js +440 -9
- package/src/scripts/ips.js +647 -10
- package/src/scripts/iso.js +354 -8
- package/src/scripts/killni.js +561 -7
- package/src/scripts/ll.js +451 -8
- package/src/scripts/local-ip.js +310 -8
- package/src/scripts/m.js +508 -8
- package/src/scripts/map.js +293 -8
- package/src/scripts/mkd.js +287 -7
- package/src/scripts/ncu-update-all.js +441 -8
- package/src/scripts/nginx-init.js +702 -12
- package/src/scripts/npmi.js +366 -7
- package/src/scripts/o.js +495 -8
- package/src/scripts/org-by-date.js +321 -7
- package/src/scripts/p.js +208 -7
- package/src/scripts/packages.js +313 -8
- package/src/scripts/path.js +209 -7
- package/src/scripts/ports.js +582 -8
- package/src/scripts/q.js +290 -8
- package/src/scripts/refresh-files.js +378 -10
- package/src/scripts/remove-smaller-files.js +500 -8
- package/src/scripts/rename-files-with-date.js +517 -9
- package/src/scripts/resize-image.js +523 -9
- package/src/scripts/rm-safe.js +653 -8
- package/src/scripts/s.js +525 -9
- package/src/scripts/set-git-public.js +349 -7
- package/src/scripts/show-desktop-icons.js +459 -7
- package/src/scripts/show-hidden-files.js +456 -7
- package/src/scripts/tpa.js +265 -8
- package/src/scripts/tpo.js +264 -7
- package/src/scripts/u.js +489 -7
- package/src/scripts/vpush.js +422 -8
- package/src/scripts/y.js +267 -7
- package/src/utils/common/os.js +94 -2
- package/src/utils/ubuntu/apt.js +13 -7
package/src/scripts/ch.js
CHANGED
|
@@ -1,23 +1,355 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* ch - Clear shell command history
|
|
5
|
+
*
|
|
6
|
+
* Migrated from legacy dotfiles alias.
|
|
7
|
+
* Original: alias ch="history -c && > ~/.bash_history"
|
|
8
|
+
*
|
|
9
|
+
* This script clears the shell command history by:
|
|
10
|
+
* 1. Truncating the history file on disk (removes saved history)
|
|
11
|
+
* 2. Informing the user that in-memory history requires shell restart or manual clear
|
|
12
|
+
*
|
|
13
|
+
* Note: The original alias used `history -c` to clear in-memory history, but that
|
|
14
|
+
* is a shell built-in that only works within the shell process itself. A Node.js
|
|
15
|
+
* script cannot clear the parent shell's in-memory history. However, we CAN clear
|
|
16
|
+
* the history file, which means history won't persist across sessions.
|
|
17
|
+
*
|
|
5
18
|
* @module scripts/ch
|
|
6
19
|
*/
|
|
7
20
|
|
|
21
|
+
const os = require('../utils/common/os');
|
|
22
|
+
const fs = require('fs');
|
|
23
|
+
const path = require('path');
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Get the home directory path.
|
|
27
|
+
* Uses Node.js built-in os module for cross-platform compatibility.
|
|
28
|
+
*
|
|
29
|
+
* @returns {string} The user's home directory path
|
|
30
|
+
*/
|
|
31
|
+
function getHomeDir() {
|
|
32
|
+
return require('os').homedir();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Detect which shell history files exist and should be cleared.
|
|
37
|
+
* Different shells store history in different locations:
|
|
38
|
+
* - Bash: ~/.bash_history (or $HISTFILE)
|
|
39
|
+
* - Zsh: ~/.zsh_history (or $HISTFILE)
|
|
40
|
+
* - Fish: ~/.local/share/fish/fish_history
|
|
41
|
+
*
|
|
42
|
+
* @returns {string[]} Array of history file paths that exist
|
|
43
|
+
*/
|
|
44
|
+
function findHistoryFiles() {
|
|
45
|
+
const home = getHomeDir();
|
|
46
|
+
const historyFiles = [];
|
|
47
|
+
|
|
48
|
+
// Common history file locations
|
|
49
|
+
const possibleFiles = [
|
|
50
|
+
// Bash history
|
|
51
|
+
path.join(home, '.bash_history'),
|
|
52
|
+
// Zsh history
|
|
53
|
+
path.join(home, '.zsh_history'),
|
|
54
|
+
// Fish history (less common but worth checking)
|
|
55
|
+
path.join(home, '.local', 'share', 'fish', 'fish_history'),
|
|
56
|
+
// Some systems use .history
|
|
57
|
+
path.join(home, '.history'),
|
|
58
|
+
// Ksh history
|
|
59
|
+
path.join(home, '.sh_history')
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
// Check $HISTFILE environment variable for custom locations
|
|
63
|
+
if (process.env.HISTFILE) {
|
|
64
|
+
possibleFiles.unshift(process.env.HISTFILE);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Filter to only files that exist
|
|
68
|
+
for (const filePath of possibleFiles) {
|
|
69
|
+
try {
|
|
70
|
+
if (fs.existsSync(filePath)) {
|
|
71
|
+
historyFiles.push(filePath);
|
|
72
|
+
}
|
|
73
|
+
} catch {
|
|
74
|
+
// Ignore errors checking for files
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return historyFiles;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Truncate a file to zero bytes.
|
|
83
|
+
* This is equivalent to `> filename` in bash.
|
|
84
|
+
*
|
|
85
|
+
* @param {string} filePath - Path to the file to truncate
|
|
86
|
+
* @returns {boolean} True if successful, false otherwise
|
|
87
|
+
*/
|
|
88
|
+
function truncateFile(filePath) {
|
|
89
|
+
try {
|
|
90
|
+
// Open the file with 'w' flag which truncates it to zero length
|
|
91
|
+
fs.writeFileSync(filePath, '', { encoding: 'utf8' });
|
|
92
|
+
return true;
|
|
93
|
+
} catch (error) {
|
|
94
|
+
console.error(`Warning: Could not clear ${filePath}: ${error.message}`);
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Pure Node.js implementation that works on Unix-like systems.
|
|
101
|
+
*
|
|
102
|
+
* This function finds and clears shell history files using the Node.js fs module.
|
|
103
|
+
* It's the core implementation used by macOS, Linux, and Git Bash platforms.
|
|
104
|
+
*
|
|
105
|
+
* Important limitation: We cannot clear the in-memory history of the parent shell
|
|
106
|
+
* from within a child process. The user must either:
|
|
107
|
+
* - Start a new shell session, or
|
|
108
|
+
* - Run `history -c` manually in their current shell
|
|
109
|
+
*
|
|
110
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
111
|
+
* @returns {Promise<void>}
|
|
112
|
+
*/
|
|
113
|
+
async function do_ch_nodejs(args) {
|
|
114
|
+
const historyFiles = findHistoryFiles();
|
|
115
|
+
|
|
116
|
+
if (historyFiles.length === 0) {
|
|
117
|
+
console.log('No shell history files found.');
|
|
118
|
+
console.log('');
|
|
119
|
+
console.log('Checked locations:');
|
|
120
|
+
console.log(' ~/.bash_history');
|
|
121
|
+
console.log(' ~/.zsh_history');
|
|
122
|
+
console.log(' ~/.local/share/fish/fish_history');
|
|
123
|
+
console.log(' $HISTFILE (if set)');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
let clearedCount = 0;
|
|
128
|
+
|
|
129
|
+
for (const filePath of historyFiles) {
|
|
130
|
+
if (truncateFile(filePath)) {
|
|
131
|
+
console.log(`Cleared: ${filePath}`);
|
|
132
|
+
clearedCount++;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (clearedCount > 0) {
|
|
137
|
+
console.log('');
|
|
138
|
+
console.log('History file(s) cleared successfully.');
|
|
139
|
+
console.log('');
|
|
140
|
+
console.log('Note: To clear in-memory history for your current shell session:');
|
|
141
|
+
console.log(' Bash: Run "history -c" or start a new terminal');
|
|
142
|
+
console.log(' Zsh: Run "fc -p" or start a new terminal');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Clear shell history on macOS.
|
|
148
|
+
*
|
|
149
|
+
* macOS may use either bash (older versions) or zsh (Catalina and later).
|
|
150
|
+
* This function uses the pure Node.js implementation to clear all found
|
|
151
|
+
* history files.
|
|
152
|
+
*
|
|
153
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
154
|
+
* @returns {Promise<void>}
|
|
155
|
+
*/
|
|
156
|
+
async function do_ch_macos(args) {
|
|
157
|
+
return do_ch_nodejs(args);
|
|
158
|
+
}
|
|
159
|
+
|
|
8
160
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
161
|
+
* Clear shell history on Ubuntu.
|
|
162
|
+
*
|
|
163
|
+
* Ubuntu typically uses bash by default, but users may have installed
|
|
164
|
+
* and configured other shells like zsh or fish. This function clears
|
|
165
|
+
* all found history files.
|
|
11
166
|
*
|
|
12
167
|
* @param {string[]} args - Command line arguments (unused)
|
|
13
168
|
* @returns {Promise<void>}
|
|
14
169
|
*/
|
|
15
|
-
async function
|
|
16
|
-
|
|
170
|
+
async function do_ch_ubuntu(args) {
|
|
171
|
+
return do_ch_nodejs(args);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Clear shell history on Raspberry Pi OS.
|
|
176
|
+
*
|
|
177
|
+
* Raspberry Pi OS uses bash by default. This function clears all found
|
|
178
|
+
* history files using the pure Node.js implementation.
|
|
179
|
+
*
|
|
180
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
181
|
+
* @returns {Promise<void>}
|
|
182
|
+
*/
|
|
183
|
+
async function do_ch_raspbian(args) {
|
|
184
|
+
return do_ch_nodejs(args);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Clear shell history on Amazon Linux.
|
|
189
|
+
*
|
|
190
|
+
* Amazon Linux uses bash by default. This function clears all found
|
|
191
|
+
* history files using the pure Node.js implementation.
|
|
192
|
+
*
|
|
193
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
194
|
+
* @returns {Promise<void>}
|
|
195
|
+
*/
|
|
196
|
+
async function do_ch_amazon_linux(args) {
|
|
197
|
+
return do_ch_nodejs(args);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Clear command history in Windows Command Prompt.
|
|
202
|
+
*
|
|
203
|
+
* Windows CMD does not persist command history to a file by default.
|
|
204
|
+
* The history only exists in memory for the current session and is lost
|
|
205
|
+
* when the CMD window is closed.
|
|
206
|
+
*
|
|
207
|
+
* To clear the current session's history, the user would need to use
|
|
208
|
+
* `doskey /reinstall` from within CMD, but that cannot be done from
|
|
209
|
+
* a child process.
|
|
210
|
+
*
|
|
211
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
212
|
+
* @returns {Promise<void>}
|
|
213
|
+
*/
|
|
214
|
+
async function do_ch_cmd(args) {
|
|
215
|
+
console.log('Windows Command Prompt does not persist history to a file.');
|
|
216
|
+
console.log('');
|
|
217
|
+
console.log('CMD history only exists in memory for the current session.');
|
|
218
|
+
console.log('');
|
|
219
|
+
console.log('To clear the current session history:');
|
|
220
|
+
console.log(' - Close and reopen the CMD window, or');
|
|
221
|
+
console.log(' - Run: doskey /reinstall');
|
|
222
|
+
console.log('');
|
|
223
|
+
console.log('Note: History is automatically lost when you close CMD.');
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Clear command history in Windows PowerShell.
|
|
228
|
+
*
|
|
229
|
+
* PowerShell stores history in a file managed by PSReadLine module.
|
|
230
|
+
* The file location is determined by (Get-PSReadLineOption).HistorySavePath
|
|
231
|
+
* which is typically at:
|
|
232
|
+
* - %APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
|
|
233
|
+
*
|
|
234
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
235
|
+
* @returns {Promise<void>}
|
|
236
|
+
*/
|
|
237
|
+
async function do_ch_powershell(args) {
|
|
238
|
+
// Default PSReadLine history location
|
|
239
|
+
const appData = process.env.APPDATA;
|
|
240
|
+
|
|
241
|
+
if (!appData) {
|
|
242
|
+
console.error('Error: APPDATA environment variable not found.');
|
|
243
|
+
console.log('');
|
|
244
|
+
console.log('To clear PowerShell history manually:');
|
|
245
|
+
console.log(' Remove-Item (Get-PSReadLineOption).HistorySavePath');
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// PowerShell history file path
|
|
250
|
+
const historyPath = path.join(
|
|
251
|
+
appData,
|
|
252
|
+
'Microsoft',
|
|
253
|
+
'Windows',
|
|
254
|
+
'PowerShell',
|
|
255
|
+
'PSReadLine',
|
|
256
|
+
'ConsoleHost_history.txt'
|
|
257
|
+
);
|
|
258
|
+
|
|
259
|
+
if (!fs.existsSync(historyPath)) {
|
|
260
|
+
console.log('No PowerShell history file found.');
|
|
261
|
+
console.log('');
|
|
262
|
+
console.log('Expected location:');
|
|
263
|
+
console.log(` ${historyPath}`);
|
|
264
|
+
console.log('');
|
|
265
|
+
console.log('History may not be saved yet, or PSReadLine is not enabled.');
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
if (truncateFile(historyPath)) {
|
|
270
|
+
console.log(`Cleared: ${historyPath}`);
|
|
271
|
+
console.log('');
|
|
272
|
+
console.log('PowerShell history file cleared successfully.');
|
|
273
|
+
console.log('');
|
|
274
|
+
console.log('Note: To clear in-memory history for your current session:');
|
|
275
|
+
console.log(' [Microsoft.PowerShell.PSConsoleReadLine]::ClearHistory()');
|
|
276
|
+
console.log(' Or simply close and reopen PowerShell.');
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Clear shell history in Git Bash on Windows.
|
|
282
|
+
*
|
|
283
|
+
* Git Bash uses bash, so the history is stored in ~/.bash_history
|
|
284
|
+
* just like on Unix systems. We use the standard Node.js implementation.
|
|
285
|
+
*
|
|
286
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
287
|
+
* @returns {Promise<void>}
|
|
288
|
+
*/
|
|
289
|
+
async function do_ch_gitbash(args) {
|
|
290
|
+
return do_ch_nodejs(args);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Main entry point - detects environment and executes appropriate implementation.
|
|
295
|
+
*
|
|
296
|
+
* The "ch" (clear history) command clears the shell command history.
|
|
297
|
+
* This is useful for:
|
|
298
|
+
* - Privacy: Remove sensitive commands from history
|
|
299
|
+
* - Cleanup: Start fresh with a clean history
|
|
300
|
+
* - Security: Ensure no passwords/tokens are saved in history
|
|
301
|
+
*
|
|
302
|
+
* Important: This command clears the history FILE, but cannot clear the
|
|
303
|
+
* in-memory history of the parent shell process. The user should either
|
|
304
|
+
* start a new shell session or run the appropriate shell command to clear
|
|
305
|
+
* in-memory history (e.g., `history -c` for bash).
|
|
306
|
+
*
|
|
307
|
+
* @param {string[]} args - Command line arguments (unused)
|
|
308
|
+
* @returns {Promise<void>}
|
|
309
|
+
*/
|
|
310
|
+
async function do_ch(args) {
|
|
311
|
+
const platform = os.detect();
|
|
312
|
+
|
|
313
|
+
const handlers = {
|
|
314
|
+
'macos': do_ch_macos,
|
|
315
|
+
'ubuntu': do_ch_ubuntu,
|
|
316
|
+
'debian': do_ch_ubuntu,
|
|
317
|
+
'raspbian': do_ch_raspbian,
|
|
318
|
+
'amazon_linux': do_ch_amazon_linux,
|
|
319
|
+
'rhel': do_ch_amazon_linux,
|
|
320
|
+
'fedora': do_ch_ubuntu,
|
|
321
|
+
'linux': do_ch_ubuntu,
|
|
322
|
+
'wsl': do_ch_ubuntu,
|
|
323
|
+
'cmd': do_ch_cmd,
|
|
324
|
+
'windows': do_ch_cmd,
|
|
325
|
+
'powershell': do_ch_powershell,
|
|
326
|
+
'gitbash': do_ch_gitbash
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
const handler = handlers[platform.type];
|
|
330
|
+
if (!handler) {
|
|
331
|
+
// Fallback: Try the Node.js implementation for unknown Unix-like systems
|
|
332
|
+
console.error(`Note: Platform '${platform.type}' not explicitly supported, attempting to clear history files...`);
|
|
333
|
+
await do_ch_nodejs(args);
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
await handler(args);
|
|
17
338
|
}
|
|
18
339
|
|
|
19
|
-
module.exports = {
|
|
340
|
+
module.exports = {
|
|
341
|
+
main: do_ch,
|
|
342
|
+
do_ch,
|
|
343
|
+
do_ch_nodejs,
|
|
344
|
+
do_ch_macos,
|
|
345
|
+
do_ch_ubuntu,
|
|
346
|
+
do_ch_raspbian,
|
|
347
|
+
do_ch_amazon_linux,
|
|
348
|
+
do_ch_cmd,
|
|
349
|
+
do_ch_powershell,
|
|
350
|
+
do_ch_gitbash
|
|
351
|
+
};
|
|
20
352
|
|
|
21
353
|
if (require.main === module) {
|
|
22
|
-
|
|
354
|
+
do_ch(process.argv.slice(2));
|
|
23
355
|
}
|
|
@@ -1,23 +1,268 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* claude-danger - Launch Claude CLI with dangerous mode bypassing permission checks
|
|
5
|
+
*
|
|
6
|
+
* Migrated from legacy dotfiles function.
|
|
7
|
+
* Original:
|
|
8
|
+
* claude-danger() {
|
|
9
|
+
* if command -v claude >/dev/null 2>&1; then
|
|
10
|
+
* echo "Launching Claude CLI in dangerous mode (skipping permission checks)..."
|
|
11
|
+
* claude --dangerously-skip-permissions "$@"
|
|
12
|
+
* else
|
|
13
|
+
* echo "Claude is not currently installed."
|
|
14
|
+
* echo "Please install Claude CLI to use this function."
|
|
15
|
+
* return 1
|
|
16
|
+
* fi
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* This script launches the Claude CLI with the --dangerously-skip-permissions flag,
|
|
20
|
+
* which bypasses the normal permission prompts. This is useful for automation
|
|
21
|
+
* scenarios or when you trust the commands being executed.
|
|
22
|
+
*
|
|
23
|
+
* WARNING: Use with caution! This mode skips safety prompts that normally
|
|
24
|
+
* protect you from potentially harmful operations.
|
|
25
|
+
*
|
|
5
26
|
* @module scripts/claude-danger
|
|
6
27
|
*/
|
|
7
28
|
|
|
29
|
+
const os = require('../utils/common/os');
|
|
30
|
+
const { execSync, spawn } = require('child_process');
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Helper function to check if a command exists on the system.
|
|
34
|
+
* Works cross-platform using 'which' on Unix-like systems and 'where' on Windows.
|
|
35
|
+
*
|
|
36
|
+
* @param {string} cmd - The command name to check
|
|
37
|
+
* @returns {boolean} True if the command exists, false otherwise
|
|
38
|
+
*/
|
|
39
|
+
function isCommandAvailable(cmd) {
|
|
40
|
+
try {
|
|
41
|
+
// Use 'which' on Unix-like systems, 'where' on Windows
|
|
42
|
+
const checkCmd = process.platform === 'win32' ? `where ${cmd}` : `which ${cmd}`;
|
|
43
|
+
execSync(checkCmd, { stdio: 'ignore' });
|
|
44
|
+
return true;
|
|
45
|
+
} catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Pure Node.js implementation that works on any platform.
|
|
52
|
+
*
|
|
53
|
+
* This function checks for the Claude CLI and launches it with the
|
|
54
|
+
* --dangerously-skip-permissions flag. Since the Claude CLI is a cross-platform
|
|
55
|
+
* Node.js application itself, the core logic is identical across all platforms.
|
|
56
|
+
*
|
|
57
|
+
* The only difference is how we check for command availability (which vs where),
|
|
58
|
+
* which is handled by the isCommandAvailable helper.
|
|
59
|
+
*
|
|
60
|
+
* @param {string[]} args - Command line arguments to pass to Claude CLI
|
|
61
|
+
* @returns {Promise<void>}
|
|
62
|
+
*/
|
|
63
|
+
async function do_claude_danger_nodejs(args) {
|
|
64
|
+
// Check if the claude command is available
|
|
65
|
+
if (!isCommandAvailable('claude')) {
|
|
66
|
+
console.error('Error: Claude CLI is not currently installed.');
|
|
67
|
+
console.error('');
|
|
68
|
+
console.error('To install Claude CLI, visit:');
|
|
69
|
+
console.error(' https://claude.ai/code');
|
|
70
|
+
console.error('');
|
|
71
|
+
console.error('Or install via npm:');
|
|
72
|
+
console.error(' npm install -g @anthropic-ai/claude-code');
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Inform the user that we are launching in dangerous mode
|
|
77
|
+
console.log('Launching Claude CLI in dangerous mode (skipping permission checks)...');
|
|
78
|
+
console.log('');
|
|
79
|
+
|
|
80
|
+
// Build the command arguments
|
|
81
|
+
// The --dangerously-skip-permissions flag comes first, then any user-provided args
|
|
82
|
+
const claudeArgs = ['--dangerously-skip-permissions', ...args];
|
|
83
|
+
|
|
84
|
+
// Use spawn instead of execSync to properly inherit stdio and allow interactive use
|
|
85
|
+
// spawn is better here because Claude CLI is an interactive application
|
|
86
|
+
const child = spawn('claude', claudeArgs, {
|
|
87
|
+
stdio: 'inherit',
|
|
88
|
+
shell: true
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// Handle the process exit
|
|
92
|
+
return new Promise((resolve, reject) => {
|
|
93
|
+
child.on('close', (code) => {
|
|
94
|
+
if (code !== 0 && code !== null) {
|
|
95
|
+
process.exit(code);
|
|
96
|
+
}
|
|
97
|
+
resolve();
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
child.on('error', (error) => {
|
|
101
|
+
console.error('Error: Failed to launch Claude CLI.');
|
|
102
|
+
console.error(error.message);
|
|
103
|
+
process.exit(1);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Launch Claude CLI in dangerous mode on macOS.
|
|
110
|
+
*
|
|
111
|
+
* macOS uses the same cross-platform Node.js implementation since the Claude CLI
|
|
112
|
+
* is a Node.js application that works identically across platforms.
|
|
113
|
+
*
|
|
114
|
+
* @param {string[]} args - Command line arguments to pass to Claude CLI
|
|
115
|
+
* @returns {Promise<void>}
|
|
116
|
+
*/
|
|
117
|
+
async function do_claude_danger_macos(args) {
|
|
118
|
+
return do_claude_danger_nodejs(args);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Launch Claude CLI in dangerous mode on Ubuntu.
|
|
123
|
+
*
|
|
124
|
+
* Ubuntu uses the same cross-platform Node.js implementation since the Claude CLI
|
|
125
|
+
* is a Node.js application that works identically across platforms.
|
|
126
|
+
*
|
|
127
|
+
* @param {string[]} args - Command line arguments to pass to Claude CLI
|
|
128
|
+
* @returns {Promise<void>}
|
|
129
|
+
*/
|
|
130
|
+
async function do_claude_danger_ubuntu(args) {
|
|
131
|
+
return do_claude_danger_nodejs(args);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Launch Claude CLI in dangerous mode on Raspberry Pi OS.
|
|
136
|
+
*
|
|
137
|
+
* Raspberry Pi OS uses the same cross-platform Node.js implementation since the
|
|
138
|
+
* Claude CLI is a Node.js application that works identically across platforms.
|
|
139
|
+
*
|
|
140
|
+
* @param {string[]} args - Command line arguments to pass to Claude CLI
|
|
141
|
+
* @returns {Promise<void>}
|
|
142
|
+
*/
|
|
143
|
+
async function do_claude_danger_raspbian(args) {
|
|
144
|
+
return do_claude_danger_nodejs(args);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Launch Claude CLI in dangerous mode on Amazon Linux.
|
|
149
|
+
*
|
|
150
|
+
* Amazon Linux uses the same cross-platform Node.js implementation since the
|
|
151
|
+
* Claude CLI is a Node.js application that works identically across platforms.
|
|
152
|
+
*
|
|
153
|
+
* @param {string[]} args - Command line arguments to pass to Claude CLI
|
|
154
|
+
* @returns {Promise<void>}
|
|
155
|
+
*/
|
|
156
|
+
async function do_claude_danger_amazon_linux(args) {
|
|
157
|
+
return do_claude_danger_nodejs(args);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Launch Claude CLI in dangerous mode on Windows Command Prompt.
|
|
162
|
+
*
|
|
163
|
+
* Windows uses the same cross-platform Node.js implementation since the Claude CLI
|
|
164
|
+
* is a Node.js application that works identically across platforms.
|
|
165
|
+
*
|
|
166
|
+
* @param {string[]} args - Command line arguments to pass to Claude CLI
|
|
167
|
+
* @returns {Promise<void>}
|
|
168
|
+
*/
|
|
169
|
+
async function do_claude_danger_cmd(args) {
|
|
170
|
+
return do_claude_danger_nodejs(args);
|
|
171
|
+
}
|
|
172
|
+
|
|
8
173
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
174
|
+
* Launch Claude CLI in dangerous mode on Windows PowerShell.
|
|
175
|
+
*
|
|
176
|
+
* Windows PowerShell uses the same cross-platform Node.js implementation since the
|
|
177
|
+
* Claude CLI is a Node.js application that works identically across platforms.
|
|
11
178
|
*
|
|
12
|
-
* @param {string[]} args - Command line arguments to pass to Claude
|
|
179
|
+
* @param {string[]} args - Command line arguments to pass to Claude CLI
|
|
13
180
|
* @returns {Promise<void>}
|
|
14
181
|
*/
|
|
15
|
-
async function
|
|
16
|
-
|
|
182
|
+
async function do_claude_danger_powershell(args) {
|
|
183
|
+
return do_claude_danger_nodejs(args);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Launch Claude CLI in dangerous mode in Git Bash.
|
|
188
|
+
*
|
|
189
|
+
* Git Bash uses the same cross-platform Node.js implementation since the Claude CLI
|
|
190
|
+
* is a Node.js application that works identically across platforms.
|
|
191
|
+
*
|
|
192
|
+
* @param {string[]} args - Command line arguments to pass to Claude CLI
|
|
193
|
+
* @returns {Promise<void>}
|
|
194
|
+
*/
|
|
195
|
+
async function do_claude_danger_gitbash(args) {
|
|
196
|
+
return do_claude_danger_nodejs(args);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Main entry point - detects environment and executes appropriate implementation.
|
|
201
|
+
*
|
|
202
|
+
* The "claude-danger" command launches the Claude CLI with the
|
|
203
|
+
* --dangerously-skip-permissions flag, which bypasses the normal permission
|
|
204
|
+
* prompts that Claude shows before executing certain operations.
|
|
205
|
+
*
|
|
206
|
+
* This is useful when:
|
|
207
|
+
* - Running Claude in automated/CI environments
|
|
208
|
+
* - You trust the operations being performed
|
|
209
|
+
* - You want faster iteration without confirmation prompts
|
|
210
|
+
*
|
|
211
|
+
* WARNING: Use with caution! The permission prompts exist to protect you
|
|
212
|
+
* from unintended file modifications, command execution, and other
|
|
213
|
+
* potentially harmful operations.
|
|
214
|
+
*
|
|
215
|
+
* @param {string[]} args - Command line arguments to pass to Claude CLI
|
|
216
|
+
* @returns {Promise<void>}
|
|
217
|
+
*/
|
|
218
|
+
async function do_claude_danger(args) {
|
|
219
|
+
const platform = os.detect();
|
|
220
|
+
|
|
221
|
+
const handlers = {
|
|
222
|
+
'macos': do_claude_danger_macos,
|
|
223
|
+
'ubuntu': do_claude_danger_ubuntu,
|
|
224
|
+
'debian': do_claude_danger_ubuntu,
|
|
225
|
+
'raspbian': do_claude_danger_raspbian,
|
|
226
|
+
'amazon_linux': do_claude_danger_amazon_linux,
|
|
227
|
+
'rhel': do_claude_danger_amazon_linux,
|
|
228
|
+
'fedora': do_claude_danger_ubuntu,
|
|
229
|
+
'linux': do_claude_danger_ubuntu,
|
|
230
|
+
'wsl': do_claude_danger_ubuntu,
|
|
231
|
+
'cmd': do_claude_danger_cmd,
|
|
232
|
+
'windows': do_claude_danger_cmd,
|
|
233
|
+
'powershell': do_claude_danger_powershell,
|
|
234
|
+
'gitbash': do_claude_danger_gitbash
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
const handler = handlers[platform.type];
|
|
238
|
+
if (!handler) {
|
|
239
|
+
console.error(`Platform '${platform.type}' is not supported for this command.`);
|
|
240
|
+
console.error('');
|
|
241
|
+
console.error('Supported platforms:');
|
|
242
|
+
console.error(' - macOS');
|
|
243
|
+
console.error(' - Ubuntu, Debian, and other Linux distributions');
|
|
244
|
+
console.error(' - Raspberry Pi OS');
|
|
245
|
+
console.error(' - Amazon Linux');
|
|
246
|
+
console.error(' - Windows (CMD, PowerShell, Git Bash)');
|
|
247
|
+
process.exit(1);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
await handler(args);
|
|
17
251
|
}
|
|
18
252
|
|
|
19
|
-
module.exports = {
|
|
253
|
+
module.exports = {
|
|
254
|
+
main: do_claude_danger,
|
|
255
|
+
do_claude_danger,
|
|
256
|
+
do_claude_danger_nodejs,
|
|
257
|
+
do_claude_danger_macos,
|
|
258
|
+
do_claude_danger_ubuntu,
|
|
259
|
+
do_claude_danger_raspbian,
|
|
260
|
+
do_claude_danger_amazon_linux,
|
|
261
|
+
do_claude_danger_cmd,
|
|
262
|
+
do_claude_danger_powershell,
|
|
263
|
+
do_claude_danger_gitbash
|
|
264
|
+
};
|
|
20
265
|
|
|
21
266
|
if (require.main === module) {
|
|
22
|
-
|
|
267
|
+
do_claude_danger(process.argv.slice(2));
|
|
23
268
|
}
|