summaryrefslogtreecommitdiffhomepage
path: root/packages/frontend/tests
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-05-22 15:24:13 +0900
committerAdam Malczewski <[email protected]>2026-05-22 15:24:13 +0900
commit9ecaabd87c0e51b8a7408dabb0133a9344586859 (patch)
tree4b5809ab23948a5e3f558f3aa34c52d5038f4e19 /packages/frontend/tests
parent8f1dd855f0c4c877bff8d3a4ba193432b268b1c2 (diff)
downloaddispatch-9ecaabd87c0e51b8a7408dabb0133a9344586859.tar.gz
dispatch-9ecaabd87c0e51b8a7408dabb0133a9344586859.zip
feat: agent builder, CWD support, auto-save, UI polish, unavailable tool handling
- Agent Builder: full CRUD with card grid, drag-and-drop model reorder, edit/delete - Auto-save on edit with 600ms debounce, AbortController for concurrency, fieldset disabled until name entered - Agent definitions stored as TOML with cwd field, loaded from global/project dirs - Working directory: per-tab CWD override in Chat Settings, agent default CWD, auto-create on first message - CWD validation: check-dir endpoint with ~ expansion, real-time validity indicator - Subagent CWD validated against parent's effective CWD using path.relative - Unavailable tool calls: caught gracefully, shown as tool call with error badge, model retries - UI: tab bar border radius, sidebar border removed, chat input ghost style, scroll-to-bottom rectangle - Skills dir collapse uses CSS rotation, Model Choice renamed to Chat Settings, System Prompt view removed - Reusable SkillsBrowser/ToolPermissions with external mode for Agent Builder - ModelSelector: Agent/Manual toggle, agent list, Agent Settings link - Page router, skills recursive scanning, bin/up gopass removed, docker volume mounts
Diffstat (limited to 'packages/frontend/tests')
-rw-r--r--packages/frontend/tests/chat-store.test.ts32
1 files changed, 20 insertions, 12 deletions
diff --git a/packages/frontend/tests/chat-store.test.ts b/packages/frontend/tests/chat-store.test.ts
index a56ac13..978bce1 100644
--- a/packages/frontend/tests/chat-store.test.ts
+++ b/packages/frontend/tests/chat-store.test.ts
@@ -87,15 +87,15 @@ function createTestStore(wsSend?: (data: unknown) => void) {
ensureCurrentAssistantMessage();
messages = messages.map((m) => {
if (m.id === currentAssistantId) {
- const segments: ContentSegment[] = [
- ...m.content,
- {
- type: "tool-call",
- id: event.toolCall.id,
- name: event.toolCall.name,
- arguments: event.toolCall.arguments,
- },
- ];
+ const segments: ContentSegment[] = [
+ ...m.content,
+ {
+ type: "tool-call",
+ id: event.toolCall.id,
+ name: event.toolCall.name,
+ arguments: event.toolCall.arguments,
+ },
+ ];
return { ...m, content: segments };
}
return m;
@@ -109,7 +109,11 @@ function createTestStore(wsSend?: (data: unknown) => void) {
...m,
content: m.content.map((seg) => {
if (seg.type === "tool-call" && seg.id === event.toolResult.toolCallId) {
- return { ...seg, result: event.toolResult.result, isError: event.toolResult.isError };
+ return {
+ ...seg,
+ result: event.toolResult.result,
+ isError: event.toolResult.isError,
+ };
}
return seg;
}),
@@ -338,7 +342,9 @@ describe("chat store logic", () => {
it("error event adds an error message and sets status to error", () => {
store.handleEvent({ type: "error", error: "something went wrong" });
expect(store.messages).toHaveLength(1);
- expect(store.messages[0]?.content).toEqual([{ type: "text", text: "Error: something went wrong" }]);
+ expect(store.messages[0]?.content).toEqual([
+ { type: "text", text: "Error: something went wrong" },
+ ]);
expect(store.agentStatus).toBe("error");
});
@@ -529,7 +535,9 @@ describe("permission log", () => {
});
// Shell output parsing logic (mirrors ToolCallDisplay logic)
-function parseShellResult(result: string): { stdout: string; stderr: string; exitCode: number } | null {
+function parseShellResult(
+ result: string,
+): { stdout: string; stderr: string; exitCode: number } | null {
try {
const parsed = JSON.parse(result) as unknown;
if (