clay-server 2.14.0-beta.2 → 2.14.0-beta.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.
package/lib/public/app.js CHANGED
@@ -809,6 +809,14 @@ import { initCommandPalette, handlePaletteSessionSwitch, setPaletteVersion } fro
809
809
  if (msg.type === "init" && msg.sessions) {
810
810
  renderMateSessionList(msg.sessions);
811
811
  requestKnowledgeList();
812
+ // Override title bar with mate name (not session/project title)
813
+ if (dmTargetUser && dmTargetUser.isMate) {
814
+ var mateDN = dmTargetUser.displayName || "New Mate";
815
+ if (headerTitleEl) headerTitleEl.textContent = mateDN;
816
+ var tbPN = document.getElementById("title-bar-project-name");
817
+ if (tbPN) tbPN.textContent = mateDN;
818
+ updatePageTitle();
819
+ }
812
820
  }
813
821
  if (msg.type === "session_list") {
814
822
  renderMateSessionList(msg.sessions || []);
@@ -1804,6 +1812,32 @@ import { initCommandPalette, handlePaletteSessionSwitch, setPaletteVersion } fro
1804
1812
  }
1805
1813
  }
1806
1814
 
1815
+ // --- Mate pre-thinking (instant dots before server responds) ---
1816
+ var matePreThinkingEl = null;
1817
+ function showMatePreThinking() {
1818
+ removeMatePreThinking();
1819
+ var mateName = dmTargetUser ? (dmTargetUser.displayName || "Mate") : "Mate";
1820
+ var mateAvatar = document.body.dataset.mateAvatarUrl || "";
1821
+ matePreThinkingEl = document.createElement("div");
1822
+ matePreThinkingEl.className = "thinking-item mate-thinking mate-pre-thinking";
1823
+ matePreThinkingEl.innerHTML =
1824
+ '<div class="mate-thinking-row" style="display:flex">' +
1825
+ '<img class="mate-thinking-avatar" src="' + escapeHtml(mateAvatar) + '" alt="">' +
1826
+ '<div class="mate-thinking-body">' +
1827
+ '<span class="mate-thinking-name">' + escapeHtml(mateName) + '</span>' +
1828
+ '<span class="mate-thinking-dots"><span></span><span></span><span></span></span>' +
1829
+ '</div>' +
1830
+ '</div>';
1831
+ addToMessages(matePreThinkingEl);
1832
+ scrollToBottom();
1833
+ }
1834
+ function removeMatePreThinking() {
1835
+ if (matePreThinkingEl) {
1836
+ matePreThinkingEl.remove();
1837
+ matePreThinkingEl = null;
1838
+ }
1839
+ }
1840
+
1807
1841
  // --- Config chip (model + mode + effort) ---
1808
1842
  var configChipWrap = $("config-chip-wrap");
1809
1843
  var configChip = $("config-chip");
@@ -3402,9 +3436,17 @@ import { initCommandPalette, handlePaletteSessionSwitch, setPaletteVersion } fro
3402
3436
  projectName = msg.project || msg.cwd;
3403
3437
  if (msg.slug) currentSlug = msg.slug;
3404
3438
  try { localStorage.setItem("clay-project-name-" + (currentSlug || "default"), projectName); } catch (e) {}
3405
- headerTitleEl.textContent = projectName;
3406
- var tbProjectName = $("title-bar-project-name");
3407
- if (tbProjectName) tbProjectName.textContent = msg.title || projectName;
3439
+ // In mate DM, keep title as mate name (not project/session title)
3440
+ if (dmMode && dmTargetUser && dmTargetUser.isMate) {
3441
+ var _mateDN = dmTargetUser.displayName || "New Mate";
3442
+ headerTitleEl.textContent = _mateDN;
3443
+ var tbProjectName = $("title-bar-project-name");
3444
+ if (tbProjectName) tbProjectName.textContent = _mateDN;
3445
+ } else {
3446
+ headerTitleEl.textContent = projectName;
3447
+ var tbProjectName = $("title-bar-project-name");
3448
+ if (tbProjectName) tbProjectName.textContent = msg.title || projectName;
3449
+ }
3408
3450
  updatePageTitle();
3409
3451
  if (msg.version) {
3410
3452
  setPaletteVersion(msg.version);
@@ -3691,6 +3733,7 @@ import { initCommandPalette, handlePaletteSessionSwitch, setPaletteVersion } fro
3691
3733
  break;
3692
3734
 
3693
3735
  case "thinking_start":
3736
+ removeMatePreThinking();
3694
3737
  startThinking();
3695
3738
  break;
3696
3739
 
@@ -3705,6 +3748,7 @@ import { initCommandPalette, handlePaletteSessionSwitch, setPaletteVersion } fro
3705
3748
 
3706
3749
  case "delta":
3707
3750
  if (typeof msg.text !== "string") break;
3751
+ removeMatePreThinking();
3708
3752
  stopThinking();
3709
3753
  resetThinkingGroup();
3710
3754
  setActivity(null);
@@ -3712,6 +3756,7 @@ import { initCommandPalette, handlePaletteSessionSwitch, setPaletteVersion } fro
3712
3756
  break;
3713
3757
 
3714
3758
  case "tool_start":
3759
+ removeMatePreThinking();
3715
3760
  stopThinking();
3716
3761
  markAllToolsDone();
3717
3762
  if (msg.name === "EnterPlanMode") {
@@ -4531,6 +4576,7 @@ import { initCommandPalette, handlePaletteSessionSwitch, setPaletteVersion } fro
4531
4576
  isMateDm: function () { return dmMode && dmTargetUser && dmTargetUser.isMate; },
4532
4577
  getMateName: function () { return dmTargetUser ? (dmTargetUser.displayName || "Mate") : "Mate"; },
4533
4578
  getMateAvatarUrl: function () { return document.body.dataset.mateAvatarUrl || ""; },
4579
+ showMatePreThinking: function () { showMatePreThinking(); },
4534
4580
  });
4535
4581
 
4536
4582
  // --- STT module (voice input via Web Speech API) ---
@@ -105,6 +105,11 @@ export function sendMessage() {
105
105
  }
106
106
  ctx.ws.send(JSON.stringify(payload));
107
107
 
108
+ // Mate DM: show pre-thinking dots immediately (before server responds)
109
+ if (ctx.isMateDm && ctx.isMateDm()) {
110
+ ctx.showMatePreThinking();
111
+ }
112
+
108
113
  ctx.inputEl.value = "";
109
114
  sendInputSync();
110
115
  clearPendingImages();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clay-server",
3
- "version": "2.14.0-beta.2",
3
+ "version": "2.14.0-beta.4",
4
4
  "description": "Web UI for Claude Code. Any device. Push notifications.",
5
5
  "bin": {
6
6
  "clay-server": "./bin/cli.js",