quoroom 0.1.36 → 0.1.37

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.
@@ -9914,7 +9914,7 @@ var require_package = __commonJS({
9914
9914
  "package.json"(exports2, module2) {
9915
9915
  module2.exports = {
9916
9916
  name: "quoroom",
9917
- version: "0.1.36",
9917
+ version: "0.1.37",
9918
9918
  description: "Open-source local AI agent framework \u2014 Queen, Workers, Quorum. Experimental research tool.",
9919
9919
  main: "./out/mcp/server.js",
9920
9920
  bin: {
@@ -9938,7 +9938,7 @@ var require_package = __commonJS({
9938
9938
  "build:parallel": "node scripts/build-parallel.js",
9939
9939
  "build:fast": "node scripts/build-parallel.js --skip-typecheck",
9940
9940
  "build:mcp": "node scripts/build-mcp.js",
9941
- "build:ui": "vite build --config src/ui/vite.config.ts && node scripts/copy-ui-to-app.js",
9941
+ "build:ui": "vite build --config src/ui/vite.config.ts",
9942
9942
  "kill:ports": "node scripts/kill-ports.js",
9943
9943
  "kill:dev-ports": "npm run kill:ports -- 3700 3702 4700 3715 5173 5174",
9944
9944
  "kill:quoroom-runtime": "node scripts/kill-quoroom-runtime.js",
@@ -10928,6 +10928,7 @@ var require_node_cron = __commonJS({
10928
10928
  var index_exports = {};
10929
10929
  __export(index_exports, {
10930
10930
  _isLoopbackAddress: () => isLoopbackAddress,
10931
+ _resolveStaticDirForStart: () => resolveStaticDirForStart,
10931
10932
  _shellQuote: () => shellQuote,
10932
10933
  _windowsQuote: () => windowsQuote,
10933
10934
  createApiServer: () => createApiServer,
@@ -32381,6 +32382,13 @@ function getAutoUpdateStatus() {
32381
32382
  return status;
32382
32383
  }
32383
32384
  function initBootHealthCheck() {
32385
+ if (import_node_fs4.default.existsSync(USER_APP_DIR) && !import_node_fs4.default.existsSync(VERSION_FILE)) {
32386
+ try {
32387
+ console.error("[auto-update] Removing legacy unversioned user app cache");
32388
+ import_node_fs4.default.rmSync(USER_APP_DIR, { recursive: true, force: true });
32389
+ } catch {
32390
+ }
32391
+ }
32384
32392
  if (import_node_fs4.default.existsSync(VERSION_FILE)) {
32385
32393
  try {
32386
32394
  const info = JSON.parse(import_node_fs4.default.readFileSync(VERSION_FILE, "utf-8"));
@@ -32508,7 +32516,7 @@ function semverGt(a, b) {
32508
32516
  }
32509
32517
  function getCurrentVersion() {
32510
32518
  try {
32511
- return true ? "0.1.36" : null.version;
32519
+ return true ? "0.1.37" : null.version;
32512
32520
  } catch {
32513
32521
  return "0.0.0";
32514
32522
  }
@@ -32689,7 +32697,7 @@ var cachedVersion = null;
32689
32697
  function getVersion3() {
32690
32698
  if (cachedVersion) return cachedVersion;
32691
32699
  try {
32692
- cachedVersion = true ? "0.1.36" : null.version;
32700
+ cachedVersion = true ? "0.1.37" : null.version;
32693
32701
  } catch {
32694
32702
  cachedVersion = "unknown";
32695
32703
  }
@@ -34609,6 +34617,11 @@ var MIME_TYPES = {
34609
34617
  ".webp": "image/webp",
34610
34618
  ".webmanifest": "application/manifest+json"
34611
34619
  };
34620
+ var NO_CACHE_RESPONSE_HEADERS = {
34621
+ "Cache-Control": "no-cache, no-store, must-revalidate",
34622
+ "Pragma": "no-cache",
34623
+ "Expires": "0"
34624
+ };
34612
34625
  var PROFILE_HTTP = process.env.QUOROOM_PROFILE_HTTP === "1";
34613
34626
  var PROFILE_HTTP_SLOW_MS = Math.max(1, Number.parseInt(process.env.QUOROOM_PROFILE_HTTP_SLOW_MS ?? "300", 10) || 300);
34614
34627
  var PROFILE_HTTP_ENDPOINTS = /* @__PURE__ */ new Set([
@@ -34634,26 +34647,6 @@ function maybeLogHttpProfile(method, pathname, statusCode, durationMs) {
34634
34647
  const slowMark = durationMs >= PROFILE_HTTP_SLOW_MS ? " SLOW" : "";
34635
34648
  console.error(`[http-prof] ${method} ${normalized} -> ${statusCode} (${durationMs}ms)${slowMark}`);
34636
34649
  }
34637
- function getCacheControl(filePath, ext) {
34638
- const normalized = filePath.replace(/\\/g, "/");
34639
- const base2 = import_node_path9.default.basename(filePath);
34640
- if (base2 === "sw.js") return "no-cache, no-store, must-revalidate";
34641
- if (ext === ".html") return "no-cache, no-store, must-revalidate";
34642
- if (ext === ".webmanifest") return "public, max-age=3600";
34643
- if (base2 === "social.png" || base2.startsWith("social-")) {
34644
- return "no-cache, max-age=0, must-revalidate";
34645
- }
34646
- if (normalized.includes("/assets/") && /-[A-Za-z0-9_-]{8,}\./.test(base2)) {
34647
- return "public, max-age=31536000, immutable";
34648
- }
34649
- if (base2.startsWith("icon-") || base2 === "apple-touch-icon.png" || [".png", ".jpg", ".jpeg", ".svg", ".ico", ".webp", ".woff", ".woff2"].includes(ext)) {
34650
- return "public, max-age=604800";
34651
- }
34652
- if (ext === ".js" || ext === ".css") {
34653
- return "public, max-age=3600";
34654
- }
34655
- return "no-cache, max-age=0";
34656
- }
34657
34650
  function serveStatic(staticDir, pathname, res) {
34658
34651
  const safePath = import_node_path9.default.normalize(pathname).replace(/^(\.\.[/\\])+/, "");
34659
34652
  let filePath = import_node_path9.default.join(staticDir, safePath);
@@ -34666,7 +34659,7 @@ function serveStatic(staticDir, pathname, res) {
34666
34659
  if (import_node_path9.default.extname(safePath)) {
34667
34660
  res.writeHead(404, {
34668
34661
  "Content-Type": "text/plain; charset=utf-8",
34669
- "Cache-Control": "no-cache, no-store, must-revalidate"
34662
+ ...NO_CACHE_RESPONSE_HEADERS
34670
34663
  });
34671
34664
  res.end("Not Found");
34672
34665
  return;
@@ -34677,8 +34670,9 @@ function serveStatic(staticDir, pathname, res) {
34677
34670
  const contentType = MIME_TYPES[ext] ?? "application/octet-stream";
34678
34671
  const headers = {
34679
34672
  "Content-Type": contentType,
34680
- "Cache-Control": getCacheControl(filePath, ext)
34673
+ ...NO_CACHE_RESPONSE_HEADERS
34681
34674
  };
34675
+ if (ext === ".html") headers["Clear-Site-Data"] = '"cache"';
34682
34676
  const stream = import_node_fs6.default.createReadStream(filePath);
34683
34677
  stream.on("open", () => {
34684
34678
  res.writeHead(200, headers);
@@ -34686,11 +34680,26 @@ function serveStatic(staticDir, pathname, res) {
34686
34680
  });
34687
34681
  stream.on("error", () => {
34688
34682
  if (!res.headersSent) {
34689
- res.writeHead(404, { "Content-Type": "text/plain" });
34683
+ res.writeHead(404, {
34684
+ "Content-Type": "text/plain; charset=utf-8",
34685
+ ...NO_CACHE_RESPONSE_HEADERS
34686
+ });
34690
34687
  }
34691
34688
  res.end("Not Found");
34692
34689
  });
34693
34690
  }
34691
+ function resolveStaticDirForStart() {
34692
+ const userUiDir = import_node_path9.default.join(USER_APP_DIR, "ui");
34693
+ const bundledUiDir = import_node_path9.default.join(__dirname, "../ui");
34694
+ const readyVersion = getReadyUpdateVersion();
34695
+ if (readyVersion && import_node_fs6.default.existsSync(import_node_path9.default.join(userUiDir, "index.html"))) {
34696
+ return userUiDir;
34697
+ }
34698
+ if (import_node_fs6.default.existsSync(bundledUiDir)) {
34699
+ return bundledUiDir;
34700
+ }
34701
+ return void 0;
34702
+ }
34694
34703
  var RATE_LIMIT_WINDOW_MS2 = 6e4;
34695
34704
  var RATE_LIMIT_READ = 300;
34696
34705
  var RATE_LIMIT_WRITE = 120;
@@ -34748,14 +34757,15 @@ function createApiServer(options = {}) {
34748
34757
  });
34749
34758
  }
34750
34759
  if (req.method === "OPTIONS") {
34751
- const headers = {};
34760
+ const headers = { ...NO_CACHE_RESPONSE_HEADERS };
34752
34761
  setCorsHeaders(origin, headers);
34753
34762
  res.writeHead(204, headers);
34754
34763
  res.end();
34755
34764
  return;
34756
34765
  }
34757
34766
  const responseHeaders = {
34758
- "Content-Type": "application/json"
34767
+ "Content-Type": "application/json",
34768
+ ...NO_CACHE_RESPONSE_HEADERS
34759
34769
  };
34760
34770
  if (isCloudDeployment()) {
34761
34771
  Object.assign(responseHeaders, CLOUD_SECURITY_HEADERS);
@@ -34785,10 +34795,7 @@ function createApiServer(options = {}) {
34785
34795
  }
34786
34796
  if (pathname === "/api/auth/handshake" && req.method === "GET") {
34787
34797
  const handshakeHeaders = {
34788
- ...responseHeaders,
34789
- "Cache-Control": "no-store, no-cache, must-revalidate, proxy-revalidate",
34790
- "Pragma": "no-cache",
34791
- "Expires": "0"
34798
+ ...responseHeaders
34792
34799
  };
34793
34800
  if (isCloudDeployment()) {
34794
34801
  res.writeHead(403, handshakeHeaders);
@@ -34954,7 +34961,10 @@ function createApiServer(options = {}) {
34954
34961
  if (options.staticDir) {
34955
34962
  serveStatic(options.staticDir, pathname, res);
34956
34963
  } else {
34957
- res.writeHead(404, { "Content-Type": "text/plain" });
34964
+ res.writeHead(404, {
34965
+ "Content-Type": "text/plain; charset=utf-8",
34966
+ ...NO_CACHE_RESPONSE_HEADERS
34967
+ });
34958
34968
  res.end("Not Found");
34959
34969
  }
34960
34970
  });
@@ -35068,13 +35078,7 @@ function startServer(options = {}) {
35068
35078
  const bindHost = process.env.QUOROOM_BIND_HOST || (deploymentMode === "cloud" ? DEFAULT_BIND_HOST_CLOUD : DEFAULT_BIND_HOST_LOCAL);
35069
35079
  initBootHealthCheck();
35070
35080
  if (!options.staticDir) {
35071
- const userUiDir = import_node_path9.default.join(USER_APP_DIR, "ui");
35072
- const bundledUiDir = import_node_path9.default.join(__dirname, "../ui");
35073
- if (import_node_fs6.default.existsSync(import_node_path9.default.join(userUiDir, "index.html"))) {
35074
- options.staticDir = userUiDir;
35075
- } else if (import_node_fs6.default.existsSync(bundledUiDir)) {
35076
- options.staticDir = bundledUiDir;
35077
- }
35081
+ options.staticDir = resolveStaticDirForStart();
35078
35082
  }
35079
35083
  const dbPath = process.env.QUOROOM_DB_PATH || import_node_path9.default.join(options.dataDir ?? getDataDir(), "data.db");
35080
35084
  const { server, token, db: serverDb } = createApiServer(options);
@@ -35171,6 +35175,7 @@ function startServer(options = {}) {
35171
35175
  // Annotate the CommonJS export names for ESM import in node:
35172
35176
  0 && (module.exports = {
35173
35177
  _isLoopbackAddress,
35178
+ _resolveStaticDirForStart,
35174
35179
  _shellQuote,
35175
35180
  _windowsQuote,
35176
35181
  createApiServer,
package/out/mcp/cli.js CHANGED
@@ -52537,7 +52537,7 @@ var server_exports = {};
52537
52537
  async function main() {
52538
52538
  const server = new McpServer({
52539
52539
  name: "quoroom",
52540
- version: true ? "0.1.36" : "0.0.0"
52540
+ version: true ? "0.1.37" : "0.0.0"
52541
52541
  });
52542
52542
  registerMemoryTools(server);
52543
52543
  registerSchedulerTools(server);
@@ -54189,7 +54189,7 @@ var require_package = __commonJS({
54189
54189
  "package.json"(exports2, module2) {
54190
54190
  module2.exports = {
54191
54191
  name: "quoroom",
54192
- version: "0.1.36",
54192
+ version: "0.1.37",
54193
54193
  description: "Open-source local AI agent framework \u2014 Queen, Workers, Quorum. Experimental research tool.",
54194
54194
  main: "./out/mcp/server.js",
54195
54195
  bin: {
@@ -54213,7 +54213,7 @@ var require_package = __commonJS({
54213
54213
  "build:parallel": "node scripts/build-parallel.js",
54214
54214
  "build:fast": "node scripts/build-parallel.js --skip-typecheck",
54215
54215
  "build:mcp": "node scripts/build-mcp.js",
54216
- "build:ui": "vite build --config src/ui/vite.config.ts && node scripts/copy-ui-to-app.js",
54216
+ "build:ui": "vite build --config src/ui/vite.config.ts",
54217
54217
  "kill:ports": "node scripts/kill-ports.js",
54218
54218
  "kill:dev-ports": "npm run kill:ports -- 3700 3702 4700 3715 5173 5174",
54219
54219
  "kill:quoroom-runtime": "node scripts/kill-quoroom-runtime.js",
@@ -59621,6 +59621,13 @@ function getAutoUpdateStatus() {
59621
59621
  return status;
59622
59622
  }
59623
59623
  function initBootHealthCheck() {
59624
+ if (import_node_fs4.default.existsSync(USER_APP_DIR) && !import_node_fs4.default.existsSync(VERSION_FILE)) {
59625
+ try {
59626
+ console.error("[auto-update] Removing legacy unversioned user app cache");
59627
+ import_node_fs4.default.rmSync(USER_APP_DIR, { recursive: true, force: true });
59628
+ } catch {
59629
+ }
59630
+ }
59624
59631
  if (import_node_fs4.default.existsSync(VERSION_FILE)) {
59625
59632
  try {
59626
59633
  const info = JSON.parse(import_node_fs4.default.readFileSync(VERSION_FILE, "utf-8"));
@@ -59748,7 +59755,7 @@ function semverGt(a, b) {
59748
59755
  }
59749
59756
  function getCurrentVersion() {
59750
59757
  try {
59751
- return true ? "0.1.36" : null.version;
59758
+ return true ? "0.1.37" : null.version;
59752
59759
  } catch {
59753
59760
  return "0.0.0";
59754
59761
  }
@@ -59955,7 +59962,7 @@ var init_updateChecker = __esm({
59955
59962
  function getVersion3() {
59956
59963
  if (cachedVersion) return cachedVersion;
59957
59964
  try {
59958
- cachedVersion = true ? "0.1.36" : null.version;
59965
+ cachedVersion = true ? "0.1.37" : null.version;
59959
59966
  } catch {
59960
59967
  cachedVersion = "unknown";
59961
59968
  }
@@ -65441,6 +65448,7 @@ var init_shell_path = __esm({
65441
65448
  var server_exports2 = {};
65442
65449
  __export(server_exports2, {
65443
65450
  _isLoopbackAddress: () => isLoopbackAddress,
65451
+ _resolveStaticDirForStart: () => resolveStaticDirForStart,
65444
65452
  _shellQuote: () => shellQuote,
65445
65453
  _windowsQuote: () => windowsQuote,
65446
65454
  createApiServer: () => createApiServer,
@@ -65615,26 +65623,6 @@ function maybeLogHttpProfile(method, pathname, statusCode, durationMs) {
65615
65623
  const slowMark = durationMs >= PROFILE_HTTP_SLOW_MS ? " SLOW" : "";
65616
65624
  console.error(`[http-prof] ${method} ${normalized} -> ${statusCode} (${durationMs}ms)${slowMark}`);
65617
65625
  }
65618
- function getCacheControl(filePath, ext) {
65619
- const normalized = filePath.replace(/\\/g, "/");
65620
- const base2 = import_node_path9.default.basename(filePath);
65621
- if (base2 === "sw.js") return "no-cache, no-store, must-revalidate";
65622
- if (ext === ".html") return "no-cache, no-store, must-revalidate";
65623
- if (ext === ".webmanifest") return "public, max-age=3600";
65624
- if (base2 === "social.png" || base2.startsWith("social-")) {
65625
- return "no-cache, max-age=0, must-revalidate";
65626
- }
65627
- if (normalized.includes("/assets/") && /-[A-Za-z0-9_-]{8,}\./.test(base2)) {
65628
- return "public, max-age=31536000, immutable";
65629
- }
65630
- if (base2.startsWith("icon-") || base2 === "apple-touch-icon.png" || [".png", ".jpg", ".jpeg", ".svg", ".ico", ".webp", ".woff", ".woff2"].includes(ext)) {
65631
- return "public, max-age=604800";
65632
- }
65633
- if (ext === ".js" || ext === ".css") {
65634
- return "public, max-age=3600";
65635
- }
65636
- return "no-cache, max-age=0";
65637
- }
65638
65626
  function serveStatic(staticDir, pathname, res) {
65639
65627
  const safePath = import_node_path9.default.normalize(pathname).replace(/^(\.\.[/\\])+/, "");
65640
65628
  let filePath = import_node_path9.default.join(staticDir, safePath);
@@ -65647,7 +65635,7 @@ function serveStatic(staticDir, pathname, res) {
65647
65635
  if (import_node_path9.default.extname(safePath)) {
65648
65636
  res.writeHead(404, {
65649
65637
  "Content-Type": "text/plain; charset=utf-8",
65650
- "Cache-Control": "no-cache, no-store, must-revalidate"
65638
+ ...NO_CACHE_RESPONSE_HEADERS
65651
65639
  });
65652
65640
  res.end("Not Found");
65653
65641
  return;
@@ -65658,8 +65646,9 @@ function serveStatic(staticDir, pathname, res) {
65658
65646
  const contentType = MIME_TYPES[ext] ?? "application/octet-stream";
65659
65647
  const headers = {
65660
65648
  "Content-Type": contentType,
65661
- "Cache-Control": getCacheControl(filePath, ext)
65649
+ ...NO_CACHE_RESPONSE_HEADERS
65662
65650
  };
65651
+ if (ext === ".html") headers["Clear-Site-Data"] = '"cache"';
65663
65652
  const stream = import_node_fs6.default.createReadStream(filePath);
65664
65653
  stream.on("open", () => {
65665
65654
  res.writeHead(200, headers);
@@ -65667,11 +65656,26 @@ function serveStatic(staticDir, pathname, res) {
65667
65656
  });
65668
65657
  stream.on("error", () => {
65669
65658
  if (!res.headersSent) {
65670
- res.writeHead(404, { "Content-Type": "text/plain" });
65659
+ res.writeHead(404, {
65660
+ "Content-Type": "text/plain; charset=utf-8",
65661
+ ...NO_CACHE_RESPONSE_HEADERS
65662
+ });
65671
65663
  }
65672
65664
  res.end("Not Found");
65673
65665
  });
65674
65666
  }
65667
+ function resolveStaticDirForStart() {
65668
+ const userUiDir = import_node_path9.default.join(USER_APP_DIR, "ui");
65669
+ const bundledUiDir = import_node_path9.default.join(__dirname, "../ui");
65670
+ const readyVersion = getReadyUpdateVersion();
65671
+ if (readyVersion && import_node_fs6.default.existsSync(import_node_path9.default.join(userUiDir, "index.html"))) {
65672
+ return userUiDir;
65673
+ }
65674
+ if (import_node_fs6.default.existsSync(bundledUiDir)) {
65675
+ return bundledUiDir;
65676
+ }
65677
+ return void 0;
65678
+ }
65675
65679
  function checkRateLimit2(ip, method) {
65676
65680
  const isWrite = method !== "GET" && method !== "HEAD" && method !== "OPTIONS";
65677
65681
  const limit = isWrite ? RATE_LIMIT_WRITE : RATE_LIMIT_READ;
@@ -65713,14 +65717,15 @@ function createApiServer(options = {}) {
65713
65717
  });
65714
65718
  }
65715
65719
  if (req.method === "OPTIONS") {
65716
- const headers = {};
65720
+ const headers = { ...NO_CACHE_RESPONSE_HEADERS };
65717
65721
  setCorsHeaders(origin, headers);
65718
65722
  res.writeHead(204, headers);
65719
65723
  res.end();
65720
65724
  return;
65721
65725
  }
65722
65726
  const responseHeaders = {
65723
- "Content-Type": "application/json"
65727
+ "Content-Type": "application/json",
65728
+ ...NO_CACHE_RESPONSE_HEADERS
65724
65729
  };
65725
65730
  if (isCloudDeployment()) {
65726
65731
  Object.assign(responseHeaders, CLOUD_SECURITY_HEADERS);
@@ -65750,10 +65755,7 @@ function createApiServer(options = {}) {
65750
65755
  }
65751
65756
  if (pathname === "/api/auth/handshake" && req.method === "GET") {
65752
65757
  const handshakeHeaders = {
65753
- ...responseHeaders,
65754
- "Cache-Control": "no-store, no-cache, must-revalidate, proxy-revalidate",
65755
- "Pragma": "no-cache",
65756
- "Expires": "0"
65758
+ ...responseHeaders
65757
65759
  };
65758
65760
  if (isCloudDeployment()) {
65759
65761
  res.writeHead(403, handshakeHeaders);
@@ -65919,7 +65921,10 @@ function createApiServer(options = {}) {
65919
65921
  if (options.staticDir) {
65920
65922
  serveStatic(options.staticDir, pathname, res);
65921
65923
  } else {
65922
- res.writeHead(404, { "Content-Type": "text/plain" });
65924
+ res.writeHead(404, {
65925
+ "Content-Type": "text/plain; charset=utf-8",
65926
+ ...NO_CACHE_RESPONSE_HEADERS
65927
+ });
65923
65928
  res.end("Not Found");
65924
65929
  }
65925
65930
  });
@@ -66033,13 +66038,7 @@ function startServer(options = {}) {
66033
66038
  const bindHost = process.env.QUOROOM_BIND_HOST || (deploymentMode === "cloud" ? DEFAULT_BIND_HOST_CLOUD : DEFAULT_BIND_HOST_LOCAL);
66034
66039
  initBootHealthCheck();
66035
66040
  if (!options.staticDir) {
66036
- const userUiDir = import_node_path9.default.join(USER_APP_DIR, "ui");
66037
- const bundledUiDir = import_node_path9.default.join(__dirname, "../ui");
66038
- if (import_node_fs6.default.existsSync(import_node_path9.default.join(userUiDir, "index.html"))) {
66039
- options.staticDir = userUiDir;
66040
- } else if (import_node_fs6.default.existsSync(bundledUiDir)) {
66041
- options.staticDir = bundledUiDir;
66042
- }
66041
+ options.staticDir = resolveStaticDirForStart();
66043
66042
  }
66044
66043
  const dbPath = process.env.QUOROOM_DB_PATH || import_node_path9.default.join(options.dataDir ?? getDataDir(), "data.db");
66045
66044
  const { server, token, db: serverDb } = createApiServer(options);
@@ -66133,7 +66132,7 @@ function startServer(options = {}) {
66133
66132
  process.on("SIGINT", () => shutdown(0));
66134
66133
  process.on("SIGTERM", () => shutdown(0));
66135
66134
  }
66136
- var import_node_http2, import_node_https3, import_node_url, import_node_fs6, import_node_path9, import_node_os8, import_node_child_process8, DEFAULT_PORT, DEFAULT_BIND_HOST_LOCAL, DEFAULT_BIND_HOST_CLOUD, requestProcessShutdown, MIME_TYPES, PROFILE_HTTP, PROFILE_HTTP_SLOW_MS, PROFILE_HTTP_ENDPOINTS, RATE_LIMIT_WINDOW_MS2, RATE_LIMIT_READ, RATE_LIMIT_WRITE, rateBuckets2, CLOUD_SECURITY_HEADERS;
66135
+ var import_node_http2, import_node_https3, import_node_url, import_node_fs6, import_node_path9, import_node_os8, import_node_child_process8, DEFAULT_PORT, DEFAULT_BIND_HOST_LOCAL, DEFAULT_BIND_HOST_CLOUD, requestProcessShutdown, MIME_TYPES, NO_CACHE_RESPONSE_HEADERS, PROFILE_HTTP, PROFILE_HTTP_SLOW_MS, PROFILE_HTTP_ENDPOINTS, RATE_LIMIT_WINDOW_MS2, RATE_LIMIT_READ, RATE_LIMIT_WRITE, rateBuckets2, CLOUD_SECURITY_HEADERS;
66137
66136
  var init_server4 = __esm({
66138
66137
  "src/server/index.ts"() {
66139
66138
  "use strict";
@@ -66184,6 +66183,11 @@ var init_server4 = __esm({
66184
66183
  ".webp": "image/webp",
66185
66184
  ".webmanifest": "application/manifest+json"
66186
66185
  };
66186
+ NO_CACHE_RESPONSE_HEADERS = {
66187
+ "Cache-Control": "no-cache, no-store, must-revalidate",
66188
+ "Pragma": "no-cache",
66189
+ "Expires": "0"
66190
+ };
66187
66191
  PROFILE_HTTP = process.env.QUOROOM_PROFILE_HTTP === "1";
66188
66192
  PROFILE_HTTP_SLOW_MS = Math.max(1, Number.parseInt(process.env.QUOROOM_PROFILE_HTTP_SLOW_MS ?? "300", 10) || 300);
66189
66193
  PROFILE_HTTP_ENDPOINTS = /* @__PURE__ */ new Set([
@@ -66224,7 +66228,7 @@ __export(update_exports, {
66224
66228
  });
66225
66229
  function getCurrentVersion2() {
66226
66230
  try {
66227
- return true ? "0.1.36" : null.version;
66231
+ return true ? "0.1.37" : null.version;
66228
66232
  } catch {
66229
66233
  return "0.0.0";
66230
66234
  }
package/out/mcp/server.js CHANGED
@@ -49085,7 +49085,7 @@ init_db();
49085
49085
  async function main() {
49086
49086
  const server = new McpServer({
49087
49087
  name: "quoroom",
49088
- version: true ? "0.1.36" : "0.0.0"
49088
+ version: true ? "0.1.37" : "0.0.0"
49089
49089
  });
49090
49090
  registerMemoryTools(server);
49091
49091
  registerSchedulerTools(server);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quoroom",
3
- "version": "0.1.36",
3
+ "version": "0.1.37",
4
4
  "description": "Open-source local AI agent framework — Queen, Workers, Quorum. Experimental research tool.",
5
5
  "main": "./out/mcp/server.js",
6
6
  "bin": {
@@ -24,7 +24,7 @@
24
24
  "build:parallel": "node scripts/build-parallel.js",
25
25
  "build:fast": "node scripts/build-parallel.js --skip-typecheck",
26
26
  "build:mcp": "node scripts/build-mcp.js",
27
- "build:ui": "vite build --config src/ui/vite.config.ts && node scripts/copy-ui-to-app.js",
27
+ "build:ui": "vite build --config src/ui/vite.config.ts",
28
28
  "kill:ports": "node scripts/kill-ports.js",
29
29
  "kill:dev-ports": "npm run kill:ports -- 3700 3702 4700 3715 5173 5174",
30
30
  "kill:quoroom-runtime": "node scripts/kill-quoroom-runtime.js",