vibora 9.5.0 → 9.6.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.
package/dist/index.html CHANGED
@@ -5,8 +5,8 @@
5
5
  <link rel="icon" type="image/png" href="/logo.png" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>Vibora - Harness Attention. Ship.</title>
8
- <script type="module" crossorigin src="/assets/index-MHJurbm4.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-CYo_ATvM.css">
8
+ <script type="module" crossorigin src="/assets/index-BhDZ1Jze.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-BFg6RnDv.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibora",
3
- "version": "9.5.0",
3
+ "version": "9.6.0",
4
4
  "description": "Harness Attention. Orchestrate Agents. Ship.",
5
5
  "license": "PolyForm-Perimeter-1.0.0",
6
6
  "repository": {
package/server/index.js CHANGED
@@ -4884,9 +4884,17 @@ function updateSettingByPath(settingPath, value) {
4884
4884
  parsed = JSON.parse(fs2.readFileSync(settingsPath, "utf-8"));
4885
4885
  } catch {}
4886
4886
  }
4887
+ const oldValue = getNestedValue(parsed, settingPath);
4887
4888
  setNestedValue(parsed, settingPath, value);
4888
4889
  parsed._schemaVersion = CURRENT_SCHEMA_VERSION;
4889
4890
  fs2.writeFileSync(settingsPath, JSON.stringify(parsed, null, 2), "utf-8");
4891
+ const sensitiveKeys = ["linearApiKey", "githubPat", "cloudflareApiToken", "apiKey"];
4892
+ const isSensitive = sensitiveKeys.some((key) => settingPath.includes(key));
4893
+ const logValue = isSensitive ? "***" : value;
4894
+ const logOldValue = isSensitive ? "***" : oldValue;
4895
+ if (oldValue !== value) {
4896
+ log2.settings.info("Setting updated", { path: settingPath, from: logOldValue, to: logValue });
4897
+ }
4890
4898
  return getSettings();
4891
4899
  }
4892
4900
  function updateSettings(updates) {
@@ -4932,7 +4940,7 @@ function getNotificationSettings() {
4932
4940
  return DEFAULT_NOTIFICATION_SETTINGS;
4933
4941
  }
4934
4942
  return {
4935
- enabled: notifications.enabled ?? false,
4943
+ enabled: notifications.enabled ?? true,
4936
4944
  toast: { enabled: true, ...notifications.toast },
4937
4945
  desktop: { enabled: true, ...notifications.desktop },
4938
4946
  sound: { enabled: false, ...notifications.sound },
@@ -4965,6 +4973,31 @@ function updateNotificationSettings(updates) {
4965
4973
  };
4966
4974
  parsed.notifications = updated;
4967
4975
  fs2.writeFileSync(settingsPath, JSON.stringify(parsed, null, 2), "utf-8");
4976
+ const changes = {};
4977
+ if (updates.enabled !== undefined && updates.enabled !== current.enabled) {
4978
+ changes.enabled = { from: current.enabled, to: updates.enabled };
4979
+ }
4980
+ if (updates.toast?.enabled !== undefined && updates.toast.enabled !== current.toast.enabled) {
4981
+ changes["toast.enabled"] = { from: current.toast.enabled, to: updates.toast.enabled };
4982
+ }
4983
+ if (updates.desktop?.enabled !== undefined && updates.desktop.enabled !== current.desktop.enabled) {
4984
+ changes["desktop.enabled"] = { from: current.desktop.enabled, to: updates.desktop.enabled };
4985
+ }
4986
+ if (updates.sound?.enabled !== undefined && updates.sound.enabled !== current.sound.enabled) {
4987
+ changes["sound.enabled"] = { from: current.sound.enabled, to: updates.sound.enabled };
4988
+ }
4989
+ if (updates.slack?.enabled !== undefined && updates.slack.enabled !== current.slack.enabled) {
4990
+ changes["slack.enabled"] = { from: current.slack.enabled, to: updates.slack.enabled };
4991
+ }
4992
+ if (updates.discord?.enabled !== undefined && updates.discord.enabled !== current.discord.enabled) {
4993
+ changes["discord.enabled"] = { from: current.discord.enabled, to: updates.discord.enabled };
4994
+ }
4995
+ if (updates.pushover?.enabled !== undefined && updates.pushover.enabled !== current.pushover.enabled) {
4996
+ changes["pushover.enabled"] = { from: current.pushover.enabled, to: updates.pushover.enabled };
4997
+ }
4998
+ if (Object.keys(changes).length > 0) {
4999
+ log2.settings.info("Notification settings updated", { changes });
5000
+ }
4968
5001
  return updated;
4969
5002
  }
4970
5003
  function getClaudeSettingsPath() {
@@ -5705,7 +5738,7 @@ class DtachService {
5705
5738
  }
5706
5739
  getAttachCommand(terminalId) {
5707
5740
  const socketPath = this.getSocketPath(terminalId);
5708
- return ["dtach", "-a", socketPath, "-z"];
5741
+ return ["bash", "-c", `stty -echoctl && exec dtach -a ${socketPath} -z`];
5709
5742
  }
5710
5743
  killSession(terminalId) {
5711
5744
  const socketPath = this.getSocketPath(terminalId);
@@ -183352,7 +183385,7 @@ function createApp() {
183352
183385
  });
183353
183386
  if (process.env.VIBORA_PACKAGE_ROOT) {
183354
183387
  const distPath = getDistPath();
183355
- const serveFile = async (filePath) => {
183388
+ const serveFile = async (filePath, immutableCache = false) => {
183356
183389
  const ext2 = filePath.split(".").pop()?.toLowerCase();
183357
183390
  const mimeTypes2 = {
183358
183391
  html: "text/html",
@@ -183371,14 +183404,18 @@ function createApp() {
183371
183404
  ogg: "audio/ogg"
183372
183405
  };
183373
183406
  const content = await readFile7(filePath);
183407
+ const cacheControl = immutableCache ? "public, max-age=31536000, immutable" : "no-cache, must-revalidate";
183374
183408
  return new Response(content, {
183375
- headers: { "Content-Type": mimeTypes2[ext2 || ""] || "application/octet-stream" }
183409
+ headers: {
183410
+ "Content-Type": mimeTypes2[ext2 || ""] || "application/octet-stream",
183411
+ "Cache-Control": cacheControl
183412
+ }
183376
183413
  });
183377
183414
  };
183378
183415
  app21.get("/assets/*", async (c) => {
183379
183416
  const assetPath = join27(distPath, c.req.path);
183380
183417
  if (existsSync20(assetPath)) {
183381
- return serveFile(assetPath);
183418
+ return serveFile(assetPath, true);
183382
183419
  }
183383
183420
  return c.notFound();
183384
183421
  });
@@ -183405,7 +183442,9 @@ function createApp() {
183405
183442
  return next();
183406
183443
  }
183407
183444
  const html = await readFile7(join27(distPath, "index.html"), "utf-8");
183408
- return c.html(html);
183445
+ return c.html(html, {
183446
+ headers: { "Cache-Control": "no-cache, must-revalidate" }
183447
+ });
183409
183448
  });
183410
183449
  }
183411
183450
  return app21;