openzoo 0.30.4 → 0.30.5

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 (2) hide show
  1. package/lib/cursorcfg.js +14 -2
  2. package/package.json +1 -1
package/lib/cursorcfg.js CHANGED
@@ -144,6 +144,14 @@ export function writeEditorProviderConfig(which, { baseUrl, models }) {
144
144
  const before = { openAIBaseUrl: doc.openAIBaseUrl, models: (doc.availableAPIKeyModels || []).length };
145
145
  doc.openAIBaseUrl = baseUrl;
146
146
  doc.useOpenAIKey = true;
147
+ // THE MODEL-SELECTION GATE READS MEMBERSHIP FROM RIGHT HERE. Traced in the
148
+ // bundle: membershipType(){ return this.reactiveStorageService
149
+ // .applicationUserPersistentStorage.membershipType } — i.e. THIS blob, not
150
+ // cursorAuth/stripeMembershipType. Setting it entitles model selection; the
151
+ // api2 impersonation keeps the editor from re-syncing it back to free.
152
+ // OPENZOO_MEMBERSHIP overrides (pro | pro_plus | enterprise | ultra).
153
+ doc.membershipType = process.env.OPENZOO_MEMBERSHIP || 'pro';
154
+ doc.subscriptionStatus = 'active';
147
155
  // Merge, don't clobber: a user may have their own custom models listed.
148
156
  const existing = Array.isArray(doc.availableAPIKeyModels) ? doc.availableAPIKeyModels : [];
149
157
  const names = new Set(existing.map((m) => (typeof m === 'string' ? m : m?.name)).filter(Boolean));
@@ -257,6 +265,7 @@ export function writeEditorProviderConfig(which, { baseUrl, models }) {
257
265
  * that clobbers them. Removable with unpinEditorProviderConfig.
258
266
  */
259
267
  export function pinEditorProviderConfig(which, { baseUrl, models }) {
268
+ const mem = process.env.OPENZOO_MEMBERSHIP || 'pro';
260
269
  const db = storagePath(which);
261
270
  if (!fs.existsSync(db)) return null;
262
271
  const esc = (v) => String(v).replace(/'/g, "''");
@@ -283,7 +292,8 @@ CREATE TRIGGER openzoo_pin AFTER UPDATE ON ItemTable
283
292
  WHEN NEW.key = '${KEY}'
284
293
  AND (json_extract(NEW.value,'$.openAIBaseUrl') IS NOT '${base}'
285
294
  OR json_extract(NEW.value,'$.featureModelConfigs.composer.defaultModel') IS NOT '${primary}'
286
- OR json_array_length(json_extract(NEW.value,'$.availableDefaultModels2')) IS NOT ${models.length})
295
+ OR json_array_length(json_extract(NEW.value,'$.availableDefaultModels2')) IS NOT ${models.length}
296
+ OR json_extract(NEW.value,'$.membershipType') IS NOT '${mem}')
287
297
  BEGIN
288
298
  UPDATE ItemTable SET value = json_set(
289
299
  NEW.value,
@@ -292,7 +302,9 @@ BEGIN
292
302
  '$.availableAPIKeyModels', json('${modelJson}'),
293
303
  '$.availableDefaultModels2', json('${uiJson}'),
294
304
  '$.featureModelConfigs.composer.defaultModel', '${primary}',
295
- '$.featureModelConfigs.cmdK.defaultModel', '${primary}'
305
+ '$.featureModelConfigs.cmdK.defaultModel', '${primary}',
306
+ '$.membershipType', '${mem}',
307
+ '$.subscriptionStatus', 'active'
296
308
  ) WHERE key = NEW.key;
297
309
  END;`;
298
310
  try { sqlite(db, sql); } catch (e) { return { error: e.message }; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openzoo",
3
- "version": "0.30.4",
3
+ "version": "0.30.5",
4
4
  "description": "Local x402-paying proxy + MCP server for openzoo.fun — point any OpenAI-compatible harness (Cursor, Claude Code, aider, SDKs) at localhost and it pays per call from a local burner wallet. Solana and Base rails live; Robinhood experimental.",
5
5
  "license": "MIT",
6
6
  "type": "module",