@haposoft/cafekit 0.16.0-rc.8 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/README.md +116 -27
  2. package/bin/__tests__/codex-hooks-ownership.test.js +239 -0
  3. package/bin/__tests__/codex-hooks.test.js +50 -0
  4. package/bin/__tests__/codex-native.test.js +1882 -70
  5. package/bin/__tests__/develop-contract.test.js +400 -23
  6. package/bin/__tests__/installer-safety.test.js +3 -3
  7. package/bin/__tests__/optional-skill-inventory.test.js +249 -0
  8. package/bin/__tests__/output-styles.test.js +214 -0
  9. package/bin/__tests__/package-inventory.test.js +1735 -98
  10. package/bin/__tests__/runtime-schema.test.js +111 -0
  11. package/bin/__tests__/secret-output-guardrail.test.js +122 -0
  12. package/bin/__tests__/skill-routing-source.test.js +172 -0
  13. package/bin/__tests__/specs-v2-execution-closeout.test.js +1 -1
  14. package/bin/install.js +10 -0
  15. package/bin/lib/codex-install.js +170 -5
  16. package/bin/lib/context.js +14 -0
  17. package/bin/lib/i18n.js +12 -6
  18. package/bin/lib/skill-deps.js +5 -5
  19. package/bin/phases/claude-runtime.js +23 -0
  20. package/bin/phases/claude-settings.js +8 -0
  21. package/bin/phases/codex-hooks.js +156 -0
  22. package/bin/phases/codex-runtime.js +29 -38
  23. package/bin/phases/copy-payload.js +8 -2
  24. package/bin/phases/select-skill-bundles.js +96 -0
  25. package/bin/phases/skill-inventory.js +71 -0
  26. package/bin/phases/skills-setup.js +9 -2
  27. package/bin/phases/write-metadata.js +8 -5
  28. package/package.json +8 -2
  29. package/src/claude/CLAUDE.md +3 -3
  30. package/src/claude/agents/brainstormer.md +52 -69
  31. package/src/claude/agents/code-auditor.md +32 -14
  32. package/src/claude/agents/debugger.md +35 -20
  33. package/src/claude/agents/deployer.md +12 -5
  34. package/src/claude/agents/docs-keeper.md +11 -1
  35. package/src/claude/agents/implementer.md +25 -13
  36. package/src/claude/agents/inspector.md +6 -3
  37. package/src/claude/agents/project-manager.md +1 -1
  38. package/src/claude/agents/researcher.md +26 -55
  39. package/src/claude/agents/spec-maker.md +12 -7
  40. package/src/claude/agents/strategist.md +52 -0
  41. package/src/claude/agents/test-runner.md +117 -132
  42. package/src/claude/agents/ui-ux-designer.md +1 -1
  43. package/src/claude/hooks/__tests__/fixtures/statusline-default.golden +1 -0
  44. package/src/claude/hooks/__tests__/precompact.test.js +158 -0
  45. package/src/claude/hooks/__tests__/spec-gate.test.js +10 -3
  46. package/src/claude/hooks/__tests__/state.test.js +5 -0
  47. package/src/claude/hooks/__tests__/statusline.test.js +196 -0
  48. package/src/claude/hooks/agent.cjs +1 -1
  49. package/src/claude/hooks/docs-sync.cjs +12 -10
  50. package/src/claude/hooks/inspect-block.cjs +1 -1
  51. package/src/claude/hooks/lib/config.cjs +3 -0
  52. package/src/claude/hooks/lib/hook-state-dir.cjs +39 -0
  53. package/src/claude/hooks/lib/secret-keywords.cjs +42 -0
  54. package/src/claude/hooks/precompact.cjs +105 -0
  55. package/src/claude/hooks/rules.cjs +1 -1
  56. package/src/claude/hooks/secret-output-guardrail.cjs +43 -0
  57. package/src/claude/hooks/session.cjs +27 -1
  58. package/src/claude/hooks/spec-gate.cjs +3 -3
  59. package/src/claude/hooks/spec-state.cjs +2 -2
  60. package/src/claude/hooks/state.cjs +1 -1
  61. package/src/claude/hooks/task-scaffold-guard.cjs +1 -1
  62. package/src/claude/hooks/usage.cjs +1 -1
  63. package/src/claude/migration-manifest.json +29 -15
  64. package/src/claude/output-styles/coding-level-0-eli5.md +103 -0
  65. package/src/claude/output-styles/coding-level-1-junior.md +124 -0
  66. package/src/claude/output-styles/coding-level-2-mid.md +146 -0
  67. package/src/claude/output-styles/coding-level-3-senior.md +148 -0
  68. package/src/claude/output-styles/coding-level-4-lead.md +159 -0
  69. package/src/claude/output-styles/coding-level-5-god.md +91 -0
  70. package/src/claude/references/debugger/core-philosophy.md +5 -3
  71. package/src/claude/references/debugger/frontend-verification.md +2 -2
  72. package/src/claude/references/debugger/log-ci-analysis.md +13 -1
  73. package/src/claude/references/debugger/parallel-agent-hydration.md +19 -34
  74. package/src/claude/references/debugger/performance-diagnostics.md +2 -2
  75. package/src/claude/references/debugger/root-cause-tracing.md +37 -6
  76. package/src/claude/references/debugger/side-effect-gate.md +3 -1
  77. package/src/claude/references/debugger/verification-protocol.md +13 -12
  78. package/src/claude/rules/orchestrator.md +7 -1
  79. package/src/claude/rules/process-management.md +39 -0
  80. package/src/claude/rules/review-audit-self-decision.md +48 -0
  81. package/src/claude/rules/skill-domain-routing.md +26 -24
  82. package/src/claude/rules/skill-workflow-routing.md +22 -14
  83. package/src/claude/rules/workflow.md +3 -3
  84. package/src/claude/runtime.json +1 -0
  85. package/src/claude/runtime.schema.json +205 -0
  86. package/src/claude/scripts/generate-skill-catalog.cjs +156 -122
  87. package/src/claude/scripts/provenance.cjs +18 -5
  88. package/src/claude/scripts/workflow-policy.cjs +1 -1
  89. package/src/claude/settings/settings.json +16 -0
  90. package/src/claude/skills/agent-browser/SKILL.md +1 -1
  91. package/src/claude/skills/ai-multimodal/SKILL.md +1 -1
  92. package/src/claude/skills/brainstorm/SKILL.md +193 -172
  93. package/src/claude/skills/brainstorm/references/question-framework.md +105 -167
  94. package/src/claude/skills/chrome-devtools/SKILL.md +1 -1
  95. package/src/claude/skills/code-review/SKILL.md +43 -25
  96. package/src/claude/skills/code-review/references/spec-compliance-review.md +3 -4
  97. package/src/claude/skills/code-review/references/verification-gate.md +1 -1
  98. package/src/claude/skills/debug/SKILL.md +48 -19
  99. package/src/claude/skills/delegate/SKILL.md +1 -1
  100. package/src/claude/skills/develop/SKILL.md +92 -65
  101. package/src/claude/skills/develop/references/parallel-waves.md +36 -63
  102. package/src/claude/skills/develop/references/quality-gate.md +31 -4
  103. package/src/claude/skills/develop/references/subagent-patterns.md +21 -7
  104. package/src/claude/skills/docs/SKILL.md +42 -23
  105. package/src/claude/skills/docs/references/init-workflow.md +4 -4
  106. package/src/claude/skills/docs/references/reconstruct-workflow.md +6 -6
  107. package/src/claude/skills/docs/references/standard-docs-workflow.md +6 -2
  108. package/src/claude/skills/docs/references/summarize-workflow.md +2 -2
  109. package/src/claude/skills/docs/references/update-workflow.md +9 -7
  110. package/src/claude/skills/docs/templates/requirements-as-is.md +1 -1
  111. package/src/claude/skills/docx/SKILL.md +1 -1
  112. package/src/claude/skills/git/SKILL.md +1 -1
  113. package/src/claude/skills/git/references/commit-protocols.md +1 -1
  114. package/src/claude/skills/git/references/finish-branch.md +1 -1
  115. package/src/claude/skills/hotfix/SKILL.md +159 -170
  116. package/src/claude/skills/hotfix/references/diagnosis-protocol.md +14 -9
  117. package/src/claude/skills/hotfix/references/parallel-patterns.md +27 -13
  118. package/src/claude/skills/hotfix/references/prevention-gate.md +5 -0
  119. package/src/claude/skills/hotfix/references/review-cycle.md +21 -15
  120. package/src/claude/skills/hotfix/references/workflow-specialized.md +53 -21
  121. package/src/claude/skills/inspect/SKILL.md +55 -46
  122. package/src/claude/skills/inspect/references/internal-inspection.md +21 -5
  123. package/src/claude/skills/loop/SKILL.md +114 -0
  124. package/src/claude/skills/loop/references/bounded-loop-protocol.md +104 -0
  125. package/src/claude/skills/loop/references/metric-and-guard-contract.md +76 -0
  126. package/src/claude/skills/pdf/SKILL.md +1 -1
  127. package/src/claude/skills/pptx/SKILL.md +1 -1
  128. package/src/claude/skills/question/SKILL.md +16 -13
  129. package/src/claude/skills/research/SKILL.md +70 -43
  130. package/src/claude/skills/route/SKILL.md +94 -0
  131. package/src/claude/skills/route/references/agent-timing.md +46 -0
  132. package/src/claude/skills/route/references/chaining-patterns.md +53 -0
  133. package/src/claude/skills/route/references/task-taxonomy.md +48 -0
  134. package/src/claude/skills/specs/SKILL.md +41 -60
  135. package/src/claude/skills/specs/references/review.md +11 -8
  136. package/src/claude/skills/specs/references/templates.md +34 -18
  137. package/src/claude/skills/specs/templates/requirements-init.md +1 -1
  138. package/src/claude/skills/specs/templates/research.md +2 -2
  139. package/src/claude/skills/sync/SKILL.md +6 -6
  140. package/src/claude/skills/sync/references/sync-protocols.md +1 -1
  141. package/src/claude/skills/test/SKILL.md +120 -120
  142. package/src/claude/skills/test/references/execution-strategy.md +208 -361
  143. package/src/claude/skills/test/references/failure-triage.md +55 -121
  144. package/src/claude/skills/test/references/test-memory.md +20 -34
  145. package/src/claude/skills/ui-ux-pro-max/SKILL.md +1 -1
  146. package/src/claude/skills/web-testing/SKILL.md +1 -1
  147. package/src/claude/skills/xlsx/SKILL.md +1 -1
  148. package/src/claude/status.cjs +135 -33
  149. package/src/codex/AGENTS.md +14 -4
  150. package/src/codex/hooks/docs-sync.cjs +8 -3
  151. package/src/codex/hooks/lib/hook-context.cjs +18 -4
  152. package/src/codex/hooks/rules.cjs +29 -1
  153. package/src/codex/hooks/secret-output-guardrail.cjs +30 -0
  154. package/src/codex/hooks/spec-gate.cjs +3 -8
  155. package/src/codex/hooks/spec-state.cjs +2 -1
  156. package/src/codex/hooks.json +5 -0
  157. package/src/codex/runtime.json +2 -0
  158. package/src/common/.env.example +1 -1
  159. package/src/claude/skills/backend-development/SKILL.md +0 -101
  160. package/src/claude/skills/backend-development/references/backend-api-design.md +0 -495
  161. package/src/claude/skills/backend-development/references/backend-architecture.md +0 -454
  162. package/src/claude/skills/backend-development/references/backend-authentication.md +0 -338
  163. package/src/claude/skills/backend-development/references/backend-code-quality.md +0 -659
  164. package/src/claude/skills/backend-development/references/backend-debugging.md +0 -904
  165. package/src/claude/skills/backend-development/references/backend-devops.md +0 -491
  166. package/src/claude/skills/backend-development/references/backend-mindset.md +0 -387
  167. package/src/claude/skills/backend-development/references/backend-performance.md +0 -397
  168. package/src/claude/skills/backend-development/references/backend-security.md +0 -342
  169. package/src/claude/skills/backend-development/references/backend-technologies.md +0 -256
  170. package/src/claude/skills/backend-development/references/backend-testing.md +0 -429
  171. package/src/claude/skills/devops/.env.example +0 -76
  172. package/src/claude/skills/devops/SKILL.md +0 -102
  173. package/src/claude/skills/devops/references/browser-rendering.md +0 -305
  174. package/src/claude/skills/devops/references/cloudflare-d1-kv.md +0 -123
  175. package/src/claude/skills/devops/references/cloudflare-platform.md +0 -271
  176. package/src/claude/skills/devops/references/cloudflare-r2-storage.md +0 -280
  177. package/src/claude/skills/devops/references/cloudflare-workers-advanced.md +0 -312
  178. package/src/claude/skills/devops/references/cloudflare-workers-apis.md +0 -309
  179. package/src/claude/skills/devops/references/cloudflare-workers-basics.md +0 -418
  180. package/src/claude/skills/devops/references/docker-basics.md +0 -297
  181. package/src/claude/skills/devops/references/docker-compose.md +0 -292
  182. package/src/claude/skills/devops/references/gcloud-platform.md +0 -297
  183. package/src/claude/skills/devops/references/gcloud-services.md +0 -304
  184. package/src/claude/skills/devops/references/kubernetes-basics.md +0 -95
  185. package/src/claude/skills/devops/references/kubernetes-helm-advanced.md +0 -70
  186. package/src/claude/skills/devops/references/kubernetes-helm.md +0 -81
  187. package/src/claude/skills/devops/references/kubernetes-kubectl.md +0 -74
  188. package/src/claude/skills/devops/references/kubernetes-security-advanced.md +0 -94
  189. package/src/claude/skills/devops/references/kubernetes-security.md +0 -89
  190. package/src/claude/skills/devops/references/kubernetes-troubleshooting-advanced.md +0 -74
  191. package/src/claude/skills/devops/references/kubernetes-troubleshooting.md +0 -49
  192. package/src/claude/skills/devops/references/kubernetes-workflows-advanced.md +0 -75
  193. package/src/claude/skills/devops/references/kubernetes-workflows.md +0 -76
  194. package/src/claude/skills/devops/scripts/cloudflare_deploy.py +0 -269
  195. package/src/claude/skills/devops/scripts/docker_optimize.py +0 -332
  196. package/src/claude/skills/devops/scripts/requirements.txt +0 -20
  197. package/src/claude/skills/devops/scripts/tests/requirements.txt +0 -3
  198. package/src/claude/skills/devops/scripts/tests/test_cloudflare_deploy.py +0 -285
  199. package/src/claude/skills/devops/scripts/tests/test_docker_optimize.py +0 -436
  200. package/src/claude/skills/frontend-design/SKILL.md +0 -135
  201. package/src/claude/skills/frontend-design/references/ai-multimodal-overview.md +0 -165
  202. package/src/claude/skills/frontend-design/references/analysis-best-practices.md +0 -80
  203. package/src/claude/skills/frontend-design/references/analysis-prompts.md +0 -141
  204. package/src/claude/skills/frontend-design/references/analysis-techniques.md +0 -118
  205. package/src/claude/skills/frontend-design/references/animejs.md +0 -396
  206. package/src/claude/skills/frontend-design/references/anti-slop-rules.md +0 -103
  207. package/src/claude/skills/frontend-design/references/asset-generation.md +0 -337
  208. package/src/claude/skills/frontend-design/references/bento-motion-engine.md +0 -142
  209. package/src/claude/skills/frontend-design/references/design-extraction-overview.md +0 -71
  210. package/src/claude/skills/frontend-design/references/extraction-best-practices.md +0 -141
  211. package/src/claude/skills/frontend-design/references/extraction-output-templates.md +0 -162
  212. package/src/claude/skills/frontend-design/references/extraction-prompts.md +0 -127
  213. package/src/claude/skills/frontend-design/references/magicui-components.md +0 -129
  214. package/src/claude/skills/frontend-design/references/performance-guardrails.md +0 -169
  215. package/src/claude/skills/frontend-design/references/premium-design-patterns.md +0 -93
  216. package/src/claude/skills/frontend-design/references/redesign-audit-checklist.md +0 -114
  217. package/src/claude/skills/frontend-design/references/technical-accessibility.md +0 -119
  218. package/src/claude/skills/frontend-design/references/technical-best-practices.md +0 -97
  219. package/src/claude/skills/frontend-design/references/technical-optimization.md +0 -44
  220. package/src/claude/skills/frontend-design/references/technical-overview.md +0 -90
  221. package/src/claude/skills/frontend-design/references/technical-workflows.md +0 -150
  222. package/src/claude/skills/frontend-design/references/visual-analysis-overview.md +0 -95
  223. package/src/claude/skills/frontend-design/references/workflow-3d.md +0 -102
  224. package/src/claude/skills/frontend-design/references/workflow-describe.md +0 -87
  225. package/src/claude/skills/frontend-design/references/workflow-immersive.md +0 -87
  226. package/src/claude/skills/frontend-design/references/workflow-quick.md +0 -57
  227. package/src/claude/skills/frontend-design/references/workflow-screenshot.md +0 -63
  228. package/src/claude/skills/frontend-design/references/workflow-video.md +0 -74
  229. package/src/claude/skills/frontend-development/SKILL.md +0 -406
  230. package/src/claude/skills/frontend-development/resources/common-patterns.md +0 -331
  231. package/src/claude/skills/frontend-development/resources/complete-examples.md +0 -872
  232. package/src/claude/skills/frontend-development/resources/component-patterns.md +0 -502
  233. package/src/claude/skills/frontend-development/resources/data-fetching.md +0 -767
  234. package/src/claude/skills/frontend-development/resources/file-organization.md +0 -502
  235. package/src/claude/skills/frontend-development/resources/loading-and-error-states.md +0 -501
  236. package/src/claude/skills/frontend-development/resources/performance.md +0 -406
  237. package/src/claude/skills/frontend-development/resources/routing-guide.md +0 -364
  238. package/src/claude/skills/frontend-development/resources/styling-guide.md +0 -428
  239. package/src/claude/skills/frontend-development/resources/typescript-standards.md +0 -418
  240. package/src/claude/skills/mobile-development/SKILL.md +0 -218
  241. package/src/claude/skills/mobile-development/references/mobile-android.md +0 -604
  242. package/src/claude/skills/mobile-development/references/mobile-best-practices.md +0 -544
  243. package/src/claude/skills/mobile-development/references/mobile-debugging.md +0 -1089
  244. package/src/claude/skills/mobile-development/references/mobile-frameworks.md +0 -465
  245. package/src/claude/skills/mobile-development/references/mobile-ios.md +0 -496
  246. package/src/claude/skills/mobile-development/references/mobile-mindset.md +0 -542
  247. package/src/claude/skills/react-best-practices/AGENTS.md +0 -2249
  248. package/src/claude/skills/react-best-practices/README.md +0 -123
  249. package/src/claude/skills/react-best-practices/SKILL.md +0 -128
  250. package/src/claude/skills/react-best-practices/metadata.json +0 -15
  251. package/src/claude/skills/react-best-practices/rules/_sections.md +0 -46
  252. package/src/claude/skills/react-best-practices/rules/_template.md +0 -28
  253. package/src/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  254. package/src/claude/skills/react-best-practices/rules/advanced-use-latest.md +0 -49
  255. package/src/claude/skills/react-best-practices/rules/async-api-routes.md +0 -38
  256. package/src/claude/skills/react-best-practices/rules/async-defer-await.md +0 -80
  257. package/src/claude/skills/react-best-practices/rules/async-dependencies.md +0 -36
  258. package/src/claude/skills/react-best-practices/rules/async-parallel.md +0 -28
  259. package/src/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
  260. package/src/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
  261. package/src/claude/skills/react-best-practices/rules/bundle-conditional.md +0 -31
  262. package/src/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
  263. package/src/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  264. package/src/claude/skills/react-best-practices/rules/bundle-preload.md +0 -50
  265. package/src/claude/skills/react-best-practices/rules/client-event-listeners.md +0 -74
  266. package/src/claude/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
  267. package/src/claude/skills/react-best-practices/rules/js-batch-dom-css.md +0 -82
  268. package/src/claude/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
  269. package/src/claude/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
  270. package/src/claude/skills/react-best-practices/rules/js-cache-storage.md +0 -70
  271. package/src/claude/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
  272. package/src/claude/skills/react-best-practices/rules/js-early-exit.md +0 -50
  273. package/src/claude/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
  274. package/src/claude/skills/react-best-practices/rules/js-index-maps.md +0 -37
  275. package/src/claude/skills/react-best-practices/rules/js-length-check-first.md +0 -49
  276. package/src/claude/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
  277. package/src/claude/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
  278. package/src/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  279. package/src/claude/skills/react-best-practices/rules/rendering-activity.md +0 -26
  280. package/src/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  281. package/src/claude/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
  282. package/src/claude/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
  283. package/src/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  284. package/src/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  285. package/src/claude/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
  286. package/src/claude/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
  287. package/src/claude/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
  288. package/src/claude/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
  289. package/src/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  290. package/src/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  291. package/src/claude/skills/react-best-practices/rules/rerender-memo.md +0 -44
  292. package/src/claude/skills/react-best-practices/rules/rerender-transitions.md +0 -40
  293. package/src/claude/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
  294. package/src/claude/skills/react-best-practices/rules/server-cache-lru.md +0 -41
  295. package/src/claude/skills/react-best-practices/rules/server-cache-react.md +0 -26
  296. package/src/claude/skills/react-best-practices/rules/server-parallel-fetching.md +0 -79
  297. package/src/claude/skills/react-best-practices/rules/server-serialization.md +0 -38
@@ -1,418 +0,0 @@
1
- # TypeScript Standards
2
-
3
- TypeScript best practices for type safety and maintainability in React frontend code.
4
-
5
- ---
6
-
7
- ## Strict Mode
8
-
9
- ### Configuration
10
-
11
- TypeScript strict mode is **enabled** in the project:
12
-
13
- ```json
14
- // tsconfig.json
15
- {
16
- "compilerOptions": {
17
- "strict": true,
18
- "noImplicitAny": true,
19
- "strictNullChecks": true
20
- }
21
- }
22
- ```
23
-
24
- **This means:**
25
- - No implicit `any` types
26
- - Null/undefined must be handled explicitly
27
- - Type safety enforced
28
-
29
- ---
30
-
31
- ## No `any` Type
32
-
33
- ### The Rule
34
-
35
- ```typescript
36
- // ❌ NEVER use any
37
- function handleData(data: any) {
38
- return data.something;
39
- }
40
-
41
- // ✅ Use specific types
42
- interface MyData {
43
- something: string;
44
- }
45
-
46
- function handleData(data: MyData) {
47
- return data.something;
48
- }
49
-
50
- // ✅ Or use unknown for truly unknown data
51
- function handleUnknown(data: unknown) {
52
- if (typeof data === 'object' && data !== null && 'something' in data) {
53
- return (data as MyData).something;
54
- }
55
- }
56
- ```
57
-
58
- **If you truly don't know the type:**
59
- - Use `unknown` (forces type checking)
60
- - Use type guards to narrow
61
- - Document why type is unknown
62
-
63
- ---
64
-
65
- ## Explicit Return Types
66
-
67
- ### Function Return Types
68
-
69
- ```typescript
70
- // ✅ CORRECT - Explicit return type
71
- function getUser(id: number): Promise<User> {
72
- return apiClient.get(`/users/${id}`);
73
- }
74
-
75
- function calculateTotal(items: Item[]): number {
76
- return items.reduce((sum, item) => sum + item.price, 0);
77
- }
78
-
79
- // ❌ AVOID - Implicit return type (less clear)
80
- function getUser(id: number) {
81
- return apiClient.get(`/users/${id}`);
82
- }
83
- ```
84
-
85
- ### Component Return Types
86
-
87
- ```typescript
88
- // React.FC already provides return type (ReactElement)
89
- export const MyComponent: React.FC<Props> = ({ prop }) => {
90
- return <div>{prop}</div>;
91
- };
92
-
93
- // For custom hooks
94
- function useMyData(id: number): { data: Data; isLoading: boolean } {
95
- const [data, setData] = useState<Data | null>(null);
96
- const [isLoading, setIsLoading] = useState(true);
97
-
98
- return { data: data!, isLoading };
99
- }
100
- ```
101
-
102
- ---
103
-
104
- ## Type Imports
105
-
106
- ### Use 'type' Keyword
107
-
108
- ```typescript
109
- // ✅ CORRECT - Explicitly mark as type import
110
- import type { User } from '~types/user';
111
- import type { Post } from '~types/post';
112
- import type { SxProps, Theme } from '@mui/material';
113
-
114
- // ❌ AVOID - Mixed value and type imports
115
- import { User } from '~types/user'; // Unclear if type or value
116
- ```
117
-
118
- **Benefits:**
119
- - Clearly separates types from values
120
- - Better tree-shaking
121
- - Prevents circular dependencies
122
- - TypeScript compiler optimization
123
-
124
- ---
125
-
126
- ## Component Prop Interfaces
127
-
128
- ### Interface Pattern
129
-
130
- ```typescript
131
- /**
132
- * Props for MyComponent
133
- */
134
- interface MyComponentProps {
135
- /** The user ID to display */
136
- userId: number;
137
-
138
- /** Optional callback when action completes */
139
- onComplete?: () => void;
140
-
141
- /** Display mode for the component */
142
- mode?: 'view' | 'edit';
143
-
144
- /** Additional CSS classes */
145
- className?: string;
146
- }
147
-
148
- export const MyComponent: React.FC<MyComponentProps> = ({
149
- userId,
150
- onComplete,
151
- mode = 'view', // Default value
152
- className,
153
- }) => {
154
- return <div>...</div>;
155
- };
156
- ```
157
-
158
- **Key Points:**
159
- - Separate interface for props
160
- - JSDoc comments for each prop
161
- - Optional props use `?`
162
- - Provide defaults in destructuring
163
-
164
- ### Props with Children
165
-
166
- ```typescript
167
- interface ContainerProps {
168
- children: React.ReactNode;
169
- title: string;
170
- }
171
-
172
- // React.FC automatically includes children type, but be explicit
173
- export const Container: React.FC<ContainerProps> = ({ children, title }) => {
174
- return (
175
- <div>
176
- <h2>{title}</h2>
177
- {children}
178
- </div>
179
- );
180
- };
181
- ```
182
-
183
- ---
184
-
185
- ## Utility Types
186
-
187
- ### Partial<T>
188
-
189
- ```typescript
190
- // Make all properties optional
191
- type UserUpdate = Partial<User>;
192
-
193
- function updateUser(id: number, updates: Partial<User>) {
194
- // updates can have any subset of User properties
195
- }
196
- ```
197
-
198
- ### Pick<T, K>
199
-
200
- ```typescript
201
- // Select specific properties
202
- type UserPreview = Pick<User, 'id' | 'name' | 'email'>;
203
-
204
- const preview: UserPreview = {
205
- id: 1,
206
- name: 'John',
207
- email: 'john@example.com',
208
- // Other User properties not allowed
209
- };
210
- ```
211
-
212
- ### Omit<T, K>
213
-
214
- ```typescript
215
- // Exclude specific properties
216
- type UserWithoutPassword = Omit<User, 'password' | 'passwordHash'>;
217
-
218
- const publicUser: UserWithoutPassword = {
219
- id: 1,
220
- name: 'John',
221
- email: 'john@example.com',
222
- // password and passwordHash not allowed
223
- };
224
- ```
225
-
226
- ### Required<T>
227
-
228
- ```typescript
229
- // Make all properties required
230
- type RequiredConfig = Required<Config>; // All optional props become required
231
- ```
232
-
233
- ### Record<K, V>
234
-
235
- ```typescript
236
- // Type-safe object/map
237
- const userMap: Record<string, User> = {
238
- 'user1': { id: 1, name: 'John' },
239
- 'user2': { id: 2, name: 'Jane' },
240
- };
241
-
242
- // For styles
243
- import type { SxProps, Theme } from '@mui/material';
244
-
245
- const styles: Record<string, SxProps<Theme>> = {
246
- container: { p: 2 },
247
- header: { mb: 1 },
248
- };
249
- ```
250
-
251
- ---
252
-
253
- ## Type Guards
254
-
255
- ### Basic Type Guards
256
-
257
- ```typescript
258
- function isUser(data: unknown): data is User {
259
- return (
260
- typeof data === 'object' &&
261
- data !== null &&
262
- 'id' in data &&
263
- 'name' in data
264
- );
265
- }
266
-
267
- // Usage
268
- if (isUser(response)) {
269
- console.log(response.name); // TypeScript knows it's User
270
- }
271
- ```
272
-
273
- ### Discriminated Unions
274
-
275
- ```typescript
276
- type LoadingState =
277
- | { status: 'idle' }
278
- | { status: 'loading' }
279
- | { status: 'success'; data: Data }
280
- | { status: 'error'; error: Error };
281
-
282
- function Component({ state }: { state: LoadingState }) {
283
- // TypeScript narrows type based on status
284
- if (state.status === 'success') {
285
- return <Display data={state.data} />; // data available here
286
- }
287
-
288
- if (state.status === 'error') {
289
- return <Error error={state.error} />; // error available here
290
- }
291
-
292
- return <Loading />;
293
- }
294
- ```
295
-
296
- ---
297
-
298
- ## Generic Types
299
-
300
- ### Generic Functions
301
-
302
- ```typescript
303
- function getById<T>(items: T[], id: number): T | undefined {
304
- return items.find(item => (item as any).id === id);
305
- }
306
-
307
- // Usage with type inference
308
- const users: User[] = [...];
309
- const user = getById(users, 123); // Type: User | undefined
310
- ```
311
-
312
- ### Generic Components
313
-
314
- ```typescript
315
- interface ListProps<T> {
316
- items: T[];
317
- renderItem: (item: T) => React.ReactNode;
318
- }
319
-
320
- export function List<T>({ items, renderItem }: ListProps<T>): React.ReactElement {
321
- return (
322
- <div>
323
- {items.map((item, index) => (
324
- <div key={index}>{renderItem(item)}</div>
325
- ))}
326
- </div>
327
- );
328
- }
329
-
330
- // Usage
331
- <List<User>
332
- items={users}
333
- renderItem={(user) => <UserCard user={user} />}
334
- />
335
- ```
336
-
337
- ---
338
-
339
- ## Type Assertions (Use Sparingly)
340
-
341
- ### When to Use
342
-
343
- ```typescript
344
- // ✅ OK - When you know more than TypeScript
345
- const element = document.getElementById('my-element') as HTMLInputElement;
346
- const value = element.value;
347
-
348
- // ✅ OK - API response that you've validated
349
- const response = await api.getData();
350
- const user = response.data as User; // You know the shape
351
- ```
352
-
353
- ### When NOT to Use
354
-
355
- ```typescript
356
- // ❌ AVOID - Circumventing type safety
357
- const data = getData() as any; // WRONG - defeats TypeScript
358
-
359
- // ❌ AVOID - Unsafe assertion
360
- const value = unknownValue as string; // Might not actually be string
361
- ```
362
-
363
- ---
364
-
365
- ## Null/Undefined Handling
366
-
367
- ### Optional Chaining
368
-
369
- ```typescript
370
- // ✅ CORRECT
371
- const name = user?.profile?.name;
372
-
373
- // Equivalent to:
374
- const name = user && user.profile && user.profile.name;
375
- ```
376
-
377
- ### Nullish Coalescing
378
-
379
- ```typescript
380
- // ✅ CORRECT
381
- const displayName = user?.name ?? 'Anonymous';
382
-
383
- // Only uses default if null or undefined
384
- // (Different from || which triggers on '', 0, false)
385
- ```
386
-
387
- ### Non-Null Assertion (Use Carefully)
388
-
389
- ```typescript
390
- // ✅ OK - When you're certain value exists
391
- const data = queryClient.getQueryData<Data>(['data'])!;
392
-
393
- // ⚠️ CAREFUL - Only use when you KNOW it's not null
394
- // Better to check explicitly:
395
- const data = queryClient.getQueryData<Data>(['data']);
396
- if (data) {
397
- // Use data
398
- }
399
- ```
400
-
401
- ---
402
-
403
- ## Summary
404
-
405
- **TypeScript Checklist:**
406
- - ✅ Strict mode enabled
407
- - ✅ No `any` type (use `unknown` if needed)
408
- - ✅ Explicit return types on functions
409
- - ✅ Use `import type` for type imports
410
- - ✅ JSDoc comments on prop interfaces
411
- - ✅ Utility types (Partial, Pick, Omit, Required, Record)
412
- - ✅ Type guards for narrowing
413
- - ✅ Optional chaining and nullish coalescing
414
- - ❌ Avoid type assertions unless necessary
415
-
416
- **See Also:**
417
- - [component-patterns.md](component-patterns.md) - Component typing
418
- - [data-fetching.md](data-fetching.md) - API typing
@@ -1,218 +0,0 @@
1
- ---
2
- name: hapo:mobile-development
3
- description: Build mobile apps with React Native, Flutter, Swift/SwiftUI, Kotlin/Jetpack Compose. Use for iOS/Android, mobile UX, performance optimization, offline-first, app store deployment.
4
- license: MIT
5
- user-invocable: true
6
- when_to_use: "Invoke to build or modify mobile app features and UI."
7
- category: frontend
8
- keywords: [mobile, app, ios, android]
9
- argument-hint: "[platform] [feature]"
10
- metadata:
11
- author: haposoft
12
- version: "1.0.0"
13
- ---
14
- # Mobile Development Skill
15
-
16
- Production-ready mobile development with modern frameworks, best practices, and mobile-first thinking patterns.
17
-
18
- ## When to Use
19
-
20
- - Building mobile applications (iOS, Android, or cross-platform)
21
- - Implementing mobile-first design and UX patterns
22
- - Optimizing for mobile constraints (battery, memory, network, small screens)
23
- - Making native vs cross-platform technology decisions
24
- - Implementing offline-first architecture and data sync
25
- - Following platform-specific guidelines (iOS HIG, Material Design)
26
- - Optimizing mobile app performance and user experience
27
- - Implementing mobile security and authentication
28
- - Testing mobile applications (unit, integration, E2E)
29
- - Deploying to App Store and Google Play
30
-
31
- ## Technology Selection Guide
32
-
33
- **Cross-Platform Frameworks:**
34
- - **React Native**: JavaScript expertise, web code sharing, mature ecosystem
35
- - **Flutter**: Performance-critical apps, complex animations, fastest-growing
36
-
37
- **Native Development:**
38
- - **iOS (Swift/SwiftUI)**: Maximum iOS performance, latest features, Apple ecosystem integration
39
- - **Android (Kotlin/Jetpack Compose)**: Maximum Android performance, Material Design 3, platform optimization
40
-
41
- See: `references/mobile-frameworks.md` for detailed framework comparisons
42
-
43
- ## Mobile Development Mindset
44
-
45
- **The 10 Commandments of Mobile Development:**
46
-
47
- 1. **Performance is Foundation, Not Feature** - Slow load times can drive users away
48
- 2. **Every Kilobyte, Every Millisecond Matters** - Mobile constraints are real
49
- 3. **Offline-First by Default** - Network is unreliable, design for it
50
- 4. **User Context > Developer Environment** - Think real-world usage scenarios
51
- 5. **Platform Awareness Without Platform Lock-In** - Respect platform conventions
52
- 6. **Iterate, Don't Perfect** - Ship, measure, improve cycle is survival
53
- 7. **Security and Accessibility by Design** - Not afterthoughts
54
- 8. **Test on Real Devices** - Simulators lie about performance
55
- 9. **Architecture Scales with Complexity** - Don't over-engineer simple apps
56
- 10. **Continuous Learning is Survival** - Mobile landscape evolves rapidly
57
-
58
- See: `references/mobile-mindset.md` for thinking patterns and decision frameworks
59
-
60
- ## Reference Navigation
61
-
62
- **Core Technologies:**
63
- - `mobile-frameworks.md` - React Native, Flutter, Swift, Kotlin, framework comparison matrices, when to use each
64
- - `mobile-ios.md` - Swift 6, SwiftUI, iOS architecture patterns, HIG, App Store requirements, platform capabilities
65
- - `mobile-android.md` - Kotlin, Jetpack Compose, Material Design 3, Play Store, Android-specific features
66
-
67
- **Best Practices & Development Mindset:**
68
- - `mobile-best-practices.md` - Mobile-first design, performance optimization, offline-first architecture, security, testing, accessibility, deployment, analytics
69
- - `mobile-debugging.md` - Debugging tools, performance profiling, crash analysis, network debugging, platform-specific debugging
70
- - `mobile-mindset.md` - Thinking patterns, decision frameworks, platform-specific thinking, common pitfalls, debugging strategies
71
-
72
- ## Key Best Practices (2024-2025)
73
-
74
- **Performance Targets:**
75
- - App launch: <2 seconds; slow launches risk abandonment
76
- - Memory usage: <100MB for typical screens
77
- - Network requests: Batch and cache aggressively
78
- - Battery impact: Respect Doze Mode and background restrictions
79
- - Animation: 60 FPS (16.67ms per frame)
80
-
81
- **Architecture:**
82
- - MVVM for small-medium apps (clean separation, testable)
83
- - MVVM + Clean Architecture for large enterprise apps
84
- - Offline-first with hybrid sync (push + pull)
85
- - State management: Zustand (React Native), Riverpod 3 (Flutter), StateFlow (Android)
86
-
87
- **Security (OWASP Mobile Top 10):**
88
- - OAuth 2.0 + JWT + Biometrics for authentication
89
- - Keychain (iOS) / KeyStore (Android) for sensitive data
90
- - Certificate pinning for network security
91
- - Never hardcode credentials or API keys
92
- - Implement proper session management
93
-
94
- **Testing Strategy:**
95
- - Unit tests: meaningful coverage for business logic
96
- - Integration tests: Critical user flows
97
- - E2E tests: Detox (React Native), Appium (cross-platform), XCUITest (iOS), Espresso (Android)
98
- - Real device testing mandatory before release
99
-
100
- **Deployment:**
101
- - Fastlane for automation across platforms
102
- - Staged rollouts: Internal → Closed → Open → Production
103
- - Mandatory: iOS 17 SDK (2024), Android 15 API 35 (Aug 2025)
104
- - CI/CD saves development time
105
-
106
- ## Quick Decision Matrix
107
-
108
- | Need | Choose |
109
- |------|--------|
110
- | JavaScript team, web code sharing | React Native |
111
- | Performance-critical, complex animations | Flutter |
112
- | Maximum iOS performance, latest features | Swift/SwiftUI native |
113
- | Maximum Android performance, Material 3 | Kotlin/Compose native |
114
- | Rapid prototyping | React Native + Expo |
115
- | Desktop + mobile | Flutter |
116
- | Enterprise with JavaScript skills | React Native |
117
- | Startup with limited resources | Flutter or React Native |
118
- | Gaming or heavy graphics | Native (Swift/Kotlin) or Unity |
119
-
120
- ## Framework Quick Comparison (2024-2025)
121
-
122
- | Criterion | React Native | Flutter | Swift/SwiftUI | Kotlin/Compose |
123
- |-----------|--------------|---------|---------------|----------------|
124
- | **Community footprint** | Large | Large | Apple ecosystem | Android ecosystem |
125
- | **Adoption** | Established | Established | iOS only | Android only |
126
- | **Performance** | Near-native when profiled | Near-native when profiled | Native baseline | Native baseline |
127
- | **Dev Speed** | Fast (hot reload) | Very fast (hot reload) | Fast (Xcode Previews) | Fast (Live Edit) |
128
- | **Learning Curve** | Easy (JavaScript) | Medium (Dart) | Medium (Swift) | Medium (Kotlin) |
129
- | **UI Paradigm** | Component-based | Widget-based | Declarative | Declarative |
130
- | **Community** | Huge (npm) | Growing | Apple ecosystem | Android ecosystem |
131
- | **Best For** | JS teams, web sharing | Performance, animations | iOS-only apps | Android-only apps |
132
-
133
- ## Implementation Checklist
134
-
135
- **Project Setup:**
136
- - Choose framework → Initialize project → Configure dev environment → Setup version control → Configure CI/CD → Team standards
137
-
138
- **Architecture:**
139
- - Choose pattern (MVVM/Clean) → Setup folders → State management → Navigation → API layer → Error handling → Logging
140
-
141
- **Core Features:**
142
- - Authentication → Data persistence → API integration → Offline sync → Push notifications → Deep linking → Analytics
143
-
144
- **UI/UX:**
145
- - Design system → Platform guidelines → Accessibility → Responsive layouts → Dark mode → Localization → Animations
146
-
147
- **Performance:**
148
- - Image optimization → Lazy loading → Memory profiling → Network optimization → Battery testing → Launch time optimization
149
-
150
- **Quality:**
151
- - Unit tests → Integration tests → E2E tests → Accessibility testing → Performance testing → Security audit
152
-
153
- **Security:**
154
- - Secure storage → Authentication flow → Network security → Input validation → Session management → Encryption
155
-
156
- **Deployment:**
157
- - App icons/splash → Screenshots → Store listings → Privacy policy → TestFlight/Internal testing → Staged rollout → Monitoring
158
-
159
- ## Platform-Specific Guidelines
160
-
161
- **iOS (Human Interface Guidelines):**
162
- - Native navigation patterns (tab bar, navigation bar)
163
- - iOS design patterns (pull to refresh, swipe actions)
164
- - San Francisco font, iOS color system
165
- - Haptic feedback, 3D Touch/Haptic Touch
166
- - Respect safe areas and notch
167
-
168
- **Android (Material Design 3):**
169
- - Material navigation (bottom nav, navigation drawer)
170
- - Floating action buttons, material components
171
- - Roboto font, Material You dynamic colors
172
- - Touch feedback (ripple effects)
173
- - Respect system bars and gestures
174
-
175
- ## Common Pitfalls to Avoid
176
-
177
- 1. **Testing only on simulators** - Real devices show true performance
178
- 2. **Ignoring platform conventions** - Users expect platform-specific patterns
179
- 3. **No offline handling** - Network failures will happen
180
- 4. **Poor memory management** - Leads to crashes and poor UX
181
- 5. **Hardcoded credentials** - Security vulnerability
182
- 6. **No accessibility** - Can exclude users
183
- 7. **Premature optimization** - Optimize based on metrics, not assumptions
184
- 8. **Over-engineering** - Start simple, scale as needed
185
- 9. **Skipping real device testing** - Simulators don't show battery/network issues
186
- 10. **Not respecting battery** - Background processing must be justified
187
-
188
- ## Performance Budgets
189
-
190
- **Recommended Targets:**
191
- - **App size**: <50MB initial download, <200MB total
192
- - **Launch time**: <2 seconds to interactive
193
- - **Screen load**: <1 second for cached data
194
- - **Network request**: <3 seconds for API calls
195
- - **Memory**: <100MB for typical screens, <200MB peak
196
- - **Battery**: Minimize drain during active use
197
- - **Frame rate**: 60 FPS (16.67ms per frame)
198
-
199
- ## Resources
200
-
201
- **Official Documentation:**
202
- - React Native: https://reactnative.dev/
203
- - Flutter: https://flutter.dev/
204
- - iOS HIG: https://developer.apple.com/design/human-interface-guidelines/
205
- - Material Design: https://m3.material.io/
206
- - OWASP Mobile: https://owasp.org/www-project-mobile-top-10/
207
-
208
- **Tools & Testing:**
209
- - Detox E2E: https://wix.github.io/Detox/
210
- - Appium: https://appium.io/
211
- - Fastlane: https://fastlane.tools/
212
- - Firebase: https://firebase.google.com/
213
-
214
- **Community:**
215
- - React Native Directory: https://reactnative.directory/
216
- - Pub.dev (Flutter packages): https://pub.dev/
217
- - Awesome React Native: https://github.com/jondot/awesome-react-native
218
- - Awesome Flutter: https://github.com/Solido/awesome-flutter