summaryrefslogtreecommitdiffhomepage
path: root/packages/frontend/src/lib
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-02 21:10:09 +0900
committerAdam Malczewski <[email protected]>2026-06-02 21:10:09 +0900
commitd9f53727845dface3e6d8a84ba2270b1de55482b (patch)
tree6d42f0a0fbda15057296992e78c4b4e12046f9ed /packages/frontend/src/lib
parent80212bfb009eaf71a4743310dee6ed08b8f7e1da (diff)
parent9d8cf7005ba4c0bb8ade0775f54c2557aa1c5683 (diff)
downloaddispatch-d9f53727845dface3e6d8a84ba2270b1de55482b.tar.gz
dispatch-d9f53727845dface3e6d8a84ba2270b1de55482b.zip
Merge branch 'dev' into feat/cs-code-search-tool
# Conflicts: # packages/api/src/agent-manager.ts # packages/api/tests/agent-manager.test.ts # packages/frontend/src/lib/components/ToolPermissions.svelte # packages/frontend/src/lib/settings.svelte.ts
Diffstat (limited to 'packages/frontend/src/lib')
-rw-r--r--packages/frontend/src/lib/components/TabBar.svelte15
-rw-r--r--packages/frontend/src/lib/components/ToolPermissions.svelte6
-rw-r--r--packages/frontend/src/lib/settings.svelte.ts2
3 files changed, 21 insertions, 2 deletions
diff --git a/packages/frontend/src/lib/components/TabBar.svelte b/packages/frontend/src/lib/components/TabBar.svelte
index 4fbe3b1..354260c 100644
--- a/packages/frontend/src/lib/components/TabBar.svelte
+++ b/packages/frontend/src/lib/components/TabBar.svelte
@@ -89,10 +89,11 @@ function handleRenameKeydown(e: KeyboardEvent): void {
class="tabs tabs-lift min-w-max"
ondblclick={(e) => { if (e.target === e.currentTarget) tabStore.createNewTab(); }}
>
- <!-- New tab button — always first -->
+ <!-- New tab button — sticky-pinned to the left edge so it stays reachable
+ at any horizontal scroll; opaque bg + right-side shadow as a floating cue. -->
<button
type="button"
- class="tab"
+ class="tab tab-active !sticky left-0 z-10 !rounded-ss-none !border-l-0 shadow-[2px_0_4px_-1px_rgba(0,0,0,0.2)]"
onclick={() => tabStore.createNewTab()}
aria-label="New tab"
>
@@ -152,6 +153,16 @@ function handleRenameKeydown(e: KeyboardEvent): void {
</button>
</div>
{/each}
+
+ <!-- Trailing padding after the last tab. Fills remaining space (big target),
+ shrinks to a small minimum when the bar overflows and scrolls.
+ Double-click anywhere in it to open a new tab. -->
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
+ <div
+ class="flex-1 min-w-12 self-stretch cursor-default"
+ ondblclick={() => tabStore.createNewTab()}
+ title="Double-click to open a new tab"
+ ></div>
</div>
</div>
diff --git a/packages/frontend/src/lib/components/ToolPermissions.svelte b/packages/frontend/src/lib/components/ToolPermissions.svelte
index db5055c..6b09a07 100644
--- a/packages/frontend/src/lib/components/ToolPermissions.svelte
+++ b/packages/frontend/src/lib/components/ToolPermissions.svelte
@@ -52,6 +52,12 @@ const toolPermissions: ToolPermission[] = [
label: "Search code",
description: "Allow the AI to search the codebase with the cs ranked code-search engine",
},
+ {
+ id: "lsp",
+ label: "LSP queries",
+ description:
+ "Allow the AI to query a language server for hover, go-to-definition, references, and more",
+ },
];
const {
diff --git a/packages/frontend/src/lib/settings.svelte.ts b/packages/frontend/src/lib/settings.svelte.ts
index 30361a7..0da4e45 100644
--- a/packages/frontend/src/lib/settings.svelte.ts
+++ b/packages/frontend/src/lib/settings.svelte.ts
@@ -15,6 +15,7 @@ let toolPerms = $state<Record<string, boolean>>({
web_search: false,
youtube_transcribe: false,
search_code: false,
+ lsp: false,
});
let savedToolPerms = $state<Record<string, boolean>>({
read: true,
@@ -28,6 +29,7 @@ let savedToolPerms = $state<Record<string, boolean>>({
web_search: false,
youtube_transcribe: false,
search_code: false,
+ lsp: false,
});
let skillChecks = $state<Record<string, boolean>>({});
let chunkLimit = $state(100);