oh-my-agent-commandcode 0.0.0-stage → 20.38.4

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 (334) hide show
  1. package/README.md +35 -2
  2. package/filter-test-output.sh +52 -0
  3. package/mods/oma.ts +347 -0
  4. package/package.json +30 -4
  5. package/skills/_shared/conditional/experiment-ledger.md +28 -0
  6. package/skills/_shared/conditional/exploration-loop.md +22 -0
  7. package/skills/_shared/conditional/quality-score.md +33 -0
  8. package/skills/_shared/core/anti-ai-prose.md +191 -0
  9. package/skills/_shared/core/api-contracts/README.md +28 -0
  10. package/skills/_shared/core/api-contracts/template.md +90 -0
  11. package/skills/_shared/core/clarification-protocol.md +23 -0
  12. package/skills/_shared/core/code-intelligence.md +46 -0
  13. package/skills/_shared/core/collaboration-policy.md +28 -0
  14. package/skills/_shared/core/common-checklist.md +28 -0
  15. package/skills/_shared/core/context-budget.md +22 -0
  16. package/skills/_shared/core/context-loading.md +34 -0
  17. package/skills/_shared/core/difficulty-guide.md +26 -0
  18. package/skills/_shared/core/execution-policy.md +31 -0
  19. package/skills/_shared/core/lessons-learned.md +33 -0
  20. package/skills/_shared/core/prompt-structure.md +18 -0
  21. package/skills/_shared/core/quality-principles.md +11 -0
  22. package/skills/_shared/core/session-metrics.md +35 -0
  23. package/skills/_shared/core/skill-routing.md +39 -0
  24. package/skills/_shared/core/test-approach.md +54 -0
  25. package/skills/_shared/core/vendor-detection.md +52 -0
  26. package/skills/_shared/runtime/memory-protocol.md +118 -0
  27. package/skills/_shared/runtime/result-contract.md +64 -0
  28. package/skills/_shared/ui-interaction-quality.md +133 -0
  29. package/skills/oma-academic-writing/SKILL.md +181 -0
  30. package/skills/oma-academic-writing/resources/abstract-guide.md +51 -0
  31. package/skills/oma-academic-writing/resources/academic-verb-tiers.md +42 -0
  32. package/skills/oma-academic-writing/resources/anti-ai-checklist.md +52 -0
  33. package/skills/oma-academic-writing/resources/hedging-guide.md +132 -0
  34. package/skills/oma-academic-writing/resources/sentence-structure-reference.md +151 -0
  35. package/skills/oma-architecture/SKILL.md +203 -0
  36. package/skills/oma-architecture/resources/api-evolution.md +41 -0
  37. package/skills/oma-architecture/resources/checklist.md +42 -0
  38. package/skills/oma-architecture/resources/execution-protocol.md +115 -0
  39. package/skills/oma-architecture/resources/methodology-selection.md +92 -0
  40. package/skills/oma-architecture/resources/migration-patterns.md +28 -0
  41. package/skills/oma-architecture/resources/output-templates.md +111 -0
  42. package/skills/oma-architecture/resources/stakeholder-synthesis.md +80 -0
  43. package/skills/oma-backend/SKILL.md +202 -0
  44. package/skills/oma-backend/resources/checklist.md +45 -0
  45. package/skills/oma-backend/resources/error-playbook.md +97 -0
  46. package/skills/oma-backend/resources/execution-protocol.md +39 -0
  47. package/skills/oma-backend/resources/orm-reference.md +61 -0
  48. package/skills/oma-backend/variants/node/api-template.ts +315 -0
  49. package/skills/oma-backend/variants/node/snippets.md +475 -0
  50. package/skills/oma-backend/variants/node/stack.yaml +21 -0
  51. package/skills/oma-backend/variants/node/tech-stack.md +33 -0
  52. package/skills/oma-backend/variants/python/api-template.py +378 -0
  53. package/skills/oma-backend/variants/python/snippets.md +199 -0
  54. package/skills/oma-backend/variants/python/stack.yaml +18 -0
  55. package/skills/oma-backend/variants/python/tech-stack.md +45 -0
  56. package/skills/oma-backend/variants/rust/api-template.rs +635 -0
  57. package/skills/oma-backend/variants/rust/snippets.md +471 -0
  58. package/skills/oma-backend/variants/rust/stack.yaml +20 -0
  59. package/skills/oma-backend/variants/rust/tech-stack.md +36 -0
  60. package/skills/oma-backend/variants/stack.schema.json +73 -0
  61. package/skills/oma-brainstorm/SKILL.md +166 -0
  62. package/skills/oma-brainstorm/resources/triz-lite.md +117 -0
  63. package/skills/oma-coordination/SKILL.md +171 -0
  64. package/skills/oma-db/SKILL.md +201 -0
  65. package/skills/oma-db/resources/anti-patterns.md +177 -0
  66. package/skills/oma-db/resources/checklist.md +67 -0
  67. package/skills/oma-db/resources/document-templates.md +107 -0
  68. package/skills/oma-db/resources/error-playbook.md +50 -0
  69. package/skills/oma-db/resources/examples.md +170 -0
  70. package/skills/oma-db/resources/execution-protocol.md +127 -0
  71. package/skills/oma-db/resources/iso-controls.md +98 -0
  72. package/skills/oma-db/resources/migration-playbook.md +93 -0
  73. package/skills/oma-db/resources/query-tuning.md +57 -0
  74. package/skills/oma-db/resources/vector-db.md +159 -0
  75. package/skills/oma-debug/SKILL.md +146 -0
  76. package/skills/oma-debug/resources/bug-report-template.md +327 -0
  77. package/skills/oma-debug/resources/checklist.md +31 -0
  78. package/skills/oma-debug/resources/common-patterns.md +734 -0
  79. package/skills/oma-debug/resources/debugging-checklist.md +364 -0
  80. package/skills/oma-debug/resources/error-playbook.md +94 -0
  81. package/skills/oma-debug/resources/execution-protocol.md +40 -0
  82. package/skills/oma-design/SKILL.md +135 -0
  83. package/skills/oma-design/resources/asset-strategy.md +34 -0
  84. package/skills/oma-design/resources/checklist.md +63 -0
  85. package/skills/oma-design/resources/data-grid.md +48 -0
  86. package/skills/oma-design/resources/design-md-spec.md +107 -0
  87. package/skills/oma-design/resources/design-tokens.md +53 -0
  88. package/skills/oma-design/resources/error-playbook.md +18 -0
  89. package/skills/oma-design/resources/execution-protocol.md +95 -0
  90. package/skills/oma-design/resources/external-design-skills.md +130 -0
  91. package/skills/oma-design/resources/getdesign-fetcher.md +104 -0
  92. package/skills/oma-design/resources/product-interface-review.md +59 -0
  93. package/skills/oma-design/resources/redesign-protocol.md +52 -0
  94. package/skills/oma-design/resources/stitch-integration.md +244 -0
  95. package/skills/oma-dev-workflow/SKILL.md +375 -0
  96. package/skills/oma-dev-workflow/resources/affected-checks.py +58 -0
  97. package/skills/oma-dev-workflow/resources/api-workflows.md +58 -0
  98. package/skills/oma-dev-workflow/resources/database-patterns.md +107 -0
  99. package/skills/oma-dev-workflow/resources/i18n-patterns.md +63 -0
  100. package/skills/oma-dev-workflow/resources/release-coordination.md +240 -0
  101. package/skills/oma-dev-workflow/resources/tooling-profiles.md +217 -0
  102. package/skills/oma-dev-workflow/resources/troubleshooting.md +78 -0
  103. package/skills/oma-dev-workflow/resources/validation-pipeline.md +246 -0
  104. package/skills/oma-docs/SKILL.md +77 -0
  105. package/skills/oma-docs/resources/commands.md +76 -0
  106. package/skills/oma-explanation/SKILL.md +212 -0
  107. package/skills/oma-explanation/resources/document-structure.md +115 -0
  108. package/skills/oma-explanation/resources/draft-format.md +199 -0
  109. package/skills/oma-explanation/resources/html-contract.md +102 -0
  110. package/skills/oma-frontend/SKILL.md +227 -0
  111. package/skills/oma-frontend/resources/angular-rules.md +110 -0
  112. package/skills/oma-frontend/resources/checklist.md +76 -0
  113. package/skills/oma-frontend/resources/error-playbook.md +125 -0
  114. package/skills/oma-frontend/resources/execution-protocol.md +46 -0
  115. package/skills/oma-frontend/resources/snippets.md +354 -0
  116. package/skills/oma-frontend/resources/specialized-visual-implementation.md +193 -0
  117. package/skills/oma-frontend/resources/tailwind-rules.md +83 -0
  118. package/skills/oma-frontend/resources/tech-stack.md +156 -0
  119. package/skills/oma-hwp/SKILL.md +166 -0
  120. package/skills/oma-hwp/config/hwp-config.yaml +35 -0
  121. package/skills/oma-hwp/resources/balanced-tables.ts +39 -0
  122. package/skills/oma-hwp/resources/execution-protocol.md +145 -0
  123. package/skills/oma-hwp/resources/flatten-tables.ts +101 -0
  124. package/skills/oma-hwp/resources/package.json +13 -0
  125. package/skills/oma-hwp/resources/troubleshooting.md +70 -0
  126. package/skills/oma-hwp/resources/tsconfig.json +10 -0
  127. package/skills/oma-hwp/resources/turndown-plugin-gfm.d.ts +9 -0
  128. package/skills/oma-image/SKILL.md +142 -0
  129. package/skills/oma-image/config/image-config.yaml +70 -0
  130. package/skills/oma-image/resources/checklist.md +18 -0
  131. package/skills/oma-image/resources/execution-protocol.md +117 -0
  132. package/skills/oma-image/resources/invocation.md +105 -0
  133. package/skills/oma-image/resources/prompt-tips.md +71 -0
  134. package/skills/oma-image/resources/vendor-matrix.md +90 -0
  135. package/skills/oma-market/SKILL.md +142 -0
  136. package/skills/oma-market/resources/checklist.md +12 -0
  137. package/skills/oma-market/resources/error-playbook.md +12 -0
  138. package/skills/oma-market/resources/execution-protocol.md +60 -0
  139. package/skills/oma-market/resources/frameworks/pestel.md +101 -0
  140. package/skills/oma-market/resources/frameworks/porters-5f.md +90 -0
  141. package/skills/oma-market/resources/frameworks/swot.md +61 -0
  142. package/skills/oma-market/resources/intent-rules.md +35 -0
  143. package/skills/oma-market/resources/output-laws.md +53 -0
  144. package/skills/oma-mobile/SKILL.md +168 -0
  145. package/skills/oma-mobile/resources/checklist.md +77 -0
  146. package/skills/oma-mobile/resources/error-playbook.md +198 -0
  147. package/skills/oma-mobile/resources/execution-protocol.md +47 -0
  148. package/skills/oma-mobile/resources/screen-template.dart +331 -0
  149. package/skills/oma-mobile/resources/screen-template.swift +239 -0
  150. package/skills/oma-mobile/resources/screen-template.tsx +179 -0
  151. package/skills/oma-mobile/resources/tech-stack.md +69 -0
  152. package/skills/oma-mobile/variants/README.md +45 -0
  153. package/skills/oma-mobile/variants/flutter/api-template.dart +461 -0
  154. package/skills/oma-mobile/variants/flutter/snippets.md +1353 -0
  155. package/skills/oma-mobile/variants/flutter/stack.yaml +21 -0
  156. package/skills/oma-mobile/variants/flutter/tech-stack.md +201 -0
  157. package/skills/oma-mobile/variants/kotlin-android/api-template.kt +182 -0
  158. package/skills/oma-mobile/variants/kotlin-android/snippets.md +871 -0
  159. package/skills/oma-mobile/variants/kotlin-android/stack.yaml +32 -0
  160. package/skills/oma-mobile/variants/kotlin-android/tech-stack.md +159 -0
  161. package/skills/oma-mobile/variants/react-native/api-template.ts +531 -0
  162. package/skills/oma-mobile/variants/react-native/snippets.md +1014 -0
  163. package/skills/oma-mobile/variants/react-native/stack.yaml +22 -0
  164. package/skills/oma-mobile/variants/react-native/tech-stack.md +192 -0
  165. package/skills/oma-mobile/variants/stack.schema.json +68 -0
  166. package/skills/oma-mobile/variants/swift-ios/api-template.swift +165 -0
  167. package/skills/oma-mobile/variants/swift-ios/snippets.md +1028 -0
  168. package/skills/oma-mobile/variants/swift-ios/stack.yaml +25 -0
  169. package/skills/oma-mobile/variants/swift-ios/tech-stack.md +174 -0
  170. package/skills/oma-observability/SKILL.md +225 -0
  171. package/skills/oma-observability/resources/anti-patterns.md +555 -0
  172. package/skills/oma-observability/resources/boundaries/cross-application.md +348 -0
  173. package/skills/oma-observability/resources/boundaries/multi-tenant.md +290 -0
  174. package/skills/oma-observability/resources/boundaries/release.md +372 -0
  175. package/skills/oma-observability/resources/boundaries/slo.md +225 -0
  176. package/skills/oma-observability/resources/checklist.md +123 -0
  177. package/skills/oma-observability/resources/examples.md +448 -0
  178. package/skills/oma-observability/resources/execution-protocol.md +166 -0
  179. package/skills/oma-observability/resources/incident-forensics.md +348 -0
  180. package/skills/oma-observability/resources/intent-rules.md +307 -0
  181. package/skills/oma-observability/resources/layers/L3-network.md +281 -0
  182. package/skills/oma-observability/resources/layers/L4-transport.md +299 -0
  183. package/skills/oma-observability/resources/layers/L7-application/crash-analytics.md +359 -0
  184. package/skills/oma-observability/resources/layers/L7-application/mobile-rum.md +278 -0
  185. package/skills/oma-observability/resources/layers/L7-application/waf.md +246 -0
  186. package/skills/oma-observability/resources/layers/L7-application/web-rum.md +350 -0
  187. package/skills/oma-observability/resources/layers/mesh.md +368 -0
  188. package/skills/oma-observability/resources/matrix.md +177 -0
  189. package/skills/oma-observability/resources/meta-observability.md +605 -0
  190. package/skills/oma-observability/resources/observability-as-code.md +666 -0
  191. package/skills/oma-observability/resources/signals/audit.md +310 -0
  192. package/skills/oma-observability/resources/signals/cost.md +303 -0
  193. package/skills/oma-observability/resources/signals/logs.md +263 -0
  194. package/skills/oma-observability/resources/signals/metrics.md +478 -0
  195. package/skills/oma-observability/resources/signals/privacy.md +351 -0
  196. package/skills/oma-observability/resources/signals/profiles.md +245 -0
  197. package/skills/oma-observability/resources/signals/traces.md +360 -0
  198. package/skills/oma-observability/resources/standards.md +214 -0
  199. package/skills/oma-observability/resources/transport/collector-topology.md +308 -0
  200. package/skills/oma-observability/resources/transport/otlp-grpc-vs-http.md +256 -0
  201. package/skills/oma-observability/resources/transport/sampling-recipes.md +297 -0
  202. package/skills/oma-observability/resources/transport/udp-statsd-mtu.md +167 -0
  203. package/skills/oma-observability/resources/vendor-categories.md +352 -0
  204. package/skills/oma-orchestration/SKILL.md +302 -0
  205. package/skills/oma-orchestration/config/cli-config.yaml +92 -0
  206. package/skills/oma-orchestration/resources/memory-schema.md +232 -0
  207. package/skills/oma-orchestration/resources/subagent-prompt-template.md +30 -0
  208. package/skills/oma-orchestration/scripts/parallel-run.sh +6 -0
  209. package/skills/oma-orchestration/scripts/spawn-agent.sh +5 -0
  210. package/skills/oma-orchestration/scripts/verify.sh +20 -0
  211. package/skills/oma-orchestration/templates/backend-task.md +19 -0
  212. package/skills/oma-orchestration/templates/debug-task.md +16 -0
  213. package/skills/oma-orchestration/templates/frontend-task.md +18 -0
  214. package/skills/oma-orchestration/templates/mobile-task.md +18 -0
  215. package/skills/oma-orchestration/templates/qa-task.md +16 -0
  216. package/skills/oma-orchestration/templates/tasks-example.yaml +15 -0
  217. package/skills/oma-pdf/SKILL.md +162 -0
  218. package/skills/oma-pdf/config/pdf-config.yaml +27 -0
  219. package/skills/oma-pdf/resources/execution-protocol.md +127 -0
  220. package/skills/oma-pm/SKILL.md +157 -0
  221. package/skills/oma-pm/resources/error-playbook.md +75 -0
  222. package/skills/oma-pm/resources/examples.md +439 -0
  223. package/skills/oma-pm/resources/execution-protocol.md +62 -0
  224. package/skills/oma-pm/resources/iso-planning.md +110 -0
  225. package/skills/oma-pm/resources/plan-phase-protocol.md +66 -0
  226. package/skills/oma-pm/resources/task-template.json +86 -0
  227. package/skills/oma-qa/SKILL.md +141 -0
  228. package/skills/oma-qa/resources/checklist.md +339 -0
  229. package/skills/oma-qa/resources/error-playbook.md +98 -0
  230. package/skills/oma-qa/resources/execution-protocol.md +169 -0
  231. package/skills/oma-qa/resources/iso-quality.md +82 -0
  232. package/skills/oma-qa/resources/verify-ship-protocol.md +116 -0
  233. package/skills/oma-recap/SKILL.md +245 -0
  234. package/skills/oma-recap/resources/output-formats.md +83 -0
  235. package/skills/oma-refactor/SKILL.md +184 -0
  236. package/skills/oma-refactor/resources/definition.md +108 -0
  237. package/skills/oma-refactor/resources/governance.md +33 -0
  238. package/skills/oma-refactor/resources/hotspots.py +44 -0
  239. package/skills/oma-refactor/resources/measurement.md +93 -0
  240. package/skills/oma-scholar/SKILL.md +276 -0
  241. package/skills/oma-scholar/config/scholar-config.yaml +79 -0
  242. package/skills/oma-scholar/resources/api-endpoints.md +174 -0
  243. package/skills/oma-scholar/resources/checklist.md +92 -0
  244. package/skills/oma-scholar/resources/execution-protocol.md +224 -0
  245. package/skills/oma-scholar/resources/fallback-providers.md +143 -0
  246. package/skills/oma-scholar/resources/setup-openalex.md +85 -0
  247. package/skills/oma-scholar/resources/sidecar-spec.md +341 -0
  248. package/skills/oma-scholar/resources/upstream-spec-cache.md +972 -0
  249. package/skills/oma-scm/SKILL.md +103 -0
  250. package/skills/oma-scm/resources/cm-operations.md +56 -0
  251. package/skills/oma-scm/resources/codeowners-playbook.md +45 -0
  252. package/skills/oma-scm/resources/conventional-commits.md +108 -0
  253. package/skills/oma-scm/resources/merge-risk.md +76 -0
  254. package/skills/oma-scm/resources/onboarding-risk-signals.md +71 -0
  255. package/skills/oma-search/SKILL.md +125 -0
  256. package/skills/oma-search/resources/checklist.md +36 -0
  257. package/skills/oma-search/resources/error-playbook.md +66 -0
  258. package/skills/oma-search/resources/examples.md +80 -0
  259. package/skills/oma-search/resources/execution-protocol.md +86 -0
  260. package/skills/oma-search/resources/intent-rules.md +47 -0
  261. package/skills/oma-search/resources/trust-registry.md +53 -0
  262. package/skills/oma-security/SKILL.md +172 -0
  263. package/skills/oma-security/resources/artex.md +108 -0
  264. package/skills/oma-security/resources/ci.md +134 -0
  265. package/skills/oma-security/resources/cisco-source.md +108 -0
  266. package/skills/oma-security/resources/deepsec-config.md +45 -0
  267. package/skills/oma-security/resources/deepsec-matchers.md +35 -0
  268. package/skills/oma-security/resources/deepsec-scanning.md +45 -0
  269. package/skills/oma-security/resources/deepsec-setup.md +41 -0
  270. package/skills/oma-security/resources/findings-contract.md +408 -0
  271. package/skills/oma-security/resources/mcp-scanning.md +122 -0
  272. package/skills/oma-security/resources/skill-scanning.md +106 -0
  273. package/skills/oma-security/resources/validation.md +71 -0
  274. package/skills/oma-skill-creation/SKILL.md +84 -0
  275. package/skills/oma-skill-creation/resources/prompt-evaluation.md +36 -0
  276. package/skills/oma-skill-creation/resources/ssl-lite-template.md +108 -0
  277. package/skills/oma-skill-creation/resources/validation-checklist.md +101 -0
  278. package/skills/oma-slide/SKILL.md +277 -0
  279. package/skills/oma-slide/resources/animation-patterns.md +245 -0
  280. package/skills/oma-slide/resources/assets/deck-stage.js +514 -0
  281. package/skills/oma-slide/resources/assets/viewport-base.css +257 -0
  282. package/skills/oma-slide/resources/canva-integration.md +203 -0
  283. package/skills/oma-slide/resources/checklist.md +46 -0
  284. package/skills/oma-slide/resources/design-doctrine.md +260 -0
  285. package/skills/oma-slide/resources/fixed-stage.md +232 -0
  286. package/skills/oma-slide/resources/generation-protocol.md +393 -0
  287. package/skills/oma-slide/resources/native-pptx.md +84 -0
  288. package/skills/oma-slide/resources/selection-index.json +461 -0
  289. package/skills/oma-slide/resources/style-presets.LICENSE +10 -0
  290. package/skills/oma-slide/resources/style-presets.md +520 -0
  291. package/skills/oma-tf-infra/SKILL.md +201 -0
  292. package/skills/oma-tf-infra/resources/checklist.md +53 -0
  293. package/skills/oma-tf-infra/resources/cost-optimization.md +574 -0
  294. package/skills/oma-tf-infra/resources/error-playbook.md +68 -0
  295. package/skills/oma-tf-infra/resources/examples.md +38 -0
  296. package/skills/oma-tf-infra/resources/execution-protocol.md +129 -0
  297. package/skills/oma-tf-infra/resources/iso-42001-infra.md +229 -0
  298. package/skills/oma-tf-infra/resources/multi-cloud-examples.md +241 -0
  299. package/skills/oma-tf-infra/resources/policy-testing-examples.md +332 -0
  300. package/skills/oma-translation/SKILL.md +229 -0
  301. package/skills/oma-translation/resources/anti-ai-patterns.md +104 -0
  302. package/skills/oma-translation/resources/lang/_template.md +73 -0
  303. package/skills/oma-translation/resources/lang/en.md +123 -0
  304. package/skills/oma-translation/resources/lang/ja.md +274 -0
  305. package/skills/oma-translation/resources/lang/ko.md +228 -0
  306. package/skills/oma-translation/resources/lang/zh.md +285 -0
  307. package/skills/oma-translation/resources/style-skills.md +104 -0
  308. package/skills/oma-translation/resources/translation-rubric.md +126 -0
  309. package/skills/oma-video/SKILL.md +229 -0
  310. package/skills/oma-video/config/video-config.yaml +60 -0
  311. package/skills/oma-video/resources/checklist.md +26 -0
  312. package/skills/oma-video/resources/execution-protocol.md +122 -0
  313. package/skills/oma-video/resources/existing-media.md +185 -0
  314. package/skills/oma-video/resources/hyperframes-authoring/README.md +44 -0
  315. package/skills/oma-video/resources/hyperframes-authoring/demo.md +31 -0
  316. package/skills/oma-video/resources/hyperframes-authoring/explainer.md +10 -0
  317. package/skills/oma-video/resources/hyperframes-authoring/shorts.md +10 -0
  318. package/skills/oma-video/resources/motion-principles.md +81 -0
  319. package/skills/oma-video/resources/mpt/driver.py +301 -0
  320. package/skills/oma-video/resources/prompt-tips.md +75 -0
  321. package/skills/oma-video/resources/script-schema.md +81 -0
  322. package/skills/oma-video/resources/sound-design.md +127 -0
  323. package/skills/oma-video/resources/strudel/package.json +11 -0
  324. package/skills/oma-video/resources/strudel/page.html +87 -0
  325. package/skills/oma-video/resources/strudel/render.mjs +295 -0
  326. package/skills/oma-video/resources/vendor-matrix.md +124 -0
  327. package/skills/oma-voice/SKILL.md +249 -0
  328. package/skills/oma-voice/config/voice-config.yaml +30 -0
  329. package/skills/oma-voice/resources/audio-processing.md +119 -0
  330. package/skills/oma-voice/resources/checklist.md +47 -0
  331. package/skills/oma-voice/resources/execution-protocol.md +215 -0
  332. package/skills/oma-voice/resources/prompt-tips.md +43 -0
  333. package/skills/oma-voice/resources/voice-matrix.md +51 -0
  334. package/skills/oma-voice/resources/voicestudio.md +87 -0
@@ -0,0 +1,32 @@
1
+ # yaml-language-server: $schema=../stack.schema.json
2
+ language: kotlin
3
+ framework: android
4
+ ui: compose
5
+ state: viewmodel-stateflow
6
+ navigation: navigation-compose
7
+ di: hilt
8
+ # Ktor Client is an engine-agnostic HTTP API, not a replacement for OkHttp.
9
+ # The app module plugs in the OkHttp engine (`ktor-client-okhttp`); unit and
10
+ # contract tests plug in `ktor-client-mock`. Generated API code sees only the
11
+ # Ktor API and never the engine, which is what makes the two swappable.
12
+ http_client: ktor-client
13
+ serialization: kotlinx-serialization
14
+ local_storage: room
15
+ # `org.openapi.generator` Gradle plugin with generatorName=kotlin, library=jvm-ktor.
16
+ api_generator: openapi-generator
17
+ api_spec: api/openapi.json
18
+ response_cache: room-repository
19
+ structure: app/{ui,data,di},api-client
20
+ source: variant
21
+
22
+ verify:
23
+ detect: settings.gradle.kts
24
+ syntax:
25
+ # Non-compiling lint pass. `./gradlew compileDebugKotlin` is a build and
26
+ # must not be the default; /stack-set swaps in the project's own check.
27
+ cmd: "ktlint"
28
+ skip_if_missing: ktlint
29
+ tests:
30
+ cmd: "./gradlew --console=plain :app:testDebugUnitTest :api-client:test"
31
+ pass_signal: "BUILD SUCCESSFUL"
32
+ skip_if_missing: java
@@ -0,0 +1,159 @@
1
+ # Mobile Agent - Tech Stack Reference (Kotlin Android Native)
2
+
3
+ Starter reference for the selected platform. Preserve existing project choices. The caching implementation below applies only when caching is required; do not add it for an unrelated screen or composable change.
4
+
5
+ ## Framework: Jetpack Compose + Material 3
6
+
7
+ - **Language**: Kotlin 2.1+ floor (K2 compiler), JDK 17 toolchain
8
+ - **UI Framework**: Jetpack Compose via the Compose BOM; Material 3 components
9
+ - **State Management**: `ViewModel` + `StateFlow` (`androidx.lifecycle:lifecycle-viewmodel-compose`), collected with `collectAsStateWithLifecycle`
10
+ - **Dependency Injection**: Hilt (`@HiltAndroidApp`, `@AndroidEntryPoint`, `@HiltViewModel`); KSP processor preferred, kapt acceptable on existing projects
11
+ - **Concurrency**: Kotlin coroutines + `Flow`; `viewModelScope` owns every network call
12
+ - **Minimum SDK**: API 26 (Android 8.0); `compileSdk`/`targetSdk` track the latest stable
13
+ - **Tooling**: Gradle Kotlin DSL (`*.gradle.kts`), Android Gradle Plugin 8.x, Compose compiler plugin (`org.jetbrains.kotlin.plugin.compose`)
14
+
15
+ A `@HiltViewModel` exposes a single immutable `UiState` through `StateFlow`; composables never hold business state. `collectAsStateWithLifecycle` stops collection when the screen leaves `STARTED`, so no manual lifecycle plumbing is needed.
16
+
17
+ ## API Client: OpenAPI Generator (`kotlin` / `jvm-ktor`)
18
+
19
+ | Component | Artifact |
20
+ |-----------|----------|
21
+ | Code generator | Gradle plugin `org.openapi.generator` (pin an exact 7.x version) |
22
+ | Generator target | `generatorName = "kotlin"`, `library = "jvm-ktor"` |
23
+ | Serialization option | `serializationLibrary = "kotlinx_serialization"` |
24
+ | HTTP API the generated code calls | `io.ktor:ktor-client-core` |
25
+ | HTTP engine on device | `io.ktor:ktor-client-okhttp` |
26
+ | HTTP engine in tests | `io.ktor:ktor-client-mock` |
27
+ | JSON | `io.ktor:ktor-client-content-negotiation` + `io.ktor:ktor-serialization-kotlinx-json` + `org.jetbrains.kotlinx:kotlinx-serialization-json` |
28
+
29
+ The generated API classes (`*Api` per OpenAPI tag, `DefaultApi` when the spec has no tags) are the **only** way to call the backend; never hand-assemble URL paths or JSON bodies for endpoints covered by the spec. **Regenerate, don't hand-edit** generated sources — they live under `build/generated/openapi` and are never committed.
30
+
31
+ ### Ktor is a layer, not an engine
32
+
33
+ Ktor Client is an engine-agnostic API. The generated client depends only on `ktor-client-core`; the engine that performs socket I/O is a plug-in chosen by the module that constructs the client:
34
+
35
+ ```
36
+ Generated *Api (camp.example.generated.api)
37
+ → Ktor HttpClient (core + ContentNegotiation + kotlinx-json)
38
+ → engine: OkHttp (app module) | MockEngine (tests)
39
+ → network
40
+ ```
41
+
42
+ OkHttp is the default Android engine because it brings HTTP/2, connection pooling, and a mature interceptor ecosystem. `ktor-client-android` and `ktor-client-cio` are valid alternatives when a project already standardises on them; keep whatever the project uses. Because the engine is injected, the same generated code is exercised in unit tests with `MockEngine` and no network.
43
+
44
+ ### Gradle wiring (two-module layout)
45
+
46
+ | Module | Role |
47
+ |--------|------|
48
+ | `:app` | Android application. Owns the `openApiGenerate` task; `preBuild` depends on it so generation always precedes compilation. Provides the Ktor client with the OkHttp engine through a Hilt module. |
49
+ | `:api-client` | Plain JVM Kotlin module. Adds `../app/build/generated/openapi/src/main/kotlin` as a `srcDir`, depends on `:app:openApiGenerate`, and hosts the shared `Json` codec plus contract tests that run against `MockEngine`. |
50
+
51
+ Keeping the contract tests in a JVM module means they run with `./gradlew :api-client:test` and no Android emulator.
52
+
53
+ ### Generator options that matter
54
+
55
+ - `apiPackage`, `modelPackage`, `invokerPackage` — fix the package names so app code imports stable symbols (`…generated.api`, `…generated.model`, `…generated.infrastructure`).
56
+ - `dateLibrary = "string"` — keep dates as ISO strings at the boundary and parse them in the repository; avoids pulling `java.time` serializers into every DTO.
57
+ - `enumPropertyNaming = "UPPERCASE"` — enum constants read as Kotlin constants.
58
+ - `schemaMappings` — OpenAPI primitive unions (`anyOf: [string, number, boolean]`) otherwise generate empty classes or `Any`. Map them to `kotlinx.serialization.json.JsonPrimitive` so `true` stays `true` on the wire instead of `{}`.
59
+ - `globalProperties` `apiDocs=false`, `modelDocs=false`, `apiTests=false`, `modelTests=false` — do not generate Markdown docs or placeholder tests into the build tree.
60
+
61
+ > **BigDecimal gotcha.** The `jvm-ktor` generator marks OpenAPI `number` fields `@Contextual BigDecimal`. kotlinx-serialization has no built-in `BigDecimal` serializer, so the shared `Json` codec must register one in its `serializersModule` (see `snippets.md` §2). Without it the first decode of a decimal field throws at runtime, not at compile time.
62
+
63
+ ### Where the API contract comes from
64
+
65
+ The backend owns the contract; the Android app is purely a **consumer** and never edits the spec. The spec is produced upstream (FastAPI, NestJS Swagger, or hand-maintained) and committed where both sides can read it (`api/openapi.json` in a monorepo). A backend check task (`export_openapi.py --check` or equivalent) keeps the committed file honest, and `openApiGenerate` reads it by path, so breaking schema changes surface as Kotlin compile errors after regeneration, not at runtime.
66
+
67
+ ## Response Cache: Room repository (stale-while-revalidate)
68
+
69
+ | Component | Artifact |
70
+ |-----------|----------|
71
+ | Local relational cache | `androidx.room:room-runtime` + `room-ktx` (KSP compiler) |
72
+
73
+ When response caching is required, implement it at the Repository layer, backed by a Room table that stores **decoded domain models**, never raw bytes. The cache sits between the `ViewModel` and the generated `*Api`; it is never a Ktor plugin or an OkHttp interceptor.
74
+
75
+ **Placement rule — Repository layer, not transport.** Do **not** add OkHttp's `Cache` or a Ktor `HttpCache` plugin as the system of record for domain reads: they key on URLs and headers, are invisible to the domain, and cannot be asserted in business-logic tests. Cache the typed result *after* the generated call returns instead.
76
+
77
+ ```
78
+ @HiltViewModel ViewModel
79
+ | collects Flow<UiState>
80
+ v
81
+ Repository ──reads/writes──► Room DAO (decoded entities, explicit TTL)
82
+ | on miss / revalidate
83
+ v
84
+ Generated *Api → Ktor HttpClient → OkHttp → Backend
85
+ ```
86
+
87
+ **Mandatory rules:**
88
+
89
+ 1. Every read endpoint goes through a repository `Flow` that emits the Room rows first (instant render), then revalidates from the network and upserts, letting Room's reactive query re-emit.
90
+ 2. Cache **key** = operation + stable params (`"listTodos"`, `"getTodo:$id"`), stored alongside a `fetchedAt` column. Never key on URLs.
91
+ 3. Explicit TTL per resource; a stale row is served immediately and triggers revalidation. No implicit infinite TTL.
92
+ 4. Every **write** (`POST`/`PATCH`/`DELETE`) upserts or deletes the affected rows after the server confirms, so the next read repopulates without a separate round-trip.
93
+ 5. Room cache is for transient, server-owned data. **Durable, user-owned** state (drafts, offline records) lives in its own Room tables as the system of record; **secrets** live in Keystore-backed storage. Never use the cache table as a system of record.
94
+
95
+ See `snippets.md` §8 for the canonical cached repository.
96
+
97
+ ## Local Storage
98
+
99
+ - **Room** — relational persistence; the response cache (above) and durable user-owned data in separate tables.
100
+ - **DataStore (Preferences / Proto)** — typed key-value preferences; replaces `SharedPreferences`.
101
+ - **Keystore-backed storage** — tokens and credentials via `EncryptedSharedPreferences` (security-crypto) or a `DataStore` encrypted with an Android Keystore key. Never plain `SharedPreferences`.
102
+
103
+ ## Testing
104
+
105
+ | Layer | Framework |
106
+ |-------|-----------|
107
+ | Unit (repository, view model) | JUnit 4/5 + `kotlinx-coroutines-test` (`runTest`) + Turbine for `Flow` assertions |
108
+ | Generated-client contract | `ktor-client-mock` `MockEngine` in `:api-client` (no network, no Android) |
109
+ | Compose UI | `androidx.compose.ui:ui-test-junit4` + `createAndroidComposeRule` |
110
+ | E2E | Maestro flows for critical user journeys |
111
+
112
+ Run unit and contract tests with `./gradlew :app:testDebugUnitTest :api-client:test`; the CI pass signal is `BUILD SUCCESSFUL`. These tasks compile Kotlin, so under the execution policy run them only when the user has authorised test execution or a build.
113
+
114
+ ## Project Layout: `app/{ui,data,di}` + `api-client`
115
+
116
+ Group by **feature inside `ui/`, by responsibility inside `data/`**. The same feature-first principle the Frontend and Swift variants apply: feature slices own their screen and view model, repositories are shared, and generated code is never imported by composables.
117
+
118
+ ```
119
+ <project>/
120
+ ├── settings.gradle.kts # include(":app", ":api-client")
121
+ ├── build.gradle.kts # plugin versions, apply false
122
+ ├── api-client/ # JVM module: generated srcDir + shared Json codec + contract tests
123
+ │ ├── build.gradle.kts
124
+ │ └── src/{main,test}/kotlin/<pkg>/client/
125
+ └── app/
126
+ ├── build.gradle.kts # android {}, openApiGenerate {}, preBuild dependsOn
127
+ └── src/main/java/<pkg>/
128
+ ├── <App>Application.kt # @HiltAndroidApp
129
+ ├── MainActivity.kt # @AndroidEntryPoint, setContent { AppNavHost() }
130
+ ├── di/ # Hilt modules: NetworkModule (Ktor+OkHttp → *Api), DatabaseModule (Room)
131
+ ├── data/ # repositories, Room entities/DAOs, DTO→domain mappers, failures
132
+ └── ui/
133
+ ├── navigation/ # @Serializable routes + NavHost
134
+ ├── theme/ # Material 3 theme, color scheme, typography
135
+ ├── components/ # stateless reusable composables
136
+ └── <feature>/ # <Feature>Screen.kt + <Feature>ViewModel.kt + UiState
137
+ ```
138
+
139
+ **Dependency direction:**
140
+
141
+ ```
142
+ ui/<feature> ──→ data ──→ generated *Api (via :api-client)
143
+ ui/<feature> never imports another feature or the generated model package.
144
+ di/ assembles everything; nothing imports di/.
145
+ ```
146
+
147
+ **Scaling beyond folders.** Promote `data/` and stable `ui/<feature>` slices to Gradle library modules (`:core:data`, `:feature:<name>`) when build time or ownership boundaries demand it. Reach for modules before inventing deeper package hierarchies.
148
+
149
+ ## Naming Conventions
150
+
151
+ 1. **Types `PascalCase`, members `camelCase`, one primary type per file**; filename = that type (`TodoViewModel.kt` → `TodoViewModel`).
152
+ 2. **Composable functions are `PascalCase` nouns** (`TodoListScreen`, `TodoRow`); state holders end in `UiState`; one-shot events are modelled as state, not channels, unless the project already uses an event bus.
153
+ 3. **Generated symbols stay in their generated package.** Map `…generated.model.Todo` to a domain `Todo` in `data/` when UI needs stability across spec changes; otherwise expose the generated model directly and accept the coupling consciously.
154
+ 4. **No grab-bag names** (`Utils.kt`, `Helpers.kt`) and no version suffixes (`*V2`, `*Old`) — git owns history.
155
+ 5. **Hilt modules are named by what they provide** (`NetworkModule`, `DatabaseModule`), installed in `SingletonComponent` unless a narrower scope is required.
156
+
157
+ ## Navigation: Navigation Compose with type-safe routes
158
+
159
+ Routes are `@Serializable` objects/data classes passed to `NavHost` (`composable<Route>`), not string templates. Arguments arrive typed through `toRoute<Route>()`. Navigation lives in `ui/navigation/`; screens receive callbacks (`onOpenDetail: (String) -> Unit`) and never hold a `NavController`, which keeps every screen previewable and testable in isolation. Predictive back is enabled in the manifest (`android:enableOnBackInvokedCallback="true"`) and handled by the `NavHost`, not per screen.