maxsimcli 2.5.3 → 2.5.4

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.
@@ -1,3 +1,10 @@
1
+ ## [2.5.4](https://github.com/maystudios/maxsim/compare/v2.5.3...v2.5.4) (2026-02-25)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **dashboard:** cross-platform compatibility fixes ([9101d90](https://github.com/maystudios/maxsim/commit/9101d90de233ea563227d9477721ac1fb1f39115))
7
+
1
8
  ## [2.5.3](https://github.com/maystudios/maxsim/compare/v2.5.2...v2.5.3) (2026-02-25)
2
9
 
3
10
 
@@ -32444,7 +32444,7 @@ var require_websocket = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32444
32444
  const tls = require("tls");
32445
32445
  const { randomBytes, createHash: createHash$1 } = require("crypto");
32446
32446
  const { Duplex: Duplex$2, Readable: Readable$1 } = require("stream");
32447
- const { URL: URL$1 } = require("url");
32447
+ const { URL } = require("url");
32448
32448
  const PerMessageDeflate = require_permessage_deflate();
32449
32449
  const Receiver = require_receiver();
32450
32450
  const Sender = require_sender();
@@ -32973,9 +32973,9 @@ var require_websocket = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32973
32973
  websocket._closeTimeout = opts.closeTimeout;
32974
32974
  if (!protocolVersions.includes(opts.protocolVersion)) throw new RangeError(`Unsupported protocol version: ${opts.protocolVersion} (supported versions: ${protocolVersions.join(", ")})`);
32975
32975
  let parsedUrl;
32976
- if (address instanceof URL$1) parsedUrl = address;
32976
+ if (address instanceof URL) parsedUrl = address;
32977
32977
  else try {
32978
- parsedUrl = new URL$1(address);
32978
+ parsedUrl = new URL(address);
32979
32979
  } catch (e) {
32980
32980
  throw new SyntaxError(`Invalid URL: ${address}`);
32981
32981
  }
@@ -33077,7 +33077,7 @@ var require_websocket = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33077
33077
  req.abort();
33078
33078
  let addr;
33079
33079
  try {
33080
- addr = new URL$1(location, address);
33080
+ addr = new URL(location, address);
33081
33081
  } catch (e) {
33082
33082
  emitErrorAndClose(websocket, /* @__PURE__ */ new SyntaxError(`Invalid URL: ${location}`));
33083
33083
  return;
@@ -41434,14 +41434,10 @@ try {
41434
41434
  const DISCONNECT_TIMEOUT_MS = 6e4;
41435
41435
  const STATUS_INTERVAL_MS = 1e3;
41436
41436
  const ACTIVE_THRESHOLD_MS = 2e3;
41437
- const logDir$1 = node_path.join(node_path.dirname(new URL(require("url").pathToFileURL(__filename).href).pathname.replace(/^\/([A-Z]:)/i, "$1")), "..", "logs");
41438
41437
  function ptyLog(level, ...args) {
41439
- try {
41440
- node_fs.mkdirSync(logDir$1, { recursive: true });
41441
- const ts = (/* @__PURE__ */ new Date()).toISOString();
41442
- const msg = args.map((a) => typeof a === "string" ? a : JSON.stringify(a)).join(" ");
41443
- node_fs.appendFileSync(node_path.join(logDir$1, `dashboard-${ts.slice(0, 10)}.log`), `[${ts}] [${level}] [pty-manager] ${msg}\n`);
41444
- } catch {}
41438
+ const ts = (/* @__PURE__ */ new Date()).toISOString();
41439
+ const msg = args.map((a) => typeof a === "string" ? a : JSON.stringify(a)).join(" ");
41440
+ console.error(`[${ts}] [${level}] [pty-manager] ${msg}`);
41445
41441
  }
41446
41442
  var PtyManager = class PtyManager {
41447
41443
  static instance = null;
@@ -41596,8 +41592,7 @@ var PtyManager = class PtyManager {
41596
41592
 
41597
41593
  //#endregion
41598
41594
  //#region src/server.ts
41599
- const dashboardDir = node_path.dirname(new URL(require("url").pathToFileURL(__filename).href).pathname.replace(/^\/([A-Z]:)/i, "$1"));
41600
- const logDir = node_path.join(dashboardDir, "logs");
41595
+ const logDir = node_path.join(__dirname, "logs");
41601
41596
  node_fs.mkdirSync(logDir, { recursive: true });
41602
41597
  const logFile = node_path.join(logDir, `dashboard-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}.log`);
41603
41598
  const logStream = node_fs.createWriteStream(logFile, { flags: "a" });
@@ -41707,7 +41702,7 @@ function setupWatcher(cwd, wss) {
41707
41702
  function parseRoadmap(cwd) {
41708
41703
  const roadmapPath = node_path.join(cwd, ".planning", "ROADMAP.md");
41709
41704
  if (!node_fs.existsSync(roadmapPath)) return null;
41710
- const content = node_fs.readFileSync(roadmapPath, "utf-8");
41705
+ const content = node_fs.readFileSync(roadmapPath, "utf-8").replace(/\r\n/g, "\n");
41711
41706
  const phasesDir = node_path.join(cwd, ".planning", "phases");
41712
41707
  const phasePattern = (0, import_dist.getPhasePattern)();
41713
41708
  const phases = [];
@@ -41789,7 +41784,7 @@ function parseRoadmap(cwd) {
41789
41784
  function parseState(cwd) {
41790
41785
  const statePath = node_path.join(cwd, ".planning", "STATE.md");
41791
41786
  if (!node_fs.existsSync(statePath)) return null;
41792
- const content = node_fs.readFileSync(statePath, "utf-8");
41787
+ const content = node_fs.readFileSync(statePath, "utf-8").replace(/\r\n/g, "\n");
41793
41788
  const position = (0, import_dist.stateExtractField)(content, "Current Position") || (0, import_dist.stateExtractField)(content, "Phase");
41794
41789
  const lastActivity = (0, import_dist.stateExtractField)(content, "Last activity") || (0, import_dist.stateExtractField)(content, "Last Activity");
41795
41790
  const currentPhase = (0, import_dist.stateExtractField)(content, "Current Phase") || (0, import_dist.stateExtractField)(content, "Phase");
@@ -41870,7 +41865,7 @@ function parsePhaseDetail(cwd, phaseId) {
41870
41865
  const plans = [];
41871
41866
  for (const planFileName of planFileNames) {
41872
41867
  const planPath = node_path.join(phaseDir, planFileName);
41873
- const content = node_fs.readFileSync(planPath, "utf-8");
41868
+ const content = node_fs.readFileSync(planPath, "utf-8").replace(/\r\n/g, "\n");
41874
41869
  const frontmatter = (0, import_dist.extractFrontmatter)(content);
41875
41870
  const tasks = [];
41876
41871
  const taskRegex = /<task\s+type="([^"]*)"[^>]*>\s*<name>([^<]+)<\/name>([\s\S]*?)<\/task>/g;
@@ -41976,7 +41971,7 @@ app.patch("/api/roadmap", (req, res) => {
41976
41971
  if (!node_fs.existsSync(roadmapPath)) return res.status(404).json({ error: "ROADMAP.md not found" });
41977
41972
  const { phaseNumber, checked } = req.body;
41978
41973
  if (!phaseNumber || checked === void 0) return res.status(400).json({ error: "phaseNumber and checked are required" });
41979
- let content = node_fs.readFileSync(roadmapPath, "utf-8");
41974
+ let content = node_fs.readFileSync(roadmapPath, "utf-8").replace(/\r\n/g, "\n");
41980
41975
  const escapedNum = phaseNumber.replace(".", "\\.");
41981
41976
  const pattern = new RegExp(`(-\\s*\\[)(x| )(\\]\\s*.*Phase\\s+${escapedNum})`, "i");
41982
41977
  if (!content.match(pattern)) return res.status(404).json({ error: `Phase ${phaseNumber} checkbox not found in ROADMAP.md` });
@@ -42000,7 +41995,7 @@ app.patch("/api/state", (req, res) => {
42000
41995
  if (!isWithinPlanning(projectCwd, ".planning/STATE.md")) return res.status(400).json({ error: "Invalid path" });
42001
41996
  const { field, value } = req.body;
42002
41997
  if (!field || value === void 0) return res.status(400).json({ error: "field and value are required" });
42003
- const updated = (0, import_dist.stateReplaceField)(node_fs.readFileSync(statePath, "utf-8"), field, value);
41998
+ const updated = (0, import_dist.stateReplaceField)(node_fs.readFileSync(statePath, "utf-8").replace(/\r\n/g, "\n"), field, value);
42004
41999
  if (!updated) return res.status(404).json({ error: `Field "${field}" not found in STATE.md` });
42005
42000
  suppressPath(statePath);
42006
42001
  node_fs.writeFileSync(statePath, updated, "utf-8");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maxsimcli",
3
- "version": "2.5.3",
3
+ "version": "2.5.4",
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": {