megabuff 0.1.0 → 0.2.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.
- package/Formula/megabuff.rb +18 -0
- package/HOMEBREW.md +223 -0
- package/PUBLISHING.md +108 -6
- package/README.md +2 -0
- package/dist/config.d.ts +17 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +98 -25
- package/dist/config.js.map +1 -1
- package/dist/index.js +139 -21
- package/dist/index.js.map +1 -1
- package/megabuff-0.2.0.tgz +0 -0
- package/package.json +6 -3
|
@@ -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.
|
|
128
|
-
|
|
129
|
-
|
|
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.
|
|
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
|
-
#
|
|
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
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
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
138
|
-
|
|
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
|
-
|
|
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
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACrD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACzD,MAAM,YAAY,GAAG,cAAc,CAAC;AACpC,MAAM,
|
|
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
|
|
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
|
|
143
|
-
.argument("<
|
|
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 (
|
|
231
|
+
.action(async (token, options) => {
|
|
146
232
|
try {
|
|
147
|
-
|
|
233
|
+
const provider = normalizeProvider(options.provider) || "openai";
|
|
234
|
+
await setApiKey(provider, token, options.keychain || false);
|
|
148
235
|
if (options.keychain) {
|
|
149
|
-
console.log(
|
|
236
|
+
console.log(`✓ ${provider} token saved securely in system keychain`);
|
|
150
237
|
}
|
|
151
238
|
else {
|
|
152
|
-
console.log(
|
|
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
|
|
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(`
|
|
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
|
|
182
|
-
.
|
|
272
|
+
.description("Remove saved token")
|
|
273
|
+
.option("-p, --provider <provider>", `Provider (${PROVIDERS.join(", ")})`)
|
|
274
|
+
.action(async (options) => {
|
|
183
275
|
try {
|
|
184
|
-
await
|
|
185
|
-
|
|
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>", "
|
|
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
|
-
|
|
211
|
-
|
|
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":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEvF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,yBAAyB,CAAC;KACtC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;;;;;GAMG;AACH,KAAK,UAAU,QAAQ,CAAC,YAAgC,EAAE,OAA0B;IAChF,8BAA8B;IAC9B,IAAI,YAAY,EAAE,CAAC;QACf,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,yBAAyB;IACzB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,CAAC;YACD,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IAED,sCAAsC;IACtC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,CAAC;IAED,iCAAiC;IACjC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACzB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACnB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAChB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED,OAAO;AAEP;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,MAA0B;IACpE,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtC,MAAM,YAAY,GAAG;;;;;;;;;2EASkD,CAAC;IAExE,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAClD,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE;gBACN,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;gBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,4BAA4B,MAAM,EAAE,EAAE;aAClE;YACD,WAAW,EAAE,GAAG;SACnB,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,gCAAgC,CAAC;IACrF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CACvB,QAAgB,EAChB,SAAiB,EACjB,OAAmE;IAEnE,0DAA0D;IAC1D,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACD,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,kCAAkC,MAAM,EAAE,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,gCAAgC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,mCAAmC;QACnC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO;IACX,CAAC;IAED,uCAAuC;IACvC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACnC,OAAO;IACX,CAAC;IAED,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAED,iBAAiB;AACjB,MAAM,SAAS,GAAG,OAAO;KACpB,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sBAAsB,CAAC,CAAC;AAEzC,SAAS;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,yBAAyB,CAAC;KACtC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;KAC5C,MAAM,CAAC,YAAY,EAAE,wCAAwC,CAAC;KAC9D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;IAC9B,IAAI,CAAC;QACD,MAAM,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;QACnD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QACtE,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,SAAS;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,KAAK,IAAI,EAAE;IACf,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QAEjC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,KAAK,IAAI,uBAAuB,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,SAAS;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,KAAK,IAAI,EAAE;IACf,IAAI,CAAC;QACD,MAAM,YAAY,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,mBAAmB;AACnB,OAAO;KACF,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,uBAAuB,CAAC;KACpC,QAAQ,CAAC,UAAU,EAAE,6DAA6D,CAAC;KACnF,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,CAAC;KACpD,MAAM,CAAC,qBAAqB,EAAE,gCAAgC,CAAC;KAC/D,MAAM,CAAC,mBAAmB,EAAE,kCAAkC,CAAC;KAC/D,MAAM,CAAC,WAAW,EAAE,4DAA4D,CAAC;KACjF,MAAM,CAAC,qBAAqB,EAAE,yCAAyC,CAAC;KACxE,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;IACpC,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAEvD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,yEAAyE;QACzE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
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.
|
|
4
|
-
"description": "AI-powered prompt optimizer CLI with BYOK (Bring Your Own Key) support for OpenAI",
|
|
3
|
+
"version": "0.2.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
|
-
|
|
49
|
+
"bin": {
|
|
47
50
|
"megabuff": "./dist/index.js"
|
|
48
51
|
}
|
|
49
52
|
}
|