megabuff 0.1.0 → 0.3.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.
@@ -0,0 +1,18 @@
1
+ class Megabuff < Formula
2
+ desc "AI-powered prompt optimizer CLI with BYOK support for OpenAI"
3
+ homepage "https://github.com/thesupermegabuff/megabuff-cli"
4
+ url "https://registry.npmjs.org/megabuff/-/megabuff-0.1.0.tgz"
5
+ sha256 "cc85ed27f138f4ca1406f9d7e0da522267477a4acb2329dd0b801ed67fca8bdf"
6
+ license "MIT"
7
+
8
+ depends_on "node"
9
+
10
+ def install
11
+ system "npm", "install", *Language::Node.std_npm_install_args(libexec)
12
+ bin.install_symlink Dir["#{libexec}/bin/*"]
13
+ end
14
+
15
+ test do
16
+ assert_match "0.1.0", shell_output("#{bin}/megabuff --version")
17
+ end
18
+ end
package/HOMEBREW.md ADDED
@@ -0,0 +1,223 @@
1
+ # Adding MegaBuff to Homebrew
2
+
3
+ This guide explains how to make MegaBuff installable via Homebrew.
4
+
5
+ ## Overview
6
+
7
+ Users will be able to install with:
8
+ ```bash
9
+ brew tap thesupermegabuff/megabuff-cli
10
+ brew install megabuff
11
+ ```
12
+
13
+ ## Prerequisites
14
+
15
+ - ✅ Package published to npm
16
+ - ✅ GitHub account
17
+ - ✅ Homebrew installed (for testing)
18
+
19
+ ## Setup Steps
20
+
21
+ ### 1. Create Homebrew Tap Repository
22
+
23
+ Create a new GitHub repository named **`homebrew-megabuff`**:
24
+ - Repository name MUST start with `homebrew-`
25
+ - URL: `https://github.com/thesupermegabuff/homebrew-megabuff`
26
+ - Public repository
27
+ - No template needed
28
+
29
+ ```bash
30
+ # Clone the new repository
31
+ git clone https://github.com/thesupermegabuff/homebrew-megabuff.git
32
+ cd homebrew-megabuff
33
+ ```
34
+
35
+ ### 2. Create the Formula File
36
+
37
+ Create a file named `megabuff.rb`:
38
+
39
+ ```ruby
40
+ class Megabuff < Formula
41
+ desc "AI-powered prompt optimizer CLI with BYOK support for OpenAI"
42
+ homepage "https://github.com/thesupermegabuff/megabuff-cli"
43
+ url "https://registry.npmjs.org/megabuff/-/megabuff-0.1.0.tgz"
44
+ sha256 "REPLACE_WITH_ACTUAL_SHA256"
45
+ license "MIT"
46
+
47
+ depends_on "node"
48
+
49
+ def install
50
+ system "npm", "install", *Language::Node.std_npm_install_args(libexec)
51
+ bin.install_symlink Dir["#{libexec}/bin/*"]
52
+ end
53
+
54
+ test do
55
+ assert_match "0.1.0", shell_output("#{bin}/megabuff --version")
56
+ end
57
+ end
58
+ ```
59
+
60
+ ### 3. Get the SHA256 Hash
61
+
62
+ After publishing version 0.1.0 to npm:
63
+
64
+ ```bash
65
+ # Download the tarball from npm
66
+ curl -L https://registry.npmjs.org/megabuff/-/megabuff-0.1.0.tgz -o megabuff.tgz
67
+
68
+ # Calculate SHA256
69
+ shasum -a 256 megabuff.tgz
70
+
71
+ # Copy the hash output and replace REPLACE_WITH_ACTUAL_SHA256 in megabuff.rb
72
+ ```
73
+
74
+ ### 4. Test the Formula Locally
75
+
76
+ ```bash
77
+ # Install from local formula
78
+ brew install --build-from-source ./megabuff.rb
79
+
80
+ # Test it works
81
+ megabuff --version
82
+
83
+ # Uninstall for now
84
+ brew uninstall megabuff
85
+ ```
86
+
87
+ ### 5. Publish the Formula
88
+
89
+ ```bash
90
+ git add megabuff.rb
91
+ git commit -m "Add megabuff formula v0.1.0"
92
+ git push origin main
93
+ ```
94
+
95
+ ## User Installation
96
+
97
+ Once published, users can install with:
98
+
99
+ ```bash
100
+ # Add your tap (one-time setup)
101
+ brew tap thesupermegabuff/megabuff
102
+
103
+ # Install megabuff
104
+ brew install megabuff
105
+
106
+ # Use it
107
+ megabuff optimize "your prompt"
108
+ ```
109
+
110
+ ## Updating for New Versions
111
+
112
+ When you publish a new npm version (e.g., 0.2.0):
113
+
114
+ ### Manual Update
115
+
116
+ 1. **Download new tarball and get SHA256:**
117
+ ```bash
118
+ curl -L https://registry.npmjs.org/megabuff/-/megabuff-0.2.0.tgz -o megabuff.tgz
119
+ shasum -a 256 megabuff.tgz
120
+ ```
121
+
122
+ 2. **Update `megabuff.rb`:**
123
+ ```ruby
124
+ url "https://registry.npmjs.org/megabuff/-/megabuff-0.2.0.tgz"
125
+ sha256 "NEW_SHA256_HASH"
126
+
127
+ # ... and in the test section:
128
+ assert_match "0.2.0", shell_output("#{bin}/megabuff --version")
129
+ ```
130
+
131
+ 3. **Test and publish:**
132
+ ```bash
133
+ brew install --build-from-source ./megabuff.rb
134
+ megabuff --version # Should show 0.2.0
135
+
136
+ git add megabuff.rb
137
+ git commit -m "Update megabuff to v0.2.0"
138
+ git push
139
+ ```
140
+
141
+ ### Automated Update (Advanced)
142
+
143
+ Use Homebrew's bump tool:
144
+ ```bash
145
+ brew bump-formula-pr --url=https://registry.npmjs.org/megabuff/-/megabuff-0.2.0.tgz thesupermegabuff/megabuff/megabuff
146
+ ```
147
+
148
+ ## Complete Workflow Example
149
+
150
+ ```bash
151
+ # 1. Publish new npm version
152
+ npm version minor
153
+ npm publish
154
+ git push && git push --tags
155
+
156
+ # 2. Update Homebrew formula
157
+ cd ~/homebrew-megabuff
158
+ curl -L https://registry.npmjs.org/megabuff/-/megabuff-0.2.0.tgz -o megabuff.tgz
159
+ shasum -a 256 megabuff.tgz
160
+
161
+ # 3. Edit megabuff.rb with new version and hash
162
+ # ... (edit file) ...
163
+
164
+ # 4. Test locally
165
+ brew install --build-from-source ./megabuff.rb
166
+ megabuff --version
167
+
168
+ # 5. Publish formula
169
+ git add megabuff.rb
170
+ git commit -m "Update megabuff to v0.2.0"
171
+ git push
172
+ ```
173
+
174
+ ## Adding to Main README
175
+
176
+ Add installation instructions to your main README.md:
177
+
178
+ ```markdown
179
+ ## Installation
180
+
181
+ ### via npm (recommended)
182
+ \`\`\`bash
183
+ npm install -g megabuff
184
+ \`\`\`
185
+
186
+ ### via Homebrew (macOS/Linux)
187
+ \`\`\`bash
188
+ brew tap thesupermegabuff/megabuff
189
+ brew install megabuff
190
+ \`\`\`
191
+ ```
192
+
193
+ ## Troubleshooting
194
+
195
+ **Formula fails to install:**
196
+ - Check SHA256 matches exactly
197
+ - Verify npm package is published and accessible
198
+ - Test with `brew install --build-from-source --verbose`
199
+
200
+ **Wrong version shown:**
201
+ - Update the version in the test assertion
202
+ - Clear Homebrew cache: `brew cleanup megabuff`
203
+
204
+ **Node not found:**
205
+ - Homebrew will auto-install node as a dependency
206
+ - Users may need to restart terminal after install
207
+
208
+ ## Advanced: Submitting to Homebrew Core
209
+
210
+ Once your package is popular and stable:
211
+
212
+ 1. Formula must meet [Homebrew's quality standards](https://docs.brew.sh/Acceptable-Formulae)
213
+ 2. Submit PR to [Homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core)
214
+ 3. Pass review process
215
+ 4. Users can install with just `brew install megabuff` (no tap needed)
216
+
217
+ This is optional and typically done after the package has proven adoption.
218
+
219
+ ## Resources
220
+
221
+ - [Homebrew Formula Cookbook](https://docs.brew.sh/Formula-Cookbook)
222
+ - [Node.js Formulas Guide](https://docs.brew.sh/Node-for-Formula-Authors)
223
+ - [Homebrew Tap Documentation](https://docs.brew.sh/Taps)
package/PUBLISHING.md CHANGED
@@ -124,16 +124,118 @@ npm publish
124
124
  ### Updates
125
125
 
126
126
  ```bash
127
- # 1. Update version (this also creates a git tag)
128
- npm version patch # for bug fixes
129
- npm version minor # for new features
130
- npm version major # for breaking changes
127
+ # 1. Make and commit your changes
128
+ git add .
129
+ git commit -m "Add feature X"
131
130
 
132
- # 2. Publish
131
+ # 2. Update version (choose one based on change type)
132
+ npm version patch # Bug fixes: 0.1.0 → 0.1.1
133
+ npm version minor # New features: 0.1.0 → 0.2.0
134
+ npm version major # Breaking changes: 0.1.0 → 1.0.0
135
+
136
+ # 3. Publish
137
+ npm publish
138
+
139
+ # 4. Push to GitHub (including tags)
140
+ git push && git push --tags
141
+ ```
142
+
143
+ ## Version Management Guide
144
+
145
+ ### Semantic Versioning (MAJOR.MINOR.PATCH)
146
+
147
+ Use `npm version` to automatically update package.json, create a git commit, and create a git tag.
148
+
149
+ #### `npm version patch` - Bug Fixes
150
+ **Example: 0.1.0 → 0.1.1**
151
+
152
+ Use for:
153
+ - Bug fixes
154
+ - Documentation updates
155
+ - Minor tweaks
156
+ - Performance improvements
157
+ - No new features
158
+
159
+ ```bash
160
+ npm version patch
161
+ # Updates: 0.1.0 → 0.1.1
162
+ # Creates: git commit + tag v0.1.1
163
+ ```
164
+
165
+ #### `npm version minor` - New Features
166
+ **Example: 0.1.0 → 0.2.0**
167
+
168
+ Use for:
169
+ - New features
170
+ - New commands or options
171
+ - Enhancements
172
+ - Backwards compatible changes
173
+ - Most common for updates
174
+
175
+ ```bash
176
+ npm version minor
177
+ # Updates: 0.1.1 → 0.2.0
178
+ # Creates: git commit + tag v0.2.0
179
+ ```
180
+
181
+ #### `npm version major` - Breaking Changes
182
+ **Example: 0.2.0 → 1.0.0**
183
+
184
+ Use for:
185
+ - Breaking changes
186
+ - API changes that aren't backwards compatible
187
+ - Removed features
188
+ - Major rewrites
189
+ - When ready for v1.0!
190
+
191
+ ```bash
192
+ npm version major
193
+ # Updates: 0.2.0 → 1.0.0
194
+ # Creates: git commit + tag v1.0.0
195
+ ```
196
+
197
+ ### What `npm version` Does Automatically
198
+
199
+ 1. ✅ Updates `version` field in package.json
200
+ 2. ✅ Creates a git commit with the new version as message
201
+ 3. ✅ Creates a git tag (e.g., "v0.1.1")
202
+ 4. ✅ Runs `prepublishOnly` script when you publish
203
+
204
+ ### Example Scenarios
205
+
206
+ ```bash
207
+ # Fixed clipboard bug
208
+ npm version patch
209
+ npm publish
210
+ git push && git push --tags
211
+ # Result: 0.1.0 → 0.1.1
212
+
213
+ # Added new --format option
214
+ npm version minor
133
215
  npm publish
216
+ git push && git push --tags
217
+ # Result: 0.1.1 → 0.2.0
134
218
 
135
- # 3. Push to GitHub
219
+ # Changed config file structure (breaking)
220
+ npm version major
221
+ npm publish
136
222
  git push && git push --tags
223
+ # Result: 0.2.0 → 1.0.0
224
+ ```
225
+
226
+ ### Pre-release Versions (Advanced)
227
+
228
+ For beta or release candidate versions:
229
+
230
+ ```bash
231
+ # Create beta release: 0.1.0 → 0.1.1-beta.0
232
+ npm version prerelease --preid=beta
233
+
234
+ # Create release candidate: 0.1.0 → 0.1.1-rc.0
235
+ npm version prerelease --preid=rc
236
+
237
+ # Publish with beta tag (not latest)
238
+ npm publish --tag beta
137
239
  ```
138
240
 
139
241
  ## After Publishing
package/README.md CHANGED
@@ -2,6 +2,45 @@
2
2
 
3
3
  AI prompt optimizer CLI - improve your prompts with multiple input/output options
4
4
 
5
+ ## Table of Contents
6
+
7
+ - [Installation](#installation)
8
+ - [Setup](#setup)
9
+ - [Getting Your OpenAI API Key (BYOK)](#getting-your-openai-api-key-byok)
10
+ - [Getting Your Anthropic API Key (BYOK)](#getting-your-anthropic-api-key-byok)
11
+ - [Configuring Your API Key](#configuring-your-api-key)
12
+ - [Option 1: Save to Config (Recommended)](#option-1-save-to-config-recommended)
13
+ - [Option 2: Environment Variable](#option-2-environment-variable)
14
+ - [Option 3: Pass as Flag](#option-3-pass-as-flag)
15
+ - [API Key Priority](#api-key-priority)
16
+ - [Configuration Commands](#configuration-commands)
17
+ - [Development](#development)
18
+ - [Build](#build)
19
+ - [Install Globally](#install-globally)
20
+ - [Usage](#usage)
21
+ - [1. Inline Argument (Quick & Simple)](#1-inline-argument-quick--simple)
22
+ - [2. File Input](#2-file-input)
23
+ - [3. Stdin Pipe](#3-stdin-pipe)
24
+ - [4. Interactive Mode](#4-interactive-mode)
25
+ - [Output Options](#output-options)
26
+ - [Default: Print to stdout AND copy to clipboard](#default-print-to-stdout-and-copy-to-clipboard)
27
+ - [Disable clipboard copy](#disable-clipboard-copy)
28
+ - [Save to file](#save-to-file)
29
+ - [Interactive comparison view](#interactive-comparison-view)
30
+ - [Combine options](#combine-options)
31
+ - [Examples](#examples)
32
+ - [How It Works](#how-it-works)
33
+ - [VS Code Integration: WIP](#vs-code-integration)
34
+ - [Option 1: VS Code Extension (Full Experience)](#option-1-vs-code-extension-full-experience)
35
+ - [Option 2: VS Code Tasks (Quick Setup)](#option-2-vs-code-tasks-quick-setup)
36
+ - [Option 3: Terminal Integration](#option-3-terminal-integration)
37
+ - [Publishing to npm](#publishing-to-npm)
38
+ - [First-time Setup](#first-time-setup)
39
+ - [Publishing Steps](#publishing-steps)
40
+ - [Publishing Updates](#publishing-updates)
41
+ - [What Gets Published](#what-gets-published)
42
+ - [After Publishing](#after-publishing)
43
+
5
44
  ## Installation
6
45
 
7
46
  Install MegaBuff globally:
@@ -53,20 +92,47 @@ MegaBuff uses a **BYOK (Bring Your Own Key)** model, meaning you use your own Op
53
92
  - Store it securely - you'll need to generate a new one if you lose it
54
93
  - The key starts with `sk-`
55
94
 
95
+ ### Getting Your Anthropic API Key (BYOK)
96
+
97
+ MegaBuff can also use **Anthropic (Claude)** if you provide your own Anthropic API key.
98
+
99
+ **Steps to get your Anthropic API Key:**
100
+
101
+ 1. **Create an Anthropic Console account**
102
+ - Sign up / log in at `https://console.anthropic.com/`
103
+
104
+ 2. **Set up billing / credits**
105
+ - Ensure your Anthropic account is enabled for API usage (billing/credits as required by Anthropic).
106
+
107
+ 3. **Create an API key**
108
+ - In the [Anthropic Dashboard Console](https://platform.claude.com/dashboard), go to **API Keys**
109
+ - Click **Create key**
110
+ - Name it something like "MegaBuff CLI"
111
+
112
+ 4. **Save your key immediately**
113
+ - Copy and store it somewhere secure
114
+ - Anthropic keys typically start with `sk-ant-`
115
+
56
116
  ### Configuring Your API Key
57
117
 
58
- Once you have your OpenAI API key, configure it using one of these methods:
118
+ Once you have your provider API key, configure it using one of these methods:
59
119
 
60
120
  #### Option 1: Save to Config (Recommended)
61
121
 
62
122
  The easiest way to get started:
63
123
 
64
124
  ```bash
65
- # Save to config file
125
+ # Save an OpenAI key to config file (default provider is openai)
66
126
  megabuff config set sk-your-api-key-here
67
127
 
68
128
  # Or save to system keychain (more secure)
69
129
  megabuff config set sk-your-api-key-here --keychain
130
+
131
+ # Save an Anthropic key
132
+ megabuff config set --provider anthropic sk-ant-your-api-key-here
133
+
134
+ # Save an Anthropic key to keychain
135
+ megabuff config set --provider anthropic sk-ant-your-api-key-here --keychain
70
136
  ```
71
137
 
72
138
  This saves your key for future use. You only need to do this once!
@@ -75,6 +141,7 @@ This saves your key for future use. You only need to do this once!
75
141
 
76
142
  ```bash
77
143
  export OPENAI_API_KEY="sk-your-api-key-here"
144
+ export ANTHROPIC_API_KEY="sk-ant-your-api-key-here"
78
145
  ```
79
146
 
80
147
  Add to your shell profile (`.bashrc`, `.zshrc`, etc.) to persist across sessions.
@@ -83,30 +150,37 @@ Add to your shell profile (`.bashrc`, `.zshrc`, etc.) to persist across sessions
83
150
 
84
151
  ```bash
85
152
  megabuff optimize "your prompt" --api-key sk-your-key-here
153
+ megabuff optimize --provider anthropic "your prompt" --api-key sk-ant-your-key-here
86
154
  ```
87
155
 
88
156
  ### API Key Priority
89
157
 
90
- The CLI checks for your API key in this order:
158
+ The CLI checks for your token in this order (per provider):
91
159
  1. `--api-key` flag (highest priority)
92
- 2. `OPENAI_API_KEY` environment variable
160
+ 2. Provider env var (e.g. `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`)
93
161
  3. System keychain (if configured)
94
162
  4. Config file at `~/.megabuff/config.json`
95
163
 
96
164
  ## Configuration Commands
97
165
 
98
166
  ```bash
99
- # Save your API key
167
+ # Save your OpenAI key (default provider)
100
168
  megabuff config set sk-your-api-key-here
101
169
 
170
+ # Save your Anthropic key
171
+ megabuff config set --provider anthropic sk-ant-your-api-key-here
172
+
102
173
  # Save to keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service)
103
174
  megabuff config set sk-your-api-key-here --keychain
104
175
 
105
176
  # Show current configuration
106
177
  megabuff config show
107
178
 
108
- # Remove saved API key
179
+ # Remove a saved key (defaults to openai if --provider is omitted)
109
180
  megabuff config remove
181
+
182
+ # Remove a saved Anthropic key
183
+ megabuff config remove --provider anthropic
110
184
  ```
111
185
 
112
186
  ## Development
@@ -114,6 +188,8 @@ megabuff config remove
114
188
  Test your CLI during development:
115
189
 
116
190
  ```bash
191
+ npm install
192
+
117
193
  # Using the dev script (recommended)
118
194
  npm run dev optimize "Write a function to sort arrays"
119
195
 
@@ -241,6 +317,9 @@ megabuff optimize --file prompt.txt --output result.txt --no-copy
241
317
 
242
318
  # Use specific API key
243
319
  megabuff optimize "Your prompt" --api-key sk-your-key-here
320
+
321
+ # Use Anthropic (Claude)
322
+ megabuff optimize --provider anthropic "Rewrite this prompt to be clearer"
244
323
  ```
245
324
 
246
325
  ## How It Works
package/dist/config.d.ts CHANGED
@@ -1,8 +1,21 @@
1
+ export type Provider = "openai" | "anthropic" | "google" | "azure-openai";
2
+ export declare const PROVIDERS: readonly Provider[];
3
+ export declare function normalizeProvider(input: string | undefined): Provider | undefined;
1
4
  interface Config {
5
+ provider?: Provider;
6
+ apiKeys?: Partial<Record<Provider, string>>;
2
7
  apiKey?: string;
3
8
  useKeychain?: boolean;
4
9
  model?: string;
5
10
  }
11
+ /**
12
+ * Get the selected provider (CLI flag > config > default openai)
13
+ */
14
+ export declare function getProvider(cliProvider?: string): Promise<Provider>;
15
+ /**
16
+ * Persist the selected provider in config (does not validate key presence)
17
+ */
18
+ export declare function setProvider(provider: Provider): Promise<void>;
6
19
  /**
7
20
  * Get API key with priority:
8
21
  * 1. Command line flag
@@ -10,11 +23,11 @@ interface Config {
10
23
  * 3. Keychain (if configured)
11
24
  * 4. Config file
12
25
  */
13
- export declare function getApiKey(cliKey?: string): Promise<string | undefined>;
26
+ export declare function getApiKey(provider: Provider, cliKey?: string): Promise<string | undefined>;
14
27
  /**
15
28
  * Set API key in config or keychain
16
29
  */
17
- export declare function setApiKey(apiKey: string, useKeychain?: boolean): Promise<void>;
30
+ export declare function setApiKey(provider: Provider, apiKey: string, useKeychain?: boolean): Promise<void>;
18
31
  /**
19
32
  * Get current configuration
20
33
  */
@@ -26,10 +39,10 @@ export declare function updateConfig(updates: Partial<Config>): Promise<void>;
26
39
  /**
27
40
  * Remove API key from config and keychain
28
41
  */
29
- export declare function removeApiKey(): Promise<void>;
42
+ export declare function removeApiKey(provider: Provider): Promise<void>;
30
43
  /**
31
44
  * Check if API key is configured
32
45
  */
33
- export declare function hasApiKey(): Promise<boolean>;
46
+ export declare function hasApiKey(provider: Provider): Promise<boolean>;
34
47
  export {};
35
48
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AASA,UAAU,MAAM;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAkED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuB5E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB3F;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAEjD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1E;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAMlD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CASlD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,CAAC;AAE1E,eAAO,MAAM,SAAS,EAAE,SAAS,QAAQ,EAA+D,CAAC;AAEzG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAQjF;AAMD,UAAU,MAAM;IAEZ,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AA2ED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAKzE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAInE;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4BhG;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB/G;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAEjD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAapE"}
package/dist/config.js CHANGED
@@ -4,7 +4,26 @@ import { homedir } from "os";
4
4
  const CONFIG_DIR = path.join(homedir(), ".megabuff");
5
5
  const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
6
6
  const SERVICE_NAME = "megabuff-cli";
7
- const ACCOUNT_NAME = "openai-api-key";
7
+ // Legacy (pre-provider) keychain account name for backwards compatibility
8
+ const LEGACY_ACCOUNT_NAME = "openai-api-key";
9
+ export const PROVIDERS = ["openai", "anthropic", "google", "azure-openai"];
10
+ export function normalizeProvider(input) {
11
+ if (!input)
12
+ return undefined;
13
+ const v = input.trim().toLowerCase();
14
+ if (v === "openai")
15
+ return "openai";
16
+ if (v === "anthropic")
17
+ return "anthropic";
18
+ if (v === "google" || v === "gemini")
19
+ return "google";
20
+ if (v === "azure-openai" || v === "azure")
21
+ return "azure-openai";
22
+ return undefined;
23
+ }
24
+ function getAccountName(provider) {
25
+ return `${provider}-api-key`;
26
+ }
8
27
  /**
9
28
  * Ensure config directory exists
10
29
  */
@@ -38,10 +57,16 @@ async function writeConfig(config) {
38
57
  /**
39
58
  * Get API key from keychain
40
59
  */
41
- async function getKeychainKey() {
60
+ async function getKeychainKey(provider) {
42
61
  try {
43
62
  const keytar = await import("keytar");
44
- return await keytar.getPassword(SERVICE_NAME, ACCOUNT_NAME);
63
+ const account = getAccountName(provider);
64
+ const val = await keytar.getPassword(SERVICE_NAME, account);
65
+ // Backwards-compat: older versions stored only OpenAI under a fixed name
66
+ if (!val && provider === "openai") {
67
+ return await keytar.getPassword(SERVICE_NAME, LEGACY_ACCOUNT_NAME);
68
+ }
69
+ return val;
45
70
  }
46
71
  catch (error) {
47
72
  // Keychain not available or error
@@ -51,22 +76,43 @@ async function getKeychainKey() {
51
76
  /**
52
77
  * Set API key in keychain
53
78
  */
54
- async function setKeychainKey(apiKey) {
79
+ async function setKeychainKey(provider, apiKey) {
55
80
  const keytar = await import("keytar");
56
- await keytar.setPassword(SERVICE_NAME, ACCOUNT_NAME, apiKey);
81
+ await keytar.setPassword(SERVICE_NAME, getAccountName(provider), apiKey);
57
82
  }
58
83
  /**
59
84
  * Delete API key from keychain
60
85
  */
61
- async function deleteKeychainKey() {
86
+ async function deleteKeychainKey(provider) {
62
87
  try {
63
88
  const keytar = await import("keytar");
64
- await keytar.deletePassword(SERVICE_NAME, ACCOUNT_NAME);
89
+ await keytar.deletePassword(SERVICE_NAME, getAccountName(provider));
90
+ if (provider === "openai") {
91
+ await keytar.deletePassword(SERVICE_NAME, LEGACY_ACCOUNT_NAME);
92
+ }
65
93
  }
66
94
  catch (error) {
67
95
  // Ignore if not found
68
96
  }
69
97
  }
98
+ /**
99
+ * Get the selected provider (CLI flag > config > default openai)
100
+ */
101
+ export async function getProvider(cliProvider) {
102
+ const normalized = normalizeProvider(cliProvider);
103
+ if (normalized)
104
+ return normalized;
105
+ const config = await readConfig();
106
+ return config.provider || "openai";
107
+ }
108
+ /**
109
+ * Persist the selected provider in config (does not validate key presence)
110
+ */
111
+ export async function setProvider(provider) {
112
+ const config = await readConfig();
113
+ config.provider = provider;
114
+ await writeConfig(config);
115
+ }
70
116
  /**
71
117
  * Get API key with priority:
72
118
  * 1. Command line flag
@@ -74,45 +120,60 @@ async function deleteKeychainKey() {
74
120
  * 3. Keychain (if configured)
75
121
  * 4. Config file
76
122
  */
77
- export async function getApiKey(cliKey) {
123
+ export async function getApiKey(provider, cliKey) {
78
124
  // Priority 1: CLI flag
79
125
  if (cliKey) {
80
126
  return cliKey;
81
127
  }
82
128
  // Priority 2: Environment variable
83
- if (process.env.OPENAI_API_KEY) {
129
+ if (provider === "openai" && process.env.OPENAI_API_KEY)
84
130
  return process.env.OPENAI_API_KEY;
85
- }
131
+ if (provider === "anthropic" && process.env.ANTHROPIC_API_KEY)
132
+ return process.env.ANTHROPIC_API_KEY;
133
+ if (provider === "google" && process.env.GOOGLE_API_KEY)
134
+ return process.env.GOOGLE_API_KEY;
135
+ if (provider === "azure-openai" && process.env.AZURE_OPENAI_API_KEY)
136
+ return process.env.AZURE_OPENAI_API_KEY;
86
137
  const config = await readConfig();
87
138
  // Priority 3: Keychain
88
139
  if (config.useKeychain) {
89
- const keychainKey = await getKeychainKey();
140
+ const keychainKey = await getKeychainKey(provider);
90
141
  if (keychainKey) {
91
142
  return keychainKey;
92
143
  }
93
144
  }
94
145
  // Priority 4: Config file
95
- return config.apiKey;
146
+ const providerKey = config.apiKeys?.[provider];
147
+ if (providerKey)
148
+ return providerKey;
149
+ // Backwards-compat: pre-provider single key was OpenAI
150
+ if (provider === "openai")
151
+ return config.apiKey;
152
+ return undefined;
96
153
  }
97
154
  /**
98
155
  * Set API key in config or keychain
99
156
  */
100
- export async function setApiKey(apiKey, useKeychain = false) {
157
+ export async function setApiKey(provider, apiKey, useKeychain = false) {
101
158
  const config = await readConfig();
159
+ config.provider = provider;
102
160
  if (useKeychain) {
103
161
  // Store in keychain
104
- await setKeychainKey(apiKey);
105
- // Update config to indicate keychain usage, but don't store the key
162
+ await setKeychainKey(provider, apiKey);
163
+ // Update config to indicate keychain usage, but don't store the key(s)
106
164
  config.useKeychain = true;
107
- delete config.apiKey;
108
165
  }
109
166
  else {
110
167
  // Store in config file
111
- config.apiKey = apiKey;
168
+ config.apiKeys = config.apiKeys || {};
169
+ config.apiKeys[provider] = apiKey;
112
170
  config.useKeychain = false;
113
171
  // Remove from keychain if it was there
114
- await deleteKeychainKey();
172
+ await deleteKeychainKey(provider);
115
173
  }
174
+ // Clear legacy field if present (it maps to OpenAI only)
175
+ if (config.apiKey)
176
+ delete config.apiKey;
116
177
  await writeConfig(config);
117
178
  }
118
179
  /**
@@ -132,22 +193,34 @@ export async function updateConfig(updates) {
132
193
  /**
133
194
  * Remove API key from config and keychain
134
195
  */
135
- export async function removeApiKey() {
196
+ export async function removeApiKey(provider) {
136
197
  const config = await readConfig();
137
- delete config.apiKey;
138
- config.useKeychain = false;
198
+ if (config.apiKeys?.[provider]) {
199
+ delete config.apiKeys[provider];
200
+ }
201
+ // Backwards-compat: legacy single key was OpenAI
202
+ if (provider === "openai" && config.apiKey) {
203
+ delete config.apiKey;
204
+ }
205
+ // Keep useKeychain as-is; user may be storing other providers there.
139
206
  await writeConfig(config);
140
- await deleteKeychainKey();
207
+ await deleteKeychainKey(provider);
141
208
  }
142
209
  /**
143
210
  * Check if API key is configured
144
211
  */
145
- export async function hasApiKey() {
212
+ export async function hasApiKey(provider) {
146
213
  const config = await readConfig();
147
214
  if (config.useKeychain) {
148
- const keychainKey = await getKeychainKey();
215
+ const keychainKey = await getKeychainKey(provider);
149
216
  return !!keychainKey;
150
217
  }
151
- return !!config.apiKey;
218
+ const providerKey = config.apiKeys?.[provider];
219
+ if (providerKey)
220
+ return true;
221
+ // Backwards-compat: pre-provider single key was OpenAI
222
+ if (provider === "openai")
223
+ return !!config.apiKey;
224
+ return false;
152
225
  }
153
226
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,8 +3,9 @@ import { Command } from "commander";
3
3
  import * as fs from "fs/promises";
4
4
  import * as readline from "readline/promises";
5
5
  import OpenAI from "openai";
6
+ import Anthropic from "@anthropic-ai/sdk";
6
7
  import * as clipboardy from "clipboardy";
7
- import { getApiKey, setApiKey, removeApiKey, hasApiKey, getConfig } from "./config.js";
8
+ import { getApiKey, setApiKey, removeApiKey, hasApiKey, getConfig, getProvider, normalizeProvider, PROVIDERS } from "./config.js";
8
9
  const program = new Command();
9
10
  program
10
11
  .name("megabuff")
@@ -55,14 +56,10 @@ async function getInput(inlinePrompt, options) {
55
56
  });
56
57
  });
57
58
  }
58
- // TODO
59
59
  /**
60
60
  * Optimize a prompt using OpenAI
61
61
  */
62
- async function optimizePrompt(prompt, apiKey) {
63
- if (!apiKey) {
64
- throw new Error("OpenAI API key not found. Set OPENAI_API_KEY environment variable.");
65
- }
62
+ async function optimizePromptOpenAI(prompt, apiKey) {
66
63
  const openai = new OpenAI({ apiKey });
67
64
  const systemPrompt = `You are an expert prompt engineer. Your task is to analyze and optimize prompts for AI language models.
68
65
 
@@ -92,6 +89,94 @@ Return ONLY the optimized prompt, without explanations or meta-commentary.`;
92
89
  throw error;
93
90
  }
94
91
  }
92
+ /**
93
+ * Optimize a prompt using Anthropic Claude
94
+ */
95
+ async function optimizePromptAnthropic(prompt, apiKey) {
96
+ const anthropic = new Anthropic({ apiKey });
97
+ const systemPrompt = `You are an expert prompt engineer. Your task is to analyze and optimize prompts for AI language models.
98
+
99
+ When given a prompt, you should:
100
+ 1. Identify ambiguities or unclear instructions
101
+ 2. Add relevant context that would improve results
102
+ 3. Structure the prompt for better clarity
103
+ 4. Ensure the prompt follows best practices
104
+ 5. Make it more specific and actionable
105
+
106
+ Return ONLY the optimized prompt without explanations or meta-commentary.`;
107
+ try {
108
+ const response = await anthropic.messages.create({
109
+ model: "claude-sonnet-4-5-20250929",
110
+ max_tokens: 4096,
111
+ system: systemPrompt,
112
+ messages: [
113
+ {
114
+ role: "user",
115
+ content: `Optimize this prompt:\n\n${prompt}`
116
+ }
117
+ ]
118
+ });
119
+ const content = response.content?.[0];
120
+ if (content?.type === "text") {
121
+ return content.text;
122
+ }
123
+ throw new Error("Unexpected response format from Anthropic API");
124
+ }
125
+ catch (error) {
126
+ if (error instanceof Error) {
127
+ throw new Error(`Anthropic API error: ${error.message}`);
128
+ }
129
+ throw error;
130
+ }
131
+ }
132
+ function formatProviderLabel(p) {
133
+ if (p === "openai")
134
+ return "OpenAI";
135
+ if (p === "anthropic")
136
+ return "Anthropic";
137
+ if (p === "google")
138
+ return "Google Gemini (coming soon)";
139
+ if (p === "azure-openai")
140
+ return "Azure OpenAI (coming soon)";
141
+ return p;
142
+ }
143
+ async function promptFirstRunConfig() {
144
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
145
+ try {
146
+ console.log("\nNo BYOK token configured yet.");
147
+ console.log("Select the provider that will supply the token:\n");
148
+ PROVIDERS.forEach((p, idx) => {
149
+ console.log(` ${idx + 1}) ${formatProviderLabel(p)}`);
150
+ });
151
+ let provider;
152
+ while (!provider) {
153
+ const raw = await rl.question("\nProvider (number or name): ");
154
+ const trimmed = raw.trim();
155
+ const asNum = Number(trimmed);
156
+ if (Number.isFinite(asNum) && asNum >= 1 && asNum <= PROVIDERS.length) {
157
+ provider = PROVIDERS[asNum - 1];
158
+ break;
159
+ }
160
+ provider = normalizeProvider(trimmed);
161
+ if (!provider) {
162
+ console.log(`Please choose one of: ${PROVIDERS.join(", ")}`);
163
+ }
164
+ }
165
+ const apiKey = (await rl.question("Enter your BYOK token: ")).trim();
166
+ if (!apiKey) {
167
+ throw new Error("No token provided.");
168
+ }
169
+ const store = (await rl.question("Store in system keychain? (Y/n): ")).trim().toLowerCase();
170
+ const useKeychain = store === "" || store === "y" || store === "yes";
171
+ if (!provider) {
172
+ throw new Error("No provider selected.");
173
+ }
174
+ return { provider, apiKey, useKeychain };
175
+ }
176
+ finally {
177
+ rl.close();
178
+ }
179
+ }
95
180
  /**
96
181
  * Output the result based on options
97
182
  */
@@ -139,17 +224,19 @@ const configCmd = program
139
224
  .description("Manage configuration");
140
225
  configCmd
141
226
  .command("set")
142
- .description("Set your OpenAI API key")
143
- .argument("<api-key>", "Your OpenAI API key")
227
+ .description("Set your BYOK token for a provider")
228
+ .argument("<token>", "Your provider API key / token")
229
+ .option("-p, --provider <provider>", `Provider (${PROVIDERS.join(", ")})`, "openai")
144
230
  .option("--keychain", "Store in system keychain (more secure)")
145
- .action(async (apiKey, options) => {
231
+ .action(async (token, options) => {
146
232
  try {
147
- await setApiKey(apiKey, options.keychain || false);
233
+ const provider = normalizeProvider(options.provider) || "openai";
234
+ await setApiKey(provider, token, options.keychain || false);
148
235
  if (options.keychain) {
149
- console.log("✓ API key saved securely in system keychain");
236
+ console.log(`✓ ${provider} token saved securely in system keychain`);
150
237
  }
151
238
  else {
152
- console.log("✓ API key saved to config file at ~/.megabuff/config.json");
239
+ console.log(`✓ ${provider} token saved to config file at ~/.megabuff/config.json`);
153
240
  console.log(" Tip: Use --keychain flag for more secure storage");
154
241
  }
155
242
  }
@@ -164,9 +251,13 @@ configCmd
164
251
  .action(async () => {
165
252
  try {
166
253
  const config = await getConfig();
167
- const hasKey = await hasApiKey();
254
+ const selectedProvider = await getProvider();
255
+ const providerStatuses = await Promise.all(PROVIDERS.map(async (p) => [p, await hasApiKey(p)]));
168
256
  console.log("Current configuration:");
169
- console.log(` API Key: ${hasKey ? "✓ Configured" : "✗ Not configured"}`);
257
+ console.log(` Provider: ${selectedProvider}`);
258
+ for (const [p, ok] of providerStatuses) {
259
+ console.log(` ${p} token: ${ok ? "✓ Configured" : "✗ Not configured"}`);
260
+ }
170
261
  console.log(` Storage: ${config.useKeychain ? "System Keychain" : "Config File"}`);
171
262
  console.log(` Model: ${config.model || "gpt-4o-mini (default)"}`);
172
263
  console.log(`\nConfig location: ~/.megabuff/config.json`);
@@ -178,11 +269,13 @@ configCmd
178
269
  });
179
270
  configCmd
180
271
  .command("remove")
181
- .description("Remove saved API key")
182
- .action(async () => {
272
+ .description("Remove saved token")
273
+ .option("-p, --provider <provider>", `Provider (${PROVIDERS.join(", ")})`)
274
+ .action(async (options) => {
183
275
  try {
184
- await removeApiKey();
185
- console.log("✓ API key removed from config and keychain");
276
+ const provider = await getProvider(options.provider);
277
+ await removeApiKey(provider);
278
+ console.log(`✓ ${provider} token removed from config and keychain`);
186
279
  }
187
280
  catch (error) {
188
281
  console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
@@ -198,7 +291,8 @@ program
198
291
  .option("-o, --output <path>", "Write optimized prompt to file")
199
292
  .option("-i, --interactive", "Show interactive comparison view")
200
293
  .option("--no-copy", "Don't copy optimized prompt to clipboard (copy is default)")
201
- .option("-k, --api-key <key>", "OpenAI API key (overrides saved config)")
294
+ .option("-k, --api-key <key>", "Provider API key/token (overrides saved config)")
295
+ .option("-p, --provider <provider>", `Provider (${PROVIDERS.join(", ")})`)
202
296
  .action(async (inlinePrompt, options) => {
203
297
  try {
204
298
  const original = await getInput(inlinePrompt, options);
@@ -206,9 +300,33 @@ program
206
300
  console.error("Error: No prompt provided");
207
301
  process.exit(1);
208
302
  }
303
+ let provider = await getProvider(options.provider);
209
304
  // Get API key with priority: CLI flag > env var > keychain > config file
210
- const apiKey = await getApiKey(options.apiKey);
211
- const optimized = await optimizePrompt(original, apiKey);
305
+ let apiKey = await getApiKey(provider, options.apiKey);
306
+ // Interactive first-run setup (TTY only)
307
+ if (!apiKey && process.stdin.isTTY && process.stdout.isTTY) {
308
+ const firstRun = await promptFirstRunConfig();
309
+ await setApiKey(firstRun.provider, firstRun.apiKey, firstRun.useKeychain);
310
+ provider = firstRun.provider;
311
+ apiKey = await getApiKey(provider);
312
+ }
313
+ if (!apiKey) {
314
+ throw new Error(`No token configured for provider '${provider}'. ` +
315
+ `Run: megabuff config set --provider ${provider} <token> ` +
316
+ `or set the appropriate environment variable.`);
317
+ }
318
+ // Route to the appropriate provider's optimization function
319
+ let optimized;
320
+ if (provider === "openai") {
321
+ optimized = await optimizePromptOpenAI(original, apiKey);
322
+ }
323
+ else if (provider === "anthropic") {
324
+ optimized = await optimizePromptAnthropic(original, apiKey);
325
+ }
326
+ else {
327
+ throw new Error(`Provider '${provider}' is not supported yet in optimize. ` +
328
+ `Supported providers: openai, anthropic`);
329
+ }
212
330
  await outputResult(original, optimized, options);
213
331
  }
214
332
  catch (error) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "megabuff",
3
- "version": "0.1.0",
4
- "description": "AI-powered prompt optimizer CLI with BYOK (Bring Your Own Key) support for OpenAI",
3
+ "version": "0.3.0",
4
+ "description": "AI-powered prompt optimizer CLI with BYOK (Bring Your Own Key) support for OpenAI and Anthropic",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "scripts": {
@@ -15,6 +15,8 @@
15
15
  "prompt",
16
16
  "optimizer",
17
17
  "openai",
18
+ "anthropic",
19
+ "claude",
18
20
  "cli",
19
21
  "chatgpt",
20
22
  "prompt-engineering",
@@ -33,6 +35,7 @@
33
35
  },
34
36
  "homepage": "https://github.com/thesupermegabuff/megabuff-cli#readme",
35
37
  "dependencies": {
38
+ "@anthropic-ai/sdk": "^0.32.1",
36
39
  "commander": "^14.0.2",
37
40
  "openai": "^4.77.3",
38
41
  "keytar": "^7.9.0",
@@ -43,7 +46,7 @@
43
46
  "tsx": "^4.21.0",
44
47
  "typescript": "^5.9.3"
45
48
  },
46
- "bin": {
49
+ "bin": {
47
50
  "megabuff": "./dist/index.js"
48
51
  }
49
52
  }