|
@@ -23,6 +23,8 @@ const toolCount = document.querySelector("#tool-count");
|
|
|
const chatConfigDialog = document.querySelector("#chat-config-dialog");
|
|
const chatConfigDialog = document.querySelector("#chat-config-dialog");
|
|
|
const eventConfigDialog = document.querySelector("#event-config-dialog");
|
|
const eventConfigDialog = document.querySelector("#event-config-dialog");
|
|
|
const auditDialog = document.querySelector("#audit-dialog");
|
|
const auditDialog = document.querySelector("#audit-dialog");
|
|
|
|
|
+const toolInvocationMode = document.querySelector("#tool-invocation-mode");
|
|
|
|
|
+const toolModeHelp = document.querySelector("#tool-mode-help");
|
|
|
const WORKSPACE_SNAPSHOTS_STORAGE_KEY = "agent-lab.workspace-snapshots.v1";
|
|
const WORKSPACE_SNAPSHOTS_STORAGE_KEY = "agent-lab.workspace-snapshots.v1";
|
|
|
const LEGACY_PROMPT_SETS_STORAGE_KEY = "agent-lab.prompt-sets.v1";
|
|
const LEGACY_PROMPT_SETS_STORAGE_KEY = "agent-lab.prompt-sets.v1";
|
|
|
|
|
|
|
@@ -79,6 +81,7 @@ bindClick("#select-all-tools", () => {
|
|
|
bindClick("#clear-tools", () => {
|
|
bindClick("#clear-tools", () => {
|
|
|
setAllTools(false);
|
|
setAllTools(false);
|
|
|
});
|
|
});
|
|
|
|
|
+toolInvocationMode.addEventListener("change", updateToolModeHelp);
|
|
|
|
|
|
|
|
chatForm.addEventListener("submit", (event) => {
|
|
chatForm.addEventListener("submit", (event) => {
|
|
|
event.preventDefault();
|
|
event.preventDefault();
|
|
@@ -86,6 +89,7 @@ chatForm.addEventListener("submit", (event) => {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
initializePromptList();
|
|
initializePromptList();
|
|
|
|
|
+updateToolModeHelp();
|
|
|
refreshWorkspaceSnapshotSelector();
|
|
refreshWorkspaceSnapshotSelector();
|
|
|
loadTools();
|
|
loadTools();
|
|
|
loadSessions({ preserveStatus: true });
|
|
loadSessions({ preserveStatus: true });
|
|
@@ -202,19 +206,18 @@ async function loadSelectedSession() {
|
|
|
|
|
|
|
|
async function loadSessionReplay(sessionId, options = {}) {
|
|
async function loadSessionReplay(sessionId, options = {}) {
|
|
|
try {
|
|
try {
|
|
|
- const [messages, audit, usage] = await Promise.all([
|
|
|
|
|
|
|
+ const [session, messages, audit, usage] = await Promise.all([
|
|
|
|
|
+ fetchJson(`/api/sessions/${sessionId}`),
|
|
|
fetchJson(`/api/sessions/${sessionId}/messages`),
|
|
fetchJson(`/api/sessions/${sessionId}/messages`),
|
|
|
fetchJson(`/api/sessions/${sessionId}/audit`),
|
|
fetchJson(`/api/sessions/${sessionId}/audit`),
|
|
|
fetchJson(`/api/sessions/${sessionId}/usage`),
|
|
fetchJson(`/api/sessions/${sessionId}/usage`),
|
|
|
]);
|
|
]);
|
|
|
|
|
+ restoreWorkspaceSnapshot(session.config || {});
|
|
|
renderReplayMessages(messages);
|
|
renderReplayMessages(messages);
|
|
|
renderAuditReplay(audit);
|
|
renderAuditReplay(audit);
|
|
|
renderSessionUsage(usage);
|
|
renderSessionUsage(usage);
|
|
|
- const session = sessions.find((item) => item.id === sessionId);
|
|
|
|
|
- if (session) {
|
|
|
|
|
- sessionTitle.value = session.title;
|
|
|
|
|
- sessionList.value = sessionId;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ sessionTitle.value = session.title;
|
|
|
|
|
+ sessionList.value = sessionId;
|
|
|
if (!options.preserveStatus && !isSocketOpen()) {
|
|
if (!options.preserveStatus && !isSocketOpen()) {
|
|
|
setSessionStatus("Session loaded");
|
|
setSessionStatus("Session loaded");
|
|
|
}
|
|
}
|
|
@@ -361,6 +364,7 @@ function deleteWorkspaceSnapshot() {
|
|
|
|
|
|
|
|
function buildWorkspaceSnapshot() {
|
|
function buildWorkspaceSnapshot() {
|
|
|
return {
|
|
return {
|
|
|
|
|
+ tool_invocation_mode: document.querySelector("#tool-invocation-mode").value,
|
|
|
prompt_items: buildPromptItems(),
|
|
prompt_items: buildPromptItems(),
|
|
|
system_prompts: buildCustomPromptItems()
|
|
system_prompts: buildCustomPromptItems()
|
|
|
.map((item) => item.content)
|
|
.map((item) => item.content)
|
|
@@ -386,11 +390,15 @@ function buildWorkspaceSnapshot() {
|
|
|
extra_body: buildExtraBody("event"),
|
|
extra_body: buildExtraBody("event"),
|
|
|
enabled_tools: selectedTools(),
|
|
enabled_tools: selectedTools(),
|
|
|
max_event_loops: Number(document.querySelector("#max-event-loops").value),
|
|
max_event_loops: Number(document.querySelector("#max-event-loops").value),
|
|
|
|
|
+ max_parallel_events: Number(document.querySelector("#max-parallel-events").value),
|
|
|
|
|
+ batch_timeout_seconds: Number(document.querySelector("#batch-timeout-seconds").value),
|
|
|
},
|
|
},
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function restoreWorkspaceSnapshot(snapshot) {
|
|
function restoreWorkspaceSnapshot(snapshot) {
|
|
|
|
|
+ document.querySelector("#tool-invocation-mode").value =
|
|
|
|
|
+ snapshot.tool_invocation_mode || "dual_agent";
|
|
|
restoreSystemPrompts(snapshot.prompt_items || snapshot.system_prompts || []);
|
|
restoreSystemPrompts(snapshot.prompt_items || snapshot.system_prompts || []);
|
|
|
restorePreMessages(snapshot.pre_messages || []);
|
|
restorePreMessages(snapshot.pre_messages || []);
|
|
|
|
|
|
|
@@ -407,9 +415,24 @@ function restoreWorkspaceSnapshot(snapshot) {
|
|
|
document.querySelector("#event-system-prompt").value = eventAgent.system_prompt || "";
|
|
document.querySelector("#event-system-prompt").value = eventAgent.system_prompt || "";
|
|
|
restoreExtraBody("event", eventAgent.extra_body);
|
|
restoreExtraBody("event", eventAgent.extra_body);
|
|
|
document.querySelector("#max-event-loops").value = eventAgent.max_event_loops ?? 1;
|
|
document.querySelector("#max-event-loops").value = eventAgent.max_event_loops ?? 1;
|
|
|
|
|
+ document.querySelector("#max-parallel-events").value =
|
|
|
|
|
+ eventAgent.max_parallel_events ?? 4;
|
|
|
|
|
+ document.querySelector("#batch-timeout-seconds").value =
|
|
|
|
|
+ eventAgent.batch_timeout_seconds ?? 15;
|
|
|
const enabledTools = eventAgent.enabled_tools || [];
|
|
const enabledTools = eventAgent.enabled_tools || [];
|
|
|
pendingEnabledTools = applySelectedTools(enabledTools) ? null : enabledTools;
|
|
pendingEnabledTools = applySelectedTools(enabledTools) ? null : enabledTools;
|
|
|
updateEventPromptItem(availableTools);
|
|
updateEventPromptItem(availableTools);
|
|
|
|
|
+ updateToolModeHelp();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function updateToolModeHelp() {
|
|
|
|
|
+ if (toolInvocationMode.value === "chat_agent_tools") {
|
|
|
|
|
+ toolModeHelp.textContent =
|
|
|
|
|
+ "ChatAgent Tools uses provider-resolved arguments. EventAgent model, temperature, max tokens, system prompt, and extra body are inactive; enabled tools, loop budget, batch concurrency, and timeout remain active.";
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ toolModeHelp.textContent =
|
|
|
|
|
+ "Dual Agent may use the EventAgent model, system prompt, and extra body for missing-argument fallback.";
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function buildExtraBody(prefix) {
|
|
function buildExtraBody(prefix) {
|
|
@@ -831,6 +854,7 @@ function buildRequest(submittedMessage = userMessage.value) {
|
|
|
return {
|
|
return {
|
|
|
session_id: currentSessionId || undefined,
|
|
session_id: currentSessionId || undefined,
|
|
|
user_message: submittedMessage,
|
|
user_message: submittedMessage,
|
|
|
|
|
+ tool_invocation_mode: document.querySelector("#tool-invocation-mode").value,
|
|
|
system_prompts: collectSystemPrompts(),
|
|
system_prompts: collectSystemPrompts(),
|
|
|
pre_messages: [...document.querySelectorAll(".pre-message")]
|
|
pre_messages: [...document.querySelectorAll(".pre-message")]
|
|
|
.map((row) => ({
|
|
.map((row) => ({
|
|
@@ -853,6 +877,8 @@ function buildRequest(submittedMessage = userMessage.value) {
|
|
|
extra_body: buildExtraBody("event"),
|
|
extra_body: buildExtraBody("event"),
|
|
|
enabled_tools: selectedTools(),
|
|
enabled_tools: selectedTools(),
|
|
|
max_event_loops: Number(document.querySelector("#max-event-loops").value),
|
|
max_event_loops: Number(document.querySelector("#max-event-loops").value),
|
|
|
|
|
+ max_parallel_events: Number(document.querySelector("#max-parallel-events").value),
|
|
|
|
|
+ batch_timeout_seconds: Number(document.querySelector("#batch-timeout-seconds").value),
|
|
|
},
|
|
},
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|