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,159 @@
1
+ import React, { useRef, useEffect } from 'react';
2
+ import styles from './TrendChart.module.css';
3
+
4
+ /**
5
+ * TrendChart — WebGL sparkline chart rendered on a <canvas> element.
6
+ *
7
+ * {/* TIER3: WebGL canvas — uses WebGLRenderingContext to draw a sparkline.
8
+ * The rendering pipeline is entirely GPU-driven via custom GLSL shaders.
9
+ * There is NO SwiftUI equivalent for arbitrary WebGL content.
10
+ * SwiftUI port options:
11
+ * (a) Replace with a native Swift Charts (iOS 16+) line mark — preferred
12
+ * if data semantics are equivalent.
13
+ * (b) Wrap in WKWebView if exact visual must be preserved (accepts
14
+ * partial fidelity loss: no ProMotion, extra process, no Dynamic Type).
15
+ * Risk triage MUST flag this surface and NOT silently generate wrong code.
16
+ * */
17
+ export default function TrendChart({ data, label, color = '#0071e3' }) {
18
+ const canvasRef = useRef(null);
19
+
20
+ useEffect(() => {
21
+ const canvas = canvasRef.current;
22
+ if (!canvas) return;
23
+
24
+ // Attempt WebGL; fall back to 2D canvas if unavailable (e.g. jsdom in tests)
25
+ const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
26
+
27
+ if (!gl) {
28
+ // Graceful 2D fallback (no WebGL in test env)
29
+ const ctx = canvas.getContext('2d');
30
+ if (!ctx || !data?.length) return;
31
+ drawFallback2D(ctx, canvas, data, color);
32
+ return;
33
+ }
34
+
35
+ // WebGL sparkline — minimal shader pair
36
+ const vsSource = `
37
+ attribute vec2 a_position;
38
+ uniform vec2 u_resolution;
39
+ void main() {
40
+ vec2 clip = (a_position / u_resolution) * 2.0 - 1.0;
41
+ gl_Position = vec4(clip.x, -clip.y, 0.0, 1.0);
42
+ }
43
+ `;
44
+
45
+ const fsSource = `
46
+ precision mediump float;
47
+ uniform vec4 u_color;
48
+ void main() {
49
+ gl_FragColor = u_color;
50
+ }
51
+ `;
52
+
53
+ const vs = compileShader(gl, gl.VERTEX_SHADER, vsSource);
54
+ const fs = compileShader(gl, gl.FRAGMENT_SHADER, fsSource);
55
+ if (!vs || !fs) return;
56
+
57
+ const program = gl.createProgram();
58
+ gl.attachShader(program, vs);
59
+ gl.attachShader(program, fs);
60
+ gl.linkProgram(program);
61
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) return;
62
+
63
+ gl.useProgram(program);
64
+
65
+ // Map data to canvas coordinates
66
+ const w = canvas.width;
67
+ const h = canvas.height;
68
+ const min = Math.min(...data);
69
+ const max = Math.max(...data);
70
+ const range = max - min || 1;
71
+ const pad = 8;
72
+
73
+ const vertices = new Float32Array(data.length * 2);
74
+ data.forEach((v, i) => {
75
+ vertices[i * 2] = pad + (i / (data.length - 1)) * (w - pad * 2);
76
+ vertices[i * 2 + 1] = h - pad - ((v - min) / range) * (h - pad * 2);
77
+ });
78
+
79
+ const buf = gl.createBuffer();
80
+ gl.bindBuffer(gl.ARRAY_BUFFER, buf);
81
+ gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
82
+
83
+ const posLoc = gl.getAttribLocation(program, 'a_position');
84
+ gl.enableVertexAttribArray(posLoc);
85
+ gl.vertexAttribPointer(posLoc, 2, gl.FLOAT, false, 0, 0);
86
+
87
+ const resLoc = gl.getUniformLocation(program, 'u_resolution');
88
+ gl.uniform2f(resLoc, w, h);
89
+
90
+ const colLoc = gl.getUniformLocation(program, 'u_color');
91
+ const [r, g, b] = hexToRgb(color);
92
+ gl.uniform4f(colLoc, r, g, b, 1.0);
93
+
94
+ gl.viewport(0, 0, w, h);
95
+ gl.clearColor(0, 0, 0, 0);
96
+ gl.clear(gl.COLOR_BUFFER_BIT);
97
+ gl.lineWidth(2);
98
+ gl.drawArrays(gl.LINE_STRIP, 0, data.length);
99
+
100
+ return () => {
101
+ gl.deleteProgram(program);
102
+ gl.deleteBuffer(buf);
103
+ };
104
+ }, [data, color]);
105
+
106
+ return (
107
+ <div className={styles.chartWrapper}>
108
+ {label && <span className={styles.chartLabel}>{label}</span>}
109
+ <canvas
110
+ ref={canvasRef}
111
+ width={280}
112
+ height={80}
113
+ className={styles.canvas}
114
+ aria-label={`Trend chart: ${label}`}
115
+ role="img"
116
+ />
117
+ </div>
118
+ );
119
+ }
120
+
121
+ // ── helpers ──────────────────────────────────────────────────────────────────
122
+
123
+ function compileShader(gl, type, source) {
124
+ const shader = gl.createShader(type);
125
+ gl.shaderSource(shader, source);
126
+ gl.compileShader(shader);
127
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
128
+ gl.deleteShader(shader);
129
+ return null;
130
+ }
131
+ return shader;
132
+ }
133
+
134
+ function hexToRgb(hex) {
135
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
136
+ return result
137
+ ? [parseInt(result[1], 16) / 255, parseInt(result[2], 16) / 255, parseInt(result[3], 16) / 255]
138
+ : [0, 0.44, 0.89];
139
+ }
140
+
141
+ function drawFallback2D(ctx, canvas, data, color) {
142
+ const w = canvas.width;
143
+ const h = canvas.height;
144
+ const min = Math.min(...data);
145
+ const max = Math.max(...data);
146
+ const range = max - min || 1;
147
+ const pad = 8;
148
+
149
+ ctx.clearRect(0, 0, w, h);
150
+ ctx.beginPath();
151
+ ctx.strokeStyle = color;
152
+ ctx.lineWidth = 2;
153
+ data.forEach((v, i) => {
154
+ const x = pad + (i / (data.length - 1)) * (w - pad * 2);
155
+ const y = h - pad - ((v - min) / range) * (h - pad * 2);
156
+ i === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);
157
+ });
158
+ ctx.stroke();
159
+ }
@@ -0,0 +1,21 @@
1
+ .chartWrapper {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: var(--space-2);
5
+ }
6
+
7
+ .chartLabel {
8
+ font-size: var(--font-size-xs);
9
+ font-weight: var(--font-weight-semibold);
10
+ color: var(--color-text-secondary);
11
+ text-transform: uppercase;
12
+ letter-spacing: 0.5px;
13
+ }
14
+
15
+ .canvas {
16
+ display: block;
17
+ border-radius: var(--radius-sm);
18
+ background-color: var(--color-bg-secondary);
19
+ width: 100%;
20
+ height: 80px;
21
+ }
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import ReactDOM from 'react-dom/client';
3
+ import { BrowserRouter } from 'react-router-dom';
4
+ import App from './App.jsx';
5
+
6
+ ReactDOM.createRoot(document.getElementById('root')).render(
7
+ <React.StrictMode>
8
+ <BrowserRouter>
9
+ <App />
10
+ </BrowserRouter>
11
+ </React.StrictMode>
12
+ );
@@ -0,0 +1,182 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import { useParams, useNavigate } from 'react-router-dom';
3
+ import styles from './ArticleScreen.module.css';
4
+
5
+ export default function ArticleScreen() {
6
+ const { id } = useParams();
7
+ const navigate = useNavigate();
8
+ const [article, setArticle] = useState(null);
9
+ const [loading, setLoading] = useState(true);
10
+ const [error, setError] = useState(null);
11
+
12
+ useEffect(() => {
13
+ let cancelled = false;
14
+
15
+ async function loadArticle() {
16
+ setLoading(true);
17
+ setError(null);
18
+ try {
19
+ const res = await fetch(`/api/articles/${id}`);
20
+ if (!res.ok) throw new Error(`HTTP ${res.status}: ${res.statusText}`);
21
+ const data = await res.json();
22
+ if (!cancelled) setArticle(data);
23
+ } catch (err) {
24
+ if (!cancelled) setError(err.message);
25
+ } finally {
26
+ if (!cancelled) setLoading(false);
27
+ }
28
+ }
29
+
30
+ loadArticle();
31
+ return () => { cancelled = true; };
32
+ }, [id]);
33
+
34
+ if (loading) {
35
+ return (
36
+ <div className={styles.stateContainer}>
37
+ <div className={styles.spinner} aria-label="Loading article" />
38
+ <p className={styles.stateText}>Loading article…</p>
39
+ </div>
40
+ );
41
+ }
42
+
43
+ if (error) {
44
+ return (
45
+ <div className={styles.stateContainer} role="alert">
46
+ <p className={styles.errorHeading}>Could not load article</p>
47
+ <p className={styles.stateText}>{error}</p>
48
+ <button className={styles.backButton} onClick={() => navigate('/')}>
49
+ ← Back to feed
50
+ </button>
51
+ </div>
52
+ );
53
+ }
54
+
55
+ if (!article) return null;
56
+
57
+ const {
58
+ title,
59
+ subtitle,
60
+ author,
61
+ publishedAt,
62
+ readingTime,
63
+ tag,
64
+ body,
65
+ } = article;
66
+
67
+ const formattedDate = new Date(publishedAt).toLocaleDateString('en-US', {
68
+ month: 'long',
69
+ day: 'numeric',
70
+ year: 'numeric',
71
+ });
72
+
73
+ return (
74
+ <article className={styles.article}>
75
+ {/* ── Back navigation ───────────────────────────────────── */}
76
+ <div className={styles.topBar}>
77
+ <button className={styles.backButton} onClick={() => navigate('/')}>
78
+ ← Chronicle
79
+ </button>
80
+ <span className={styles.tagChip}>{tag}</span>
81
+ </div>
82
+
83
+ {/* ── Article header ────────────────────────────────────── */}
84
+ <header className={styles.header}>
85
+ <h1 className={styles.title}>{title}</h1>
86
+ {subtitle && (
87
+ <p className={styles.subtitle}>{subtitle}</p>
88
+ )}
89
+
90
+ <div className={styles.byline}>
91
+ <div className={styles.avatarLg} aria-hidden="true">
92
+ {author.name.slice(0, 1)}
93
+ </div>
94
+ <div className={styles.bylineText}>
95
+ <span className={styles.authorName}>{author.name}</span>
96
+ <span className={styles.authorMeta}>
97
+ {author.role} · <time dateTime={publishedAt}>{formattedDate}</time> · {readingTime} min read
98
+ </span>
99
+ </div>
100
+ </div>
101
+ </header>
102
+
103
+ {/* ── Body — text-heavy, multi-typographic-level region ─── */}
104
+ {/*
105
+ * TEXT REGION NOTE (skill stage 2):
106
+ * This body region is intentionally text-heavy with multiple typographic
107
+ * levels (h2 headlines, pull-quote, body paragraphs, code block, caption).
108
+ * The skill must apply layout-box IoU + token-color ΔE for region
109
+ * comparison, NOT glyph SSIM, because CoreText metrics diverge from
110
+ * WebKit at identical px declarations (see stack-detection.md reason 4).
111
+ */}
112
+ <div className={styles.body}>
113
+ {body.map((block, idx) => (
114
+ <ArticleBlock key={idx} block={block} />
115
+ ))}
116
+ </div>
117
+
118
+ {/* ── Article footer ────────────────────────────────────── */}
119
+ <footer className={styles.footer}>
120
+ <div className={styles.footerDivider} />
121
+ <div className={styles.authorCard}>
122
+ <div className={styles.avatarLg} aria-hidden="true">
123
+ {author.name.slice(0, 1)}
124
+ </div>
125
+ <div className={styles.authorCardText}>
126
+ <span className={styles.authorCardName}>{author.name}</span>
127
+ <span className={styles.authorCardRole}>{author.role}</span>
128
+ {author.bio && (
129
+ <p className={styles.authorBio}>{author.bio}</p>
130
+ )}
131
+ </div>
132
+ </div>
133
+ </footer>
134
+ </article>
135
+ );
136
+ }
137
+
138
+ // ── Block renderer ────────────────────────────────────────────────────────────
139
+
140
+ function ArticleBlock({ block }) {
141
+ switch (block.type) {
142
+ case 'paragraph':
143
+ return <p className={styles.paragraph}>{block.text}</p>;
144
+
145
+ case 'heading':
146
+ return <h2 className={styles.heading2}>{block.text}</h2>;
147
+
148
+ case 'subheading':
149
+ return <h3 className={styles.heading3}>{block.text}</h3>;
150
+
151
+ case 'pullquote':
152
+ return (
153
+ <blockquote className={styles.pullquote}>
154
+ <p className={styles.pullquoteText}>{block.text}</p>
155
+ {block.attribution && (
156
+ <cite className={styles.pullquoteAttribution}>{block.attribution}</cite>
157
+ )}
158
+ </blockquote>
159
+ );
160
+
161
+ case 'code':
162
+ return (
163
+ <figure className={styles.codeFigure}>
164
+ {block.caption && (
165
+ <figcaption className={styles.codeCaption}>{block.caption}</figcaption>
166
+ )}
167
+ <pre className={styles.pre}>
168
+ <code className={styles.code}>{block.text}</code>
169
+ </pre>
170
+ </figure>
171
+ );
172
+
173
+ case 'caption':
174
+ return <p className={styles.caption}>{block.text}</p>;
175
+
176
+ case 'divider':
177
+ return <hr className={styles.divider} />;
178
+
179
+ default:
180
+ return null;
181
+ }
182
+ }
@@ -0,0 +1,294 @@
1
+ .article {
2
+ max-width: 720px;
3
+ margin: 0 auto;
4
+ padding: var(--space-8) var(--space-6) var(--space-12);
5
+ }
6
+
7
+ /* ── Top bar ──────────────────────────────────────────────────── */
8
+ .topBar {
9
+ display: flex;
10
+ flex-direction: row;
11
+ align-items: center;
12
+ justify-content: space-between;
13
+ margin-bottom: var(--space-8);
14
+ }
15
+
16
+ .backButton {
17
+ font-size: var(--font-size-sm);
18
+ font-weight: var(--font-weight-medium);
19
+ color: var(--color-text-accent);
20
+ padding: var(--space-2) var(--space-3);
21
+ border-radius: var(--radius-full);
22
+ border: 1px solid var(--color-border);
23
+ transition: background-color var(--duration-fast) var(--easing-default);
24
+ }
25
+
26
+ .backButton:hover {
27
+ background-color: var(--color-bg-secondary);
28
+ }
29
+
30
+ .tagChip {
31
+ font-size: var(--font-size-xs);
32
+ font-weight: var(--font-weight-semibold);
33
+ color: var(--color-text-accent);
34
+ text-transform: uppercase;
35
+ letter-spacing: 0.6px;
36
+ padding: var(--space-1) var(--space-3);
37
+ background-color: var(--color-bg-tag);
38
+ border-radius: var(--radius-full);
39
+ }
40
+
41
+ /* ── Header ───────────────────────────────────────────────────── */
42
+ .header {
43
+ display: flex;
44
+ flex-direction: column;
45
+ gap: var(--space-5);
46
+ margin-bottom: var(--space-10);
47
+ padding-bottom: var(--space-8);
48
+ border-bottom: 1px solid var(--color-divider);
49
+ }
50
+
51
+ .title {
52
+ font-family: var(--font-family-display);
53
+ font-size: var(--font-size-display);
54
+ font-weight: var(--font-weight-heavy);
55
+ color: var(--color-text-primary);
56
+ line-height: var(--line-height-tight);
57
+ letter-spacing: -1.5px;
58
+ }
59
+
60
+ .subtitle {
61
+ font-size: var(--font-size-subhead);
62
+ font-weight: var(--font-weight-regular);
63
+ color: var(--color-text-secondary);
64
+ line-height: var(--line-height-relaxed);
65
+ }
66
+
67
+ .byline {
68
+ display: flex;
69
+ flex-direction: row;
70
+ align-items: center;
71
+ gap: var(--space-3);
72
+ }
73
+
74
+ .avatarLg {
75
+ width: 44px;
76
+ height: 44px;
77
+ border-radius: var(--radius-full);
78
+ background-color: var(--color-accent);
79
+ color: var(--color-text-on-accent);
80
+ font-size: var(--font-size-body-lg);
81
+ font-weight: var(--font-weight-bold);
82
+ display: flex;
83
+ align-items: center;
84
+ justify-content: center;
85
+ flex-shrink: 0;
86
+ }
87
+
88
+ .bylineText {
89
+ display: flex;
90
+ flex-direction: column;
91
+ gap: 2px;
92
+ }
93
+
94
+ .authorName {
95
+ font-size: var(--font-size-body);
96
+ font-weight: var(--font-weight-semibold);
97
+ color: var(--color-text-primary);
98
+ }
99
+
100
+ .authorMeta {
101
+ font-size: var(--font-size-sm);
102
+ color: var(--color-text-caption);
103
+ }
104
+
105
+ /* ── Body ─────────────────────────────────────────────────────── */
106
+ .body {
107
+ display: flex;
108
+ flex-direction: column;
109
+ gap: var(--space-5);
110
+ }
111
+
112
+ /* Paragraph — main body text */
113
+ .paragraph {
114
+ font-size: var(--font-size-body-lg);
115
+ font-weight: var(--font-weight-regular);
116
+ color: var(--color-text-primary);
117
+ line-height: var(--line-height-relaxed);
118
+ }
119
+
120
+ /* Section heading */
121
+ .heading2 {
122
+ font-family: var(--font-family-display);
123
+ font-size: var(--font-size-title);
124
+ font-weight: var(--font-weight-bold);
125
+ color: var(--color-text-primary);
126
+ line-height: var(--line-height-tight);
127
+ letter-spacing: -0.8px;
128
+ margin-top: var(--space-4);
129
+ }
130
+
131
+ /* Sub-section heading */
132
+ .heading3 {
133
+ font-family: var(--font-family-display);
134
+ font-size: var(--font-size-headline);
135
+ font-weight: var(--font-weight-semibold);
136
+ color: var(--color-text-primary);
137
+ line-height: var(--line-height-tight);
138
+ letter-spacing: -0.4px;
139
+ margin-top: var(--space-2);
140
+ }
141
+
142
+ /* Pull-quote */
143
+ .pullquote {
144
+ border-left: 3px solid var(--color-accent);
145
+ padding: var(--space-4) var(--space-6);
146
+ background-color: var(--color-bg-secondary);
147
+ border-radius: 0 var(--radius-md) var(--radius-md) 0;
148
+ display: flex;
149
+ flex-direction: column;
150
+ gap: var(--space-3);
151
+ }
152
+
153
+ .pullquoteText {
154
+ font-family: var(--font-family-display);
155
+ font-size: var(--font-size-subhead);
156
+ font-weight: var(--font-weight-medium);
157
+ color: var(--color-text-primary);
158
+ line-height: var(--line-height-relaxed);
159
+ font-style: italic;
160
+ }
161
+
162
+ .pullquoteAttribution {
163
+ font-size: var(--font-size-sm);
164
+ font-weight: var(--font-weight-semibold);
165
+ color: var(--color-text-secondary);
166
+ font-style: normal;
167
+ }
168
+
169
+ /* Code block */
170
+ .codeFigure {
171
+ display: flex;
172
+ flex-direction: column;
173
+ gap: var(--space-2);
174
+ }
175
+
176
+ .codeCaption {
177
+ font-size: var(--font-size-xs);
178
+ font-weight: var(--font-weight-semibold);
179
+ color: var(--color-text-secondary);
180
+ text-transform: uppercase;
181
+ letter-spacing: 0.5px;
182
+ }
183
+
184
+ .pre {
185
+ background-color: var(--color-bg-secondary);
186
+ border: 1px solid var(--color-border);
187
+ border-radius: var(--radius-md);
188
+ padding: var(--space-5);
189
+ overflow-x: auto;
190
+ }
191
+
192
+ .code {
193
+ font-family: var(--font-family-mono);
194
+ font-size: var(--font-size-sm);
195
+ color: var(--color-text-primary);
196
+ line-height: var(--line-height-relaxed);
197
+ white-space: pre;
198
+ }
199
+
200
+ /* Caption / footnote */
201
+ .caption {
202
+ font-size: var(--font-size-sm);
203
+ color: var(--color-text-caption);
204
+ line-height: var(--line-height-normal);
205
+ text-align: center;
206
+ }
207
+
208
+ /* Divider */
209
+ .divider {
210
+ border: none;
211
+ border-top: 1px solid var(--color-divider);
212
+ margin: var(--space-2) 0;
213
+ }
214
+
215
+ /* ── Footer / author card ─────────────────────────────────────── */
216
+ .footer {
217
+ margin-top: var(--space-12);
218
+ display: flex;
219
+ flex-direction: column;
220
+ gap: var(--space-6);
221
+ }
222
+
223
+ .footerDivider {
224
+ height: 1px;
225
+ background-color: var(--color-divider);
226
+ }
227
+
228
+ .authorCard {
229
+ display: flex;
230
+ flex-direction: row;
231
+ gap: var(--space-4);
232
+ align-items: flex-start;
233
+ padding: var(--space-5);
234
+ background-color: var(--color-bg-secondary);
235
+ border-radius: var(--radius-lg);
236
+ }
237
+
238
+ .authorCardText {
239
+ display: flex;
240
+ flex-direction: column;
241
+ gap: var(--space-1);
242
+ }
243
+
244
+ .authorCardName {
245
+ font-size: var(--font-size-body);
246
+ font-weight: var(--font-weight-bold);
247
+ color: var(--color-text-primary);
248
+ }
249
+
250
+ .authorCardRole {
251
+ font-size: var(--font-size-sm);
252
+ color: var(--color-text-secondary);
253
+ }
254
+
255
+ .authorBio {
256
+ font-size: var(--font-size-body);
257
+ color: var(--color-text-secondary);
258
+ line-height: var(--line-height-normal);
259
+ margin-top: var(--space-2);
260
+ }
261
+
262
+ /* ── Loading / error states ───────────────────────────────────── */
263
+ .stateContainer {
264
+ display: flex;
265
+ flex-direction: column;
266
+ align-items: center;
267
+ gap: var(--space-3);
268
+ padding: var(--space-12) var(--space-6);
269
+ }
270
+
271
+ .spinner {
272
+ width: 32px;
273
+ height: 32px;
274
+ border: 3px solid var(--color-border);
275
+ border-top-color: var(--color-accent);
276
+ border-radius: var(--radius-full);
277
+ animation: spin 0.8s linear infinite;
278
+ }
279
+
280
+ @keyframes spin {
281
+ to { transform: rotate(360deg); }
282
+ }
283
+
284
+ .stateText {
285
+ font-size: var(--font-size-body);
286
+ color: var(--color-text-secondary);
287
+ text-align: center;
288
+ }
289
+
290
+ .errorHeading {
291
+ font-size: var(--font-size-headline);
292
+ font-weight: var(--font-weight-semibold);
293
+ color: var(--color-danger);
294
+ }