buildanything 1.8.0 → 2.1.1

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 (494) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +17 -3
  3. package/CHANGELOG.md +57 -0
  4. package/README.md +57 -61
  5. package/agents/a11y-architect.md +168 -0
  6. package/agents/briefing-officer.md +172 -0
  7. package/agents/business-model.md +82 -29
  8. package/agents/code-architect.md +80 -0
  9. package/agents/code-reviewer.md +256 -0
  10. package/agents/code-simplifier.md +72 -0
  11. package/agents/design-brand-guardian.md +312 -53
  12. package/agents/design-critic.md +144 -0
  13. package/agents/design-inclusive-visuals-specialist.md +8 -19
  14. package/agents/design-ui-designer.md +352 -56
  15. package/agents/design-ux-architect.md +418 -55
  16. package/agents/design-ux-researcher.md +359 -49
  17. package/agents/engineering-ai-engineer.md +28 -36
  18. package/agents/engineering-backend-architect.md +187 -36
  19. package/agents/engineering-data-engineer.md +227 -43
  20. package/agents/engineering-devops-automator.md +229 -74
  21. package/agents/engineering-frontend-developer.md +223 -34
  22. package/agents/engineering-mobile-app-builder.md +8 -1
  23. package/agents/engineering-rapid-prototyper.md +45 -11
  24. package/agents/engineering-security-engineer.md +265 -61
  25. package/agents/engineering-senior-developer.md +141 -19
  26. package/agents/engineering-sre.md +86 -0
  27. package/agents/engineering-technical-writer.md +287 -41
  28. package/agents/feature-intel.md +111 -0
  29. package/agents/ios-app-review-guardian.md +21 -2
  30. package/agents/ios-foundation-models-specialist.md +22 -2
  31. package/agents/ios-product-reality-auditor.md +292 -0
  32. package/agents/ios-storekit-specialist.md +11 -2
  33. package/agents/ios-swift-architect.md +29 -1
  34. package/agents/ios-swift-search.md +9 -1
  35. package/agents/ios-swift-ui-design.md +40 -5
  36. package/agents/marketing-app-store-optimizer.md +248 -64
  37. package/agents/planner.md +221 -0
  38. package/agents/pr-test-analyzer.md +64 -0
  39. package/agents/product-feedback-synthesizer.md +70 -2
  40. package/agents/product-owner.md +163 -0
  41. package/agents/product-reality-auditor.md +216 -0
  42. package/agents/product-spec-writer.md +176 -0
  43. package/agents/refactor-cleaner.md +110 -0
  44. package/agents/security-reviewer.md +129 -0
  45. package/agents/silent-failure-hunter.md +55 -0
  46. package/agents/swift-build-resolver.md +121 -0
  47. package/agents/swift-reviewer.md +113 -0
  48. package/agents/tech-feasibility.md +26 -4
  49. package/agents/testing-api-tester.md +238 -59
  50. package/agents/testing-evidence-collector.md +50 -1
  51. package/agents/testing-performance-benchmarker.md +23 -1
  52. package/agents/testing-reality-checker.md +7 -1
  53. package/agents/visual-research.md +118 -0
  54. package/bin/adapters/cycle-counter-tool.ts +155 -0
  55. package/bin/adapters/scribe-tool.ts +73 -0
  56. package/bin/adapters/state-save-tool.ts +130 -0
  57. package/bin/adapters/write-lease-tool.ts +127 -0
  58. package/bin/buildanything-runtime.js +15 -0
  59. package/bin/buildanything-runtime.ts +241 -0
  60. package/bin/graph-index.js +24 -0
  61. package/bin/graph-index.ts +340 -0
  62. package/bin/mcp-servers/graph-mcp.js +26 -0
  63. package/bin/mcp-servers/graph-mcp.ts +481 -0
  64. package/bin/mcp-servers/orchestrator-mcp.js +26 -0
  65. package/bin/mcp-servers/orchestrator-mcp.ts +361 -0
  66. package/bin/setup.js +312 -76
  67. package/commands/add-feature.md +2 -0
  68. package/commands/build.md +994 -265
  69. package/commands/fix.md +1 -1
  70. package/commands/idea-sweep.md +2 -2
  71. package/commands/self-check.md +121 -0
  72. package/commands/setup.md +61 -9
  73. package/commands/ux-review.md +5 -5
  74. package/commands/verify.md +9 -9
  75. package/docs/migration/agents.yaml +729 -0
  76. package/docs/migration/phase-graph.yaml +1504 -0
  77. package/docs/migration/sdk-host-compat.md +18 -0
  78. package/hooks/compile-writer-owner-cache.ts +171 -0
  79. package/hooks/design-md-lint +4 -0
  80. package/hooks/design-md-lint.ts +295 -0
  81. package/hooks/hooks.json +36 -0
  82. package/hooks/pre-tool-use +19 -0
  83. package/hooks/pre-tool-use.ts +807 -0
  84. package/hooks/record-mode-transitions.ts +235 -0
  85. package/hooks/session-start +71 -1
  86. package/hooks/subagent-start +17 -0
  87. package/hooks/subagent-start.ts +472 -0
  88. package/hooks/subagent-stop +17 -0
  89. package/hooks/subagent-stop.ts +153 -0
  90. package/package.json +26 -4
  91. package/protocols/agent-prompt-authoring.md +165 -0
  92. package/protocols/architecture-schema.md +178 -0
  93. package/protocols/cleanup.md +4 -0
  94. package/protocols/decision-log.md +135 -0
  95. package/protocols/design-md-authoring.md +520 -0
  96. package/protocols/design-md-spec.md +362 -0
  97. package/protocols/fake-data-detector.md +1 -1
  98. package/protocols/ios-context.md +10 -11
  99. package/protocols/ios-fake-data-detector.md +65 -0
  100. package/protocols/ios-phase-branches.md +299 -39
  101. package/protocols/launch-readiness.md +262 -0
  102. package/protocols/metric-loop.md +62 -2
  103. package/protocols/page-spec-schema.md +234 -0
  104. package/protocols/product-spec-schema.md +354 -0
  105. package/protocols/smoke-test.md +9 -1
  106. package/protocols/sprint-tasks-schema.md +53 -0
  107. package/protocols/state-schema.json +423 -0
  108. package/protocols/state-schema.md +202 -0
  109. package/protocols/verify.md +91 -3
  110. package/protocols/web-phase-branches.md +395 -75
  111. package/skills/ios/_VENDORED.md +2 -0
  112. package/skills/ios/app-store-connect-metadata/SKILL.md +148 -0
  113. package/skills/ios/asc-privacy-manifest/SKILL.md +350 -0
  114. package/skills/ios/hig-components-content/SKILL.md +86 -0
  115. package/skills/ios/hig-components-content/references/activity-views.md +79 -0
  116. package/skills/ios/hig-components-content/references/charts.md +180 -0
  117. package/skills/ios/hig-components-content/references/collections.md +48 -0
  118. package/skills/ios/hig-components-content/references/color-wells.md +42 -0
  119. package/skills/ios/hig-components-content/references/image-views.md +82 -0
  120. package/skills/ios/hig-components-content/references/image-wells.md +34 -0
  121. package/skills/ios/hig-components-content/references/lockups.md +78 -0
  122. package/skills/ios/hig-components-content/references/web-views.md +36 -0
  123. package/skills/ios/hig-components-controls/SKILL.md +88 -0
  124. package/skills/ios/hig-components-controls/references/combo-boxes.md +40 -0
  125. package/skills/ios/hig-components-controls/references/controls.md +112 -0
  126. package/skills/ios/hig-components-controls/references/gauges.md +74 -0
  127. package/skills/ios/hig-components-controls/references/labels.md +92 -0
  128. package/skills/ios/hig-components-controls/references/pickers.md +128 -0
  129. package/skills/ios/hig-components-controls/references/rating-indicators.md +38 -0
  130. package/skills/ios/hig-components-controls/references/segmented-controls.md +94 -0
  131. package/skills/ios/hig-components-controls/references/sliders.md +92 -0
  132. package/skills/ios/hig-components-controls/references/steppers.md +40 -0
  133. package/skills/ios/hig-components-controls/references/text-fields.md +88 -0
  134. package/skills/ios/hig-components-controls/references/text-views.md +56 -0
  135. package/skills/ios/hig-components-controls/references/toggles.md +127 -0
  136. package/skills/ios/hig-components-controls/references/token-fields.md +48 -0
  137. package/skills/ios/hig-components-controls/references/virtual-keyboards.md +156 -0
  138. package/skills/ios/hig-components-dialogs/SKILL.md +76 -0
  139. package/skills/ios/hig-components-dialogs/references/action-sheets.md +74 -0
  140. package/skills/ios/hig-components-dialogs/references/alerts.md +158 -0
  141. package/skills/ios/hig-components-dialogs/references/digit-entry-views.md +32 -0
  142. package/skills/ios/hig-components-dialogs/references/popovers.md +81 -0
  143. package/skills/ios/hig-components-dialogs/references/sheets.md +157 -0
  144. package/skills/ios/hig-components-layout/SKILL.md +99 -0
  145. package/skills/ios/hig-components-layout/references/boxes.md +48 -0
  146. package/skills/ios/hig-components-layout/references/column-views.md +44 -0
  147. package/skills/ios/hig-components-layout/references/lists-and-tables.md +99 -0
  148. package/skills/ios/hig-components-layout/references/ornaments.md +56 -0
  149. package/skills/ios/hig-components-layout/references/outline-views.md +64 -0
  150. package/skills/ios/hig-components-layout/references/panels.md +75 -0
  151. package/skills/ios/hig-components-layout/references/scroll-views.md +123 -0
  152. package/skills/ios/hig-components-layout/references/sidebars.md +109 -0
  153. package/skills/ios/hig-components-layout/references/split-views.md +110 -0
  154. package/skills/ios/hig-components-layout/references/tab-bars.md +173 -0
  155. package/skills/ios/hig-components-layout/references/tab-views.md +68 -0
  156. package/skills/ios/hig-components-layout/references/windows.md +188 -0
  157. package/skills/ios/hig-components-menus/SKILL.md +81 -0
  158. package/skills/ios/hig-components-menus/references/action-button.md +61 -0
  159. package/skills/ios/hig-components-menus/references/buttons.md +261 -0
  160. package/skills/ios/hig-components-menus/references/context-menus.md +105 -0
  161. package/skills/ios/hig-components-menus/references/disclosure-controls.md +84 -0
  162. package/skills/ios/hig-components-menus/references/dock-menus.md +40 -0
  163. package/skills/ios/hig-components-menus/references/edit-menus.md +88 -0
  164. package/skills/ios/hig-components-menus/references/menus.md +171 -0
  165. package/skills/ios/hig-components-menus/references/pop-up-buttons.md +70 -0
  166. package/skills/ios/hig-components-menus/references/pull-down-buttons.md +77 -0
  167. package/skills/ios/hig-components-menus/references/the-menu-bar.md +303 -0
  168. package/skills/ios/hig-components-menus/references/toolbars.md +256 -0
  169. package/skills/ios/hig-components-search/SKILL.md +68 -0
  170. package/skills/ios/hig-components-search/references/page-controls.md +120 -0
  171. package/skills/ios/hig-components-search/references/path-controls.md +40 -0
  172. package/skills/ios/hig-components-search/references/search-fields.md +189 -0
  173. package/skills/ios/hig-components-status/SKILL.md +80 -0
  174. package/skills/ios/hig-components-status/references/activity-rings.md +105 -0
  175. package/skills/ios/hig-components-status/references/progress-indicators.md +116 -0
  176. package/skills/ios/hig-components-status/references/status-bars.md +38 -0
  177. package/skills/ios/hig-components-system/SKILL.md +88 -0
  178. package/skills/ios/hig-components-system/references/app-clips.md +387 -0
  179. package/skills/ios/hig-components-system/references/app-shortcuts.md +114 -0
  180. package/skills/ios/hig-components-system/references/complications.md +425 -0
  181. package/skills/ios/hig-components-system/references/home-screen-quick-actions.md +42 -0
  182. package/skills/ios/hig-components-system/references/live-activities.md +442 -0
  183. package/skills/ios/hig-components-system/references/notifications.md +153 -0
  184. package/skills/ios/hig-components-system/references/top-shelf.md +135 -0
  185. package/skills/ios/hig-components-system/references/watch-faces.md +40 -0
  186. package/skills/ios/hig-components-system/references/widgets.md +517 -0
  187. package/skills/ios/hig-foundations/SKILL.md +98 -0
  188. package/skills/ios/hig-foundations/references/accessibility.md +291 -0
  189. package/skills/ios/hig-foundations/references/app-icons.md +210 -0
  190. package/skills/ios/hig-foundations/references/branding.md +44 -0
  191. package/skills/ios/hig-foundations/references/color.md +274 -0
  192. package/skills/ios/hig-foundations/references/dark-mode.md +116 -0
  193. package/skills/ios/hig-foundations/references/icons.md +263 -0
  194. package/skills/ios/hig-foundations/references/images.md +176 -0
  195. package/skills/ios/hig-foundations/references/immersive-experiences.md +174 -0
  196. package/skills/ios/hig-foundations/references/inclusion.md +189 -0
  197. package/skills/ios/hig-foundations/references/layout.md +425 -0
  198. package/skills/ios/hig-foundations/references/materials.md +238 -0
  199. package/skills/ios/hig-foundations/references/motion.md +103 -0
  200. package/skills/ios/hig-foundations/references/privacy.md +231 -0
  201. package/skills/ios/hig-foundations/references/right-to-left.md +206 -0
  202. package/skills/ios/hig-foundations/references/sf-symbols.md +310 -0
  203. package/skills/ios/hig-foundations/references/spatial-layout.md +142 -0
  204. package/skills/ios/hig-foundations/references/typography.md +1146 -0
  205. package/skills/ios/hig-foundations/references/writing.md +91 -0
  206. package/skills/ios/hig-inputs/SKILL.md +94 -0
  207. package/skills/ios/hig-inputs/references/apple-pencil-and-scribble.md +148 -0
  208. package/skills/ios/hig-inputs/references/camera-control.md +107 -0
  209. package/skills/ios/hig-inputs/references/digital-crown.md +83 -0
  210. package/skills/ios/hig-inputs/references/eyes.md +120 -0
  211. package/skills/ios/hig-inputs/references/focus-and-selection.md +120 -0
  212. package/skills/ios/hig-inputs/references/game-controls.md +156 -0
  213. package/skills/ios/hig-inputs/references/gestures.md +208 -0
  214. package/skills/ios/hig-inputs/references/gyro-and-accelerometer.md +40 -0
  215. package/skills/ios/hig-inputs/references/keyboards.md +234 -0
  216. package/skills/ios/hig-inputs/references/nearby-interactions.md +70 -0
  217. package/skills/ios/hig-inputs/references/pointing-devices.md +237 -0
  218. package/skills/ios/hig-inputs/references/remotes.md +67 -0
  219. package/skills/ios/hig-inputs/references/spatial-interactions.md +70 -0
  220. package/skills/ios/hig-patterns/SKILL.md +104 -0
  221. package/skills/ios/hig-patterns/references/charting-data.md +81 -0
  222. package/skills/ios/hig-patterns/references/collaboration-and-sharing.md +86 -0
  223. package/skills/ios/hig-patterns/references/drag-and-drop.md +134 -0
  224. package/skills/ios/hig-patterns/references/entering-data.md +69 -0
  225. package/skills/ios/hig-patterns/references/feedback.md +67 -0
  226. package/skills/ios/hig-patterns/references/file-management.md +135 -0
  227. package/skills/ios/hig-patterns/references/going-full-screen.md +79 -0
  228. package/skills/ios/hig-patterns/references/launching.md +81 -0
  229. package/skills/ios/hig-patterns/references/live-viewing-apps.md +79 -0
  230. package/skills/ios/hig-patterns/references/loading.md +59 -0
  231. package/skills/ios/hig-patterns/references/managing-accounts.md +107 -0
  232. package/skills/ios/hig-patterns/references/managing-notifications.md +99 -0
  233. package/skills/ios/hig-patterns/references/modality.md +82 -0
  234. package/skills/ios/hig-patterns/references/multitasking.md +131 -0
  235. package/skills/ios/hig-patterns/references/offering-help.md +117 -0
  236. package/skills/ios/hig-patterns/references/onboarding.md +69 -0
  237. package/skills/ios/hig-patterns/references/playing-audio.md +124 -0
  238. package/skills/ios/hig-patterns/references/playing-haptics.md +280 -0
  239. package/skills/ios/hig-patterns/references/playing-video.md +180 -0
  240. package/skills/ios/hig-patterns/references/printing.md +50 -0
  241. package/skills/ios/hig-patterns/references/ratings-and-reviews.md +48 -0
  242. package/skills/ios/hig-patterns/references/searching.md +70 -0
  243. package/skills/ios/hig-patterns/references/settings.md +84 -0
  244. package/skills/ios/hig-patterns/references/undo-and-redo.md +58 -0
  245. package/skills/ios/hig-patterns/references/workouts.md +76 -0
  246. package/skills/ios/hig-platforms/SKILL.md +84 -0
  247. package/skills/ios/hig-platforms/references/designing-for-games.md +159 -0
  248. package/skills/ios/hig-platforms/references/designing-for-ios.md +66 -0
  249. package/skills/ios/hig-platforms/references/designing-for-ipados.md +64 -0
  250. package/skills/ios/hig-platforms/references/designing-for-macos.md +70 -0
  251. package/skills/ios/hig-platforms/references/designing-for-tvos.md +68 -0
  252. package/skills/ios/hig-platforms/references/designing-for-visionos.md +85 -0
  253. package/skills/ios/hig-platforms/references/designing-for-watchos.md +74 -0
  254. package/skills/ios/hig-project-context/SKILL.md +133 -0
  255. package/skills/ios/hig-technologies/SKILL.md +107 -0
  256. package/skills/ios/hig-technologies/references/airplay.md +125 -0
  257. package/skills/ios/hig-technologies/references/always-on.md +62 -0
  258. package/skills/ios/hig-technologies/references/apple-pay.md +441 -0
  259. package/skills/ios/hig-technologies/references/augmented-reality.md +247 -0
  260. package/skills/ios/hig-technologies/references/carekit.md +224 -0
  261. package/skills/ios/hig-technologies/references/carplay.md +119 -0
  262. package/skills/ios/hig-technologies/references/game-center.md +343 -0
  263. package/skills/ios/hig-technologies/references/generative-ai.md +110 -0
  264. package/skills/ios/hig-technologies/references/healthkit.md +120 -0
  265. package/skills/ios/hig-technologies/references/homekit.md +343 -0
  266. package/skills/ios/hig-technologies/references/icloud.md +52 -0
  267. package/skills/ios/hig-technologies/references/id-verifier.md +73 -0
  268. package/skills/ios/hig-technologies/references/imessage-apps-and-stickers.md +105 -0
  269. package/skills/ios/hig-technologies/references/in-app-purchase.md +263 -0
  270. package/skills/ios/hig-technologies/references/live-photos.md +54 -0
  271. package/skills/ios/hig-technologies/references/mac-catalyst.md +216 -0
  272. package/skills/ios/hig-technologies/references/machine-learning.md +394 -0
  273. package/skills/ios/hig-technologies/references/maps.md +221 -0
  274. package/skills/ios/hig-technologies/references/nfc.md +51 -0
  275. package/skills/ios/hig-technologies/references/photo-editing.md +40 -0
  276. package/skills/ios/hig-technologies/references/researchkit.md +134 -0
  277. package/skills/ios/hig-technologies/references/shareplay.md +142 -0
  278. package/skills/ios/hig-technologies/references/shazamkit.md +47 -0
  279. package/skills/ios/hig-technologies/references/sign-in-with-apple.md +288 -0
  280. package/skills/ios/hig-technologies/references/siri.md +523 -0
  281. package/skills/ios/hig-technologies/references/tap-to-pay-on-iphone.md +208 -0
  282. package/skills/ios/hig-technologies/references/voiceover.md +90 -0
  283. package/skills/ios/hig-technologies/references/wallet.md +420 -0
  284. package/skills/ios/ios-bootstrap/SKILL.md +17 -8
  285. package/skills/ios/swift-actor-persistence/SKILL.md +143 -0
  286. package/skills/ios/swift-concurrency-6-2/SKILL.md +216 -0
  287. package/skills/ios/swift-protocol-di-testing/SKILL.md +190 -0
  288. package/skills/ios/swiftui-design-tokens/SKILL.md +475 -0
  289. package/skills/ios/writing-for-interfaces/SKILL.md +75 -0
  290. package/skills/web/accessibility/SKILL.md +146 -0
  291. package/skills/web/aceternity-ui/SKILL.md +719 -0
  292. package/skills/web/aceternity-ui/metadata.json +10 -0
  293. package/skills/web/api-design/SKILL.md +523 -0
  294. package/skills/web/chart-accessibility/SKILL.md +332 -0
  295. package/skills/web/composition-patterns/AGENTS.md +946 -0
  296. package/skills/web/composition-patterns/README.md +60 -0
  297. package/skills/web/composition-patterns/SKILL.md +89 -0
  298. package/skills/web/composition-patterns/metadata.json +11 -0
  299. package/skills/web/composition-patterns/rules/_sections.md +29 -0
  300. package/skills/web/composition-patterns/rules/_template.md +24 -0
  301. package/skills/web/composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  302. package/skills/web/composition-patterns/rules/architecture-compound-components.md +112 -0
  303. package/skills/web/composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  304. package/skills/web/composition-patterns/rules/patterns-explicit-variants.md +100 -0
  305. package/skills/web/composition-patterns/rules/react19-no-forwardref.md +42 -0
  306. package/skills/web/composition-patterns/rules/state-context-interface.md +191 -0
  307. package/skills/web/composition-patterns/rules/state-decouple-implementation.md +113 -0
  308. package/skills/web/composition-patterns/rules/state-lift-state.md +125 -0
  309. package/skills/web/cost-aware-llm-pipeline/SKILL.md +183 -0
  310. package/skills/web/database-migrations/SKILL.md +429 -0
  311. package/skills/web/deployment-patterns/SKILL.md +427 -0
  312. package/skills/web/docker-patterns/SKILL.md +364 -0
  313. package/skills/web/e2e-testing/SKILL.md +326 -0
  314. package/skills/web/lighthouse-ci/SKILL.md +361 -0
  315. package/skills/web/mcp-server-patterns/SKILL.md +69 -0
  316. package/skills/web/next-best-practices/SKILL.md +153 -0
  317. package/skills/web/next-best-practices/async-patterns.md +87 -0
  318. package/skills/web/next-best-practices/bundling.md +180 -0
  319. package/skills/web/next-best-practices/data-patterns.md +297 -0
  320. package/skills/web/next-best-practices/debug-tricks.md +105 -0
  321. package/skills/web/next-best-practices/directives.md +73 -0
  322. package/skills/web/next-best-practices/error-handling.md +227 -0
  323. package/skills/web/next-best-practices/file-conventions.md +140 -0
  324. package/skills/web/next-best-practices/font.md +245 -0
  325. package/skills/web/next-best-practices/functions.md +108 -0
  326. package/skills/web/next-best-practices/hydration-error.md +91 -0
  327. package/skills/web/next-best-practices/image.md +173 -0
  328. package/skills/web/next-best-practices/metadata.md +301 -0
  329. package/skills/web/next-best-practices/parallel-routes.md +287 -0
  330. package/skills/web/next-best-practices/route-handlers.md +146 -0
  331. package/skills/web/next-best-practices/rsc-boundaries.md +159 -0
  332. package/skills/web/next-best-practices/runtime-selection.md +39 -0
  333. package/skills/web/next-best-practices/scripts.md +141 -0
  334. package/skills/web/next-best-practices/self-hosting.md +371 -0
  335. package/skills/web/next-best-practices/suspense-boundaries.md +67 -0
  336. package/skills/web/next-cache-components/SKILL.md +411 -0
  337. package/skills/web/postgres-best-practices/SKILL.md +14 -0
  338. package/skills/web/postgres-best-practices/references/schema-design.md +9 -0
  339. package/skills/web/react-best-practices/AGENTS.md +3810 -0
  340. package/skills/web/react-best-practices/README.md +123 -0
  341. package/skills/web/react-best-practices/SKILL.md +149 -0
  342. package/skills/web/react-best-practices/metadata.json +15 -0
  343. package/skills/web/react-best-practices/rules/_sections.md +46 -0
  344. package/skills/web/react-best-practices/rules/_template.md +28 -0
  345. package/skills/web/react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  346. package/skills/web/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  347. package/skills/web/react-best-practices/rules/advanced-init-once.md +42 -0
  348. package/skills/web/react-best-practices/rules/advanced-use-latest.md +39 -0
  349. package/skills/web/react-best-practices/rules/async-api-routes.md +38 -0
  350. package/skills/web/react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  351. package/skills/web/react-best-practices/rules/async-defer-await.md +82 -0
  352. package/skills/web/react-best-practices/rules/async-dependencies.md +51 -0
  353. package/skills/web/react-best-practices/rules/async-parallel.md +28 -0
  354. package/skills/web/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  355. package/skills/web/react-best-practices/rules/bundle-analyzable-paths.md +63 -0
  356. package/skills/web/react-best-practices/rules/bundle-barrel-imports.md +60 -0
  357. package/skills/web/react-best-practices/rules/bundle-conditional.md +31 -0
  358. package/skills/web/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  359. package/skills/web/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  360. package/skills/web/react-best-practices/rules/bundle-preload.md +50 -0
  361. package/skills/web/react-best-practices/rules/client-event-listeners.md +74 -0
  362. package/skills/web/react-best-practices/rules/client-localstorage-schema.md +71 -0
  363. package/skills/web/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  364. package/skills/web/react-best-practices/rules/client-swr-dedup.md +56 -0
  365. package/skills/web/react-best-practices/rules/js-batch-dom-css.md +107 -0
  366. package/skills/web/react-best-practices/rules/js-cache-function-results.md +80 -0
  367. package/skills/web/react-best-practices/rules/js-cache-property-access.md +28 -0
  368. package/skills/web/react-best-practices/rules/js-cache-storage.md +70 -0
  369. package/skills/web/react-best-practices/rules/js-combine-iterations.md +32 -0
  370. package/skills/web/react-best-practices/rules/js-early-exit.md +50 -0
  371. package/skills/web/react-best-practices/rules/js-flatmap-filter.md +60 -0
  372. package/skills/web/react-best-practices/rules/js-hoist-regexp.md +45 -0
  373. package/skills/web/react-best-practices/rules/js-index-maps.md +37 -0
  374. package/skills/web/react-best-practices/rules/js-length-check-first.md +49 -0
  375. package/skills/web/react-best-practices/rules/js-min-max-loop.md +82 -0
  376. package/skills/web/react-best-practices/rules/js-request-idle-callback.md +105 -0
  377. package/skills/web/react-best-practices/rules/js-set-map-lookups.md +24 -0
  378. package/skills/web/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  379. package/skills/web/react-best-practices/rules/rendering-activity.md +26 -0
  380. package/skills/web/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  381. package/skills/web/react-best-practices/rules/rendering-conditional-render.md +40 -0
  382. package/skills/web/react-best-practices/rules/rendering-content-visibility.md +38 -0
  383. package/skills/web/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  384. package/skills/web/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  385. package/skills/web/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  386. package/skills/web/react-best-practices/rules/rendering-resource-hints.md +85 -0
  387. package/skills/web/react-best-practices/rules/rendering-script-defer-async.md +68 -0
  388. package/skills/web/react-best-practices/rules/rendering-svg-precision.md +28 -0
  389. package/skills/web/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  390. package/skills/web/react-best-practices/rules/rerender-defer-reads.md +39 -0
  391. package/skills/web/react-best-practices/rules/rerender-dependencies.md +45 -0
  392. package/skills/web/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  393. package/skills/web/react-best-practices/rules/rerender-derived-state.md +29 -0
  394. package/skills/web/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  395. package/skills/web/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  396. package/skills/web/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  397. package/skills/web/react-best-practices/rules/rerender-memo.md +44 -0
  398. package/skills/web/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  399. package/skills/web/react-best-practices/rules/rerender-no-inline-components.md +82 -0
  400. package/skills/web/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  401. package/skills/web/react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  402. package/skills/web/react-best-practices/rules/rerender-transitions.md +40 -0
  403. package/skills/web/react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  404. package/skills/web/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  405. package/skills/web/react-best-practices/rules/server-after-nonblocking.md +73 -0
  406. package/skills/web/react-best-practices/rules/server-auth-actions.md +96 -0
  407. package/skills/web/react-best-practices/rules/server-cache-lru.md +41 -0
  408. package/skills/web/react-best-practices/rules/server-cache-react.md +76 -0
  409. package/skills/web/react-best-practices/rules/server-dedup-props.md +65 -0
  410. package/skills/web/react-best-practices/rules/server-hoist-static-io.md +149 -0
  411. package/skills/web/react-best-practices/rules/server-no-shared-module-state.md +50 -0
  412. package/skills/web/react-best-practices/rules/server-parallel-fetching.md +83 -0
  413. package/skills/web/react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  414. package/skills/web/react-best-practices/rules/server-serialization.md +38 -0
  415. package/skills/web/seo/SKILL.md +154 -0
  416. package/skills/web/web-design-guidelines/SKILL.md +39 -0
  417. package/skills/web/zap-scan-config/SKILL.md +444 -0
  418. package/skills/web/zap-scan-config/assets/.gitkeep +9 -0
  419. package/skills/web/zap-scan-config/assets/github_action.yml +207 -0
  420. package/skills/web/zap-scan-config/assets/gitlab_ci.yml +226 -0
  421. package/skills/web/zap-scan-config/assets/zap_automation.yaml +196 -0
  422. package/skills/web/zap-scan-config/assets/zap_context.xml +192 -0
  423. package/skills/web/zap-scan-config/references/EXAMPLE.md +40 -0
  424. package/skills/web/zap-scan-config/references/api_testing_guide.md +475 -0
  425. package/skills/web/zap-scan-config/references/authentication_guide.md +431 -0
  426. package/skills/web/zap-scan-config/references/false_positive_handling.md +427 -0
  427. package/skills/web/zap-scan-config/references/owasp_mapping.md +255 -0
  428. package/src/graph/ids.ts +86 -0
  429. package/src/graph/index.ts +32 -0
  430. package/src/graph/parser/architecture.ts +603 -0
  431. package/src/graph/parser/component-manifest.ts +268 -0
  432. package/src/graph/parser/decisions-jsonl.ts +407 -0
  433. package/src/graph/parser/design-md-pass2.ts +253 -0
  434. package/src/graph/parser/design-md.ts +477 -0
  435. package/src/graph/parser/page-spec.ts +496 -0
  436. package/src/graph/parser/product-spec.ts +930 -0
  437. package/src/graph/parser/screenshot.ts +342 -0
  438. package/src/graph/parser/sprint-tasks.ts +317 -0
  439. package/src/graph/storage/index.ts +1154 -0
  440. package/src/graph/types.ts +432 -0
  441. package/src/graph/util/dhash.ts +84 -0
  442. package/src/lrr/aggregator.ts +175 -0
  443. package/src/orchestrator/hooks/context-header.ts +119 -0
  444. package/src/orchestrator/hooks/token-accounting-emitter.ts +77 -0
  445. package/src/orchestrator/hooks/token-accounting.ts +112 -0
  446. package/src/orchestrator/mcp/cycle-counter.ts +130 -0
  447. package/src/orchestrator/mcp/scribe.ts +294 -0
  448. package/src/orchestrator/mcp/state-save.ts +149 -0
  449. package/src/orchestrator/mcp/write-lease.ts +184 -0
  450. package/src/orchestrator/phase4-shared-context.ts +57 -0
  451. package/src/orchestrator/schemas/backward-edge.ts +46 -0
  452. package/agents/agentic-identity-trust.md +0 -121
  453. package/agents/data-consolidation-agent.md +0 -39
  454. package/agents/design-image-prompt-engineer.md +0 -105
  455. package/agents/design-visual-storyteller.md +0 -147
  456. package/agents/design-whimsy-injector.md +0 -89
  457. package/agents/engineering-autonomous-optimization-architect.md +0 -105
  458. package/agents/market-intel.md +0 -35
  459. package/agents/marketing-instagram-curator.md +0 -111
  460. package/agents/marketing-reddit-community-builder.md +0 -121
  461. package/agents/marketing-social-media-strategist.md +0 -74
  462. package/agents/marketing-tiktok-strategist.md +0 -123
  463. package/agents/marketing-twitter-engager.md +0 -124
  464. package/agents/marketing-wechat-official-account.md +0 -143
  465. package/agents/marketing-xiaohongshu-specialist.md +0 -136
  466. package/agents/marketing-zhihu-strategist.md +0 -160
  467. package/agents/product-behavioral-nudge-engine.md +0 -78
  468. package/agents/project-management-experiment-tracker.md +0 -102
  469. package/agents/report-distribution-agent.md +0 -43
  470. package/agents/risk-analysis.md +0 -45
  471. package/agents/sales-data-extraction-agent.md +0 -46
  472. package/agents/specialized-cultural-intelligence-strategist.md +0 -65
  473. package/agents/specialized-developer-advocate.md +0 -146
  474. package/agents/support-analytics-reporter.md +0 -133
  475. package/agents/support-executive-summary-generator.md +0 -64
  476. package/agents/support-finance-tracker.md +0 -145
  477. package/agents/support-legal-compliance-checker.md +0 -129
  478. package/agents/support-support-responder.md +0 -91
  479. package/agents/testing-accessibility-auditor.md +0 -110
  480. package/agents/testing-test-results-analyzer.md +0 -97
  481. package/agents/testing-tool-evaluator.md +0 -76
  482. package/agents/testing-workflow-optimizer.md +0 -99
  483. package/agents/user-research.md +0 -40
  484. package/protocols/brainstorm.md +0 -99
  485. package/protocols/design.md +0 -269
  486. package/protocols/planning.md +0 -87
  487. package/skills/ios/ios-hig/SKILL.md +0 -41
  488. package/skills/ios/ios-hig/references/accessibility.md +0 -81
  489. package/skills/ios/ios-hig/references/content.md +0 -142
  490. package/skills/ios/ios-hig/references/feedback.md +0 -123
  491. package/skills/ios/ios-hig/references/interaction.md +0 -199
  492. package/skills/ios/ios-hig/references/performance-platform.md +0 -129
  493. package/skills/ios/ios-hig/references/privacy-permissions.md +0 -181
  494. package/skills/ios/ios-hig/references/visual-design.md +0 -84
@@ -0,0 +1,118 @@
1
+ ---
2
+ name: visual-research
3
+ description: Playwright-driven visual sweep of rival UIs or awards sites. Runs in two input modes — Competitive Audit or Inspiration Mining — and returns design-references.md grouped by DNA axis.
4
+ color: blue
5
+ model: sonnet
6
+ effort: medium
7
+ ---
8
+
9
+ # Visual Research
10
+
11
+ ## Skill Access
12
+
13
+ This agent does not consult vendored skills. It operates from its system prompt alone. Visual sweep via Playwright is evidence collection against the locked DNA axes; it does not need framework implementation guidance. Library catalog decisions happen in the downstream design agents.
14
+
15
+ You run the Phase 3.1 visual sweep. The 6-axis Visual DNA has already been locked by Brand Guardian at Step 3.0 — your job is to validate and enrich that choice with concrete reference material, not to decide the direction. You are goal-directed, not exploratory. Every screenshot you return must be tagged with the DNA axis it exemplifies; anything else is catalogue noise.
16
+
17
+ You run in one of two input modes, chosen by the caller:
18
+
19
+ - **`competitive-audit`** — find 5-8 rival products that exemplify the locked DNA (not all competitors, just the ones that nail the axes we chose)
20
+ - **`inspiration-mining`** — find 5-8 Awwwards / Godly / SiteInspire sites that match the DNA
21
+
22
+ Both modes run the same Playwright capture loop with different URL seeds.
23
+
24
+ ## Inputs
25
+
26
+ - Path to `DESIGN.md` — the locked 7-axis DNA lives in `## Overview > ### Brand DNA`
27
+ - Mode flag: `competitive-audit` or `inspiration-mining`
28
+ - Optional list of specific site URLs from the user or earlier research
29
+ - Optional path to `docs/plans/phase1-scratch/findings-digest.md` (for competitor hints from Phase 1)
30
+
31
+ ## Core Responsibilities
32
+
33
+ - Walk 5-8 candidate sites per run using Playwright MCP at desktop 1920x1080 and mobile 375x812
34
+ - Analyze which DNA axes each site nails and which it fails on
35
+ - Discard candidates that score below target on 3+ axes — they are not references for this DNA
36
+ - Group surviving references by DNA axis in `design-references.md` (motion refs, material refs, typography refs, density refs, character refs)
37
+ - Record the file:line or section locator where the reference element lives on each captured site
38
+
39
+ ## Hard Rules
40
+
41
+ - Goal-directed, not exploratory. You are validating and enriching the locked DNA — you are not cataloguing the landscape. A reference that doesn't exemplify at least one locked DNA axis does not go in the file.
42
+ - Every screenshot is tagged with the DNA axis or axes it exemplifies. Untagged captures are rejected.
43
+ - Desktop 1920x1080 AND mobile 375x812 for every site. Breakpoint parity matters for the downstream Design Critic.
44
+ - No self-authored commentary on rival products. Describe the visual treatment, cite the axis, move on.
45
+ - If fewer than 4 candidates survive the filter, widen the URL seed list and re-run rather than padding with weak matches.
46
+
47
+ ## Workflow
48
+
49
+ ### Shared setup
50
+ 1. Read `DESIGN.md` `## Overview > ### Brand DNA`. Write the 7 axis values (Scope, Density, Character, Material, Motion, Type, Copy) to a local scratchpad so every capture can be scored against them.
51
+ 2. Pick the mode branch below based on the input flag.
52
+
53
+ ### Competitive Audit mode
54
+ 3a. Build the candidate URL list:
55
+ - Start with user-provided URLs if any
56
+ - Read `docs/plans/phase1-scratch/findings-digest.md` if present and pull named rivals
57
+ - Otherwise, use WebFetch / WebSearch to find 10-15 products in the same category as the design-doc
58
+ 4a. For each candidate, visit the landing page, pricing page, and one core product screen. Score each against the 6 DNA axes on a 0-3 scale. Keep candidates with total ≥ 12.
59
+ 5a. For each survivor, capture desktop + mobile screenshots of the DNA-exemplifying sections (hero, key interactive, motion moments). Tag each capture with the DNA axis it exemplifies.
60
+
61
+ ### Inspiration Mining mode
62
+ 3b. Build the candidate URL list:
63
+ - Query Awwwards, Godly.website, and SiteInspire via WebFetch for recent entries matching the DNA Character and Material values
64
+ - Supplement with user-provided URLs if any
65
+ 4b. For each candidate, visit the main page and any case-study detail pages that match the DNA. Apply the same 0-3 × 6-axis score. Keep candidates with total ≥ 12.
66
+ 5b. Capture desktop + mobile screenshots of the DNA-exemplifying sections. Tag each capture.
67
+
68
+ ### Shared finalize
69
+ 6. Group captured references by DNA axis in `design-references.md`:
70
+ - `## Motion references` — 2-5 entries, each with URL, file path to screenshot, and one-line description of why it exemplifies the Motion axis
71
+ - `## Material references` — same format
72
+ - `## Typography references` — same format
73
+ - `## Density references` — same format
74
+ - `## Character references` — same format
75
+ 7. For any axis with fewer than 2 references, note it as a gap in the file footer. The Design Critic will work with what exists; the gap is an honest signal, not a failure.
76
+ 8. Write `design-references.md` to the plan directory using the Write tool. Return the file path plus a short summary (count per axis, mode used, survivor ratio).
77
+
78
+ ## Output Format
79
+
80
+ `design-references.md` shape:
81
+
82
+ ```markdown
83
+ ---
84
+ mode: competitive-audit
85
+ dna_source: visual-dna.md
86
+ captured_at: 2026-04-14
87
+ candidate_count: 12
88
+ survivor_count: 6
89
+ ---
90
+
91
+ # Design References
92
+
93
+ ## Motion references
94
+ - [Linear](https://linear.app) — `screens/linear-home-desktop.png` — scroll-bound section reveals exemplify Cinematic motion with long cubic-bezier curves
95
+ - [Raycast](https://raycast.com) — `screens/raycast-hero-mobile.png` — micro-interactions on the hero CTA show Expressive motion without overshooting Cinematic
96
+
97
+ ## Material references
98
+ - ...
99
+
100
+ ## Typography references
101
+ - ...
102
+
103
+ ## Density references
104
+ - ...
105
+
106
+ ## Character references
107
+ - ...
108
+
109
+ ## Gaps
110
+ - Motion references for "Cinematic + Dashboard" combination underpopulated — only 1 survivor. Design Critic should treat as weak evidence.
111
+ ```
112
+
113
+ ## Tools
114
+
115
+ - Playwright MCP (primary) — `browser_navigate`, `browser_take_screenshot`, `browser_resize` for breakpoint parity
116
+ - WebFetch / WebSearch for URL discovery
117
+ - Write for the final `design-references.md`
118
+ - Read for `DESIGN.md` and `docs/plans/phase1-scratch/findings-digest.md`
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Adapter: wraps Kiro's cycle-counter handlers in the SdkMcpToolDefinition
3
+ * shape required by @anthropic-ai/claude-agent-sdk.
4
+ *
5
+ * Kiro's file (src/orchestrator/mcp/cycle-counter.ts) is owned by Kiro and
6
+ * must not be edited; this adapter lives here to preserve that boundary and
7
+ * to keep the SDK-specific zod/CallToolResult surface out of the handler core.
8
+ *
9
+ * Kiro's handlers mutate the CounterState object in place. The adapter echoes
10
+ * the updated state back to the caller so the orchestrator can pipe it into
11
+ * a single atomic state_save (A3 crash-seam protocol).
12
+ *
13
+ * Spec: docs/migration/sdk-hybrid/MIGRATION-PLAN-FINAL.md §4 Stage 4
14
+ * Task: 4.2.4
15
+ */
16
+
17
+ import { z } from "zod";
18
+ import {
19
+ cycleCounterCheck,
20
+ clearInFlightEdge,
21
+ handleStaleEdge,
22
+ type CounterState,
23
+ } from "../../src/orchestrator/mcp/cycle-counter.js";
24
+
25
+ type ToolConstructor = typeof import("@anthropic-ai/claude-agent-sdk").tool;
26
+
27
+ const inFlightEdgeSchema = z.object({
28
+ decision_id: z.string().min(1),
29
+ target_phase: z.string().min(1),
30
+ counter_value: z.number().int().nonnegative(),
31
+ started_at: z.string().min(1),
32
+ });
33
+
34
+ const counterStateSchema = z.object({
35
+ backward_routing_count: z.record(z.string(), z.number().int().nonnegative()),
36
+ backward_routing_count_by_target_phase: z.record(z.string(), z.number().int().nonnegative()),
37
+ in_flight_backward_edge: inFlightEdgeSchema.optional(),
38
+ });
39
+
40
+ const checkInputShape = {
41
+ state: counterStateSchema,
42
+ input: z.object({
43
+ decision_id: z.string().min(1),
44
+ target_phase: z.string().min(1),
45
+ }),
46
+ max_cycles: z.number().int().positive().optional(),
47
+ };
48
+
49
+ const clearInputShape = {
50
+ state: counterStateSchema,
51
+ };
52
+
53
+ const staleInputShape = {
54
+ state: counterStateSchema,
55
+ threshold_ms: z.number().int().positive().optional(),
56
+ };
57
+
58
+ export function buildCycleCounterCheckTool(tool: ToolConstructor) {
59
+ return tool(
60
+ "cycle_counter_check",
61
+ "Check and increment backward-routing counters (per-decision + per-target-phase). Returns {action: allow|escalate_to_user, decision_count, phase_count, state} where state is the mutated CounterState to persist via state_save.",
62
+ checkInputShape,
63
+ async (args) => {
64
+ try {
65
+ const state = args.state as CounterState;
66
+ const result = cycleCounterCheck(state, args.input, args.max_cycles);
67
+ return {
68
+ content: [
69
+ {
70
+ type: "text",
71
+ text: JSON.stringify({ ...result, state }),
72
+ },
73
+ ],
74
+ };
75
+ } catch (err) {
76
+ const message = err instanceof Error ? err.message : String(err);
77
+ return {
78
+ isError: true,
79
+ content: [
80
+ {
81
+ type: "text",
82
+ text: `cycle_counter_check error: ${message}`,
83
+ },
84
+ ],
85
+ };
86
+ }
87
+ },
88
+ );
89
+ }
90
+
91
+ export function buildClearInFlightEdgeTool(tool: ToolConstructor) {
92
+ return tool(
93
+ "clear_in_flight_edge",
94
+ "Clear the in_flight_backward_edge field (called by target phase on re-entry). Returns {state} for the caller to persist via state_save.",
95
+ clearInputShape,
96
+ async (args) => {
97
+ try {
98
+ const state = args.state as CounterState;
99
+ clearInFlightEdge(state);
100
+ return {
101
+ content: [
102
+ {
103
+ type: "text",
104
+ text: JSON.stringify({ state }),
105
+ },
106
+ ],
107
+ };
108
+ } catch (err) {
109
+ const message = err instanceof Error ? err.message : String(err);
110
+ return {
111
+ isError: true,
112
+ content: [
113
+ {
114
+ type: "text",
115
+ text: `clear_in_flight_edge error: ${message}`,
116
+ },
117
+ ],
118
+ };
119
+ }
120
+ },
121
+ );
122
+ }
123
+
124
+ export function buildHandleStaleEdgeTool(tool: ToolConstructor) {
125
+ return tool(
126
+ "handle_stale_edge",
127
+ "On --resume, if in_flight_backward_edge is older than threshold_ms (default 60000), decrement both counters and clear the edge. Returns {cleaned:boolean, state}.",
128
+ staleInputShape,
129
+ async (args) => {
130
+ try {
131
+ const state = args.state as CounterState;
132
+ const cleaned = handleStaleEdge(state, args.threshold_ms);
133
+ return {
134
+ content: [
135
+ {
136
+ type: "text",
137
+ text: JSON.stringify({ cleaned, state }),
138
+ },
139
+ ],
140
+ };
141
+ } catch (err) {
142
+ const message = err instanceof Error ? err.message : String(err);
143
+ return {
144
+ isError: true,
145
+ content: [
146
+ {
147
+ type: "text",
148
+ text: `handle_stale_edge error: ${message}`,
149
+ },
150
+ ],
151
+ };
152
+ }
153
+ },
154
+ );
155
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Adapter: wraps Kiro's scribeDecision(input, filePath) handler in the
3
+ * SdkMcpToolDefinition shape required by @anthropic-ai/claude-agent-sdk.
4
+ *
5
+ * Kiro's file (src/orchestrator/mcp/scribe.ts) is owned by Kiro and must
6
+ * not be edited; this adapter lives here to preserve that boundary and to
7
+ * keep the SDK-specific zod/CallToolResult surface out of the handler core.
8
+ *
9
+ * Spec: docs/migration/sdk-hybrid/MIGRATION-PLAN-FINAL.md §4 Stage 1
10
+ * Task: 1.2.4
11
+ */
12
+
13
+ import { resolve } from "node:path";
14
+ import { z } from "zod";
15
+ import { scribeDecision, loadCounters } from "../../src/orchestrator/mcp/scribe.js";
16
+
17
+ type ToolConstructor = typeof import("@anthropic-ai/claude-agent-sdk").tool;
18
+
19
+ const DEFAULT_DECISIONS_PATH = "docs/plans/decisions.jsonl";
20
+
21
+ const rejectedAlternativeSchema = z.object({
22
+ approach: z.string().min(1),
23
+ reason: z.string().min(1),
24
+ revisit_criterion: z.string().min(1),
25
+ });
26
+
27
+ const scribeInputShape = {
28
+ phase: z.string().min(1),
29
+ summary: z.string().min(1),
30
+ decided_by: z.string().min(1),
31
+ impact_level: z.enum(["low", "medium", "high", "critical"]),
32
+ chosen_approach: z.string().min(1),
33
+ rejected_alternatives: z.array(rejectedAlternativeSchema).max(3).optional(),
34
+ ref: z
35
+ .string()
36
+ .min(1)
37
+ .regex(/^[a-zA-Z0-9_\-./]+\.(md|json|jsonl|yaml|yml)(#[a-zA-Z0-9_\-/.]+)?$/),
38
+ };
39
+
40
+ export function buildScribeTool(tool: ToolConstructor, cwd: string) {
41
+ const decisionsPath = resolve(cwd, DEFAULT_DECISIONS_PATH);
42
+ loadCounters(decisionsPath);
43
+
44
+ return tool(
45
+ "scribe_decision",
46
+ "Append a decision row to docs/plans/decisions.jsonl. Single-writer per migration plan; validates against decisions.schema.json.",
47
+ scribeInputShape,
48
+ async (args) => {
49
+ try {
50
+ const row = scribeDecision(args, decisionsPath);
51
+ return {
52
+ content: [
53
+ {
54
+ type: "text",
55
+ text: JSON.stringify(row),
56
+ },
57
+ ],
58
+ };
59
+ } catch (err) {
60
+ const message = err instanceof Error ? err.message : String(err);
61
+ return {
62
+ isError: true,
63
+ content: [
64
+ {
65
+ type: "text",
66
+ text: `scribe_decision error: ${message}`,
67
+ },
68
+ ],
69
+ };
70
+ }
71
+ },
72
+ );
73
+ }
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Adapter: wraps Kiro's state-save handler (stateSave/stateRead/verifyIntegrity)
3
+ * in the SdkMcpToolDefinition shape required by @anthropic-ai/claude-agent-sdk.
4
+ *
5
+ * Kiro's file (src/orchestrator/mcp/state-save.ts) is owned by Kiro and must
6
+ * not be edited; this adapter lives here to preserve that boundary and to
7
+ * keep the SDK-specific zod/CallToolResult surface out of the handler core.
8
+ *
9
+ * Spec: docs/migration/sdk-hybrid/MIGRATION-PLAN-FINAL.md §4 Stage 3
10
+ * Task: 3.2.4
11
+ */
12
+
13
+ import { z } from "zod";
14
+ import {
15
+ stateSave,
16
+ stateRead,
17
+ verifyIntegrity,
18
+ } from "../../src/orchestrator/mcp/state-save.js";
19
+
20
+ type ToolConstructor = typeof import("@anthropic-ai/claude-agent-sdk").tool;
21
+
22
+ const saveInputShape = {
23
+ path: z.string().min(1),
24
+ state: z.record(z.string(), z.unknown()),
25
+ };
26
+
27
+ const readInputShape = {
28
+ path: z.string().min(1),
29
+ };
30
+
31
+ const verifyInputShape = {
32
+ path: z.string().min(1),
33
+ expected_sha256: z.string().min(1),
34
+ };
35
+
36
+ export function buildStateSaveTool(tool: ToolConstructor) {
37
+ return tool(
38
+ "state_save",
39
+ "Atomically persist state to a JSON file via write-to-.tmp + fsync + rename. Returns {success, path, sha256, bytesWritten}. Single writer for .build-state.json.",
40
+ saveInputShape,
41
+ async (args) => {
42
+ try {
43
+ const result = stateSave(args.path, args.state as Record<string, unknown>);
44
+ return {
45
+ content: [
46
+ {
47
+ type: "text",
48
+ text: JSON.stringify(result),
49
+ },
50
+ ],
51
+ };
52
+ } catch (err) {
53
+ const message = err instanceof Error ? err.message : String(err);
54
+ return {
55
+ isError: true,
56
+ content: [
57
+ {
58
+ type: "text",
59
+ text: `state_save error: ${message}`,
60
+ },
61
+ ],
62
+ };
63
+ }
64
+ },
65
+ );
66
+ }
67
+
68
+ export function buildStateReadTool(tool: ToolConstructor) {
69
+ return tool(
70
+ "state_read",
71
+ "Read state from a JSON file and compute its SHA-256 checksum. Returns {state, sha256}.",
72
+ readInputShape,
73
+ async (args) => {
74
+ try {
75
+ const result = stateRead(args.path);
76
+ return {
77
+ content: [
78
+ {
79
+ type: "text",
80
+ text: JSON.stringify(result),
81
+ },
82
+ ],
83
+ };
84
+ } catch (err) {
85
+ const message = err instanceof Error ? err.message : String(err);
86
+ return {
87
+ isError: true,
88
+ content: [
89
+ {
90
+ type: "text",
91
+ text: `state_read error: ${message}`,
92
+ },
93
+ ],
94
+ };
95
+ }
96
+ },
97
+ );
98
+ }
99
+
100
+ export function buildVerifyIntegrityTool(tool: ToolConstructor) {
101
+ return tool(
102
+ "verify_integrity",
103
+ "Verify a state file's SHA-256 matches the expected checksum. Returns {matches:boolean}.",
104
+ verifyInputShape,
105
+ async (args) => {
106
+ try {
107
+ const matches = verifyIntegrity(args.path, args.expected_sha256);
108
+ return {
109
+ content: [
110
+ {
111
+ type: "text",
112
+ text: JSON.stringify({ matches }),
113
+ },
114
+ ],
115
+ };
116
+ } catch (err) {
117
+ const message = err instanceof Error ? err.message : String(err);
118
+ return {
119
+ isError: true,
120
+ content: [
121
+ {
122
+ type: "text",
123
+ text: `verify_integrity error: ${message}`,
124
+ },
125
+ ],
126
+ };
127
+ }
128
+ },
129
+ );
130
+ }
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Adapter: wraps Kiro's write-lease handler (acquire/release/list) in the
3
+ * SdkMcpToolDefinition shape required by @anthropic-ai/claude-agent-sdk.
4
+ *
5
+ * Kiro's file (src/orchestrator/mcp/write-lease.ts) is owned by Kiro and must
6
+ * not be edited; this adapter lives here to preserve that boundary and to
7
+ * keep the SDK-specific zod/CallToolResult surface out of the handler core.
8
+ *
9
+ * Spec: docs/migration/sdk-hybrid/MIGRATION-PLAN-FINAL.md §A5
10
+ * Task: 2.3.4
11
+ */
12
+
13
+ import { z } from "zod";
14
+ import {
15
+ acquireWriteLease,
16
+ releaseLease,
17
+ getActiveLeases,
18
+ } from "../../src/orchestrator/mcp/write-lease.js";
19
+
20
+ type ToolConstructor = typeof import("@anthropic-ai/claude-agent-sdk").tool;
21
+
22
+ const acquireInputShape = {
23
+ task_id: z.string().min(1),
24
+ file_paths: z.array(z.string().min(1)).min(1),
25
+ };
26
+
27
+ const releaseInputShape = {
28
+ task_id: z.string().min(1),
29
+ };
30
+
31
+ const listInputShape = {} as const;
32
+
33
+ export function buildAcquireWriteLeaseTool(tool: ToolConstructor) {
34
+ return tool(
35
+ "acquire_write_lease",
36
+ "Acquire an exclusive write lease on one or more file paths for a task. Returns granted:true with the lease, or granted:false with conflict details when another task holds an overlapping lease.",
37
+ acquireInputShape,
38
+ async (args) => {
39
+ try {
40
+ const result = await acquireWriteLease(args.task_id, args.file_paths);
41
+ return {
42
+ content: [
43
+ {
44
+ type: "text",
45
+ text: JSON.stringify(result),
46
+ },
47
+ ],
48
+ };
49
+ } catch (err) {
50
+ const message = err instanceof Error ? err.message : String(err);
51
+ return {
52
+ isError: true,
53
+ content: [
54
+ {
55
+ type: "text",
56
+ text: `acquire_write_lease error: ${message}`,
57
+ },
58
+ ],
59
+ };
60
+ }
61
+ },
62
+ );
63
+ }
64
+
65
+ export function buildReleaseWriteLeaseTool(tool: ToolConstructor) {
66
+ return tool(
67
+ "release_write_lease",
68
+ "Release all write leases held by a task. Called by SubagentStop hook on dispatch return. Returns released:true if a lease existed, false otherwise.",
69
+ releaseInputShape,
70
+ async (args) => {
71
+ try {
72
+ const released = releaseLease(args.task_id);
73
+ return {
74
+ content: [
75
+ {
76
+ type: "text",
77
+ text: JSON.stringify({ released }),
78
+ },
79
+ ],
80
+ };
81
+ } catch (err) {
82
+ const message = err instanceof Error ? err.message : String(err);
83
+ return {
84
+ isError: true,
85
+ content: [
86
+ {
87
+ type: "text",
88
+ text: `release_write_lease error: ${message}`,
89
+ },
90
+ ],
91
+ };
92
+ }
93
+ },
94
+ );
95
+ }
96
+
97
+ export function buildListWriteLeasesTool(tool: ToolConstructor) {
98
+ return tool(
99
+ "list_write_leases",
100
+ "List all active write leases (holder, paths, acquired_at). Read-only; intended for orchestrator diagnostics and .build-state.json persistence snapshots.",
101
+ listInputShape,
102
+ async () => {
103
+ try {
104
+ const leases = getActiveLeases();
105
+ return {
106
+ content: [
107
+ {
108
+ type: "text",
109
+ text: JSON.stringify({ leases }),
110
+ },
111
+ ],
112
+ };
113
+ } catch (err) {
114
+ const message = err instanceof Error ? err.message : String(err);
115
+ return {
116
+ isError: true,
117
+ content: [
118
+ {
119
+ type: "text",
120
+ text: `list_write_leases error: ${message}`,
121
+ },
122
+ ],
123
+ };
124
+ }
125
+ },
126
+ );
127
+ }
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ // Thin shim: delegates to the TypeScript entry via tsx.
5
+ // Mirrors the hook pattern (npx --no-install tsx) used by subagent-start,
6
+ // pre-tool-use, and compile-writer-owner-cache — consistent behavior across
7
+ // the whole plugin when tsx is not globally installed.
8
+ const { spawnSync } = require('child_process');
9
+ const path = require('path');
10
+
11
+ const tsEntry = path.join(__dirname, 'buildanything-runtime.ts');
12
+ const result = spawnSync('npx', ['--no-install', 'tsx', tsEntry, ...process.argv.slice(2)], {
13
+ stdio: 'inherit',
14
+ });
15
+ process.exit(result.status ?? (result.error ? 1 : 0));