diff --git a/v2/src/lib/agent-dispatcher.ts b/v2/src/lib/agent-dispatcher.ts
index c15b67d..2908b97 100644
--- a/v2/src/lib/agent-dispatcher.ts
+++ b/v2/src/lib/agent-dispatcher.ts
@@ -31,6 +31,7 @@ import { extractWritePaths, extractWorktreePath } from './utils/tool-files';
import { hasAutoAnchored, markAutoAnchored, addAnchors, getAnchorSettings } from './stores/anchors.svelte';
import { selectAutoAnchors, serializeAnchorsForInjection } from './utils/anchor-serializer';
import type { SessionAnchor } from './types/anchors';
+import { getEnabledProjects } from './stores/workspace.svelte';
let unlistenMsg: (() => void) | null = null;
let unlistenExit: (() => void) | null = null;
@@ -418,7 +419,8 @@ function triggerAutoAnchor(
): void {
markAutoAnchored(projectId);
- const settings = getAnchorSettings(projectId);
+ const project = getEnabledProjects().find(p => p.id === projectId);
+ const settings = getAnchorSettings(project?.anchorBudgetScale);
const { turns, totalTokens } = selectAutoAnchors(
messages,
sessionPrompt,
diff --git a/v2/src/lib/components/Agent/AgentPane.svelte b/v2/src/lib/components/Agent/AgentPane.svelte
index 86eb61c..d949c55 100644
--- a/v2/src/lib/components/Agent/AgentPane.svelte
+++ b/v2/src/lib/components/Agent/AgentPane.svelte
@@ -14,7 +14,7 @@
import { getInjectableAnchors, getProjectAnchors, addAnchors, removeAnchor } from '../../stores/anchors.svelte';
import { estimateTokens } from '../../utils/anchor-serializer';
import type { SessionAnchor } from '../../types/anchors';
- import { notify } from '../../stores/notifications.svelte';
+
import AgentTree from './AgentTree.svelte';
import { getHighlighter, highlightCode, escapeHtml } from '../../utils/highlight';
import type {
@@ -171,12 +171,6 @@
if (anchors.length > 0) {
// Anchors store pre-serialized content — join them directly
systemPrompt = anchors.map(a => a.content).join('\n');
-
- // Warn if Ollama provider — default context windows (2K-4K) may be too small
- if (providerId === 'ollama') {
- const anchorTokens = anchors.reduce((sum, a) => sum + a.estimatedTokens, 0);
- notify('warning', `Ollama: injecting ~${anchorTokens} anchor tokens into system prompt. Ensure num_ctx >= 8192 to avoid truncation.`);
- }
}
}
diff --git a/v2/src/lib/components/Workspace/ContextTab.svelte b/v2/src/lib/components/Workspace/ContextTab.svelte
index 1535465..3f48de6 100644
--- a/v2/src/lib/components/Workspace/ContextTab.svelte
+++ b/v2/src/lib/components/Workspace/ContextTab.svelte
@@ -9,15 +9,16 @@
removeAnchor,
changeAnchorType,
} from '../../stores/anchors.svelte';
- import { DEFAULT_ANCHOR_SETTINGS, MAX_ANCHOR_TOKEN_BUDGET } from '../../types/anchors';
- import type { SessionAnchor, AnchorType } from '../../types/anchors';
+ import { ANCHOR_BUDGET_SCALE_MAP, MAX_ANCHOR_TOKEN_BUDGET } from '../../types/anchors';
+ import type { SessionAnchor, AnchorType, AnchorBudgetScale } from '../../types/anchors';
interface Props {
sessionId: string | null;
projectId?: string;
+ anchorBudgetScale?: AnchorBudgetScale;
}
- let { sessionId, projectId }: Props = $props();
+ let { sessionId, projectId, anchorBudgetScale }: Props = $props();
// Reactive session data
let session = $derived(sessionId ? getAgentSession(sessionId) : undefined);
@@ -193,7 +194,7 @@
let anchors = $derived(projectId ? getProjectAnchors(projectId) : []);
let injectableAnchors = $derived(projectId ? getInjectableAnchors(projectId) : []);
let anchorTokens = $derived(projectId ? getInjectableTokenCount(projectId) : 0);
- let anchorBudget = $derived(DEFAULT_ANCHOR_SETTINGS.anchorTokenBudget);
+ let anchorBudget = $derived(ANCHOR_BUDGET_SCALE_MAP[anchorBudgetScale ?? 'medium']);
let anchorBudgetPct = $derived(anchorBudget > 0 ? Math.min((anchorTokens / anchorBudget) * 100, 100) : 0);
function anchorTypeLabel(t: AnchorType): string {
diff --git a/v2/src/lib/components/Workspace/ProjectBox.svelte b/v2/src/lib/components/Workspace/ProjectBox.svelte
index 07ec3ec..03f4dd7 100644
--- a/v2/src/lib/components/Workspace/ProjectBox.svelte
+++ b/v2/src/lib/components/Workspace/ProjectBox.svelte
@@ -157,7 +157,7 @@