From e4f18fbc088dbe8c028588df5fd784acecb23e0f Mon Sep 17 00:00:00 2001 From: Cristian Pufu Date: Fri, 27 Feb 2026 08:12:19 +0200 Subject: [PATCH] feat: add functions support, agent improvements, explorer live reload - Add coded functions docs (SKILL.md, creating-functions.md, etc.) - Document uipath.json, bindings.json, pack/publish workflow - Add evaluator file creation step in evaluations docs - Fix explorer sidebar not refreshing on file add/delete - Fix UTF-8 encoding for agent bash tool on Windows - Improve agent prompt: full build cycle, force bash usage - Remove em dash from reload toast - Bump version to 0.0.62 Co-Authored-By: Claude Opus 4.6 --- pyproject.toml | 2 +- .../src/components/agent/AgentChatSidebar.tsx | 45 +++-- .../src/components/agent/AgentMessage.tsx | 27 ++- .../src/components/shared/ReloadToast.tsx | 2 +- .../server/frontend/src/store/useWebSocket.ts | 17 +- src/uipath/dev/server/routes/files.py | 5 +- ...anel-CiK6YSHu.js => ChatPanel-BcW6Jtpz.js} | 2 +- .../{index-Gpw0SLbu.js => index-B2xfJE6O.js} | 64 ++++---- .../server/static/assets/index-BhpA3bEW.css | 1 - .../server/static/assets/index-DKf_uUe0.css | 1 + src/uipath/dev/server/static/index.html | 4 +- src/uipath/dev/services/agent_service.py | 121 +++++++++++--- src/uipath/dev/skills/uipath/SKILL.md | 72 ++++++-- .../uipath/references/creating-agents.md | 50 +++++- .../uipath/references/creating-functions.md | 154 ++++++++++++++++++ .../skills/uipath/references/evaluations.md | 119 ++++++++++++-- .../uipath/references/running-agents.md | 6 +- uv.lock | 2 +- 18 files changed, 584 insertions(+), 110 deletions(-) rename src/uipath/dev/server/static/assets/{ChatPanel-CiK6YSHu.js => ChatPanel-BcW6Jtpz.js} (99%) rename src/uipath/dev/server/static/assets/{index-Gpw0SLbu.js => index-B2xfJE6O.js} (64%) delete mode 100644 src/uipath/dev/server/static/assets/index-BhpA3bEW.css create mode 100644 src/uipath/dev/server/static/assets/index-DKf_uUe0.css create mode 100644 src/uipath/dev/skills/uipath/references/creating-functions.md diff --git a/pyproject.toml b/pyproject.toml index 4408913..e66c942 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "uipath-dev" -version = "0.0.61" +version = "0.0.62" description = "UiPath Developer Console" readme = { file = "README.md", content-type = "text/markdown" } requires-python = ">=3.11" diff --git a/src/uipath/dev/server/frontend/src/components/agent/AgentChatSidebar.tsx b/src/uipath/dev/server/frontend/src/components/agent/AgentChatSidebar.tsx index 863546b..abe0130 100644 --- a/src/uipath/dev/server/frontend/src/components/agent/AgentChatSidebar.tsx +++ b/src/uipath/dev/server/frontend/src/components/agent/AgentChatSidebar.tsx @@ -86,6 +86,15 @@ export default function AgentChatSidebar() { const isBusy = status === "thinking" || status === "executing" || status === "planning"; + const textareaRef = useRef(null); + + const resetTextareaHeight = () => { + const ta = textareaRef.current; + if (!ta) return; + ta.style.height = "auto"; + ta.style.height = Math.min(ta.scrollHeight, 200) + "px"; + }; + const handleSend = useCallback(() => { const text = input.trim(); if (!text || !selectedModel || isBusy) return; @@ -93,6 +102,11 @@ export default function AgentChatSidebar() { addUserMessage(text); ws.sendAgentMessage(text, selectedModel, sessionId, selectedSkillIds); setInput(""); + // Reset textarea height after send + requestAnimationFrame(() => { + const ta = textareaRef.current; + if (ta) ta.style.height = "auto"; + }); }, [input, selectedModel, isBusy, sessionId, selectedSkillIds, addUserMessage, ws]); const handleStop = useCallback(() => { @@ -164,9 +178,15 @@ export default function AgentChatSidebar() { className="h-full overflow-y-auto px-3 py-2 space-y-0.5" > {messages.length === 0 && ( -

- No messages yet -

+
+ + + +
+

Ask the agent to help you code

+

Create agents, functions, evaluations,
or ask questions about your project.

+
+
)} {messages.map((msg) => ( @@ -196,24 +216,29 @@ export default function AgentChatSidebar() { )} - {/* Input — matches ChatInput from debug view */} + {/* Input */}
- setInput(e.target.value)} + onChange={(e) => { + setInput(e.target.value); + resetTextareaHeight(); + }} onKeyDown={handleKeyDown} disabled={isBusy || !selectedModel} placeholder={isBusy ? "Waiting for response..." : "Message..."} - className="flex-1 bg-transparent text-sm py-1 disabled:opacity-40 placeholder:text-[var(--text-muted)]" - style={{ color: "var(--text-primary)" }} + rows={2} + className="flex-1 bg-transparent text-sm py-1 disabled:opacity-40 placeholder:text-[var(--text-muted)] resize-none" + style={{ color: "var(--text-primary)", maxHeight: 200, overflow: "auto" }} /> + )} + {visibleCalls.map((tc, i) => ( + ))}
diff --git a/src/uipath/dev/server/frontend/src/components/shared/ReloadToast.tsx b/src/uipath/dev/server/frontend/src/components/shared/ReloadToast.tsx index 51a4c34..7cdcd4e 100644 --- a/src/uipath/dev/server/frontend/src/components/shared/ReloadToast.tsx +++ b/src/uipath/dev/server/frontend/src/components/shared/ReloadToast.tsx @@ -26,7 +26,7 @@ export default function ReloadToast() {
- Files changed — reload to apply + Files changed, reload to apply