From 20a8e69c4c56b2d756dc060b719612e8e60f8768 Mon Sep 17 00:00:00 2001 From: 777genius Date: Mon, 18 May 2026 15:58:05 +0300 Subject: [PATCH] chore: save remaining workspace updates --- README.md | 27 +- .../components/sections/ComparisonSection.vue | 101 ++- landing/locales/ar.json | 9 +- landing/locales/de.json | 9 +- landing/locales/en.json | 9 +- landing/locales/es.json | 9 +- landing/locales/fr.json | 9 +- landing/locales/hi.json | 9 +- landing/locales/ja.json | 9 +- landing/locales/pt.json | 9 +- landing/locales/ru.json | 9 +- landing/locales/zh.json | 9 +- .../services/team/TeamProvisioningService.ts | 77 +- .../delivery/OpenCodePromptDeliveryLedger.ts | 117 ++- .../OpenCodeRuntimeDeliveryDiagnostics.ts | 78 +- .../runtime/RuntimeDiagnosticClassifier.ts | 112 ++- .../ProvisioningProviderStatusList.tsx | 19 +- .../team/members/MemberDetailDialog.tsx | 1 + .../team/members/MemberHoverCard.tsx | 1 + src/renderer/utils/memberHelpers.ts | 171 +++- src/renderer/utils/memberLaunchDiagnostics.ts | 216 ++++- .../team/OpenCodePromptDeliveryLedger.test.ts | 282 +++++++ ...OpenCodeRuntimeDeliveryDiagnostics.test.ts | 215 +++++ .../team/RuntimeDiagnosticClassifier.test.ts | 207 +++++ .../team/TeamProvisioningService.test.ts | 583 ++++++++++++- test/renderer/utils/memberHelpers.test.ts | 348 +++++++- .../utils/memberLaunchDiagnostics.test.ts | 775 +++++++++++++++++- 27 files changed, 3233 insertions(+), 187 deletions(-) diff --git a/README.md b/README.md index 767d8eef..ff5bf10d 100644 --- a/README.md +++ b/README.md @@ -172,29 +172,34 @@ For feature architecture and implementation guidance: | Feature | Agent Teams | Gastown | Paperclip | Cursor | Claude Code CLI | |---|---|---|---|---|---| -| **Cross-team communication** | ✅ Native cross-team messages | ⚠️ Cross-rig coordination | ⚠️ Company-scoped org work | N/A | ❌ | +| **Cross-team communication** | ✅ Messages between separate teams | ⚠️ Coordination across groups | ⚠️ Company-scoped org work | N/A | ❌ | | **Agent-to-agent messaging** | ✅ Native real-time mailbox | ✅ Mailboxes + handoffs | ⚠️ Comments + @mentions | ❌ | ✅ Team mailbox, no UI | -| **Linked tasks** | ✅ Cross-refs + dependencies | ⚠️ Beads deps + convoys | ✅ Goals, parents, blockers | ❌ | ✅ Shared task list | -| **Session analysis** | ✅ Task logs + token tracking | ⚠️ Session recall, feed, OTEL | ⚠️ Run transcripts + cost audit | ❌ | ⚠️ Usage command, no UI | +| **Linked tasks** | ✅ Tasks can link to and block each other | ⚠️ Task deps + grouped work | ✅ Goals, parent tasks, blockers | ❌ | ✅ Shared task list | +| **Session analysis** | ✅ Task logs + token usage | ⚠️ Session recall, feed, metrics | ⚠️ Run transcripts + cost audit | ❌ | ⚠️ Usage command, no UI | | **Task attachments** | ✅ Auto-attach, agents read & attach files | ❌ Not task-level | ✅ Docs, attachments, work products | ⚠️ Chat session only | ⚠️ Chat images only | | **Hunk-level review** | ✅ Accept / reject individual hunks | ❌ | ❌ Bring your own review | ✅ | ❌ | | **Built-in code editor** | ✅ With Git support | ❌ | ❌ Control plane, not editor | ✅ Full IDE | ❌ | -| **Full autonomy** | ✅ Agents create, assign, review tasks end-to-end | ✅ Mayor, convoys, recovery | ✅ Heartbeats + governance | ⚠️ Background agents, not teams | ✅ Experimental CLI teams | -| **Task dependencies (blocked by)** | ✅ Guaranteed ordering | ✅ DAG waves via Beads | ✅ Blockers + execution locks | ❌ | ✅ Team task deps, no UI | -| **Review workflow** | ✅ Agents review each other + human review UI | ⚠️ Refinery merge queue | ✅ Approvals + governance | ⚠️ PR/BugBot only | ✅ Team review, no UI | -| **Zero setup** | ✅ Guided runtime setup | ❌ Go/Git/Dolt/Beads/tmux | ⚠️ `npx` + embedded Postgres | ✅ | ⚠️ CLI + env flag | +| **Full autonomy** | ✅ Agents plan, assign, work, and review | ✅ Coordinator, grouped work, recovery | ✅ Wake-up runs + governance | ⚠️ Background agents, not teams | ✅ Experimental CLI teams | +| **Task dependencies** | ✅ Tasks wait for blockers automatically | ✅ Dependency waves | ✅ Blockers + execution locks | ❌ | ✅ Team task deps, no UI | +| **Review workflow** | ✅ Agents review each other + human review UI | ⚠️ Merge queue | ✅ Approvals + governance | ⚠️ PR/BugBot only | ✅ Team review, no UI | +| **Zero setup** | ✅ Guided runtime setup | ❌ Manual CLI stack | ⚠️ `npx` + local database | ✅ | ⚠️ CLI + env flag | | **Kanban board** | ✅ 5 columns, real-time | ❌ Dashboard, not Kanban | ✅ 7 columns, drag-and-drop | ❌ | ❌ | -| **Execution log viewer** | ✅ Tool calls, reasoning, timeline | ⚠️ Feed, OTEL, dashboard | ✅ Run transcripts + ledger | ⚠️ Agent chat + terminal | ❌ | +| **Execution logs** | ✅ Tool calls, reasoning, timeline | ⚠️ Feed, metrics, dashboard | ✅ Run transcripts + audit log | ⚠️ Agent chat + terminal | ❌ | | **Live processes** | ✅ View, stop, open URLs in browser | ⚠️ Agent health dashboard | ⚠️ Manual services + previews | ⚠️ Native terminal only | ❌ | +| **CPU/RAM per teammate** | ✅ See CPU/RAM history for each live teammate | ⚠️ Shows activity/health, not CPU/RAM | ⚠️ Shows run status/cost, not CPU/RAM | ❌ Remote agent/terminal only | ❌ | | **Per-task code review** | ✅ Accept / reject / comment | ⚠️ Merge queue, no diff UI | ⚠️ PR/work products, no inline diff | ✅ BugBot on PRs | ❌ | -| **Flexible autonomy** | ✅ Per-action approvals + notifications | ✅ Gates, escalation, recovery | ✅ Board approvals, pause, terminate | ⚠️ BG agents auto-run commands | ✅ Permissions + hooks | +| **Flexible autonomy** | ✅ Per-action approvals + notifications | ✅ Gates, escalation, recovery | ✅ Board approvals, pause, terminate | ⚠️ Background agents auto-run commands | ✅ Permissions + hooks | | **Git worktree isolation** | ✅ Optional | ✅ Core primitive | ✅ Worktrees / branches | ⚠️ Background branches/VMs | ⚠️ Manual worktrees | -| **Multi-agent backend** | ✅ Claude, Codex + OpenCode teammates | ✅ Claude, Codex, Gemini, Copilot + more | ✅ BYO agents: Claude, Codex, Cursor/OpenCode, HTTP | ⚠️ Multi-model agents, no team backend | ⚠️ Claude-only experimental teams | +| **Mixed AI teammates** | ✅ Claude, Codex, and OpenCode in one team | ✅ Many providers, terminal-first | ✅ Bring your own agents/runtimes | ⚠️ Multi-model agents, no shared team | ⚠️ Claude-only experimental teams | +| **Live team map** | ✅ Map of teammates, tasks, blockers, handoffs, activity, logs | ⚠️ Agent tree + feed panels | ⚠️ Org chart/status, not a task/log map | ❌ | ❌ | +| **Live teammates** | ✅ Watch teammates work and message them directly | ⚠️ Terminal-based agent sessions | ⚠️ Agents wake up for runs, then sleep | ⚠️ Background agents per task | ⚠️ CLI teams, no desktop view | +| **Team workspace** | ✅ Tasks, logs, Kanban, review, and teammates in one app | ⚠️ Mail/feed/dashboard across tools | ⚠️ Board + transcripts, less live teammate view | ⚠️ IDE chats/tasks, not team view | ❌ No desktop UI | +| **Teammate launch status** | ✅ Know who started, who is stuck, and who replied | ⚠️ Session health, less clear message status | ⚠️ Run status, not live teammate status | ❌ | ⚠️ CLI mailbox, no visual status | | **Org chart / governance** | ⚠️ Roles + approvals, no org chart | ⚠️ Roles + escalation | ✅ Org chart + board governance | ⚠️ Team admin only | ❌ | | **Budget controls** | ⚠️ Cost/token visibility, no hard caps | ⚠️ Cost tiers + digest, no hard caps | ✅ Per-agent budgets + hard stops | ⚠️ Usage + BG spend limits | ⚠️ `/usage` + workspace limits | | **Price** | **Free OSS UI**, provider access needed | Free OSS, runtime plans needed | Free OSS, self-hosted + infra | Free + paid usage | Claude plan or API usage | -Fact sources checked on May 16, 2026: [detailed research notes](docs/research/gastown-paperclip-comparison-2026-05-16.md), [Gastown README](https://github.com/gastownhall/gastown), [Gastown provider guide](https://github.com/gastownhall/gastown/blob/main/docs/agent-provider-integration.md), [Gastown scheduler](https://github.com/gastownhall/gastown/blob/main/docs/design/scheduler.md), [Gastown release](https://github.com/gastownhall/gastown/releases/tag/v1.1.0), [Paperclip README](https://github.com/paperclipai/paperclip), [Paperclip adapters](https://github.com/paperclipai/paperclip/blob/master/docs/adapters/overview.md), [Paperclip budgets](https://github.com/paperclipai/paperclip/blob/master/docs/guides/board-operator/costs-and-budgets.md), [Paperclip runtime services](https://github.com/paperclipai/paperclip/blob/master/docs/guides/board-operator/execution-workspaces-and-runtime-services.md), [Paperclip Kanban source](https://github.com/paperclipai/paperclip/blob/master/ui/src/components/KanbanBoard.tsx), [Paperclip work products](https://github.com/paperclipai/paperclip/blob/master/packages/shared/src/validators/work-product.ts), [Paperclip release](https://github.com/paperclipai/paperclip/releases/tag/v2026.513.0), [Cursor Background Agents](https://docs.cursor.com/en/background-agents), [Cursor Diffs & Review](https://docs.cursor.com/en/agent/review), [Cursor Bugbot](https://docs.cursor.com/en/bugbot), [Cursor pricing](https://docs.cursor.com/en/account/usage), [Claude Code agent teams](https://code.claude.com/docs/en/agent-teams), [Claude Code subagents](https://code.claude.com/docs/en/sub-agents), [Claude Code workflows](https://code.claude.com/docs/en/common-workflows), [Claude Code costs](https://code.claude.com/docs/en/costs), [Claude pricing](https://claude.com/pricing). +Fact sources checked on May 18, 2026: [detailed research notes](docs/research/gastown-paperclip-comparison-2026-05-16.md), [Gastown README](https://github.com/gastownhall/gastown), [Gastown provider guide](https://github.com/gastownhall/gastown/blob/main/docs/agent-provider-integration.md), [Gastown scheduler](https://github.com/gastownhall/gastown/blob/main/docs/design/scheduler.md), [Gastown dashboard source](https://github.com/gastownhall/gastown/blob/main/internal/web/templates/convoy.html), [Gastown release](https://github.com/gastownhall/gastown/releases/tag/v1.1.0), [Paperclip README](https://github.com/paperclipai/paperclip), [Paperclip adapters](https://github.com/paperclipai/paperclip/blob/master/docs/adapters/overview.md), [Paperclip heartbeat protocol](https://github.com/paperclipai/paperclip/blob/master/docs/guides/agent-developer/heartbeat-protocol.md), [Paperclip org chart](https://paperclip.inc/docs/guides/board-operator/org-structure/), [Paperclip OrgChart source](https://github.com/paperclipai/paperclip/blob/master/ui/src/pages/OrgChart.tsx), [Paperclip budgets](https://github.com/paperclipai/paperclip/blob/master/docs/guides/board-operator/costs-and-budgets.md), [Paperclip runtime services](https://github.com/paperclipai/paperclip/blob/master/docs/guides/board-operator/execution-workspaces-and-runtime-services.md), [Paperclip Kanban source](https://github.com/paperclipai/paperclip/blob/master/ui/src/components/KanbanBoard.tsx), [Paperclip work products](https://github.com/paperclipai/paperclip/blob/master/packages/shared/src/validators/work-product.ts), [Paperclip release](https://github.com/paperclipai/paperclip/releases/tag/v2026.517.0), [Cursor Background Agents](https://docs.cursor.com/en/background-agents), [Cursor Diffs & Review](https://docs.cursor.com/en/agent/review), [Cursor Bugbot](https://docs.cursor.com/en/bugbot), [Cursor pricing](https://docs.cursor.com/en/account/usage), [Claude Code agent teams](https://code.claude.com/docs/en/agent-teams), [Claude Code subagents](https://code.claude.com/docs/en/sub-agents), [Claude Code workflows](https://code.claude.com/docs/en/common-workflows), [Claude Code costs](https://code.claude.com/docs/en/costs), [Claude pricing](https://claude.com/pricing). --- diff --git a/landing/components/sections/ComparisonSection.vue b/landing/components/sections/ComparisonSection.vue index aca9e577..9fe419ad 100644 --- a/landing/components/sections/ComparisonSection.vue +++ b/landing/components/sections/ComparisonSection.vue @@ -24,8 +24,8 @@ interface ComparisonRow { const rows = computed(() => [ { feature: t('comparison.features.crossTeam'), - us: { status: 'yes' }, - gastown: { status: 'partial', note: 'Cross-rig coordination' }, + us: { status: 'yes', note: 'Messages between separate teams' }, + gastown: { status: 'partial', note: 'Coordination across groups' }, paperclip: { status: 'partial', note: 'Company-scoped org work' }, cursor: { status: 'na' }, claudeCli: { status: 'no' }, @@ -40,16 +40,16 @@ const rows = computed(() => [ }, { feature: t('comparison.features.linkedTasks'), - us: { status: 'yes', note: 'Cross-refs + dependencies' }, - gastown: { status: 'partial', note: 'Beads deps + convoys' }, - paperclip: { status: 'yes', note: 'Goals, parents, blockers' }, + us: { status: 'yes', note: 'Tasks can link to and block each other' }, + gastown: { status: 'partial', note: 'Task deps + grouped work' }, + paperclip: { status: 'yes', note: 'Goals, parent tasks, blockers' }, cursor: { status: 'no' }, claudeCli: { status: 'yes', note: 'Shared task list' }, }, { feature: t('comparison.features.sessionAnalysis'), - us: { status: 'yes', note: 'Task logs + token tracking' }, - gastown: { status: 'partial', note: 'Session recall, feed, OTEL' }, + us: { status: 'yes', note: 'Task logs + token usage' }, + gastown: { status: 'partial', note: 'Session recall, feed, metrics' }, paperclip: { status: 'partial', note: 'Run transcripts + cost audit' }, cursor: { status: 'no' }, claudeCli: { status: 'partial', note: 'Usage command, no UI' }, @@ -80,16 +80,16 @@ const rows = computed(() => [ }, { feature: t('comparison.features.fullAutonomy'), - us: { status: 'yes', note: 'Create, assign, review end-to-end' }, - gastown: { status: 'yes', note: 'Mayor, convoys, recovery' }, - paperclip: { status: 'yes', note: 'Heartbeats + governance' }, + us: { status: 'yes', note: 'Plan, assign, work, and review' }, + gastown: { status: 'yes', note: 'Coordinator, grouped work, recovery' }, + paperclip: { status: 'yes', note: 'Wake-up runs + governance' }, cursor: { status: 'partial', note: 'Background agents, not teams' }, claudeCli: { status: 'yes', note: 'Experimental CLI teams' }, }, { feature: t('comparison.features.taskDeps'), - us: { status: 'yes', note: 'Guaranteed ordering' }, - gastown: { status: 'yes', note: 'DAG waves via Beads' }, + us: { status: 'yes', note: 'Tasks wait for blockers automatically' }, + gastown: { status: 'yes', note: 'Dependency waves' }, paperclip: { status: 'yes', note: 'Blockers + execution locks' }, cursor: { status: 'no' }, claudeCli: { status: 'yes', note: 'Team task deps, no UI' }, @@ -97,7 +97,7 @@ const rows = computed(() => [ { feature: t('comparison.features.reviewWorkflow'), us: { status: 'yes', note: 'Agents review each other' }, - gastown: { status: 'partial', note: 'Refinery merge queue' }, + gastown: { status: 'partial', note: 'Merge queue' }, paperclip: { status: 'yes', note: 'Approvals + governance' }, cursor: { status: 'partial', note: 'PR/BugBot only' }, claudeCli: { status: 'yes', note: 'Team review, no UI' }, @@ -105,8 +105,8 @@ const rows = computed(() => [ { feature: t('comparison.features.zeroSetup'), us: { status: 'yes', note: 'Guided runtime setup' }, - gastown: { status: 'no', note: 'Go/Git/Dolt/Beads/tmux' }, - paperclip: { status: 'partial', note: 'npx + embedded Postgres' }, + gastown: { status: 'no', note: 'Manual CLI stack' }, + paperclip: { status: 'partial', note: 'npx + local database' }, cursor: { status: 'yes' }, claudeCli: { status: 'partial', note: 'CLI + env flag' }, }, @@ -121,8 +121,8 @@ const rows = computed(() => [ { feature: t('comparison.features.execLog'), us: { status: 'yes', note: 'Tool calls, reasoning, timeline' }, - gastown: { status: 'partial', note: 'Feed, OTEL, dashboard' }, - paperclip: { status: 'yes', note: 'Run transcripts + ledger' }, + gastown: { status: 'partial', note: 'Feed, metrics, dashboard' }, + paperclip: { status: 'yes', note: 'Run transcripts + audit log' }, cursor: { status: 'partial', note: 'Agent chat + terminal' }, claudeCli: { status: 'no' }, }, @@ -134,6 +134,14 @@ const rows = computed(() => [ cursor: { status: 'partial', note: 'Native terminal only' }, claudeCli: { status: 'no' }, }, + { + feature: t('comparison.features.runtimeLoad'), + us: { status: 'yes', note: 'CPU/RAM history for each live teammate' }, + gastown: { status: 'partial', note: 'Activity/health, not CPU/RAM' }, + paperclip: { status: 'partial', note: 'Run status/cost, not CPU/RAM' }, + cursor: { status: 'no', note: 'Remote agent/terminal only' }, + claudeCli: { status: 'no' }, + }, { feature: t('comparison.features.perTaskReview'), us: { status: 'yes', note: 'Accept / reject / comment' }, @@ -147,7 +155,7 @@ const rows = computed(() => [ us: { status: 'yes', note: 'Per-action approvals + notifications' }, gastown: { status: 'yes', note: 'Gates, escalation, recovery' }, paperclip: { status: 'yes', note: 'Board approvals, pause, terminate' }, - cursor: { status: 'partial', note: 'BG agents auto-run commands' }, + cursor: { status: 'partial', note: 'Background agents auto-run commands' }, claudeCli: { status: 'yes', note: 'Permissions + hooks' }, }, { @@ -160,12 +168,44 @@ const rows = computed(() => [ }, { feature: t('comparison.features.multiAgent'), - us: { status: 'yes', note: 'Claude, Codex + OpenCode teammates' }, - gastown: { status: 'yes', note: 'Claude, Codex, Gemini, Copilot + more' }, - paperclip: { status: 'yes', note: 'BYO agents: Claude, Codex, Cursor/OpenCode, HTTP' }, - cursor: { status: 'partial', note: 'Multi-model agents, no team backend' }, + us: { status: 'yes', note: 'Claude, Codex, and OpenCode in one team' }, + gastown: { status: 'yes', note: 'Many providers, terminal-first' }, + paperclip: { status: 'yes', note: 'Bring your own agents/runtimes' }, + cursor: { status: 'partial', note: 'Multi-model agents, no shared team' }, claudeCli: { status: 'partial', note: 'Claude-only experimental teams' }, }, + { + feature: t('comparison.features.liveWorkGraph'), + us: { status: 'yes', note: 'Teammates, tasks, blockers, handoffs, activity, logs' }, + gastown: { status: 'partial', note: 'Agent tree + feed panels' }, + paperclip: { status: 'partial', note: 'Org chart/status, not a task/log map' }, + cursor: { status: 'no' }, + claudeCli: { status: 'no' }, + }, + { + feature: t('comparison.features.liveTeam'), + us: { status: 'yes', note: 'Watch teammates work and message them directly' }, + gastown: { status: 'partial', note: 'Terminal-based agent sessions' }, + paperclip: { status: 'partial', note: 'Agents wake up for runs, then sleep' }, + cursor: { status: 'partial', note: 'Background agents per task' }, + claudeCli: { status: 'partial', note: 'CLI teams, no desktop view' }, + }, + { + feature: t('comparison.features.teamWorkspace'), + us: { status: 'yes', note: 'Tasks, logs, Kanban, review, and teammates in one app' }, + gastown: { status: 'partial', note: 'Mail/feed/dashboard across tools' }, + paperclip: { status: 'partial', note: 'Board + transcripts, less live teammate view' }, + cursor: { status: 'partial', note: 'IDE chats/tasks, not team view' }, + claudeCli: { status: 'no', note: 'No desktop UI' }, + }, + { + feature: t('comparison.features.launchProof'), + us: { status: 'yes', note: 'Know who started, who is stuck, and who replied' }, + gastown: { status: 'partial', note: 'Session health, less clear message status' }, + paperclip: { status: 'partial', note: 'Run status, not live teammate status' }, + cursor: { status: 'no' }, + claudeCli: { status: 'partial', note: 'CLI mailbox, no visual status' }, + }, { feature: t('comparison.features.orgGovernance'), us: { status: 'partial', note: 'Roles + approvals, no org chart' }, @@ -214,12 +254,25 @@ const sourceLinks = [ label: 'Gastown scheduler', href: 'https://github.com/gastownhall/gastown/blob/main/docs/design/scheduler.md', }, + { + label: 'Gastown dashboard source', + href: 'https://github.com/gastownhall/gastown/blob/main/internal/web/templates/convoy.html', + }, { label: 'Gastown release', href: 'https://github.com/gastownhall/gastown/releases/tag/v1.1.0' }, { label: 'Paperclip README', href: 'https://github.com/paperclipai/paperclip' }, { label: 'Paperclip adapters', href: 'https://github.com/paperclipai/paperclip/blob/master/docs/adapters/overview.md', }, + { + label: 'Paperclip heartbeat protocol', + href: 'https://github.com/paperclipai/paperclip/blob/master/docs/guides/agent-developer/heartbeat-protocol.md', + }, + { label: 'Paperclip org chart', href: 'https://paperclip.inc/docs/guides/board-operator/org-structure/' }, + { + label: 'Paperclip OrgChart source', + href: 'https://github.com/paperclipai/paperclip/blob/master/ui/src/pages/OrgChart.tsx', + }, { label: 'Paperclip budgets', href: 'https://github.com/paperclipai/paperclip/blob/master/docs/guides/board-operator/costs-and-budgets.md', @@ -236,7 +289,7 @@ const sourceLinks = [ label: 'Paperclip work products', href: 'https://github.com/paperclipai/paperclip/blob/master/packages/shared/src/validators/work-product.ts', }, - { label: 'Paperclip release', href: 'https://github.com/paperclipai/paperclip/releases/tag/v2026.513.0' }, + { label: 'Paperclip release', href: 'https://github.com/paperclipai/paperclip/releases/tag/v2026.517.0' }, { label: 'Cursor Background Agents', href: 'https://docs.cursor.com/en/background-agents' }, { label: 'Cursor Diffs & Review', href: 'https://docs.cursor.com/en/agent/review' }, { label: 'Cursor Bugbot', href: 'https://docs.cursor.com/en/bugbot' }, @@ -400,7 +453,7 @@ function getStatusIcon(status: string): string {

- Fact sources checked on May 16, 2026: + Fact sources checked on May 18, 2026: