I wanted to organize things and couldn't figure ou...
# proj-agent-canvas
s
I wanted to organize things and couldn't figure out how to add a workspace thru the UI. It looks like there are already 3 issues already related to this pinch: > - #15775 (DevinVinson, 05-28) : "I need to click Open Workspace in conversation view, then click the dropdown, then click manage. That same number of steps needs to happen to add a new workspace." It even quotes a user hitting the "Add all subdirectories" trap. > - #15974 (xingyaoww, 05-13, 7 comments) covers the workspace/worktree confusion. > - #16435 (rbren, 08-08) is about grouping-by-workspace needing all workspaces visible. Is this already being handled internally or would a prototype be helpful?
h
I've got some wireframes and prototypes floating around but I'd love to see what you have in mind!
One thing one would elevating workspaces a bit so they have their own view. So you can click Workspaces then see all of them. Then configure workspaces with meta data, see conversations and more
That is a bigger conversation than a short term UI/UX win on the current experience but I think that is the direction that makes sense long term
s
Yeah, I wanted to create a new workspace. I didn't want to read old convos and determine value so I wanted to make a trash folder and put all of my existing conversations in it. Anything that stays in there long enough will eventually get reaped. I've not gone deep yet but it seems like 'selected_workspace' is written once and there's nothing that changes it yet. So, in my imagination, I'd build a prototype that covers my use case after assimilating those 3 issues. The impact it has on the UI would be incidental. Probably 2 new buttons? 'New Directory' on the first and 'Move Conversation' on the second?
h
Sounds like a plan! If you have not stumbled into it before check out the conversation Filters and scroll all the way to the bottom. There is a toggle to hide old conversations and then a Delete all button. Just pointing those out in case it helps with part of what you are looking for
❤️ 1
s
@hundreds-twilight-32833 Here's how I think it will look like:
1. PR 1 — agent-canvas: Move Conversation. Self-contained, client-side, zero cross-repo dependency. The mutable org key in the metadata store follows the established upstream pattern (active_profile is client-side there for the same reason), grouping reads organized_workspace ?? selected_workspace. This PR is the diagnosis in diff form, and it's the fastest thing to get merge-ready — which matters given the supersession rate.
2. PR 2 — software-agent-sdk: create_directory route in file_router.py + FileClient method (need to verify whether typescript-client is generated from that repo — planning detail).
3. PR 3 — agent-canvas: New Directory in the folder browser, consuming PR 2.
I suppose I should ask separately about the PR 2 step in #C06R25BT5B2?
h
Yep, make sure there isn't some unknown issue with creating a directory via agent-server.
👍 1
So your goal is to make this true: "I can create a folder from the Workspace manager popup and use it for a new conversation"
c
Sorry I’m dense, do you want to create • a directory where the conversation events/logs/data are saved, or • a directory where a repo or more exist, where the agent works?
s
That's an interesting question. I opened it up and my first instinct was to clear the noise. Reflexively, looking at the UI, I want to drag these old conversations into a folder. So I click on the new folder icon and that gives me Workspaces. I add the workspace but at this dialog, I have to already have a directory created. Easy peasy if I understand what I'm looking at and can just mkdir. But if I can do is 'Add all subdirectories' that's a big problem if I don't know how to get a subdirectory in there.
The answer is the second kind, a directory where the agent works. Conversation events and logs stay wherever they live today.
nod 1
👍 1
upload_file already mkdirs the target's parents, so the server creates directories today, just only as a side effect so an explicit create_directory on the file router would cover it, right?
c
Cool, I don’t think it will hide the long list of conversations, that’s all: in the image below “where are you?” is in a new directory=workspace, but you see how it displays the same
Yes I think it would work, not sure about Move Conversation though, it’s… not a move of the conversation, right?
(in the screenshot, the chat is about the other kind, but the conversation’s agent too is working in a different directory than the rest of the list)
I feel the concept of workspace you’d like is more like “project” in other AI tools, does that sound right?
s
Yes, I think you are right. I've been down this road before and I would advocate for tagging, especially with the idea of themes on the map. Let users tag conversations with anything our little hearts desire. They can be tagged as folders, projects, slightly expired fruit, the sky is the limit! Nesting becomes a function of labels instead of a footgun.
😅 1
🙏 1
(avoids problems like "is a folder in a project or a project in a folder and how do those things relate to blotchy banana?")
tying the workspaces threads together: • #16444 fixes the folder list. ran it locally: every registered workspace renders, even with 0 conversations. github.com/OpenHands/OpenHands/pull/16444 • create half: the picker can't mkdir, and the file API gives a button nothing to call. issue: github.com/OpenHands/OpenHands/issues/16561 PR: POST /api/file/create_directory, idempotent mkdir, typed 400/403: github.com/OpenHands/software-agent-sdk/pull/4482
ty 1
c
Oh, I see! Thank you for the review on 16444!
🙏 1
Also 4482 looks good to me, thank you!
🙏 1
Re: tagging. FWIW I’m pretty sure we have tagging implemented in agent-sdk, but honestly I never used it from the UI canvas and I don’t know how to 🙈
s
yeah, you're right. tagging isn't really properly exposed in the ui, tho. i'm working on a prototype so we have something to look at. doing server-side filtering of tags looks like it would need another endpoint so i'll do mvp clientside
🙏 1
the hamburger menu was feeling a bit densely populated. it's where i put tags to start with and it got out of hand very quickly. this was the best out of everything i tried. one is expanded, then collapsed has small "filters" button as not to break existing UX
Edit Tags
image.png
h
It is definitely getting a bit full but I'm not sure about that little Filter chip
Oh interesting on the tag edit, what is the use case for editing manually?
s
yeah, the hamburger menu became scrollable when tags were in there
which would nightmare on a mobile interface. scrolling popup modals? yipes
😬 1
h
Maybe a modal for sidebar UI options is needed. Give it some room, add some easy presets like compact, minimal, detailed
Maybe even let you tweak the font size
s
yeah, that makes sense
i started down the path of re-imagining menus and groupings when i noticed the somewhat frightening DELETE MY WHOLE LIFE button just underneath of 'hide'
nod 1
h
Filter gives you some basic options then a expanded modal view gives you all of them?
s
but that's clearly a much bigger convo so i dialed back lol
filter is collapsed. it was supposed to be just a picture of a tag next to the folder with a plus in it but the agent gave me this and it seemed a good enough time to talk it over
then it expands to clickable tags:
image.png
h
I have some ideas here if you want to push that branch of as a draft
s
will do
oh, i got a cool number too: github.com/OpenHands/OpenHands/pull/16600
😅 1
h
I've been playing around with this a bit @straight-dog-12443. What is your main use-case for adding custom tags and then being able to filter by tags? Any specific user story in mind?
s
Nothing specific. It's just a mutation of my reflex to declutter the screen somehow. I recall somebody mentioning themes or skins or something along those lines as being the future of the product. Tags are a flexible way to do customizable nested organization because then the user/theme can define structure. Tags were already present in the SDK but before we could consider using them for visual organization, we would need for them to be present on the UI somehow. Tags without filtering didn't make sense to me. If anything, I think it's more likely that the tag filter/search will be moved to the server by adding an SDK endpoint later. The browser-based filtering just offers an MVP without requiring the SDK PR as well.
h
Ah gotcha. Tags right now get added for automation runs but it doesn't seem to be all the time and I'm not sure under what context they are added for any other purpose. I'm not in love with this flow but its an idea of a direction
s
ui tags are isolated from automation tags - Advanced options->Tag chips
👀 1
image.png
click tag icon to toggle
image.png
image.png
h
That looks really slick @straight-dog-12443! Do you want to move it out of draft and we can pull in @breezy-kilobyte-39430 to help give some additional design reivew?
c
I'm not in love with this flow but its an idea of a direction
It does seem too much to click, and there are two things far from each other, that go together... 🤔 At a minimum, maybe we could have only an "enable tags"? That would both show and allow filtering
h
Thats a good idea! I think a slow setting by setting and flow by flow run through will help challenge the changes too. I originally thought the different layout options should disabled the 1 hour recent convo toggle but going through it makes it a bit confusing if you have not had a conversation recently. But overall the simplification feels good to just click a layout style with one click. Hoping we get some more eyes on it once its out of draft state too. I would guess few people have looked at all the filter options or know they exist tbh
s
i'm working on switching over to that branch and making the issue so i can mark it ready for review
if tags defaulted to on, it might be the desired UX. if they are a problem, you can turn them off in the advanced menu
c
is an SDK endpoint necessary? do we know what the specification of missing tag operations is?
s
for tags? an endpoint was not necessary unless there's a need for server-side features, i think
i thought that filter/search might get there but wasn't sure
c
I'm just wondering if we should persist them. Tags exist in the SDK since this PR: github.com/OpenHands/software-agent-sdk/pull/2454
s
yeah, that's what it uses
c
Cool!
s
out of draft but CI won't be happy until the issue says ready-for-dev. i'm not sure how far out of draft you want it @hundreds-twilight-32833 github.com/OpenHands/OpenHands/pull/16600
c
Please don't worry about that, it shouldn't matter; the label is merely in an attempt to stem the tide of AI PRs that humans didn't think through, as you may know - it's not our case here 😅
nod 1