@burdenoff/microfe-vibecontrols 2026.524.5 → 2026.524.6
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/components/agent-manager/AgentManagerInputArea.js +170 -164
- package/dist/components/agent-manager/AgentManagerInputArea.js.map +1 -1
- package/dist/components/agent-manager/controls/AutonomySelector.js +148 -0
- package/dist/components/agent-manager/controls/AutonomySelector.js.map +1 -0
- package/dist/components/agent-manager/dialogs/NewSessionDialog.js +1 -0
- package/dist/components/agent-manager/dialogs/NewSessionDialog.js.map +1 -1
- package/dist/hooks/useAgentManagerStreaming.js +13 -12
- package/dist/hooks/useAgentManagerStreaming.js.map +1 -1
- package/dist/services/aiApi.js +1 -0
- package/dist/services/aiApi.js.map +1 -1
- package/dist/store/agentManagerStore.js +24 -9
- package/dist/store/agentManagerStore.js.map +1 -1
- package/dist/translations/en.js +13 -0
- package/dist/translations/en.js.map +1 -1
- package/package.json +1 -1
|
@@ -8,15 +8,16 @@ import { SdkSelector as o } from "./controls/SdkSelector.js";
|
|
|
8
8
|
import { resolveProviderDefaultModel as s } from "./modelDefaults.js";
|
|
9
9
|
import { useVoiceMode as ee } from "../../hooks/useVoiceMode.js";
|
|
10
10
|
import { schedulePrompt as te } from "../../services/schedulerApi.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
11
|
+
import { AutonomySelector as ne } from "./controls/AutonomySelector.js";
|
|
12
|
+
import { McpServerSelector as re } from "./controls/McpServerSelector.js";
|
|
13
|
+
import { VoiceToggle as ie } from "./controls/VoiceToggle.js";
|
|
14
|
+
import { FileAttachButton as ae, createDropHandlers as oe } from "./controls/FileAttachButton.js";
|
|
15
|
+
import { ContextLevelToggle as se } from "./controls/ContextLevelToggle.js";
|
|
16
|
+
import { useCallback as c, useEffect as l, useMemo as u, useRef as d, useState as f } from "react";
|
|
16
17
|
import { ArrowUp as ce, ChevronDown as le, Clock as ue, Square as de, X as fe } from "lucide-react";
|
|
17
|
-
import { jsx as
|
|
18
|
+
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
18
19
|
//#region src/components/agent-manager/AgentManagerInputArea.tsx
|
|
19
|
-
var
|
|
20
|
+
var pe = [
|
|
20
21
|
{
|
|
21
22
|
command: "/new",
|
|
22
23
|
description: "Create new session"
|
|
@@ -54,7 +55,7 @@ var m = [
|
|
|
54
55
|
command: "/help",
|
|
55
56
|
description: "Show available commands"
|
|
56
57
|
}
|
|
57
|
-
],
|
|
58
|
+
], me = [
|
|
58
59
|
"claude",
|
|
59
60
|
"codex",
|
|
60
61
|
"gemini",
|
|
@@ -71,234 +72,239 @@ var m = [
|
|
|
71
72
|
"pi",
|
|
72
73
|
"aider",
|
|
73
74
|
"plandex"
|
|
74
|
-
],
|
|
75
|
-
function
|
|
76
|
-
let [
|
|
75
|
+
], h = ["sdk", "cli"];
|
|
76
|
+
function g({ agentId: g, sessionId: _, onSend: v, onCancel: he, mcpServers: ge = [], agentTunnelUrl: y, agentApiKey: b }) {
|
|
77
|
+
let [x, S] = f(""), [C, w] = f([]), [_e, T] = f(!1), [E, ve] = f(""), [D, O] = f(!1), [k, A] = f(!1), [j, M] = f(""), [ye, N] = f([]), P = e(), F = d(null), I = d(null);
|
|
77
78
|
l(() => {
|
|
78
|
-
|
|
79
|
+
F.current?.focus({ preventScroll: !0 });
|
|
79
80
|
}, []);
|
|
80
|
-
let
|
|
81
|
-
id:
|
|
82
|
-
profile:
|
|
83
|
-
}), [
|
|
81
|
+
let L = i((e) => e.sessionStates[_]), R = i((e) => e.setSessionModel), z = i((e) => e.setSessionSdk), B = i((e) => e.setSessionMode), be = i((e) => e.setSessionPermissionMode), xe = i((e) => e.toggleVoice), Se = i((e) => e.toggleThinking), Ce = i((e) => e.setSessionContextLevel), we = i((e) => e.setSessionVibe), Te = i((e) => e.setSessionRootPath), V = i((e) => e.openSession), H = i((e) => e.addMessage), { vibes: Ee, agents: U } = t(), { active: W } = n(u(() => U.find((e) => e.id === g) ?? null, [U, g])?.id ?? null), G = u(() => ({
|
|
82
|
+
id: g,
|
|
83
|
+
profile: W
|
|
84
|
+
}), [g, W]), { isListening: K, transcript: q, startListening: De, stopListening: Oe } = ee(), J = L?.status === "streaming", Y = x.trim().length > 0 && !J;
|
|
84
85
|
l(() => {
|
|
85
|
-
|
|
86
|
-
}, [
|
|
86
|
+
q && K && S((e) => e + (e ? " " : "") + q);
|
|
87
|
+
}, [q, K]), l(() => {
|
|
87
88
|
let e = !1;
|
|
88
|
-
return r(
|
|
89
|
-
e ||
|
|
89
|
+
return r(G).then((t) => {
|
|
90
|
+
e || N(t);
|
|
90
91
|
}).catch(() => {
|
|
91
|
-
e ||
|
|
92
|
+
e || N([]);
|
|
92
93
|
}), () => {
|
|
93
94
|
e = !0;
|
|
94
95
|
};
|
|
95
|
-
}, [
|
|
96
|
-
|
|
97
|
-
}, [
|
|
98
|
-
let
|
|
96
|
+
}, [G]), l(() => {
|
|
97
|
+
x.startsWith("/") && !x.includes(" ") ? (T(!0), ve(x.slice(1))) : T(!1);
|
|
98
|
+
}, [x]);
|
|
99
|
+
let X = u(() => pe.filter((e) => e.command.toLowerCase().includes(`/${E.toLowerCase()}`)), [E]);
|
|
99
100
|
l(() => {
|
|
100
|
-
let e =
|
|
101
|
+
let e = F.current;
|
|
101
102
|
e && (e.style.height = "auto", e.style.height = `${Math.min(e.scrollHeight, 200)}px`);
|
|
102
|
-
}, [
|
|
103
|
-
if (!
|
|
103
|
+
}, [x]), l(() => {
|
|
104
|
+
if (!D && !k) return;
|
|
104
105
|
let e = (e) => {
|
|
105
|
-
|
|
106
|
+
I.current && !I.current.contains(e.target) && (O(!1), A(!1));
|
|
106
107
|
};
|
|
107
108
|
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
108
|
-
}, [
|
|
109
|
+
}, [D, k]);
|
|
109
110
|
let Z = c((e) => {
|
|
110
|
-
|
|
111
|
+
H(_, {
|
|
111
112
|
id: `sys-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`,
|
|
112
113
|
role: "system",
|
|
113
114
|
content: e,
|
|
114
115
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
115
116
|
});
|
|
116
|
-
}, [
|
|
117
|
-
if (!(!
|
|
117
|
+
}, [H, _]), ke = c(async () => {
|
|
118
|
+
if (!(!x.trim() || !j || !y || !b)) try {
|
|
118
119
|
let e = await te({
|
|
119
|
-
sessionId:
|
|
120
|
-
agentTunnelUrl:
|
|
121
|
-
agentApiKey:
|
|
122
|
-
prompt:
|
|
123
|
-
scheduledAt: new Date(
|
|
120
|
+
sessionId: _,
|
|
121
|
+
agentTunnelUrl: y,
|
|
122
|
+
agentApiKey: b,
|
|
123
|
+
prompt: x.trim(),
|
|
124
|
+
scheduledAt: new Date(j).toISOString()
|
|
124
125
|
});
|
|
125
|
-
Z(`Prompt scheduled for ${new Date(e.scheduledAt).toLocaleString()} (Job: ${e.jobId.slice(0, 8)})`),
|
|
126
|
+
Z(`Prompt scheduled for ${new Date(e.scheduledAt).toLocaleString()} (Job: ${e.jobId.slice(0, 8)})`), S(""), M(""), A(!1), O(!1);
|
|
126
127
|
} catch (e) {
|
|
127
128
|
Z(`Failed to schedule: ${e instanceof Error ? e.message : "Unknown error"}`);
|
|
128
129
|
}
|
|
129
130
|
}, [
|
|
130
|
-
C,
|
|
131
|
-
M,
|
|
132
131
|
x,
|
|
133
|
-
|
|
134
|
-
|
|
132
|
+
j,
|
|
133
|
+
y,
|
|
134
|
+
b,
|
|
135
|
+
_,
|
|
135
136
|
Z
|
|
136
137
|
]), Q = c((e) => {
|
|
137
138
|
let t = e.trim().split(/\s+/), n = t[0].toLowerCase(), r = t.slice(1).join(" ");
|
|
138
139
|
switch (n) {
|
|
139
140
|
case "/new":
|
|
140
|
-
|
|
141
|
+
V(`session-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`);
|
|
141
142
|
break;
|
|
142
143
|
case "/rename":
|
|
143
144
|
Z(r ? `Session renamed to "${r}".` : "Usage: /rename <name>");
|
|
144
145
|
break;
|
|
145
146
|
case "/model":
|
|
146
|
-
r ? (
|
|
147
|
+
r ? (R(_, r), Z(`Model switched to "${r}".`)) : Z("Usage: /model <model-name>");
|
|
147
148
|
break;
|
|
148
149
|
case "/sdk":
|
|
149
|
-
if (r &&
|
|
150
|
+
if (r && me.includes(r)) {
|
|
150
151
|
let e = r;
|
|
151
|
-
|
|
152
|
-
} else Z(`Usage: /sdk <${
|
|
152
|
+
z(_, e), s(G, e, L?.model ?? "default").then((e) => R(_, e)).catch(() => R(_, L?.model ?? "default")), Z(`SDK switched to "${r}".`);
|
|
153
|
+
} else Z(`Usage: /sdk <${me.join("|")}>`);
|
|
153
154
|
break;
|
|
154
155
|
case "/mode":
|
|
155
|
-
r &&
|
|
156
|
+
r && h.includes(r) ? (B(_, r), Z(`Mode switched to "${r}".`)) : Z(`Usage: /mode <${h.join("|")}>`);
|
|
156
157
|
break;
|
|
157
158
|
case "/export": {
|
|
158
|
-
let e = r === "md" ? "md" : "json", t =
|
|
159
|
-
o.href = a, o.download = `conversation-${
|
|
159
|
+
let e = r === "md" ? "md" : "json", t = L?.messages ?? [], n = e === "json" ? JSON.stringify(t, null, 2) : t.map((e) => `**${e.role}** (${e.timestamp ?? ""}):\n${e.content ?? ""}`).join("\n\n---\n\n"), i = new Blob([n], { type: e === "json" ? "application/json" : "text/markdown" }), a = URL.createObjectURL(i), o = document.createElement("a");
|
|
160
|
+
o.href = a, o.download = `conversation-${_}.${e}`, o.click(), URL.revokeObjectURL(a), Z(`Conversation exported as ${e}.`);
|
|
160
161
|
break;
|
|
161
162
|
}
|
|
162
163
|
case "/clear":
|
|
163
164
|
Z("Conversation cleared.");
|
|
164
165
|
break;
|
|
165
166
|
case "/help":
|
|
166
|
-
Z(`Available commands:\n${
|
|
167
|
+
Z(`Available commands:\n${pe.map((e) => ` ${e.command}${e.args ? " " + e.args : ""} - ${e.description}`).join("\n")}`);
|
|
167
168
|
break;
|
|
168
169
|
default: Z(`Unknown command: ${n}. Type /help for available commands.`);
|
|
169
170
|
}
|
|
170
171
|
}, [
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
172
|
+
_,
|
|
173
|
+
L?.messages,
|
|
174
|
+
L?.model,
|
|
175
|
+
V,
|
|
176
|
+
R,
|
|
175
177
|
z,
|
|
176
178
|
B,
|
|
177
|
-
V,
|
|
178
179
|
Z,
|
|
179
|
-
|
|
180
|
-
]),
|
|
181
|
-
e.args ?
|
|
180
|
+
G
|
|
181
|
+
]), Ae = c((e) => {
|
|
182
|
+
e.args ? S(`${e.command} `) : (Q(e.command), S("")), T(!1), F.current?.focus();
|
|
182
183
|
}, [Q]), $ = c(() => {
|
|
183
|
-
if (!
|
|
184
|
-
let e =
|
|
184
|
+
if (!Y) return;
|
|
185
|
+
let e = x.trim();
|
|
185
186
|
if (e.startsWith("/")) {
|
|
186
|
-
Q(e),
|
|
187
|
+
Q(e), S(""), w([]);
|
|
187
188
|
return;
|
|
188
189
|
}
|
|
189
|
-
|
|
190
|
+
v(e, C.length > 0 ? C : void 0), S(""), w([]);
|
|
190
191
|
}, [
|
|
191
|
-
|
|
192
|
+
Y,
|
|
193
|
+
x,
|
|
192
194
|
C,
|
|
193
|
-
|
|
194
|
-
y,
|
|
195
|
+
v,
|
|
195
196
|
Q
|
|
196
|
-
]),
|
|
197
|
+
]), je = c((e) => {
|
|
197
198
|
e.key === "Enter" && !e.shiftKey && (e.preventDefault(), $());
|
|
198
|
-
}, [$]),
|
|
199
|
-
|
|
200
|
-
}, [
|
|
201
|
-
|
|
202
|
-
}, []),
|
|
203
|
-
|
|
204
|
-
}, []),
|
|
205
|
-
return
|
|
199
|
+
}, [$]), Me = c(() => {
|
|
200
|
+
he?.();
|
|
201
|
+
}, [he]), Ne = c((e) => {
|
|
202
|
+
w((t) => [...t, ...e]);
|
|
203
|
+
}, []), Pe = c((e) => {
|
|
204
|
+
w((t) => t.filter((t, n) => n !== e));
|
|
205
|
+
}, []), Fe = oe(Ne);
|
|
206
|
+
return L ? /* @__PURE__ */ m("div", {
|
|
206
207
|
className: "relative z-30 border-t border-border-default bg-bg-surface",
|
|
207
|
-
...
|
|
208
|
+
...Fe,
|
|
208
209
|
children: [
|
|
209
|
-
|
|
210
|
+
_e && X.length > 0 && /* @__PURE__ */ p("div", {
|
|
210
211
|
className: "absolute bottom-full left-0 right-0 mb-1 mx-3 bg-bg-elevated border border-border-default rounded-lg shadow-lg max-h-48 overflow-y-auto z-50",
|
|
211
|
-
children:
|
|
212
|
+
children: X.map((e) => /* @__PURE__ */ m("button", {
|
|
212
213
|
type: "button",
|
|
213
|
-
onClick: () =>
|
|
214
|
+
onClick: () => Ae(e),
|
|
214
215
|
className: "flex items-center gap-2 w-full px-3 py-2 text-left hover:bg-bg-sunken transition-colors",
|
|
215
216
|
children: [
|
|
216
|
-
/* @__PURE__ */
|
|
217
|
+
/* @__PURE__ */ p("span", {
|
|
217
218
|
className: "font-mono text-xs text-text-primary",
|
|
218
219
|
children: e.command
|
|
219
220
|
}),
|
|
220
|
-
e.args && /* @__PURE__ */
|
|
221
|
+
e.args && /* @__PURE__ */ p("span", {
|
|
221
222
|
className: "text-text-tertiary text-xs",
|
|
222
223
|
children: e.args
|
|
223
224
|
}),
|
|
224
|
-
/* @__PURE__ */
|
|
225
|
+
/* @__PURE__ */ p("span", {
|
|
225
226
|
className: "text-text-secondary text-xs ml-auto",
|
|
226
227
|
children: e.description
|
|
227
228
|
})
|
|
228
229
|
]
|
|
229
230
|
}, e.command))
|
|
230
231
|
}),
|
|
231
|
-
|
|
232
|
+
C.length > 0 && /* @__PURE__ */ p("div", {
|
|
232
233
|
className: "flex items-center gap-2 px-3 pt-2 overflow-x-auto",
|
|
233
|
-
children:
|
|
234
|
+
children: C.map((e, t) => /* @__PURE__ */ m("div", {
|
|
234
235
|
className: "flex items-center gap-1.5 px-2 py-1 rounded-md bg-bg-elevated border border-border-default text-xs text-text-secondary",
|
|
235
|
-
children: [/* @__PURE__ */
|
|
236
|
+
children: [/* @__PURE__ */ p("span", {
|
|
236
237
|
className: "truncate max-w-[120px]",
|
|
237
238
|
children: e.name
|
|
238
|
-
}), /* @__PURE__ */
|
|
239
|
+
}), /* @__PURE__ */ p("button", {
|
|
239
240
|
type: "button",
|
|
240
|
-
onClick: () =>
|
|
241
|
+
onClick: () => Pe(t),
|
|
241
242
|
className: "p-0.5 rounded hover:bg-bg-sunken transition-colors flex-shrink-0",
|
|
242
|
-
children: /* @__PURE__ */
|
|
243
|
+
children: /* @__PURE__ */ p(fe, { className: "w-3 h-3" })
|
|
243
244
|
})]
|
|
244
245
|
}, `${e.name}-${t}`))
|
|
245
246
|
}),
|
|
246
|
-
/* @__PURE__ */
|
|
247
|
+
/* @__PURE__ */ m("div", {
|
|
247
248
|
className: "flex flex-wrap items-center gap-1 px-3 pt-2 pb-1 overflow-x-auto",
|
|
248
249
|
children: [
|
|
249
|
-
/* @__PURE__ */
|
|
250
|
-
sdk:
|
|
251
|
-
mode:
|
|
252
|
-
providers:
|
|
250
|
+
/* @__PURE__ */ p(o, {
|
|
251
|
+
sdk: L.sdk,
|
|
252
|
+
mode: L.mode,
|
|
253
|
+
providers: ye,
|
|
253
254
|
onSdkChange: (e) => {
|
|
254
|
-
|
|
255
|
+
z(_, e), s(G, e, L.model ?? "default").then((e) => R(_, e)).catch(() => R(_, L.model ?? "default"));
|
|
255
256
|
},
|
|
256
|
-
onModeChange: (e) =>
|
|
257
|
+
onModeChange: (e) => B(_, e)
|
|
257
258
|
}),
|
|
258
|
-
/* @__PURE__ */
|
|
259
|
-
value:
|
|
260
|
-
onChange: (e) =>
|
|
261
|
-
provider:
|
|
262
|
-
agentId:
|
|
259
|
+
/* @__PURE__ */ p(a, {
|
|
260
|
+
value: L.model,
|
|
261
|
+
onChange: (e) => R(_, e),
|
|
262
|
+
provider: L.sdk,
|
|
263
|
+
agentId: g
|
|
263
264
|
}),
|
|
264
|
-
/* @__PURE__ */
|
|
265
|
-
|
|
266
|
-
|
|
265
|
+
/* @__PURE__ */ p(ne, {
|
|
266
|
+
value: L.permissionMode,
|
|
267
|
+
mode: L.mode,
|
|
268
|
+
onChange: (e) => be(_, e)
|
|
269
|
+
}),
|
|
270
|
+
/* @__PURE__ */ p(re, {
|
|
271
|
+
selected: L.mcpServers,
|
|
272
|
+
available: ge,
|
|
267
273
|
onChange: () => {}
|
|
268
274
|
}),
|
|
269
|
-
/* @__PURE__ */
|
|
275
|
+
/* @__PURE__ */ p(se, {
|
|
270
276
|
agentId: "",
|
|
271
|
-
sessionId:
|
|
272
|
-
contextLevel:
|
|
273
|
-
rootPath:
|
|
277
|
+
sessionId: _,
|
|
278
|
+
contextLevel: L.contextLevel,
|
|
279
|
+
rootPath: L.rootPath,
|
|
274
280
|
onChange: (e, t, n) => {
|
|
275
|
-
|
|
281
|
+
Ce(_, e), Te(_, t ?? null), we(_, n ?? null, t ?? null);
|
|
276
282
|
},
|
|
277
|
-
vibes:
|
|
283
|
+
vibes: Ee.map((e) => ({
|
|
278
284
|
id: e.id,
|
|
279
285
|
name: e.name,
|
|
280
286
|
path: e.path
|
|
281
287
|
}))
|
|
282
288
|
}),
|
|
283
|
-
/* @__PURE__ */
|
|
284
|
-
/* @__PURE__ */
|
|
289
|
+
/* @__PURE__ */ p("div", { className: "flex-1" }),
|
|
290
|
+
/* @__PURE__ */ p("button", {
|
|
285
291
|
type: "button",
|
|
286
|
-
onClick: () =>
|
|
287
|
-
className: `p-1.5 rounded text-xs font-medium transition-colors ${
|
|
288
|
-
title:
|
|
292
|
+
onClick: () => Se(_),
|
|
293
|
+
className: `p-1.5 rounded text-xs font-medium transition-colors ${L.showThinking ? "bg-action-primary-bg/10 text-action-primary-text" : "text-text-tertiary hover:text-text-secondary"}`,
|
|
294
|
+
title: L.showThinking ? P("vibecontrols.agentManager.inputArea.hideThinking", "Hide thinking") : P("vibecontrols.agentManager.inputArea.showThinking", "Show thinking"),
|
|
289
295
|
children: "Think"
|
|
290
296
|
}),
|
|
291
|
-
/* @__PURE__ */
|
|
297
|
+
/* @__PURE__ */ m("button", {
|
|
292
298
|
type: "button",
|
|
293
299
|
onClick: () => {
|
|
294
|
-
let e = window.prompt("Context history limit (messages sent with each prompt):", String(
|
|
300
|
+
let e = window.prompt("Context history limit (messages sent with each prompt):", String(L.contextHistoryLimit));
|
|
295
301
|
if (e !== null) {
|
|
296
302
|
let t = parseInt(e, 10);
|
|
297
303
|
if (!isNaN(t) && t >= 0) {
|
|
298
|
-
let e = i.getState().sessionStates[
|
|
304
|
+
let e = i.getState().sessionStates[_];
|
|
299
305
|
e && i.setState((n) => ({ sessionStates: {
|
|
300
306
|
...n.sessionStates,
|
|
301
|
-
[
|
|
307
|
+
[_]: {
|
|
302
308
|
...e,
|
|
303
309
|
contextHistoryLimit: t
|
|
304
310
|
}
|
|
@@ -307,84 +313,84 @@ function _({ agentId: _, sessionId: v, onSend: y, onCancel: b, mcpServers: pe =
|
|
|
307
313
|
}
|
|
308
314
|
},
|
|
309
315
|
className: "p-1.5 rounded text-[10px] font-mono text-text-tertiary hover:text-text-secondary transition-colors",
|
|
310
|
-
title: `Context history: last ${
|
|
311
|
-
children: ["H:",
|
|
316
|
+
title: `Context history: last ${L.contextHistoryLimit} messages sent with each prompt`,
|
|
317
|
+
children: ["H:", L.contextHistoryLimit]
|
|
312
318
|
}),
|
|
313
|
-
/* @__PURE__ */
|
|
314
|
-
enabled:
|
|
319
|
+
/* @__PURE__ */ p(ie, {
|
|
320
|
+
enabled: L.voiceEnabled,
|
|
315
321
|
onToggle: () => {
|
|
316
|
-
|
|
322
|
+
xe(_), L.voiceEnabled ? Oe() : De();
|
|
317
323
|
},
|
|
318
|
-
isListening:
|
|
324
|
+
isListening: K
|
|
319
325
|
}),
|
|
320
|
-
/* @__PURE__ */
|
|
326
|
+
/* @__PURE__ */ p(ae, { onFileSelect: Ne })
|
|
321
327
|
]
|
|
322
328
|
}),
|
|
323
|
-
/* @__PURE__ */
|
|
329
|
+
/* @__PURE__ */ m("div", {
|
|
324
330
|
className: "flex items-end gap-2 px-3 pb-3 pt-1",
|
|
325
|
-
children: [/* @__PURE__ */
|
|
326
|
-
ref:
|
|
327
|
-
value:
|
|
328
|
-
onChange: (e) =>
|
|
329
|
-
onKeyDown:
|
|
330
|
-
placeholder:
|
|
331
|
+
children: [/* @__PURE__ */ p("textarea", {
|
|
332
|
+
ref: F,
|
|
333
|
+
value: x,
|
|
334
|
+
onChange: (e) => S(e.target.value),
|
|
335
|
+
onKeyDown: je,
|
|
336
|
+
placeholder: P("vibecontrols.agentManager.inputArea.placeholder", "Type a message or / for commands... (Enter to send)"),
|
|
331
337
|
rows: 1,
|
|
332
338
|
className: "flex-1 resize-none rounded-lg border border-border-default bg-bg-primary px-3 py-2 text-sm text-text-primary placeholder:text-text-tertiary focus:outline-none focus:border-border-strong transition-colors",
|
|
333
|
-
disabled:
|
|
334
|
-
}),
|
|
339
|
+
disabled: J
|
|
340
|
+
}), J ? /* @__PURE__ */ p("button", {
|
|
335
341
|
type: "button",
|
|
336
|
-
onClick:
|
|
342
|
+
onClick: Me,
|
|
337
343
|
className: "flex-shrink-0 p-2 rounded-lg bg-status-error-bg text-status-error-text hover:opacity-90 transition-opacity",
|
|
338
|
-
title:
|
|
339
|
-
children: /* @__PURE__ */
|
|
340
|
-
}) : /* @__PURE__ */
|
|
344
|
+
title: P("vibecontrols.agentManager.inputArea.cancel", "Cancel"),
|
|
345
|
+
children: /* @__PURE__ */ p(de, { className: "w-4 h-4" })
|
|
346
|
+
}) : /* @__PURE__ */ m("div", {
|
|
341
347
|
className: "flex items-end flex-shrink-0 relative",
|
|
342
|
-
ref:
|
|
348
|
+
ref: I,
|
|
343
349
|
children: [
|
|
344
|
-
/* @__PURE__ */
|
|
350
|
+
/* @__PURE__ */ p("button", {
|
|
345
351
|
type: "button",
|
|
346
352
|
onClick: $,
|
|
347
|
-
disabled: !
|
|
353
|
+
disabled: !Y,
|
|
348
354
|
className: "p-2 rounded-l-lg bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover disabled:opacity-40 disabled:cursor-not-allowed transition-colors",
|
|
349
|
-
title:
|
|
350
|
-
children: /* @__PURE__ */
|
|
355
|
+
title: P("vibecontrols.agentManager.inputArea.send", "Send (Enter)"),
|
|
356
|
+
children: /* @__PURE__ */ p(ce, { className: "w-4 h-4" })
|
|
351
357
|
}),
|
|
352
|
-
/* @__PURE__ */
|
|
358
|
+
/* @__PURE__ */ p("button", {
|
|
353
359
|
type: "button",
|
|
354
|
-
onClick: () =>
|
|
355
|
-
disabled: !
|
|
360
|
+
onClick: () => O(!D),
|
|
361
|
+
disabled: !Y,
|
|
356
362
|
className: "ml-1 p-2 rounded-r-lg border-l border-action-primary-text/20 bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover disabled:opacity-40 disabled:cursor-not-allowed transition-colors",
|
|
357
|
-
title:
|
|
358
|
-
children: /* @__PURE__ */
|
|
363
|
+
title: P("vibecontrols.agentManager.inputArea.scheduleSend", "Schedule send"),
|
|
364
|
+
children: /* @__PURE__ */ p(le, { className: "w-3 h-3" })
|
|
359
365
|
}),
|
|
360
|
-
|
|
366
|
+
D && /* @__PURE__ */ p("div", {
|
|
361
367
|
className: "absolute bottom-full right-0 mb-1 w-56 bg-bg-surface border border-border-default rounded-md shadow-lg py-1 z-50",
|
|
362
|
-
children:
|
|
368
|
+
children: k ? /* @__PURE__ */ m("div", {
|
|
363
369
|
className: "px-3 py-2 space-y-2",
|
|
364
370
|
children: [
|
|
365
|
-
/* @__PURE__ */
|
|
371
|
+
/* @__PURE__ */ p("label", {
|
|
366
372
|
className: "block text-[11px] font-medium text-text-secondary",
|
|
367
|
-
children:
|
|
373
|
+
children: P("vibecontrols.agentManager.inputArea.sendAt", "Send at:")
|
|
368
374
|
}),
|
|
369
|
-
/* @__PURE__ */
|
|
375
|
+
/* @__PURE__ */ p("input", {
|
|
370
376
|
type: "datetime-local",
|
|
371
|
-
value:
|
|
372
|
-
onChange: (e) =>
|
|
377
|
+
value: j,
|
|
378
|
+
onChange: (e) => M(e.target.value),
|
|
373
379
|
className: "w-full px-2 py-1 text-xs rounded border border-border-default bg-bg-primary text-text-primary focus:outline-none focus:border-border-strong"
|
|
374
380
|
}),
|
|
375
|
-
/* @__PURE__ */
|
|
381
|
+
/* @__PURE__ */ p("button", {
|
|
376
382
|
type: "button",
|
|
377
|
-
onClick: () => void
|
|
378
|
-
disabled: !
|
|
383
|
+
onClick: () => void ke(),
|
|
384
|
+
disabled: !j || !y || !b,
|
|
379
385
|
className: "w-full px-2 py-1.5 text-xs font-medium rounded bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover disabled:opacity-40 disabled:cursor-not-allowed transition-colors",
|
|
380
|
-
children:
|
|
386
|
+
children: P("vibecontrols.agentManager.inputArea.schedule", "Schedule")
|
|
381
387
|
})
|
|
382
388
|
]
|
|
383
|
-
}) : /* @__PURE__ */
|
|
389
|
+
}) : /* @__PURE__ */ m("button", {
|
|
384
390
|
type: "button",
|
|
385
|
-
onClick: () =>
|
|
391
|
+
onClick: () => A(!0),
|
|
386
392
|
className: "flex items-center gap-2 w-full px-3 py-2 text-left text-xs text-text-primary hover:bg-bg-sunken transition-colors",
|
|
387
|
-
children: [/* @__PURE__ */
|
|
393
|
+
children: [/* @__PURE__ */ p(ue, { className: "w-3.5 h-3.5 text-text-secondary" }), P("vibecontrols.agentManager.inputArea.scheduleSendEllipsis", "Schedule Send...")]
|
|
388
394
|
})
|
|
389
395
|
})
|
|
390
396
|
]
|
|
@@ -394,6 +400,6 @@ function _({ agentId: _, sessionId: v, onSend: y, onCancel: b, mcpServers: pe =
|
|
|
394
400
|
}) : null;
|
|
395
401
|
}
|
|
396
402
|
//#endregion
|
|
397
|
-
export {
|
|
403
|
+
export { g as AgentManagerInputArea };
|
|
398
404
|
|
|
399
405
|
//# sourceMappingURL=AgentManagerInputArea.js.map
|