@rt-tools/agent-kit 0.2.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 (203) hide show
  1. package/README.md +235 -18
  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 +20 -0
  23. package/assets/hooks/browser-guard-device-id.sh +28 -0
  24. package/assets/hooks/browser-guard-no-asking.sh +27 -0
  25. package/assets/hooks/browser-guard-no-listing.sh +18 -0
  26. package/assets/hooks/browser-guard-no-other-drivers.sh +79 -0
  27. package/assets/hooks/browser-guard-require-select.sh +54 -0
  28. package/assets/hooks/commit-msg.sh +26 -0
  29. package/assets/hooks/constitution-index.sh +43 -0
  30. package/assets/hooks/dev-server-guard.sh +115 -0
  31. package/assets/hooks/docs-guard.sh +282 -0
  32. package/assets/hooks/git-guard-delivery.sh +167 -0
  33. package/assets/hooks/git-guard-main.sh +73 -0
  34. package/assets/hooks/git-guard-push-tests.sh +94 -0
  35. package/assets/hooks/glossary-load.sh +23 -0
  36. package/assets/hooks/lint-after-edit.sh +219 -0
  37. package/assets/hooks/qa-dataid-guard.sh +121 -0
  38. package/assets/hooks/reuse-first-guard.sh +154 -0
  39. package/assets/hooks/skill-gate-rearm.sh +23 -0
  40. package/assets/hooks/skill-gate.sh +128 -0
  41. package/assets/hooks/skill-loaded.sh +21 -0
  42. package/assets/hooks/sql-guard.sh +679 -0
  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 +101 -0
  66. package/assets/patterns/api-layer-pair.md +88 -0
  67. package/assets/patterns/browser-verification-measure.md +86 -0
  68. package/assets/patterns/browser-verification-stand.md +143 -0
  69. package/assets/patterns/component-structure-new.md +99 -0
  70. package/assets/patterns/dependencies-upgrade.md +65 -0
  71. package/assets/patterns/doc-style-sweep.md +137 -0
  72. package/assets/patterns/doc-style-write.md +109 -0
  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 +99 -0
  80. package/assets/patterns/git-workflow-migration.md +88 -0
  81. package/assets/patterns/git-workflow-restart.md +49 -0
  82. package/assets/patterns/lib-layers-move.md +95 -0
  83. package/assets/patterns/lib-layers-new.md +82 -0
  84. package/assets/patterns/ownership-scope-resolve.md +69 -0
  85. package/assets/patterns/permissions-procedure.md +71 -0
  86. package/assets/patterns/platform-access-di.md +84 -0
  87. package/assets/patterns/pricing-quote.md +71 -0
  88. package/assets/patterns/reuse-first-extend.md +73 -0
  89. package/assets/patterns/seo-page.md +104 -0
  90. package/assets/patterns/seo-verify.md +83 -0
  91. package/assets/patterns/shared-code-new.md +86 -0
  92. package/assets/patterns/spec-driven-domain.md +107 -0
  93. package/assets/patterns/spec-driven-rule.md +127 -0
  94. package/assets/patterns/styling-bem-component.md +88 -0
  95. package/assets/patterns/styling-bem-layout.md +73 -0
  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 +92 -0
  100. package/assets/patterns/testing-unit.md +117 -0
  101. package/assets/patterns/translations-key.md +64 -0
  102. package/assets/patterns/ts-procedure.md +65 -0
  103. package/assets/rules/angular-patterns.md +71 -0
  104. package/assets/rules/api-layer.md +71 -0
  105. package/assets/rules/browser-verification.md +87 -0
  106. package/assets/rules/component-structure.md +64 -0
  107. package/assets/rules/dependencies.md +66 -0
  108. package/assets/rules/doc-style.md +103 -0
  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 +80 -0
  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 +70 -0
  119. package/assets/rules/platform-access.md +77 -0
  120. package/assets/rules/pricing.md +64 -0
  121. package/assets/rules/reuse-first.md +83 -0
  122. package/assets/rules/seo.md +71 -0
  123. package/assets/rules/shared-code.md +70 -0
  124. package/assets/rules/spec-driven.md +135 -0
  125. package/assets/rules/styling-bem.md +74 -0
  126. package/assets/rules/task-flow.md +110 -0
  127. package/assets/rules/testing.md +100 -0
  128. package/assets/rules/translations.md +69 -0
  129. package/assets/rules/typescript-conventions.md +76 -0
  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 +45 -0
  133. package/assets/templates/implementation.md +44 -0
  134. package/assets/templates/pattern.md +5 -1
  135. package/assets/templates/project.sh +54 -0
  136. package/assets/templates/rule.md +12 -23
  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 +14 -1
  152. package/lib/assets.d.ts.map +1 -1
  153. package/lib/assets.js +23 -2
  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 +218 -11
  162. package/lib/commands.js.map +1 -1
  163. package/lib/companion.d.ts +57 -0
  164. package/lib/companion.d.ts.map +1 -0
  165. package/lib/companion.js +60 -0
  166. package/lib/companion.js.map +1 -0
  167. package/lib/config.d.ts +42 -2
  168. package/lib/config.d.ts.map +1 -1
  169. package/lib/config.js +60 -2
  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/stamp.d.ts +2 -5
  188. package/lib/stamp.d.ts.map +1 -1
  189. package/lib/stamp.js +25 -10
  190. package/lib/stamp.js.map +1 -1
  191. package/lib/sync.d.ts +29 -0
  192. package/lib/sync.d.ts.map +1 -1
  193. package/lib/sync.js +78 -4
  194. package/lib/sync.js.map +1 -1
  195. package/lib/variants.d.ts +44 -0
  196. package/lib/variants.d.ts.map +1 -0
  197. package/lib/variants.js +82 -0
  198. package/lib/variants.js.map +1 -0
  199. package/package.json +1 -1
  200. package/rt-tools-agent-kit-0.4.0.tgz +0 -0
  201. package/assets/laws/admin-lists.md +0 -35
  202. package/assets/laws/admin-navigation.md +0 -38
  203. package/rt-tools-agent-kit-0.2.0.tgz +0 -0
@@ -0,0 +1,128 @@
1
+ #!/usr/bin/env bash
2
+ # rt-hook: PreToolUse Edit|Write|MultiEdit|Bash
3
+ # Гейт правил: не даёт править файл, пока не загружено правило, под которое он подпадает.
4
+ #
5
+ # Закон и правило, которых никто не открывает, не действуют. Напоминание в подсказке помогает
6
+ # ровно до первой спешки, поэтому требование держит хук: правка отбивается ОДИН раз на сессию
7
+ # для каждой области, а после загрузки правила та же область проходит молча — повторов нет, и
8
+ # стоит это почти ничего.
9
+ #
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
+ # правило нужно не под правку файла, а под инструмент: врут там не файлы, а стенд и координаты.
21
+ #
22
+ # ОТКАЗ В ПОЛЬЗУ РАБОТЫ: любая ошибка и любой неопознанный путь пропускают правку (exit 0).
23
+ # Сломанный гейт не имеет права остановить работу совсем.
24
+
25
+ input="$(cat 2>/dev/null)"
26
+ [ -z "$input" ] && exit 0
27
+
28
+ sid="$(printf '%s' "$input" | jq -r '.session_id // "nosession"' 2>/dev/null)"
29
+ tool="$(printf '%s' "$input" | jq -r '.tool_name // empty' 2>/dev/null)"
30
+
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
37
+ command -v skill_for >/dev/null 2>&1 || exit 0
38
+
39
+ req=""
40
+ target=""
41
+ case "$tool" in
42
+ # Инструмент среды заводит файл теми же двумя данными, только называет их иначе — без этой
43
+ # ветки файл заводился мимо гейта.
44
+ Edit|Write|MultiEdit|mcp__webstorm__create_new_file)
45
+ target="$(printf '%s' "$input" | jq -r '.tool_input.file_path // .tool_input.pathInProject // empty' 2>/dev/null)"
46
+ [ -z "$target" ] && exit 0
47
+ # Путь от корня проекта приводится к абсолютному один раз: иначе карту пришлось бы
48
+ # писать в двух формах, и вторая расходилась бы с первой молча.
49
+ case "$target" in
50
+ /*) ;;
51
+ ?*) target="${CLAUDE_PROJECT_DIR:-.}/$target" ;;
52
+ esac
53
+ # Правила этого дерева действуют на файлы этого дерева. Без проверки корня гейт ловил
54
+ # бы и соседний репозиторий на той же машине.
55
+ case "$target" in
56
+ "${CLAUDE_PROJECT_DIR:-.}"/*) ;;
57
+ *) exit 0 ;;
58
+ esac
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)"
64
+ ;;
65
+ # Терминал среды исполняет ту же командную строку и кладёт её в то же поле: без этой ветки
66
+ # коммит из него не требовал правила, тогда как тот же коммит из оболочки требовал.
67
+ Bash|mcp__webstorm__execute_terminal_command|mcp__webstorm__execute_tool)
68
+ target="$(printf '%s' "$input" | jq -r '.tool_input.command // empty' 2>/dev/null)"
69
+ [ -z "$target" ] && exit 0
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)"
83
+ ;;
84
+ *) exit 0 ;;
85
+ esac
86
+
87
+ [ -z "$req" ] && exit 0
88
+
89
+ # Карта вправе назвать несколько правил: доменное правило и то, что действует вторым слоем.
90
+ # Требуется первое незагруженное, а не все сразу: отказ, перечисляющий три правила, читается
91
+ # как «загрузи три», и загружают их подряд, теряя ту самую однократность.
92
+ loaded="${TMPDIR:-/tmp}/claude-skill-gate/${sid}.loaded"
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"
110
+
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
+
125
+ jq -n --arg r "$reason" '{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:$r}}' 2>/dev/null \
126
+ || printf '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"Загрузи правило %s и повтори."}}\n' "$req"
127
+
128
+ exit 0
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env bash
2
+ # rt-hook: PostToolUse Skill
3
+ # Запись о загруженном правиле. PostToolUse на инструменте `Skill`.
4
+ #
5
+ # Гейт обязан знать, загружено правило или нет, а спросить об этом ему некого: инструмент о
6
+ # своих прошлых вызовах не рассказывает. Поэтому загрузка записывается здесь, по сессии.
7
+ #
8
+ # Хук только наблюдает: он всегда пропускает и ничего не отбивает.
9
+
10
+ input="$(cat 2>/dev/null)"
11
+ [ -z "$input" ] && exit 0
12
+
13
+ sid="$(printf '%s' "$input" | jq -r '.session_id // "nosession"' 2>/dev/null)"
14
+ skill="$(printf '%s' "$input" | jq -r '.tool_input.skill // empty' 2>/dev/null)"
15
+ [ -z "$skill" ] && exit 0
16
+
17
+ dir="${TMPDIR:-/tmp}/claude-skill-gate"
18
+ mkdir -p "$dir" 2>/dev/null || exit 0
19
+ printf '%s\n' "$skill" >> "$dir/${sid}.loaded" 2>/dev/null
20
+
21
+ exit 0