maxsimcli 3.1.6 → 3.2.0

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.
@@ -10,8 +10,8 @@
10
10
  href="https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700;800;900&family=Geist+Mono:wght@400;500;600;700&display=swap"
11
11
  rel="stylesheet"
12
12
  />
13
- <script type="module" crossorigin src="/assets/index-D_kVSi35.js"></script>
14
- <link rel="stylesheet" crossorigin href="/assets/index-BQtGIP_c.css">
13
+ <script type="module" crossorigin src="/assets/index-OPmaNAnD.js"></script>
14
+ <link rel="stylesheet" crossorigin href="/assets/index-DC5WQ-nw.css">
15
15
  </head>
16
16
  <body>
17
17
  <div id="root"></div>
@@ -57668,7 +57668,21 @@ function getLocalNetworkIp() {
57668
57668
  for (const iface of Object.values(ifaces)) for (const info of iface ?? []) if (info.family === "IPv4" && !info.internal) return info.address;
57669
57669
  return null;
57670
57670
  }
57671
+ function getTailscaleIp() {
57672
+ const ifaces = node_os.networkInterfaces();
57673
+ for (const [name, iface] of Object.entries(ifaces)) {
57674
+ const isTailscaleIface = name === "Tailscale" || name === "tailscale0" || name.toLowerCase().includes("tailscale");
57675
+ for (const info of iface ?? []) {
57676
+ if (info.family !== "IPv4") continue;
57677
+ const parts = info.address.split(".").map(Number);
57678
+ const isTailscaleRange = parts[0] === 100 && parts[1] >= 64 && parts[1] <= 127;
57679
+ if (isTailscaleIface || isTailscaleRange) return info.address;
57680
+ }
57681
+ }
57682
+ return null;
57683
+ }
57671
57684
  const localNetworkIp = networkMode ? getLocalNetworkIp() : null;
57685
+ const tailscaleIp = getTailscaleIp();
57672
57686
  log("INFO", "server", `Starting dashboard server, projectCwd=${projectCwd}, networkMode=${networkMode}`);
57673
57687
  const clientDir = node_path.join(__dirname, "client");
57674
57688
  function isWithinPlanning(cwd, targetPath) {
@@ -58246,7 +58260,8 @@ app.get("/api/server-info", (_req, res) => {
58246
58260
  return res.json({
58247
58261
  networkEnabled: networkMode,
58248
58262
  localUrl: `http://localhost:${resolvedPort}`,
58249
- networkUrl: localNetworkIp ? `http://${localNetworkIp}:${resolvedPort}` : null
58263
+ networkUrl: localNetworkIp ? `http://${localNetworkIp}:${resolvedPort}` : null,
58264
+ tailscaleUrl: tailscaleIp ? `http://${tailscaleIp}:${resolvedPort}` : null
58250
58265
  });
58251
58266
  });
58252
58267
  if (node_fs.existsSync(clientDir)) app.use(build_default(clientDir, { single: true }));
@@ -58337,11 +58352,15 @@ async function main() {
58337
58352
  const port = await esm_default(3333);
58338
58353
  resolvedPort = port;
58339
58354
  const localUrl = `http://localhost:${port}`;
58340
- const bindHost = networkMode ? "0.0.0.0" : "127.0.0.1";
58355
+ const bindHost = networkMode || tailscaleIp !== null ? "0.0.0.0" : "127.0.0.1";
58341
58356
  server.listen(port, bindHost, () => {
58342
58357
  log("INFO", "server", `Dashboard ready at ${localUrl}, log file: ${logFile}`);
58343
58358
  console.error(`Dashboard ready at ${localUrl}`);
58344
58359
  if (networkMode && localNetworkIp) console.error(`Network URL: http://${localNetworkIp}:${port}`);
58360
+ if (tailscaleIp) {
58361
+ console.error(`Tailscale URL: http://${tailscaleIp}:${port}`);
58362
+ console.error(` → open on any Tailscale device`);
58363
+ }
58345
58364
  console.error(`Logs: ${logFile}`);
58346
58365
  open$1(localUrl).catch(() => {});
58347
58366
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maxsimcli",
3
- "version": "3.1.6",
3
+ "version": "3.2.0",
4
4
  "private": false,
5
5
  "description": "A meta-prompting, context engineering and spec-driven development system for Claude Code, OpenCode, Gemini and Codex by MayStudios.",
6
6
  "bin": {