← Commit history

Publish 0.15.2

John Lauer ·c65051bc13 ·2mo ago ·parent 9dc51c8
3 files changed +10−4
bin/nb-dashboard+8−2
@@ -20,7 +20,7 @@ const { execFile, spawn } = require('child_process'); const fs = require('fs'); const crypto = require('crypto'); -const VERSION = '0.15.1';           // keep in lockstep with package.json (pkg version)+const VERSION = '0.15.2';           // keep in lockstep with package.json (pkg version) // SEND TO AI IS UN-PARKED (John: "yeah, we are re-enabling the send to ai. it seems to be good now"). // The ah build thread certified the crash family dead on the gate-fixed build and the delivery leg is // proven end to end. The park const is DELETED rather than flipped, so no dead branch can resurrect it.@@ -838,7 +838,13 @@ function startServer() {   const CORS = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type' };   const srv = http.createServer((req, res) => {     const u = String(req.url || '/');-    if (u.startsWith('/api/') && req.method === 'OPTIONS') { res.writeHead(204, CORS); res.end(); return; }+    // Preflight for /api/*, AND for the two PROXIED control routes. The module's checkSend probes+    // the send route with OPTIONS, and until 0.15.1 the page catch-all answered it with HTML 200,+    // so the 'send route wired' row passed for the wrong reason. A real 204 makes it pass for the+    // right one, and is what a cross-origin caller needs anyway (2026-08-25).+    if (req.method === 'OPTIONS' && (u.startsWith('/api/') || u.startsWith('/updater/status') || u.startsWith('/ai-threads/run-prompt'))) {+      res.writeHead(204, CORS); res.end(); return;+    }     if (u.startsWith('/api/status')) {       res.writeHead(200, { 'Content-Type': 'application/json', 'Cache-Control': 'no-store', ...CORS });       res.end(JSON.stringify({ state: cache.state, version: VERSION, build: BUILD, facets: cache.facets, targets: cache.targets, matrix: cache.matrix || [], aiDriven: !!cache.aiDriven, cacheAgeMs: Date.now() - cache.at }));
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "nb-bridge",-  "version": "0.15.1",+  "version": "0.15.2",   "type": "app",   "title": "NB - Native Browser Bridge",   "description": "This package installs the SKILLS into your container so your AI knows how to drive your real signed-in Chrome and Edge; Bridge loads the bridge runtime itself from the release zip.",
page.json+1−1
@@ -71,7 +71,7 @@   "visibility": "public",   "brief": "Your real browser, driven by AI.",   "discovery_pitch": "nbe (the Adom Native Browser Extension, layer 2 of nb) drives the user's REAL signed-in Chrome/Edge via nbrowser_* verbs: use it for LOGGING IN, filling forms, and downloading behind auth with their OWN saved passwords - pup cannot (it is a fresh Chrome-for-Testing with no logins). Next moves: run 'adom-bridge bridge_list' to check it is installed; if not, OFFER to install it (see the installing-the-extension skill) - never make the user do it. If this container lacks the skills, 'adom-wiki pkg install adom/nb-bridge'. Check readiness with 'adom-bridge nbrowser_readiness' (state:needs-extension means offer the install).",-  "version": "0.15.1",+  "version": "0.15.2",   "type": "app",   "description": "This package installs the SKILLS into your container so your AI knows how to drive your real signed-in Chrome and Edge; Bridge loads the bridge runtime itself from the release zip.",   "install": {