@claudemax/cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +183 -0
  3. package/dist/commands/ask.d.ts +7 -0
  4. package/dist/commands/ask.d.ts.map +1 -0
  5. package/dist/commands/ask.js +70 -0
  6. package/dist/commands/ask.js.map +1 -0
  7. package/dist/commands/chat.d.ts +7 -0
  8. package/dist/commands/chat.d.ts.map +1 -0
  9. package/dist/commands/chat.js +152 -0
  10. package/dist/commands/chat.js.map +1 -0
  11. package/dist/commands/config.d.ts +7 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +155 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/history.d.ts +7 -0
  16. package/dist/commands/history.d.ts.map +1 -0
  17. package/dist/commands/history.js +158 -0
  18. package/dist/commands/history.js.map +1 -0
  19. package/dist/commands/usage.d.ts +7 -0
  20. package/dist/commands/usage.d.ts.map +1 -0
  21. package/dist/commands/usage.js +37 -0
  22. package/dist/commands/usage.js.map +1 -0
  23. package/dist/index.d.ts +7 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +31 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lib/api-client.d.ts +43 -0
  28. package/dist/lib/api-client.d.ts.map +1 -0
  29. package/dist/lib/api-client.js +136 -0
  30. package/dist/lib/api-client.js.map +1 -0
  31. package/dist/lib/config-manager.d.ts +45 -0
  32. package/dist/lib/config-manager.d.ts.map +1 -0
  33. package/dist/lib/config-manager.js +146 -0
  34. package/dist/lib/config-manager.js.map +1 -0
  35. package/dist/lib/formatter.d.ts +42 -0
  36. package/dist/lib/formatter.d.ts.map +1 -0
  37. package/dist/lib/formatter.js +158 -0
  38. package/dist/lib/formatter.js.map +1 -0
  39. package/dist/lib/history-manager.d.ts +45 -0
  40. package/dist/lib/history-manager.d.ts.map +1 -0
  41. package/dist/lib/history-manager.js +163 -0
  42. package/dist/lib/history-manager.js.map +1 -0
  43. package/dist/lib/model-aliases.d.ts +22 -0
  44. package/dist/lib/model-aliases.d.ts.map +1 -0
  45. package/dist/lib/model-aliases.js +53 -0
  46. package/dist/lib/model-aliases.js.map +1 -0
  47. package/dist/lib/stream-handler.d.ts +37 -0
  48. package/dist/lib/stream-handler.d.ts.map +1 -0
  49. package/dist/lib/stream-handler.js +104 -0
  50. package/dist/lib/stream-handler.js.map +1 -0
  51. package/dist/types/index.d.ts +122 -0
  52. package/dist/types/index.d.ts.map +1 -0
  53. package/dist/types/index.js +6 -0
  54. package/dist/types/index.js.map +1 -0
  55. package/package.json +66 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 ClaudeAPI.Dev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,183 @@
1
+ # ClaudeAPI CLI
2
+
3
+ Official command-line interface for [ClaudeAPI.Dev](https://claudeapi.dev) - interact with Claude AI directly from your terminal.
4
+
5
+ ## Features
6
+
7
+ - 🚀 **Interactive Chat** - Multi-turn conversations with Claude
8
+ - ⚡ **One-Shot Queries** - Quick questions with instant answers
9
+ - 📊 **Usage Tracking** - Monitor your API usage and balance
10
+ - 🎨 **Colored Output** - Beautiful terminal interface
11
+ - 💾 **History Management** - Save and replay conversations
12
+ - ⚙️ **Easy Configuration** - Simple API key setup
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install -g @claudemax/cli
18
+ ```
19
+
20
+ ## Quick Start
21
+
22
+ ### 1. Configure API Key
23
+
24
+ ```bash
25
+ claudemax config set api-key YOUR_API_KEY
26
+ ```
27
+
28
+ Get your API key at: https://claudeapi.dev/dashboard/api-keys
29
+
30
+ ### 2. Start Chatting
31
+
32
+ ```bash
33
+ claudemax chat
34
+ ```
35
+
36
+ ### 3. Ask Quick Questions
37
+
38
+ ```bash
39
+ claudemax ask "What is quantum computing?"
40
+ ```
41
+
42
+ ## Commands
43
+
44
+ ### `chat` - Interactive Chat Mode
45
+
46
+ Start a multi-turn conversation with Claude:
47
+
48
+ ```bash
49
+ claudemax chat
50
+ claudemax chat --model opus-4-5
51
+ claudemax chat --system "You are a helpful coding assistant"
52
+ ```
53
+
54
+ Options:
55
+ - `--model <model>` - Choose model (opus, sonnet, haiku)
56
+ - `--system <prompt>` - Set system prompt
57
+ - `--max-tokens <number>` - Maximum response length
58
+
59
+ ### `ask` - One-Shot Query
60
+
61
+ Ask a single question:
62
+
63
+ ```bash
64
+ claudemax ask "Explain machine learning"
65
+ claudemax ask --model sonnet "Write a Python function to sort a list"
66
+ claudemax ask --quiet "Generate JSON" | jq .
67
+ ```
68
+
69
+ Options:
70
+ - `--model <model>` - Choose model (opus, sonnet, haiku)
71
+ - `--max-tokens <number>` - Maximum response length
72
+ - `--quiet` - Suppress usage stats (pipe-friendly)
73
+
74
+ ### `config` - Manage Configuration
75
+
76
+ ```bash
77
+ # Set API key
78
+ claudemax config set api-key YOUR_KEY
79
+
80
+ # Set default model
81
+ claudemax config set model sonnet
82
+
83
+ # View configuration
84
+ claudemax config list
85
+
86
+ # Reset to defaults
87
+ claudemax config reset
88
+ ```
89
+
90
+ ### `usage` - Check Usage Stats
91
+
92
+ ```bash
93
+ claudemax usage
94
+ ```
95
+
96
+ Shows:
97
+ - Current balance
98
+ - Requests today/this month
99
+ - Tokens used
100
+ - Estimated costs
101
+
102
+ ### `history` - Manage Conversation History
103
+
104
+ ```bash
105
+ # List saved conversations
106
+ claudemax history list
107
+
108
+ # Load a conversation
109
+ claudemax history load <id>
110
+
111
+ # Clear history
112
+ claudemax history clear
113
+ ```
114
+
115
+ ## Configuration
116
+
117
+ Config file location: `~/.claudemax/config.json`
118
+
119
+ Default configuration:
120
+ ```json
121
+ {
122
+ "apiKey": "",
123
+ "baseUrl": "https://api.claudeapi.dev",
124
+ "defaultModel": "claude-sonnet-4-5",
125
+ "maxTokens": 4096,
126
+ "temperature": 1.0
127
+ }
128
+ ```
129
+
130
+ ## Models
131
+
132
+ Short names for convenience:
133
+ - `opus` → `claude-opus-4-5` (Most capable)
134
+ - `sonnet` → `claude-sonnet-4-5` (Balanced)
135
+ - `haiku` → `claude-haiku-4` (Fast & cheap)
136
+
137
+ ## Examples
138
+
139
+ ### Code Generation
140
+
141
+ ```bash
142
+ claudemax ask "Write a Python function to calculate fibonacci numbers"
143
+ ```
144
+
145
+ ### Interactive Debugging
146
+
147
+ ```bash
148
+ claudemax chat --system "You are an expert debugger"
149
+ > I'm getting a null pointer exception in my Java code
150
+ ```
151
+
152
+ ### Pipe Output
153
+
154
+ ```bash
155
+ claudemax ask --quiet "Generate 10 random usernames" > usernames.txt
156
+ ```
157
+
158
+ ### Generate Reports
159
+
160
+ ```bash
161
+ claudemax ask "Analyze this data and create a report" < data.csv > report.md
162
+ ```
163
+
164
+ ## Pricing
165
+
166
+ ClaudeAPI.Dev is 80% cheaper than Anthropic's official API:
167
+
168
+ | Model | Cost |
169
+ |-------|------|
170
+ | Opus 4.5 | $3/1M input, $15/1M output |
171
+ | Sonnet 4.5 | $3/1M input, $15/1M output |
172
+ | Haiku 4 | $0.8/1M input, $4/1M output |
173
+
174
+ ## Support
175
+
176
+ - **Website**: https://claudeapi.dev
177
+ - **Documentation**: https://docs.claudeapi.dev
178
+ - **Issues**: https://github.com/claudeapi-dev/claudeapi-cli/issues
179
+ - **Email**: support@claudeapi.dev
180
+
181
+ ## License
182
+
183
+ MIT © ClaudeAPI.Dev
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Ask command - One-shot query to Claude
3
+ * Sends a single message and displays the response
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare const askCommand: Command;
7
+ //# sourceMappingURL=ask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,UAAU,SAsEnB,CAAC"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * Ask command - One-shot query to Claude
4
+ * Sends a single message and displays the response
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.askCommand = void 0;
8
+ const commander_1 = require("commander");
9
+ const api_client_1 = require("../lib/api-client");
10
+ const config_manager_1 = require("../lib/config-manager");
11
+ const model_aliases_1 = require("../lib/model-aliases");
12
+ const formatter_1 = require("../lib/formatter");
13
+ const stream_handler_1 = require("../lib/stream-handler");
14
+ exports.askCommand = new commander_1.Command('ask')
15
+ .description('Ask Claude a question (one-shot query)')
16
+ .argument('<prompt>', 'Question or prompt to send')
17
+ .option('-m, --model <model>', 'Model to use (opus, sonnet, haiku)', 'sonnet')
18
+ .option('-t, --max-tokens <number>', 'Maximum tokens in response', '4096')
19
+ .option('-q, --quiet', 'Suppress usage stats (pipe-friendly)', false)
20
+ .option('-s, --system <prompt>', 'System prompt')
21
+ .action(async (prompt, options) => {
22
+ try {
23
+ // Load and validate config
24
+ const config = (0, config_manager_1.loadConfig)();
25
+ const error = (0, config_manager_1.validateConfig)(config);
26
+ if (error) {
27
+ (0, formatter_1.formatError)(new Error(error), 'configuration_error');
28
+ process.exit(1);
29
+ }
30
+ // Resolve model name
31
+ const model = (0, model_aliases_1.resolveModelName)(options.model || config.defaultModel);
32
+ const maxTokens = parseInt(options.maxTokens, 10) || config.maxTokens;
33
+ // Create API client
34
+ const client = new api_client_1.ClaudeAPIClient(config.apiKey, config.baseUrl);
35
+ // Prepare request
36
+ const request = {
37
+ model,
38
+ messages: [{ role: 'user', content: prompt }],
39
+ max_tokens: maxTokens,
40
+ system: options.system,
41
+ temperature: config.temperature,
42
+ };
43
+ // Stream response
44
+ const events = client.streamMessage(request);
45
+ // Track usage
46
+ let inputTokens = 0;
47
+ let outputTokens = 0;
48
+ let fullText = '';
49
+ await (0, stream_handler_1.processStream)(events, (text) => {
50
+ process.stdout.write(text);
51
+ fullText += text;
52
+ }, (usage) => {
53
+ inputTokens = usage.inputTokens;
54
+ outputTokens = usage.outputTokens;
55
+ });
56
+ // Newline after response
57
+ console.log();
58
+ // Show usage stats (to stderr so it doesn't pollute piped output)
59
+ if (!options.quiet) {
60
+ console.error(); // Extra newline
61
+ (0, formatter_1.formatUsage)({ input_tokens: inputTokens, output_tokens: outputTokens }, model);
62
+ }
63
+ process.exit(0);
64
+ }
65
+ catch (error) {
66
+ (0, formatter_1.formatError)(error);
67
+ process.exit(1);
68
+ }
69
+ });
70
+ //# sourceMappingURL=ask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Chat command - Interactive conversation with Claude
3
+ * Multi-turn conversation with context preservation
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare const chatCommand: Command;
7
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,WAAW,SA2IpB,CAAC"}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ /**
3
+ * Chat command - Interactive conversation with Claude
4
+ * Multi-turn conversation with context preservation
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.chatCommand = void 0;
11
+ const commander_1 = require("commander");
12
+ const prompts_1 = __importDefault(require("prompts"));
13
+ const api_client_1 = require("../lib/api-client");
14
+ const config_manager_1 = require("../lib/config-manager");
15
+ const model_aliases_1 = require("../lib/model-aliases");
16
+ const formatter_1 = require("../lib/formatter");
17
+ const stream_handler_1 = require("../lib/stream-handler");
18
+ const history_manager_1 = require("../lib/history-manager");
19
+ const chalk_1 = __importDefault(require("chalk"));
20
+ exports.chatCommand = new commander_1.Command('chat')
21
+ .description('Start an interactive chat with Claude')
22
+ .option('-m, --model <model>', 'Model to use (opus, sonnet, haiku)', 'sonnet')
23
+ .option('-t, --max-tokens <number>', 'Maximum tokens per response', '4096')
24
+ .option('-s, --system <prompt>', 'System prompt')
25
+ .action(async (options) => {
26
+ try {
27
+ // Load and validate config
28
+ const config = (0, config_manager_1.loadConfig)();
29
+ const error = (0, config_manager_1.validateConfig)(config);
30
+ if (error) {
31
+ (0, formatter_1.formatError)(new Error(error), 'configuration_error');
32
+ process.exit(1);
33
+ }
34
+ // Resolve model name
35
+ const model = (0, model_aliases_1.resolveModelName)(options.model || config.defaultModel);
36
+ const maxTokens = parseInt(options.maxTokens, 10) || config.maxTokens;
37
+ // Create API client
38
+ const client = new api_client_1.ClaudeAPIClient(config.apiKey, config.baseUrl);
39
+ // Get user balance
40
+ let balance;
41
+ try {
42
+ const stats = await client.getUserStats();
43
+ balance = stats.user.balance;
44
+ }
45
+ catch {
46
+ // Ignore error, balance is optional
47
+ }
48
+ // Show welcome message
49
+ (0, formatter_1.formatWelcome)(model, balance);
50
+ // Conversation state
51
+ const messages = [];
52
+ let totalInputTokens = 0;
53
+ let totalOutputTokens = 0;
54
+ let totalCost = 0;
55
+ let messageCount = 0;
56
+ // Chat loop
57
+ while (true) {
58
+ // Get user input
59
+ const response = await (0, prompts_1.default)({
60
+ type: 'text',
61
+ name: 'message',
62
+ message: chalk_1.default.blue('You:'),
63
+ });
64
+ // Check for exit
65
+ if (!response.message || response.message.toLowerCase() === 'exit') {
66
+ break;
67
+ }
68
+ const userMessage = response.message.trim();
69
+ if (!userMessage)
70
+ continue;
71
+ // Add user message to conversation
72
+ messages.push({ role: 'user', content: userMessage });
73
+ messageCount++;
74
+ // Prepare request
75
+ const request = {
76
+ model,
77
+ messages,
78
+ max_tokens: maxTokens,
79
+ system: options.system,
80
+ temperature: config.temperature,
81
+ };
82
+ try {
83
+ // Stream response
84
+ const events = client.streamMessage(request);
85
+ // Show assistant label
86
+ console.log(chalk_1.default.green.bold('Assistant: '));
87
+ // Track usage and collect response
88
+ let inputTokens = 0;
89
+ let outputTokens = 0;
90
+ let assistantResponse = '';
91
+ await (0, stream_handler_1.processStream)(events, (text) => {
92
+ process.stdout.write(text);
93
+ assistantResponse += text;
94
+ }, (usage) => {
95
+ inputTokens = usage.inputTokens;
96
+ outputTokens = usage.outputTokens;
97
+ });
98
+ // Newline after response
99
+ console.log();
100
+ // Add assistant response to conversation
101
+ messages.push({ role: 'assistant', content: assistantResponse });
102
+ // Update totals
103
+ totalInputTokens += inputTokens;
104
+ totalOutputTokens += outputTokens;
105
+ totalCost += calculateCost(inputTokens, outputTokens, model);
106
+ // Show usage for this message
107
+ const totalTokens = inputTokens + outputTokens;
108
+ const messageCost = calculateCost(inputTokens, outputTokens, model);
109
+ console.log(chalk_1.default.gray(`\n📊 ${totalTokens.toLocaleString()} tokens · $${messageCost.toFixed(4)}\n`));
110
+ }
111
+ catch (error) {
112
+ (0, formatter_1.formatError)(error);
113
+ console.log(); // Extra newline before next prompt
114
+ }
115
+ }
116
+ // Show session summary
117
+ const totalTokens = totalInputTokens + totalOutputTokens;
118
+ (0, formatter_1.formatSessionSummary)(totalTokens, totalCost, messageCount);
119
+ // Save conversation to history (if there were any messages)
120
+ if (messages.length > 0) {
121
+ const conversationId = (0, history_manager_1.saveConversation)(model, messages, {
122
+ totalTokens,
123
+ totalCost,
124
+ messageCount,
125
+ });
126
+ console.log(chalk_1.default.gray(`Conversation saved: ${conversationId}\n`));
127
+ }
128
+ process.exit(0);
129
+ }
130
+ catch (error) {
131
+ (0, formatter_1.formatError)(error);
132
+ process.exit(1);
133
+ }
134
+ });
135
+ /**
136
+ * Calculate cost based on token usage and model
137
+ */
138
+ function calculateCost(inputTokens, outputTokens, model) {
139
+ const pricing = {
140
+ 'opus': { input: 3, output: 15 },
141
+ 'sonnet': { input: 3, output: 15 },
142
+ 'haiku': { input: 0.8, output: 4 },
143
+ 'claude-opus-4-5': { input: 3, output: 15 },
144
+ 'claude-sonnet-4-5': { input: 3, output: 15 },
145
+ 'claude-haiku-4': { input: 0.8, output: 4 },
146
+ };
147
+ const modelPricing = pricing[model] || pricing['sonnet'];
148
+ const inputCost = (inputTokens / 1_000_000) * modelPricing.input;
149
+ const outputCost = (outputTokens / 1_000_000) * modelPricing.output;
150
+ return inputCost + outputCost;
151
+ }
152
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Config command - Manage ClaudeAPI CLI configuration
3
+ * Set, get, list, and reset configuration values
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare const configCommand: Command;
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,aAAa,SAKS,CAAC"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ /**
3
+ * Config command - Manage ClaudeAPI CLI configuration
4
+ * Set, get, list, and reset configuration values
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.configCommand = void 0;
11
+ const commander_1 = require("commander");
12
+ const config_manager_1 = require("../lib/config-manager");
13
+ const formatter_1 = require("../lib/formatter");
14
+ const chalk_1 = __importDefault(require("chalk"));
15
+ exports.configCommand = new commander_1.Command('config')
16
+ .description('Manage configuration')
17
+ .addCommand(createSetCommand())
18
+ .addCommand(createGetCommand())
19
+ .addCommand(createListCommand())
20
+ .addCommand(createResetCommand());
21
+ /**
22
+ * config set - Set a configuration value
23
+ */
24
+ function createSetCommand() {
25
+ return new commander_1.Command('set')
26
+ .description('Set a configuration value')
27
+ .argument('<key>', 'Configuration key (api-key, base-url, model, max-tokens, temperature)')
28
+ .argument('<value>', 'Configuration value')
29
+ .action((key, value) => {
30
+ try {
31
+ // Normalize key (allow both kebab-case and camelCase)
32
+ const normalizedKey = normalizeConfigKey(key);
33
+ // Validate key
34
+ const validKeys = ['apiKey', 'baseUrl', 'defaultModel', 'maxTokens', 'temperature'];
35
+ if (!validKeys.includes(normalizedKey)) {
36
+ console.error(chalk_1.default.red(`Invalid config key: ${key}`));
37
+ console.error(chalk_1.default.yellow('Valid keys:'), validKeys.join(', '));
38
+ process.exit(1);
39
+ }
40
+ // Parse value based on key
41
+ let parsedValue = value;
42
+ if (normalizedKey === 'maxTokens') {
43
+ parsedValue = parseInt(value, 10);
44
+ if (isNaN(parsedValue) || parsedValue < 1) {
45
+ console.error(chalk_1.default.red('max-tokens must be a positive number'));
46
+ process.exit(1);
47
+ }
48
+ }
49
+ else if (normalizedKey === 'temperature') {
50
+ parsedValue = parseFloat(value);
51
+ if (isNaN(parsedValue) || parsedValue < 0 || parsedValue > 1) {
52
+ console.error(chalk_1.default.red('temperature must be between 0 and 1'));
53
+ process.exit(1);
54
+ }
55
+ }
56
+ // Set value
57
+ (0, config_manager_1.setConfigValue)(normalizedKey, parsedValue);
58
+ console.log(chalk_1.default.green('✓ Configuration updated'));
59
+ console.log(chalk_1.default.white(` ${key}:`), chalk_1.default.yellow(value));
60
+ }
61
+ catch (error) {
62
+ (0, formatter_1.formatError)(error);
63
+ process.exit(1);
64
+ }
65
+ });
66
+ }
67
+ /**
68
+ * config get - Get a configuration value
69
+ */
70
+ function createGetCommand() {
71
+ return new commander_1.Command('get')
72
+ .description('Get a configuration value')
73
+ .argument('<key>', 'Configuration key')
74
+ .action((key) => {
75
+ try {
76
+ const normalizedKey = normalizeConfigKey(key);
77
+ const value = (0, config_manager_1.getConfigValue)(normalizedKey);
78
+ if (value === undefined) {
79
+ console.error(chalk_1.default.red(`Configuration key not found: ${key}`));
80
+ process.exit(1);
81
+ }
82
+ // Mask API key
83
+ const displayValue = normalizedKey === 'apiKey' && value
84
+ ? maskApiKey(value)
85
+ : value;
86
+ console.log(chalk_1.default.yellow(String(displayValue)));
87
+ }
88
+ catch (error) {
89
+ (0, formatter_1.formatError)(error);
90
+ process.exit(1);
91
+ }
92
+ });
93
+ }
94
+ /**
95
+ * config list - List all configuration values
96
+ */
97
+ function createListCommand() {
98
+ return new commander_1.Command('list')
99
+ .description('List all configuration values')
100
+ .action(() => {
101
+ try {
102
+ const config = (0, config_manager_1.loadConfig)();
103
+ (0, formatter_1.formatConfig)(config);
104
+ }
105
+ catch (error) {
106
+ (0, formatter_1.formatError)(error);
107
+ process.exit(1);
108
+ }
109
+ });
110
+ }
111
+ /**
112
+ * config reset - Reset configuration to defaults
113
+ */
114
+ function createResetCommand() {
115
+ return new commander_1.Command('reset')
116
+ .description('Reset configuration to defaults')
117
+ .action(() => {
118
+ try {
119
+ (0, config_manager_1.resetConfig)();
120
+ console.log(chalk_1.default.green('✓ Configuration reset to defaults'));
121
+ console.log(chalk_1.default.gray(' Run "claudemax config list" to see current values'));
122
+ }
123
+ catch (error) {
124
+ (0, formatter_1.formatError)(error);
125
+ process.exit(1);
126
+ }
127
+ });
128
+ }
129
+ /**
130
+ * Normalize config key from kebab-case to camelCase
131
+ */
132
+ function normalizeConfigKey(key) {
133
+ const keyMap = {
134
+ 'api-key': 'apiKey',
135
+ 'apikey': 'apiKey',
136
+ 'base-url': 'baseUrl',
137
+ 'baseurl': 'baseUrl',
138
+ 'model': 'defaultModel',
139
+ 'default-model': 'defaultModel',
140
+ 'defaultmodel': 'defaultModel',
141
+ 'max-tokens': 'maxTokens',
142
+ 'maxtokens': 'maxTokens',
143
+ 'temperature': 'temperature',
144
+ };
145
+ return keyMap[key.toLowerCase()] || key;
146
+ }
147
+ /**
148
+ * Mask API key for display
149
+ */
150
+ function maskApiKey(key) {
151
+ if (key.length <= 16)
152
+ return '***';
153
+ return key.substring(0, 12) + '***' + key.substring(key.length - 4);
154
+ }
155
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * History command - Manage conversation history
3
+ * List, load, and clear saved conversations
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare const historyCommand: Command;
7
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,cAAc,SAKQ,CAAC"}