@delt/claude-alarm 0.6.21 → 0.6.23
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/dashboard/index.html +37 -0
- package/package.json +1 -1
- package/src/dashboard/index.html +37 -0
|
@@ -944,6 +944,40 @@
|
|
|
944
944
|
|
|
945
945
|
const $ = (sel) => document.querySelector(sel);
|
|
946
946
|
|
|
947
|
+
// --- Message persistence (localStorage, last 5 per session) ---
|
|
948
|
+
const MSG_STORAGE_KEY = 'claude-alarm-messages';
|
|
949
|
+
const MSG_LIMIT = 5;
|
|
950
|
+
|
|
951
|
+
function saveMessages() {
|
|
952
|
+
try {
|
|
953
|
+
const data = {};
|
|
954
|
+
for (const [sid, msgs] of Object.entries(state.messages)) {
|
|
955
|
+
if (msgs.length) {
|
|
956
|
+
// Exclude imageData to save localStorage space
|
|
957
|
+
data[sid] = msgs.slice(-MSG_LIMIT).map(m => {
|
|
958
|
+
if (m.imageData) return { ...m, imageData: null, imageName: m.imageName ? '[image] ' + m.imageName : null };
|
|
959
|
+
return m;
|
|
960
|
+
});
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
localStorage.setItem(MSG_STORAGE_KEY, JSON.stringify(data));
|
|
964
|
+
} catch {}
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
function loadMessages() {
|
|
968
|
+
try {
|
|
969
|
+
const raw = localStorage.getItem(MSG_STORAGE_KEY);
|
|
970
|
+
if (raw) {
|
|
971
|
+
const data = JSON.parse(raw);
|
|
972
|
+
for (const [sid, msgs] of Object.entries(data)) {
|
|
973
|
+
if (Array.isArray(msgs) && msgs.length) state.messages[sid] = msgs;
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
} catch {}
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
loadMessages();
|
|
980
|
+
|
|
947
981
|
// --- Theme ---
|
|
948
982
|
function initTheme() {
|
|
949
983
|
const saved = localStorage.getItem('claude-alarm-theme') || 'dark';
|
|
@@ -1039,6 +1073,7 @@
|
|
|
1039
1073
|
case 'reply_from_session':
|
|
1040
1074
|
if (!state.messages[msg.sessionId]) state.messages[msg.sessionId] = [];
|
|
1041
1075
|
state.messages[msg.sessionId].push({ from: 'session', content: msg.content, time: msg.timestamp });
|
|
1076
|
+
saveMessages();
|
|
1042
1077
|
state.waitingReply[msg.sessionId] = false;
|
|
1043
1078
|
if (state.selectedSession === msg.sessionId) { renderMessages(); }
|
|
1044
1079
|
else { state.unread[msg.sessionId] = (state.unread[msg.sessionId] || 0) + 1; renderSessions(); }
|
|
@@ -1118,6 +1153,7 @@
|
|
|
1118
1153
|
renderSessions();
|
|
1119
1154
|
renderMessages();
|
|
1120
1155
|
updateImageUI();
|
|
1156
|
+
$('#msgInput').focus();
|
|
1121
1157
|
}
|
|
1122
1158
|
|
|
1123
1159
|
function updateImageUI() {
|
|
@@ -1322,6 +1358,7 @@
|
|
|
1322
1358
|
imageName: hasImage ? state.pendingImage.name : null,
|
|
1323
1359
|
time: Date.now(),
|
|
1324
1360
|
});
|
|
1361
|
+
saveMessages();
|
|
1325
1362
|
|
|
1326
1363
|
input.value = '';
|
|
1327
1364
|
input.style.height = 'auto';
|
package/package.json
CHANGED
package/src/dashboard/index.html
CHANGED
|
@@ -944,6 +944,40 @@
|
|
|
944
944
|
|
|
945
945
|
const $ = (sel) => document.querySelector(sel);
|
|
946
946
|
|
|
947
|
+
// --- Message persistence (localStorage, last 5 per session) ---
|
|
948
|
+
const MSG_STORAGE_KEY = 'claude-alarm-messages';
|
|
949
|
+
const MSG_LIMIT = 5;
|
|
950
|
+
|
|
951
|
+
function saveMessages() {
|
|
952
|
+
try {
|
|
953
|
+
const data = {};
|
|
954
|
+
for (const [sid, msgs] of Object.entries(state.messages)) {
|
|
955
|
+
if (msgs.length) {
|
|
956
|
+
// Exclude imageData to save localStorage space
|
|
957
|
+
data[sid] = msgs.slice(-MSG_LIMIT).map(m => {
|
|
958
|
+
if (m.imageData) return { ...m, imageData: null, imageName: m.imageName ? '[image] ' + m.imageName : null };
|
|
959
|
+
return m;
|
|
960
|
+
});
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
localStorage.setItem(MSG_STORAGE_KEY, JSON.stringify(data));
|
|
964
|
+
} catch {}
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
function loadMessages() {
|
|
968
|
+
try {
|
|
969
|
+
const raw = localStorage.getItem(MSG_STORAGE_KEY);
|
|
970
|
+
if (raw) {
|
|
971
|
+
const data = JSON.parse(raw);
|
|
972
|
+
for (const [sid, msgs] of Object.entries(data)) {
|
|
973
|
+
if (Array.isArray(msgs) && msgs.length) state.messages[sid] = msgs;
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
} catch {}
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
loadMessages();
|
|
980
|
+
|
|
947
981
|
// --- Theme ---
|
|
948
982
|
function initTheme() {
|
|
949
983
|
const saved = localStorage.getItem('claude-alarm-theme') || 'dark';
|
|
@@ -1039,6 +1073,7 @@
|
|
|
1039
1073
|
case 'reply_from_session':
|
|
1040
1074
|
if (!state.messages[msg.sessionId]) state.messages[msg.sessionId] = [];
|
|
1041
1075
|
state.messages[msg.sessionId].push({ from: 'session', content: msg.content, time: msg.timestamp });
|
|
1076
|
+
saveMessages();
|
|
1042
1077
|
state.waitingReply[msg.sessionId] = false;
|
|
1043
1078
|
if (state.selectedSession === msg.sessionId) { renderMessages(); }
|
|
1044
1079
|
else { state.unread[msg.sessionId] = (state.unread[msg.sessionId] || 0) + 1; renderSessions(); }
|
|
@@ -1118,6 +1153,7 @@
|
|
|
1118
1153
|
renderSessions();
|
|
1119
1154
|
renderMessages();
|
|
1120
1155
|
updateImageUI();
|
|
1156
|
+
$('#msgInput').focus();
|
|
1121
1157
|
}
|
|
1122
1158
|
|
|
1123
1159
|
function updateImageUI() {
|
|
@@ -1322,6 +1358,7 @@
|
|
|
1322
1358
|
imageName: hasImage ? state.pendingImage.name : null,
|
|
1323
1359
|
time: Date.now(),
|
|
1324
1360
|
});
|
|
1361
|
+
saveMessages();
|
|
1325
1362
|
|
|
1326
1363
|
input.value = '';
|
|
1327
1364
|
input.style.height = 'auto';
|