feat: workspaces own their sessions; desktop parity; sidebar and settings cleanup

Workspace sessions (docs/plans/desktop-parity, phases 1-5 and 7):
- sessions.lane_id: a workspace lists only the sessions its panes held,
  stamped by bindRunSession (first writer wins, nested `claude -p`
  excluded); GET /api/sessions?lane=&archived=
- session row state dot, double-click rename, archive (sessions.archived_at,
  hides only); the activity bar's duplicate Sessions tab removed
- Fork beside Resume (--fork-session, Claude only), Ctrl/Cmd+click a live
  session opens it in a second pane, a diff line's comment is pasted into
  the workspace's last-focused pane (lib/panePaste.ts)

dashboard_runs stability:
- a pane's previous run is archived as <pane>@<started_at> instead of being
  overwritten by INSERT OR REPLACE
- a run is flagged abandoned only once its tmux session is gone, at boot and
  on the run-heal beat (panes outlive a server restart)

UI:
- sidebar: no footer, language or theme block; small collapse button in the
  brand corner; version + update check in the connection details modal, a
  status-bar dot while a release is out; language in Settings -> General
- one Switch component for every switch, the themed Checkbox for every
  checkbox (no native checkboxes)

Also: AI Tools catalog trimmed to 10 built-ins (custom-file prompt modes
tested through fixtures), and the workspace plans under docs/plans/ (the
multi-user server plan lives in the AgentHub-Server repo).
This commit is contained in:
2026-10-02 12:05:00 +07:00
parent 5b269698f6
commit a6bd33bcff
121 changed files with 2699 additions and 1552 deletions
-15
View File
@@ -1,15 +0,0 @@
{
"id": "aider",
"label": "Aider",
"detect": [
"aider"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--yes-always"
],
"homepageUrl": "https://aider.chat/docs/"
}
-23
View File
@@ -1,23 +0,0 @@
{
"id": "amp",
"label": "Amp",
"detect": [
"amp"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--dangerously-allow-all"
],
"homepageUrl": "https://ampcode.com/manual#install",
"faviconDomain": "ampcode.com",
"install": {
"kind": "npm",
"package": "@sourcegraph/amp"
},
"update": {
"kind": "npm"
}
}
-16
View File
@@ -1,16 +0,0 @@
{
"id": "ante",
"label": "Ante",
"detect": [
"ante"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--yolo"
],
"homepageUrl": "https://github.com/AntigmaLabs/ante-preview",
"faviconDomain": "antigma.ai"
}
-13
View File
@@ -1,13 +0,0 @@
{
"id": "aug",
"label": "Auggie",
"detect": [
"auggie"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"homepageUrl": "https://docs.augmentcode.com/cli/overview",
"faviconDomain": "augmentcode.com"
}
-16
View File
@@ -1,16 +0,0 @@
{
"id": "autohand",
"label": "Autohand Code",
"detect": [
"autohand"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--unrestricted"
],
"homepageUrl": "https://github.com/autohandai/code-cli",
"faviconDomain": "autohand.ai"
}
-17
View File
@@ -1,17 +0,0 @@
{
"id": "cline",
"label": "Cline",
"detect": [
"cline"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--auto-approve",
"true"
],
"homepageUrl": "https://docs.cline.bot/cline-cli/overview",
"faviconDomain": "cline.bot"
}
-13
View File
@@ -1,13 +0,0 @@
{
"id": "codebuff",
"label": "Codebuff",
"detect": [
"codebuff"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"homepageUrl": "https://www.codebuff.com/docs/help/quick-start",
"faviconDomain": "codebuff.com"
}
-17
View File
@@ -1,17 +0,0 @@
{
"id": "command-code",
"label": "Command Code",
"detect": [
"command-code"
],
"args": [
"--trust"
],
"prompt": {
"mode": "argv"
},
"bypass": [
"--yolo"
],
"homepageUrl": "https://commandcode.ai/docs/quickstart"
}
-17
View File
@@ -1,17 +0,0 @@
{
"id": "continue",
"label": "Continue",
"detect": [
"cn"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--allow",
"*"
],
"homepageUrl": "https://docs.continue.dev/guides/cli",
"faviconDomain": "continue.dev"
}
-16
View File
@@ -1,16 +0,0 @@
{
"id": "crush",
"label": "Charm Crush",
"detect": [
"crush"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--yolo"
],
"homepageUrl": "https://github.com/charmbracelet/crush",
"faviconDomain": "charm.sh"
}
+8 -2
View File
@@ -1,6 +1,6 @@
{
"id": "cursor",
"label": "Cursor",
"label": "Cursor CLI",
"detect": [
"cursor-agent"
],
@@ -10,6 +10,9 @@
"model": {
"flag": "--model"
},
"resume": [
"--continue"
],
"bypass": [
"--yolo"
],
@@ -20,7 +23,10 @@
"url": "https://cursor.com/install"
},
"update": {
"kind": "script"
"kind": "self",
"args": [
"update"
]
},
"config": [
{
-19
View File
@@ -1,19 +0,0 @@
{
"id": "devin",
"label": "Devin",
"detect": [
"devin"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--permission-mode",
"bypass",
"--respect-workspace-trust",
"false"
],
"homepageUrl": "https://devin.ai/cli",
"faviconDomain": "devin.ai"
}
-15
View File
@@ -1,15 +0,0 @@
{
"id": "droid",
"label": "Droid",
"detect": [
"droid"
],
"prompt": {
"mode": "argv"
},
"bypass": [
"--auto",
"high"
],
"homepageUrl": "https://docs.factory.ai/cli/getting-started/quickstart"
}
-16
View File
@@ -1,16 +0,0 @@
{
"id": "goose",
"label": "Goose",
"detect": [
"goose"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypassEnv": {
"GOOSE_MODE": "auto"
},
"homepageUrl": "https://block.github.io/goose/docs/quickstart/",
"faviconDomain": "goose-docs.ai"
}
-17
View File
@@ -1,17 +0,0 @@
{
"id": "grok",
"label": "Grok",
"detect": [
"grok"
],
"prompt": {
"mode": "argv",
"separator": "--"
},
"bypass": [
"--permission-mode",
"bypassPermissions"
],
"homepageUrl": "https://x.ai/cli",
"faviconDomain": "x.ai"
}
-12
View File
@@ -1,12 +0,0 @@
{
"id": "kilo",
"label": "Kilocode",
"detect": [
"kilo"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"homepageUrl": "https://kilo.ai/docs/cli"
}
-17
View File
@@ -1,17 +0,0 @@
{
"id": "kimi",
"label": "Kimi",
"detect": [
"kimi",
"kimi-code"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--yolo"
],
"homepageUrl": "https://www.kimi.com/code/docs/en/kimi-code-cli/getting-started.html",
"faviconDomain": "moonshot.cn"
}
-19
View File
@@ -1,19 +0,0 @@
{
"id": "kiro",
"label": "Kiro",
"detect": [
"kiro-cli"
],
"args": [
"chat",
"--tui"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--trust-all-tools"
],
"homepageUrl": "https://kiro.dev/docs/cli/"
}
-13
View File
@@ -1,13 +0,0 @@
{
"id": "mimo-code",
"label": "MiMo Code",
"detect": [
"mimo"
],
"prompt": {
"mode": "flag",
"flag": "--prompt"
},
"homepageUrl": "https://mimo.xiaomi.com/coder",
"faviconDomain": "mimo.xiaomi.com"
}
-18
View File
@@ -1,18 +0,0 @@
{
"id": "mistral-vibe",
"label": "Mistral Vibe",
"detect": [
"vibe",
"mistral-vibe"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--agent",
"auto-approve"
],
"homepageUrl": "https://github.com/mistralai/mistral-vibe",
"faviconDomain": "mistral.ai"
}
-19
View File
@@ -1,19 +0,0 @@
{
"id": "muse",
"label": "Muse",
"detect": [
"muse"
],
"args": [
"--trust-workspace"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--yolo"
],
"homepageUrl": "https://dev.meta.ai/docs/muse-code",
"faviconDomain": "dev.meta.ai"
}
+8 -1
View File
@@ -7,5 +7,12 @@
"prompt": {
"mode": "argv"
},
"homepageUrl": "https://omp.sh"
"homepageUrl": "https://omp.sh",
"install": {
"kind": "script",
"url": "https://omp.sh/install"
},
"update": {
"kind": "script"
}
}
-14
View File
@@ -1,14 +0,0 @@
{
"id": "openclaude",
"label": "OpenClaude",
"detect": [
"openclaude"
],
"prompt": {
"mode": "argv"
},
"bypass": [
"--dangerously-skip-permissions"
],
"homepageUrl": "https://openclaude.gitlawb.com/"
}
-15
View File
@@ -1,15 +0,0 @@
{
"id": "opencode2",
"label": "OpenCode 2",
"detect": [
"opencode2"
],
"args": [
"--standalone"
],
"prompt": {
"mode": "flag",
"flag": "--prompt"
},
"homepageUrl": "https://opencode.ai/v2/docs/"
}
-11
View File
@@ -1,11 +0,0 @@
{
"id": "pi",
"label": "Pi",
"detect": [
"pi"
],
"prompt": {
"mode": "argv"
},
"homepageUrl": "https://pi.dev"
}
-13
View File
@@ -1,13 +0,0 @@
{
"id": "prime-agent",
"label": "Prime Agent",
"detect": [
"prime-agent"
],
"prompt": {
"mode": "argv",
"separator": "--"
},
"homepageUrl": "https://github.com/PrimeIntellect-ai/prime-agent",
"faviconDomain": "primeintellect.ai"
}
-36
View File
@@ -1,36 +0,0 @@
{
"id": "qwen-code",
"label": "Qwen Code",
"detect": [
"qwen"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"model": {
"flag": "--model"
},
"bypass": [
"--approval-mode",
"yolo"
],
"homepageUrl": "https://github.com/QwenLM/qwen-code",
"faviconDomain": "qwenlm.github.io",
"install": {
"kind": "npm",
"package": "@qwen-code/qwen-code"
},
"update": {
"kind": "npm"
},
"config": [
{
"path": "~/.qwen/settings.json",
"format": "jsonc"
},
{
"path": "~/.qwen/QWEN.md"
}
]
}
-16
View File
@@ -1,16 +0,0 @@
{
"id": "rovo",
"label": "Rovo Dev",
"detect": [
"rovo"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--yolo"
],
"homepageUrl": "https://support.atlassian.com/rovo/docs/install-and-run-rovo-dev-cli-on-your-device/",
"faviconDomain": "atlassian.com"
}
-16
View File
@@ -1,16 +0,0 @@
{
"id": "trae",
"label": "Trae",
"detect": [
"traecli"
],
"prompt": {
"mode": "argv",
"separator": "--"
},
"bypass": [
"--yolo"
],
"homepageUrl": "https://docs.trae.cn/cli_get-started-with-trae-cli",
"faviconDomain": "www.trae.cn"
}
-17
View File
@@ -1,17 +0,0 @@
{
"id": "zcode",
"label": "ZCode",
"detect": [
"zcode"
],
"prompt": {
"mode": "after-start",
"delayMs": 3000
},
"bypass": [
"--mode",
"yolo"
],
"homepageUrl": "https://zcode.z.ai/en/docs",
"faviconDomain": "zcode.z.ai"
}