@rt-tools/agent-kit 0.20.0 → 0.22.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.
Files changed (78) hide show
  1. package/assets/checks/check-reuse.mjs +11 -1
  2. package/assets/checks/check-specs.mjs +8 -23
  3. package/assets/checks/signals/core.json +12 -2
  4. package/assets/checks/signals.mjs +17 -0
  5. package/assets/checks/spec-proposed.mjs +122 -0
  6. package/assets/hooks/browser-guard-device-id.sh +3 -0
  7. package/assets/hooks/browser-guard-no-asking.sh +3 -0
  8. package/assets/hooks/browser-guard-no-listing.sh +3 -0
  9. package/assets/hooks/browser-guard-no-other-drivers.sh +3 -0
  10. package/assets/hooks/browser-guard-require-select.sh +3 -0
  11. package/assets/hooks/claim-guard.sh +4 -0
  12. package/assets/hooks/conscience-guard.sh +4 -0
  13. package/assets/hooks/deny-tail.sh +12 -0
  14. package/assets/hooks/dev-server-guard.sh +3 -0
  15. package/assets/hooks/docs-guard.sh +4 -11
  16. package/assets/hooks/exam-guard.sh +3 -0
  17. package/assets/hooks/git-guard-delivery.sh +4 -4
  18. package/assets/hooks/git-guard-main.sh +4 -9
  19. package/assets/hooks/git-guard-push-tests.sh +3 -0
  20. package/assets/hooks/grill-gate.sh +5 -0
  21. package/assets/hooks/guard-note.sh +45 -0
  22. package/assets/hooks/handoff-entry-guard.sh +3 -0
  23. package/assets/hooks/handoff-write.sh +58 -7
  24. package/assets/hooks/hook-input.sh +1 -0
  25. package/assets/hooks/override-write-guard.sh +4 -4
  26. package/assets/hooks/postmortem-guard.sh +4 -0
  27. package/assets/hooks/proposal-guard.sh +11 -0
  28. package/assets/hooks/prose-style-guard.sh +3 -0
  29. package/assets/hooks/qa-dataid-guard.sh +3 -0
  30. package/assets/hooks/rerun-guard.sh +3 -0
  31. package/assets/hooks/reuse-first-guard.sh +3 -0
  32. package/assets/hooks/rule-article.sh +1 -1
  33. package/assets/hooks/rule-source-guard.sh +4 -4
  34. package/assets/hooks/sql-guard.sh +3 -0
  35. package/assets/hooks/task-context-load.sh +1 -1
  36. package/assets/hooks/task-flow-draft-guard.sh +3 -0
  37. package/assets/hooks/task-flow-guard.sh +3 -0
  38. package/assets/hooks/turn-entry-load.sh +27 -2
  39. package/assets/hooks/turn-exit-guard.sh +4 -0
  40. package/assets/hooks/waiting-turn-guard.sh +32 -10
  41. package/assets/hooks/window-fill-guard.sh +3 -0
  42. package/assets/hooks/work-start-guard.sh +5 -0
  43. package/assets/hooks/write-targets.sh +59 -10
  44. package/assets/laws/delivery.md +5 -0
  45. package/assets/laws/frontend-application.md +10 -0
  46. package/assets/laws/work-conduct.md +8 -0
  47. package/assets/patterns/browser-verification-stand.md +24 -9
  48. package/assets/patterns/git-workflow-pr.github.md +29 -22
  49. package/assets/patterns/spec-driven-domain.md +5 -0
  50. package/assets/patterns/spec-driven-rule.md +41 -1
  51. package/assets/patterns/task-flow-archive.md +12 -0
  52. package/assets/patterns/task-flow-handoff.md +14 -1
  53. package/assets/patterns/task-flow-resume.md +11 -0
  54. package/assets/patterns/task-flow-start.md +40 -40
  55. package/assets/patterns/testing-e2e.md +15 -0
  56. package/assets/patterns/testing-unit.md +13 -0
  57. package/assets/pitfalls/git-workflow.github.md +13 -0
  58. package/assets/pitfalls/spec-driven.md +20 -0
  59. package/assets/pitfalls/task-flow.md +78 -48
  60. package/assets/rules/git-workflow.azure.md +5 -0
  61. package/assets/rules/git-workflow.github.md +26 -23
  62. package/assets/rules/git-workflow.gitlab.md +5 -0
  63. package/assets/rules/spec-driven.md +23 -24
  64. package/assets/rules/turn-conduct.md +13 -15
  65. package/assets/rules/turn-entry.md +6 -4
  66. package/assets/rules/typescript-conventions.md +7 -0
  67. package/assets/skills/agent-kit-extend.md +11 -0
  68. package/assets/skills/agent-kit.md +12 -2
  69. package/lib/commands.d.ts.map +1 -1
  70. package/lib/commands.js +36 -1
  71. package/lib/commands.js.map +1 -1
  72. package/lib/observations.d.ts +13 -1
  73. package/lib/observations.d.ts.map +1 -1
  74. package/lib/observations.js +7 -1
  75. package/lib/observations.js.map +1 -1
  76. package/package.json +1 -1
  77. package/rt-tools-agent-kit-0.22.0.tgz +0 -0
  78. package/rt-tools-agent-kit-0.20.0.tgz +0 -0
@@ -58,6 +58,26 @@
58
58
  и число это падает по мере того, как их читают. Счёт при этом грубый: строка, показанная
59
59
  образцом внутри ограды, считается наравне с настоящей — тот, кто учит её писать, попадает
60
60
  в число объявивших.
61
+ - **Закон, которого не назвало ни одно правило, не судит никто, и виден он только счётом.**
62
+ Статья правила без адреса отбивает сверку спеков — привязка у неё требуется. У статьи закона
63
+ адреса нет по устройству: закон говорит, что должно быть верно, и на код не показывает. Ловить
64
+ это отказом нельзя — закон, которому в этом дереве нечего исполнять, законное состояние, — а
65
+ незамеченным он живёт сколько угодно: две статьи так и легли молча, пока две соседние статьи
66
+ правила отбивали сверку требованием адреса. Судят поэтому два числа рядом: сколько законов в
67
+ каталоге и какие из них ни одно правило не назвало.
68
+
69
+ ```bash
70
+ ls <каталог законов>/*.md | wc -l
71
+ for law in <каталог законов>/*.md; do
72
+ grep -rqlF "constitution/$(basename "$law")" <каталог правил>/*/SKILL.md || echo "$law"
73
+ done
74
+ ```
75
+
76
+ Названный список читается глазами: у закона, который дереву нечего исполнять, это законное
77
+ состояние, а у остальных — забытая половина работы. Счёт грубый и здесь: закон, названный
78
+ правилом в одной строке и не разобранный ни одной его статьёй, в список не попадает —
79
+ связь статьи с правилом держится текстом, а не ключом.
80
+
61
81
  - **Привязка пишется по тексту статьи, а не по смыслу имени гарда.** Гард, чьё имя звучит про то
62
82
  же самое, статью не закрывает: статья перечисляла шесть действий по отдельному слову владельца
63
83
  — коммит, пуш, открытие заявки, запись в вики, заведение задачи, правка закона, — а
@@ -7,6 +7,12 @@
7
7
 
8
8
  ## Ловушки
9
9
 
10
+ - **Задача, отобранная в эпик по своему телу, бывает закрыта до начала работы.** Между заведением
11
+ задачи и её взятием проходят недели, и всё это время дерево правится соседними работами: у двух
12
+ задач одного эпика по три части из четырёх оказались сделанными — тело описывало дерево
13
+ месячной давности. Отбор поэтому начинается с чтения кода, а разбор просьбы называет, что из
14
+ тела задачи в дереве ещё верно.
15
+
10
16
  - **Разрешение владельца, оставленное в репозитории, теряется на каждой новой ветке.** Оно
11
17
  записано номером в файл ветки, а следующая ветка отводится от главной и его не несёт: гард
12
18
  отбивает работу, которую владелец разрешил, — и повторяется это ровно столько раз, сколько
@@ -31,13 +37,13 @@
31
37
  договорённость обязана его пережить: её сценарии получают номера в общей нумерации домена,
32
38
  и на них ссылаются заголовки тестов. Обратное тоже верно — ход работы не кладётся в
33
39
  `proposed/`: спек, в котором завелись шаги, снова становится планом и умирает после мержа.
34
- - **У меню нет строки «вопрос не тот».** Меню годится для выбора значения из закрытого набора;
40
+ - **У меню нет строки «вопрос не тот».** Меню годится там, где выбор действительно закрыт;
35
41
  пока постановка вопроса не подтверждена, отвергнуть её владельцу нечем — он выбирает из
36
- вариантов, выведенных из неверной посылки. Настройки владельца, требующие меню, требование
37
- не снимают: тогда к каждому вопросу добавляется свободный вариант, и он же — единственное
38
- место, где вопрос отвергается целиком. Три вопроса ушли одним меню, у одного постановка была
39
- ложной, и сказать «вопрос не тот» было нечем. Выбор слова, имени и термина узким вопросом не
40
- является никогда.
42
+ вариантов неверной посылки, и выйти из набора может только руками. Настройки владельца,
43
+ требующие меню, требование не снимают: тогда к каждому вопросу добавляется свободный вариант,
44
+ и он же — единственное место, где вопрос отвергается целиком. Три вопроса ушли одним меню, у
45
+ одного постановка была ложной. Там, где под сомнением сама уместность вопроса, его сперва
46
+ проверяют по репликам владельца — и чаще всего не задают.
41
47
  - **Субагент вопросов владельцу не задаёт.** Ни роли, ни конвейер до него не достучатся —
42
48
  они возвращают текст главному агенту. Поэтому разбор ведёт главный агент, а роли стоят по
43
49
  обе стороны от него.
@@ -48,20 +54,17 @@
48
54
  Спрашивают до правки, а не показывают замер после.
49
55
  - **Путь, предложенный человеку, судится числом его шагов и тем, чем ему для этого надо
50
56
  владеть.** Со стороны кода вариант выглядит дешёвым — «меньше путей», «строку запуска не
51
- трогаем», — а человеку он стоит захода на сервер. Однажды рекомендуемым вариантом так стояла
52
- выдача токена, за которой владельцу надо было идти по ssh в работающий контейнер; отбивал
53
- этот вариант он сам. Цена называется со стороны того, кто пойдёт: сколько шагов и что ему для
54
- них нужно. Пересказ действующего порядка без такой оценки владелец читает как одобрение.
57
+ трогаем», — а человеку он стоит захода на сервер: рекомендуемым так стояла выдача токена, за
58
+ которой владельцу надо было идти по ssh в работающий контейнер. Цена называется со стороны
59
+ того, кто пойдёт; пересказ порядка без неё владелец читает как одобрение.
55
60
  - **Эпик по теме читается до того, как решается раскладка.** Замысел эпика держит решения,
56
61
  которые пережили десяток задач, и разведка по коду их не находит: снятое решение следа в
57
62
  дереве не оставляет. Домен, заведённый генератором и снесённый через полчаса, стоял в замысле
58
63
  прямым запретом — но замысел открыли уже после того, как он был заведён во второй раз.
59
64
  - **Работа, которая разбирает чужую папку задачи, разбирает и свою — одним коммитом.** Свою
60
- папку она заводит наравне со всеми: исключения из этого требования нет. Круг, которым
61
- исключение оправдывали, закрывается не отказом от папки, а порядком разбора: последний
62
- коммит снимает обе, и после работы неубранного не остаётся. Однажды такой разбор оставил
63
- свою папку, и на неё пришлось заводить третью задачу — лечится это порядком, а не правом
64
- работать без замысла на диске. Как разобрать две папки — паттерн `task-flow-archive`.
65
+ папку она заводит наравне со всеми, и круг, которым исключение оправдывали, закрывается
66
+ порядком разбора: последний коммит снимает обе. Однажды такой разбор оставил свою папку, и на
67
+ неё пришлось заводить третью задачу. Как разобрать две папки паттерн `task-flow-archive`.
65
68
  - **Слово для нового понятия берётся из `docs/GLOSSARY.md` или заводится там же.** Третий файл
66
69
  папки задачи называется `progress.md`, а не `journal.md`, ровно поэтому: журнал в этом
67
70
  дереве один, и он другой.
@@ -81,13 +84,42 @@
81
84
  задание, он даёт заходу работу, которой владелец не просил. То же с любой репликой без
82
85
  глагола: спросить, что с этим делать, дешевле, чем написать полсотни файлов мимо просьбы.
83
86
 
87
+ - **Признак готовности этапа пишется о своей половине вывода, а не обо всём выводе.** Проверка
88
+ считает всё дерево, а этап правит его часть: «вывод без единой строки долга» не сходится не
89
+ потому, что этап не сделан, а потому, что три строки принадлежат невлитой соседней ветке.
90
+ Признак называет свои строки и своё число, а сказанное обо всём выводе держится до первого
91
+ соседа.
92
+
93
+ - **Копия образца папки задачи несёт шапку раскладки, и первая же правка отбивается гардом.**
94
+ Образец разложен пакетом наравне с остальным разложенным, а гард места правки судит по шапке:
95
+ копия под задачу выглядит разложенным файлом, и отказ называет адрес источника пакета — то
96
+ есть уводит править образец вместо своей копии. Команда заведения задачи шапку снимает сама,
97
+ копирование руками — нет. Правится такая копия только записью заново: правку по месту гард
98
+ отбивает и её.
99
+ - **Имя проекта в признаке готовности этапа спрашивается у сборщика, а не пишется по памяти.**
100
+ На неизвестное имя сборщик отвечает «задач не запущено» и выходит нулём: команда признака не
101
+ прогнала ни одной пробы и промолчала так же, как зелёный прогон. Видно это только по числу
102
+ прогнанных задач, а его никто не читает.
103
+
104
+ - **Этап, закрытый без пуша, гоняет проверки гейта своим последним движением.** Признак этапа
105
+ зовёт свои команды и общих не знает, а гейт краснеет только на отправке: ветка без пушей копит
106
+ красное до первой из них, и промах уезжает на два этапа от места, где его сделали.
107
+
108
+ - **У признака закрытия спрашивают, может ли исполнитель подтвердить его сам.** Признак,
109
+ требующий человека — пароля, кнопки в чужой панели, взгляда владельца, — останавливает работу
110
+ на последнем шаге: сделано всё, а сказать «закрыто» нечем. Спрашивается это при разборе
111
+ просьбы.
112
+
113
+ - **Признак закрытия проверяет исход у той стороны, которая его хранит, а не ответ вызова.**
114
+ Вызов отвечает о себе: ушёл, принят, код нулевой — и всё это верно при том, что записанного
115
+ нет. Восемь задач подряд считали отметку работающей по ответу команды, а она не двигала
116
+ ничего.
117
+
84
118
  - **Своё временное кладётся вне дерева кода — иначе его снятие судится как правка приложения.**
85
- Признак записи, которым гарды судят команду оболочки, считает записью и удаление, и это в нём
86
- нарочно: снятое без замысла не оставляет следа вовсе. Отличить свой временный каталог от
87
- каталога домена признаку нечем — путь у обоих под тем же корнем, — поэтому гард требует
88
- замысла на диске за уборку черновика, к приложению не относящуюся. Каталог для своего
89
- временного называет профиль дерева, и лежит он вне дерева кода; положенный внутрь, он платит
90
- этим отказом при каждой уборке.
119
+ Признак записи считает записью и удаление, и это в нём нарочно: снятое без замысла не
120
+ оставляет следа. Отличить свой временный каталог от каталога домена признаку нечем путь у
121
+ обоих под тем же корнем, — и гард требует замысла за уборку черновика. Каталог называет
122
+ профиль дерева, и лежит он вне дерева кода.
91
123
 
92
124
  - **Тело задачи, написанное вперёд замысла, называет способ, и способ стареет раньше дефекта.**
93
125
  Задача серии заводится за недели до того, как её берут, и к этому дню предложенный ход бывает
@@ -124,10 +156,15 @@
124
156
  подряд не пересилили одну строку на диске. Снимается она тем же ходом, которым владелец
125
157
  ответил, — а не тем, в котором о ней вспомнили.
126
158
 
127
- - **У меню с закрытым набором нет строки «вопрос не тот».** Вариантами вопрос выглядит
128
- разобранным, и владельцу, чтобы отвергнуть саму постановку, приходится выходить из набора
129
- руками. Спрашивают меню то, где выбор действительно закрыт; там, где под сомнением сама
130
- уместность вопроса, его сперва проверяют по репликам владельца и чаще всего не задают.
159
+ - **Очередь работ эпиком не кончается.** Занятый другими исполнителями или законченный эпик
160
+ означает следующую задачу из очереди, а не остановку: «свободных задач эпика нет» ответом на
161
+ «чем заняться» не бывает, потому что отвечает на этот вопрос не эпик, а очередь. Спрашивается
162
+ она командой, а не вспоминается по передаче: утверждение переданного текста описывает то
163
+ дерево и тот день, в котором его писали.
164
+ - **Шаг закрытия работы за взятие следующей задачи не считается.** Перевод закрываемой задачи в
165
+ колонку разбора и снятие её папки — обязательные шаги закрытия, и оба случаются тем же ходом,
166
+ которым открывается заявка. Ход, в котором больше ничего нет, работу не двигает, сколько бы
167
+ команд в нём ни стояло.
131
168
 
132
169
  ## Поведение исполнителя — по разборам происшествий
133
170
 
@@ -183,34 +220,27 @@
183
220
  Отказ при этом уводит править образец пакета вместо копии под задачу.
184
221
  - **Правка по замечаниям идёт без замысла на диске.** Папка разобрана коммитом ветки раньше
185
222
  открытия заявки, и состояния у работы с этой минуты нет: судит её история ветки.
186
- - **Прогон, поставленный раньше дешёвых шагов, съел окно захода.** Потративший его на прогон
187
- упирался в порог заполнения на четырёх строках привязки то есть на работе минут на пять.
188
- - **Граница состояния выглядит законченным куском лучше всякой вехи.** Владельцу отчёт о взятой
189
- задаче неотличим от остановки: названы номер, ветка и колонка, и всё названное правда.
223
+ - **Граница состояния выглядит законченным куском лучше всякой вехи.** Отчёт о взятой задаче
224
+ владельцу неотличим от остановки: номер, ветка и колонка названы, и всё названное правда.
190
225
  - **Заявка на чужом языке.** В дереве, где заявки пишутся на другом языке, чужой заголовок
191
226
  дважды уехал на хостинг, и оба раза до него добрались глазами.
192
- - **Вопрос, утонувший в отчёте.** Владелец трижды переспрашивал, почему работа стоит, и каждый
193
- круг стоил захода обоим.
194
- - **Чужой эпик в списке очереди.** Дважды подряд следующей была взята первая задача чужого
195
- эпика — по списку она выглядела ровно как своя.
227
+ - **Вопрос, утонувший в отчёте.** Владелец трижды переспрашивал, почему работа стоит.
228
+ - **Чужой эпик в списке очереди.** Дважды подряд следующей брали первую задачу чужого эпика:
229
+ по списку она выглядит своей.
196
230
 
197
231
  - **Некоммиченная папка задачи отказывает там, где чинить уже нечего.** Гард спрашивает её с
198
- диска, поэтому все правки проходят без единого отказа, а признак отданной работы берётся из
199
- истории ветки. Отказ приходит на открытии заявки — в минуту, когда папка разобрана своими
200
- руками: замысел снят, и собирать его приходится заново по памяти. Владелец при этом всю
201
- работу видит ветку без единого следа того, что в ней делается, а следующий заход находит
202
- пустоту вместо «Где стоим».
232
+ диска, поэтому все правки проходят без отказа, а признак отданной работы берётся из истории
233
+ ветки. Отказ приходит на открытии заявки — когда папка разобрана своими руками: замысел снят,
234
+ и собирать его приходится по памяти. Владелец при этом всю работу видит ветку без следа того,
235
+ что в ней делается.
203
236
  - **Прогон, поставленный первым шагом закрытия, съедает окно захода.** Он стоит дороже всех
204
- остальных шагов вместе, и потративший его на прогон упирался в порог заполнения на четырёх
205
- строках привязки — то есть на работе, которая стоила бы минуты, если бы шла первой.
237
+ остальных шагов вместе: потративший его упирался в порог заполнения на четырёх строках
238
+ привязки — на работе, которая шла бы минуту, будь она первой.
206
239
  - **Разрешение работать вне назначенного эпика принадлежит рабочему дереву, а не ветке.**
207
240
  Записанное в файл репозитория, оно уезжает вместе с веткой: из соседней его не видно, и гард
208
- эпика отбивает ровно ту работу, которую владелец разрешил. За один заход это случилось дважды
209
- сперва на отказе конца хода, потом на переводе колонки, и оба раза номер дописывался заново.
210
- Место такому разрешению там же, где передача захода: оно не откатывается вместе с правкой и не
211
- принадлежит ни одной задаче.
241
+ эпика отбивает ровно ту работу, которую владелец разрешил за один заход дважды. Место ему
242
+ там же, где передача захода: оно не откатывается с правкой и не принадлежит ни одной задаче.
212
243
  - **Задача, вынесенная в другой эпик, снимается из состава прежнего тем же ходом.** Вынос — два
213
- движения, и сделанное наполовину оставляет задачу в двух составах сразу: итог прежнего эпика
214
- считается по числу, которого в нём уже нет, и эпик выглядит незакрытым при всех сделанных
215
- работах. Итог вписывается там же, где правится состав: отложенный, он пишется по памяти о том,
216
- сколько задач было, а не о том, сколько осталось.
244
+ движения, и сделанное наполовину оставляет задачу в двух составах сразу: эпик выглядит
245
+ незакрытым при всех сделанных работах. Итог вписывается там же, где правится состав:
246
+ отложенный, он пишется по памяти о том, сколько задач было, а не сколько осталось.
@@ -157,6 +157,11 @@ flowchart TD
157
157
  только то, что импортировано тестом: ошибка типов в непокрытом коде доживает до сборки
158
158
  образа, то есть до слияния. Четыре слияния подряд так и уехали в главную ветку, ломая
159
159
  выкатку.
160
+ - **На машине, где раннеров несколько, любой путь от домашнего каталога общий.** Умолчание
161
+ готового шага опасно именно тем, что оно общее: соседнее задание переписывает его под свою
162
+ версию, пока наше стоит между шагами. Каталог установки, имя контейнера и имя сборщика
163
+ называются поэтому по проекту и постоянно, а временный каталог решением не бывает — в нём
164
+ живёт хранилище пакетов.
160
165
  - **Набор гейта пуша не бывает уже набора конвейера.** Гейт — обещание, что пуш не приедет
161
166
  красным; набор, из которого выкинуты сборка и снимки, обещает то, чего не проверяет. Шаг
162
167
  конвейера, которому в наборе гейта нет ни строки, ни объявленного исключения с причиной,
@@ -168,6 +168,11 @@ flowchart TD
168
168
  - **Сборка входит в набор наравне с линтом и юнитами.** Линтер типов не читает, а юниты читают
169
169
  только импортированное тестом: ошибка типов в непокрытом коде доживает до сборки образа, то
170
170
  есть до мержа.
171
+ - **На машине, где раннеров несколько, любой путь от домашнего каталога общий.** Умолчание
172
+ готового шага опасно именно тем, что оно общее: соседнее задание переписывает его под свою
173
+ версию, пока наше стоит между шагами. Каталог установки, имя контейнера и имя сборщика
174
+ называются поэтому по проекту и постоянно, а временный каталог решением не бывает — в нём
175
+ живёт хранилище пакетов.
171
176
  - **Набор гейта пуша не бывает уже набора конвейера.** Гейт — обещание, что пуш не приедет
172
177
  красным. Шаг конвейера, которому в наборе гейта нет ни строки, ни объявленного исключения с
173
178
  причиной, отбивает пуш, а не печатается рядом: предупреждение читается как разрешение.
@@ -217,35 +222,33 @@ flowchart TD
217
222
 
218
223
  - **Автор PR не может быть его ревьювером.** Запрос разбора на себя GitHub принимает и молча не
219
224
  создаёт: разбор выглядит запрошенным. Считаются только запрос и отзыв не от автора.
220
- - **Вызов клиента хостинга идёт из дерева, а связка команд исхода не проверяет.** Репозиторий
221
- клиент берёт у текущего каталога и вне дерева отказывает; следующее звено связки увозит на
222
- хостинг то, что осталось от отказавшего, поэтому тело читается обратно тем же ходом.
223
- - **Метки, исполнитель и ревьювер PR ставятся вызовами `gh api`, а не `gh pr edit`.** На старой
224
- борде `gh pr edit` отвечает отказом про Projects.
225
+ - **Вызов клиента хостинга идёт из дерева, а связка команд исхода не проверяет.** Вне дерева
226
+ клиент отказывает, а следующее звено связки увозит на хостинг остаток отказавшего: тело
227
+ читается обратно тем же ходом.
228
+ - **Метки, исполнитель и ревьювер PR ставятся вызовами `gh api`, а не `gh pr edit`:** на старой
229
+ борде тот отвечает отказом про Projects.
225
230
  - **Борда правится запросом GraphQL по идентификатору борды, а не по имени владельца.**
226
- - **Почта машинного коммита копируется из компаньона, а не набирается по памяти.** Служебный адрес
227
- `<число>+<логин>@users.noreply.github.com` сопоставляется по числу: коммит с чужим числом уезжает
231
+ - **Почта машинного коммита копируется из компаньона, а не набирается по памяти.** Адрес
232
+ `<число>+<логин>@users.noreply.github.com` сходится по числу: с чужим числом коммит уезжает
228
233
  подписанным посторонним. Ту же строку держит профиль дерева, и гард отбивает пуш.
229
- - **Личность машинной записи подтверждается ответом хостинга, а не узнаванием строки.** Спрашивают
230
- её токеном, ответом о себе: логин и число приходят вместе.
231
- - **Сценарии гардов задают настройки git сами, а не берут их с машины.** Подпись, включённая на
232
- машине, уводит git в агент ключей, а заблокированный агент роняет весь набор: автор, почта и
233
- подпись идут флагами `-c` прямо в команде.
234
+ - **Личность машинной записи подтверждается ответом хостинга, а не узнаванием строки:** её
235
+ спрашивают токеном, и логин с числом приходят вместе.
236
+ - **Сценарии гардов задают настройки git сами, а не берут их с машины.** Подпись с машины уводит
237
+ git в агент ключей, а заблокированный агент роняет весь набор: автор, почта и подпись идут
238
+ флагами `-c` прямо в команде.
234
239
 
235
240
  - **Каждый коммит вклада ветки подписан машинной записью, и это проверяется набором пуша.** Гард
236
- судит только коммит, назвавшийся ею; подписанный человеком проходит мимо, а там, где человек не
237
- коммитит вовсе, это промах.
238
- - **Состояние заявки перечитывается у хостинга сразу после публикации, а не берётся из кода
239
- возврата.** Открытие и постановка ревьювера отвечают нулём и тогда, когда не сделали ничего.
241
+ судит только коммит, назвавшийся ею: подписанный человеком проходит мимо.
242
+ - **Состояние заявки перечитывается у хостинга сразу после публикации.** Открытие и постановка
243
+ ревьювера отвечают нулём и тогда, когда не сделали ничего.
240
244
  - **Автор открытой заявки и наличие у неё ревьювера сверяются очередью работ.** До слияния оба
241
- промаха не видны: заявка, открытая человеком, ревьювера не получит никогда, и выглядит это как
242
- заявка, которой его просто не поставили.
243
- - **Ревьюверы спрашиваются вызовом REST, а не выборкой клиента.** Её поля собирает GraphQL, а он
244
- требует прав, которых у машинной записи нет: «сошлось» не отличить от «спросить было нечем».
245
+ промаха не видны: заявка, открытая человеком, ревьювера не получит никогда и выглядит как
246
+ заявка, которой его не поставили.
247
+ - **Ревьюверы спрашиваются вызовом REST, а не выборкой клиента.** Её поля собирает GraphQL, прав
248
+ на который у машинной записи нет: «сошлось» не отличить от «спросить было нечем».
245
249
 
246
- - **Рабочее дерево не опустошается ради прогона инструмента.** Сравнение с прежним состоянием
247
- идёт на второй копии: прятанье уводит незакоммиченную работу туда, где её не видит ни состояние
248
- дерева, ни сверка.
250
+ - **Рабочее дерево не опустошается ради прогона инструмента.** Сравнение идёт на второй копии:
251
+ прятанье уводит незакоммиченную работу туда, где её не видит ни состояние дерева, ни сверка.
249
252
 
250
253
  ## Чего из закона здесь нет
251
254
 
@@ -159,6 +159,11 @@ flowchart TD
159
159
  только то, что импортировано тестом: ошибка типов в непокрытом коде доживает до сборки
160
160
  образа, то есть до слияния. Четыре слияния подряд так и уехали в главную ветку, ломая
161
161
  выкатку.
162
+ - **На машине, где раннеров несколько, любой путь от домашнего каталога общий.** Умолчание
163
+ готового шага опасно именно тем, что оно общее: соседнее задание переписывает его под свою
164
+ версию, пока наше стоит между шагами. Каталог установки, имя контейнера и имя сборщика
165
+ называются поэтому по проекту и постоянно, а временный каталог решением не бывает — в нём
166
+ живёт хранилище пакетов.
162
167
  - **Набор гейта пуша не бывает уже набора конвейера.** Гейт — обещание, что пуш не приедет
163
168
  красным; набор, из которого выкинуты сборка и снимки, обещает то, чего не проверяет. Шаг
164
169
  конвейера, которому в наборе гейта нет ни строки, ни объявленного исключения с причиной,
@@ -93,24 +93,25 @@ flowchart TD
93
93
  - **Каждое утверждение привязано к месту в коде, и связь сверяется в обе стороны.** Ключ
94
94
  связи — сам текст утверждения, поэтому переформулировать его, забыв про привязку, нельзя.
95
95
  - **Первая колонка компаньона — текст статьи, скопированный, а не пересказанный.** Ключ связи —
96
- сам текст, поэтому строка, написанная по смыслу статьи, разрывает связь, оставаясь на вид
97
- заполненной. Проверка считает статьи без адреса и о статье, адрес которой описывает не её, не
98
- знает ничего: совпадает род, а не перечень, и строка стоит до перечитывания диффа.
96
+ сам текст: строка, написанная по смыслу, разрывает связь, оставаясь на вид заполненной. Проверка
97
+ считает статьи без адреса и о статье с чужим адресом не знает ничего.
99
98
  - **Привязка не ведёт в код, который никто не зовёт:** нигде не зовущийся символ — не место.
99
+ - **Привязка «не исполняется» переезжает вместе со своей статьёй.** Иначе строка компаньона
100
+ держит в горячей части статью, за которой не стоит ничего: снятая одна, она оставляет привязку
101
+ без пункта, и сверка краснеет. Переезжают обе стороны разом.
100
102
  - **Таблица процедур сверяется с декораторами в обе стороны, право — вместе с именем.** Иначе
101
- процедура, которую домен обслуживает, но забыл описать, видна только в
102
- декораторе, а право, разошедшееся со спеком, — нигде.
103
- - **Код отказа принимается, только если он в домене бросается.** Коды выписывались по
104
- замыслу, и на одном пути обещанный отказ не бросал никто.
105
- - **Префикс сценариев в спеке один, и по всему дереву он занят им одним.** Второй префикс
106
- внутри спека означает, что предмет описан дважды; занятый чужим — что по номеру не видно,
107
- чей это сценарий. Договорённость о продукте — исключение: она нумеруется вместе со спеком, в
108
- который вольётся, и занятым префикс от неё не становится.
109
- - **Номер сценария выдаётся один раз и повторно не используется.** Новый сценарий берёт
110
- следующий свободный номер, а не вставляется в середину и не занимает номер удалённого: на
111
- месте удалённого номер так и остаётся пустым. Номер единственное, чем сценарий связан с
112
- тестом, и отданный второй раз он оставляет старую ссылку правильной на вид и ведущей не туда.
113
- Пересчитать номера подряд особенно дёшево на вид: тесты зелёные и до, и после.
103
+ процедура, которую домен обслуживает, но забыл описать, видна только в декораторе, а право,
104
+ разошедшееся со спеком, — нигде.
105
+ - **Код отказа принимается, только если он в домене бросается.** Коды выписывались по замыслу, и
106
+ на одном пути обещанный отказ не бросал никто.
107
+ - **Префикс сценариев в спеке один, и по всему дереву он занят им одним.** Второй префикс внутри
108
+ спека означает, что предмет описан дважды; занятый чужим — что по номеру не видно, чей это
109
+ сценарий. Договорённость о продукте нумеруется вместе со спеком, в который вольётся, и занятым
110
+ префикс от неё не становится.
111
+ - **Номер сценария выдаётся один раз и повторно не используется.** Новый берёт следующий
112
+ свободный, а не вставляется в середину и не занимает номер удалённого на месте удалённого
113
+ номер остаётся пустым. Номер связывает сценарий с тестом, и отданный второй раз он оставляет
114
+ старую ссылку верной на вид; пересчёт подряд дёшев обманчиво тесты зелёные и до, и после.
114
115
  - **Сценарий и заголовок его теста правятся одним изменением.** Изменилось обещание — номер тот
115
116
  же, а заголовок теста правится тем же коммитом; удалён сценарий — удаляется и тест.
116
117
  Разъехавшись, они оставляют прогон зелёным, хотя проверяет он уже не то.
@@ -126,7 +127,7 @@ flowchart TD
126
127
  привязывать не к чему, а требование правила заставило бы завести его с якорями в
127
128
  несуществующие места. Признак стоит строкой статуса в самом законе, а не в списке исключений
128
129
  рядом с проверкой.
129
- - **Закон, назвавший файл проекта, — отказ.** Путям и привязкам место в правиле: иначе закон
130
+ - **Закон, назвавший файл проекта, — отказ.** Путям и привязкам место в правиле, иначе закон
130
131
  нельзя ни прочитать без знания дерева, ни применить на другом приложении.
131
132
  - **Описание правила не длиннее трёхсот знаков и отвечает на один вопрос — брать это правило
132
133
  или нет.** Описание едет в системный промпт каждого захода целиком, и платит его заход, чем бы
@@ -271,18 +272,16 @@ flowchart TD
271
272
  что текст судится не слабее своей копии, что невыбранная редакция судится наравне с выбранной и
272
273
  что набор разделов объявлен отдельно от образца, исполняются там, где эти тексты пишут, — в
273
274
  наборе того пакета, который их везёт. В дереве-потребителе лежат разложенные копии, и краснеть
274
- у него на промахе, который правится не у него, проверка не должна. Согласие двух текстов между
275
- собой не считается нигде и ни у кого: оно ищется чтением.
275
+ у него на чужом промахе проверка не должна. Согласие двух текстов ищется чтением.
276
276
 
277
277
  Форму сжатой статьи не проверяет ничто, и проверки на неё не будет: машине видно число знаков,
278
278
  но не то, принимается ли по сжатой статье прежнее решение. Довод, вырезанный вместе с границей
279
- утверждения, короче правильного и проходит любой счёт знаков. Стережёт это одно предел длины
280
- текста: он говорит, что правило переросло, и молчит о том, что именно из него резать. Судится
281
- сжатие пересказом, и судит его тот, кто правит по сжатой статье следующим.
279
+ утверждения, короче правильного и проходит любой счёт знаков. Стережёт это один предел длины
280
+ текста: он говорит, что правило переросло, и молчит, что именно резать. Судится сжатие
281
+ пересказом тем, кто правит по сжатой статье следующим.
282
282
 
283
283
  Долю довода в правиле не считает ничто. Замер, на котором стоит форма, сделан разовым проходом
284
- и в дерево не поехал: он отвечает на вопрос «где вес», а не «сошлось ли», и повторяют его тогда,
285
- когда снова спрашивают о весе.
284
+ и в дерево не поехал: он отвечает на «где вес», а не на «сошлось ли».
286
285
 
287
286
  ## Паттерны
288
287
 
@@ -173,7 +173,7 @@ flowchart TD
173
173
  Страж читает прежний номер этапа из истории ветки и не выпускает ход, в котором номер вырос, а
174
174
  команда не запускалась: через заход отмеченное по памяти неотличимо от проверенного.
175
175
  - **Слово об остановке страж читает у владельца, а не у исполнителя.** Иначе остановку объявляет
176
- тот, кому она в эту минуту удобна, и запрет держится ровно до первого неудобства.
176
+ тот, кому она удобна, и запрет держится до первого неудобства.
177
177
  - **Утверждение о состоянии дерева стережёт гард утверждения, а не память исполнителя.** Всё, что
178
178
  ответ владельцу говорит о дереве, несёт команду и её вывод: сказанное без команды утверждением
179
179
  не считается — ни «проверено», ни «снято», ни «готово». Гард читает текст, сказанный владельцу
@@ -259,24 +259,22 @@ flowchart TD
259
259
  проверяется деревом. Порядок входа — четыре шага в паттерне возвращения; стережёт его гард, а не
260
260
  память.
261
261
  - **Состояние незаконченной работы приходит в контекст на запуске сессии.** Замысел и ход работы
262
- отдаются целиком, разбор просьбы — путём. Ветка вида `<КЛЮЧ>-*` без папки даёт предупреждение с
263
- готовой командой, но сессию не рвёт.
262
+ отдаются целиком, разбор просьбы — путём. Ветка вида `<КЛЮЧ>-*` без папки предупреждает готовой
263
+ командой, но сессию не рвёт.
264
264
  - **Заполненное окно кончает ход только там, где сжатия нет.** Где оно объявлено, окно —
265
265
  продолжение хода: заход сжимается и работает дальше, а порог остановки срабатывает лишь тогда,
266
- когда сжатие не пришло. Ход, закрытый ниже порога, теряет остаток окна, за
267
- который дерево заплатило настройкой, и ловит это один владелец.
266
+ когда сжатие не пришло. Ход, закрытый ниже порога, теряет остаток окна, за который дерево
267
+ заплатило настройкой, и ловит это один владелец.
268
268
  - **Заполнение окна захода стережёт гард, а не память исполнителя.** На первом пороге он
269
- напоминает выбирать точку остановки, на втором отбивает всё, кроме записи хода работы, передачи
270
- и команд поставки. Размер окна и оба порога дерево задаёт само; не задавшее размера стража не
271
- получает.
269
+ напоминает выбирать точку остановки, на втором отбивает всё, кроме передачи, команд поставки и
270
+ папки задачи — папки целиком: на закрытии правят и решение по ходу, и пересмотр этапа. Размер окна и оба порога дерево задаёт само; не задавшее размера стража не получает.
272
271
  - **Порог сжатия контекста дерево задаёт само, и стоит он НИЖЕ порога остановки.** Совпавшие
273
- пороги согласием не бывают: это гонка, и выигрывает её страж он стоит на вызове, а сжатие
274
- приходит между ходами. Расстояние объявляется числом, а не выводится разницей; сведены пороги
275
- или нет, говорит разбор состояния раскладки.
276
- - **Заход закрывается передачей, которая лежит вне дерева.** Состояние работы коммитится ходом
277
- работы, а передача его пересказывает для вставки в новый заход: рабочее дерево, ветка,
278
- сделанное, следующий шаг и особенности захода. В историю она не едет иначе рядом с ходом
279
- работы заводится вторая запись об одном и том же.
272
+ пороги гонка, и выигрывает её страж: он стоит на вызове, а сжатие приходит между ходами. Расстояние объявляется числом, а не выводится разницей; сведены
273
+ ли пороги, говорит разбор состояния раскладки.
274
+ - **Заход закрывается передачей, и лежит она разделом хода работы.** Он коммитится и едет в
275
+ ветку значит передача переживает переход на другую машину, а второй записи об одном и том
276
+ же не заводится. В ней дерево, ветка, сделанное, следующий шаг и особенности захода; у работы
277
+ без папки задачи она уезжает файлом вне дерева.
280
278
 
281
279
  - **Вариант, глушащий проверку, в меню не ставится вовсе.** Выключенное правило линтера, строка
282
280
  в списке известного, выведенный из-под проверки файл — все они чинят показание, а не то, на что
@@ -17,7 +17,7 @@ description: Правило под «Закон о ведении работы»
17
17
  | В законе | Здесь |
18
18
  | -------------------------- | ----------------------------------------------------------------------------- |
19
19
  | вход в заход | то, что хук старта кладёт в контекст до первой реплики |
20
- | переданное прошлым заходом | файл по имени ветки в каталоге передач; пишет его хук перед сжатием контекста |
20
+ | переданное прошлым заходом | раздел «Передача захода» в ходе работы этой ветки, а у работы без папки задачи — файл по имени ветки в каталоге передач; пишет его хук перед сжатием контекста |
21
21
  | порядок ведения работы | карта хода — состояния с обязательными действиями и четыре выхода хода |
22
22
  | запуск | первый запуск, возобновление, сжатие контекста, очистка |
23
23
 
@@ -32,9 +32,11 @@ description: Правило под «Закон о ведении работы»
32
32
 
33
33
  ```mermaid
34
34
  flowchart TD
35
- A[Запуск захода] --> B{Есть передача по имени текущей ветки}
36
- B -->|Да| C[Передача кладётся в контекст целиком]
37
- B -->|Нет| D[О передаче не говорится ничего]
35
+ A[Запуск захода] --> B{Есть раздел передачи в ходе работы этой ветки}
36
+ B -->|Да| C[Раздел кладётся в контекст целиком, файл вне дерева не читается]
37
+ B -->|Нет| B2{Есть файл передачи по имени ветки}
38
+ B2 -->|Да| C
39
+ B2 -->|Нет| D[О передаче не говорится ничего]
38
40
  C --> E{Разложен ресурс карты хода}
39
41
  D --> E
40
42
  E -->|Да| F[Карта кладётся следом: состояния, действия, четыре выхода]
@@ -80,6 +80,13 @@ flowchart TD
80
80
  молча, а компилируется из них только одна.
81
81
  <!-- rt-when: *.ts -->
82
82
 
83
+ - **Значение, объявленное одной стороной обмена, второй стороной не пересчитывается, а берётся
84
+ у первой.** Два счёта одного значения расходятся молча: признак дерева считали и отправка, и
85
+ отметка — каждая своей копией, — копии разошлись, и отметка не нашла ни одной своей записи ни
86
+ разу. Обе стороны при этом отвечали как обычно, и промах нашёлся только с третьей стороны:
87
+ чтением того, что легло на самом деле.
88
+ <!-- rt-when: *.ts -->
89
+
83
90
  - **Двухступенчатое приведение `as unknown as` запрещено правилом линтера.** Вместо него —
84
91
  честный тип, сужение проверкой или чтение поля формой (`Reflect.get`); место, где иначе
85
92
  нельзя, помечается точечным отключением с причиной в той же строке.
@@ -62,6 +62,17 @@ awk '/^```/ { fence = !fence } !fence && /^## / { print }' <файл ресур
62
62
  От ресурса целиком отказываются не здесь, а списком `skip` в конфиге: надстройка правит текст,
63
63
  `skip` отменяет файл.
64
64
 
65
+ ## Надстройку карты гейта не проверяет ничто
66
+
67
+ Сценарии пакета гоняют его умолчание и веток дерева не касаются: своих проб у надстройки нет, и
68
+ места для них тоже. Карта решает, какое правило грузится под каждую правку, то есть чем заход
69
+ руководствуется в работе, а держится она прогоном руками и памятью того, кто её правил.
70
+
71
+ Промах в ней молчит: неверная ветка не отказывает, а тихо отдаёт не то правило — заметен он
72
+ только по объёму загруженного и по тому, что в загруженном не нашлось ответа. Поэтому правка
73
+ карты кончается вызовом гейта на трёх путях: на том, ради которого правили, на соседнем,
74
+ который правка задеть не должна была, и на файле, у которого правила нет вовсе.
75
+
65
76
  ## Гейт: своя ветка решает раньше умолчания
66
77
 
67
78
  Гейт спрашивает `skill_for` — она печатает имя правила или молчит. Молчание значит «правила на
@@ -81,8 +81,13 @@ npx agent-kit sync --check # ничего не писать, отказать
81
81
  npx agent-kit stats # чем пользовались, чем ни разу, обо что спотыкались
82
82
  npx agent-kit enroll --code <код> # завести дерево в приёме и положить его токен
83
83
  npx agent-kit propose # отправить груз в приём: сводку, предложения и разборы
84
+ npx agent-kit adopt [файлы] # отдать пакету свой файл, лежащий на его пути
84
85
  ```
85
86
 
87
+ Отдача откладывает прежнее содержимое рядом, с пометкой `.before-rt-kit`, и освобождает путь под
88
+ раскладку; без имён отдаются все чужие файлы разом. Названа она здесь потому, что иначе её
89
+ находят по тексту отказа раскладки — то есть в ту минуту, когда работа уже встала.
90
+
86
91
  Часть команд слоя исполняет агент, а не программа: `/feedback` кладёт слово о правилах блоком в
87
92
  файл предложений, `/skill-curator` разбирает закрытую задачу, `/next-session` закрывает заход.
88
93
 
@@ -227,8 +232,13 @@ npx agent-kit propose # отправить груз в приём: сво
227
232
  2. Снимок того, что говорят проверки дерева, до единой правки. Он и есть мерило.
228
233
  3. Ресурс за ресурсом: пакетную редакцию довести до здешней, предметность вынести в
229
234
  надстройку, снять отказ, разложить, прогнать сценарии и сверить снимок.
230
- 4. Разложенное поверх своего пакет не пишет: файл без шапки для него чужой. Снять его —
231
- решение владельца, и до этого раскладка отказывает поимённо.
235
+ 4. Разложенное поверх своего пакет не пишет: файл без шапки для него чужой. Отдаётся он
236
+ командой `adopt` прежнее содержимое ложится рядом с пометкой `.before-rt-kit`, и снять его
237
+ потом решает владелец.
238
+ 5. Свои сценарии отданного файла переписываются под пакетное поведение либо снимаются. Чинить
239
+ пакетную редакцию на месте нельзя: правка разложенной копии живёт до следующей раскладки, а
240
+ её адрес — источник пакета или надстройка дерева. Сценарий, ждущий поведения снятого файла,
241
+ краснеет и после верной отдачи: он проверяет то, чего в дереве больше нет.
232
242
 
233
243
  ## Свойства дерева
234
244
 
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../projects/agent-kit/src/lib/commands.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAsB7C,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,2FAA2F;AAC3F,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAC1B;AA2DD,+DAA+D;AAC/D,eAAO,MAAM,WAAW,EAAE,MAAyB,CAAC;AA0ZpD;;;;GAIG;AACH,wBAAgB,IAAI,CAChB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,SAAS,MAAM,EAAO,EAC5B,QAAQ,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,EAC/C,SAAS,GAAE,MAAW,GACvB,iBAAiB,CAgCnB;AAmKD,wBAAgB,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,GAAG,iBAAiB,CA8DzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,iBAAiB,CA+CpF;AAQD,0EAA0E;AAC1E,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CAC1B;AAqHD;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,iBAAiB,CAuDlF;AA0BD,wBAAgB,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,iBAAiB,CA6E3D;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,YAAY,GAAG,iBAAiB,CA2DzD"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../projects/agent-kit/src/lib/commands.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAsB7C,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,2FAA2F;AAC3F,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAC1B;AA2DD,+DAA+D;AAC/D,eAAO,MAAM,WAAW,EAAE,MAAyB,CAAC;AA0ZpD;;;;GAIG;AACH,wBAAgB,IAAI,CAChB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,SAAS,MAAM,EAAO,EAC5B,QAAQ,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,EAC/C,SAAS,GAAE,MAAW,GACvB,iBAAiB,CAgCnB;AAmKD,wBAAgB,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,GAAG,iBAAiB,CA8DzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,iBAAiB,CA+CpF;AAQD,0EAA0E;AAC1E,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CAC1B;AA8JD;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,iBAAiB,CA6DlF;AA0BD,wBAAgB,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,iBAAiB,CA6E3D;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,YAAY,GAAG,iBAAiB,CA2DzD"}