httpcat-cli 0.3.0 → 0.3.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/.github/workflows/ci.yml +3 -0
- package/.github/workflows/rc-publish.yml +6 -0
- package/.github/workflows/release.yml +102 -0
- package/.github/workflows/sync-version.yml +31 -2
- package/README.md +1408 -109
- package/additions.txt +3 -0
- package/bun.lock +260 -25
- package/dist/agent/autonomous-trader.d.ts.map +1 -0
- package/dist/agent/autonomous-trader.js +362 -0
- package/dist/agent/autonomous-trader.js.map +1 -0
- package/dist/agent/ax-agent.d.ts.map +1 -1
- package/dist/agent/ax-agent.js +356 -18
- package/dist/agent/ax-agent.js.map +1 -1
- package/dist/agent/event-client.d.ts.map +1 -0
- package/dist/agent/event-client.js +82 -0
- package/dist/agent/event-client.js.map +1 -0
- package/dist/agent/log-stream.d.ts.map +1 -0
- package/dist/agent/log-stream.js +95 -0
- package/dist/agent/log-stream.js.map +1 -0
- package/dist/agent/memory/conversation-session.d.ts.map +1 -0
- package/dist/agent/memory/conversation-session.js +232 -0
- package/dist/agent/memory/conversation-session.js.map +1 -0
- package/dist/agent/memory/conversation-store.d.ts.map +1 -0
- package/dist/agent/memory/conversation-store.js +214 -0
- package/dist/agent/memory/conversation-store.js.map +1 -0
- package/dist/agent/memory/database-schema.d.ts.map +1 -0
- package/dist/agent/memory/database-schema.js +355 -0
- package/dist/agent/memory/database-schema.js.map +1 -0
- package/dist/agent/memory/decision-tracker.d.ts.map +1 -0
- package/dist/agent/memory/decision-tracker.js +274 -0
- package/dist/agent/memory/decision-tracker.js.map +1 -0
- package/dist/agent/memory/memory-manager.d.ts.map +1 -0
- package/dist/agent/memory/memory-manager.js +187 -0
- package/dist/agent/memory/memory-manager.js.map +1 -0
- package/dist/agent/memory/types.d.ts.map +1 -0
- package/dist/agent/memory/types.js +5 -0
- package/dist/agent/memory/types.js.map +1 -0
- package/dist/agent/message-formatter.d.ts.map +1 -0
- package/dist/agent/message-formatter.js +76 -0
- package/dist/agent/message-formatter.js.map +1 -0
- package/dist/agent/position-db.d.ts.map +1 -0
- package/dist/agent/position-db.js +154 -0
- package/dist/agent/position-db.js.map +1 -0
- package/dist/agent/simple-chat-ui-static.d.ts.map +1 -0
- package/dist/agent/simple-chat-ui-static.js +129 -0
- package/dist/agent/simple-chat-ui-static.js.map +1 -0
- package/dist/agent/simple-chat-ui.d.ts.map +1 -0
- package/dist/agent/simple-chat-ui.js +90 -0
- package/dist/agent/simple-chat-ui.js.map +1 -0
- package/dist/agent/tools.d.ts.map +1 -1
- package/dist/agent/tools.js +297 -4
- package/dist/agent/tools.js.map +1 -1
- package/dist/agent/ui.d.ts.map +1 -0
- package/dist/agent/ui.js +84 -0
- package/dist/agent/ui.js.map +1 -0
- package/dist/agent/unified-runtime.d.ts.map +1 -0
- package/dist/agent/unified-runtime.js +397 -0
- package/dist/agent/unified-runtime.js.map +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +272 -21
- package/dist/client.js.map +1 -1
- package/dist/commands/account.d.ts.map +1 -1
- package/dist/commands/account.js +187 -33
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +125 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/approve.d.ts.map +1 -0
- package/dist/commands/approve.js +505 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/automation.d.ts.map +1 -0
- package/dist/commands/automation.js +346 -0
- package/dist/commands/automation.js.map +1 -0
- package/dist/commands/balances.d.ts.map +1 -1
- package/dist/commands/balances.js +226 -73
- package/dist/commands/balances.js.map +1 -1
- package/dist/commands/buy.d.ts.map +1 -1
- package/dist/commands/buy.js +149 -146
- package/dist/commands/buy.js.map +1 -1
- package/dist/commands/call.d.ts.map +1 -0
- package/dist/commands/call.js +51 -0
- package/dist/commands/call.js.map +1 -0
- package/dist/commands/cex.d.ts.map +1 -0
- package/dist/commands/cex.js +958 -0
- package/dist/commands/cex.js.map +1 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +169 -411
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/claim.d.ts.map +1 -1
- package/dist/commands/claim.js +313 -29
- package/dist/commands/claim.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +151 -43
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/gasless-swap.d.ts.map +1 -0
- package/dist/commands/gasless-swap.js +232 -0
- package/dist/commands/gasless-swap.js.map +1 -0
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +63 -7
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +131 -47
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/launchpad.d.ts.map +1 -0
- package/dist/commands/launchpad.js +708 -0
- package/dist/commands/launchpad.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +57 -23
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/market.d.ts.map +1 -0
- package/dist/commands/market.js +960 -0
- package/dist/commands/market.js.map +1 -0
- package/dist/commands/mcp-install.d.ts.map +1 -0
- package/dist/commands/mcp-install.js +387 -0
- package/dist/commands/mcp-install.js.map +1 -0
- package/dist/commands/opps.d.ts.map +1 -0
- package/dist/commands/opps.js +409 -0
- package/dist/commands/opps.js.map +1 -0
- package/dist/commands/perps.d.ts.map +1 -0
- package/dist/commands/perps.js +248 -0
- package/dist/commands/perps.js.map +1 -0
- package/dist/commands/portfolio.d.ts.map +1 -0
- package/dist/commands/portfolio.js +679 -0
- package/dist/commands/portfolio.js.map +1 -0
- package/dist/commands/positions.d.ts.map +1 -1
- package/dist/commands/positions.js +76 -47
- package/dist/commands/positions.js.map +1 -1
- package/dist/commands/predict.d.ts.map +1 -0
- package/dist/commands/predict.js +280 -0
- package/dist/commands/predict.js.map +1 -0
- package/dist/commands/predictions.d.ts.map +1 -0
- package/dist/commands/predictions.js +486 -0
- package/dist/commands/predictions.js.map +1 -0
- package/dist/commands/risk.d.ts.map +1 -0
- package/dist/commands/risk.js +225 -0
- package/dist/commands/risk.js.map +1 -0
- package/dist/commands/security.d.ts.map +1 -0
- package/dist/commands/security.js +244 -0
- package/dist/commands/security.js.map +1 -0
- package/dist/commands/sell.d.ts.map +1 -1
- package/dist/commands/sell.js +67 -34
- package/dist/commands/sell.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +733 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/sign.d.ts.map +1 -0
- package/dist/commands/sign.js +1048 -0
- package/dist/commands/sign.js.map +1 -0
- package/dist/commands/swap.d.ts.map +1 -0
- package/dist/commands/swap.js +744 -0
- package/dist/commands/swap.js.map +1 -0
- package/dist/commands/system.d.ts.map +1 -0
- package/dist/commands/system.js +417 -0
- package/dist/commands/system.js.map +1 -0
- package/dist/commands/tools/index.d.ts.map +1 -0
- package/dist/commands/tools/index.js +2040 -0
- package/dist/commands/tools/index.js.map +1 -0
- package/dist/commands/trade.d.ts.map +1 -0
- package/dist/commands/trade.js +237 -0
- package/dist/commands/trade.js.map +1 -0
- package/dist/commands/transactions.d.ts.map +1 -1
- package/dist/commands/transactions.js +29 -17
- package/dist/commands/transactions.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +429 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +351 -40
- package/dist/config.js.map +1 -1
- package/dist/index.js +4524 -924
- package/dist/index.js.map +1 -1
- package/dist/interactive/art.d.ts.map +1 -1
- package/dist/interactive/art.js +33 -1
- package/dist/interactive/art.js.map +1 -1
- package/dist/interactive/shell.d.ts.map +1 -1
- package/dist/interactive/shell.js +467 -2652
- package/dist/interactive/shell.js.map +1 -1
- package/dist/mcp/context.d.ts.map +1 -0
- package/dist/mcp/context.js +211 -0
- package/dist/mcp/context.js.map +1 -0
- package/dist/mcp/onboarding.d.ts.map +1 -0
- package/dist/mcp/onboarding.js +266 -0
- package/dist/mcp/onboarding.js.map +1 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +222 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +51 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +4119 -169
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/types/agent-info.d.ts.map +1 -0
- package/dist/types/agent-info.js +11 -0
- package/dist/types/agent-info.js.map +1 -0
- package/dist/ui/components/ScrollableList.d.ts.map +1 -0
- package/dist/ui/components/ScrollableList.js +72 -0
- package/dist/ui/components/ScrollableList.js.map +1 -0
- package/dist/ui/components/ThemeProvider.d.ts.map +1 -0
- package/dist/ui/components/ThemeProvider.js +87 -0
- package/dist/ui/components/ThemeProvider.js.map +1 -0
- package/dist/ui/components/ThemedBox.d.ts.map +1 -0
- package/dist/ui/components/ThemedBox.js +24 -0
- package/dist/ui/components/ThemedBox.js.map +1 -0
- package/dist/ui/components/agent/ChatHeader.d.ts.map +1 -0
- package/dist/ui/components/agent/ChatHeader.js +39 -0
- package/dist/ui/components/agent/ChatHeader.js.map +1 -0
- package/dist/ui/components/agent/Header.d.ts.map +1 -0
- package/dist/ui/components/agent/Header.js +14 -0
- package/dist/ui/components/agent/Header.js.map +1 -0
- package/dist/ui/components/agent/Input.d.ts.map +1 -0
- package/dist/ui/components/agent/Input.js +23 -0
- package/dist/ui/components/agent/Input.js.map +1 -0
- package/dist/ui/components/agent/Output.d.ts.map +1 -0
- package/dist/ui/components/agent/Output.js +23 -0
- package/dist/ui/components/agent/Output.js.map +1 -0
- package/dist/ui/components/chat/TokenChatUI.d.ts.map +1 -0
- package/dist/ui/components/chat/TokenChatUI.js +133 -0
- package/dist/ui/components/chat/TokenChatUI.js.map +1 -0
- package/dist/ui/components/shell/ShellHeader.d.ts.map +1 -0
- package/dist/ui/components/shell/ShellHeader.js +31 -0
- package/dist/ui/components/shell/ShellHeader.js.map +1 -0
- package/dist/ui/components/shell/ShellInput.d.ts.map +1 -0
- package/dist/ui/components/shell/ShellInput.js +151 -0
- package/dist/ui/components/shell/ShellInput.js.map +1 -0
- package/dist/ui/components/shell/ShellOutput.d.ts.map +1 -0
- package/dist/ui/components/shell/ShellOutput.js +8 -0
- package/dist/ui/components/shell/ShellOutput.js.map +1 -0
- package/dist/ui/hooks/useChatWebSocket.d.ts.map +1 -0
- package/dist/ui/hooks/useChatWebSocket.js +76 -0
- package/dist/ui/hooks/useChatWebSocket.js.map +1 -0
- package/dist/ui/hooks/useCommandHistory.d.ts.map +1 -0
- package/dist/ui/hooks/useCommandHistory.js +70 -0
- package/dist/ui/hooks/useCommandHistory.js.map +1 -0
- package/dist/ui/hooks/useDebounce.d.ts.map +1 -0
- package/dist/ui/hooks/useDebounce.js +17 -0
- package/dist/ui/hooks/useDebounce.js.map +1 -0
- package/dist/ui/hooks/useLogStream.d.ts.map +1 -0
- package/dist/ui/hooks/useLogStream.js +20 -0
- package/dist/ui/hooks/useLogStream.js.map +1 -0
- package/dist/ui/hooks/useVirtualScroll.d.ts.map +1 -0
- package/dist/ui/hooks/useVirtualScroll.js +70 -0
- package/dist/ui/hooks/useVirtualScroll.js.map +1 -0
- package/dist/utils/admin.d.ts.map +1 -0
- package/dist/utils/admin.js +144 -0
- package/dist/utils/admin.js.map +1 -0
- package/dist/utils/autoSetup.d.ts.map +1 -0
- package/dist/utils/autoSetup.js +252 -0
- package/dist/utils/autoSetup.js.map +1 -0
- package/dist/utils/build-constants.d.ts.map +1 -0
- package/dist/utils/build-constants.js +10 -0
- package/dist/utils/build-constants.js.map +1 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +10 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +46 -9
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/llm-cli-config.d.ts.map +1 -0
- package/dist/utils/llm-cli-config.js +963 -0
- package/dist/utils/llm-cli-config.js.map +1 -0
- package/dist/utils/llm-cli-detector.d.ts.map +1 -0
- package/dist/utils/llm-cli-detector.js +202 -0
- package/dist/utils/llm-cli-detector.js.map +1 -0
- package/dist/utils/loading.d.ts.map +1 -1
- package/dist/utils/loading.js +25 -3
- package/dist/utils/loading.js.map +1 -1
- package/dist/utils/maintenance.d.ts.map +1 -0
- package/dist/utils/maintenance.js +17 -0
- package/dist/utils/maintenance.js.map +1 -0
- package/dist/utils/mcp-config.d.ts.map +1 -0
- package/dist/utils/mcp-config.js +77 -0
- package/dist/utils/mcp-config.js.map +1 -0
- package/dist/utils/privateKeyPrompt.d.ts.map +1 -1
- package/dist/utils/privateKeyPrompt.js +308 -129
- package/dist/utils/privateKeyPrompt.js.map +1 -1
- package/dist/utils/process-cleanup.d.ts.map +1 -0
- package/dist/utils/process-cleanup.js +136 -0
- package/dist/utils/process-cleanup.js.map +1 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +56 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/rpc-helpers.d.ts.map +1 -0
- package/dist/utils/rpc-helpers.js +70 -0
- package/dist/utils/rpc-helpers.js.map +1 -0
- package/dist/utils/rpc-transport.d.ts.map +1 -0
- package/dist/utils/rpc-transport.js +87 -0
- package/dist/utils/rpc-transport.js.map +1 -0
- package/dist/utils/shell-setup.d.ts.map +1 -0
- package/dist/utils/shell-setup.js +531 -0
- package/dist/utils/shell-setup.js.map +1 -0
- package/dist/utils/status.d.ts.map +1 -1
- package/dist/utils/status.js +34 -5
- package/dist/utils/status.js.map +1 -1
- package/dist/utils/token-resolver.d.ts.map +1 -1
- package/dist/utils/token-resolver.js +51 -8
- package/dist/utils/token-resolver.js.map +1 -1
- package/dist/utils/x402-caller.d.ts.map +1 -0
- package/dist/utils/x402-caller.js +17 -0
- package/dist/utils/x402-caller.js.map +1 -0
- package/docs/README.md +28 -0
- package/docs/agent/README.md +18 -0
- package/docs/api/README.md +41 -0
- package/docs/cli/README.md +42 -0
- package/docs/guides/README.md +26 -0
- package/docs/implementation/README.md +18 -0
- package/docs/planning/README.md +19 -0
- package/docs/testing/README.md +15 -0
- package/docs/ux/README.md +16 -0
- package/issues.txt +2 -0
- package/package.json +24 -9
- package/scripts/cat-spin.sh +417 -0
- package/scripts/deprecate-rc-versions.js +58 -0
- package/scripts/inject-build-constants.js +43 -0
- package/scripts/monitor-foobar.js +117 -0
- package/swap.logs +61 -0
- package/swapping.txt +108 -0
- package/test.txt +12 -0
- package/tests/fixtures/test-data.json +16 -0
- package/Screenshot 2025-12-21 at 8.56.02/342/200/257PM.png +0 -0
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell Setup Utilities
|
|
3
|
+
*
|
|
4
|
+
* Functions to install shell autocompletion and create aliases for httpcat CLI.
|
|
5
|
+
* Supports bash and zsh shells with automatic detection.
|
|
6
|
+
*/
|
|
7
|
+
import fs from "fs";
|
|
8
|
+
import path from "path";
|
|
9
|
+
import os from "os";
|
|
10
|
+
import { execSync } from "child_process";
|
|
11
|
+
import chalk from "chalk";
|
|
12
|
+
/**
|
|
13
|
+
* Detect the current shell from environment variables
|
|
14
|
+
*
|
|
15
|
+
* @returns Detected shell type or "unknown" if detection fails
|
|
16
|
+
*/
|
|
17
|
+
export function detectShell() {
|
|
18
|
+
const shell = process.env.SHELL || "";
|
|
19
|
+
if (shell.includes("zsh")) {
|
|
20
|
+
return "zsh";
|
|
21
|
+
}
|
|
22
|
+
else if (shell.includes("bash")) {
|
|
23
|
+
return "bash";
|
|
24
|
+
}
|
|
25
|
+
return "unknown";
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Find the httpcat binary location
|
|
29
|
+
*
|
|
30
|
+
* @returns Full path to httpcat binary or null if not found
|
|
31
|
+
*/
|
|
32
|
+
export function findHttpcatBinary() {
|
|
33
|
+
try {
|
|
34
|
+
// Try to find httpcat in PATH
|
|
35
|
+
const result = execSync("which httpcat", { encoding: "utf-8" }).trim();
|
|
36
|
+
if (result && fs.existsSync(result)) {
|
|
37
|
+
// Resolve symlinks to get actual binary location
|
|
38
|
+
try {
|
|
39
|
+
const resolved = fs.realpathSync(result);
|
|
40
|
+
return resolved;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Command not found
|
|
49
|
+
}
|
|
50
|
+
// Fallback: check common npm/yarn global locations
|
|
51
|
+
const homeDir = os.homedir();
|
|
52
|
+
const commonPaths = [
|
|
53
|
+
path.join(homeDir, ".npm-global", "bin", "httpcat"),
|
|
54
|
+
path.join(homeDir, ".yarn", "bin", "httpcat"),
|
|
55
|
+
path.join(homeDir, ".local", "bin", "httpcat"),
|
|
56
|
+
"/usr/local/bin/httpcat",
|
|
57
|
+
"/opt/homebrew/bin/httpcat",
|
|
58
|
+
];
|
|
59
|
+
for (const binPath of commonPaths) {
|
|
60
|
+
if (fs.existsSync(binPath)) {
|
|
61
|
+
try {
|
|
62
|
+
return fs.realpathSync(binPath);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return binPath;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Generate bash completion script
|
|
73
|
+
*
|
|
74
|
+
* @param program - Commander.js program instance (optional)
|
|
75
|
+
* @returns Bash completion script content
|
|
76
|
+
*/
|
|
77
|
+
export function generateBashCompletion(program) {
|
|
78
|
+
// Get commands from program if available, otherwise use fallback list
|
|
79
|
+
let commands = [];
|
|
80
|
+
let subcommandMap = {};
|
|
81
|
+
if (program && program.commands) {
|
|
82
|
+
// Get all visible (non-hidden) commands
|
|
83
|
+
commands = program.commands
|
|
84
|
+
.filter((cmd) => !cmd._hidden)
|
|
85
|
+
.map((cmd) => cmd.name())
|
|
86
|
+
.filter((name) => name && name !== "help"); // Exclude help command
|
|
87
|
+
// Get subcommands for each command
|
|
88
|
+
for (const cmd of program.commands) {
|
|
89
|
+
if (cmd._hidden)
|
|
90
|
+
continue;
|
|
91
|
+
const cmdName = cmd.name();
|
|
92
|
+
if (!cmdName || cmdName === "help")
|
|
93
|
+
continue;
|
|
94
|
+
if (cmd.commands && cmd.commands.length > 0) {
|
|
95
|
+
const subcommands = cmd.commands
|
|
96
|
+
.filter((subcmd) => !subcmd._hidden)
|
|
97
|
+
.map((subcmd) => subcmd.name())
|
|
98
|
+
.filter((name) => name && name !== "help");
|
|
99
|
+
if (subcommands.length > 0) {
|
|
100
|
+
subcommandMap[cmdName] = subcommands;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// Fallback list if program not provided
|
|
107
|
+
commands = [
|
|
108
|
+
"config", "launchpad", "trade", "system", "chat",
|
|
109
|
+
"mcp", "use", "portfolio", "agent", "tools"
|
|
110
|
+
];
|
|
111
|
+
// Fallback subcommands
|
|
112
|
+
subcommandMap = {
|
|
113
|
+
launchpad: ["create", "buy", "sell", "list", "info", "positions", "fees"],
|
|
114
|
+
trade: ["swap", "gasless-submit", "gasless-submit-our", "gasless-quote", "gasless-status"],
|
|
115
|
+
portfolio: ["balances", "summary", "pnl", "transactions", "positions"],
|
|
116
|
+
system: ["health", "status", "limits", "sources"],
|
|
117
|
+
config: ["setup", "reset", "env", "account", "completion"],
|
|
118
|
+
mcp: ["install", "start"],
|
|
119
|
+
agent: ["cat", "context"],
|
|
120
|
+
tools: ["address", "abi", "tx", "signature", "multicall", "nonce", "gas", "key", "rpc", "call"],
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
const commandsStr = commands.join(" ");
|
|
124
|
+
// Build subcommand case statements
|
|
125
|
+
let subcommandCases = "";
|
|
126
|
+
for (const [cmd, subs] of Object.entries(subcommandMap)) {
|
|
127
|
+
if (subs && subs.length > 0) {
|
|
128
|
+
const subsStr = subs.join(" ");
|
|
129
|
+
subcommandCases += ` "${cmd}")\n opts="${subsStr}"\n COMPREPLY=( $(compgen -W "\${opts}" -- "\${cur}") )\n ;;\n`;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return `# httpcat bash completion
|
|
133
|
+
_httpcat_completion() {
|
|
134
|
+
local cur prev opts
|
|
135
|
+
COMPREPLY=()
|
|
136
|
+
cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
137
|
+
prev="\${COMP_WORDS[COMP_CWORD-1]}"
|
|
138
|
+
|
|
139
|
+
# Top-level command completion
|
|
140
|
+
if [ "\${COMP_CWORD}" -eq 1 ]; then
|
|
141
|
+
opts="${commandsStr}"
|
|
142
|
+
COMPREPLY=( $(compgen -W "\${opts}" -- "\${cur}") )
|
|
143
|
+
# Subcommand completion
|
|
144
|
+
elif [ "\${COMP_CWORD}" -eq 2 ]; then
|
|
145
|
+
case "\${prev}" in
|
|
146
|
+
${subcommandCases} esac
|
|
147
|
+
fi
|
|
148
|
+
|
|
149
|
+
return 0
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
complete -F _httpcat_completion httpcat
|
|
153
|
+
`;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Generate zsh completion script
|
|
157
|
+
*
|
|
158
|
+
* @param program - Commander.js program instance (optional)
|
|
159
|
+
* @returns Zsh completion script content
|
|
160
|
+
*/
|
|
161
|
+
export function generateZshCompletion(program) {
|
|
162
|
+
// Get commands from program if available
|
|
163
|
+
let commands = [];
|
|
164
|
+
let subcommandMap = {};
|
|
165
|
+
if (program && program.commands) {
|
|
166
|
+
// Get all visible (non-hidden) commands with their descriptions
|
|
167
|
+
commands = program.commands
|
|
168
|
+
.filter((cmd) => !cmd._hidden)
|
|
169
|
+
.map((cmd) => {
|
|
170
|
+
const name = cmd.name();
|
|
171
|
+
const desc = cmd.description() || "";
|
|
172
|
+
return [name, desc];
|
|
173
|
+
})
|
|
174
|
+
.filter(([name]) => name && name !== "help"); // Exclude help command
|
|
175
|
+
// Get subcommands for each command
|
|
176
|
+
for (const cmd of program.commands) {
|
|
177
|
+
if (cmd._hidden)
|
|
178
|
+
continue;
|
|
179
|
+
const cmdName = cmd.name();
|
|
180
|
+
if (!cmdName || cmdName === "help")
|
|
181
|
+
continue;
|
|
182
|
+
if (cmd.commands && cmd.commands.length > 0) {
|
|
183
|
+
const subcommands = cmd.commands
|
|
184
|
+
.filter((subcmd) => !subcmd._hidden)
|
|
185
|
+
.map((subcmd) => {
|
|
186
|
+
const subName = subcmd.name();
|
|
187
|
+
const subDesc = subcmd.description() || "";
|
|
188
|
+
return [subName, subDesc];
|
|
189
|
+
})
|
|
190
|
+
.filter(([name]) => name && name !== "help");
|
|
191
|
+
if (subcommands.length > 0) {
|
|
192
|
+
subcommandMap[cmdName] = subcommands;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
// Fallback list if program not provided
|
|
199
|
+
commands = [
|
|
200
|
+
["config", "Configure httpcat (settings, environments, accounts)"],
|
|
201
|
+
["launchpad", "402.cat Launchpad operations (bonding curve tokens)"],
|
|
202
|
+
["trade", "Trading operations (swaps)"],
|
|
203
|
+
["system", "System operations and health checks"],
|
|
204
|
+
["chat", "Start streaming chat"],
|
|
205
|
+
["mcp", "MCP (Model Context Protocol) server and installation"],
|
|
206
|
+
["use", "Switch account or environment"],
|
|
207
|
+
["portfolio", "Portfolio & history management"],
|
|
208
|
+
["agent", "AI agent operations"],
|
|
209
|
+
["tools", "EVM development & interaction tools"],
|
|
210
|
+
];
|
|
211
|
+
// Fallback subcommands
|
|
212
|
+
subcommandMap = {
|
|
213
|
+
launchpad: [
|
|
214
|
+
["create", "Create a new launchpad token"],
|
|
215
|
+
["buy", "Buy tokens from bonding curve"],
|
|
216
|
+
["sell", "Sell tokens to bonding curve"],
|
|
217
|
+
["list", "List all launchpad tokens"],
|
|
218
|
+
["info", "Get token information"],
|
|
219
|
+
["positions", "Get token positions"],
|
|
220
|
+
["fees", "Fee management for graduated tokens"],
|
|
221
|
+
],
|
|
222
|
+
trade: [
|
|
223
|
+
["swap", "Swap any token to any token"],
|
|
224
|
+
["gasless-submit", "Submit a signed 0x gasless swap"],
|
|
225
|
+
["gasless-submit-our", "Submit gasless swap via executor"],
|
|
226
|
+
["gasless-quote", "Get gasless swap quotes"],
|
|
227
|
+
["gasless-status", "Check gasless swap status"],
|
|
228
|
+
],
|
|
229
|
+
portfolio: [
|
|
230
|
+
["balances", "View token balances"],
|
|
231
|
+
["summary", "Portfolio summary"],
|
|
232
|
+
["pnl", "Profit and loss"],
|
|
233
|
+
["transactions", "Transaction history"],
|
|
234
|
+
["positions", "Token positions"],
|
|
235
|
+
],
|
|
236
|
+
system: [
|
|
237
|
+
["health", "System health check"],
|
|
238
|
+
["status", "System status"],
|
|
239
|
+
["limits", "Rate limits"],
|
|
240
|
+
["sources", "Data sources"],
|
|
241
|
+
],
|
|
242
|
+
config: [
|
|
243
|
+
["setup", "Run interactive setup wizard"],
|
|
244
|
+
["reset", "Reset configuration"],
|
|
245
|
+
["env", "Manage environments"],
|
|
246
|
+
["account", "Manage accounts"],
|
|
247
|
+
["completion", "Generate shell completion script"],
|
|
248
|
+
],
|
|
249
|
+
mcp: [
|
|
250
|
+
["install", "Install or update httpcat MCP server for LLM CLI tools"],
|
|
251
|
+
["start", "Start MCP (Model Context Protocol) server"],
|
|
252
|
+
],
|
|
253
|
+
agent: [
|
|
254
|
+
["cat", "Start interactive AI agent mode"],
|
|
255
|
+
["context", "Agent context"],
|
|
256
|
+
],
|
|
257
|
+
tools: [
|
|
258
|
+
["address", "Address utilities"],
|
|
259
|
+
["abi", "ABI encoding/decoding"],
|
|
260
|
+
["tx", "Transaction utilities"],
|
|
261
|
+
["signature", "Function signature utilities"],
|
|
262
|
+
["multicall", "Multicall utilities"],
|
|
263
|
+
["nonce", "Nonce utilities"],
|
|
264
|
+
["gas", "Gas estimation"],
|
|
265
|
+
["key", "Key management"],
|
|
266
|
+
["rpc", "JSON-RPC proxy"],
|
|
267
|
+
["call", "Call x402 endpoint"],
|
|
268
|
+
],
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
// Format commands for zsh completion
|
|
272
|
+
const commandsStr = commands
|
|
273
|
+
.map(([name, desc]) => `'${name}:${desc}'`)
|
|
274
|
+
.join("\n ");
|
|
275
|
+
// Build subcommand functions
|
|
276
|
+
let subcommandFunctions = "";
|
|
277
|
+
for (const [cmd, subs] of Object.entries(subcommandMap)) {
|
|
278
|
+
if (subs && subs.length > 0) {
|
|
279
|
+
const subsStr = subs
|
|
280
|
+
.map(([name, desc]) => `'${name}:${desc}'`)
|
|
281
|
+
.join("\n ");
|
|
282
|
+
subcommandFunctions += `_httpcat_${cmd}() {
|
|
283
|
+
local -a subcommands
|
|
284
|
+
subcommands=(
|
|
285
|
+
${subsStr}
|
|
286
|
+
)
|
|
287
|
+
_describe 'subcommand' subcommands
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
`;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// Build case statement for subcommands
|
|
294
|
+
let subcommandCases = "";
|
|
295
|
+
for (const cmd of Object.keys(subcommandMap)) {
|
|
296
|
+
subcommandCases += ` "${cmd}")\n _httpcat_${cmd}\n ;;\n`;
|
|
297
|
+
}
|
|
298
|
+
return `#compdef httpcat
|
|
299
|
+
|
|
300
|
+
_httpcat() {
|
|
301
|
+
local -a commands
|
|
302
|
+
local curcontext="\${curcontext}" state line
|
|
303
|
+
local -A opt_args
|
|
304
|
+
|
|
305
|
+
commands=(
|
|
306
|
+
${commandsStr}
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
_describe 'command' commands
|
|
310
|
+
|
|
311
|
+
case $words[2] in
|
|
312
|
+
${subcommandCases} esac
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
${subcommandFunctions}_httpcat "$@"
|
|
316
|
+
`;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Install bash completion script
|
|
320
|
+
*
|
|
321
|
+
* @param completionScript - The completion script content
|
|
322
|
+
* @returns true if installation succeeded, false otherwise
|
|
323
|
+
*/
|
|
324
|
+
export function installBashCompletion(completionScript) {
|
|
325
|
+
try {
|
|
326
|
+
const homeDir = os.homedir();
|
|
327
|
+
const bashCompletionDir = path.join(homeDir, ".bash_completion.d");
|
|
328
|
+
const completionFile = path.join(bashCompletionDir, "httpcat");
|
|
329
|
+
const bashrcPath = path.join(homeDir, ".bashrc");
|
|
330
|
+
// Create completion directory if it doesn't exist
|
|
331
|
+
if (!fs.existsSync(bashCompletionDir)) {
|
|
332
|
+
fs.mkdirSync(bashCompletionDir, { recursive: true });
|
|
333
|
+
}
|
|
334
|
+
// Write completion script
|
|
335
|
+
fs.writeFileSync(completionFile, completionScript, { mode: 0o644 });
|
|
336
|
+
// Ensure .bashrc sources the completion directory
|
|
337
|
+
if (fs.existsSync(bashrcPath)) {
|
|
338
|
+
const bashrcContent = fs.readFileSync(bashrcPath, "utf-8");
|
|
339
|
+
const sourceLine = `[ -d ~/.bash_completion.d ] && for f in ~/.bash_completion.d/*; do source "$f"; done`;
|
|
340
|
+
// Check if sourcing line already exists (with variations)
|
|
341
|
+
const hasSourceLine = bashrcContent.includes(".bash_completion.d") ||
|
|
342
|
+
bashrcContent.includes("bash_completion.d");
|
|
343
|
+
if (!hasSourceLine) {
|
|
344
|
+
fs.appendFileSync(bashrcPath, `\n# httpcat completion\n${sourceLine}\n`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
// Create .bashrc if it doesn't exist
|
|
349
|
+
const sourceLine = `[ -d ~/.bash_completion.d ] && for f in ~/.bash_completion.d/*; do source "$f"; done`;
|
|
350
|
+
fs.writeFileSync(bashrcPath, `# httpcat completion\n${sourceLine}\n`);
|
|
351
|
+
}
|
|
352
|
+
return true;
|
|
353
|
+
}
|
|
354
|
+
catch (error) {
|
|
355
|
+
console.error(chalk.red(`Failed to install bash completion: ${error}`));
|
|
356
|
+
return false;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Install zsh completion script
|
|
361
|
+
*
|
|
362
|
+
* @param completionScript - The completion script content
|
|
363
|
+
* @returns true if installation succeeded, false otherwise
|
|
364
|
+
*/
|
|
365
|
+
export function installZshCompletion(completionScript) {
|
|
366
|
+
try {
|
|
367
|
+
const homeDir = os.homedir();
|
|
368
|
+
const zshCompletionsDir = path.join(homeDir, ".zsh", "completions");
|
|
369
|
+
const completionFile = path.join(zshCompletionsDir, "_httpcat");
|
|
370
|
+
const zshrcPath = path.join(homeDir, ".zshrc");
|
|
371
|
+
// Create completions directory if it doesn't exist
|
|
372
|
+
if (!fs.existsSync(zshCompletionsDir)) {
|
|
373
|
+
fs.mkdirSync(zshCompletionsDir, { recursive: true });
|
|
374
|
+
}
|
|
375
|
+
// Write completion script
|
|
376
|
+
fs.writeFileSync(completionFile, completionScript, { mode: 0o644 });
|
|
377
|
+
// Ensure .zshrc adds completions to fpath
|
|
378
|
+
const fpathLine = `fpath=(~/.zsh/completions $fpath)`;
|
|
379
|
+
const autoloadLine = `autoload -Uz compinit && compinit`;
|
|
380
|
+
if (fs.existsSync(zshrcPath)) {
|
|
381
|
+
const zshrcContent = fs.readFileSync(zshrcPath, "utf-8");
|
|
382
|
+
let updated = false;
|
|
383
|
+
let newContent = zshrcContent;
|
|
384
|
+
// Add fpath if not present
|
|
385
|
+
if (!zshrcContent.includes("~/.zsh/completions") && !zshrcContent.includes("$HOME/.zsh/completions")) {
|
|
386
|
+
newContent += `\n# httpcat completion\n${fpathLine}\n`;
|
|
387
|
+
updated = true;
|
|
388
|
+
}
|
|
389
|
+
// Add compinit if not present
|
|
390
|
+
if (!zshrcContent.includes("compinit")) {
|
|
391
|
+
newContent += `${updated ? "" : "\n# httpcat completion\n"}${autoloadLine}\n`;
|
|
392
|
+
updated = true;
|
|
393
|
+
}
|
|
394
|
+
if (updated) {
|
|
395
|
+
fs.writeFileSync(zshrcPath, newContent);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
// Create .zshrc if it doesn't exist
|
|
400
|
+
fs.writeFileSync(zshrcPath, `# httpcat completion\n${fpathLine}\n${autoloadLine}\n`);
|
|
401
|
+
}
|
|
402
|
+
return true;
|
|
403
|
+
}
|
|
404
|
+
catch (error) {
|
|
405
|
+
console.error(chalk.red(`Failed to install zsh completion: ${error}`));
|
|
406
|
+
return false;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Create "hc" alias as a symlink
|
|
411
|
+
*
|
|
412
|
+
* @returns true if symlink creation succeeded or already exists correctly, false otherwise
|
|
413
|
+
*/
|
|
414
|
+
export function createHcSymlink() {
|
|
415
|
+
try {
|
|
416
|
+
const httpcatPath = findHttpcatBinary();
|
|
417
|
+
if (!httpcatPath) {
|
|
418
|
+
return false;
|
|
419
|
+
}
|
|
420
|
+
const binDir = path.dirname(httpcatPath);
|
|
421
|
+
const hcPath = path.join(binDir, "hc");
|
|
422
|
+
// Check if hc already exists
|
|
423
|
+
if (fs.existsSync(hcPath)) {
|
|
424
|
+
// Check if it's already a symlink to httpcat
|
|
425
|
+
try {
|
|
426
|
+
const target = fs.readlinkSync(hcPath);
|
|
427
|
+
const resolvedTarget = path.resolve(binDir, target);
|
|
428
|
+
if (target === "httpcat" || resolvedTarget === httpcatPath) {
|
|
429
|
+
return true; // Already correctly linked
|
|
430
|
+
}
|
|
431
|
+
// Existing symlink points to wrong target - remove it
|
|
432
|
+
fs.unlinkSync(hcPath);
|
|
433
|
+
}
|
|
434
|
+
catch {
|
|
435
|
+
// Not a symlink or can't read it - try to remove it
|
|
436
|
+
try {
|
|
437
|
+
fs.unlinkSync(hcPath);
|
|
438
|
+
}
|
|
439
|
+
catch {
|
|
440
|
+
// Can't remove existing file - might be a directory or permission issue
|
|
441
|
+
// Fall back to shell alias instead
|
|
442
|
+
return false;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
// Create symlink
|
|
447
|
+
fs.symlinkSync("httpcat", hcPath);
|
|
448
|
+
return true;
|
|
449
|
+
}
|
|
450
|
+
catch (error) {
|
|
451
|
+
// Silently fail - will fall back to shell alias
|
|
452
|
+
// Don't log error here since fallback will handle it
|
|
453
|
+
return false;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Create "hc" alias in shell rc file
|
|
458
|
+
*
|
|
459
|
+
* @param shellType - The shell type (bash or zsh)
|
|
460
|
+
* @returns true if alias creation succeeded, false otherwise
|
|
461
|
+
*/
|
|
462
|
+
export function createHcAlias(shellType) {
|
|
463
|
+
if (shellType === "unknown") {
|
|
464
|
+
return false;
|
|
465
|
+
}
|
|
466
|
+
try {
|
|
467
|
+
const homeDir = os.homedir();
|
|
468
|
+
const rcFile = shellType === "zsh"
|
|
469
|
+
? path.join(homeDir, ".zshrc")
|
|
470
|
+
: path.join(homeDir, ".bashrc");
|
|
471
|
+
const aliasLine = `alias hc='httpcat'`;
|
|
472
|
+
// Check if alias already exists
|
|
473
|
+
if (fs.existsSync(rcFile)) {
|
|
474
|
+
const content = fs.readFileSync(rcFile, "utf-8");
|
|
475
|
+
if (content.includes("alias hc=")) {
|
|
476
|
+
return true; // Already exists
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
// Append alias to rc file
|
|
480
|
+
const newContent = fs.existsSync(rcFile)
|
|
481
|
+
? fs.readFileSync(rcFile, "utf-8") + `\n# httpcat alias\n${aliasLine}\n`
|
|
482
|
+
: `# httpcat alias\n${aliasLine}\n`;
|
|
483
|
+
fs.writeFileSync(rcFile, newContent);
|
|
484
|
+
return true;
|
|
485
|
+
}
|
|
486
|
+
catch (error) {
|
|
487
|
+
console.error(chalk.red(`Failed to create hc alias: ${error}`));
|
|
488
|
+
return false;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Install shell completion for the detected shell
|
|
493
|
+
*
|
|
494
|
+
* @param program - Commander.js program instance (optional)
|
|
495
|
+
* @returns true if installation succeeded, false otherwise
|
|
496
|
+
*/
|
|
497
|
+
export function installShellCompletion(program) {
|
|
498
|
+
const shell = detectShell();
|
|
499
|
+
if (shell === "unknown") {
|
|
500
|
+
console.log(chalk.yellow("⚠️ Could not detect shell type. Skipping completion installation."));
|
|
501
|
+
return false;
|
|
502
|
+
}
|
|
503
|
+
let completionScript;
|
|
504
|
+
if (shell === "zsh") {
|
|
505
|
+
completionScript = generateZshCompletion(program);
|
|
506
|
+
return installZshCompletion(completionScript);
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
completionScript = generateBashCompletion(program);
|
|
510
|
+
return installBashCompletion(completionScript);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Create "hc" alias (tries symlink first, falls back to shell alias)
|
|
515
|
+
*
|
|
516
|
+
* @returns Object with success status and method used
|
|
517
|
+
*/
|
|
518
|
+
export function installHcAlias() {
|
|
519
|
+
// Try symlink first
|
|
520
|
+
if (createHcSymlink()) {
|
|
521
|
+
return { success: true, method: "symlink" };
|
|
522
|
+
}
|
|
523
|
+
// Fallback to shell alias
|
|
524
|
+
const shell = detectShell();
|
|
525
|
+
const aliasSuccess = createHcAlias(shell);
|
|
526
|
+
return {
|
|
527
|
+
success: aliasSuccess,
|
|
528
|
+
method: aliasSuccess ? "alias" : "none",
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
//# sourceMappingURL=shell-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-setup.js","sourceRoot":"","sources":["../../src/utils/shell-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/utils/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/utils/status.ts"],"names":[],"mappings":"AA6BA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAoBrD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIxD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAgBtC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,cAAc,EAAE,MAAM,GACrB,MAAM,CASR"}
|
package/dist/utils/status.js
CHANGED
|
@@ -15,6 +15,7 @@ const CAT_RETRY_MESSAGES = [
|
|
|
15
15
|
"🐱 Cat is trying again (because why not)...",
|
|
16
16
|
];
|
|
17
17
|
let lastStatusLine = "";
|
|
18
|
+
let statusLineCount = 0;
|
|
18
19
|
/**
|
|
19
20
|
* Strip ANSI escape codes from a string to get the actual visual length
|
|
20
21
|
*/
|
|
@@ -25,25 +26,53 @@ function stripAnsiCodes(str) {
|
|
|
25
26
|
/**
|
|
26
27
|
* Write status message on the same line (overwrites previous)
|
|
27
28
|
* Useful for retry messages that shouldn't spam the console
|
|
29
|
+
* Resets the status line count to 1 (start of a new status sequence)
|
|
28
30
|
*/
|
|
29
31
|
export function writeStatusLine(message) {
|
|
30
|
-
//
|
|
31
|
-
if (
|
|
32
|
+
// If we have multiple status lines, we need to clear them all first
|
|
33
|
+
if (statusLineCount > 1) {
|
|
34
|
+
// Move up to the first line and clear all
|
|
35
|
+
for (let i = 1; i < statusLineCount; i++) {
|
|
36
|
+
process.stdout.write("\x1b[1A\r\x1b[K");
|
|
37
|
+
}
|
|
38
|
+
statusLineCount = 0;
|
|
39
|
+
}
|
|
40
|
+
// Clear the current line if it exists
|
|
41
|
+
if (lastStatusLine || statusLineCount > 0) {
|
|
32
42
|
// Use \r to go to beginning of line and \x1b[K to clear to end of line
|
|
33
43
|
process.stdout.write("\r\x1b[K");
|
|
34
44
|
}
|
|
35
45
|
// Write new message (no newline)
|
|
36
46
|
process.stdout.write(message);
|
|
37
47
|
lastStatusLine = message;
|
|
48
|
+
statusLineCount = 1;
|
|
38
49
|
}
|
|
39
50
|
/**
|
|
40
|
-
*
|
|
51
|
+
* Write status message on a new line (adds to status lines)
|
|
52
|
+
* Useful for multi-line status messages that need to be cleared together
|
|
53
|
+
*/
|
|
54
|
+
export function writeStatusLineNew(message) {
|
|
55
|
+
// Move to a new line and write the message
|
|
56
|
+
process.stdout.write("\n" + message);
|
|
57
|
+
statusLineCount++;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Clear all status lines
|
|
41
61
|
*/
|
|
42
62
|
export function clearStatusLine() {
|
|
43
|
-
if (
|
|
44
|
-
//
|
|
63
|
+
if (statusLineCount > 0) {
|
|
64
|
+
// First, clear the current line (where the cursor is)
|
|
45
65
|
process.stdout.write("\r\x1b[K");
|
|
66
|
+
// Then move up and clear the remaining status lines
|
|
67
|
+
// We need to move up (statusLineCount - 1) times since we already cleared the current line
|
|
68
|
+
for (let i = 1; i < statusLineCount; i++) {
|
|
69
|
+
// Move cursor up one line: \x1b[1A
|
|
70
|
+
// Move to beginning of line: \r
|
|
71
|
+
// Clear to end of line: \x1b[K
|
|
72
|
+
process.stdout.write("\x1b[1A\r\x1b[K");
|
|
73
|
+
}
|
|
46
74
|
lastStatusLine = "";
|
|
75
|
+
statusLineCount = 0;
|
|
47
76
|
}
|
|
48
77
|
}
|
|
49
78
|
/**
|
package/dist/utils/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/utils/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,kBAAkB,GAAG;IACzB,4CAA4C;IAC5C,oCAAoC;IACpC,iEAAiE;IACjE,0CAA0C;IAC1C,8CAA8C;IAC9C,oDAAoD;IACpD,0CAA0C;IAC1C,2CAA2C;IAC3C,yDAAyD;IACzD,6CAA6C;CAC9C,CAAC;AAEF,IAAI,cAAc,GAAW,EAAE,CAAC;AAEhC;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,4CAA4C;IAC5C,OAAO,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/utils/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/token-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"token-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/token-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA0B7C;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,MAAM,UAAQ,GACb,OAAO,CAAC,MAAM,CAAC,CA+LjB"}
|