groove-dev 0.26.11 → 0.26.12
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/node_modules/@groove-dev/gui/dist/assets/{index-DnYXpxao.js → index-DXZbQ5ga.js} +125 -125
- package/node_modules/@groove-dev/gui/dist/index.html +1 -1
- package/node_modules/@groove-dev/gui/src/components/agents/agent-chat.jsx +2 -1
- package/node_modules/@groove-dev/gui/src/components/agents/agent-feed.jsx +2 -1
- package/node_modules/@groove-dev/gui/src/stores/groove.js +17 -0
- package/package.json +1 -1
- package/packages/gui/dist/assets/{index-DnYXpxao.js → index-DXZbQ5ga.js} +125 -125
- package/packages/gui/dist/index.html +1 -1
- package/packages/gui/src/components/agents/agent-chat.jsx +2 -1
- package/packages/gui/src/components/agents/agent-feed.jsx +2 -1
- package/packages/gui/src/stores/groove.js +17 -0
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<link rel="icon" type="image/png" href="/favicon.png" />
|
|
7
7
|
<title>Groove GUI</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-DXZbQ5ga.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/vendor-C0HXlhrU.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/reactflow-BQPfi37R.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/codemirror-BBL3i_JW.js">
|
|
@@ -105,6 +105,7 @@ export function AgentChat({ agent }) {
|
|
|
105
105
|
const activityLog = useGrooveStore((s) => s.activityLog[agent.id]) || EMPTY;
|
|
106
106
|
const instructAgent = useGrooveStore((s) => s.instructAgent);
|
|
107
107
|
const queryAgent = useGrooveStore((s) => s.queryAgent);
|
|
108
|
+
const isThinking = useGrooveStore((s) => s.thinkingAgents?.has(agent.id));
|
|
108
109
|
|
|
109
110
|
const [input, setInput] = useState('');
|
|
110
111
|
const [sending, setSending] = useState(false);
|
|
@@ -188,7 +189,7 @@ export function AgentChat({ agent }) {
|
|
|
188
189
|
if (msg.from === 'system') return <SystemMessage key={msg.key || i} msg={msg} />;
|
|
189
190
|
return <AgentMessage key={msg.key || i} msg={msg} agent={agent} />;
|
|
190
191
|
})}
|
|
191
|
-
{sending && <TypingIndicator name={agent.name} />}
|
|
192
|
+
{(sending || isThinking) && <TypingIndicator name={agent.name} />}
|
|
192
193
|
</div>
|
|
193
194
|
|
|
194
195
|
{/* ── Input area ──────────────────────────────────── */}
|
|
@@ -470,6 +470,7 @@ export function AgentFeed({ agent }) {
|
|
|
470
470
|
const activityLog = useGrooveStore((s) => s.activityLog[agent.id]) || EMPTY;
|
|
471
471
|
const instructAgent = useGrooveStore((s) => s.instructAgent);
|
|
472
472
|
const queryAgent = useGrooveStore((s) => s.queryAgent);
|
|
473
|
+
const isThinking = useGrooveStore((s) => s.thinkingAgents?.has(agent.id));
|
|
473
474
|
|
|
474
475
|
const [input, setInput] = useState('');
|
|
475
476
|
const [mode, setMode] = useState('instruct'); // instruct | query
|
|
@@ -626,7 +627,7 @@ export function AgentFeed({ agent }) {
|
|
|
626
627
|
if (item.from === 'system') return <SystemMessage key={`msg-${i}`} msg={item} />;
|
|
627
628
|
return <AgentMessage key={`msg-${i}`} msg={item} agent={agent} />;
|
|
628
629
|
})}
|
|
629
|
-
{sending && (
|
|
630
|
+
{(sending || isThinking) && (
|
|
630
631
|
<div className="flex items-center gap-2 ml-7 py-2">
|
|
631
632
|
<div className="w-5 h-5 rounded-md bg-accent/12 flex items-center justify-center">
|
|
632
633
|
<Code2 size={10} className="text-accent" />
|
|
@@ -135,6 +135,15 @@ export const useGrooveStore = create((set, get) => ({
|
|
|
135
135
|
case 'agent:output': {
|
|
136
136
|
const { agentId, data } = msg;
|
|
137
137
|
|
|
138
|
+
// Clear thinking indicator when agent responds
|
|
139
|
+
if (get().thinkingAgents.has(agentId)) {
|
|
140
|
+
set((s) => {
|
|
141
|
+
const next = new Set(s.thinkingAgents);
|
|
142
|
+
next.delete(agentId);
|
|
143
|
+
return { thinkingAgents: next };
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
|
|
138
147
|
// Separate text content from tool calls
|
|
139
148
|
let chatText = '';
|
|
140
149
|
let activityText = '';
|
|
@@ -596,6 +605,9 @@ export const useGrooveStore = create((set, get) => ({
|
|
|
596
605
|
});
|
|
597
606
|
},
|
|
598
607
|
|
|
608
|
+
// Track which agents are thinking (sent a message, waiting for response)
|
|
609
|
+
thinkingAgents: new Set(),
|
|
610
|
+
|
|
599
611
|
async instructAgent(id, message) {
|
|
600
612
|
const agent = get().agents.find((a) => a.id === id);
|
|
601
613
|
const isAlive = agent && (agent.status === 'running' || agent.status === 'starting');
|
|
@@ -605,6 +617,11 @@ export const useGrooveStore = create((set, get) => ({
|
|
|
605
617
|
get().addChatMessage(id, 'user', message, false);
|
|
606
618
|
try {
|
|
607
619
|
const data = await api.post(`/agents/${id}/query`, { message });
|
|
620
|
+
// Agent loop agents: response comes via WebSocket, show thinking indicator
|
|
621
|
+
if (data.status === 'pending' || data.response === 'Message sent to agent') {
|
|
622
|
+
set((s) => ({ thinkingAgents: new Set([...s.thinkingAgents, id]) }));
|
|
623
|
+
return data;
|
|
624
|
+
}
|
|
608
625
|
get().addChatMessage(id, 'agent', data.response);
|
|
609
626
|
return data;
|
|
610
627
|
} catch (err) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "groove-dev",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.12",
|
|
4
4
|
"description": "Open-source agent orchestration layer — the AI company OS. Local model agent engine (GGUF/Ollama/llama-server), HuggingFace model browser, MCP integrations (Slack, Gmail, Stripe, 15+), agent scheduling (cron), business roles (CMO, CFO, EA). GUI dashboard, multi-agent coordination, zero cold-start, infinite sessions. Works with Claude Code, Codex, Gemini CLI, Ollama, any local model.",
|
|
5
5
|
"license": "FSL-1.1-Apache-2.0",
|
|
6
6
|
"author": "Groove Dev <hello@groovedev.ai> (https://groovedev.ai)",
|