Skip to content

Commit 279439d

Browse files
committed
merge: sync dev into main
# Conflicts: # src/renderer/store/utils/pathResolution.ts # src/renderer/utils/claudeMdTracker.ts # src/renderer/utils/contextTracker.ts # test/features/recent-projects/renderer/utils/recentProjectOpenHistory.test.ts # test/renderer/components/chat/SessionContextPanel/buildDirectoryTree.test.ts # test/renderer/components/team/dialogs/projectPathOptions.test.ts # test/renderer/utils/claudeMdTracker.test.ts # test/shared/utils/platformPath.test.ts
2 parents 6d93526 + 3fa4dce commit 279439d

12 files changed

Lines changed: 370 additions & 26 deletions

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,10 +191,10 @@ For feature architecture and implementation guidance:
191191
| **Git worktree isolation** | ✅ Optional | ✅ Core primitive | ✅ Worktrees / branches | ⚠️ Background branches/VMs | ⚠️ Manual worktrees |
192192
| **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 |
193193
| **Org chart / governance** | ⚠️ Roles + approvals, no org chart | ⚠️ Roles + escalation | ✅ Org chart + board governance | ⚠️ Team admin only ||
194-
| **Budget controls** | ⚠️ Cost/token visibility, no hard caps | ⚠️ Cost tiers + digest, no hard caps | ✅ Per-agent budgets + hard stops | ⚠️ Usage + BG spend limits | ⚠️ `/cost` + workspace limits |
194+
| **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 |
195195
| **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 |
196196

197-
Fact sources checked on May 5, 2026: [detailed research notes](docs/research/gastown-paperclip-comparison-2026-05-05.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), [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), [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).
197+
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).
198198

199199
---
200200

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
# Gastown и Paperclip comparison для лендинга и README
2+
3+
> Дата проверки: 2026-05-16
4+
> Цель: публичная таблица `Agent Teams | Gastown | Paperclip | Cursor | Claude Code CLI` без угадываний по конкурентам.
5+
> Метод: `gh repo view`, `gh api` по первичным GitHub-файлам, официальные docs Cursor и Claude Code, страница Claude pricing.
6+
7+
## Snapshot
8+
9+
| Проект | Позиционирование | Статус на 2026-05-16 | Лицензия |
10+
|---|---|---:|---|
11+
| **Gastown** | multi-agent workspace manager для coding agents | `15,228★`, latest `v1.1.0` от `2026-05-07`, push `2026-05-15` | MIT |
12+
| **Paperclip** | control plane для autonomous AI companies | `65,796★`, latest `v2026.513.0` от `2026-05-13`, push `2026-05-16` | MIT |
13+
14+
## Что изменилось после проверки 2026-05-05
15+
16+
- **Gastown**: свежий GitHub snapshot изменился с `v1.0.1` на `v1.1.0`; README/provider/scheduler факты для публичной таблицы остались валидными.
17+
- **Paperclip**: свежий GitHub snapshot изменился с `v2026.428.0` на `v2026.513.0`; README/adapters/budget/runtime/Kanban facts остались валидными.
18+
- **Claude Code costs**: официальный cost guide теперь называет `/usage` как команду для session token/cost tracking. Поэтому публичная строка `Budget controls` для Claude Code CLI обновлена с `/cost + workspace limits` на `/usage + workspace limits`.
19+
- **Claude pricing**: Team pricing page явно включает Claude Code в Team seats; публичная строка `Claude plan or API usage` остаётся корректной.
20+
- **Cursor**: official docs по Background Agents, Diffs & Review, Bugbot и usage/pricing по-прежнему поддерживают текущие формулировки таблицы. Background Agents остаются remote/async agents on separate branches/VMs with auto-run terminal commands; Bugbot остаётся PR-review product with its own pricing.
21+
22+
## Проверенные публичные формулировки
23+
24+
### Gastown
25+
26+
- README по-прежнему позиционирует Gas Town как workspace manager для Claude Code, GitHub Copilot, Codex, Gemini и других coding agents.
27+
- Provider guide по-прежнему описывает tmux/provider contract для Claude, Gemini, Codex, Cursor, AMP, OpenCode, Copilot и других.
28+
- Scheduler docs по-прежнему подтверждают `scheduler.max_polecats`, deferred dispatch, capacity governor, pause/resume и daemon dispatch cycle.
29+
- Dashboard остаётся monitoring view for agents, convoys, hooks, queues, issues and escalations, а не Kanban product.
30+
- Refinery merge queue есть, но это не hunk-level diff review UI.
31+
32+
Публичная оценка не меняется:
33+
34+
- `Task dependencies` - `✅ Beads DAG waves`
35+
- `Kanban board` - `❌ Dashboard, not Kanban`
36+
- `Per-task code review` - `⚠️ Merge queue, no diff UI`
37+
- `Budget controls` - `⚠️ Cost tiers + digest, no hard caps`
38+
39+
### Paperclip
40+
41+
- README по-прежнему описывает org charts, budgets, governance, goal alignment and agent coordination.
42+
- Adapter overview подтверждает Claude Local, Codex Local, Gemini experimental, OpenCode Local, Cursor, OpenClaw Gateway, Process and HTTP adapters.
43+
- Budget docs подтверждают per-agent monthly budgets, warning threshold at 80%, hard stop at 100%, auto-pause and no more heartbeats.
44+
- Runtime services docs подтверждают manual UI-managed services/jobs and execution workspaces with isolated checkout/branch/runtime state.
45+
- Kanban source по-прежнему содержит `backlog`, `todo`, `in_progress`, `in_review`, `blocked`, `done`, `cancelled` and `@dnd-kit`.
46+
- Work product validators подтверждают `preview_url`, `runtime_service`, `pull_request`, `branch`, `commit`, `artifact`, `document` and review statuses.
47+
48+
Публичная оценка не меняется:
49+
50+
- `Kanban board` - `✅ 7 columns, drag-and-drop`
51+
- `Per-task code review` - `⚠️ PR/work products, no inline diff`
52+
- `Hunk-level review` - `❌ Bring your own review`
53+
- `Budget controls` - `✅ Per-agent budgets + hard stops`
54+
55+
### Cursor
56+
57+
- Background Agents are asynchronous remote agents that edit/run code in isolated machines, use GitHub branches, support follow-ups and can auto-run terminal commands.
58+
- Diffs & Review still supports diff review with accept/reject flows and selective acceptance.
59+
- Bugbot still focuses on PR review and comments with explanations/fix suggestions; pricing remains separate from normal Cursor subscriptions.
60+
- Usage/pricing docs still describe Free + paid usage, included agent usage by plan, dashboard token/usage breakdowns, background-agent access and spend limits.
61+
62+
Публичная оценка не меняется:
63+
64+
- `Full autonomy` - `⚠️ Background agents, not teams`
65+
- `Hunk-level review` - ``
66+
- `Review workflow` - `⚠️ PR/BugBot only`
67+
- `Flexible autonomy` - `⚠️ BG agents auto-run commands`
68+
- `Price` - `Free + paid usage`
69+
70+
### Claude Code CLI
71+
72+
- Agent teams are still experimental and disabled by default through `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`.
73+
- Official docs still confirm shared task list, mailbox, direct teammate messaging, task dependencies, plan approval requests, quality-gate hooks and local team/task storage.
74+
- Agent teams require Claude Code `v2.1.32` or later according to the docs.
75+
- Worktrees remain an official workflow for isolated sessions, but this is not the same as a product-level worktree strategy UI.
76+
- Cost docs now use `/usage` for detailed token usage statistics, plus workspace spend limits and usage reporting in Console for API users.
77+
78+
Публичная оценка после свежей проверки:
79+
80+
- `Agent-to-agent messaging` - `✅ Team mailbox, no UI`
81+
- `Linked tasks` - `✅ Shared task list`
82+
- `Task dependencies` - `✅ Team task deps, no UI`
83+
- `Budget controls` - `⚠️ /usage + workspace limits`
84+
- `Multi-agent backend` - `⚠️ Claude-only experimental teams`
85+
86+
## Источники
87+
88+
- Gastown repo: <https://github.com/gastownhall/gastown>
89+
- Gastown v1.1.0: <https://github.com/gastownhall/gastown/releases/tag/v1.1.0>
90+
- Gastown provider guide: <https://github.com/gastownhall/gastown/blob/main/docs/agent-provider-integration.md>
91+
- Gastown scheduler docs: <https://github.com/gastownhall/gastown/blob/main/docs/design/scheduler.md>
92+
- Paperclip repo: <https://github.com/paperclipai/paperclip>
93+
- Paperclip v2026.513.0: <https://github.com/paperclipai/paperclip/releases/tag/v2026.513.0>
94+
- Paperclip adapters: <https://github.com/paperclipai/paperclip/blob/master/docs/adapters/overview.md>
95+
- Paperclip costs and budgets docs: <https://github.com/paperclipai/paperclip/blob/master/docs/guides/board-operator/costs-and-budgets.md>
96+
- Paperclip runtime services docs: <https://github.com/paperclipai/paperclip/blob/master/docs/guides/board-operator/execution-workspaces-and-runtime-services.md>
97+
- Paperclip Kanban source: <https://github.com/paperclipai/paperclip/blob/master/ui/src/components/KanbanBoard.tsx>
98+
- Paperclip work products source: <https://github.com/paperclipai/paperclip/blob/master/packages/shared/src/validators/work-product.ts>
99+
- Cursor Background Agents: <https://docs.cursor.com/en/background-agents>
100+
- Cursor Diffs & Review: <https://docs.cursor.com/en/agent/review>
101+
- Cursor Bugbot: <https://docs.cursor.com/en/bugbot>
102+
- Cursor usage/pricing: <https://docs.cursor.com/en/account/usage>
103+
- Claude Code agent teams: <https://code.claude.com/docs/en/agent-teams>
104+
- Claude Code subagents: <https://code.claude.com/docs/en/sub-agents>
105+
- Claude Code common workflows: <https://code.claude.com/docs/en/common-workflows>
106+
- Claude Code costs: <https://code.claude.com/docs/en/costs>
107+
- Claude pricing: <https://claude.com/pricing>

docs/research/real-competitors-comparison.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Реальные конкуренты для Comparison в README
22

3-
> ⚠️ Update 2026-05-05: публичная таблица README/landing теперь сравнивает нас с `Gastown` и `Paperclip`, а не с `Claude Code Agent Teams` и `GoClaw`. Актуальная research-опора: [gastown-paperclip-comparison-2026-05-05.md](gastown-paperclip-comparison-2026-05-05.md). Ниже оставлен старый broader draft как исторический контекст.
3+
> ⚠️ Update 2026-05-16: публичная таблица README/landing теперь сравнивает нас с `Gastown` и `Paperclip`, а не с `Claude Code Agent Teams` и `GoClaw`. Актуальная research-опора: [gastown-paperclip-comparison-2026-05-16.md](gastown-paperclip-comparison-2026-05-16.md). Ниже оставлен старый broader draft как исторический контекст.
44
55
> Дата проверки: 2026-04-13
66
> Статус: внутренний comparison draft

package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@
131131
"@radix-ui/react-hover-card": "^1.1.15",
132132
"@radix-ui/react-label": "^2.1.8",
133133
"@radix-ui/react-popover": "^1.1.15",
134+
"@radix-ui/react-presence": "^1.1.5",
134135
"@radix-ui/react-select": "^2.2.6",
135136
"@radix-ui/react-slot": "^1.2.4",
136137
"@radix-ui/react-tabs": "^1.1.13",
@@ -350,7 +351,10 @@
350351
"electron",
351352
"node-pty",
352353
"cpu-features"
353-
]
354+
],
355+
"patchedDependencies": {
356+
"@radix-ui/react-presence@1.1.5": "patches/@radix-ui__react-presence@1.1.5.patch"
357+
}
354358
},
355359
"knip": {
356360
"entry": [
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
diff --git a/dist/index.js b/dist/index.js
2+
index 944abc2652716a5047360c8abc2d48e700a3f3f8..e0d98a35aead8e057a304734627e0022643cb71c 100644
3+
--- a/dist/index.js
4+
+++ b/dist/index.js
5+
@@ -62,6 +62,8 @@ var Presence = (props) => {
6+
Presence.displayName = "Presence";
7+
function usePresence(present) {
8+
const [node, setNode] = React2.useState();
9+
+ const nodeRef = React2.useRef();
10+
+ const nodeCleanupGenerationRef = React2.useRef(0);
11+
const stylesRef = React2.useRef(null);
12+
const prevPresentRef = React2.useRef(present);
13+
const prevAnimationNameRef = React2.useRef("none");
14+
@@ -146,8 +148,27 @@ function usePresence(present) {
15+
return {
16+
isPresent: ["mounted", "unmountSuspended"].includes(state),
17+
ref: React2.useCallback((node2) => {
18+
- stylesRef.current = node2 ? getComputedStyle(node2) : null;
19+
- setNode(node2);
20+
+ const syncNode = (nextNode) => {
21+
+ if (nodeRef.current === nextNode) {
22+
+ stylesRef.current = nextNode ? getComputedStyle(nextNode) : null;
23+
+ return;
24+
+ }
25+
+ nodeRef.current = nextNode;
26+
+ stylesRef.current = nextNode ? getComputedStyle(nextNode) : null;
27+
+ setNode(nextNode);
28+
+ };
29+
+ nodeCleanupGenerationRef.current += 1;
30+
+ const cleanupGeneration = nodeCleanupGenerationRef.current;
31+
+ if (node2) {
32+
+ syncNode(node2);
33+
+ return;
34+
+ }
35+
+ queueMicrotask(() => {
36+
+ if (nodeCleanupGenerationRef.current !== cleanupGeneration) {
37+
+ return;
38+
+ }
39+
+ syncNode(null);
40+
+ });
41+
}, [])
42+
};
43+
}
44+
diff --git a/dist/index.mjs b/dist/index.mjs
45+
index 0efe02a3c45790c11f94f71563bf1db7257b799f..67db6319fb2af1008e2da62ec8cdb21e4903ea1e 100644
46+
--- a/dist/index.mjs
47+
+++ b/dist/index.mjs
48+
@@ -26,6 +26,8 @@ var Presence = (props) => {
49+
Presence.displayName = "Presence";
50+
function usePresence(present) {
51+
const [node, setNode] = React2.useState();
52+
+ const nodeRef = React2.useRef();
53+
+ const nodeCleanupGenerationRef = React2.useRef(0);
54+
const stylesRef = React2.useRef(null);
55+
const prevPresentRef = React2.useRef(present);
56+
const prevAnimationNameRef = React2.useRef("none");
57+
@@ -110,8 +112,27 @@ function usePresence(present) {
58+
return {
59+
isPresent: ["mounted", "unmountSuspended"].includes(state),
60+
ref: React2.useCallback((node2) => {
61+
- stylesRef.current = node2 ? getComputedStyle(node2) : null;
62+
- setNode(node2);
63+
+ const syncNode = (nextNode) => {
64+
+ if (nodeRef.current === nextNode) {
65+
+ stylesRef.current = nextNode ? getComputedStyle(nextNode) : null;
66+
+ return;
67+
+ }
68+
+ nodeRef.current = nextNode;
69+
+ stylesRef.current = nextNode ? getComputedStyle(nextNode) : null;
70+
+ setNode(nextNode);
71+
+ };
72+
+ nodeCleanupGenerationRef.current += 1;
73+
+ const cleanupGeneration = nodeCleanupGenerationRef.current;
74+
+ if (node2) {
75+
+ syncNode(node2);
76+
+ return;
77+
+ }
78+
+ queueMicrotask(() => {
79+
+ if (nodeCleanupGenerationRef.current !== cleanupGeneration) {
80+
+ return;
81+
+ }
82+
+ syncNode(null);
83+
+ });
84+
}, [])
85+
};
86+
}

0 commit comments

Comments
 (0)