From 18d483398ca95d10ca2d9af40ecbac590adb03cc Mon Sep 17 00:00:00 2001 From: "Maksym Hryzodub [DREAM]" Date: Thu, 20 Aug 2026 21:06:32 +0300 Subject: [PATCH 1/5] feat(agent): agent workspace with vertical rail and settings navigator (CLEAN-36) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Admin: the agents table is gone. /agents resolves to the Ranch admin agent and redirects to its canonical address. A vertical rail of agents sits on the left, the chat keeps the pod logs beside it in the middle, and the eight settings sections move into a narrow navigator on the right — opening one renders it on the canvas in place of the conversation, at the width it already had, so none of the eight components changed. App: the card grid is replaced by the same rail; no settings panel. The last opened agent is remembered per browser and validated against the visible list. The conversation is hidden with v-show rather than unmounted, so returning from a section costs no reconnect and keeps the transcript. The per-agent remount key sits on the workspace's middle column, not the page, so the rail survives an agent switch without refetching. No API change. Admin primary navigation untouched. Co-Authored-By: Claude Opus 5 (1M context) --- .gitignore | 4 + .specify/feature.json | 2 +- .../agent/agent/components/agent/chat/Tab.vue | 21 +- .../agent/components/agent/item/Provider.vue | 291 +----------- .../agent/agent/components/agent/item/tabs.ts | 13 - .../agent/components/agent/list/Provider.vue | 276 ------------ .../components/agent/settings/NavItem.vue | 46 ++ .../agent/components/agent/settings/Panel.vue | 216 +++++++++ .../components/agent/settings/sections.ts | 95 ++++ .../components/agent/workspace/Canvas.vue | 125 +++++ .../agent/components/agent/workspace/Main.vue | 227 ++++++++++ .../components/agent/workspace/Provider.vue | 175 +++++++ .../agent/components/agent/workspace/Rail.vue | 79 ++++ .../components/agent/workspace/RailItem.vue | 61 +++ .../components/agent/workspace/TopBar.vue | 51 +++ .../agent/composables/useAgentRailEntries.ts | 114 +++++ .../composables/useAgentSectionCounts.ts | 132 ++++++ .../agent/composables/useSettingsPanel.ts | 94 ++++ .../agent/agent/pages/agents/[id]/index.vue | 20 +- .../slices/agent/agent/pages/agents/index.vue | 55 ++- .../common/components/layout/Provider.vue | 2 +- admin/slices/common/utils/formatDate.ts | 8 +- app/i18n.sync.json | 11 +- .../agent/components/agentChat/Provider.vue | 22 +- .../agent/components/agentList/Provider.vue | 177 -------- .../components/agentWorkspace/Provider.vue | 157 +++++++ .../agent/components/agentWorkspace/Rail.vue | 77 ++++ .../Card.vue => agentWorkspace/RailItem.vue} | 102 ++--- app/slices/agent/composables/useLastAgent.ts | 49 ++ app/slices/agent/i18n/locales/en.json | 15 +- app/slices/agent/i18n/locales/ru.json | 15 +- app/slices/agent/pages/agents/[id].vue | 7 +- app/slices/agent/pages/agents/index.vue | 60 ++- .../checklists/requirements.md | 108 +++++ .../contracts/components.md | 214 +++++++++ .../contracts/preferences.md | 77 ++++ .../contracts/routes.md | 101 +++++ specs/006-agent-workspace-tabs/data-model.md | 186 ++++++++ specs/006-agent-workspace-tabs/plan.md | 232 ++++++++++ specs/006-agent-workspace-tabs/quickstart.md | 231 ++++++++++ specs/006-agent-workspace-tabs/research.md | 308 +++++++++++++ specs/006-agent-workspace-tabs/spec.md | 426 ++++++++++++++++++ specs/006-agent-workspace-tabs/tasks.md | 264 +++++++++++ 43 files changed, 4072 insertions(+), 874 deletions(-) delete mode 100644 admin/slices/agent/agent/components/agent/item/tabs.ts delete mode 100644 admin/slices/agent/agent/components/agent/list/Provider.vue create mode 100644 admin/slices/agent/agent/components/agent/settings/NavItem.vue create mode 100644 admin/slices/agent/agent/components/agent/settings/Panel.vue create mode 100644 admin/slices/agent/agent/components/agent/settings/sections.ts create mode 100644 admin/slices/agent/agent/components/agent/workspace/Canvas.vue create mode 100644 admin/slices/agent/agent/components/agent/workspace/Main.vue create mode 100644 admin/slices/agent/agent/components/agent/workspace/Provider.vue create mode 100644 admin/slices/agent/agent/components/agent/workspace/Rail.vue create mode 100644 admin/slices/agent/agent/components/agent/workspace/RailItem.vue create mode 100644 admin/slices/agent/agent/components/agent/workspace/TopBar.vue create mode 100644 admin/slices/agent/agent/composables/useAgentRailEntries.ts create mode 100644 admin/slices/agent/agent/composables/useAgentSectionCounts.ts create mode 100644 admin/slices/agent/agent/composables/useSettingsPanel.ts delete mode 100644 app/slices/agent/components/agentList/Provider.vue create mode 100644 app/slices/agent/components/agentWorkspace/Provider.vue create mode 100644 app/slices/agent/components/agentWorkspace/Rail.vue rename app/slices/agent/components/{agentList/Card.vue => agentWorkspace/RailItem.vue} (55%) create mode 100644 app/slices/agent/composables/useLastAgent.ts create mode 100644 specs/006-agent-workspace-tabs/checklists/requirements.md create mode 100644 specs/006-agent-workspace-tabs/contracts/components.md create mode 100644 specs/006-agent-workspace-tabs/contracts/preferences.md create mode 100644 specs/006-agent-workspace-tabs/contracts/routes.md create mode 100644 specs/006-agent-workspace-tabs/data-model.md create mode 100644 specs/006-agent-workspace-tabs/plan.md create mode 100644 specs/006-agent-workspace-tabs/quickstart.md create mode 100644 specs/006-agent-workspace-tabs/research.md create mode 100644 specs/006-agent-workspace-tabs/spec.md create mode 100644 specs/006-agent-workspace-tabs/tasks.md diff --git a/.gitignore b/.gitignore index 013c1908..ba59b57e 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,7 @@ api/prisma/schema.prisma .terraform.lock.hcl k3s_kubeconfig.yaml k3s_kustomization_backup.yaml + +# Python bytecode from .specify scripts +__pycache__/ +export-1a/ diff --git a/.specify/feature.json b/.specify/feature.json index 4be0e807..126b2cb2 100644 --- a/.specify/feature.json +++ b/.specify/feature.json @@ -1,3 +1,3 @@ { - "feature_directory": "specs/002-nuxt4-migration" + "feature_directory": "specs/006-agent-workspace-tabs" } diff --git a/admin/slices/agent/agent/components/agent/chat/Tab.vue b/admin/slices/agent/agent/components/agent/chat/Tab.vue index 0c8f9bd7..f65b689d 100644 --- a/admin/slices/agent/agent/components/agent/chat/Tab.vue +++ b/admin/slices/agent/agent/components/agent/chat/Tab.vue @@ -79,11 +79,24 @@ watch(