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,235 @@
1
+ #!/usr/bin/env tsx
2
+ /*
3
+ * buildanything: record mode/flag transitions (task 4.7.1).
4
+ *
5
+ * Called from hooks/session-start after the writer-owner cache compile.
6
+ * Reads docs/plans/.build-state.json, compares the current buildanything
7
+ * flag values (passed via env vars) against the last recorded flag state
8
+ * under mode_transitions[], and APPENDs one row per changed flag.
9
+ *
10
+ * No-op when:
11
+ * - docs/plans/.build-state.json does not exist (fresh project)
12
+ * - mode_transitions[] is absent/empty (no prior state to diff against;
13
+ * first-session capture is deferred to the first actual flip — the
14
+ * safer choice per the task spec)
15
+ * - no flags differ from the previous post_flags snapshot
16
+ *
17
+ * Writes atomically: JSON.stringify -> <state>.tmp -> rename().
18
+ *
19
+ * Fail-open: any error is written to stderr and we exit non-zero so the
20
+ * caller can fold it into DEPS_WARNING, but session-start never aborts.
21
+ *
22
+ * CJS-compatible (no import.meta). Invoked via `npx --no-install tsx`.
23
+ */
24
+
25
+ import {
26
+ appendFileSync,
27
+ existsSync,
28
+ mkdirSync,
29
+ readFileSync,
30
+ renameSync,
31
+ writeFileSync,
32
+ } from "node:fs";
33
+ import { dirname, resolve } from "node:path";
34
+ import process from "node:process";
35
+
36
+ const TRACKED_FLAGS = [
37
+ "BUILDANYTHING_SDK",
38
+ "BUILDANYTHING_SDK_SPRINT_CONTEXT",
39
+ "BUILDANYTHING_SDK_SPRINT_CONTEXT_IOS",
40
+ "BUILDANYTHING_ENFORCE_WRITER_OWNER",
41
+ "BUILDANYTHING_ENFORCE_WRITE_LEASE",
42
+ "BUILDANYTHING_SCRIBE_SINGLE_WRITER",
43
+ "BUILDANYTHING_ALLOW_RAW_STATE_WRITES",
44
+ "BUILDANYTHING_STRICT_TASK_ID",
45
+ ] as const;
46
+
47
+ // Distinct unset sentinel — angle brackets make it un-shell-settable without
48
+ // quoting, six chars, no sane operator uses this literal. Replaces the prior
49
+ // colliding default of "false" which silently swallowed real operator opt-outs
50
+ // like BUILDANYTHING_ENFORCE_WRITER_OWNER=false (warn-mode rollback).
51
+ const UNSET_SENTINEL = "<unset>";
52
+
53
+ type FlagName = (typeof TRACKED_FLAGS)[number];
54
+ type FlagSnapshot = Record<FlagName, string>;
55
+
56
+ interface ModeTransitionRow {
57
+ timestamp: string;
58
+ session_id: string | null;
59
+ flag: FlagName;
60
+ old_value: string;
61
+ new_value: string;
62
+ post_flags: FlagSnapshot;
63
+ }
64
+
65
+ interface BuildState {
66
+ mode_transitions?: ModeTransitionRow[];
67
+ [key: string]: unknown;
68
+ }
69
+
70
+ function defaultFor(_flag: FlagName): string {
71
+ // Unified sentinel for all tracked flags — collision-free with any plausible
72
+ // operator value. See UNSET_SENTINEL comment above.
73
+ return UNSET_SENTINEL;
74
+ }
75
+
76
+ // Legacy default the pre-fix recorder wrote to post_flags snapshots when a
77
+ // tracked env var was unset. Only consulted during prev-vs-curr equivalence so
78
+ // the first post-fix run does not spuriously record transitions against old
79
+ // state files. Matches the old defaultFor() behavior exactly.
80
+ function legacyDefaultFor(flag: FlagName): string {
81
+ return flag === "BUILDANYTHING_SDK" ? "on" : "false";
82
+ }
83
+
84
+ // True when the `prev` snapshot was written by the pre-fix recorder. Signal:
85
+ // every tracked flag in the snapshot equals its legacy default ("on" for SDK,
86
+ // "false" for everything else) and no `<unset>` appears anywhere. Once even a
87
+ // single flag has been recorded as `<unset>` (or as any operator-set literal),
88
+ // the snapshot is post-fix and legacy-compat does NOT apply — keeps real
89
+ // "false" → `<unset>` transitions visible.
90
+ function isLegacyDefaultOnlySnapshot(snap: FlagSnapshot): boolean {
91
+ for (const flag of TRACKED_FLAGS) {
92
+ if (snap[flag] !== legacyDefaultFor(flag)) return false;
93
+ }
94
+ return true;
95
+ }
96
+
97
+ // True when `prev` (from disk) and `curr` (from env this run) both represent
98
+ // the "unset / default" state, so no real transition occurred. Handles:
99
+ // - exact match: prev == curr (any literal operator value) → equivalent
100
+ // - new shape: prev=<unset>, curr=<unset> → equivalent
101
+ // - legacy whole-snapshot: prev is pristine legacy defaults AND curr=<unset>
102
+ // for this flag → equivalent (suppresses spurious diff on first post-fix
103
+ // run against a state file written by the pre-fix recorder)
104
+ // Any other mismatch — including the critical "false" → `<unset>` un-set after
105
+ // a real operator flip — falls through to non-equivalent and records a diff.
106
+ function flagValuesEquivalent(
107
+ flag: FlagName,
108
+ prev: string,
109
+ curr: string,
110
+ prevSnapshot: FlagSnapshot,
111
+ ): boolean {
112
+ if (prev === curr) return true;
113
+ if (prev === UNSET_SENTINEL && curr === UNSET_SENTINEL) return true;
114
+ if (
115
+ curr === UNSET_SENTINEL &&
116
+ prev === legacyDefaultFor(flag) &&
117
+ isLegacyDefaultOnlySnapshot(prevSnapshot)
118
+ ) {
119
+ return true;
120
+ }
121
+ return false;
122
+ }
123
+
124
+ function readCurrentFlags(): FlagSnapshot {
125
+ const out = {} as FlagSnapshot;
126
+ for (const flag of TRACKED_FLAGS) {
127
+ const raw = process.env[flag];
128
+ out[flag] = raw === undefined || raw === "" ? defaultFor(flag) : raw;
129
+ }
130
+ return out;
131
+ }
132
+
133
+ function lastRecordedFlags(state: BuildState): FlagSnapshot | null {
134
+ const rows = Array.isArray(state.mode_transitions) ? state.mode_transitions : [];
135
+ if (rows.length === 0) return null;
136
+ const last = rows[rows.length - 1];
137
+ const snap = last?.post_flags;
138
+ if (!snap || typeof snap !== "object") return null;
139
+ const out = {} as FlagSnapshot;
140
+ for (const flag of TRACKED_FLAGS) {
141
+ const v = (snap as Record<string, unknown>)[flag];
142
+ out[flag] = typeof v === "string" ? v : defaultFor(flag);
143
+ }
144
+ return out;
145
+ }
146
+
147
+ function diffFlags(prev: FlagSnapshot, curr: FlagSnapshot): FlagName[] {
148
+ const changed: FlagName[] = [];
149
+ for (const flag of TRACKED_FLAGS) {
150
+ if (!flagValuesEquivalent(flag, prev[flag], curr[flag], prev)) changed.push(flag);
151
+ }
152
+ return changed;
153
+ }
154
+
155
+ function atomicWriteJson(path: string, value: unknown): void {
156
+ const tmp = `${path}.tmp`;
157
+ writeFileSync(tmp, `${JSON.stringify(value, null, 2)}\n`, "utf8");
158
+ renameSync(tmp, path);
159
+ }
160
+
161
+ function formatTransitionLogLine(row: ModeTransitionRow): string {
162
+ const sessionId = row.session_id ?? "null";
163
+ return `[${row.timestamp}] mode_transition flag=${row.flag} old_value=${row.old_value} new_value=${row.new_value} session_id=${sessionId}`;
164
+ }
165
+
166
+ function appendTransitionsToBuildLog(rows: ModeTransitionRow[]): void {
167
+ const logPath = resolve(
168
+ process.env.BUILDANYTHING_BUILD_LOG_PATH ?? "docs/plans/build-log.md",
169
+ );
170
+ const dir = dirname(logPath);
171
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
172
+ const payload = `${rows.map(formatTransitionLogLine).join("\n")}\n`;
173
+ appendFileSync(logPath, payload, "utf8");
174
+ }
175
+
176
+ function main(): number {
177
+ const statePath = resolve(
178
+ process.env.BUILDANYTHING_STATE_PATH ?? "docs/plans/.build-state.json",
179
+ );
180
+ if (!existsSync(statePath)) return 0;
181
+
182
+ let state: BuildState;
183
+ try {
184
+ state = JSON.parse(readFileSync(statePath, "utf8")) as BuildState;
185
+ } catch (err) {
186
+ const msg = err instanceof Error ? err.message : String(err);
187
+ process.stderr.write(`record-mode-transitions: parse failed: ${msg}\n`);
188
+ return 1;
189
+ }
190
+
191
+ const curr = readCurrentFlags();
192
+ const prev = lastRecordedFlags(state);
193
+ if (prev === null) return 0; // no prior state to diff against; defer capture
194
+
195
+ const changed = diffFlags(prev, curr);
196
+ if (changed.length === 0) return 0;
197
+
198
+ const timestamp = new Date().toISOString();
199
+ const sessionId =
200
+ (typeof state.session_id === "string" && state.session_id) ||
201
+ process.env.CLAUDE_SESSION_ID ||
202
+ null;
203
+
204
+ const rows: ModeTransitionRow[] = changed.map((flag) => ({
205
+ timestamp,
206
+ session_id: sessionId,
207
+ flag,
208
+ old_value: prev[flag],
209
+ new_value: curr[flag],
210
+ post_flags: curr,
211
+ }));
212
+
213
+ const existing = Array.isArray(state.mode_transitions) ? state.mode_transitions : [];
214
+ const next: BuildState = { ...state, mode_transitions: [...existing, ...rows] };
215
+
216
+ try {
217
+ atomicWriteJson(statePath, next);
218
+ } catch (err) {
219
+ const msg = err instanceof Error ? err.message : String(err);
220
+ process.stderr.write(`record-mode-transitions: write failed: ${msg}\n`);
221
+ return 1;
222
+ }
223
+
224
+ // Best-effort: build-log is additive; state row is already persisted.
225
+ try {
226
+ appendTransitionsToBuildLog(rows);
227
+ } catch (err) {
228
+ const msg = err instanceof Error ? err.message : String(err);
229
+ process.stderr.write(`record-mode-transitions: build-log append failed: ${msg}\n`);
230
+ }
231
+
232
+ return 0;
233
+ }
234
+
235
+ process.exit(main());
@@ -2,16 +2,61 @@
2
2
  # buildanything: SessionStart hook
3
3
  # Re-injects orchestrator identity after context compaction, resume, or clear.
4
4
 
5
+ # Cache the SessionStart hook stdin payload once — stdin is a pipe and reads
6
+ # are destructive. Extract session_id and export as CLAUDE_SESSION_ID so the
7
+ # mode-transition recorder (task 4.7.1) can tag rows. Tolerate empty/missing
8
+ # stdin (e.g., when the shim is invoked outside the hook harness).
9
+ if [ ! -t 0 ]; then
10
+ HOOK_STDIN=$(cat)
11
+ CLAUDE_SESSION_ID=$(printf '%s' "$HOOK_STDIN" | python3 -c 'import json,sys
12
+ try:
13
+ print(json.loads(sys.stdin.read() or "{}").get("session_id","") or "")
14
+ except Exception:
15
+ print("")' 2>/dev/null)
16
+ export CLAUDE_SESSION_ID
17
+ fi
18
+
19
+ # SDK install-and-probe: write on/off state to sdkStateFile for the runtime to read.
20
+ SDK_WARN=""
21
+ PLUGIN_ROOT_EARLY="${CLAUDE_PLUGIN_ROOT:-$(cd "$(dirname "$0")/.." && pwd)}"
22
+ SDK_STATE_FILE=$(python3 -c "import json,sys; print(json.load(open(sys.argv[1])).get('config',{}).get('sdkStateFile',''))" "$PLUGIN_ROOT_EARLY/.claude-plugin/plugin.json" 2>/dev/null)
23
+ if [ -n "$SDK_STATE_FILE" ]; then
24
+ export SDK_STATE_FILE
25
+ mkdir -p "$(dirname "$SDK_STATE_FILE")" 2>/dev/null
26
+ if [ "$BUILDANYTHING_SDK" = "off" ]; then
27
+ printf 'off' > "$SDK_STATE_FILE"
28
+ elif ! command -v npm >/dev/null 2>&1; then
29
+ printf 'off' > "$SDK_STATE_FILE"
30
+ SDK_WARN="buildanything: npm CLI not available; SDK disabled."
31
+ elif ! [ -f "$PLUGIN_ROOT_EARLY/package.json" ]; then
32
+ printf 'off' > "$SDK_STATE_FILE"
33
+ SDK_WARN="buildanything: plugin package.json missing; SDK disabled."
34
+ elif (cd "$PLUGIN_ROOT_EARLY" && npm install --silent --no-audit --no-fund >/dev/null 2>&1); then
35
+ printf 'on' > "$SDK_STATE_FILE"
36
+ else
37
+ printf 'off' > "$SDK_STATE_FILE"
38
+ SDK_WARN="buildanything: SDK install failed; falling back to markdown mode."
39
+ fi
40
+ fi
41
+
5
42
  # Dep check: warn if plugin deps (installed via bin/setup.js) are missing.
6
43
  DEPS_WARNING=""
7
44
  MISSING=()
45
+ command -v tsx >/dev/null 2>&1 || MISSING+=("tsx (plugin hooks need it — run: npm i -g tsx)")
8
46
  command -v agent-browser >/dev/null 2>&1 || MISSING+=("agent-browser CLI")
9
47
  { [ -e "$HOME/.claude/skills/agent-browser" ] || [ -e "$HOME/.claude/skills/agent-browser.md" ]; } || MISSING+=("agent-browser skill")
10
48
  { [ -e "$HOME/.claude/skills/dogfood" ] || [ -e "$HOME/.claude/skills/dogfood.md" ]; } || MISSING+=("dogfood skill")
49
+ if [ "${BUILDANYTHING_PROJECT_TYPE:-}" = "ios" ]; then
50
+ claude mcp list 2>/dev/null | grep -q "apple-docs" || MISSING+=("apple-docs-mcp (iOS docs probe)")
51
+ fi
11
52
  if [ ${#MISSING[@]} -gt 0 ]; then
12
53
  JOINED=$(IFS=,; echo "${MISSING[*]}"); JOINED=${JOINED//,/, }
13
54
  DEPS_WARNING="buildanything: missing deps (${JOINED}). Run /buildanything:setup to complete install."
14
55
  fi
56
+ if [ -n "$SDK_WARN" ]; then
57
+ DEPS_WARNING="${DEPS_WARNING:+${DEPS_WARNING}
58
+ }${SDK_WARN}"
59
+ fi
15
60
 
16
61
  # Check if a build pipeline is active by looking for .build-state.md
17
62
  BUILD_STATE=""
@@ -93,7 +138,7 @@ ${DESIGN_WARNING}
93
138
  NEXT ACTIONS:
94
139
  1. Re-read commands/build.md to reload the full orchestrator process
95
140
  2. Re-read protocols/metric-loop.md if you are mid-loop
96
- 3. Re-read protocols/design.md if you are in Phase 3 (Design & Visual Identity)
141
+ 3. Re-read protocols/web-phase-branches.md (or protocols/ios-phase-branches.md for iOS) if you are in Phase 3 (Design & Visual Identity)
97
142
  4. Re-read docs/plans/sprint-tasks.md for task list and acceptance criteria
98
143
  5. Re-read docs/plans/architecture.md for architecture context
99
144
  6. Re-read CLAUDE.md for build decisions
@@ -107,6 +152,31 @@ if [ -n "$DEPS_WARNING" ]; then
107
152
  ${CONTEXT}"
108
153
  fi
109
154
 
155
+ # Compile writer-owner cache (task 2.1.2). Best-effort: if it fails for any
156
+ # reason, log a warning and continue — the PreToolUse handler falls back to
157
+ # a live YAML parse.
158
+ PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-$(cd "$(dirname "$0")/.." && pwd)}"
159
+ PHASE_GRAPH="$PLUGIN_ROOT/docs/migration/phase-graph.yaml"
160
+ CACHE_DIR=".buildanything"
161
+ CACHE_FILE="$CACHE_DIR/writer-owner.json"
162
+ if [ -f "$PHASE_GRAPH" ]; then
163
+ mkdir -p "$CACHE_DIR" 2>/dev/null
164
+ if ! npx --no-install tsx "$PLUGIN_ROOT/hooks/compile-writer-owner-cache.ts" "$PHASE_GRAPH" "$CACHE_FILE" 2>/dev/null; then
165
+ echo "buildanything: writer-owner cache compile failed; handler will fall back to live YAML parse" >&2
166
+ fi
167
+ else
168
+ echo "buildanything: phase-graph.yaml not found at $PHASE_GRAPH; writer-owner cache skipped" >&2
169
+ fi
170
+
171
+ # Record flag-flip mode transitions (task 4.7.1). Best-effort: if the TS
172
+ # handler crashes, log to stderr and continue. No-op when .build-state.json
173
+ # is absent (fresh project, pre-Phase-0).
174
+ if [ -f "docs/plans/.build-state.json" ]; then
175
+ if ! npx --no-install tsx "$PLUGIN_ROOT/hooks/record-mode-transitions.ts"; then
176
+ echo "buildanything: mode-transition recorder failed; flag-flip not recorded this session" >&2
177
+ fi
178
+ fi
179
+
110
180
  # Output as additional_context for Claude Code
111
181
  # JSON-escape the context
112
182
  ESCAPED=$(printf '%s' "$CONTEXT" | python3 -c 'import sys,json; print(json.dumps(sys.stdin.read()))')
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env bash
2
+ # buildanything: SubagentStart staging hook (task 3.1.1)
3
+ # Reads docs/plans/.build-state.json and stages the CONTEXT-header inputs
4
+ # under .buildanything/subagent-start-cache/<id>.json for the 3.1.2 renderer
5
+ # and 3.1.3 injector to consume. Purely observational — always exit 0.
6
+
7
+ set -u
8
+
9
+ HANDLER="${CLAUDE_PLUGIN_ROOT:-$(cd "$(dirname "$0")/.." && pwd)}/hooks/subagent-start.ts"
10
+
11
+ if [ ! -f "$HANDLER" ]; then
12
+ # Handler missing — fail open so the hook never bricks the session.
13
+ echo "buildanything: subagent-start handler missing at $HANDLER — skipping" >&2
14
+ exit 0
15
+ fi
16
+
17
+ exec npx --no-install tsx "$HANDLER"