openzoo 0.29.7 → 0.29.9
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/lib/cursorbackend.js +11 -9
- package/lib/setup.js +8 -0
- package/package.json +1 -1
package/lib/cursorbackend.js
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* content-type and answer in kind: bare message for connect unary proto, enveloped
|
|
27
27
|
* + trailers for grpc-web. Both are handled below.
|
|
28
28
|
*/
|
|
29
|
-
import
|
|
29
|
+
import http2 from 'node:http2';
|
|
30
30
|
import fs from 'node:fs';
|
|
31
31
|
import os from 'node:os';
|
|
32
32
|
import path from 'node:path';
|
|
@@ -172,17 +172,19 @@ function respond(req, res, method, models) {
|
|
|
172
172
|
export function startCursorBackend({ port = 8443, models, log = () => {} } = {}) {
|
|
173
173
|
const { cert, key } = ensureCert(log);
|
|
174
174
|
let conns = 0;
|
|
175
|
-
//
|
|
176
|
-
//
|
|
177
|
-
//
|
|
178
|
-
//
|
|
179
|
-
// (
|
|
180
|
-
//
|
|
181
|
-
|
|
175
|
+
// SERVE BOTH h2 AND h1. An earlier build forced h1-only after concluding the
|
|
176
|
+
// editor's h2 connections reset — but that log was the STALE 8443 backend the
|
|
177
|
+
// pf redirect was still intercepting, not this server, so the conclusion was
|
|
178
|
+
// contaminated. Measured cleanly now: some editor connections offer ONLY h2
|
|
179
|
+
// (ERR_SSL_NO_APPLICATION_PROTOCOL when we advertise just h1), so we must
|
|
180
|
+
// negotiate both. allowHTTP1 keeps the h1 fetch() calls (stripe/updates)
|
|
181
|
+
// working; ALPN h2 first satisfies the Connect gRPC client.
|
|
182
|
+
const server = http2.createSecureServer(
|
|
182
183
|
{
|
|
183
184
|
cert: fs.readFileSync(cert),
|
|
184
185
|
key: fs.readFileSync(key),
|
|
185
|
-
|
|
186
|
+
allowHTTP1: true,
|
|
187
|
+
ALPNProtocols: ['h2', 'http/1.1'],
|
|
186
188
|
SNICallback: (servername, cb) => { log(`cursor-tls: <- ClientHello SNI=${servername}`); cb(null); },
|
|
187
189
|
},
|
|
188
190
|
async (req, res) => {
|
package/lib/setup.js
CHANGED
|
@@ -328,6 +328,14 @@ export async function setupEditor(which, target) {
|
|
|
328
328
|
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY || 'sk-openzoo',
|
|
329
329
|
ANTHROPIC_AUTH_TOKEN: process.env.ANTHROPIC_AUTH_TOKEN || 'sk-openzoo',
|
|
330
330
|
};
|
|
331
|
+
// TRUST OUR SELF-SIGNED IMPERSONATION CERT IN THE EDITOR'S NODE STACK TOO.
|
|
332
|
+
// --ignore-certificate-errors covers only the Chromium RENDERER (browser fetch:
|
|
333
|
+
// stripe, updates — those succeeded). The editor's gRPC/Connect transport runs
|
|
334
|
+
// in the Electron MAIN process on Node's own TLS, which ignores that flag and
|
|
335
|
+
// rejected our cert — the ECONNRESET-before-ALPN wall in the backend log, and
|
|
336
|
+
// exactly the model/chat calls we need. NODE_TLS_REJECT_UNAUTHORIZED=0 is the
|
|
337
|
+
// Node-side switch. Only set under takeover, where we own the endpoint.
|
|
338
|
+
if (which === 'cursor' && !process.argv.includes('--no-takeover')) env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
|
331
339
|
|
|
332
340
|
console.log('');
|
|
333
341
|
console.log(`mcp: ${mcpFile} (openzoo: zoo_bind, zoo_ask, zoo_models, zoo_wallet, zoo_contexts)`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openzoo",
|
|
3
|
-
"version": "0.29.
|
|
3
|
+
"version": "0.29.9",
|
|
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",
|