| name | juicebox-upgrade-migration |
| description | Plan and execute Juicebox SDK upgrades.
Use when upgrading SDK versions, migrating between API versions,
or handling breaking changes.
Trigger with phrases like "upgrade juicebox", "juicebox migration",
"update juicebox SDK", "juicebox breaking changes".
|
| allowed-tools | Read, Grep, Bash(curl:*) |
| version | 1.0.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
Juicebox Upgrade Migration
Overview
Plan and execute safe Juicebox SDK version upgrades with minimal disruption.
Prerequisites
- Current SDK version identified
- Changelog reviewed
- Test environment available
Instructions
Step 1: Assess Current State
npm list @juicebox/sdk
npm outdated @juicebox/sdk
curl -s https://api.github.com/repos/juicebox-ai/sdk-js/releases/latest | jq '.body'
Step 2: Review Breaking Changes
const client = new JuiceboxClient(apiKey);
const results = await client.search(query);
const client = new JuiceboxClient({ apiKey });
const results = await client.search.people({ query });
Step 3: Create Migration Script
function migrateClientInit(code: string): string {
return code.replace(
/new JuiceboxClient\((\w+)\)/g,
'new JuiceboxClient({ apiKey: $1 })'
);
}
function migrateSearchCalls(code: string): string {
return code.replace(
/client\.search\(([^)]+)\)/g,
'client.search.people({ query: $1 })'
);
}
function migrateResultAccess(code: string): string {
return code.replace(
/results\.data/g,
'results.profiles'
);
}
Step 4: Staged Rollout
export class JuiceboxVersionManager {
private useNewVersion: boolean;
constructor() {
this.useNewVersion = process.env.JUICEBOX_USE_V2 === 'true';
}
async search(query: string, options?: SearchOptions) {
if (this.useNewVersion) {
return this.searchV2(query, options);
}
return this.searchV1(query, options);
}
private async searchV1(query: string, options?: SearchOptions) {
}
private async searchV2(query: string, options?: SearchOptions) {
}
}
Step 5: Validation Testing
import { describe, it, expect } from 'vitest';
describe('Migration Validation', () => {
it('produces equivalent results with new SDK', async () => {
const query = 'software engineer San Francisco';
const oldResults = await legacyClient.search(query);
const newResults = await newClient.search.people({ query });
expect(newResults.profiles.length).toBe(oldResults.data.length);
expect(newResults.profiles[0].name).toBe(oldResults.data[0].name);
});
it('handles edge cases correctly', async () => {
});
});
Migration Checklist
## SDK Upgrade Checklist
### Pre-Migration
- [ ] Current version documented
- [ ] Target version identified
- [ ] Changelog reviewed
- [ ] Breaking changes listed
- [ ] Migration script created
### Testing
- [ ] Unit tests updated
- [ ] Integration tests pass
- [ ] Performance benchmarks run
- [ ] Edge cases validated
### Deployment
- [ ] Staged rollout plan
- [ ] Feature flag configured
- [ ] Monitoring in place
- [ ] Rollback plan ready
### Post-Migration
- [ ] Old code removed
- [ ] Feature flag cleaned up
- [ ] Documentation updated
- [ ] Team notified
Rollback Plan
npm install @juicebox/sdk@1.x.x
export JUICEBOX_USE_V2=false
Resources
Next Steps
After upgrade, verify with juicebox-prod-checklist for production readiness.