-
+
Classic Agent
@@ -71,13 +71,13 @@ export default function AgentTypeModal({
handleSelect('workflow')}
- className="hover:border-violets-are-blue hover:bg-violets-are-blue/5 dark:hover:border-violets-are-blue dark:hover:bg-violets-are-blue/10 group flex items-start gap-5 rounded-xl border-2 border-gray-200 p-5 text-left transition-all dark:border-[#2E2F34]"
+ className="hover:border-primary hover:bg-primary/5 dark:hover:border-primary dark:hover:bg-primary/10 group dark:border-border flex items-start gap-5 rounded-xl border-2 border-gray-200 p-5 text-left transition-all"
>
-
+
-
+
Workflow Agent
diff --git a/frontend/src/agents/index.tsx b/frontend/src/agents/index.tsx
index 64481985..988345ad 100644
--- a/frontend/src/agents/index.tsx
+++ b/frontend/src/agents/index.tsx
@@ -18,4 +18,4 @@ export default function Agents() {
} />
);
-}
\ No newline at end of file
+}
diff --git a/frontend/src/agents/types/workflow.ts b/frontend/src/agents/types/workflow.ts
index 8615714a..0557bfb6 100644
--- a/frontend/src/agents/types/workflow.ts
+++ b/frontend/src/agents/types/workflow.ts
@@ -1,4 +1,10 @@
-export type NodeType = 'start' | 'end' | 'agent' | 'note' | 'state' | 'condition';
+export type NodeType =
+ | 'start'
+ | 'end'
+ | 'agent'
+ | 'note'
+ | 'state'
+ | 'condition';
export interface ConditionCase {
name?: string;
diff --git a/frontend/src/agents/workflow/WorkflowBuilder.tsx b/frontend/src/agents/workflow/WorkflowBuilder.tsx
index ad4fec28..00681017 100644
--- a/frontend/src/agents/workflow/WorkflowBuilder.tsx
+++ b/frontend/src/agents/workflow/WorkflowBuilder.tsx
@@ -2,13 +2,13 @@ import 'reactflow/dist/style.css';
import {
AlertCircle,
- ChartColumn,
Bot,
+ ChartColumn,
Database,
Flag,
GitBranch,
- Loader2,
Link,
+ Loader2,
Pencil,
Play,
Plus,
@@ -1355,12 +1355,12 @@ function WorkflowBuilderInner() {
return (
<>
-
-
+
+
@@ -1390,7 +1390,7 @@ function WorkflowBuilderInner() {
{showWorkflowSettings && (
@@ -1400,7 +1400,7 @@ function WorkflowBuilderInner() {
type="text"
value={workflowName}
onChange={(e) => setWorkflowName(e.target.value)}
- className="focus:ring-purple-30 w-full rounded-lg border border-[#E5E5E5] bg-white px-3 py-2 text-sm outline-none focus:ring-2 dark:border-[#3A3A3A] dark:bg-[#2C2C2C] dark:text-white"
+ className="focus:ring-ring border-border bg-card w-full rounded-lg border px-3 py-2 text-sm outline-none focus:ring-2 dark:text-white"
placeholder="Enter workflow name"
/>
@@ -1411,7 +1411,7 @@ function WorkflowBuilderInner() {
Done
@@ -1468,7 +1468,7 @@ function WorkflowBuilderInner() {
setShowWorkflowSettings((prev) => !prev)}
- className="flex items-center gap-2 rounded-full border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-50 dark:border-[#3A3A3A] dark:bg-[#2C2C2C] dark:text-gray-200 dark:hover:bg-[#383838]"
+ className="border-border bg-card hover:bg-accent flex items-center gap-2 rounded-full border px-4 py-2 text-sm font-medium text-gray-700 transition-colors dark:text-gray-200"
>
Details
@@ -1476,7 +1476,7 @@ function WorkflowBuilderInner() {
{canManageAgent && (
navigate(`/agents/logs/${effectiveAgentId}`)}
- className="flex items-center gap-2 rounded-full border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-50 dark:border-[#3A3A3A] dark:bg-[#2C2C2C] dark:text-gray-200 dark:hover:bg-[#383838]"
+ className="border-border bg-card hover:bg-accent flex items-center gap-2 rounded-full border px-4 py-2 text-sm font-medium text-gray-700 transition-colors dark:text-gray-200"
>
Logs
@@ -1485,7 +1485,7 @@ function WorkflowBuilderInner() {
{canManageAgent && (
setAgentDetails('ACTIVE')}
- className="flex items-center gap-2 rounded-full border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-50 dark:border-[#3A3A3A] dark:bg-[#2C2C2C] dark:text-gray-200 dark:hover:bg-[#383838]"
+ className="border-border bg-card hover:bg-accent flex items-center gap-2 rounded-full border px-4 py-2 text-sm font-medium text-gray-700 transition-colors dark:text-gray-200"
>
Access Details
@@ -1495,7 +1495,7 @@ function WorkflowBuilderInner() {
setDeleteConfirmation('ACTIVE')}
disabled={isDeletingAgent}
- className="flex items-center gap-2 rounded-full border border-red-200 bg-white px-4 py-2 text-sm font-medium text-red-600 transition-colors hover:bg-red-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-red-900/30 dark:bg-[#2C2C2C] dark:text-red-400 dark:hover:bg-red-900/10"
+ className="bg-card flex items-center gap-2 rounded-full border border-red-200 px-4 py-2 text-sm font-medium text-red-600 transition-colors hover:bg-red-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-red-900/30 dark:text-red-400 dark:hover:bg-red-900/10"
>
{isDeletingAgent ? 'Deleting...' : 'Delete'}
@@ -1511,7 +1511,7 @@ function WorkflowBuilderInner() {
}
setShowPreview(true);
}}
- className="flex items-center gap-2 rounded-full border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-50 dark:border-[#3A3A3A] dark:bg-[#2C2C2C] dark:text-gray-200 dark:hover:bg-[#383838]"
+ className="border-border bg-card hover:bg-accent flex items-center gap-2 rounded-full border px-4 py-2 text-sm font-medium text-gray-700 transition-colors dark:text-gray-200"
>
Preview
@@ -1521,8 +1521,8 @@ function WorkflowBuilderInner() {
disabled={isPrimaryActionDisabled}
className={`relative inline-flex items-center justify-center rounded-full px-6 py-2 text-sm font-medium shadow-sm transition-colors disabled:cursor-not-allowed ${
canManageAgent && !hasSavableChanges
- ? 'bg-gray-200 text-gray-500 dark:bg-[#3A3A3A] dark:text-gray-400'
- : 'bg-violets-are-blue hover:bg-purple-30 text-white disabled:opacity-50'
+ ? 'dark:bg-accent bg-gray-200 text-gray-500 dark:text-gray-400'
+ : 'bg-primary hover:bg-primary/90 text-white disabled:opacity-50'
}`}
>
-
+
Core Nodes
handleNodeDragStart(e, 'agent')}
>
-
+
@@ -1590,7 +1590,7 @@ function WorkflowBuilderInner() {
handleNodeDragStart(e, 'end')}
>
@@ -1602,7 +1602,7 @@ function WorkflowBuilderInner() {
handleNodeDragStart(e, 'note')}
>
@@ -1622,7 +1622,7 @@ function WorkflowBuilderInner() {
handleNodeDragStart(e, 'state')}
>
@@ -1630,16 +1630,16 @@ function WorkflowBuilderInner() {
-
+
Set State
-
+
Modify workflow variables
handleNodeDragStart(e, 'condition')}
>
@@ -1647,10 +1647,10 @@ function WorkflowBuilderInner() {
-
+
If / Else
-
+
Conditional branching
@@ -1661,7 +1661,7 @@ function WorkflowBuilderInner() {
-
-
+
+
{selectedNode.type === 'start' && 'Start Node'}
{selectedNode.type === 'end' && 'End Node'}
@@ -1707,7 +1707,7 @@ function WorkflowBuilderInner() {
-
+
Node ID
@@ -1736,7 +1736,7 @@ function WorkflowBuilderInner() {
label: e.target.value,
})
}
- className="border-light-silver focus:ring-purple-30 w-full rounded-xl border bg-white px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:border-[#3A3A3A] dark:bg-[#2C2C2C] dark:text-white"
+ className="border-border focus:ring-ring bg-card w-full rounded-xl border px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:text-white"
placeholder="Enter node title"
/>
@@ -1833,7 +1833,7 @@ function WorkflowBuilderInner() {
},
})
}
- className="border-light-silver focus:ring-purple-30 w-full rounded-xl border bg-white px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:border-[#3A3A3A] dark:bg-[#2C2C2C] dark:text-white"
+ className="border-border focus:ring-ring bg-card w-full rounded-xl border px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:text-white"
rows={3}
placeholder="System prompt for the agent"
/>
@@ -1876,7 +1876,7 @@ function WorkflowBuilderInner() {
},
});
}}
- className="border-light-silver focus:ring-purple-30 w-full rounded-xl border bg-white px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:border-[#3A3A3A] dark:bg-[#2C2C2C] dark:text-white"
+ className="border-border focus:ring-ring bg-card w-full rounded-xl border px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:text-white"
placeholder="Variable name for output"
/>
@@ -1969,7 +1969,7 @@ function WorkflowBuilderInner() {
e.target.value,
)
}
- className="border-light-silver focus:ring-purple-30 w-full rounded-xl border bg-white px-3 py-2 font-mono text-xs transition-all outline-none focus:ring-2 dark:border-[#3A3A3A] dark:bg-[#2C2C2C] dark:text-white"
+ className="border-border focus:ring-ring bg-card w-full rounded-xl border px-3 py-2 font-mono text-xs transition-all outline-none focus:ring-2 dark:text-white"
rows={8}
placeholder={`{
"type": "object",
@@ -2009,7 +2009,7 @@ function WorkflowBuilderInner() {
content: e.target.value,
})
}
- className="border-light-silver focus:ring-purple-30 w-full rounded-xl border bg-white px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:border-[#3A3A3A] dark:bg-[#2C2C2C] dark:text-white"
+ className="border-border focus:ring-ring bg-card w-full rounded-xl border px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:text-white"
rows={4}
placeholder="Enter note content"
/>
@@ -2034,7 +2034,7 @@ function WorkflowBuilderInner() {
) => (
@@ -2084,18 +2084,18 @@ function WorkflowBuilderInner() {
},
});
}}
- className="border-light-silver focus:ring-purple-30 mb-1 w-full rounded-xl border bg-white px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:border-[#3A3A3A] dark:bg-[#383838] dark:text-white"
+ className="border-border focus:ring-ring bg-card dark:bg-accent mb-1 w-full rounded-xl border px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:text-white"
rows={2}
placeholder="input.foo + 1"
/>
-
+
Use Common Expression Language to create
a custom expression.{' '}
Learn more
@@ -2124,7 +2124,7 @@ function WorkflowBuilderInner() {
},
});
}}
- className="border-light-silver focus:ring-purple-30 w-full rounded-xl border bg-white px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:border-[#3A3A3A] dark:bg-[#383838] dark:text-white"
+ className="border-border focus:ring-ring bg-card dark:bg-accent w-full rounded-xl border px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:text-white"
placeholder="variable_name"
/>
@@ -2145,7 +2145,7 @@ function WorkflowBuilderInner() {
},
});
}}
- className="flex items-center gap-1 rounded-lg px-3 py-1.5 text-sm font-medium text-gray-600 transition-colors hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-[#383838]"
+ className="hover:bg-accent flex items-center gap-1 rounded-lg px-3 py-1.5 text-sm font-medium text-gray-600 transition-colors dark:text-gray-400"
>
Add
@@ -2158,7 +2158,7 @@ function WorkflowBuilderInner() {
Create conditions to branch your workflow
-
+
handleUpdateNodeData({
@@ -2171,8 +2171,8 @@ function WorkflowBuilderInner() {
className={`flex-1 px-3 py-1.5 text-xs font-medium transition-colors ${
(selectedNode.data.config?.mode ||
'simple') === 'simple'
- ? 'bg-violets-are-blue text-white'
- : 'text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-[#383838]'
+ ? 'bg-primary text-white'
+ : 'hover:bg-accent text-gray-600 dark:text-gray-400'
}`}
>
Simple
@@ -2189,8 +2189,8 @@ function WorkflowBuilderInner() {
className={`flex-1 px-3 py-1.5 text-xs font-medium transition-colors ${
selectedNode.data.config?.mode ===
'advanced'
- ? 'bg-violets-are-blue text-white'
- : 'text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-[#383838]'
+ ? 'bg-primary text-white'
+ : 'hover:bg-accent text-gray-600 dark:text-gray-400'
}`}
>
Advanced
@@ -2201,7 +2201,7 @@ function WorkflowBuilderInner() {
(c: ConditionCase, idx: number) => (
@@ -2266,7 +2266,7 @@ function WorkflowBuilderInner() {
},
});
}}
- className="border-light-silver focus:ring-purple-30 mb-2 w-full rounded-xl border bg-white px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:border-[#3A3A3A] dark:bg-[#383838] dark:text-white"
+ className="border-border focus:ring-ring bg-card dark:bg-accent mb-2 w-full rounded-xl border px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:text-white"
placeholder="Case name (optional)"
/>
{(selectedNode.data.config?.mode ||
@@ -2302,7 +2302,7 @@ function WorkflowBuilderInner() {
},
});
}}
- className="border-light-silver focus:ring-purple-30 w-full rounded-xl border bg-white px-3 py-2 text-sm outline-none focus:ring-2 dark:border-[#3A3A3A] dark:bg-[#383838] dark:text-white"
+ className="border-border focus:ring-ring bg-card dark:bg-accent w-full rounded-xl border px-3 py-2 text-sm outline-none focus:ring-2 dark:text-white"
placeholder="Variable"
/>
@@ -2419,18 +2419,18 @@ function WorkflowBuilderInner() {
},
});
}}
- className="border-light-silver focus:ring-purple-30 w-full rounded-xl border bg-white px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:border-[#3A3A3A] dark:bg-[#383838] dark:text-white"
+ className="border-border focus:ring-ring bg-card dark:bg-accent w-full rounded-xl border px-3 py-2 text-sm transition-all outline-none focus:ring-2 dark:text-white"
rows={2}
placeholder="Enter condition, e.g. input == 5"
/>
-
+
Use Common Expression Language to
create a custom expression.{' '}
Learn more
@@ -2461,7 +2461,7 @@ function WorkflowBuilderInner() {
},
});
}}
- className="flex items-center gap-1 rounded-lg px-3 py-1.5 text-sm font-medium text-gray-600 transition-colors hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-[#383838]"
+ className="hover:bg-accent flex items-center gap-1 rounded-lg px-3 py-1.5 text-sm font-medium text-gray-600 transition-colors dark:text-gray-400"
>
Add
@@ -2493,7 +2493,7 @@ function WorkflowBuilderInner() {
{
if (el && stepRefs) stepRefs.current.set(step.nodeId, el);
}}
- className="rounded-xl bg-[#F5F5F5] p-3 dark:bg-[#383838]"
+ className="bg-muted dark:bg-accent rounded-xl p-3"
>
@@ -181,7 +181,7 @@ function ExecutionDetails({
{(hasOutput || step.error || stateVars.length > 0) && (
{hasOutput && (
-
+
Output:{' '}
@@ -205,7 +205,7 @@ function ExecutionDetails({
{stateVars.map(([key, value]) => (
{key}:
@@ -487,10 +487,10 @@ export default function WorkflowPreview({
queries.length > 0 ? queries[queries.length - 1].executionSteps || [] : [];
return (
-
-
+
+
-
+
@@ -504,7 +504,7 @@ export default function WorkflowPreview({
{status === 'loading' && (
-
+
Running
@@ -512,7 +512,7 @@ export default function WorkflowPreview({
-
+
Workflow
@@ -537,7 +537,7 @@ export default function WorkflowPreview({
>
{queries.length === 0 ? (
-
+
@@ -618,7 +618,7 @@ export default function WorkflowPreview({
)}
-
+
handleQuestionSubmission(text)}
loading={status === 'loading'}
diff --git a/frontend/src/agents/workflow/components/MobileBlocker.tsx b/frontend/src/agents/workflow/components/MobileBlocker.tsx
index 0d941482..92e8d19e 100644
--- a/frontend/src/agents/workflow/components/MobileBlocker.tsx
+++ b/frontend/src/agents/workflow/components/MobileBlocker.tsx
@@ -2,14 +2,14 @@ import { Monitor } from 'lucide-react';
export default function MobileBlocker() {
return (
-
-
-
+
+
+
-
+
Desktop Required
-
+
The Workflow Builder requires a larger screen for the best experience.
Please open this page on a desktop or laptop computer.
diff --git a/frontend/src/agents/workflow/components/PromptTextArea.tsx b/frontend/src/agents/workflow/components/PromptTextArea.tsx
index 973f7a43..07a772fa 100644
--- a/frontend/src/agents/workflow/components/PromptTextArea.tsx
+++ b/frontend/src/agents/workflow/components/PromptTextArea.tsx
@@ -186,7 +186,7 @@ function HighlightedOverlay({ text }: { text: string }) {
<>
{parts.map((part, i) =>
/^\{\{[^}]*\}\}$/.test(part) ? (
-
+
{part}
) : (
@@ -222,7 +222,7 @@ function VariableListWithSearch({
return (
-
+
-
+
{v.label}
@@ -412,7 +412,7 @@ export default function PromptTextArea({
)}
Add context
@@ -472,7 +472,7 @@ export default function PromptTextArea({
e.preventDefault()}
>
0 && (
= ({
icon,
handles = { source: true, target: true },
}) => {
- let bgColor = 'bg-white dark:bg-[#2C2C2C]';
- let borderColor = 'border-gray-200 dark:border-[#3A3A3A]';
+ let bgColor = 'bg-card';
+ let borderColor = 'border-border';
let iconBg = 'bg-gray-100 dark:bg-gray-800';
let iconColor = 'text-gray-600 dark:text-gray-400';
if (selected) {
- borderColor =
- 'border-violets-are-blue ring-2 ring-purple-300 dark:ring-violets-are-blue';
+ borderColor = 'border-primary ring-2 ring-primary';
}
if (type === 'start') {
@@ -56,7 +55,7 @@ export const BaseNode: React.FC = ({
type="target"
position={Position.Left}
isConnectable={true}
- className="hover:bg-violets-are-blue! -left-1! h-3! w-3! rounded-full! border-2! border-white! bg-gray-400! transition-colors dark:border-[#2C2C2C]!"
+ className="hover:bg-primary/90! border-card! -left-1! h-3! w-3! rounded-full! border-2! bg-gray-400! transition-colors!"
/>
)}
@@ -86,7 +85,7 @@ export const BaseNode: React.FC = ({
type="source"
position={Position.Right}
isConnectable={true}
- className="hover:bg-violets-are-blue! -right-1! h-3! w-3! rounded-full! border-2! border-white! bg-gray-400! transition-colors dark:border-[#2C2C2C]!"
+ className="hover:bg-primary/90! border-card! -right-1! h-3! w-3! rounded-full! border-2! bg-gray-400! transition-colors!"
/>
)}
diff --git a/frontend/src/agents/workflow/nodes/ConditionNode.tsx b/frontend/src/agents/workflow/nodes/ConditionNode.tsx
index 392c86aa..0c833f8f 100644
--- a/frontend/src/agents/workflow/nodes/ConditionNode.tsx
+++ b/frontend/src/agents/workflow/nodes/ConditionNode.tsx
@@ -36,10 +36,10 @@ const ConditionNode = ({ data, selected }: NodeProps) => {
return (
@@ -47,7 +47,7 @@ const ConditionNode = ({ data, selected }: NodeProps
) => {
type="target"
position={Position.Left}
isConnectable
- className="hover:bg-violets-are-blue! top-1/2! -left-1! h-3! w-3! rounded-full! border-2! border-white! bg-gray-400! transition-colors dark:border-[#2C2C2C]!"
+ className="hover:bg-primary/90! border-card! top-1/2! -left-1! h-3! w-3! rounded-full! border-2! bg-gray-400! transition-colors!"
/>
@@ -100,7 +100,7 @@ const ConditionNode = ({ data, selected }: NodeProps) => {
id={c.sourceHandle}
isConnectable
style={{ top: getHandleTop(i, totalOutputs) }}
- className="hover:bg-violets-are-blue! -right-1! h-3! w-3! rounded-full! border-2! border-white! bg-orange-400! transition-colors dark:border-[#2C2C2C]!"
+ className="hover:bg-primary/90! dark:border-border! -right-1! h-3! w-3! rounded-full! border-2! border-white! bg-orange-400! transition-colors"
/>
))}
) => {
id="else"
isConnectable
style={{ top: getHandleTop(cases.length, totalOutputs) }}
- className="hover:bg-violets-are-blue! -right-1! h-3! w-3! rounded-full! border-2! border-white! bg-gray-400! transition-colors dark:border-[#2C2C2C]!"
+ className="hover:bg-primary/90! border-card! -right-1! h-3! w-3! rounded-full! border-2! bg-gray-400! transition-colors!"
/>
);
diff --git a/frontend/src/agents/workflow/nodes/index.tsx b/frontend/src/agents/workflow/nodes/index.tsx
index 94b34263..cdbfb37c 100644
--- a/frontend/src/agents/workflow/nodes/index.tsx
+++ b/frontend/src/agents/workflow/nodes/index.tsx
@@ -77,7 +77,7 @@ export const AgentNode = memo(function AgentNode({
)}
{config.model_id && (
{config.model_id}
diff --git a/frontend/src/components/Accordion.tsx b/frontend/src/components/Accordion.tsx
index afc54483..bb0da630 100644
--- a/frontend/src/components/Accordion.tsx
+++ b/frontend/src/components/Accordion.tsx
@@ -37,7 +37,7 @@ export default function Accordion({
className={`flex w-full items-center justify-between focus:outline-hidden ${titleClassName}`}
onClick={toggleAccordion}
>
-
{title}
+
{title}
setShareModalState(true)}
- className="hover:bg-bright-gray rounded-full p-2 dark:hover:bg-[#28292E]"
+ className="hover:bg-accent dark:hover:bg-accent rounded-full p-2"
>
= {
};
function getArtifactTitle(artifact: ArtifactData | null, toolName?: string) {
- if (artifact) return ARTIFACT_TITLE_BY_TYPE[artifact.artifact_type] ?? 'Artifact';
+ if (artifact)
+ return ARTIFACT_TITLE_BY_TYPE[artifact.artifact_type] ?? 'Artifact';
const formattedToolName = (toolName ?? '')
.replace(/_/g, ' ')
@@ -161,7 +162,7 @@ function NoteView({ data }: { data: NoteArtifactData }) {
{data.content ? (
-
-
+
+
+
{language}
) : (
{children}
@@ -315,17 +316,17 @@ export default function ArtifactSidebar({
// Generate a unique ID for this fetch
const fetchId = `${effectiveArtifactId}-${Date.now()}`;
currentFetchIdRef.current = fetchId;
-
+
setLoading(true);
setError(null);
-
+
// Note: For todo artifacts, the endpoint always returns all todos for the tool; will be coversation scoped later
userService
.getArtifact(effectiveArtifactId, token)
.then(async (res: any) => {
// Ignore if this is not the current fetch
if (currentFetchIdRef.current !== fetchId) return;
-
+
const isResponseLike = res && typeof res.json === 'function';
const status = isResponseLike ? res.status : undefined;
const ok = isResponseLike ? Boolean(res.ok) : true;
@@ -453,7 +454,7 @@ export default function ArtifactSidebar({
{title}
@@ -481,7 +482,7 @@ export default function ArtifactSidebar({
{title}
void;
@@ -73,7 +75,7 @@ const LineNumberedTextarea: React.FC = ({
))}