@taskless-app/swarm 0.2.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -0
- package/dist/cli.js +2921 -391
- package/dist/overmind.js +9328 -2806
- package/package.json +19 -19
- package/roles/README.md +31 -0
- package/roles/drone/.claude-plugin/plugin.json +9 -0
- package/roles/drone/skills/swarm-await-process/SKILL.md +61 -0
- package/roles/drone/skills/swarm-merge-main/SKILL.md +68 -0
- package/roles/drone/skills/swarm-save-often/SKILL.md +68 -0
- package/roles/drone/skills/swarm-verify-green/SKILL.md +66 -0
- package/roles/drone/skills/systematic-debugging/SKILL.md +296 -0
- package/roles/drone/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/roles/drone/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/roles/drone/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/roles/drone/skills/systematic-debugging/find-polluter.sh +63 -0
- package/roles/drone/skills/systematic-debugging/root-cause-tracing.md +169 -0
package/README.md
CHANGED
|
@@ -34,6 +34,89 @@ swarm --help # список остальных коман
|
|
|
34
34
|
|
|
35
35
|
Полный гайд по настройке и запуску роя — на [taskless.ru](https://taskless.ru).
|
|
36
36
|
|
|
37
|
+
## Windows
|
|
38
|
+
|
|
39
|
+
Рой работает на Windows, но **рекомендуемый способ — WSL2**: там он ведёт себя ровно
|
|
40
|
+
как на macOS/Linux. Нативная Windows проверена вживую 02–03.08.2026 (Windows 11 Pro),
|
|
41
|
+
рой поднимается и доводит задачи до конца, но у неё есть особенности:
|
|
42
|
+
|
|
43
|
+
- `ps` и `lsof` на Windows нет. Демон берёт снапшот процессов через
|
|
44
|
+
`Get-CimInstance Win32_Process` (нужен PowerShell в `PATH`) и гасит дерево процессов
|
|
45
|
+
через `taskkill /T /F` — групповых сигналов (`kill(-pid)`) Windows не умеет.
|
|
46
|
+
У `Win32_Process` нет рабочего каталога процесса, поэтому процессы worktree
|
|
47
|
+
опознаются по командной строке и по родству, а не по `cwd`, — детект чуть грубее.
|
|
48
|
+
- **Длинные пути.** Демон включает `core.longpaths=true` для рабочего репозитория сам.
|
|
49
|
+
Без него `git worktree remove` падает `Filename too long` на `node_modules`.
|
|
50
|
+
- **Бинарь `claude`.** `spawn` на Windows ищет исполняемый файл по `PATHEXT`, поэтому
|
|
51
|
+
bash-обёртка `~/bin/claude` без расширения ему не видна. Демон сам находит
|
|
52
|
+
`claude.exe` в `%APPDATA%\Claude\claude-code\<версия>` и в MSIX-копии под
|
|
53
|
+
`%LOCALAPPDATA%\Packages\Claude*`. Нестандартная установка — укажите путь явно:
|
|
54
|
+
`SWARM_CLAUDE_BIN=D:\path\to\claude.exe`.
|
|
55
|
+
- **Docker Desktop** вызовы `docker ps` может подвешивать, пока поднимается, — и вместе
|
|
56
|
+
с ними тик демона. Для тестов на фейк-базе Docker дронам не нужен вовсе.
|
|
57
|
+
|
|
58
|
+
## Лимит дронов: машина + проект
|
|
59
|
+
|
|
60
|
+
`maxDrones` — двухуровневый: личный (`uiPrefs.swarm.maxDrones` в профиле — «Рой»
|
|
61
|
+
в настройках Taskless) — жёсткий потолок дронов **этой машины**, физическая
|
|
62
|
+
ёмкость железа; проектный (`swarmConfig.maxDrones`, `set_project_swarm`) — квота
|
|
63
|
+
**внутри** машинного капа, сколько из этих дронов одновременно может занять
|
|
64
|
+
один проект. Оба подхватываются без рестарта демона.
|
|
65
|
+
|
|
66
|
+
Демон = машина: кап и счётчик активных дронов считаются **по Taskless-аккаунту**,
|
|
67
|
+
которым демон залогинен (`swarm login`), а не по физическому железу напрямую.
|
|
68
|
+
Если поднимаете второй демон на выделенном сервере отдельного проекта и не
|
|
69
|
+
хотите, чтобы он делил кап с ноутбуком оператора — заводите ему **отдельный
|
|
70
|
+
Taskless-аккаунт** и логиньте под ним. Один и тот же аккаунт на двух машинах
|
|
71
|
+
делит один кап и один счётчик дронов (они реально соревнуются за слоты); разные
|
|
72
|
+
аккаунты — полностью независимые капы, без единой правки конфига.
|
|
73
|
+
|
|
74
|
+
## Несколько машин: закрепить прогон
|
|
75
|
+
|
|
76
|
+
Один аккаунт может держать демона на нескольких машинах (ноутбук + рабочая станция).
|
|
77
|
+
Очередь у них общая: свободный прогон берёт тот демон, у которого репозиторий прогона
|
|
78
|
+
есть локально. Когда работа обязана идти именно на конкретной машине — закрепите
|
|
79
|
+
прогон за ней:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
swarm hosts # какие машины есть: имя, пульс, id
|
|
83
|
+
swarm spawn PRJ-42 --host Hunt-gaming-laptop # закрепить прогон за машиной (имя или id)
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Закреплённый прогон возьмёт **только** демон этой машины — остальные его не видят.
|
|
87
|
+
Если машина не на связи, прогон её ждёт и на другую **не уезжает**: это осознанный
|
|
88
|
+
выбор оператора, а не сбой (в дашборде `/swarm` видно, какую машину он ждёт и что
|
|
89
|
+
она молчит). Снять закрепление — выбрать «Любая машина» в модалке прогона или
|
|
90
|
+
`swarm_run_upsert{runId, hostId:null}`.
|
|
91
|
+
|
|
92
|
+
Без `--host` всё работает как раньше: прогон свободен, а машина, которая его взяла и
|
|
93
|
+
потом замолчала на 15 минут, отпускает его обратно в очередь.
|
|
94
|
+
|
|
95
|
+
## Логи с удалённой машины
|
|
96
|
+
|
|
97
|
+
Когда дрон спотыкается, нужен сырой лог — а он лежит файлом на машине демона
|
|
98
|
+
(`~/.taskless-swarm/run-logs/<id>/`). Просить владельца машины показать хвост больше
|
|
99
|
+
не нужно: **MCP-тулы отдают его сами**, независимо от того, где выполнялся прогон.
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
swarm_run_log(runId, lines) # хвост лога прогона (stdout + stderr дрона)
|
|
103
|
+
swarm_daemon_log(hostId, lines) # хвост лога самого демона — когда дрон не стартовал вовсе
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Прод к демону за домашним роутером не стучится, поэтому запрос уезжает **командой в
|
|
107
|
+
ответе на пульс** — ответ приходит со следующим пульсом (~15с), тул ждёт его сам.
|
|
108
|
+
Отдаётся только ХВОСТ (потолок и по строкам, и по байтам) и только транзитом: в базе
|
|
109
|
+
трекера лог не оседает, строка обмена умирает на чтении. Чужие логи недоступны —
|
|
110
|
+
и запрос, и доставка скоупятся владельцем машины.
|
|
111
|
+
|
|
112
|
+
Лог самого демона демон не заводит (пишет в stdout) — заведите его перенаправлением
|
|
113
|
+
или укажите свой путь:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
swarm start --repo <путь> >> ~/.taskless-swarm/overmind.log 2>&1 # путь по умолчанию
|
|
117
|
+
SWARM_DAEMON_LOG=/var/log/overmind.log swarm start --repo <путь> # свой путь
|
|
118
|
+
```
|
|
119
|
+
|
|
37
120
|
## Правообладатель и лицензия
|
|
38
121
|
|
|
39
122
|
© 2026 Ilya Smurov. Проприетарное коммерческое ПО — см. [LICENSE](./LICENSE).
|