claudecode-omc 5.6.5 → 5.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/.local/commands/code-review.md +416 -0
  2. package/.local/commands/pr.md +250 -0
  3. package/.local/commands/prp-pr.md +244 -0
  4. package/.local/guidelines/CLAUDE.md +47 -0
  5. package/.local/skills/h5-to-swiftui/SKILL.md +201 -0
  6. package/.local/skills/h5-to-swiftui/assets/calibration/README.md +176 -0
  7. package/.local/skills/h5-to-swiftui/assets/calibration/h5-twin/index.html +52 -0
  8. package/.local/skills/h5-to-swiftui/assets/calibration/h5-twin/style.css +133 -0
  9. package/.local/skills/h5-to-swiftui/assets/calibration/swiftui-twin/Package.swift +26 -0
  10. package/.local/skills/h5-to-swiftui/assets/calibration/swiftui-twin/Sources/CalibrationScreen/CalibrationScreen.swift +142 -0
  11. package/.local/skills/h5-to-swiftui/assets/calibration/swiftui-twin-divergent/Package.swift +32 -0
  12. package/.local/skills/h5-to-swiftui/assets/calibration/swiftui-twin-divergent/Sources/CalibrationScreenDivergent/CalibrationScreenDivergent.swift +122 -0
  13. package/.local/skills/h5-to-swiftui/assets/calibration/tokens.json +42 -0
  14. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/index.html +14 -0
  15. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/package.json +20 -0
  16. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/public/api/articles/001.json +96 -0
  17. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/public/api/articles/index.json +89 -0
  18. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/App.jsx +22 -0
  19. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/App.module.css +11 -0
  20. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/ArticleCard.jsx +53 -0
  21. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/ArticleCard.module.css +139 -0
  22. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/NavBar.jsx +37 -0
  23. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/NavBar.module.css +72 -0
  24. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/TagCloud.jsx +30 -0
  25. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/TagCloud.module.css +50 -0
  26. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/TrendChart.jsx +159 -0
  27. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/components/TrendChart.module.css +21 -0
  28. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/main.jsx +12 -0
  29. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/screens/ArticleScreen.jsx +182 -0
  30. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/screens/ArticleScreen.module.css +294 -0
  31. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/screens/FeedScreen.jsx +147 -0
  32. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/screens/FeedScreen.module.css +161 -0
  33. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/styles/global.css +50 -0
  34. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/src/styles/tokens.css +103 -0
  35. package/.local/skills/h5-to-swiftui/assets/sample-h5-react/vite.config.js +6 -0
  36. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/data/tasks.js +67 -0
  37. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/index.html +26 -0
  38. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/router.js +73 -0
  39. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/screens/detail.js +164 -0
  40. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/screens/home.js +53 -0
  41. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/screens/list.js +87 -0
  42. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/styles/app.css +342 -0
  43. package/.local/skills/h5-to-swiftui/assets/sample-h5-vanilla/styles/tokens.css +68 -0
  44. package/.local/skills/h5-to-swiftui/references/css-to-swiftui-map.md +205 -0
  45. package/.local/skills/h5-to-swiftui/references/design-token-extraction.md +209 -0
  46. package/.local/skills/h5-to-swiftui/references/high-risk-triage.md +209 -0
  47. package/.local/skills/h5-to-swiftui/references/render-equivalence-calibration.md +193 -0
  48. package/.local/skills/h5-to-swiftui/references/stack-detection.md +160 -0
  49. package/.local/skills/h5-to-swiftui/references/visual-diff-loop-protocol.md +365 -0
  50. package/.local/skills/h5-to-swiftui/scripts/_calib-consts.mjs +150 -0
  51. package/.local/skills/h5-to-swiftui/scripts/_imglib.mjs +547 -0
  52. package/.local/skills/h5-to-swiftui/scripts/_provenance.mjs +123 -0
  53. package/.local/skills/h5-to-swiftui/scripts/calibrate-render.mjs +625 -0
  54. package/.local/skills/h5-to-swiftui/scripts/capture-reference.mjs +386 -0
  55. package/.local/skills/h5-to-swiftui/scripts/detect-stack.mjs +305 -0
  56. package/.local/skills/h5-to-swiftui/scripts/evaluate-convergence.mjs +1093 -0
  57. package/.local/skills/h5-to-swiftui/scripts/extract-tokens.mjs +600 -0
  58. package/.local/skills/h5-to-swiftui/scripts/mark-overlay.mjs +379 -0
  59. package/.local/skills/h5-to-swiftui/scripts/pixel-diff.mjs +530 -0
  60. package/.local/skills/h5-to-swiftui/scripts/sim-screenshot.sh +544 -0
  61. package/bundled/manifest.json +4 -4
  62. package/bundled/upstream/anthropic-skills/skills/algorithmic-art/LICENSE.txt +1 -1
  63. package/bundled/upstream/anthropic-skills/skills/brand-guidelines/LICENSE.txt +1 -1
  64. package/bundled/upstream/anthropic-skills/skills/canvas-design/LICENSE.txt +1 -1
  65. package/bundled/upstream/anthropic-skills/skills/claude-api/LICENSE.txt +1 -1
  66. package/bundled/upstream/anthropic-skills/skills/claude-api/SKILL.md +120 -58
  67. package/bundled/upstream/anthropic-skills/skills/claude-api/curl/examples.md +9 -9
  68. package/bundled/upstream/anthropic-skills/skills/claude-api/curl/managed-agents.md +336 -0
  69. package/bundled/upstream/anthropic-skills/skills/claude-api/go/managed-agents/README.md +561 -0
  70. package/bundled/upstream/anthropic-skills/skills/claude-api/java/claude-api.md +2 -2
  71. package/bundled/upstream/anthropic-skills/skills/claude-api/java/managed-agents/README.md +442 -0
  72. package/bundled/upstream/anthropic-skills/skills/claude-api/php/claude-api.md +10 -10
  73. package/bundled/upstream/anthropic-skills/skills/claude-api/php/managed-agents/README.md +435 -0
  74. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/README.md +16 -16
  75. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/batches.md +3 -3
  76. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/files-api.md +3 -3
  77. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/streaming.md +7 -7
  78. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/tool-use.md +19 -19
  79. package/bundled/upstream/anthropic-skills/skills/claude-api/python/managed-agents/README.md +332 -0
  80. package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/claude-api.md +4 -4
  81. package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/managed-agents/README.md +389 -0
  82. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/agent-design.md +101 -0
  83. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/error-codes.md +11 -4
  84. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/live-sources.md +60 -48
  85. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-api-reference.md +372 -0
  86. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-client-patterns.md +209 -0
  87. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-core.md +220 -0
  88. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-environments.md +211 -0
  89. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-events.md +195 -0
  90. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-memory.md +197 -0
  91. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-multiagent.md +99 -0
  92. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-onboarding.md +114 -0
  93. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-outcomes.md +106 -0
  94. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-overview.md +67 -0
  95. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-tools.md +315 -0
  96. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-webhooks.md +110 -0
  97. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/model-migration.md +779 -0
  98. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/models.md +16 -14
  99. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/prompt-caching.md +45 -2
  100. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/tool-use-concepts.md +28 -6
  101. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/README.md +15 -15
  102. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/batches.md +2 -2
  103. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/files-api.md +1 -1
  104. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/streaming.md +5 -5
  105. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/tool-use.md +15 -15
  106. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/managed-agents/README.md +359 -0
  107. package/bundled/upstream/anthropic-skills/skills/internal-comms/LICENSE.txt +1 -1
  108. package/bundled/upstream/anthropic-skills/skills/mcp-builder/LICENSE.txt +1 -1
  109. package/bundled/upstream/anthropic-skills/skills/skill-creator/LICENSE.txt +1 -1
  110. package/bundled/upstream/anthropic-skills/skills/slack-gif-creator/LICENSE.txt +1 -1
  111. package/bundled/upstream/anthropic-skills/skills/theme-factory/LICENSE.txt +1 -1
  112. package/bundled/upstream/anthropic-skills/skills/web-artifacts-builder/LICENSE.txt +1 -1
  113. package/bundled/upstream/anthropic-skills/skills/webapp-testing/LICENSE.txt +1 -1
  114. package/bundled/upstream/ecc/.omc-source/bundle.json +2 -3
  115. package/bundled/upstream/ecc/.omc-source/manifests/.claude-plugin/marketplace.json +4 -4
  116. package/bundled/upstream/ecc/agents/a11y-architect.md +10 -2
  117. package/bundled/upstream/ecc/agents/architect.md +9 -0
  118. package/bundled/upstream/ecc/agents/build-error-resolver.md +9 -0
  119. package/bundled/upstream/ecc/agents/chief-of-staff.md +9 -0
  120. package/bundled/upstream/ecc/agents/code-architect.md +9 -0
  121. package/bundled/upstream/ecc/agents/code-explorer.md +10 -1
  122. package/bundled/upstream/ecc/agents/code-reviewer.md +87 -1
  123. package/bundled/upstream/ecc/agents/code-simplifier.md +9 -0
  124. package/bundled/upstream/ecc/agents/comment-analyzer.md +10 -1
  125. package/bundled/upstream/ecc/agents/conversation-analyzer.md +9 -0
  126. package/bundled/upstream/ecc/agents/cpp-build-resolver.md +9 -0
  127. package/bundled/upstream/ecc/agents/cpp-reviewer.md +9 -0
  128. package/bundled/upstream/ecc/agents/csharp-reviewer.md +9 -0
  129. package/bundled/upstream/ecc/agents/dart-build-resolver.md +9 -0
  130. package/bundled/upstream/ecc/agents/database-reviewer.md +9 -0
  131. package/bundled/upstream/ecc/agents/django-build-resolver.md +252 -0
  132. package/bundled/upstream/ecc/agents/django-reviewer.md +169 -0
  133. package/bundled/upstream/ecc/agents/doc-updater.md +9 -0
  134. package/bundled/upstream/ecc/agents/docs-lookup.md +9 -0
  135. package/bundled/upstream/ecc/agents/e2e-runner.md +9 -0
  136. package/bundled/upstream/ecc/agents/fastapi-reviewer.md +79 -0
  137. package/bundled/upstream/ecc/agents/flutter-reviewer.md +9 -0
  138. package/bundled/upstream/ecc/agents/fsharp-reviewer.md +109 -0
  139. package/bundled/upstream/ecc/agents/gan-evaluator.md +9 -0
  140. package/bundled/upstream/ecc/agents/gan-generator.md +9 -0
  141. package/bundled/upstream/ecc/agents/gan-planner.md +9 -0
  142. package/bundled/upstream/ecc/agents/go-build-resolver.md +9 -0
  143. package/bundled/upstream/ecc/agents/go-reviewer.md +9 -0
  144. package/bundled/upstream/ecc/agents/harmonyos-app-resolver.md +182 -0
  145. package/bundled/upstream/ecc/agents/harness-optimizer.md +9 -0
  146. package/bundled/upstream/ecc/agents/healthcare-reviewer.md +9 -0
  147. package/bundled/upstream/ecc/agents/homelab-architect.md +107 -0
  148. package/bundled/upstream/ecc/agents/java-build-resolver.md +133 -11
  149. package/bundled/upstream/ecc/agents/java-reviewer.md +130 -32
  150. package/bundled/upstream/ecc/agents/kotlin-build-resolver.md +9 -0
  151. package/bundled/upstream/ecc/agents/kotlin-reviewer.md +9 -0
  152. package/bundled/upstream/ecc/agents/loop-operator.md +9 -0
  153. package/bundled/upstream/ecc/agents/mle-reviewer.md +162 -0
  154. package/bundled/upstream/ecc/agents/network-architect.md +106 -0
  155. package/bundled/upstream/ecc/agents/network-config-reviewer.md +106 -0
  156. package/bundled/upstream/ecc/agents/network-troubleshooter.md +128 -0
  157. package/bundled/upstream/ecc/agents/opensource-forker.md +9 -0
  158. package/bundled/upstream/ecc/agents/opensource-packager.md +9 -0
  159. package/bundled/upstream/ecc/agents/opensource-sanitizer.md +9 -0
  160. package/bundled/upstream/ecc/agents/performance-optimizer.md +9 -0
  161. package/bundled/upstream/ecc/agents/planner.md +9 -0
  162. package/bundled/upstream/ecc/agents/pr-test-analyzer.md +9 -0
  163. package/bundled/upstream/ecc/agents/python-reviewer.md +9 -0
  164. package/bundled/upstream/ecc/agents/pytorch-build-resolver.md +12 -3
  165. package/bundled/upstream/ecc/agents/refactor-cleaner.md +9 -0
  166. package/bundled/upstream/ecc/agents/rust-build-resolver.md +9 -0
  167. package/bundled/upstream/ecc/agents/rust-reviewer.md +9 -0
  168. package/bundled/upstream/ecc/agents/security-reviewer.md +9 -0
  169. package/bundled/upstream/ecc/agents/seo-specialist.md +10 -1
  170. package/bundled/upstream/ecc/agents/silent-failure-hunter.md +9 -0
  171. package/bundled/upstream/ecc/agents/swift-build-resolver.md +170 -0
  172. package/bundled/upstream/ecc/agents/swift-reviewer.md +116 -0
  173. package/bundled/upstream/ecc/agents/tdd-guide.md +9 -0
  174. package/bundled/upstream/ecc/agents/type-design-analyzer.md +10 -1
  175. package/bundled/upstream/ecc/agents/typescript-reviewer.md +9 -0
  176. package/bundled/upstream/ecc/commands/auto-update.md +28 -0
  177. package/bundled/upstream/ecc/commands/build-fix.md +4 -0
  178. package/bundled/upstream/ecc/commands/checkpoint.md +4 -0
  179. package/bundled/upstream/ecc/commands/code-review.md +3 -3
  180. package/bundled/upstream/ecc/commands/cost-report.md +107 -0
  181. package/bundled/upstream/ecc/commands/cpp-build.md +1 -1
  182. package/bundled/upstream/ecc/commands/cpp-test.md +1 -1
  183. package/bundled/upstream/ecc/commands/ecc-guide.md +93 -0
  184. package/bundled/upstream/ecc/commands/fastapi-review.md +39 -0
  185. package/bundled/upstream/ecc/commands/flutter-build.md +1 -1
  186. package/bundled/upstream/ecc/commands/flutter-test.md +1 -1
  187. package/bundled/upstream/ecc/commands/gan-build.md +4 -0
  188. package/bundled/upstream/ecc/commands/gan-design.md +4 -0
  189. package/bundled/upstream/ecc/commands/go-build.md +1 -1
  190. package/bundled/upstream/ecc/commands/go-test.md +1 -1
  191. package/bundled/upstream/ecc/commands/harness-audit.md +4 -0
  192. package/bundled/upstream/ecc/commands/jira.md +2 -2
  193. package/bundled/upstream/ecc/commands/kotlin-build.md +1 -1
  194. package/bundled/upstream/ecc/commands/kotlin-test.md +1 -1
  195. package/bundled/upstream/ecc/commands/learn.md +4 -0
  196. package/bundled/upstream/ecc/commands/loop-start.md +4 -0
  197. package/bundled/upstream/ecc/commands/loop-status.md +54 -1
  198. package/bundled/upstream/ecc/commands/model-route.md +4 -0
  199. package/bundled/upstream/ecc/commands/multi-backend.md +4 -0
  200. package/bundled/upstream/ecc/commands/multi-execute.md +4 -0
  201. package/bundled/upstream/ecc/commands/multi-frontend.md +4 -0
  202. package/bundled/upstream/ecc/commands/multi-plan.md +4 -0
  203. package/bundled/upstream/ecc/commands/multi-workflow.md +4 -0
  204. package/bundled/upstream/ecc/commands/plan-prd.md +160 -0
  205. package/bundled/upstream/ecc/commands/plan.md +96 -13
  206. package/bundled/upstream/ecc/commands/pm2.md +4 -0
  207. package/bundled/upstream/ecc/commands/pr.md +184 -0
  208. package/bundled/upstream/ecc/commands/project-init.md +86 -0
  209. package/bundled/upstream/ecc/commands/python-review.md +1 -1
  210. package/bundled/upstream/ecc/commands/quality-gate.md +4 -0
  211. package/bundled/upstream/ecc/commands/refactor-clean.md +4 -0
  212. package/bundled/upstream/ecc/commands/rust-build.md +1 -1
  213. package/bundled/upstream/ecc/commands/rust-test.md +1 -1
  214. package/bundled/upstream/ecc/commands/security-scan.md +92 -0
  215. package/bundled/upstream/ecc/commands/sessions.md +6 -6
  216. package/bundled/upstream/ecc/commands/skill-health.md +3 -3
  217. package/bundled/upstream/ecc/commands/test-coverage.md +4 -0
  218. package/bundled/upstream/ecc/commands/update-codemaps.md +4 -0
  219. package/bundled/upstream/ecc/commands/update-docs.md +4 -0
  220. package/bundled/upstream/ecc/skills/accessibility/SKILL.md +1 -1
  221. package/bundled/upstream/ecc/skills/agent-architecture-audit/SKILL.md +256 -0
  222. package/bundled/upstream/ecc/skills/agent-payment-x402/SKILL.md +49 -3
  223. package/bundled/upstream/ecc/skills/agentic-os/SKILL.md +387 -0
  224. package/bundled/upstream/ecc/skills/angular-developer/SKILL.md +154 -0
  225. package/bundled/upstream/ecc/skills/angular-developer/references/angular-animations.md +160 -0
  226. package/bundled/upstream/ecc/skills/angular-developer/references/angular-aria.md +410 -0
  227. package/bundled/upstream/ecc/skills/angular-developer/references/cli.md +86 -0
  228. package/bundled/upstream/ecc/skills/angular-developer/references/component-harnesses.md +59 -0
  229. package/bundled/upstream/ecc/skills/angular-developer/references/component-styling.md +91 -0
  230. package/bundled/upstream/ecc/skills/angular-developer/references/components.md +117 -0
  231. package/bundled/upstream/ecc/skills/angular-developer/references/creating-services.md +97 -0
  232. package/bundled/upstream/ecc/skills/angular-developer/references/data-resolvers.md +69 -0
  233. package/bundled/upstream/ecc/skills/angular-developer/references/define-routes.md +67 -0
  234. package/bundled/upstream/ecc/skills/angular-developer/references/defining-providers.md +72 -0
  235. package/bundled/upstream/ecc/skills/angular-developer/references/di-fundamentals.md +120 -0
  236. package/bundled/upstream/ecc/skills/angular-developer/references/e2e-testing.md +56 -0
  237. package/bundled/upstream/ecc/skills/angular-developer/references/effects.md +83 -0
  238. package/bundled/upstream/ecc/skills/angular-developer/references/hierarchical-injectors.md +43 -0
  239. package/bundled/upstream/ecc/skills/angular-developer/references/host-elements.md +80 -0
  240. package/bundled/upstream/ecc/skills/angular-developer/references/injection-context.md +63 -0
  241. package/bundled/upstream/ecc/skills/angular-developer/references/inputs.md +101 -0
  242. package/bundled/upstream/ecc/skills/angular-developer/references/linked-signal.md +59 -0
  243. package/bundled/upstream/ecc/skills/angular-developer/references/loading-strategies.md +61 -0
  244. package/bundled/upstream/ecc/skills/angular-developer/references/mcp.md +108 -0
  245. package/bundled/upstream/ecc/skills/angular-developer/references/navigate-to-routes.md +69 -0
  246. package/bundled/upstream/ecc/skills/angular-developer/references/outputs.md +86 -0
  247. package/bundled/upstream/ecc/skills/angular-developer/references/reactive-forms.md +122 -0
  248. package/bundled/upstream/ecc/skills/angular-developer/references/rendering-strategies.md +44 -0
  249. package/bundled/upstream/ecc/skills/angular-developer/references/resource.md +77 -0
  250. package/bundled/upstream/ecc/skills/angular-developer/references/route-animations.md +56 -0
  251. package/bundled/upstream/ecc/skills/angular-developer/references/route-guards.md +52 -0
  252. package/bundled/upstream/ecc/skills/angular-developer/references/router-lifecycle.md +45 -0
  253. package/bundled/upstream/ecc/skills/angular-developer/references/router-testing.md +87 -0
  254. package/bundled/upstream/ecc/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
  255. package/bundled/upstream/ecc/skills/angular-developer/references/signal-forms.md +795 -0
  256. package/bundled/upstream/ecc/skills/angular-developer/references/signals-overview.md +94 -0
  257. package/bundled/upstream/ecc/skills/angular-developer/references/tailwind-css.md +69 -0
  258. package/bundled/upstream/ecc/skills/angular-developer/references/template-driven-forms.md +114 -0
  259. package/bundled/upstream/ecc/skills/angular-developer/references/testing-fundamentals.md +65 -0
  260. package/bundled/upstream/ecc/skills/autonomous-agent-harness/SKILL.md +6 -0
  261. package/bundled/upstream/ecc/skills/backend-patterns/SKILL.md +8 -45
  262. package/bundled/upstream/ecc/skills/cisco-ios-patterns/SKILL.md +163 -0
  263. package/bundled/upstream/ecc/skills/configure-ecc/SKILL.md +31 -14
  264. package/bundled/upstream/ecc/skills/continuous-learning/SKILL.md +10 -2
  265. package/bundled/upstream/ecc/skills/continuous-learning-v2/SKILL.md +19 -5
  266. package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +44 -4
  267. package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer.md +4 -4
  268. package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/start-observer.sh +5 -1
  269. package/bundled/upstream/ecc/skills/continuous-learning-v2/hooks/observe.sh +21 -5
  270. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/detect-project.sh +58 -13
  271. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +97 -4
  272. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
  273. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
  274. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +34 -0
  275. package/bundled/upstream/ecc/skills/cost-tracking/SKILL.md +147 -0
  276. package/bundled/upstream/ecc/skills/deep-research/SKILL.md +4 -0
  277. package/bundled/upstream/ecc/skills/defi-amm-security/SKILL.md +6 -0
  278. package/bundled/upstream/ecc/skills/django-celery/SKILL.md +457 -0
  279. package/bundled/upstream/ecc/skills/ecc-guide/SKILL.md +189 -0
  280. package/bundled/upstream/ecc/skills/error-handling/SKILL.md +376 -0
  281. package/bundled/upstream/ecc/skills/exa-search/SKILL.md +4 -0
  282. package/bundled/upstream/ecc/skills/fal-ai-media/SKILL.md +4 -0
  283. package/bundled/upstream/ecc/skills/fastapi-patterns/SKILL.md +327 -0
  284. package/bundled/upstream/ecc/skills/flox-environments/SKILL.md +496 -0
  285. package/bundled/upstream/ecc/skills/frontend-design-direction/SKILL.md +92 -0
  286. package/bundled/upstream/ecc/skills/frontend-slides/animation-patterns.md +122 -0
  287. package/bundled/upstream/ecc/skills/frontend-slides/html-template.md +419 -0
  288. package/bundled/upstream/ecc/skills/frontend-slides/scripts/export-pdf.sh +418 -0
  289. package/bundled/upstream/ecc/skills/frontend-slides/scripts/extract-pptx.py +96 -0
  290. package/bundled/upstream/ecc/skills/frontend-slides/viewport-base.css +153 -0
  291. package/bundled/upstream/ecc/skills/fsharp-testing/SKILL.md +280 -0
  292. package/bundled/upstream/ecc/skills/gateguard/SKILL.md +4 -0
  293. package/bundled/upstream/ecc/skills/hermes-imports/SKILL.md +88 -0
  294. package/bundled/upstream/ecc/skills/homelab-network-readiness/SKILL.md +169 -0
  295. package/bundled/upstream/ecc/skills/homelab-network-setup/SKILL.md +129 -0
  296. package/bundled/upstream/ecc/skills/homelab-pihole-dns/SKILL.md +274 -0
  297. package/bundled/upstream/ecc/skills/homelab-vlan-segmentation/SKILL.md +311 -0
  298. package/bundled/upstream/ecc/skills/homelab-wireguard-vpn/SKILL.md +305 -0
  299. package/bundled/upstream/ecc/skills/ios-icon-gen/SKILL.md +157 -0
  300. package/bundled/upstream/ecc/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
  301. package/bundled/upstream/ecc/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
  302. package/bundled/upstream/ecc/skills/java-coding-standards/SKILL.md +241 -5
  303. package/bundled/upstream/ecc/skills/make-interfaces-feel-better/SKILL.md +151 -0
  304. package/bundled/upstream/ecc/skills/mle-workflow/SKILL.md +346 -0
  305. package/bundled/upstream/ecc/skills/motion-advanced/SKILL.md +596 -0
  306. package/bundled/upstream/ecc/skills/motion-foundations/SKILL.md +299 -0
  307. package/bundled/upstream/ecc/skills/motion-patterns/SKILL.md +435 -0
  308. package/bundled/upstream/ecc/skills/motion-ui/SKILL.md +575 -0
  309. package/bundled/upstream/ecc/skills/mysql-patterns/SKILL.md +412 -0
  310. package/bundled/upstream/ecc/skills/netmiko-ssh-automation/SKILL.md +173 -0
  311. package/bundled/upstream/ecc/skills/network-bgp-diagnostics/SKILL.md +167 -0
  312. package/bundled/upstream/ecc/skills/network-config-validation/SKILL.md +210 -0
  313. package/bundled/upstream/ecc/skills/network-interface-health/SKILL.md +152 -0
  314. package/bundled/upstream/ecc/skills/openclaw-persona-forge/SKILL.md +1 -9
  315. package/bundled/upstream/ecc/skills/plan-orchestrate/SKILL.md +262 -0
  316. package/bundled/upstream/ecc/skills/prisma-patterns/SKILL.md +371 -0
  317. package/bundled/upstream/ecc/skills/production-audit/SKILL.md +206 -0
  318. package/bundled/upstream/ecc/skills/prompt-optimizer/SKILL.md +24 -400
  319. package/bundled/upstream/ecc/skills/quarkus-patterns/SKILL.md +722 -0
  320. package/bundled/upstream/ecc/skills/quarkus-security/SKILL.md +467 -0
  321. package/bundled/upstream/ecc/skills/quarkus-tdd/SKILL.md +811 -0
  322. package/bundled/upstream/ecc/skills/quarkus-verification/SKILL.md +479 -0
  323. package/bundled/upstream/ecc/skills/redis-patterns/SKILL.md +403 -0
  324. package/bundled/upstream/ecc/skills/scientific-db-pubmed-database/SKILL.md +175 -0
  325. package/bundled/upstream/ecc/skills/scientific-db-uspto-database/SKILL.md +177 -0
  326. package/bundled/upstream/ecc/skills/scientific-pkg-gget/SKILL.md +166 -0
  327. package/bundled/upstream/ecc/skills/scientific-thinking-literature-review/SKILL.md +192 -0
  328. package/bundled/upstream/ecc/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
  329. package/bundled/upstream/ecc/skills/search-first/SKILL.md +23 -2
  330. package/bundled/upstream/ecc/skills/security-review/SKILL.md +10 -2
  331. package/bundled/upstream/ecc/skills/skill-comply/scripts/runner.py +28 -3
  332. package/bundled/upstream/ecc/skills/skill-comply/tests/test_runner.py +172 -0
  333. package/bundled/upstream/ecc/skills/skill-scout/SKILL.md +140 -0
  334. package/bundled/upstream/ecc/skills/skill-stocktake/SKILL.md +1 -0
  335. package/bundled/upstream/ecc/skills/strategic-compact/SKILL.md +2 -2
  336. package/bundled/upstream/ecc/skills/tinystruct-patterns/SKILL.md +203 -0
  337. package/bundled/upstream/ecc/skills/tinystruct-patterns/references/architecture.md +90 -0
  338. package/bundled/upstream/ecc/skills/tinystruct-patterns/references/data-handling.md +60 -0
  339. package/bundled/upstream/ecc/skills/tinystruct-patterns/references/database.md +99 -0
  340. package/bundled/upstream/ecc/skills/tinystruct-patterns/references/routing.md +64 -0
  341. package/bundled/upstream/ecc/skills/tinystruct-patterns/references/system-usage.md +97 -0
  342. package/bundled/upstream/ecc/skills/tinystruct-patterns/references/testing.md +72 -0
  343. package/bundled/upstream/ecc/skills/ui-to-vue/SKILL.md +134 -0
  344. package/bundled/upstream/ecc/skills/vite-patterns/SKILL.md +449 -0
  345. package/bundled/upstream/ecc/skills/windows-desktop-e2e/SKILL.md +788 -0
  346. package/bundled/upstream/ecc/skills/x-api/SKILL.md +4 -0
  347. package/bundled/upstream/oh-my-claudecode/.omc-source/bundle.json +20 -0
  348. package/bundled/upstream/oh-my-claudecode/agents/analyst.md +2 -1
  349. package/bundled/upstream/oh-my-claudecode/agents/architect.md +2 -1
  350. package/bundled/upstream/oh-my-claudecode/agents/code-reviewer.md +26 -7
  351. package/bundled/upstream/oh-my-claudecode/agents/critic.md +2 -1
  352. package/bundled/upstream/oh-my-claudecode/agents/debugger.md +2 -1
  353. package/bundled/upstream/oh-my-claudecode/agents/designer.md +14 -1
  354. package/bundled/upstream/oh-my-claudecode/agents/document-specialist.md +1 -1
  355. package/bundled/upstream/oh-my-claudecode/agents/executor.md +2 -1
  356. package/bundled/upstream/oh-my-claudecode/agents/explore.md +2 -1
  357. package/bundled/upstream/oh-my-claudecode/agents/git-master.md +2 -1
  358. package/bundled/upstream/oh-my-claudecode/agents/planner.md +2 -1
  359. package/bundled/upstream/oh-my-claudecode/agents/qa-tester.md +2 -1
  360. package/bundled/upstream/oh-my-claudecode/agents/scientist.md +2 -1
  361. package/bundled/upstream/oh-my-claudecode/agents/security-reviewer.md +2 -1
  362. package/bundled/upstream/oh-my-claudecode/agents/test-engineer.md +2 -1
  363. package/bundled/upstream/oh-my-claudecode/agents/tracer.md +2 -1
  364. package/bundled/upstream/oh-my-claudecode/agents/verifier.md +2 -1
  365. package/bundled/upstream/oh-my-claudecode/agents/writer.md +2 -1
  366. package/bundled/upstream/oh-my-claudecode/skills/AGENTS.md +4 -3
  367. package/bundled/upstream/oh-my-claudecode/skills/ai-slop-cleaner/SKILL.md +12 -0
  368. package/bundled/upstream/oh-my-claudecode/skills/deep-dive/SKILL.md +69 -13
  369. package/bundled/upstream/oh-my-claudecode/skills/deep-interview/SKILL.md +176 -63
  370. package/bundled/upstream/oh-my-claudecode/skills/learner/SKILL.md +3 -1
  371. package/bundled/upstream/oh-my-claudecode/skills/omc-doctor/SKILL.md +22 -3
  372. package/bundled/upstream/oh-my-claudecode/skills/omc-reference/SKILL.md +1 -1
  373. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/01-install-claude-md.md +2 -2
  374. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/02-configure.md +45 -2
  375. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/03-integrations.md +46 -5
  376. package/bundled/upstream/oh-my-claudecode/skills/plan/SKILL.md +19 -17
  377. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/config.sh +1 -1
  378. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/parse.sh +1 -1
  379. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/azure-devops.sh +1 -1
  380. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/bitbucket.sh +1 -1
  381. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/gitea.sh +1 -1
  382. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/github.sh +1 -1
  383. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/gitlab.sh +1 -1
  384. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/interface.sh +1 -1
  385. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/jira.sh +1 -1
  386. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/session.sh +1 -1
  387. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/tmux.sh +1 -1
  388. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/worktree.sh +1 -1
  389. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/psm.sh +1 -1
  390. package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/tests/test-psm-prompt-injection.sh +1 -1
  391. package/bundled/upstream/oh-my-claudecode/skills/ralph/SKILL.md +8 -8
  392. package/bundled/upstream/oh-my-claudecode/skills/ralplan/SKILL.md +9 -5
  393. package/bundled/upstream/oh-my-claudecode/skills/skill/SKILL.md +6 -6
  394. package/bundled/upstream/oh-my-claudecode/skills/skillify/SKILL.md +19 -3
  395. package/bundled/upstream/oh-my-claudecode/skills/trace/SKILL.md +3 -1
  396. package/bundled/upstream/oh-my-claudecode/skills/ultrawork/SKILL.md +20 -7
  397. package/bundled/upstream/superpowers/.omc-source/bundle.json +21 -0
  398. package/bundled/upstream/superpowers/hooks/hooks-cursor.json +1 -1
  399. package/bundled/upstream/superpowers/skills/executing-plans/SKILL.md +1 -1
  400. package/bundled/upstream/superpowers/skills/finishing-a-development-branch/SKILL.md +93 -42
  401. package/bundled/upstream/superpowers/skills/requesting-code-review/SKILL.md +7 -9
  402. package/bundled/upstream/superpowers/skills/requesting-code-review/code-reviewer.md +107 -85
  403. package/bundled/upstream/superpowers/skills/subagent-driven-development/SKILL.md +3 -1
  404. package/bundled/upstream/superpowers/skills/subagent-driven-development/code-quality-reviewer-prompt.md +2 -3
  405. package/bundled/upstream/superpowers/skills/systematic-debugging/CREATION-LOG.md +1 -1
  406. package/bundled/upstream/superpowers/skills/systematic-debugging/root-cause-tracing.md +1 -1
  407. package/bundled/upstream/superpowers/skills/using-git-worktrees/SKILL.md +95 -98
  408. package/bundled/upstream/superpowers/skills/using-superpowers/references/codex-tools.md +7 -48
  409. package/bundled/upstream/superpowers/skills/using-superpowers/references/copilot-tools.md +1 -11
  410. package/bundled/upstream/superpowers/skills/using-superpowers/references/gemini-tools.md +21 -3
  411. package/bundled/upstream/superpowers/skills/writing-plans/SKILL.md +1 -1
  412. package/package.json +1 -1
  413. package/bundled/upstream/anthropic-skills/skills/claude-api/python/agent-sdk/README.md +0 -355
  414. package/bundled/upstream/anthropic-skills/skills/claude-api/python/agent-sdk/patterns.md +0 -359
  415. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/agent-sdk/README.md +0 -297
  416. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/agent-sdk/patterns.md +0 -209
  417. package/bundled/upstream/ecc/commands/agent-sort.md +0 -23
  418. package/bundled/upstream/ecc/commands/claw.md +0 -23
  419. package/bundled/upstream/ecc/commands/context-budget.md +0 -23
  420. package/bundled/upstream/ecc/commands/devfleet.md +0 -23
  421. package/bundled/upstream/ecc/commands/docs.md +0 -23
  422. package/bundled/upstream/ecc/commands/e2e.md +0 -268
  423. package/bundled/upstream/ecc/commands/eval.md +0 -23
  424. package/bundled/upstream/ecc/commands/orchestrate.md +0 -135
  425. package/bundled/upstream/ecc/commands/prompt-optimize.md +0 -23
  426. package/bundled/upstream/ecc/commands/rules-distill.md +0 -20
  427. package/bundled/upstream/ecc/commands/tdd.md +0 -231
  428. package/bundled/upstream/ecc/commands/verify.md +0 -23
  429. package/bundled/upstream/ecc/skills/claude-api/SKILL.md +0 -337
  430. package/bundled/upstream/ecc/skills/frontend-design/SKILL.md +0 -145
  431. package/bundled/upstream/superpowers/agents/code-reviewer.md +0 -48
  432. package/bundled/upstream/superpowers/commands/brainstorm.md +0 -5
  433. package/bundled/upstream/superpowers/commands/execute-plan.md +0 -5
  434. package/bundled/upstream/superpowers/commands/write-plan.md +0 -5
@@ -0,0 +1,379 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * mark-overlay.mjs — Stage 5 Set-of-Mark: numbered overlays for visual diff feedback
4
+ *
5
+ * Usage:
6
+ * node mark-overlay.mjs --ref ref.png --gen gen.png
7
+ * --bbox-map manifest.json
8
+ * --out-dir <dir>
9
+ * [--diff-mask mask.png]
10
+ *
11
+ * Draws IDENTICAL numbered Set-of-Mark overlays on both the reference and
12
+ * generated images, using a shared bbox map. The same index is assigned to
13
+ * the same component on both sides — this identity is the point of the tool.
14
+ *
15
+ * Mark numbering:
16
+ * Components are sorted deterministically by (y ascending, x ascending) on
17
+ * the reference bbox coordinates. Indices start at 1.
18
+ *
19
+ * Text rendering note:
20
+ * No font dependency is used. Each mark is a small filled badge rectangle
21
+ * (colored tick) near the bbox top-left. The numeric index appears in
22
+ * marks.json only (not rasterized as text).
23
+ *
24
+ * bbox map format:
25
+ * reference/manifest.json produced by capture-reference.mjs
26
+ * schema h5-to-swiftui/reference@1:
27
+ * { screens: [ { components: [ { name, bbox_css_px: {x,y,width,height} } ] } ] }
28
+ *
29
+ * Outputs:
30
+ * <out-dir>/ref.marked.png Reference with numbered overlays
31
+ * <out-dir>/gen.marked.png Generated with numbered overlays (same indices)
32
+ * <out-dir>/ref.diffmask.png (if --diff-mask) red overlay composited on ref
33
+ * <out-dir>/marks.json Legend: [ { index, name, bbox } ]
34
+ *
35
+ * Exit codes:
36
+ * 0 — outputs written
37
+ * 1 — fatal error (bad args, file not found)
38
+ * 2 — pngjs not installed (actionable hint printed)
39
+ *
40
+ * Examples:
41
+ * node mark-overlay.mjs --ref ref.png --gen gen.png \
42
+ * --bbox-map reference/manifest.json --out-dir artifacts/marks
43
+ * node mark-overlay.mjs --ref ref.png --gen gen.png \
44
+ * --bbox-map reference/manifest.json --out-dir artifacts/marks \
45
+ * --diff-mask artifacts/diff/mask.png
46
+ */
47
+
48
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
49
+ import { resolve, join } from 'node:path';
50
+
51
+ import {
52
+ requirePng,
53
+ loadPng,
54
+ savePng,
55
+ drawRect,
56
+ drawFilledRect,
57
+ } from './_imglib.mjs';
58
+
59
+ // ── CLI ───────────────────────────────────────────────────────────────────────
60
+
61
+ const args = process.argv.slice(2);
62
+
63
+ if (args.includes('--help') || args.includes('-h')) {
64
+ console.log(`mark-overlay.mjs — Stage 5 Set-of-Mark overlay generator
65
+
66
+ Usage:
67
+ node mark-overlay.mjs --ref ref.png --gen gen.png
68
+ --bbox-map manifest.json
69
+ --out-dir <dir>
70
+ [--diff-mask mask.png]
71
+
72
+ Arguments:
73
+ --ref <path> H5/Playwright reference PNG (required)
74
+ --gen <path> SwiftUI generated PNG (required)
75
+ --bbox-map <path> reference/manifest.json (schema h5-to-swiftui/reference@1) (required)
76
+ --out-dir <dir> Output directory (required)
77
+ --diff-mask <path> Optional PNG diff mask to composite as red overlay on ref
78
+
79
+ Mark numbering:
80
+ Components are sorted by (y asc, x asc) on reference bbox coords.
81
+ Indices start at 1. SAME index = SAME component on both sides.
82
+
83
+ Text rendering:
84
+ No font dependency. Each mark is a colored filled badge rectangle (tick)
85
+ near the bbox top-left. Numeric index is written to marks.json only.
86
+
87
+ Overlay style:
88
+ Bbox outline: magenta (255,0,255) 1px border
89
+ Mark badge: white-on-magenta filled rect in top-left corner
90
+ Badge size: 12×12 px at the bbox origin
91
+
92
+ Outputs:
93
+ <out-dir>/ref.marked.png Reference with numbered overlays
94
+ <out-dir>/gen.marked.png Generated with identical numbered overlays
95
+ <out-dir>/ref.diffmask.png (if --diff-mask) red overlay composited on ref
96
+ <out-dir>/marks.json Legend: [{index, name, bbox}]
97
+
98
+ Exit codes:
99
+ 0 Success
100
+ 1 Fatal error
101
+ 2 pngjs not installed
102
+
103
+ Examples:
104
+ node mark-overlay.mjs --ref ref.png --gen gen.png \\
105
+ --bbox-map reference/manifest.json --out-dir artifacts/marks
106
+ node mark-overlay.mjs --ref ref.png --gen gen.png \\
107
+ --bbox-map reference/manifest.json --out-dir artifacts/marks \\
108
+ --diff-mask artifacts/diff/ProductCard.iter2.mask.png
109
+ `);
110
+ process.exit(0);
111
+ }
112
+
113
+ function getFlag(flag, fallback = null) {
114
+ const idx = args.indexOf(flag);
115
+ if (idx === -1) return fallback;
116
+ const val = args[idx + 1];
117
+ if (val === undefined || val.startsWith('--')) {
118
+ console.error(`Error: ${flag} requires an argument.`);
119
+ process.exit(1);
120
+ }
121
+ return val;
122
+ }
123
+
124
+ const refFlagRaw = getFlag('--ref');
125
+ const genFlagRaw = getFlag('--gen');
126
+ const bboxMapFlagRaw = getFlag('--bbox-map');
127
+ const outDirFlagRaw = getFlag('--out-dir');
128
+ const diffMaskRaw = getFlag('--diff-mask');
129
+
130
+ // Validate required flags
131
+ const missing = [];
132
+ if (!refFlagRaw) missing.push('--ref');
133
+ if (!genFlagRaw) missing.push('--gen');
134
+ if (!bboxMapFlagRaw) missing.push('--bbox-map');
135
+ if (!outDirFlagRaw) missing.push('--out-dir');
136
+
137
+ if (missing.length > 0) {
138
+ console.error(`Error: the following required flags are missing: ${missing.join(', ')}\nRun with --help for usage.`);
139
+ process.exit(1);
140
+ }
141
+
142
+ const refPath = resolve(refFlagRaw);
143
+ const genPath = resolve(genFlagRaw);
144
+ const bboxMapPath = resolve(bboxMapFlagRaw);
145
+ const outDir = resolve(outDirFlagRaw);
146
+ const diffMaskPath = diffMaskRaw ? resolve(diffMaskRaw) : null;
147
+
148
+ // Validate file existence
149
+ for (const [label, p] of [['--ref', refPath], ['--gen', genPath], ['--bbox-map', bboxMapPath]]) {
150
+ if (!existsSync(p)) {
151
+ console.error(`Error: ${label} file not found: ${p}`);
152
+ process.exit(1);
153
+ }
154
+ }
155
+
156
+ if (diffMaskPath && !existsSync(diffMaskPath)) {
157
+ console.error(`Error: --diff-mask file not found: ${diffMaskPath}`);
158
+ process.exit(1);
159
+ }
160
+
161
+ // ── Load PNG dependency early for clear error ────────────────────────────────
162
+
163
+ await requirePng();
164
+
165
+ // ── Load images ───────────────────────────────────────────────────────────────
166
+
167
+ let imgRef, imgGen, imgDiffMask;
168
+
169
+ try {
170
+ const loads = [loadPng(refPath), loadPng(genPath)];
171
+ if (diffMaskPath) loads.push(loadPng(diffMaskPath));
172
+ const results = await Promise.all(loads);
173
+ imgRef = results[0];
174
+ imgGen = results[1];
175
+ if (diffMaskPath) imgDiffMask = results[2];
176
+ } catch (e) {
177
+ console.error(`Error: failed to load image: ${e.message}`);
178
+ process.exit(1);
179
+ }
180
+
181
+ // ── Load bbox map ─────────────────────────────────────────────────────────────
182
+
183
+ let manifest;
184
+ try {
185
+ manifest = JSON.parse(readFileSync(bboxMapPath, 'utf8'));
186
+ } catch (e) {
187
+ console.error(`Error: cannot parse --bbox-map: ${e.message}`);
188
+ process.exit(1);
189
+ }
190
+
191
+ // ── Extract and sort components ───────────────────────────────────────────────
192
+
193
+ // Collect all components from all screens
194
+ const rawComponents = [];
195
+ const screens = manifest.screens ?? [];
196
+ for (const screen of screens) {
197
+ for (const comp of (screen.components ?? [])) {
198
+ const bbox = comp.bbox_css_px;
199
+ if (!bbox) continue;
200
+ rawComponents.push({
201
+ name: comp.name,
202
+ x: Math.round(bbox.x ?? 0),
203
+ y: Math.round(bbox.y ?? 0),
204
+ w: Math.round(bbox.width ?? bbox.w ?? 0),
205
+ h: Math.round(bbox.height ?? bbox.h ?? 0),
206
+ });
207
+ }
208
+ }
209
+
210
+ if (rawComponents.length === 0) {
211
+ console.error(
212
+ 'Error: no components with bbox_css_px found in --bbox-map.\n' +
213
+ 'Ensure the manifest was produced by capture-reference.mjs.'
214
+ );
215
+ process.exit(1);
216
+ }
217
+
218
+ // Deterministic stable sort: primary y ascending, secondary x ascending,
219
+ // tertiary name alphabetical (ensures identical ordering on both sides).
220
+ rawComponents.sort((a, b) => {
221
+ if (a.y !== b.y) return a.y - b.y;
222
+ if (a.x !== b.x) return a.x - b.x;
223
+ return a.name.localeCompare(b.name);
224
+ });
225
+
226
+ // Assign 1-based indices
227
+ const components = rawComponents.map((c, i) => ({ ...c, index: i + 1 }));
228
+
229
+ console.error(`Loaded ${components.length} component(s) from bbox map.`);
230
+
231
+ // ── Drawing helpers ───────────────────────────────────────────────────────────
232
+
233
+ // Badge: small filled rectangle near bbox top-left that encodes the index.
234
+ // Since we have no font rendering, we use a colored square with a tick count:
235
+ // index 1 = 1 white cell, index 2 = 2 white cells, etc. up to BADGE_CELLS.
236
+ // For indices > BADGE_CELLS the badge is fully filled (saturation marker).
237
+ // The marks.json legend maps index → component name for all interpretation.
238
+ //
239
+ // Style:
240
+ // Bbox border: magenta (255, 0, 255), 1px
241
+ // Badge fill: magenta background, white small tick square(s)
242
+ // Badge size: BADGE_W × BADGE_H px at (bbox.x, bbox.y)
243
+
244
+ const BADGE_W = 14;
245
+ const BADGE_H = 14;
246
+ const TICK_SIZE = 3; // px per white tick cell
247
+ const TICK_PAD = 1; // px padding between ticks
248
+ const BORDER_R = 255, BORDER_G = 0, BORDER_B = 255; // magenta
249
+ const BADGE_BG_R = 180, BADGE_BG_G = 0, BADGE_BG_B = 180; // dark magenta
250
+ const TICK_R = 255, TICK_G = 255, TICK_B = 255; // white
251
+
252
+ function drawMark(img, comp) {
253
+ const { x, y, w, h, index } = comp;
254
+
255
+ // 1. Draw bounding box outline (magenta, 1px)
256
+ if (w > 0 && h > 0) {
257
+ drawRect(img, x, y, w, h, BORDER_R, BORDER_G, BORDER_B, 220);
258
+ }
259
+
260
+ // 2. Draw filled badge rectangle at top-left corner of bbox
261
+ const bx = Math.max(0, x);
262
+ const by = Math.max(0, y);
263
+ drawFilledRect(img, bx, by, BADGE_W, BADGE_H, BADGE_BG_R, BADGE_BG_G, BADGE_BG_B, 240);
264
+
265
+ // 3. Draw white tick cells to encode the index (up to 4 cells in a 2×2 grid)
266
+ // Layout inside badge: max 4 ticks in a 2×2 grid
267
+ const MAX_TICKS = 4;
268
+ const tickCount = Math.min(index, MAX_TICKS);
269
+ // cells are placed in row-major order: (0,0), (1,0), (0,1), (1,1)
270
+ const positions = [
271
+ [bx + TICK_PAD, by + TICK_PAD],
272
+ [bx + TICK_PAD + TICK_SIZE + TICK_PAD, by + TICK_PAD],
273
+ [bx + TICK_PAD, by + TICK_PAD + TICK_SIZE + TICK_PAD],
274
+ [bx + TICK_PAD + TICK_SIZE + TICK_PAD, by + TICK_PAD + TICK_SIZE + TICK_PAD],
275
+ ];
276
+ for (let t = 0; t < tickCount; t++) {
277
+ const [tx, ty] = positions[t];
278
+ drawFilledRect(img, tx, ty, TICK_SIZE, TICK_SIZE, TICK_R, TICK_G, TICK_B, 255);
279
+ }
280
+
281
+ // If index > MAX_TICKS, fill the entire badge white to indicate "5+" saturation
282
+ if (index > MAX_TICKS) {
283
+ drawFilledRect(img, bx + 1, by + 1, BADGE_W - 2, BADGE_H - 2, TICK_R, TICK_G, TICK_B, 200);
284
+ }
285
+ }
286
+
287
+ // ── Clone images and draw marks ───────────────────────────────────────────────
288
+
289
+ // Deep-copy image buffers so originals are unmodified
290
+ function cloneImg(img) {
291
+ return { width: img.width, height: img.height, data: new Uint8Array(img.data) };
292
+ }
293
+
294
+ const imgRefMarked = cloneImg(imgRef);
295
+ const imgGenMarked = cloneImg(imgGen);
296
+
297
+ for (const comp of components) {
298
+ drawMark(imgRefMarked, comp);
299
+ drawMark(imgGenMarked, comp);
300
+ }
301
+
302
+ // ── Build diff-mask composite (optional) ─────────────────────────────────────
303
+
304
+ let imgRefDiffMask = null;
305
+
306
+ if (imgDiffMask) {
307
+ // Alpha-composite the diff mask (red channel pixels) onto a copy of ref.
308
+ // diff mask pixels: red (255,0,0,255) = diff; yellow (255,255,0,200) = AA; rest = transparent
309
+ imgRefDiffMask = cloneImg(imgRef);
310
+ const mW = Math.min(imgDiffMask.width, imgRef.width);
311
+ const mH = Math.min(imgDiffMask.height, imgRef.height);
312
+
313
+ for (let py = 0; py < mH; py++) {
314
+ for (let px = 0; px < mW; px++) {
315
+ const mi = (py * imgDiffMask.width + px) * 4;
316
+ const ri = (py * imgRefDiffMask.width + px) * 4;
317
+ const mAlpha = imgDiffMask.data[mi + 3];
318
+ if (mAlpha === 0) continue;
319
+
320
+ const a01 = mAlpha / 255;
321
+ const ia = 1 - a01;
322
+ imgRefDiffMask.data[ri] = Math.round(imgDiffMask.data[mi] * a01 + imgRefDiffMask.data[ri] * ia);
323
+ imgRefDiffMask.data[ri + 1] = Math.round(imgDiffMask.data[mi + 1] * a01 + imgRefDiffMask.data[ri + 1] * ia);
324
+ imgRefDiffMask.data[ri + 2] = Math.round(imgDiffMask.data[mi + 2] * a01 + imgRefDiffMask.data[ri + 2] * ia);
325
+ imgRefDiffMask.data[ri + 3] = Math.min(255, imgRefDiffMask.data[ri + 3] + mAlpha);
326
+ }
327
+ }
328
+ }
329
+
330
+ // ── Write outputs ─────────────────────────────────────────────────────────────
331
+
332
+ mkdirSync(outDir, { recursive: true });
333
+
334
+ const refMarkedPath = join(outDir, 'ref.marked.png');
335
+ const genMarkedPath = join(outDir, 'gen.marked.png');
336
+ const diffMaskOutPath = join(outDir, 'ref.diffmask.png');
337
+ const marksJsonPath = join(outDir, 'marks.json');
338
+
339
+ try {
340
+ await savePng(refMarkedPath, imgRefMarked);
341
+ console.error(`Written: ${refMarkedPath}`);
342
+ } catch (e) {
343
+ console.error(`Error: could not write ref.marked.png: ${e.message}`);
344
+ process.exit(1);
345
+ }
346
+
347
+ try {
348
+ await savePng(genMarkedPath, imgGenMarked);
349
+ console.error(`Written: ${genMarkedPath}`);
350
+ } catch (e) {
351
+ console.error(`Error: could not write gen.marked.png: ${e.message}`);
352
+ process.exit(1);
353
+ }
354
+
355
+ if (imgRefDiffMask) {
356
+ try {
357
+ await savePng(diffMaskOutPath, imgRefDiffMask);
358
+ console.error(`Written: ${diffMaskOutPath}`);
359
+ } catch (e) {
360
+ console.error(`Warning: could not write ref.diffmask.png: ${e.message}`);
361
+ }
362
+ }
363
+
364
+ // marks.json legend: index → component name + bbox
365
+ const marksLegend = components.map(c => ({
366
+ index: c.index,
367
+ name: c.name,
368
+ bbox: { x: c.x, y: c.y, w: c.w, h: c.h },
369
+ }));
370
+
371
+ writeFileSync(
372
+ marksJsonPath,
373
+ JSON.stringify({ schema: 'h5-to-swiftui/marks@1', marks: marksLegend }, null, 2) + '\n',
374
+ 'utf8'
375
+ );
376
+ console.error(`Written: ${marksJsonPath}`);
377
+
378
+ console.error(`\nOverlay complete. ${components.length} mark(s) drawn on both ref and gen.`);
379
+ process.exit(0);