iranti-control-plane 0.5.4 → 0.5.6

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/README.md CHANGED
@@ -1,15 +1,17 @@
1
1
  # Iranti Control Plane
2
2
 
3
- Local-first operator dashboard for [Iranti](https://github.com/nfemmanuel/iranti) - inspect memory, watch Staff activity, manage instances, and diagnose your setup without raw SQL.
3
+ Local-first operator dashboard for [Iranti](https://github.com/nfemmanuel/iranti) inspect memory, watch Staff activity, manage instances, and diagnose your setup without raw SQL.
4
4
 
5
5
  ## Status
6
6
 
7
- Current package version: `0.4.3`.
8
- The operator surface is live and under active UX hardening.
7
+ Current package version: `0.5.5`.
8
+ The operator surface is live and under active development.
9
9
 
10
- ## Install
10
+ Available on npm and mirrored by jsDelivr:
11
+ - npm: `npm install -g iranti-control-plane`
12
+ - jsDelivr CDN: `https://cdn.jsdelivr.net/npm/iranti-control-plane/`
11
13
 
12
- For the packaged control-plane CLI path (after npm publish, or from a locally packed tarball):
14
+ ## Install
13
15
 
14
16
  ```bash
15
17
  npm install -g iranti-control-plane
package/bin/iranti-cp.js CHANGED
@@ -309,6 +309,38 @@ function spawnControlPlane({ port, openBrowser, detached }) {
309
309
  if (port) env.CONTROL_PLANE_PORT = String(port);
310
310
  if (!openBrowser) env.IRANTI_CP_NO_OPEN = '1';
311
311
 
312
+ // On Windows, spawning node.exe directly causes Windows Terminal (wt.exe)
313
+ // to intercept the new console process and flash a tab, even with
314
+ // windowsHide:true. windowsHide suppresses a standalone console window but
315
+ // does not prevent Windows Terminal from attaching.
316
+ //
317
+ // Routing through `cmd /c start "" /b node bundle.cjs` creates the child
318
+ // with the DETACHED_PROCESS flag implicitly, so no console is allocated and
319
+ // Windows Terminal never attaches. This is only needed for the detached
320
+ // (background) case; foreground start keeps stdio:inherit as usual.
321
+ if (process.platform === 'win32' && detached) {
322
+ // On Windows, spawning node.exe directly causes Windows Terminal (wt.exe)
323
+ // to attach and flash a tab. Routing through a hidden cmd process (via
324
+ // windowsHide:true + detached:true) prevents attachment because cmd gets
325
+ // CREATE_NO_WINDOW, and node.exe — run as cmd's synchronous child (no
326
+ // start /b) — inherits that no-console state.
327
+ //
328
+ // We also cannot pass env vars via spawn({env}) because the env block on
329
+ // the outer cmd is not forwarded to node by the OS process-creation chain.
330
+ // A temp batch file with explicit SET commands is the reliable workaround.
331
+ const batPath = require('path').join(require('os').tmpdir(), `iranti-cp-${Date.now()}.bat`);
332
+ const batLines = ['@echo off'];
333
+ if (port) batLines.push(`SET CONTROL_PLANE_PORT=${String(port)}`);
334
+ if (!openBrowser) batLines.push('SET IRANTI_CP_NO_OPEN=1');
335
+ batLines.push(`"${process.execPath}" "${BUNDLE}"`);
336
+ require('fs').writeFileSync(batPath, batLines.join('\r\n') + '\r\n');
337
+ const child = spawn('cmd', ['/d', '/s', '/c', batPath], {
338
+ detached: true, stdio: 'ignore', windowsHide: true,
339
+ });
340
+ child.unref();
341
+ return child;
342
+ }
343
+
312
344
  const child = spawn(process.execPath, [BUNDLE], {
313
345
  env,
314
346
  stdio: detached ? 'ignore' : 'inherit',