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.
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +17 -3
- package/CHANGELOG.md +57 -0
- package/README.md +57 -61
- package/agents/a11y-architect.md +168 -0
- package/agents/briefing-officer.md +172 -0
- package/agents/business-model.md +82 -29
- package/agents/code-architect.md +80 -0
- package/agents/code-reviewer.md +256 -0
- package/agents/code-simplifier.md +72 -0
- package/agents/design-brand-guardian.md +312 -53
- package/agents/design-critic.md +144 -0
- package/agents/design-inclusive-visuals-specialist.md +8 -19
- package/agents/design-ui-designer.md +352 -56
- package/agents/design-ux-architect.md +418 -55
- package/agents/design-ux-researcher.md +359 -49
- package/agents/engineering-ai-engineer.md +28 -36
- package/agents/engineering-backend-architect.md +187 -36
- package/agents/engineering-data-engineer.md +227 -43
- package/agents/engineering-devops-automator.md +229 -74
- package/agents/engineering-frontend-developer.md +223 -34
- package/agents/engineering-mobile-app-builder.md +8 -1
- package/agents/engineering-rapid-prototyper.md +45 -11
- package/agents/engineering-security-engineer.md +265 -61
- package/agents/engineering-senior-developer.md +141 -19
- package/agents/engineering-sre.md +86 -0
- package/agents/engineering-technical-writer.md +287 -41
- package/agents/feature-intel.md +111 -0
- package/agents/ios-app-review-guardian.md +21 -2
- package/agents/ios-foundation-models-specialist.md +22 -2
- package/agents/ios-product-reality-auditor.md +292 -0
- package/agents/ios-storekit-specialist.md +11 -2
- package/agents/ios-swift-architect.md +29 -1
- package/agents/ios-swift-search.md +9 -1
- package/agents/ios-swift-ui-design.md +40 -5
- package/agents/marketing-app-store-optimizer.md +248 -64
- package/agents/planner.md +221 -0
- package/agents/pr-test-analyzer.md +64 -0
- package/agents/product-feedback-synthesizer.md +70 -2
- package/agents/product-owner.md +163 -0
- package/agents/product-reality-auditor.md +216 -0
- package/agents/product-spec-writer.md +176 -0
- package/agents/refactor-cleaner.md +110 -0
- package/agents/security-reviewer.md +129 -0
- package/agents/silent-failure-hunter.md +55 -0
- package/agents/swift-build-resolver.md +121 -0
- package/agents/swift-reviewer.md +113 -0
- package/agents/tech-feasibility.md +26 -4
- package/agents/testing-api-tester.md +238 -59
- package/agents/testing-evidence-collector.md +50 -1
- package/agents/testing-performance-benchmarker.md +23 -1
- package/agents/testing-reality-checker.md +7 -1
- package/agents/visual-research.md +118 -0
- package/bin/adapters/cycle-counter-tool.ts +155 -0
- package/bin/adapters/scribe-tool.ts +73 -0
- package/bin/adapters/state-save-tool.ts +130 -0
- package/bin/adapters/write-lease-tool.ts +127 -0
- package/bin/buildanything-runtime.js +15 -0
- package/bin/buildanything-runtime.ts +241 -0
- package/bin/graph-index.js +24 -0
- package/bin/graph-index.ts +340 -0
- package/bin/mcp-servers/graph-mcp.js +26 -0
- package/bin/mcp-servers/graph-mcp.ts +481 -0
- package/bin/mcp-servers/orchestrator-mcp.js +26 -0
- package/bin/mcp-servers/orchestrator-mcp.ts +361 -0
- package/bin/setup.js +312 -76
- package/commands/add-feature.md +2 -0
- package/commands/build.md +994 -265
- package/commands/fix.md +1 -1
- package/commands/idea-sweep.md +2 -2
- package/commands/self-check.md +121 -0
- package/commands/setup.md +61 -9
- package/commands/ux-review.md +5 -5
- package/commands/verify.md +9 -9
- package/docs/migration/agents.yaml +729 -0
- package/docs/migration/phase-graph.yaml +1504 -0
- package/docs/migration/sdk-host-compat.md +18 -0
- package/hooks/compile-writer-owner-cache.ts +171 -0
- package/hooks/design-md-lint +4 -0
- package/hooks/design-md-lint.ts +295 -0
- package/hooks/hooks.json +36 -0
- package/hooks/pre-tool-use +19 -0
- package/hooks/pre-tool-use.ts +807 -0
- package/hooks/record-mode-transitions.ts +235 -0
- package/hooks/session-start +71 -1
- package/hooks/subagent-start +17 -0
- package/hooks/subagent-start.ts +472 -0
- package/hooks/subagent-stop +17 -0
- package/hooks/subagent-stop.ts +153 -0
- package/package.json +26 -4
- package/protocols/agent-prompt-authoring.md +165 -0
- package/protocols/architecture-schema.md +178 -0
- package/protocols/cleanup.md +4 -0
- package/protocols/decision-log.md +135 -0
- package/protocols/design-md-authoring.md +520 -0
- package/protocols/design-md-spec.md +362 -0
- package/protocols/fake-data-detector.md +1 -1
- package/protocols/ios-context.md +10 -11
- package/protocols/ios-fake-data-detector.md +65 -0
- package/protocols/ios-phase-branches.md +299 -39
- package/protocols/launch-readiness.md +262 -0
- package/protocols/metric-loop.md +62 -2
- package/protocols/page-spec-schema.md +234 -0
- package/protocols/product-spec-schema.md +354 -0
- package/protocols/smoke-test.md +9 -1
- package/protocols/sprint-tasks-schema.md +53 -0
- package/protocols/state-schema.json +423 -0
- package/protocols/state-schema.md +202 -0
- package/protocols/verify.md +91 -3
- package/protocols/web-phase-branches.md +395 -75
- package/skills/ios/_VENDORED.md +2 -0
- package/skills/ios/app-store-connect-metadata/SKILL.md +148 -0
- package/skills/ios/asc-privacy-manifest/SKILL.md +350 -0
- package/skills/ios/hig-components-content/SKILL.md +86 -0
- package/skills/ios/hig-components-content/references/activity-views.md +79 -0
- package/skills/ios/hig-components-content/references/charts.md +180 -0
- package/skills/ios/hig-components-content/references/collections.md +48 -0
- package/skills/ios/hig-components-content/references/color-wells.md +42 -0
- package/skills/ios/hig-components-content/references/image-views.md +82 -0
- package/skills/ios/hig-components-content/references/image-wells.md +34 -0
- package/skills/ios/hig-components-content/references/lockups.md +78 -0
- package/skills/ios/hig-components-content/references/web-views.md +36 -0
- package/skills/ios/hig-components-controls/SKILL.md +88 -0
- package/skills/ios/hig-components-controls/references/combo-boxes.md +40 -0
- package/skills/ios/hig-components-controls/references/controls.md +112 -0
- package/skills/ios/hig-components-controls/references/gauges.md +74 -0
- package/skills/ios/hig-components-controls/references/labels.md +92 -0
- package/skills/ios/hig-components-controls/references/pickers.md +128 -0
- package/skills/ios/hig-components-controls/references/rating-indicators.md +38 -0
- package/skills/ios/hig-components-controls/references/segmented-controls.md +94 -0
- package/skills/ios/hig-components-controls/references/sliders.md +92 -0
- package/skills/ios/hig-components-controls/references/steppers.md +40 -0
- package/skills/ios/hig-components-controls/references/text-fields.md +88 -0
- package/skills/ios/hig-components-controls/references/text-views.md +56 -0
- package/skills/ios/hig-components-controls/references/toggles.md +127 -0
- package/skills/ios/hig-components-controls/references/token-fields.md +48 -0
- package/skills/ios/hig-components-controls/references/virtual-keyboards.md +156 -0
- package/skills/ios/hig-components-dialogs/SKILL.md +76 -0
- package/skills/ios/hig-components-dialogs/references/action-sheets.md +74 -0
- package/skills/ios/hig-components-dialogs/references/alerts.md +158 -0
- package/skills/ios/hig-components-dialogs/references/digit-entry-views.md +32 -0
- package/skills/ios/hig-components-dialogs/references/popovers.md +81 -0
- package/skills/ios/hig-components-dialogs/references/sheets.md +157 -0
- package/skills/ios/hig-components-layout/SKILL.md +99 -0
- package/skills/ios/hig-components-layout/references/boxes.md +48 -0
- package/skills/ios/hig-components-layout/references/column-views.md +44 -0
- package/skills/ios/hig-components-layout/references/lists-and-tables.md +99 -0
- package/skills/ios/hig-components-layout/references/ornaments.md +56 -0
- package/skills/ios/hig-components-layout/references/outline-views.md +64 -0
- package/skills/ios/hig-components-layout/references/panels.md +75 -0
- package/skills/ios/hig-components-layout/references/scroll-views.md +123 -0
- package/skills/ios/hig-components-layout/references/sidebars.md +109 -0
- package/skills/ios/hig-components-layout/references/split-views.md +110 -0
- package/skills/ios/hig-components-layout/references/tab-bars.md +173 -0
- package/skills/ios/hig-components-layout/references/tab-views.md +68 -0
- package/skills/ios/hig-components-layout/references/windows.md +188 -0
- package/skills/ios/hig-components-menus/SKILL.md +81 -0
- package/skills/ios/hig-components-menus/references/action-button.md +61 -0
- package/skills/ios/hig-components-menus/references/buttons.md +261 -0
- package/skills/ios/hig-components-menus/references/context-menus.md +105 -0
- package/skills/ios/hig-components-menus/references/disclosure-controls.md +84 -0
- package/skills/ios/hig-components-menus/references/dock-menus.md +40 -0
- package/skills/ios/hig-components-menus/references/edit-menus.md +88 -0
- package/skills/ios/hig-components-menus/references/menus.md +171 -0
- package/skills/ios/hig-components-menus/references/pop-up-buttons.md +70 -0
- package/skills/ios/hig-components-menus/references/pull-down-buttons.md +77 -0
- package/skills/ios/hig-components-menus/references/the-menu-bar.md +303 -0
- package/skills/ios/hig-components-menus/references/toolbars.md +256 -0
- package/skills/ios/hig-components-search/SKILL.md +68 -0
- package/skills/ios/hig-components-search/references/page-controls.md +120 -0
- package/skills/ios/hig-components-search/references/path-controls.md +40 -0
- package/skills/ios/hig-components-search/references/search-fields.md +189 -0
- package/skills/ios/hig-components-status/SKILL.md +80 -0
- package/skills/ios/hig-components-status/references/activity-rings.md +105 -0
- package/skills/ios/hig-components-status/references/progress-indicators.md +116 -0
- package/skills/ios/hig-components-status/references/status-bars.md +38 -0
- package/skills/ios/hig-components-system/SKILL.md +88 -0
- package/skills/ios/hig-components-system/references/app-clips.md +387 -0
- package/skills/ios/hig-components-system/references/app-shortcuts.md +114 -0
- package/skills/ios/hig-components-system/references/complications.md +425 -0
- package/skills/ios/hig-components-system/references/home-screen-quick-actions.md +42 -0
- package/skills/ios/hig-components-system/references/live-activities.md +442 -0
- package/skills/ios/hig-components-system/references/notifications.md +153 -0
- package/skills/ios/hig-components-system/references/top-shelf.md +135 -0
- package/skills/ios/hig-components-system/references/watch-faces.md +40 -0
- package/skills/ios/hig-components-system/references/widgets.md +517 -0
- package/skills/ios/hig-foundations/SKILL.md +98 -0
- package/skills/ios/hig-foundations/references/accessibility.md +291 -0
- package/skills/ios/hig-foundations/references/app-icons.md +210 -0
- package/skills/ios/hig-foundations/references/branding.md +44 -0
- package/skills/ios/hig-foundations/references/color.md +274 -0
- package/skills/ios/hig-foundations/references/dark-mode.md +116 -0
- package/skills/ios/hig-foundations/references/icons.md +263 -0
- package/skills/ios/hig-foundations/references/images.md +176 -0
- package/skills/ios/hig-foundations/references/immersive-experiences.md +174 -0
- package/skills/ios/hig-foundations/references/inclusion.md +189 -0
- package/skills/ios/hig-foundations/references/layout.md +425 -0
- package/skills/ios/hig-foundations/references/materials.md +238 -0
- package/skills/ios/hig-foundations/references/motion.md +103 -0
- package/skills/ios/hig-foundations/references/privacy.md +231 -0
- package/skills/ios/hig-foundations/references/right-to-left.md +206 -0
- package/skills/ios/hig-foundations/references/sf-symbols.md +310 -0
- package/skills/ios/hig-foundations/references/spatial-layout.md +142 -0
- package/skills/ios/hig-foundations/references/typography.md +1146 -0
- package/skills/ios/hig-foundations/references/writing.md +91 -0
- package/skills/ios/hig-inputs/SKILL.md +94 -0
- package/skills/ios/hig-inputs/references/apple-pencil-and-scribble.md +148 -0
- package/skills/ios/hig-inputs/references/camera-control.md +107 -0
- package/skills/ios/hig-inputs/references/digital-crown.md +83 -0
- package/skills/ios/hig-inputs/references/eyes.md +120 -0
- package/skills/ios/hig-inputs/references/focus-and-selection.md +120 -0
- package/skills/ios/hig-inputs/references/game-controls.md +156 -0
- package/skills/ios/hig-inputs/references/gestures.md +208 -0
- package/skills/ios/hig-inputs/references/gyro-and-accelerometer.md +40 -0
- package/skills/ios/hig-inputs/references/keyboards.md +234 -0
- package/skills/ios/hig-inputs/references/nearby-interactions.md +70 -0
- package/skills/ios/hig-inputs/references/pointing-devices.md +237 -0
- package/skills/ios/hig-inputs/references/remotes.md +67 -0
- package/skills/ios/hig-inputs/references/spatial-interactions.md +70 -0
- package/skills/ios/hig-patterns/SKILL.md +104 -0
- package/skills/ios/hig-patterns/references/charting-data.md +81 -0
- package/skills/ios/hig-patterns/references/collaboration-and-sharing.md +86 -0
- package/skills/ios/hig-patterns/references/drag-and-drop.md +134 -0
- package/skills/ios/hig-patterns/references/entering-data.md +69 -0
- package/skills/ios/hig-patterns/references/feedback.md +67 -0
- package/skills/ios/hig-patterns/references/file-management.md +135 -0
- package/skills/ios/hig-patterns/references/going-full-screen.md +79 -0
- package/skills/ios/hig-patterns/references/launching.md +81 -0
- package/skills/ios/hig-patterns/references/live-viewing-apps.md +79 -0
- package/skills/ios/hig-patterns/references/loading.md +59 -0
- package/skills/ios/hig-patterns/references/managing-accounts.md +107 -0
- package/skills/ios/hig-patterns/references/managing-notifications.md +99 -0
- package/skills/ios/hig-patterns/references/modality.md +82 -0
- package/skills/ios/hig-patterns/references/multitasking.md +131 -0
- package/skills/ios/hig-patterns/references/offering-help.md +117 -0
- package/skills/ios/hig-patterns/references/onboarding.md +69 -0
- package/skills/ios/hig-patterns/references/playing-audio.md +124 -0
- package/skills/ios/hig-patterns/references/playing-haptics.md +280 -0
- package/skills/ios/hig-patterns/references/playing-video.md +180 -0
- package/skills/ios/hig-patterns/references/printing.md +50 -0
- package/skills/ios/hig-patterns/references/ratings-and-reviews.md +48 -0
- package/skills/ios/hig-patterns/references/searching.md +70 -0
- package/skills/ios/hig-patterns/references/settings.md +84 -0
- package/skills/ios/hig-patterns/references/undo-and-redo.md +58 -0
- package/skills/ios/hig-patterns/references/workouts.md +76 -0
- package/skills/ios/hig-platforms/SKILL.md +84 -0
- package/skills/ios/hig-platforms/references/designing-for-games.md +159 -0
- package/skills/ios/hig-platforms/references/designing-for-ios.md +66 -0
- package/skills/ios/hig-platforms/references/designing-for-ipados.md +64 -0
- package/skills/ios/hig-platforms/references/designing-for-macos.md +70 -0
- package/skills/ios/hig-platforms/references/designing-for-tvos.md +68 -0
- package/skills/ios/hig-platforms/references/designing-for-visionos.md +85 -0
- package/skills/ios/hig-platforms/references/designing-for-watchos.md +74 -0
- package/skills/ios/hig-project-context/SKILL.md +133 -0
- package/skills/ios/hig-technologies/SKILL.md +107 -0
- package/skills/ios/hig-technologies/references/airplay.md +125 -0
- package/skills/ios/hig-technologies/references/always-on.md +62 -0
- package/skills/ios/hig-technologies/references/apple-pay.md +441 -0
- package/skills/ios/hig-technologies/references/augmented-reality.md +247 -0
- package/skills/ios/hig-technologies/references/carekit.md +224 -0
- package/skills/ios/hig-technologies/references/carplay.md +119 -0
- package/skills/ios/hig-technologies/references/game-center.md +343 -0
- package/skills/ios/hig-technologies/references/generative-ai.md +110 -0
- package/skills/ios/hig-technologies/references/healthkit.md +120 -0
- package/skills/ios/hig-technologies/references/homekit.md +343 -0
- package/skills/ios/hig-technologies/references/icloud.md +52 -0
- package/skills/ios/hig-technologies/references/id-verifier.md +73 -0
- package/skills/ios/hig-technologies/references/imessage-apps-and-stickers.md +105 -0
- package/skills/ios/hig-technologies/references/in-app-purchase.md +263 -0
- package/skills/ios/hig-technologies/references/live-photos.md +54 -0
- package/skills/ios/hig-technologies/references/mac-catalyst.md +216 -0
- package/skills/ios/hig-technologies/references/machine-learning.md +394 -0
- package/skills/ios/hig-technologies/references/maps.md +221 -0
- package/skills/ios/hig-technologies/references/nfc.md +51 -0
- package/skills/ios/hig-technologies/references/photo-editing.md +40 -0
- package/skills/ios/hig-technologies/references/researchkit.md +134 -0
- package/skills/ios/hig-technologies/references/shareplay.md +142 -0
- package/skills/ios/hig-technologies/references/shazamkit.md +47 -0
- package/skills/ios/hig-technologies/references/sign-in-with-apple.md +288 -0
- package/skills/ios/hig-technologies/references/siri.md +523 -0
- package/skills/ios/hig-technologies/references/tap-to-pay-on-iphone.md +208 -0
- package/skills/ios/hig-technologies/references/voiceover.md +90 -0
- package/skills/ios/hig-technologies/references/wallet.md +420 -0
- package/skills/ios/ios-bootstrap/SKILL.md +17 -8
- package/skills/ios/swift-actor-persistence/SKILL.md +143 -0
- package/skills/ios/swift-concurrency-6-2/SKILL.md +216 -0
- package/skills/ios/swift-protocol-di-testing/SKILL.md +190 -0
- package/skills/ios/swiftui-design-tokens/SKILL.md +475 -0
- package/skills/ios/writing-for-interfaces/SKILL.md +75 -0
- package/skills/web/accessibility/SKILL.md +146 -0
- package/skills/web/aceternity-ui/SKILL.md +719 -0
- package/skills/web/aceternity-ui/metadata.json +10 -0
- package/skills/web/api-design/SKILL.md +523 -0
- package/skills/web/chart-accessibility/SKILL.md +332 -0
- package/skills/web/composition-patterns/AGENTS.md +946 -0
- package/skills/web/composition-patterns/README.md +60 -0
- package/skills/web/composition-patterns/SKILL.md +89 -0
- package/skills/web/composition-patterns/metadata.json +11 -0
- package/skills/web/composition-patterns/rules/_sections.md +29 -0
- package/skills/web/composition-patterns/rules/_template.md +24 -0
- package/skills/web/composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/skills/web/composition-patterns/rules/architecture-compound-components.md +112 -0
- package/skills/web/composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/skills/web/composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/skills/web/composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/skills/web/composition-patterns/rules/state-context-interface.md +191 -0
- package/skills/web/composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/skills/web/composition-patterns/rules/state-lift-state.md +125 -0
- package/skills/web/cost-aware-llm-pipeline/SKILL.md +183 -0
- package/skills/web/database-migrations/SKILL.md +429 -0
- package/skills/web/deployment-patterns/SKILL.md +427 -0
- package/skills/web/docker-patterns/SKILL.md +364 -0
- package/skills/web/e2e-testing/SKILL.md +326 -0
- package/skills/web/lighthouse-ci/SKILL.md +361 -0
- package/skills/web/mcp-server-patterns/SKILL.md +69 -0
- package/skills/web/next-best-practices/SKILL.md +153 -0
- package/skills/web/next-best-practices/async-patterns.md +87 -0
- package/skills/web/next-best-practices/bundling.md +180 -0
- package/skills/web/next-best-practices/data-patterns.md +297 -0
- package/skills/web/next-best-practices/debug-tricks.md +105 -0
- package/skills/web/next-best-practices/directives.md +73 -0
- package/skills/web/next-best-practices/error-handling.md +227 -0
- package/skills/web/next-best-practices/file-conventions.md +140 -0
- package/skills/web/next-best-practices/font.md +245 -0
- package/skills/web/next-best-practices/functions.md +108 -0
- package/skills/web/next-best-practices/hydration-error.md +91 -0
- package/skills/web/next-best-practices/image.md +173 -0
- package/skills/web/next-best-practices/metadata.md +301 -0
- package/skills/web/next-best-practices/parallel-routes.md +287 -0
- package/skills/web/next-best-practices/route-handlers.md +146 -0
- package/skills/web/next-best-practices/rsc-boundaries.md +159 -0
- package/skills/web/next-best-practices/runtime-selection.md +39 -0
- package/skills/web/next-best-practices/scripts.md +141 -0
- package/skills/web/next-best-practices/self-hosting.md +371 -0
- package/skills/web/next-best-practices/suspense-boundaries.md +67 -0
- package/skills/web/next-cache-components/SKILL.md +411 -0
- package/skills/web/postgres-best-practices/SKILL.md +14 -0
- package/skills/web/postgres-best-practices/references/schema-design.md +9 -0
- package/skills/web/react-best-practices/AGENTS.md +3810 -0
- package/skills/web/react-best-practices/README.md +123 -0
- package/skills/web/react-best-practices/SKILL.md +149 -0
- package/skills/web/react-best-practices/metadata.json +15 -0
- package/skills/web/react-best-practices/rules/_sections.md +46 -0
- package/skills/web/react-best-practices/rules/_template.md +28 -0
- package/skills/web/react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/skills/web/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/skills/web/react-best-practices/rules/advanced-init-once.md +42 -0
- package/skills/web/react-best-practices/rules/advanced-use-latest.md +39 -0
- package/skills/web/react-best-practices/rules/async-api-routes.md +38 -0
- package/skills/web/react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/skills/web/react-best-practices/rules/async-defer-await.md +82 -0
- package/skills/web/react-best-practices/rules/async-dependencies.md +51 -0
- package/skills/web/react-best-practices/rules/async-parallel.md +28 -0
- package/skills/web/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/skills/web/react-best-practices/rules/bundle-analyzable-paths.md +63 -0
- package/skills/web/react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/skills/web/react-best-practices/rules/bundle-conditional.md +31 -0
- package/skills/web/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/skills/web/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/skills/web/react-best-practices/rules/bundle-preload.md +50 -0
- package/skills/web/react-best-practices/rules/client-event-listeners.md +74 -0
- package/skills/web/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/skills/web/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/skills/web/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/skills/web/react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/skills/web/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/skills/web/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/skills/web/react-best-practices/rules/js-cache-storage.md +70 -0
- package/skills/web/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/skills/web/react-best-practices/rules/js-early-exit.md +50 -0
- package/skills/web/react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/skills/web/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/skills/web/react-best-practices/rules/js-index-maps.md +37 -0
- package/skills/web/react-best-practices/rules/js-length-check-first.md +49 -0
- package/skills/web/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/skills/web/react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/skills/web/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/skills/web/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/skills/web/react-best-practices/rules/rendering-activity.md +26 -0
- package/skills/web/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/skills/web/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/skills/web/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/skills/web/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/skills/web/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/skills/web/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/skills/web/react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/skills/web/react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/skills/web/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/skills/web/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/skills/web/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/skills/web/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/skills/web/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/skills/web/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/skills/web/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/skills/web/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/skills/web/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/skills/web/react-best-practices/rules/rerender-memo.md +44 -0
- package/skills/web/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/skills/web/react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/skills/web/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/skills/web/react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/skills/web/react-best-practices/rules/rerender-transitions.md +40 -0
- package/skills/web/react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/skills/web/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/skills/web/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/skills/web/react-best-practices/rules/server-auth-actions.md +96 -0
- package/skills/web/react-best-practices/rules/server-cache-lru.md +41 -0
- package/skills/web/react-best-practices/rules/server-cache-react.md +76 -0
- package/skills/web/react-best-practices/rules/server-dedup-props.md +65 -0
- package/skills/web/react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/skills/web/react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/skills/web/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/skills/web/react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/skills/web/react-best-practices/rules/server-serialization.md +38 -0
- package/skills/web/seo/SKILL.md +154 -0
- package/skills/web/web-design-guidelines/SKILL.md +39 -0
- package/skills/web/zap-scan-config/SKILL.md +444 -0
- package/skills/web/zap-scan-config/assets/.gitkeep +9 -0
- package/skills/web/zap-scan-config/assets/github_action.yml +207 -0
- package/skills/web/zap-scan-config/assets/gitlab_ci.yml +226 -0
- package/skills/web/zap-scan-config/assets/zap_automation.yaml +196 -0
- package/skills/web/zap-scan-config/assets/zap_context.xml +192 -0
- package/skills/web/zap-scan-config/references/EXAMPLE.md +40 -0
- package/skills/web/zap-scan-config/references/api_testing_guide.md +475 -0
- package/skills/web/zap-scan-config/references/authentication_guide.md +431 -0
- package/skills/web/zap-scan-config/references/false_positive_handling.md +427 -0
- package/skills/web/zap-scan-config/references/owasp_mapping.md +255 -0
- package/src/graph/ids.ts +86 -0
- package/src/graph/index.ts +32 -0
- package/src/graph/parser/architecture.ts +603 -0
- package/src/graph/parser/component-manifest.ts +268 -0
- package/src/graph/parser/decisions-jsonl.ts +407 -0
- package/src/graph/parser/design-md-pass2.ts +253 -0
- package/src/graph/parser/design-md.ts +477 -0
- package/src/graph/parser/page-spec.ts +496 -0
- package/src/graph/parser/product-spec.ts +930 -0
- package/src/graph/parser/screenshot.ts +342 -0
- package/src/graph/parser/sprint-tasks.ts +317 -0
- package/src/graph/storage/index.ts +1154 -0
- package/src/graph/types.ts +432 -0
- package/src/graph/util/dhash.ts +84 -0
- package/src/lrr/aggregator.ts +175 -0
- package/src/orchestrator/hooks/context-header.ts +119 -0
- package/src/orchestrator/hooks/token-accounting-emitter.ts +77 -0
- package/src/orchestrator/hooks/token-accounting.ts +112 -0
- package/src/orchestrator/mcp/cycle-counter.ts +130 -0
- package/src/orchestrator/mcp/scribe.ts +294 -0
- package/src/orchestrator/mcp/state-save.ts +149 -0
- package/src/orchestrator/mcp/write-lease.ts +184 -0
- package/src/orchestrator/phase4-shared-context.ts +57 -0
- package/src/orchestrator/schemas/backward-edge.ts +46 -0
- package/agents/agentic-identity-trust.md +0 -121
- package/agents/data-consolidation-agent.md +0 -39
- package/agents/design-image-prompt-engineer.md +0 -105
- package/agents/design-visual-storyteller.md +0 -147
- package/agents/design-whimsy-injector.md +0 -89
- package/agents/engineering-autonomous-optimization-architect.md +0 -105
- package/agents/market-intel.md +0 -35
- package/agents/marketing-instagram-curator.md +0 -111
- package/agents/marketing-reddit-community-builder.md +0 -121
- package/agents/marketing-social-media-strategist.md +0 -74
- package/agents/marketing-tiktok-strategist.md +0 -123
- package/agents/marketing-twitter-engager.md +0 -124
- package/agents/marketing-wechat-official-account.md +0 -143
- package/agents/marketing-xiaohongshu-specialist.md +0 -136
- package/agents/marketing-zhihu-strategist.md +0 -160
- package/agents/product-behavioral-nudge-engine.md +0 -78
- package/agents/project-management-experiment-tracker.md +0 -102
- package/agents/report-distribution-agent.md +0 -43
- package/agents/risk-analysis.md +0 -45
- package/agents/sales-data-extraction-agent.md +0 -46
- package/agents/specialized-cultural-intelligence-strategist.md +0 -65
- package/agents/specialized-developer-advocate.md +0 -146
- package/agents/support-analytics-reporter.md +0 -133
- package/agents/support-executive-summary-generator.md +0 -64
- package/agents/support-finance-tracker.md +0 -145
- package/agents/support-legal-compliance-checker.md +0 -129
- package/agents/support-support-responder.md +0 -91
- package/agents/testing-accessibility-auditor.md +0 -110
- package/agents/testing-test-results-analyzer.md +0 -97
- package/agents/testing-tool-evaluator.md +0 -76
- package/agents/testing-workflow-optimizer.md +0 -99
- package/agents/user-research.md +0 -40
- package/protocols/brainstorm.md +0 -99
- package/protocols/design.md +0 -269
- package/protocols/planning.md +0 -87
- package/skills/ios/ios-hig/SKILL.md +0 -41
- package/skills/ios/ios-hig/references/accessibility.md +0 -81
- package/skills/ios/ios-hig/references/content.md +0 -142
- package/skills/ios/ios-hig/references/feedback.md +0 -123
- package/skills/ios/ios-hig/references/interaction.md +0 -199
- package/skills/ios/ios-hig/references/performance-platform.md +0 -129
- package/skills/ios/ios-hig/references/privacy-permissions.md +0 -181
- 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());
|
package/hooks/session-start
CHANGED
|
@@ -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/
|
|
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"
|