@cryptiklemur/lattice 1.44.2 → 1.45.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/client/src/components/chat/ChatView.tsx +18 -13
- package/client/src/components/dashboard/ProjectDashboardView.tsx +8 -1
- package/client/src/components/settings/GlobalPlugins.tsx +5 -1
- package/client/src/components/settings/GlobalSkills.tsx +5 -1
- package/client/src/hooks/useSession.ts +7 -0
- package/package.json +1 -1
- package/server/src/handlers/session.ts +10 -7
|
@@ -746,20 +746,25 @@ export function ChatView({ sessionId: tabSessionId, projectSlug: tabProjectSlug
|
|
|
746
746
|
</div>
|
|
747
747
|
)}
|
|
748
748
|
{messages.length === 0 && historyLoading ? (
|
|
749
|
-
<div className="
|
|
750
|
-
<div className="
|
|
751
|
-
<div className="
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
749
|
+
<div className="px-5 pt-6 space-y-4 animate-pulse">
|
|
750
|
+
<div className="chat chat-end">
|
|
751
|
+
<div className="chat-bubble bg-primary/10 border-0 w-48 h-10" />
|
|
752
|
+
</div>
|
|
753
|
+
<div className="chat chat-start">
|
|
754
|
+
<div className="chat-bubble bg-base-300/50 border-0 space-y-2 w-80">
|
|
755
|
+
<div className="h-2.5 bg-base-content/8 rounded w-full" />
|
|
756
|
+
<div className="h-2.5 bg-base-content/8 rounded w-3/4" />
|
|
757
|
+
<div className="h-2.5 bg-base-content/8 rounded w-5/6" />
|
|
758
|
+
</div>
|
|
759
|
+
</div>
|
|
760
|
+
<div className="chat chat-end">
|
|
761
|
+
<div className="chat-bubble bg-primary/10 border-0 w-56 h-10" />
|
|
762
|
+
</div>
|
|
763
|
+
<div className="chat chat-start">
|
|
764
|
+
<div className="chat-bubble bg-base-300/50 border-0 space-y-2 w-72">
|
|
765
|
+
<div className="h-2.5 bg-base-content/8 rounded w-full" />
|
|
766
|
+
<div className="h-2.5 bg-base-content/8 rounded w-2/3" />
|
|
761
767
|
</div>
|
|
762
|
-
<span className="text-[12px] text-base-content/30 font-mono">Loading session...</span>
|
|
763
768
|
</div>
|
|
764
769
|
</div>
|
|
765
770
|
) : messages.length === 0 ? (
|
|
@@ -105,7 +105,14 @@ export function ProjectDashboardView() {
|
|
|
105
105
|
</div>
|
|
106
106
|
|
|
107
107
|
{loading && (
|
|
108
|
-
<div className="
|
|
108
|
+
<div className="space-y-6 animate-pulse">
|
|
109
|
+
<div className="grid grid-cols-2 sm:grid-cols-4 gap-3">
|
|
110
|
+
{[0, 1, 2, 3].map(function (i) {
|
|
111
|
+
return <div key={i} className="bg-base-content/[0.03] rounded-xl p-3.5 h-20" />;
|
|
112
|
+
})}
|
|
113
|
+
</div>
|
|
114
|
+
<div className="bg-base-content/[0.03] rounded-xl h-32" />
|
|
115
|
+
</div>
|
|
109
116
|
)}
|
|
110
117
|
|
|
111
118
|
{!loading && settings && (
|
|
@@ -166,7 +166,11 @@ export function GlobalPlugins() {
|
|
|
166
166
|
}, [send]);
|
|
167
167
|
|
|
168
168
|
if (!loaded) {
|
|
169
|
-
return
|
|
169
|
+
return (
|
|
170
|
+
<div className="py-4 space-y-3 animate-pulse">
|
|
171
|
+
{[0, 1, 2].map(function (i) { return <div key={i} className="bg-base-content/[0.03] rounded-xl h-16" />; })}
|
|
172
|
+
</div>
|
|
173
|
+
);
|
|
170
174
|
}
|
|
171
175
|
|
|
172
176
|
return (
|
|
@@ -77,7 +77,11 @@ export function GlobalSkills() {
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
if (!loaded) {
|
|
80
|
-
return
|
|
80
|
+
return (
|
|
81
|
+
<div className="py-4 space-y-3 animate-pulse">
|
|
82
|
+
{[0, 1, 2].map(function (i) { return <div key={i} className="bg-base-content/[0.03] rounded-xl h-16" />; })}
|
|
83
|
+
</div>
|
|
84
|
+
);
|
|
81
85
|
}
|
|
82
86
|
|
|
83
87
|
return (
|
|
@@ -294,6 +294,13 @@ export function useSession(): UseSessionReturn {
|
|
|
294
294
|
|
|
295
295
|
function handleHistory(msg: ServerMessage) {
|
|
296
296
|
var m = msg as SessionHistoryMessage;
|
|
297
|
+
if (m.sessionId && m.messages && m.messages.length === 0 && m.title) {
|
|
298
|
+
updateSessionTabTitle(m.sessionId, m.title);
|
|
299
|
+
if (m.sessionId === getSessionStore().state.activeSessionId) {
|
|
300
|
+
getSessionStore().setState(function (s) { return { ...s, activeSessionTitle: m.title ?? s.activeSessionTitle }; });
|
|
301
|
+
}
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
297
304
|
setCurrentAssistantUuid(null);
|
|
298
305
|
if (m.sessionId) {
|
|
299
306
|
var projectSlug = m.projectSlug || getSessionStore().state.activeProjectSlug;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cryptiklemur/lattice",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.45.0",
|
|
4
4
|
"description": "Multi-machine agentic dashboard for Claude Code. Monitor sessions, manage MCP servers and skills, orchestrate across mesh-networked nodes.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Aaron Scherer <me@aaronscherer.me>",
|
|
@@ -107,13 +107,9 @@ registerHandler("session", function (clientId: string, message: ClientMessage) {
|
|
|
107
107
|
setActiveProject(clientId, activateMsg.projectSlug);
|
|
108
108
|
watchSessionLock(activateMsg.sessionId);
|
|
109
109
|
var activateT0 = Date.now();
|
|
110
|
-
void
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
]).then(function (results) {
|
|
114
|
-
log.session("session:activate history+title: %dms", Date.now() - activateT0);
|
|
115
|
-
var historyResult = results[0];
|
|
116
|
-
var title = results[1];
|
|
110
|
+
void loadSessionHistory(activateMsg.projectSlug, activateMsg.sessionId).then(function (historyResult) {
|
|
111
|
+
log.session("session:activate history: %dms", Date.now() - activateT0);
|
|
112
|
+
var title: string | null = null;
|
|
117
113
|
var interrupted = wasSessionInterrupted(activateMsg.sessionId);
|
|
118
114
|
if (interrupted) {
|
|
119
115
|
clearInterruptedFlag(activateMsg.sessionId);
|
|
@@ -137,6 +133,12 @@ registerHandler("session", function (clientId: string, message: ClientMessage) {
|
|
|
137
133
|
sendTo(clientId, { type: "chat:error", message: "Failed to load session history" });
|
|
138
134
|
});
|
|
139
135
|
|
|
136
|
+
setTimeout(function () {
|
|
137
|
+
void getSessionTitle(activateMsg.projectSlug, activateMsg.sessionId).then(function (sessionTitle) {
|
|
138
|
+
if (sessionTitle) {
|
|
139
|
+
sendTo(clientId, { type: "session:history", projectSlug: activateMsg.projectSlug, sessionId: activateMsg.sessionId, messages: [], title: sessionTitle });
|
|
140
|
+
}
|
|
141
|
+
}).catch(function () {});
|
|
140
142
|
void Promise.all([
|
|
141
143
|
getSessionUsage(activateMsg.projectSlug, activateMsg.sessionId).catch(function () { return null; }),
|
|
142
144
|
getContextBreakdown(activateMsg.projectSlug, activateMsg.sessionId).catch(function () { return null; }),
|
|
@@ -173,6 +175,7 @@ registerHandler("session", function (clientId: string, message: ClientMessage) {
|
|
|
173
175
|
log.session("Failed to activate session: %O", err);
|
|
174
176
|
sendTo(clientId, { type: "chat:error", message: "Failed to activate session" });
|
|
175
177
|
});
|
|
178
|
+
}, 50);
|
|
176
179
|
return;
|
|
177
180
|
}
|
|
178
181
|
|