infinicode 2.8.40 → 2.8.42

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.
@@ -1273,7 +1273,7 @@ button.act:disabled{opacity:0.5;cursor:default;}
1273
1273
  + '</div>'
1274
1274
  + '<div class="rp-field"><label style="font-weight:400;color:var(--muted)">'
1275
1275
  + 'This name is sent to the scheduler as the <code>X-Operator</code> header on every action you take (End session, Restart, Set production mode, etc.) '
1276
- + 'and recorded in the audit log. Stored only in your browser\'s localStorage — not on the server. '
1276
+ + 'and recorded in the audit log. Stored only in your browser\\'s localStorage — not on the server. '
1277
1277
  + 'Use a real name so postmortems can answer "who clicked that?".'
1278
1278
  + '</label></div>';
1279
1279
  showModal('Operator identity', html);
@@ -5555,7 +5555,7 @@ button.act:disabled{opacity:0.5;cursor:default;}
5555
5555
  var now = Date.now();
5556
5556
  var lineText = String(text == null ? '' : text);
5557
5557
  // split on newlines so a multi-line result renders as separate rows
5558
- var parts = lineText.split(/\r?\n/);
5558
+ var parts = lineText.split(/\\r?\\n/);
5559
5559
  for(var i=0;i<parts.length;i++){
5560
5560
  if(!parts[i] && i===parts.length-1) continue; // skip trailing empty
5561
5561
  buf.lines.push({ t: now, kind: kind, text: parts[i] });
@@ -5667,7 +5667,7 @@ button.act:disabled{opacity:0.5;cursor:default;}
5667
5667
  var raw = (inp.value || '').trim();
5668
5668
  if(!raw) return;
5669
5669
  // parse "name param1=val1 param2=val2" into the params object
5670
- var parts = raw.split(/\s+/);
5670
+ var parts = raw.split(/\\s+/);
5671
5671
  var name = parts.shift();
5672
5672
  var params = {};
5673
5673
  for(var i=0;i<parts.length;i++){
@@ -6042,7 +6042,7 @@ button.act:disabled{opacity:0.5;cursor:default;}
6042
6042
  si[j].style.background = on
6043
6043
  ? (pass_===true ? 'var(--ok)'
6044
6044
  : pass_===false ? 'var(--bad)'
6045
- : (j<si.length*0.7?'var(--ok)':j<si.length*0.9?'var(--warn)':'var(--bad)')))
6045
+ : (j<si.length*0.7?'var(--ok)':j<si.length*0.9?'var(--warn)':'var(--bad)'))
6046
6046
  : 'var(--glass-border)';
6047
6047
  }
6048
6048
  set('pk-spkval', liveRms>0 ? Math.round(liveRms*100)+'%' : '—');
@@ -262,13 +262,9 @@ export class MeshServer {
262
262
  return;
263
263
  }
264
264
  const remote = req.socket.remoteAddress ?? 'unknown';
265
- // The scheduler owns the complete RoboPark Control Center. The mesh page is
266
- // retained at /mesh as a diagnostics view, not as the primary operator UI.
265
+ // The mesh node serves the full Park-enabled RoboPark Control Center. Its
266
+ // product APIs remain proxied under /robopark/* to the scheduler.
267
267
  if (req.method === 'GET' && (path === '/' || path === '/ui' || path === '/dashboard')) {
268
- if (this.opts.schedulerUrl) {
269
- this.proxySchedulerPath(req, res, '/');
270
- return;
271
- }
272
268
  if (!this.opts.dashboardHtml) {
273
269
  res.writeHead(404).end('dashboard not enabled (start with --dashboard)');
274
270
  return;
@@ -288,15 +284,16 @@ export class MeshServer {
288
284
  res.writeHead(404).end('mesh dashboard not enabled (start with --dashboard)');
289
285
  return;
290
286
  }
291
- res.writeHead(200, { 'content-type': 'text/html; charset=utf-8', 'cache-control': 'no-store' });
287
+ res.writeHead(200, {
288
+ 'content-type': 'text/html; charset=utf-8',
289
+ 'cache-control': 'no-store',
290
+ ...(this.opts.token && this.presentedToken(req)
291
+ ? { 'set-cookie': `robopark_auth=${encodeURIComponent(this.presentedToken(req))}; Path=/; SameSite=Lax` }
292
+ : {}),
293
+ });
292
294
  res.end(this.opts.dashboardHtml);
293
295
  return;
294
296
  }
295
- // Full scheduler dashboard requests are same-origin after the root proxy.
296
- if (this.opts.schedulerUrl && (path.startsWith('/api/') || path.startsWith('/static/') || path.startsWith('/vendor/'))) {
297
- this.proxySchedulerPath(req, res, path);
298
- return;
299
- }
300
297
  // Static assets bundled with the dashboard (robot concept avatars, etc.).
301
298
  if (req.method === 'GET' && path.startsWith('/static/')) {
302
299
  const asset = loadStaticAsset(path.slice(8));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "infinicode",
3
- "version": "2.8.40",
3
+ "version": "2.8.42",
4
4
  "description": "OpenKernel — provider-agnostic AI execution kernel. Native coding agent + mission-driven execution runtime.",
5
5
  "type": "module",
6
6
  "main": "./dist/kernel/index.js",