@rt-tools/agent-kit 0.3.0 → 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.
Files changed (201) hide show
  1. package/README.md +194 -30
  2. package/assets/agents/business-analyst.md +74 -0
  3. package/assets/agents/project-manager.md +70 -0
  4. package/assets/agents/qa-engineer.md +72 -0
  5. package/assets/agents/skill-curator.md +110 -0
  6. package/assets/agents/spec-critic.md +44 -0
  7. package/assets/agents/spec-writer.md +50 -0
  8. package/assets/checks/board.github.mjs +286 -0
  9. package/assets/checks/check-board.github.mjs +188 -0
  10. package/assets/checks/check-doc-paths.mjs +163 -0
  11. package/assets/checks/check-dupes.mjs +277 -0
  12. package/assets/checks/check-lib-layers.mjs +573 -0
  13. package/assets/checks/check-reuse.mjs +208 -0
  14. package/assets/checks/check-schema-drift.mjs +186 -0
  15. package/assets/checks/check-specs.mjs +1007 -0
  16. package/assets/checks/check-styles.mjs +109 -0
  17. package/assets/checks/rt-kit-checks.config.mjs +134 -0
  18. package/assets/checks/task-new.github.mjs +198 -0
  19. package/assets/commands/skill-curator.md +70 -0
  20. package/assets/defaults/gate-map.sh +100 -0
  21. package/assets/defaults/project.sh +179 -0
  22. package/assets/hooks/browser-device-id.sh +0 -0
  23. package/assets/hooks/browser-guard-device-id.sh +2 -1
  24. package/assets/hooks/browser-guard-no-asking.sh +27 -0
  25. package/assets/hooks/browser-guard-no-listing.sh +2 -1
  26. package/assets/hooks/browser-guard-no-other-drivers.sh +2 -1
  27. package/assets/hooks/browser-guard-require-select.sh +2 -1
  28. package/assets/hooks/commit-msg.sh +1 -1
  29. package/assets/hooks/constitution-index.sh +5 -4
  30. package/assets/hooks/dev-server-guard.sh +8 -6
  31. package/assets/hooks/docs-guard.sh +223 -37
  32. package/assets/hooks/git-guard-delivery.sh +86 -29
  33. package/assets/hooks/git-guard-main.sh +1 -0
  34. package/assets/hooks/git-guard-push-tests.sh +34 -13
  35. package/assets/hooks/glossary-load.sh +23 -0
  36. package/assets/hooks/lint-after-edit.sh +155 -30
  37. package/assets/hooks/qa-dataid-guard.sh +72 -32
  38. package/assets/hooks/reuse-first-guard.sh +105 -34
  39. package/assets/hooks/skill-gate-rearm.sh +1 -0
  40. package/assets/hooks/skill-gate.sh +75 -15
  41. package/assets/hooks/skill-loaded.sh +1 -0
  42. package/assets/hooks/sql-guard.sh +606 -56
  43. package/assets/hooks/task-context-load.sh +100 -0
  44. package/assets/hooks/task-flow-guard.sh +107 -0
  45. package/assets/laws/{access.md → application/access.md} +1 -4
  46. package/assets/laws/{locales.md → application/locales.md} +1 -3
  47. package/assets/laws/application/money.md +41 -0
  48. package/assets/laws/application/ownership.md +32 -0
  49. package/assets/laws/{search-visibility.md → application/search-visibility.md} +1 -1
  50. package/assets/laws/code-structure.md +7 -6
  51. package/assets/laws/delivery.md +53 -3
  52. package/assets/laws/entity-editing.md +49 -55
  53. package/assets/laws/entity-models.md +4 -14
  54. package/assets/laws/frontend-application.md +5 -5
  55. package/assets/laws/lib-imports.md +14 -1
  56. package/assets/laws/lists.md +33 -0
  57. package/assets/laws/navigation.md +40 -0
  58. package/assets/laws/project-documentation.md +17 -8
  59. package/assets/laws/reuse-first.md +26 -21
  60. package/assets/laws/shared-code.md +13 -1
  61. package/assets/laws/verifiability.md +17 -1
  62. package/assets/laws/work-conduct.md +48 -0
  63. package/assets/patterns/admin-lists-screen.md +131 -0
  64. package/assets/patterns/admin-nav-item.md +71 -0
  65. package/assets/patterns/angular-patterns-state.md +29 -22
  66. package/assets/patterns/api-layer-pair.md +40 -30
  67. package/assets/patterns/browser-verification-measure.md +41 -38
  68. package/assets/patterns/browser-verification-stand.md +106 -42
  69. package/assets/patterns/component-structure-new.md +33 -32
  70. package/assets/patterns/dependencies-upgrade.md +65 -0
  71. package/assets/patterns/doc-style-sweep.md +65 -28
  72. package/assets/patterns/doc-style-write.md +36 -33
  73. package/assets/patterns/entity-aside.md +136 -0
  74. package/assets/patterns/entity-models-new.md +124 -0
  75. package/assets/patterns/entity-store.md +91 -0
  76. package/assets/patterns/git-workflow-commit.azure.md +259 -0
  77. package/assets/patterns/git-workflow-commit.github.md +333 -0
  78. package/assets/patterns/git-workflow-commit.gitlab.md +283 -0
  79. package/assets/patterns/git-workflow-merge.md +42 -25
  80. package/assets/patterns/git-workflow-migration.md +61 -31
  81. package/assets/patterns/git-workflow-restart.md +20 -20
  82. package/assets/patterns/lib-layers-move.md +50 -32
  83. package/assets/patterns/lib-layers-new.md +41 -29
  84. package/assets/patterns/ownership-scope-resolve.md +69 -0
  85. package/assets/patterns/permissions-procedure.md +35 -33
  86. package/assets/patterns/platform-access-di.md +39 -25
  87. package/assets/patterns/pricing-quote.md +71 -0
  88. package/assets/patterns/reuse-first-extend.md +22 -22
  89. package/assets/patterns/seo-page.md +52 -40
  90. package/assets/patterns/seo-verify.md +48 -29
  91. package/assets/patterns/shared-code-new.md +37 -31
  92. package/assets/patterns/spec-driven-domain.md +44 -37
  93. package/assets/patterns/spec-driven-rule.md +55 -40
  94. package/assets/patterns/styling-bem-component.md +43 -32
  95. package/assets/patterns/styling-bem-layout.md +30 -24
  96. package/assets/patterns/task-flow-close.md +90 -0
  97. package/assets/patterns/task-flow-resume.md +94 -0
  98. package/assets/patterns/task-flow-start.md +117 -0
  99. package/assets/patterns/testing-e2e.md +53 -51
  100. package/assets/patterns/testing-unit.md +70 -46
  101. package/assets/patterns/translations-key.md +32 -19
  102. package/assets/patterns/ts-procedure.md +24 -25
  103. package/assets/rules/angular-patterns.md +46 -27
  104. package/assets/rules/api-layer.md +46 -28
  105. package/assets/rules/browser-verification.md +66 -48
  106. package/assets/rules/component-structure.md +43 -27
  107. package/assets/rules/dependencies.md +66 -0
  108. package/assets/rules/doc-style.md +81 -39
  109. package/assets/rules/entity-conventions.md +78 -0
  110. package/assets/rules/entity-models.md +70 -0
  111. package/assets/rules/git-workflow.azure.md +116 -0
  112. package/assets/rules/git-workflow.github.md +123 -0
  113. package/assets/rules/git-workflow.gitlab.md +113 -0
  114. package/assets/rules/lib-layers.md +56 -30
  115. package/assets/rules/lists.md +73 -0
  116. package/assets/rules/navigation.md +78 -0
  117. package/assets/rules/ownership-scope.md +63 -0
  118. package/assets/rules/permissions.md +43 -25
  119. package/assets/rules/platform-access.md +57 -29
  120. package/assets/rules/pricing.md +64 -0
  121. package/assets/rules/reuse-first.md +57 -43
  122. package/assets/rules/seo.md +51 -30
  123. package/assets/rules/shared-code.md +51 -26
  124. package/assets/rules/spec-driven.md +96 -50
  125. package/assets/rules/styling-bem.md +54 -39
  126. package/assets/rules/task-flow.md +110 -0
  127. package/assets/rules/testing.md +78 -47
  128. package/assets/rules/translations.md +48 -31
  129. package/assets/rules/typescript-conventions.md +57 -27
  130. package/assets/skills/agent-kit.md +81 -0
  131. package/assets/skills/write-a-skill.md +108 -0
  132. package/assets/templates/gate-map.sh +23 -15
  133. package/assets/templates/implementation.md +14 -8
  134. package/assets/templates/pattern.md +1 -1
  135. package/assets/templates/project.sh +32 -19
  136. package/assets/templates/rule.md +1 -1
  137. package/assets/variants.json +20 -0
  138. package/assets/workflows/feature.js +134 -0
  139. package/assets/workflows/plan.js +150 -0
  140. package/bin/agent-kit.d.ts.map +1 -1
  141. package/bin/agent-kit.js +78 -5
  142. package/bin/agent-kit.js.map +1 -1
  143. package/bin/prompt.d.ts +5 -0
  144. package/bin/prompt.d.ts.map +1 -1
  145. package/bin/prompt.js +19 -7
  146. package/bin/prompt.js.map +1 -1
  147. package/index.d.ts +1 -0
  148. package/index.d.ts.map +1 -1
  149. package/index.js +1 -0
  150. package/index.js.map +1 -1
  151. package/lib/assets.d.ts +8 -3
  152. package/lib/assets.d.ts.map +1 -1
  153. package/lib/assets.js +13 -3
  154. package/lib/assets.js.map +1 -1
  155. package/lib/catalog.d.ts +52 -5
  156. package/lib/catalog.d.ts.map +1 -1
  157. package/lib/catalog.js +104 -16
  158. package/lib/catalog.js.map +1 -1
  159. package/lib/commands.d.ts +22 -1
  160. package/lib/commands.d.ts.map +1 -1
  161. package/lib/commands.js +202 -14
  162. package/lib/commands.js.map +1 -1
  163. package/lib/companion.d.ts +5 -1
  164. package/lib/companion.d.ts.map +1 -1
  165. package/lib/companion.js +29 -2
  166. package/lib/companion.js.map +1 -1
  167. package/lib/config.d.ts +26 -9
  168. package/lib/config.d.ts.map +1 -1
  169. package/lib/config.js +41 -15
  170. package/lib/config.js.map +1 -1
  171. package/lib/freshness.d.ts +14 -0
  172. package/lib/freshness.d.ts.map +1 -0
  173. package/lib/freshness.js +116 -0
  174. package/lib/freshness.js.map +1 -0
  175. package/lib/hooks-map.d.ts +24 -0
  176. package/lib/hooks-map.d.ts.map +1 -0
  177. package/lib/hooks-map.js +72 -0
  178. package/lib/hooks-map.js.map +1 -0
  179. package/lib/integrity.d.ts +36 -0
  180. package/lib/integrity.d.ts.map +1 -0
  181. package/lib/integrity.js +44 -0
  182. package/lib/integrity.js.map +1 -0
  183. package/lib/picker.d.ts +11 -1
  184. package/lib/picker.d.ts.map +1 -1
  185. package/lib/picker.js +44 -6
  186. package/lib/picker.js.map +1 -1
  187. package/lib/sync.d.ts +26 -0
  188. package/lib/sync.d.ts.map +1 -1
  189. package/lib/sync.js +59 -4
  190. package/lib/sync.js.map +1 -1
  191. package/lib/variants.d.ts +44 -0
  192. package/lib/variants.d.ts.map +1 -0
  193. package/lib/variants.js +82 -0
  194. package/lib/variants.js.map +1 -0
  195. package/package.json +1 -1
  196. package/rt-tools-agent-kit-0.4.0.tgz +0 -0
  197. package/assets/laws/admin-lists.md +0 -35
  198. package/assets/laws/admin-navigation.md +0 -38
  199. package/assets/patterns/git-workflow-commit.md +0 -175
  200. package/assets/rules/git-workflow.md +0 -106
  201. package/rt-tools-agent-kit-0.3.0.tgz +0 -0
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ # rt-hook: PreToolUse Edit|Write|MultiEdit|Bash
2
3
  # Гейт правил: не даёт править файл, пока не загружено правило, под которое он подпадает.
3
4
  #
4
5
  # Закон и правило, которых никто не открывает, не действуют. Напоминание в подсказке помогает
@@ -6,9 +7,17 @@
6
7
  # для каждой области, а после загрузки правила та же область проходит молча — повторов нет, и
7
8
  # стоит это почти ничего.
8
9
  #
9
- # Карта «файл — правило» живёт не здесь: она знает имена этого дерева, а хук их знать не может.
10
- # Её пишет проект в {{gateMap}} функцией `skill_for <род вызова> <цель>`, печатающей имя
11
- # правила. Нет карты гейт пропускает всё: пустой гейт лучше гейта, отбивающего наугад.
10
+ # Карта «файл — правило» живёт не здесь, а в двух файлах рядом, и это не дублирование.
11
+ # Умолчание `.claude/rt-kit/defaults/gate-map.sh`везёт пакет: деревья этой мастерской
12
+ # устроены одинаково, и переписывать одну и ту же карту в каждом заново значило бы заводить
13
+ # столько её редакций, сколько репозиториев. Надстройку — `.claude/rt-kit/gate-map.sh` — пишет
14
+ # проект, и она необязательна: витрина, свой род файлов, чужая раскладка есть не у всех.
15
+ # Обе объявляют `skill_for <род вызова> <цель> <текст правки>`, печатающую имена правил через
16
+ # пробел; надстройка грузится второй и вправе позвать умолчание обратно — `skill_for_default`.
17
+ # Нет ни одной — гейт пропускает всё: пустой гейт лучше гейта, отбивающего наугад.
18
+ #
19
+ # Род вызова — `edit`, `bash` или `browser`. Браузерная проверка — единственная область, где
20
+ # правило нужно не под правку файла, а под инструмент: врут там не файлы, а стенд и координаты.
12
21
  #
13
22
  # ОТКАЗ В ПОЛЬЗУ РАБОТЫ: любая ошибка и любой неопознанный путь пропускают правку (exit 0).
14
23
  # Сломанный гейт не имеет права остановить работу совсем.
@@ -19,16 +28,20 @@ input="$(cat 2>/dev/null)"
19
28
  sid="$(printf '%s' "$input" | jq -r '.session_id // "nosession"' 2>/dev/null)"
20
29
  tool="$(printf '%s' "$input" | jq -r '.tool_name // empty' 2>/dev/null)"
21
30
 
22
- map="${CLAUDE_PROJECT_DIR:-.}/{{gateMap}}"
23
- [ -f "$map" ] || exit 0
24
- # shellcheck disable=SC1090
25
- . "$map" 2>/dev/null || exit 0
31
+ # Умолчание карты ищется и рядом с самим хуком: уезжают они вместе.
32
+ rt_hooks_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
33
+ for map in "$rt_hooks_dir/../rt-kit/defaults/gate-map.sh" "$rt_hooks_dir/../defaults/gate-map.sh" "${CLAUDE_PROJECT_DIR:-.}/.claude/rt-kit/defaults/gate-map.sh" "${CLAUDE_PROJECT_DIR:-.}/.claude/rt-kit/gate-map.sh"; do
34
+ # shellcheck disable=SC1090
35
+ [ -f "$map" ] && . "$map" 2>/dev/null
36
+ done
26
37
  command -v skill_for >/dev/null 2>&1 || exit 0
27
38
 
28
39
  req=""
29
40
  target=""
30
41
  case "$tool" in
31
- Edit|Write|MultiEdit)
42
+ # Инструмент среды заводит файл теми же двумя данными, только называет их иначе — без этой
43
+ # ветки файл заводился мимо гейта.
44
+ Edit|Write|MultiEdit|mcp__webstorm__create_new_file)
32
45
  target="$(printf '%s' "$input" | jq -r '.tool_input.file_path // .tool_input.pathInProject // empty' 2>/dev/null)"
33
46
  [ -z "$target" ] && exit 0
34
47
  # Путь от корня проекта приводится к абсолютному один раз: иначе карту пришлось бы
@@ -43,25 +56,72 @@ case "$tool" in
43
56
  "${CLAUDE_PROJECT_DIR:-.}"/*) ;;
44
57
  *) exit 0 ;;
45
58
  esac
46
- req="$(skill_for edit "$target" 2>/dev/null)"
59
+ # Текст правки идёт карте вторым доводом: есть правила, которые вступают не от того,
60
+ # ЧТО за файл правится, а от того, ЧТО в него пишут, — обращение к среде исполнения
61
+ # приходит в обычный сервис, а число-настройка в обычный класс.
62
+ written="$(printf '%s' "$input" | jq -r '[.tool_input.content, .tool_input.text, .tool_input.new_string, (.tool_input.edits[]?.new_string)] | map(select(. != null)) | join("\n")' 2>/dev/null)"
63
+ req="$(skill_for edit "$target" "$written" 2>/dev/null)"
47
64
  ;;
48
- Bash)
65
+ # Терминал среды исполняет ту же командную строку и кладёт её в то же поле: без этой ветки
66
+ # коммит из него не требовал правила, тогда как тот же коммит из оболочки требовал.
67
+ Bash|mcp__webstorm__execute_terminal_command|mcp__webstorm__execute_tool)
49
68
  target="$(printf '%s' "$input" | jq -r '.tool_input.command // empty' 2>/dev/null)"
50
69
  [ -z "$target" ] && exit 0
51
- req="$(skill_for bash "$target" 2>/dev/null)"
70
+ # Универсальный исполнитель прячет настоящую команду во вложенной строке.
71
+ if [ "$tool" = "mcp__webstorm__execute_tool" ] && command -v perl >/dev/null 2>&1; then
72
+ inner="$(printf '%s' "$target" | perl -0ne '
73
+ if (/--command(?:=|\s+)(?:"((?:[^"\\]|\\.)*)"|\x27([^\x27]*)\x27|(.+))/s) {
74
+ print defined $1 ? $1 : (defined $2 ? $2 : $3);
75
+ }
76
+ ' 2>/dev/null)"
77
+ [ -n "$inner" ] && target="$inner"
78
+ fi
79
+ req="$(skill_for bash "$target" "" 2>/dev/null)"
80
+ ;;
81
+ mcp__claude-in-chrome__*)
82
+ req="$(skill_for browser "$tool" "" 2>/dev/null)"
52
83
  ;;
53
84
  *) exit 0 ;;
54
85
  esac
55
86
 
56
87
  [ -z "$req" ] && exit 0
57
88
 
58
- # Принимается и голое имя правила, и имя с областью каталога («<каталог>:<имя>»).
89
+ # Карта вправе назвать несколько правил: доменное правило и то, что действует вторым слоем.
90
+ # Требуется первое незагруженное, а не все сразу: отказ, перечисляющий три правила, читается
91
+ # как «загрузи три», и загружают их подряд, теряя ту самую однократность.
59
92
  loaded="${TMPDIR:-/tmp}/claude-skill-gate/${sid}.loaded"
60
- if [ -f "$loaded" ] && grep -qE "^([^:]*:)?$(printf '%s' "$req" | sed 's/[][\.*^$/]/\\&/g')$" "$loaded" 2>/dev/null; then
61
- exit 0
62
- fi
93
+ root="${CLAUDE_PROJECT_DIR:-.}"
94
+ rules_dir="${RT_RULES_DIR:-.claude/skills}"
95
+ want=""
96
+ for name in $req; do
97
+ # Правила, которого в дереве нет, гейт не требует. Карта умолчания называет и то, от чего
98
+ # дерево отказалось списком: правило предметной области, чужой род файлов. Отказ «загрузи
99
+ # правило X» на такое имя — отказ без действия: загружать нечего, и работа встаёт совсем.
100
+ [ -f "$root/$rules_dir/${name}/SKILL.md" ] || continue
101
+ # Принимается и голое имя правила, и имя с областью каталога («<каталог>:<имя>»).
102
+ if [ -f "$loaded" ] && grep -qE "^([^:]*:)?$(printf '%s' "$name" | sed 's/[][\.*^$/]/\\&/g')$" "$loaded" 2>/dev/null; then
103
+ continue
104
+ fi
105
+ want="$name"
106
+ break
107
+ done
108
+ [ -z "$want" ] && exit 0
109
+ req="$want"
63
110
 
64
111
  reason="Отбито гейтом правил: загрузи правило «${req}» инструментом Skill и повтори действие. Для этой области это происходит один раз за сессию."
112
+
113
+ # Правило называет свой закон одним словом, а слоёв законов два: общий лежит в корне, закон
114
+ # приложения — в каталоге под ним. Путь ищется, а не собирается из имени, иначе отказ ведёт в
115
+ # несуществующий файл ровно у тех правил, чей закон предметен.
116
+ laws_dir="${RT_LAWS_DIR:-docs/constitution}"
117
+ law="$(sed -n 's/^law:[[:space:]]*//p' "$root/$rules_dir/${req}/SKILL.md" 2>/dev/null | head -1)"
118
+ if [ -n "$law" ]; then
119
+ law_path="$laws_dir/${law}.md"
120
+ [ -f "$root/$law_path" ] || law_path="$laws_dir/application/${law}.md"
121
+ [ -f "$root/$law_path" ] \
122
+ && reason="Отбито гейтом правил: загрузи правило «${req}» инструментом Skill — оно применяет закон ${law_path} к этому дереву — и повтори действие. Для этой области это происходит один раз за сессию."
123
+ fi
124
+
65
125
  jq -n --arg r "$reason" '{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:$r}}' 2>/dev/null \
66
126
  || printf '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"Загрузи правило %s и повтори."}}\n' "$req"
67
127
 
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ # rt-hook: PostToolUse Skill
2
3
  # Запись о загруженном правиле. PostToolUse на инструменте `Skill`.
3
4
  #
4
5
  # Гейт обязан знать, загружено правило или нет, а спросить об этом ему некого: инструмент о