buildanything 1.8.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +9 -3
- package/CHANGELOG.md +57 -0
- package/README.md +2 -2
- package/agents/a11y-architect.md +166 -0
- package/agents/business-model.md +80 -29
- package/agents/code-architect.md +75 -0
- package/agents/code-reviewer.md +255 -0
- package/agents/code-simplifier.md +64 -0
- package/agents/design-brand-guardian.md +293 -53
- package/agents/design-critic.md +139 -0
- package/agents/design-inclusive-visuals-specialist.md +6 -19
- package/agents/design-ui-designer.md +335 -56
- package/agents/design-ux-architect.md +403 -55
- package/agents/design-ux-researcher.md +264 -49
- package/agents/engineering-ai-engineer.md +26 -36
- package/agents/engineering-backend-architect.md +185 -36
- package/agents/engineering-data-engineer.md +225 -43
- package/agents/engineering-devops-automator.md +227 -74
- package/agents/engineering-frontend-developer.md +210 -34
- package/agents/engineering-mobile-app-builder.md +6 -1
- package/agents/engineering-rapid-prototyper.md +30 -9
- package/agents/engineering-security-engineer.md +263 -61
- package/agents/engineering-senior-developer.md +128 -19
- package/agents/engineering-sre.md +84 -0
- package/agents/engineering-technical-writer.md +285 -41
- package/agents/feature-intel.md +110 -0
- package/agents/ios-app-review-guardian.md +19 -2
- package/agents/ios-foundation-models-specialist.md +20 -2
- package/agents/ios-storekit-specialist.md +9 -2
- package/agents/ios-swift-architect.md +28 -1
- package/agents/ios-swift-search.md +8 -1
- package/agents/ios-swift-ui-design.md +33 -1
- package/agents/marketing-app-store-optimizer.md +246 -64
- package/agents/planner.md +216 -0
- package/agents/pr-test-analyzer.md +63 -0
- package/agents/product-feedback-synthesizer.md +8 -2
- package/agents/refactor-cleaner.md +102 -0
- package/agents/security-reviewer.md +128 -0
- package/agents/silent-failure-hunter.md +54 -0
- package/agents/swift-build-resolver.md +119 -0
- package/agents/swift-reviewer.md +112 -0
- package/agents/tech-feasibility.md +21 -1
- package/agents/testing-api-tester.md +236 -59
- package/agents/testing-evidence-collector.md +26 -1
- package/agents/testing-performance-benchmarker.md +21 -1
- package/agents/testing-reality-checker.md +6 -1
- package/agents/visual-research.md +116 -0
- package/bin/adapters/cycle-counter-tool.ts +155 -0
- package/bin/adapters/scribe-tool.ts +71 -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 +328 -0
- package/bin/setup.js +83 -8
- package/commands/add-feature.md +2 -0
- package/commands/build.md +782 -266
- package/commands/fix.md +1 -1
- package/commands/self-check.md +121 -0
- package/commands/setup.md +50 -9
- package/commands/ux-review.md +2 -2
- package/commands/verify.md +6 -9
- package/docs/migration/agents.yaml +729 -0
- package/docs/migration/phase-graph.yaml +1088 -0
- package/docs/migration/sdk-host-compat.md +18 -0
- package/hooks/compile-writer-owner-cache.ts +171 -0
- package/hooks/hooks.json +36 -0
- package/hooks/pre-tool-use +19 -0
- package/hooks/pre-tool-use.ts +776 -0
- package/hooks/record-mode-transitions.ts +178 -0
- package/hooks/session-start +71 -1
- package/hooks/subagent-start +17 -0
- package/hooks/subagent-start.ts +471 -0
- package/hooks/subagent-stop +17 -0
- package/hooks/subagent-stop.ts +153 -0
- package/package.json +24 -4
- package/protocols/architecture-schema.md +171 -0
- package/protocols/decision-log.md +131 -0
- package/protocols/ios-context.md +10 -11
- package/protocols/ios-phase-branches.md +208 -33
- package/protocols/launch-readiness.md +258 -0
- package/protocols/metric-loop.md +62 -2
- package/protocols/smoke-test.md +9 -1
- package/protocols/state-schema.json +388 -0
- package/protocols/state-schema.md +172 -0
- package/protocols/verify.md +62 -2
- package/protocols/visual-dna.md +185 -0
- package/protocols/web-phase-branches.md +222 -72
- 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 +16 -7
- 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/lrr/aggregator.ts +80 -0
- package/src/orchestrator/hooks/context-header.ts +95 -0
- package/src/orchestrator/hooks/token-accounting-emitter.ts +77 -0
- package/src/orchestrator/hooks/token-accounting.ts +101 -0
- package/src/orchestrator/mcp/cycle-counter.ts +129 -0
- package/src/orchestrator/mcp/scribe.ts +283 -0
- package/src/orchestrator/mcp/state-save.ts +149 -0
- package/src/orchestrator/mcp/write-lease.ts +167 -0
- package/src/orchestrator/phase4-shared-context.ts +41 -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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: testing-performance-benchmarker
|
|
3
3
|
description: Expert performance testing and optimization specialist focused on measuring, analyzing, and improving system performance across all applications and infrastructure
|
|
4
4
|
color: orange
|
|
5
5
|
---
|
|
@@ -8,6 +8,26 @@ color: orange
|
|
|
8
8
|
|
|
9
9
|
You are a performance testing and optimization specialist who ensures systems meet performance requirements and deliver exceptional user experiences through comprehensive benchmarking.
|
|
10
10
|
|
|
11
|
+
## Skill Access
|
|
12
|
+
|
|
13
|
+
The orchestrator passes these variables into your dispatch prompt: `project_type` and `phase`.
|
|
14
|
+
|
|
15
|
+
**Rules:**
|
|
16
|
+
- Load skills from this shortlist ONLY. Never consult skills outside this list, even if familiar.
|
|
17
|
+
- No defaulting. When no gate matches a skill, do NOT load it.
|
|
18
|
+
- No substitutions.
|
|
19
|
+
|
|
20
|
+
General load/stress/endurance benchmarking is measurement-first against SLOs and framework-agnostic. Platform-specific audits (Core Web Vitals, SwiftUI rendering) benefit from vendored framework guidance.
|
|
21
|
+
|
|
22
|
+
**Project-type gated (iOS):**
|
|
23
|
+
- `project_type=ios AND phase=5` → `skills/ios/swiftui-performance-audit` — diagnose slow rendering, janky scrolling, high CPU, excessive view updates; code-first review + Instruments profiling guide
|
|
24
|
+
|
|
25
|
+
**Project-type gated (web):**
|
|
26
|
+
- `project_type=web AND phase ∈ {5, 7}` → `skills/web/lighthouse-ci` — Lighthouse-driven performance audits, Core Web Vitals budgets, asset optimization
|
|
27
|
+
|
|
28
|
+
**Forbidden defaults:**
|
|
29
|
+
- Do NOT load `skills/ios/swift-concurrency` (older) — superseded by `swift-concurrency-6-2`.
|
|
30
|
+
|
|
11
31
|
## Core Responsibilities
|
|
12
32
|
|
|
13
33
|
- Execute load, stress, endurance, and scalability testing across all systems
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: testing-reality-checker
|
|
3
3
|
description: Stops fantasy approvals, evidence-based certification - Default to "NEEDS WORK", requires overwhelming proof for production readiness
|
|
4
4
|
color: red
|
|
5
|
+
model: opus
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
# Reality Checker
|
|
8
9
|
|
|
9
10
|
You are a senior integration specialist who stops fantasy approvals and requires overwhelming evidence before production certification -- default verdict is NEEDS WORK.
|
|
10
11
|
|
|
12
|
+
## Skill Access
|
|
13
|
+
|
|
14
|
+
This agent does not consult vendored skills. It operates from its system prompt alone. Reality-checking is evidence-gating — it reads screenshots, logs, and claims and renders a verdict; it does not write or design code.
|
|
15
|
+
|
|
11
16
|
## Core Principles
|
|
12
17
|
|
|
13
18
|
- You are the last line of defense against unrealistic assessments
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: visual-research
|
|
3
|
+
description: Playwright-driven visual sweep of rival UIs or awards sites. Runs in two input modes — Competitive Audit or Inspiration Mining — and returns design-references.md grouped by DNA axis.
|
|
4
|
+
color: blue
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Visual Research
|
|
8
|
+
|
|
9
|
+
## Skill Access
|
|
10
|
+
|
|
11
|
+
This agent does not consult vendored skills. It operates from its system prompt alone. Visual sweep via Playwright is evidence collection against the locked DNA axes; it does not need framework implementation guidance. Library catalog decisions happen in the downstream design agents.
|
|
12
|
+
|
|
13
|
+
You run the Phase 3.1 visual sweep. The 6-axis Visual DNA has already been locked by Brand Guardian at Step 3.0 — your job is to validate and enrich that choice with concrete reference material, not to decide the direction. You are goal-directed, not exploratory. Every screenshot you return must be tagged with the DNA axis it exemplifies; anything else is catalogue noise.
|
|
14
|
+
|
|
15
|
+
You run in one of two input modes, chosen by the caller:
|
|
16
|
+
|
|
17
|
+
- **`competitive-audit`** — find 5-8 rival products that exemplify the locked DNA (not all competitors, just the ones that nail the axes we chose)
|
|
18
|
+
- **`inspiration-mining`** — find 5-8 Awwwards / Godly / SiteInspire sites that match the DNA
|
|
19
|
+
|
|
20
|
+
Both modes run the same Playwright capture loop with different URL seeds.
|
|
21
|
+
|
|
22
|
+
## Inputs
|
|
23
|
+
|
|
24
|
+
- Path to `visual-dna.md` — the locked 6-axis DNA card
|
|
25
|
+
- Mode flag: `competitive-audit` or `inspiration-mining`
|
|
26
|
+
- Optional list of specific site URLs from the user or earlier research
|
|
27
|
+
- Optional path to `findings-digest.md` (for competitor hints from Phase 1)
|
|
28
|
+
|
|
29
|
+
## Core Responsibilities
|
|
30
|
+
|
|
31
|
+
- Walk 5-8 candidate sites per run using Playwright MCP at desktop 1920x1080 and mobile 375x812
|
|
32
|
+
- Analyze which DNA axes each site nails and which it fails on
|
|
33
|
+
- Discard candidates that score below target on 3+ axes — they are not references for this DNA
|
|
34
|
+
- Group surviving references by DNA axis in `design-references.md` (motion refs, material refs, typography refs, density refs, character refs)
|
|
35
|
+
- Record the file:line or section locator where the reference element lives on each captured site
|
|
36
|
+
|
|
37
|
+
## Hard Rules
|
|
38
|
+
|
|
39
|
+
- Goal-directed, not exploratory. You are validating and enriching the locked DNA — you are not cataloguing the landscape. A reference that doesn't exemplify at least one locked DNA axis does not go in the file.
|
|
40
|
+
- Every screenshot is tagged with the DNA axis or axes it exemplifies. Untagged captures are rejected.
|
|
41
|
+
- Desktop 1920x1080 AND mobile 375x812 for every site. Breakpoint parity matters for the downstream Design Critic.
|
|
42
|
+
- No self-authored commentary on rival products. Describe the visual treatment, cite the axis, move on.
|
|
43
|
+
- If fewer than 4 candidates survive the filter, widen the URL seed list and re-run rather than padding with weak matches.
|
|
44
|
+
|
|
45
|
+
## Workflow
|
|
46
|
+
|
|
47
|
+
### Shared setup
|
|
48
|
+
1. Read `visual-dna.md`. Write the 6 axis values (Scope, Density, Character, Material, Motion, Type) to a local scratchpad so every capture can be scored against them.
|
|
49
|
+
2. Pick the mode branch below based on the input flag.
|
|
50
|
+
|
|
51
|
+
### Competitive Audit mode
|
|
52
|
+
3a. Build the candidate URL list:
|
|
53
|
+
- Start with user-provided URLs if any
|
|
54
|
+
- Read `findings-digest.md` if present and pull named rivals
|
|
55
|
+
- Otherwise, use WebFetch / WebSearch to find 10-15 products in the same category as the design-doc
|
|
56
|
+
4a. For each candidate, visit the landing page, pricing page, and one core product screen. Score each against the 6 DNA axes on a 0-3 scale. Keep candidates with total ≥ 12.
|
|
57
|
+
5a. For each survivor, capture desktop + mobile screenshots of the DNA-exemplifying sections (hero, key interactive, motion moments). Tag each capture with the DNA axis it exemplifies.
|
|
58
|
+
|
|
59
|
+
### Inspiration Mining mode
|
|
60
|
+
3b. Build the candidate URL list:
|
|
61
|
+
- Query Awwwards, Godly.website, and SiteInspire via WebFetch for recent entries matching the DNA Character and Material values
|
|
62
|
+
- Supplement with user-provided URLs if any
|
|
63
|
+
4b. For each candidate, visit the main page and any case-study detail pages that match the DNA. Apply the same 0-3 × 6-axis score. Keep candidates with total ≥ 12.
|
|
64
|
+
5b. Capture desktop + mobile screenshots of the DNA-exemplifying sections. Tag each capture.
|
|
65
|
+
|
|
66
|
+
### Shared finalize
|
|
67
|
+
6. Group captured references by DNA axis in `design-references.md`:
|
|
68
|
+
- `## Motion references` — 2-5 entries, each with URL, file path to screenshot, and one-line description of why it exemplifies the Motion axis
|
|
69
|
+
- `## Material references` — same format
|
|
70
|
+
- `## Typography references` — same format
|
|
71
|
+
- `## Density references` — same format
|
|
72
|
+
- `## Character references` — same format
|
|
73
|
+
7. For any axis with fewer than 2 references, note it as a gap in the file footer. The Design Critic will work with what exists; the gap is an honest signal, not a failure.
|
|
74
|
+
8. Write `design-references.md` to the plan directory using the Write tool. Return the file path plus a short summary (count per axis, mode used, survivor ratio).
|
|
75
|
+
|
|
76
|
+
## Output Format
|
|
77
|
+
|
|
78
|
+
`design-references.md` shape:
|
|
79
|
+
|
|
80
|
+
```markdown
|
|
81
|
+
---
|
|
82
|
+
mode: competitive-audit
|
|
83
|
+
dna_source: visual-dna.md
|
|
84
|
+
captured_at: 2026-04-14
|
|
85
|
+
candidate_count: 12
|
|
86
|
+
survivor_count: 6
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
# Design References
|
|
90
|
+
|
|
91
|
+
## Motion references
|
|
92
|
+
- [Linear](https://linear.app) — `screens/linear-home-desktop.png` — scroll-bound section reveals exemplify Cinematic motion with long cubic-bezier curves
|
|
93
|
+
- [Raycast](https://raycast.com) — `screens/raycast-hero-mobile.png` — micro-interactions on the hero CTA show Expressive motion without overshooting Cinematic
|
|
94
|
+
|
|
95
|
+
## Material references
|
|
96
|
+
- ...
|
|
97
|
+
|
|
98
|
+
## Typography references
|
|
99
|
+
- ...
|
|
100
|
+
|
|
101
|
+
## Density references
|
|
102
|
+
- ...
|
|
103
|
+
|
|
104
|
+
## Character references
|
|
105
|
+
- ...
|
|
106
|
+
|
|
107
|
+
## Gaps
|
|
108
|
+
- Motion references for "Cinematic + Dashboard" combination underpopulated — only 1 survivor. Design Critic should treat as weak evidence.
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Tools
|
|
112
|
+
|
|
113
|
+
- Playwright MCP (primary) — `browser_navigate`, `browser_take_screenshot`, `browser_resize` for breakpoint parity
|
|
114
|
+
- WebFetch / WebSearch for URL discovery
|
|
115
|
+
- Write for the final `design-references.md`
|
|
116
|
+
- Read for `visual-dna.md` and `findings-digest.md`
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter: wraps Kiro's cycle-counter handlers in the SdkMcpToolDefinition
|
|
3
|
+
* shape required by @anthropic-ai/claude-agent-sdk.
|
|
4
|
+
*
|
|
5
|
+
* Kiro's file (src/orchestrator/mcp/cycle-counter.ts) is owned by Kiro and
|
|
6
|
+
* must not be edited; this adapter lives here to preserve that boundary and
|
|
7
|
+
* to keep the SDK-specific zod/CallToolResult surface out of the handler core.
|
|
8
|
+
*
|
|
9
|
+
* Kiro's handlers mutate the CounterState object in place. The adapter echoes
|
|
10
|
+
* the updated state back to the caller so the orchestrator can pipe it into
|
|
11
|
+
* a single atomic state_save (A3 crash-seam protocol).
|
|
12
|
+
*
|
|
13
|
+
* Spec: docs/migration/sdk-hybrid/MIGRATION-PLAN-FINAL.md §4 Stage 4
|
|
14
|
+
* Task: 4.2.4
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { z } from "zod";
|
|
18
|
+
import {
|
|
19
|
+
cycleCounterCheck,
|
|
20
|
+
clearInFlightEdge,
|
|
21
|
+
handleStaleEdge,
|
|
22
|
+
type CounterState,
|
|
23
|
+
} from "../../src/orchestrator/mcp/cycle-counter.js";
|
|
24
|
+
|
|
25
|
+
type ToolConstructor = typeof import("@anthropic-ai/claude-agent-sdk").tool;
|
|
26
|
+
|
|
27
|
+
const inFlightEdgeSchema = z.object({
|
|
28
|
+
decision_id: z.string().min(1),
|
|
29
|
+
target_phase: z.string().min(1),
|
|
30
|
+
counter_value: z.number().int().nonnegative(),
|
|
31
|
+
started_at: z.string().min(1),
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const counterStateSchema = z.object({
|
|
35
|
+
backward_routing_count: z.record(z.string(), z.number().int().nonnegative()),
|
|
36
|
+
backward_routing_count_by_target_phase: z.record(z.string(), z.number().int().nonnegative()),
|
|
37
|
+
in_flight_backward_edge: inFlightEdgeSchema.optional(),
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const checkInputShape = {
|
|
41
|
+
state: counterStateSchema,
|
|
42
|
+
input: z.object({
|
|
43
|
+
decision_id: z.string().min(1),
|
|
44
|
+
target_phase: z.string().min(1),
|
|
45
|
+
}),
|
|
46
|
+
max_cycles: z.number().int().positive().optional(),
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const clearInputShape = {
|
|
50
|
+
state: counterStateSchema,
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const staleInputShape = {
|
|
54
|
+
state: counterStateSchema,
|
|
55
|
+
threshold_ms: z.number().int().positive().optional(),
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export function buildCycleCounterCheckTool(tool: ToolConstructor) {
|
|
59
|
+
return tool(
|
|
60
|
+
"cycle_counter_check",
|
|
61
|
+
"Check and increment backward-routing counters (per-decision + per-target-phase). Returns {action: allow|escalate_to_user, decision_count, phase_count, state} where state is the mutated CounterState to persist via state_save.",
|
|
62
|
+
checkInputShape,
|
|
63
|
+
async (args) => {
|
|
64
|
+
try {
|
|
65
|
+
const state = args.state as CounterState;
|
|
66
|
+
const result = cycleCounterCheck(state, args.input, args.max_cycles);
|
|
67
|
+
return {
|
|
68
|
+
content: [
|
|
69
|
+
{
|
|
70
|
+
type: "text",
|
|
71
|
+
text: JSON.stringify({ ...result, state }),
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
} catch (err) {
|
|
76
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
77
|
+
return {
|
|
78
|
+
isError: true,
|
|
79
|
+
content: [
|
|
80
|
+
{
|
|
81
|
+
type: "text",
|
|
82
|
+
text: `cycle_counter_check error: ${message}`,
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function buildClearInFlightEdgeTool(tool: ToolConstructor) {
|
|
92
|
+
return tool(
|
|
93
|
+
"clear_in_flight_edge",
|
|
94
|
+
"Clear the in_flight_backward_edge field (called by target phase on re-entry). Returns {state} for the caller to persist via state_save.",
|
|
95
|
+
clearInputShape,
|
|
96
|
+
async (args) => {
|
|
97
|
+
try {
|
|
98
|
+
const state = args.state as CounterState;
|
|
99
|
+
clearInFlightEdge(state);
|
|
100
|
+
return {
|
|
101
|
+
content: [
|
|
102
|
+
{
|
|
103
|
+
type: "text",
|
|
104
|
+
text: JSON.stringify({ state }),
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
};
|
|
108
|
+
} catch (err) {
|
|
109
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
110
|
+
return {
|
|
111
|
+
isError: true,
|
|
112
|
+
content: [
|
|
113
|
+
{
|
|
114
|
+
type: "text",
|
|
115
|
+
text: `clear_in_flight_edge error: ${message}`,
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export function buildHandleStaleEdgeTool(tool: ToolConstructor) {
|
|
125
|
+
return tool(
|
|
126
|
+
"handle_stale_edge",
|
|
127
|
+
"On --resume, if in_flight_backward_edge is older than threshold_ms (default 60000), decrement both counters and clear the edge. Returns {cleaned:boolean, state}.",
|
|
128
|
+
staleInputShape,
|
|
129
|
+
async (args) => {
|
|
130
|
+
try {
|
|
131
|
+
const state = args.state as CounterState;
|
|
132
|
+
const cleaned = handleStaleEdge(state, args.threshold_ms);
|
|
133
|
+
return {
|
|
134
|
+
content: [
|
|
135
|
+
{
|
|
136
|
+
type: "text",
|
|
137
|
+
text: JSON.stringify({ cleaned, state }),
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
};
|
|
141
|
+
} catch (err) {
|
|
142
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
143
|
+
return {
|
|
144
|
+
isError: true,
|
|
145
|
+
content: [
|
|
146
|
+
{
|
|
147
|
+
type: "text",
|
|
148
|
+
text: `handle_stale_edge error: ${message}`,
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
);
|
|
155
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter: wraps Kiro's scribeDecision(input, filePath) handler in the
|
|
3
|
+
* SdkMcpToolDefinition shape required by @anthropic-ai/claude-agent-sdk.
|
|
4
|
+
*
|
|
5
|
+
* Kiro's file (src/orchestrator/mcp/scribe.ts) is owned by Kiro and must
|
|
6
|
+
* not be edited; this adapter lives here to preserve that boundary and to
|
|
7
|
+
* keep the SDK-specific zod/CallToolResult surface out of the handler core.
|
|
8
|
+
*
|
|
9
|
+
* Spec: docs/migration/sdk-hybrid/MIGRATION-PLAN-FINAL.md §4 Stage 1
|
|
10
|
+
* Task: 1.2.4
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { resolve } from "node:path";
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
import { scribeDecision, loadCounters } from "../../src/orchestrator/mcp/scribe.js";
|
|
16
|
+
|
|
17
|
+
type ToolConstructor = typeof import("@anthropic-ai/claude-agent-sdk").tool;
|
|
18
|
+
|
|
19
|
+
const DEFAULT_DECISIONS_PATH = "docs/plans/decisions.jsonl";
|
|
20
|
+
|
|
21
|
+
const rejectedAlternativeSchema = z.object({
|
|
22
|
+
approach: z.string().min(1),
|
|
23
|
+
reason: z.string().min(1),
|
|
24
|
+
revisit_criterion: z.string().min(1),
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const scribeInputShape = {
|
|
28
|
+
phase: z.string().min(1),
|
|
29
|
+
category: z.string().min(1),
|
|
30
|
+
summary: z.string().min(1),
|
|
31
|
+
decided_by: z.string().min(1),
|
|
32
|
+
impact_level: z.enum(["low", "medium", "high", "critical"]),
|
|
33
|
+
chosen_approach: z.string().min(1),
|
|
34
|
+
rejected_alternatives: z.array(rejectedAlternativeSchema).max(3).optional(),
|
|
35
|
+
ref: z.string().optional(),
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export function buildScribeTool(tool: ToolConstructor, cwd: string) {
|
|
39
|
+
const decisionsPath = resolve(cwd, DEFAULT_DECISIONS_PATH);
|
|
40
|
+
loadCounters(decisionsPath);
|
|
41
|
+
|
|
42
|
+
return tool(
|
|
43
|
+
"scribe_decision",
|
|
44
|
+
"Append a decision row to docs/plans/decisions.jsonl. Single-writer per migration plan; validates against decisions.schema.json.",
|
|
45
|
+
scribeInputShape,
|
|
46
|
+
async (args) => {
|
|
47
|
+
try {
|
|
48
|
+
const row = scribeDecision(args, decisionsPath);
|
|
49
|
+
return {
|
|
50
|
+
content: [
|
|
51
|
+
{
|
|
52
|
+
type: "text",
|
|
53
|
+
text: JSON.stringify(row),
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
} catch (err) {
|
|
58
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
59
|
+
return {
|
|
60
|
+
isError: true,
|
|
61
|
+
content: [
|
|
62
|
+
{
|
|
63
|
+
type: "text",
|
|
64
|
+
text: `scribe_decision error: ${message}`,
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
);
|
|
71
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter: wraps Kiro's state-save handler (stateSave/stateRead/verifyIntegrity)
|
|
3
|
+
* in the SdkMcpToolDefinition shape required by @anthropic-ai/claude-agent-sdk.
|
|
4
|
+
*
|
|
5
|
+
* Kiro's file (src/orchestrator/mcp/state-save.ts) is owned by Kiro and must
|
|
6
|
+
* not be edited; this adapter lives here to preserve that boundary and to
|
|
7
|
+
* keep the SDK-specific zod/CallToolResult surface out of the handler core.
|
|
8
|
+
*
|
|
9
|
+
* Spec: docs/migration/sdk-hybrid/MIGRATION-PLAN-FINAL.md §4 Stage 3
|
|
10
|
+
* Task: 3.2.4
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
import {
|
|
15
|
+
stateSave,
|
|
16
|
+
stateRead,
|
|
17
|
+
verifyIntegrity,
|
|
18
|
+
} from "../../src/orchestrator/mcp/state-save.js";
|
|
19
|
+
|
|
20
|
+
type ToolConstructor = typeof import("@anthropic-ai/claude-agent-sdk").tool;
|
|
21
|
+
|
|
22
|
+
const saveInputShape = {
|
|
23
|
+
path: z.string().min(1),
|
|
24
|
+
state: z.record(z.string(), z.unknown()),
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const readInputShape = {
|
|
28
|
+
path: z.string().min(1),
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const verifyInputShape = {
|
|
32
|
+
path: z.string().min(1),
|
|
33
|
+
expected_sha256: z.string().min(1),
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export function buildStateSaveTool(tool: ToolConstructor) {
|
|
37
|
+
return tool(
|
|
38
|
+
"state_save",
|
|
39
|
+
"Atomically persist state to a JSON file via write-to-.tmp + fsync + rename. Returns {success, path, sha256, bytesWritten}. Single writer for .build-state.json.",
|
|
40
|
+
saveInputShape,
|
|
41
|
+
async (args) => {
|
|
42
|
+
try {
|
|
43
|
+
const result = stateSave(args.path, args.state as Record<string, unknown>);
|
|
44
|
+
return {
|
|
45
|
+
content: [
|
|
46
|
+
{
|
|
47
|
+
type: "text",
|
|
48
|
+
text: JSON.stringify(result),
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
} catch (err) {
|
|
53
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
54
|
+
return {
|
|
55
|
+
isError: true,
|
|
56
|
+
content: [
|
|
57
|
+
{
|
|
58
|
+
type: "text",
|
|
59
|
+
text: `state_save error: ${message}`,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function buildStateReadTool(tool: ToolConstructor) {
|
|
69
|
+
return tool(
|
|
70
|
+
"state_read",
|
|
71
|
+
"Read state from a JSON file and compute its SHA-256 checksum. Returns {state, sha256}.",
|
|
72
|
+
readInputShape,
|
|
73
|
+
async (args) => {
|
|
74
|
+
try {
|
|
75
|
+
const result = stateRead(args.path);
|
|
76
|
+
return {
|
|
77
|
+
content: [
|
|
78
|
+
{
|
|
79
|
+
type: "text",
|
|
80
|
+
text: JSON.stringify(result),
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
};
|
|
84
|
+
} catch (err) {
|
|
85
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
86
|
+
return {
|
|
87
|
+
isError: true,
|
|
88
|
+
content: [
|
|
89
|
+
{
|
|
90
|
+
type: "text",
|
|
91
|
+
text: `state_read error: ${message}`,
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function buildVerifyIntegrityTool(tool: ToolConstructor) {
|
|
101
|
+
return tool(
|
|
102
|
+
"verify_integrity",
|
|
103
|
+
"Verify a state file's SHA-256 matches the expected checksum. Returns {matches:boolean}.",
|
|
104
|
+
verifyInputShape,
|
|
105
|
+
async (args) => {
|
|
106
|
+
try {
|
|
107
|
+
const matches = verifyIntegrity(args.path, args.expected_sha256);
|
|
108
|
+
return {
|
|
109
|
+
content: [
|
|
110
|
+
{
|
|
111
|
+
type: "text",
|
|
112
|
+
text: JSON.stringify({ matches }),
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
};
|
|
116
|
+
} catch (err) {
|
|
117
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
118
|
+
return {
|
|
119
|
+
isError: true,
|
|
120
|
+
content: [
|
|
121
|
+
{
|
|
122
|
+
type: "text",
|
|
123
|
+
text: `verify_integrity error: ${message}`,
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
);
|
|
130
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter: wraps Kiro's write-lease handler (acquire/release/list) in the
|
|
3
|
+
* SdkMcpToolDefinition shape required by @anthropic-ai/claude-agent-sdk.
|
|
4
|
+
*
|
|
5
|
+
* Kiro's file (src/orchestrator/mcp/write-lease.ts) is owned by Kiro and must
|
|
6
|
+
* not be edited; this adapter lives here to preserve that boundary and to
|
|
7
|
+
* keep the SDK-specific zod/CallToolResult surface out of the handler core.
|
|
8
|
+
*
|
|
9
|
+
* Spec: docs/migration/sdk-hybrid/MIGRATION-PLAN-FINAL.md §A5
|
|
10
|
+
* Task: 2.3.4
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
import {
|
|
15
|
+
acquireWriteLease,
|
|
16
|
+
releaseLease,
|
|
17
|
+
getActiveLeases,
|
|
18
|
+
} from "../../src/orchestrator/mcp/write-lease.js";
|
|
19
|
+
|
|
20
|
+
type ToolConstructor = typeof import("@anthropic-ai/claude-agent-sdk").tool;
|
|
21
|
+
|
|
22
|
+
const acquireInputShape = {
|
|
23
|
+
task_id: z.string().min(1),
|
|
24
|
+
file_paths: z.array(z.string().min(1)).min(1),
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const releaseInputShape = {
|
|
28
|
+
task_id: z.string().min(1),
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const listInputShape = {} as const;
|
|
32
|
+
|
|
33
|
+
export function buildAcquireWriteLeaseTool(tool: ToolConstructor) {
|
|
34
|
+
return tool(
|
|
35
|
+
"acquire_write_lease",
|
|
36
|
+
"Acquire an exclusive write lease on one or more file paths for a task. Returns granted:true with the lease, or granted:false with conflict details when another task holds an overlapping lease.",
|
|
37
|
+
acquireInputShape,
|
|
38
|
+
async (args) => {
|
|
39
|
+
try {
|
|
40
|
+
const result = acquireWriteLease(args.task_id, args.file_paths);
|
|
41
|
+
return {
|
|
42
|
+
content: [
|
|
43
|
+
{
|
|
44
|
+
type: "text",
|
|
45
|
+
text: JSON.stringify(result),
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
} catch (err) {
|
|
50
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
51
|
+
return {
|
|
52
|
+
isError: true,
|
|
53
|
+
content: [
|
|
54
|
+
{
|
|
55
|
+
type: "text",
|
|
56
|
+
text: `acquire_write_lease error: ${message}`,
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function buildReleaseWriteLeaseTool(tool: ToolConstructor) {
|
|
66
|
+
return tool(
|
|
67
|
+
"release_write_lease",
|
|
68
|
+
"Release all write leases held by a task. Called by SubagentStop hook on dispatch return. Returns released:true if a lease existed, false otherwise.",
|
|
69
|
+
releaseInputShape,
|
|
70
|
+
async (args) => {
|
|
71
|
+
try {
|
|
72
|
+
const released = releaseLease(args.task_id);
|
|
73
|
+
return {
|
|
74
|
+
content: [
|
|
75
|
+
{
|
|
76
|
+
type: "text",
|
|
77
|
+
text: JSON.stringify({ released }),
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
};
|
|
81
|
+
} catch (err) {
|
|
82
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
83
|
+
return {
|
|
84
|
+
isError: true,
|
|
85
|
+
content: [
|
|
86
|
+
{
|
|
87
|
+
type: "text",
|
|
88
|
+
text: `release_write_lease error: ${message}`,
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function buildListWriteLeasesTool(tool: ToolConstructor) {
|
|
98
|
+
return tool(
|
|
99
|
+
"list_write_leases",
|
|
100
|
+
"List all active write leases (holder, paths, acquired_at). Read-only; intended for orchestrator diagnostics and .build-state.json persistence snapshots.",
|
|
101
|
+
listInputShape,
|
|
102
|
+
async () => {
|
|
103
|
+
try {
|
|
104
|
+
const leases = getActiveLeases();
|
|
105
|
+
return {
|
|
106
|
+
content: [
|
|
107
|
+
{
|
|
108
|
+
type: "text",
|
|
109
|
+
text: JSON.stringify({ leases }),
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
};
|
|
113
|
+
} catch (err) {
|
|
114
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
115
|
+
return {
|
|
116
|
+
isError: true,
|
|
117
|
+
content: [
|
|
118
|
+
{
|
|
119
|
+
type: "text",
|
|
120
|
+
text: `list_write_leases error: ${message}`,
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
);
|
|
127
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
// Thin shim: delegates to the TypeScript entry via tsx.
|
|
5
|
+
// Mirrors the hook pattern (npx --no-install tsx) used by subagent-start,
|
|
6
|
+
// pre-tool-use, and compile-writer-owner-cache — consistent behavior across
|
|
7
|
+
// the whole plugin when tsx is not globally installed.
|
|
8
|
+
const { spawnSync } = require('child_process');
|
|
9
|
+
const path = require('path');
|
|
10
|
+
|
|
11
|
+
const tsEntry = path.join(__dirname, 'buildanything-runtime.ts');
|
|
12
|
+
const result = spawnSync('npx', ['--no-install', 'tsx', tsEntry, ...process.argv.slice(2)], {
|
|
13
|
+
stdio: 'inherit',
|
|
14
|
+
});
|
|
15
|
+
process.exit(result.status ?? (result.error ? 1 : 0));
|