cokit-cli 1.0.1 → 1.0.3

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 (564) hide show
  1. package/AGENTS.md +103 -0
  2. package/README.FLOW.md +237 -0
  3. package/README.md +153 -94
  4. package/agents/brainstormer.agent.md +71 -0
  5. package/agents/code-reviewer.agent.md +128 -0
  6. package/agents/database-admin.agent.md +91 -0
  7. package/agents/debugger.agent.md +128 -0
  8. package/agents/docs-manager.agent.md +121 -0
  9. package/agents/fullstack-developer.agent.md +96 -0
  10. package/agents/git-manager.agent.md +392 -0
  11. package/agents/mcp-manager.agent.md +93 -0
  12. package/agents/planner.agent.md +94 -0
  13. package/agents/project-manager.agent.md +124 -0
  14. package/agents/researcher.agent.md +32 -0
  15. package/agents/scout-external.agent.md +141 -0
  16. package/agents/scout.agent.md +107 -0
  17. package/agents/tester.agent.md +106 -0
  18. package/agents/ui-ux-designer.agent.md +225 -0
  19. package/collections/ck-core.collection.yml +30 -0
  20. package/collections/ck-development-rules.collection.yml +18 -0
  21. package/collections/ck-documentation.collection.yml +18 -0
  22. package/collections/ck-git-workflow.collection.yml +18 -0
  23. package/collections/ck-orchestration.collection.yml +22 -0
  24. package/collections/ck-ui-design.collection.yml +18 -0
  25. package/docs/README.md +85 -0
  26. package/docs/copilot-processing-flow.md +128 -0
  27. package/instructions/ck-backend.instructions.md +48 -0
  28. package/instructions/ck-development.instructions.md +40 -0
  29. package/instructions/ck-frontend-design-pro.instructions.md +58 -0
  30. package/instructions/ck-frontend.instructions.md +44 -0
  31. package/instructions/ck-google-adk-python.instructions.md +242 -0
  32. package/instructions/ck-research.instructions.md +167 -0
  33. package/instructions/ck-testing.instructions.md +36 -0
  34. package/package.json +9 -2
  35. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-01-restructure-folders.md +183 -0
  36. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-02-convert-agents.md +206 -0
  37. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-03-convert-commands-to-prompts.md +284 -0
  38. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-04-convert-skills-to-instructions.md +349 -0
  39. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-05-create-collections.md +320 -0
  40. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-06-update-cli-build-scripts.md +450 -0
  41. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-07-update-documentation.md +407 -0
  42. package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/plan.md +136 -0
  43. package/prompts/ck-ask.prompt.md +57 -0
  44. package/prompts/ck-bootstrap-auto-fast.prompt.md +108 -0
  45. package/prompts/ck-bootstrap-auto-parallel.prompt.md +66 -0
  46. package/prompts/ck-bootstrap-auto.prompt.md +114 -0
  47. package/prompts/ck-bootstrap.prompt.md +136 -0
  48. package/prompts/ck-brainstorm.prompt.md +68 -0
  49. package/prompts/ck-ck-help.prompt.md +114 -0
  50. package/prompts/ck-code-auto.prompt.md +171 -0
  51. package/prompts/ck-code-no-test.prompt.md +159 -0
  52. package/prompts/ck-code-parallel.prompt.md +56 -0
  53. package/prompts/ck-code.prompt.md +177 -0
  54. package/prompts/ck-coding-level.prompt.md +54 -0
  55. package/prompts/ck-cook-auto-fast.prompt.md +26 -0
  56. package/prompts/ck-cook-auto-parallel.prompt.md +49 -0
  57. package/prompts/ck-cook-auto.prompt.md +15 -0
  58. package/prompts/ck-cook.prompt.md +96 -0
  59. package/prompts/ck-debug.prompt.md +14 -0
  60. package/prompts/ck-design-3d.prompt.md +84 -0
  61. package/prompts/ck-design-describe.prompt.md +24 -0
  62. package/prompts/ck-design-fast.prompt.md +32 -0
  63. package/prompts/ck-design-good.prompt.md +36 -0
  64. package/prompts/ck-design-screenshot.prompt.md +35 -0
  65. package/prompts/ck-design-video.prompt.md +35 -0
  66. package/prompts/ck-docs-init.prompt.md +27 -0
  67. package/prompts/ck-docs-summarize.prompt.md +23 -0
  68. package/prompts/ck-docs-update.prompt.md +36 -0
  69. package/prompts/ck-fix-ci.prompt.md +18 -0
  70. package/prompts/ck-fix-fast.prompt.md +18 -0
  71. package/prompts/ck-fix-hard.prompt.md +36 -0
  72. package/prompts/ck-fix-logs.prompt.md +27 -0
  73. package/prompts/ck-fix-parallel.prompt.md +54 -0
  74. package/prompts/ck-fix-test.prompt.md +19 -0
  75. package/prompts/ck-fix-types.prompt.md +11 -0
  76. package/prompts/ck-fix-ui.prompt.md +49 -0
  77. package/prompts/ck-fix.prompt.md +44 -0
  78. package/prompts/ck-git-cm.prompt.md +8 -0
  79. package/prompts/ck-git-cp.prompt.md +7 -0
  80. package/prompts/ck-git-merge.prompt.md +41 -0
  81. package/prompts/ck-git-pr.prompt.md +49 -0
  82. package/prompts/ck-kanban.prompt.md +77 -0
  83. package/prompts/ck-plan-archive.prompt.md +58 -0
  84. package/prompts/ck-plan-ci.prompt.md +34 -0
  85. package/prompts/ck-plan-cro.prompt.md +66 -0
  86. package/prompts/ck-plan-fast.prompt.md +67 -0
  87. package/prompts/ck-plan-hard.prompt.md +89 -0
  88. package/prompts/ck-plan-parallel.prompt.md +126 -0
  89. package/prompts/ck-plan-two.prompt.md +43 -0
  90. package/prompts/ck-plan-validate.prompt.md +118 -0
  91. package/prompts/ck-plan.prompt.md +29 -1
  92. package/prompts/ck-preview.prompt.md +65 -0
  93. package/prompts/ck-review-codebase.prompt.md +44 -0
  94. package/prompts/ck-scout-ext.prompt.md +35 -0
  95. package/prompts/ck-scout.prompt.md +25 -0
  96. package/prompts/ck-skill-add.prompt.md +36 -0
  97. package/prompts/ck-skill-create.prompt.md +29 -0
  98. package/prompts/ck-skill-fix-logs.prompt.md +22 -0
  99. package/prompts/ck-skill-optimize-auto.prompt.md +25 -0
  100. package/prompts/ck-skill-optimize.prompt.md +34 -0
  101. package/prompts/ck-skill-plan.prompt.md +46 -0
  102. package/prompts/ck-test-ui.prompt.md +92 -0
  103. package/prompts/ck-test.prompt.md +10 -0
  104. package/prompts/ck-use-mcp.prompt.md +27 -0
  105. package/prompts/ck-watzup.prompt.md +11 -0
  106. package/prompts/ck-worktree.prompt.md +127 -0
  107. package/rules/README.agents.md +55 -0
  108. package/rules/README.collections.md +78 -0
  109. package/rules/README.copilot-instructions.md +66 -0
  110. package/rules/README.instructions.md +73 -0
  111. package/rules/README.md +39 -0
  112. package/rules/README.prompts.md +76 -0
  113. package/rules/README.skills.md +71 -0
  114. package/skills/ck-ai-artist/SKILL.md +73 -0
  115. package/skills/ck-ai-artist/references/advanced-techniques.md +184 -0
  116. package/skills/ck-ai-artist/references/domain-code.md +66 -0
  117. package/skills/ck-ai-artist/references/domain-data.md +72 -0
  118. package/skills/ck-ai-artist/references/domain-marketing.md +66 -0
  119. package/skills/ck-ai-artist/references/domain-patterns.md +33 -0
  120. package/skills/ck-ai-artist/references/domain-writing.md +68 -0
  121. package/skills/ck-ai-artist/references/image-prompting.md +141 -0
  122. package/skills/ck-ai-artist/references/llm-prompting.md +165 -0
  123. package/skills/ck-ai-artist/references/nano-banana.md +59 -0
  124. package/skills/ck-ai-artist/references/reasoning-techniques.md +201 -0
  125. package/skills/ck-backend-development/SKILL.md +93 -0
  126. package/skills/ck-backend-development/references/backend-api-design.md +495 -0
  127. package/skills/ck-backend-development/references/backend-architecture.md +454 -0
  128. package/skills/ck-backend-development/references/backend-authentication.md +338 -0
  129. package/skills/ck-backend-development/references/backend-code-quality.md +659 -0
  130. package/skills/ck-backend-development/references/backend-debugging.md +904 -0
  131. package/skills/ck-backend-development/references/backend-devops.md +494 -0
  132. package/skills/ck-backend-development/references/backend-mindset.md +387 -0
  133. package/skills/ck-backend-development/references/backend-performance.md +397 -0
  134. package/skills/ck-backend-development/references/backend-security.md +290 -0
  135. package/skills/ck-backend-development/references/backend-technologies.md +256 -0
  136. package/skills/ck-backend-development/references/backend-testing.md +429 -0
  137. package/skills/ck-better-auth/SKILL.md +202 -0
  138. package/skills/ck-better-auth/references/advanced-features.md +553 -0
  139. package/skills/ck-better-auth/references/database-integration.md +577 -0
  140. package/skills/ck-better-auth/references/email-password-auth.md +416 -0
  141. package/skills/ck-better-auth/references/oauth-providers.md +430 -0
  142. package/skills/ck-better-auth/scripts/.coverage +0 -0
  143. package/skills/ck-better-auth/scripts/better_auth_init.py +521 -0
  144. package/skills/ck-better-auth/scripts/requirements.txt +15 -0
  145. package/skills/ck-better-auth/scripts/tests/.coverage +0 -0
  146. package/skills/ck-better-auth/scripts/tests/test_better_auth_init.py +421 -0
  147. package/skills/ck-chrome-devtools/SKILL.md +470 -0
  148. package/skills/ck-chrome-devtools/references/cdp-domains.md +694 -0
  149. package/skills/ck-chrome-devtools/references/performance-guide.md +940 -0
  150. package/skills/ck-chrome-devtools/references/puppeteer-reference.md +953 -0
  151. package/skills/ck-chrome-devtools/scripts/README.md +272 -0
  152. package/skills/ck-chrome-devtools/scripts/__tests__/selector.test.js +210 -0
  153. package/skills/ck-chrome-devtools/scripts/aria-snapshot.js +362 -0
  154. package/skills/ck-chrome-devtools/scripts/click.js +83 -0
  155. package/skills/ck-chrome-devtools/scripts/console.js +79 -0
  156. package/skills/ck-chrome-devtools/scripts/evaluate.js +53 -0
  157. package/skills/ck-chrome-devtools/scripts/fill.js +76 -0
  158. package/skills/ck-chrome-devtools/scripts/inject-auth.js +229 -0
  159. package/skills/ck-chrome-devtools/scripts/install-deps.sh +181 -0
  160. package/skills/ck-chrome-devtools/scripts/install.sh +83 -0
  161. package/skills/ck-chrome-devtools/scripts/lib/browser.js +318 -0
  162. package/skills/ck-chrome-devtools/scripts/lib/selector.js +178 -0
  163. package/skills/ck-chrome-devtools/scripts/navigate.js +54 -0
  164. package/skills/ck-chrome-devtools/scripts/network.js +106 -0
  165. package/skills/ck-chrome-devtools/scripts/package-lock.json +1589 -0
  166. package/skills/ck-chrome-devtools/scripts/package.json +16 -0
  167. package/skills/ck-chrome-devtools/scripts/performance.js +149 -0
  168. package/skills/ck-chrome-devtools/scripts/screenshot.js +198 -0
  169. package/skills/ck-chrome-devtools/scripts/select-ref.js +131 -0
  170. package/skills/ck-chrome-devtools/scripts/snapshot.js +135 -0
  171. package/skills/ck-code-review/SKILL.md +110 -53
  172. package/skills/ck-code-review/references/code-review-reception.md +182 -49
  173. package/skills/ck-code-review/references/requesting-code-review.md +105 -0
  174. package/skills/ck-code-review/references/verification-before-completion.md +111 -58
  175. package/skills/ck-databases/SKILL.md +231 -0
  176. package/skills/ck-databases/references/mongodb-aggregation.md +447 -0
  177. package/skills/ck-databases/references/mongodb-atlas.md +465 -0
  178. package/skills/ck-databases/references/mongodb-crud.md +408 -0
  179. package/skills/ck-databases/references/mongodb-indexing.md +442 -0
  180. package/skills/ck-databases/references/postgresql-administration.md +594 -0
  181. package/skills/ck-databases/references/postgresql-performance.md +527 -0
  182. package/skills/ck-databases/references/postgresql-psql-cli.md +467 -0
  183. package/skills/ck-databases/references/postgresql-queries.md +475 -0
  184. package/skills/ck-databases/scripts/.coverage +0 -0
  185. package/skills/ck-databases/scripts/db_backup.py +502 -0
  186. package/skills/ck-databases/scripts/db_migrate.py +425 -0
  187. package/skills/ck-databases/scripts/db_performance_check.py +456 -0
  188. package/skills/ck-databases/scripts/requirements.txt +20 -0
  189. package/skills/ck-databases/scripts/tests/coverage-db.json +1 -0
  190. package/skills/ck-databases/scripts/tests/requirements.txt +4 -0
  191. package/skills/ck-databases/scripts/tests/test_db_backup.py +340 -0
  192. package/skills/ck-databases/scripts/tests/test_db_migrate.py +277 -0
  193. package/skills/ck-databases/scripts/tests/test_db_performance_check.py +370 -0
  194. package/skills/ck-debugging/SKILL.md +55 -43
  195. package/skills/ck-debugging/references/defense-in-depth.md +124 -0
  196. package/skills/ck-debugging/references/root-cause-tracing.md +100 -43
  197. package/skills/ck-debugging/references/systematic-debugging.md +80 -52
  198. package/skills/ck-debugging/references/verification.md +101 -52
  199. package/skills/ck-debugging/scripts/find-polluter.sh +63 -0
  200. package/skills/ck-debugging/scripts/find-polluter.test.md +102 -0
  201. package/skills/ck-devops/.env.example +76 -0
  202. package/skills/ck-devops/SKILL.md +283 -0
  203. package/skills/ck-devops/references/browser-rendering.md +305 -0
  204. package/skills/ck-devops/references/cloudflare-d1-kv.md +123 -0
  205. package/skills/ck-devops/references/cloudflare-platform.md +271 -0
  206. package/skills/ck-devops/references/cloudflare-r2-storage.md +280 -0
  207. package/skills/ck-devops/references/cloudflare-workers-advanced.md +312 -0
  208. package/skills/ck-devops/references/cloudflare-workers-apis.md +309 -0
  209. package/skills/ck-devops/references/cloudflare-workers-basics.md +418 -0
  210. package/skills/ck-devops/references/docker-basics.md +297 -0
  211. package/skills/ck-devops/references/docker-compose.md +292 -0
  212. package/skills/ck-devops/references/gcloud-platform.md +297 -0
  213. package/skills/ck-devops/references/gcloud-services.md +304 -0
  214. package/skills/ck-devops/scripts/cloudflare_deploy.py +269 -0
  215. package/skills/ck-devops/scripts/docker_optimize.py +331 -0
  216. package/skills/ck-devops/scripts/requirements.txt +20 -0
  217. package/skills/ck-devops/scripts/tests/requirements.txt +3 -0
  218. package/skills/ck-devops/scripts/tests/test_cloudflare_deploy.py +285 -0
  219. package/skills/ck-devops/scripts/tests/test_docker_optimize.py +436 -0
  220. package/skills/ck-docs-seeker/.env.example +15 -0
  221. package/skills/ck-docs-seeker/SKILL.md +70 -65
  222. package/skills/ck-docs-seeker/package.json +25 -0
  223. package/skills/ck-docs-seeker/references/advanced.md +79 -0
  224. package/skills/ck-docs-seeker/references/context7-patterns.md +68 -0
  225. package/skills/ck-docs-seeker/references/errors.md +68 -0
  226. package/skills/ck-docs-seeker/scripts/analyze-llms-txt.js +211 -0
  227. package/skills/ck-docs-seeker/scripts/detect-topic.js +172 -0
  228. package/skills/ck-docs-seeker/scripts/fetch-docs.js +213 -0
  229. package/skills/ck-docs-seeker/scripts/tests/run-tests.js +72 -0
  230. package/skills/ck-docs-seeker/scripts/tests/test-analyze-llms.js +119 -0
  231. package/skills/ck-docs-seeker/scripts/tests/test-detect-topic.js +112 -0
  232. package/skills/ck-docs-seeker/scripts/tests/test-fetch-docs.js +84 -0
  233. package/skills/ck-docs-seeker/scripts/utils/env-loader.js +94 -0
  234. package/skills/ck-docs-seeker/workflows/library-search.md +87 -0
  235. package/skills/ck-docs-seeker/workflows/repo-analysis.md +91 -0
  236. package/skills/ck-docs-seeker/workflows/topic-search.md +77 -0
  237. package/skills/ck-frontend-design/SKILL.md +79 -0
  238. package/skills/ck-frontend-design/references/analysis-best-practices.md +80 -0
  239. package/skills/ck-frontend-design/references/analysis-prompts.md +141 -0
  240. package/skills/ck-frontend-design/references/analysis-techniques.md +118 -0
  241. package/skills/ck-frontend-design/references/animejs.md +396 -0
  242. package/skills/ck-frontend-design/references/design-extraction-overview.md +71 -0
  243. package/skills/ck-frontend-design/references/extraction-best-practices.md +141 -0
  244. package/skills/ck-frontend-design/references/extraction-output-templates.md +162 -0
  245. package/skills/ck-frontend-design/references/extraction-prompts.md +127 -0
  246. package/skills/ck-frontend-design/references/technical-accessibility.md +119 -0
  247. package/skills/ck-frontend-design/references/technical-best-practices.md +97 -0
  248. package/skills/ck-frontend-design/references/technical-optimization.md +44 -0
  249. package/skills/ck-frontend-design/references/technical-overview.md +90 -0
  250. package/skills/ck-frontend-design/references/technical-workflows.md +150 -0
  251. package/skills/ck-frontend-design/references/visual-analysis-overview.md +95 -0
  252. package/skills/ck-frontend-development/SKILL.md +399 -0
  253. package/skills/ck-frontend-development/resources/common-patterns.md +331 -0
  254. package/skills/ck-frontend-development/resources/complete-examples.md +872 -0
  255. package/skills/ck-frontend-development/resources/component-patterns.md +502 -0
  256. package/skills/ck-frontend-development/resources/data-fetching.md +767 -0
  257. package/skills/ck-frontend-development/resources/file-organization.md +502 -0
  258. package/skills/ck-frontend-development/resources/loading-and-error-states.md +501 -0
  259. package/skills/ck-frontend-development/resources/performance.md +406 -0
  260. package/skills/ck-frontend-development/resources/routing-guide.md +364 -0
  261. package/skills/ck-frontend-development/resources/styling-guide.md +428 -0
  262. package/skills/ck-frontend-development/resources/typescript-standards.md +418 -0
  263. package/skills/ck-markdown-novel-viewer/SKILL.md +190 -0
  264. package/skills/ck-markdown-novel-viewer/assets/directory-browser.css +215 -0
  265. package/skills/ck-markdown-novel-viewer/assets/favicon.png +0 -0
  266. package/skills/ck-markdown-novel-viewer/assets/novel-theme.css +818 -0
  267. package/skills/ck-markdown-novel-viewer/assets/reader.js +262 -0
  268. package/skills/ck-markdown-novel-viewer/assets/template.html +80 -0
  269. package/skills/ck-markdown-novel-viewer/package.json +15 -0
  270. package/skills/ck-markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
  271. package/skills/ck-markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +272 -0
  272. package/skills/ck-markdown-novel-viewer/scripts/lib/plan-navigator.cjs +509 -0
  273. package/skills/ck-markdown-novel-viewer/scripts/lib/port-finder.cjs +48 -0
  274. package/skills/ck-markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
  275. package/skills/ck-markdown-novel-viewer/scripts/server.cjs +411 -0
  276. package/skills/ck-markdown-novel-viewer/scripts/tests/server.test.cjs +283 -0
  277. package/skills/ck-markdown-novel-viewer/tests/dashboard-assets.test.cjs +340 -0
  278. package/skills/ck-markdown-novel-viewer/tests/dashboard-renderer.test.cjs +404 -0
  279. package/skills/ck-markdown-novel-viewer/tests/http-server.test.cjs +271 -0
  280. package/skills/ck-markdown-novel-viewer/tests/run-tests.cjs +51 -0
  281. package/skills/ck-markdown-novel-viewer/tests/test-framework.cjs +154 -0
  282. package/skills/ck-markdown-novel-viewer/tests/verify-xss.cjs +90 -0
  283. package/skills/ck-mcp-builder/LICENSE.txt +202 -0
  284. package/skills/ck-mcp-builder/SKILL.md +327 -0
  285. package/skills/ck-mcp-builder/reference/evaluation.md +602 -0
  286. package/skills/ck-mcp-builder/reference/mcp_best_practices.md +915 -0
  287. package/skills/ck-mcp-builder/reference/node_mcp_server.md +916 -0
  288. package/skills/ck-mcp-builder/reference/python_mcp_server.md +752 -0
  289. package/skills/ck-mcp-builder/scripts/connections.py +151 -0
  290. package/skills/ck-mcp-builder/scripts/evaluation.py +373 -0
  291. package/skills/ck-mcp-builder/scripts/example_evaluation.xml +22 -0
  292. package/skills/ck-mcp-builder/scripts/requirements.txt +2 -0
  293. package/skills/ck-mcp-management/README.md +219 -0
  294. package/skills/ck-mcp-management/SKILL.md +209 -0
  295. package/skills/ck-mcp-management/assets/tools.json +3146 -0
  296. package/skills/ck-mcp-management/references/configuration.md +114 -0
  297. package/skills/ck-mcp-management/references/gemini-cli-integration.md +215 -0
  298. package/skills/ck-mcp-management/references/mcp-protocol.md +116 -0
  299. package/skills/ck-mcp-management/scripts/.env.example +10 -0
  300. package/skills/ck-mcp-management/scripts/cli.ts +195 -0
  301. package/skills/ck-mcp-management/scripts/dist/analyze-tools.js +70 -0
  302. package/skills/ck-mcp-management/scripts/dist/cli.js +160 -0
  303. package/skills/ck-mcp-management/scripts/dist/mcp-client.js +183 -0
  304. package/skills/ck-mcp-management/scripts/mcp-client.ts +230 -0
  305. package/skills/ck-mcp-management/scripts/package.json +20 -0
  306. package/skills/ck-mcp-management/scripts/tsconfig.json +15 -0
  307. package/skills/ck-media-processing/SKILL.md +90 -0
  308. package/skills/ck-media-processing/references/common-workflows.md +132 -0
  309. package/skills/ck-media-processing/references/ffmpeg-encoding.md +358 -0
  310. package/skills/ck-media-processing/references/ffmpeg-filters.md +503 -0
  311. package/skills/ck-media-processing/references/ffmpeg-streaming.md +403 -0
  312. package/skills/ck-media-processing/references/format-compatibility.md +375 -0
  313. package/skills/ck-media-processing/references/imagemagick-batch.md +612 -0
  314. package/skills/ck-media-processing/references/imagemagick-editing.md +623 -0
  315. package/skills/ck-media-processing/references/rmbg-background-removal.md +66 -0
  316. package/skills/ck-media-processing/references/troubleshooting.md +109 -0
  317. package/skills/ck-media-processing/scripts/README.md +111 -0
  318. package/skills/ck-media-processing/scripts/batch-remove-background.sh +124 -0
  319. package/skills/ck-media-processing/scripts/batch_resize.py +342 -0
  320. package/skills/ck-media-processing/scripts/media_convert.py +311 -0
  321. package/skills/ck-media-processing/scripts/remove-background.sh +96 -0
  322. package/skills/ck-media-processing/scripts/remove-bg-node.js +158 -0
  323. package/skills/ck-media-processing/scripts/requirements.txt +24 -0
  324. package/skills/ck-media-processing/scripts/tests/.coverage +0 -0
  325. package/skills/ck-media-processing/scripts/tests/requirements.txt +2 -0
  326. package/skills/ck-media-processing/scripts/tests/test_batch_resize.py +372 -0
  327. package/skills/ck-media-processing/scripts/tests/test_media_convert.py +259 -0
  328. package/skills/ck-media-processing/scripts/tests/test_video_optimize.py +397 -0
  329. package/skills/ck-media-processing/scripts/video_optimize.py +414 -0
  330. package/skills/ck-mobile-development/SKILL.md +210 -0
  331. package/skills/ck-mobile-development/references/mobile-android.md +604 -0
  332. package/skills/ck-mobile-development/references/mobile-best-practices.md +545 -0
  333. package/skills/ck-mobile-development/references/mobile-debugging.md +1089 -0
  334. package/skills/ck-mobile-development/references/mobile-frameworks.md +465 -0
  335. package/skills/ck-mobile-development/references/mobile-ios.md +496 -0
  336. package/skills/ck-mobile-development/references/mobile-mindset.md +544 -0
  337. package/skills/ck-payment-integration/README.md +185 -0
  338. package/skills/ck-payment-integration/SKILL.md +116 -0
  339. package/skills/ck-payment-integration/references/polar/benefits.md +396 -0
  340. package/skills/ck-payment-integration/references/polar/best-practices.md +482 -0
  341. package/skills/ck-payment-integration/references/polar/checkouts.md +266 -0
  342. package/skills/ck-payment-integration/references/polar/overview.md +184 -0
  343. package/skills/ck-payment-integration/references/polar/products.md +244 -0
  344. package/skills/ck-payment-integration/references/polar/sdk.md +436 -0
  345. package/skills/ck-payment-integration/references/polar/subscriptions.md +340 -0
  346. package/skills/ck-payment-integration/references/polar/webhooks.md +405 -0
  347. package/skills/ck-payment-integration/references/sepay/api.md +140 -0
  348. package/skills/ck-payment-integration/references/sepay/best-practices.md +337 -0
  349. package/skills/ck-payment-integration/references/sepay/overview.md +138 -0
  350. package/skills/ck-payment-integration/references/sepay/qr-codes.md +228 -0
  351. package/skills/ck-payment-integration/references/sepay/sdk.md +213 -0
  352. package/skills/ck-payment-integration/references/sepay/webhooks.md +208 -0
  353. package/skills/ck-payment-integration/scripts/.env.example +20 -0
  354. package/skills/ck-payment-integration/scripts/checkout-helper.js +244 -0
  355. package/skills/ck-payment-integration/scripts/package.json +17 -0
  356. package/skills/ck-payment-integration/scripts/polar-webhook-verify.js +202 -0
  357. package/skills/ck-payment-integration/scripts/sepay-webhook-verify.js +193 -0
  358. package/skills/ck-payment-integration/scripts/test-scripts.js +237 -0
  359. package/skills/ck-planning/SKILL.md +79 -49
  360. package/skills/ck-planning/references/codebase-understanding.md +62 -0
  361. package/skills/ck-planning/references/output-standards.md +127 -0
  362. package/skills/ck-planning/references/plan-organization.md +122 -60
  363. package/skills/ck-planning/references/research-phase.md +49 -56
  364. package/skills/ck-planning/references/solution-design.md +61 -63
  365. package/skills/ck-problem-solving/SKILL.md +95 -0
  366. package/skills/ck-problem-solving/references/attribution.md +69 -0
  367. package/skills/ck-problem-solving/references/collision-zone-thinking.md +79 -0
  368. package/skills/ck-problem-solving/references/inversion-exercise.md +91 -0
  369. package/skills/ck-problem-solving/references/meta-pattern-recognition.md +87 -0
  370. package/skills/ck-problem-solving/references/scale-game.md +95 -0
  371. package/skills/ck-problem-solving/references/simplification-cascades.md +80 -0
  372. package/skills/ck-problem-solving/references/when-stuck.md +72 -0
  373. package/skills/ck-repomix/SKILL.md +247 -0
  374. package/skills/ck-repomix/references/configuration.md +211 -0
  375. package/skills/ck-repomix/references/usage-patterns.md +232 -0
  376. package/skills/ck-repomix/scripts/.coverage +0 -0
  377. package/skills/ck-repomix/scripts/README.md +179 -0
  378. package/skills/ck-repomix/scripts/repomix_batch.py +455 -0
  379. package/skills/ck-repomix/scripts/repos.example.json +15 -0
  380. package/skills/ck-repomix/scripts/requirements.txt +15 -0
  381. package/skills/ck-repomix/scripts/tests/test_repomix_batch.py +531 -0
  382. package/skills/ck-sequential-thinking/.env.example +8 -0
  383. package/skills/ck-sequential-thinking/README.md +183 -0
  384. package/skills/ck-sequential-thinking/SKILL.md +14 -2
  385. package/skills/ck-sequential-thinking/package.json +31 -0
  386. package/skills/ck-sequential-thinking/references/advanced-strategies.md +79 -0
  387. package/skills/ck-sequential-thinking/references/advanced-techniques.md +2 -14
  388. package/skills/ck-sequential-thinking/references/core-patterns.md +8 -0
  389. package/skills/ck-sequential-thinking/references/examples-api.md +88 -0
  390. package/skills/ck-sequential-thinking/references/examples-architecture.md +94 -0
  391. package/skills/ck-sequential-thinking/references/examples-debug.md +90 -0
  392. package/skills/ck-sequential-thinking/scripts/format-thought.js +159 -0
  393. package/skills/ck-sequential-thinking/scripts/process-thought.js +236 -0
  394. package/skills/ck-sequential-thinking/tests/format-thought.test.js +133 -0
  395. package/skills/ck-sequential-thinking/tests/process-thought.test.js +215 -0
  396. package/skills/ck-shopify/README.md +66 -0
  397. package/skills/ck-shopify/SKILL.md +319 -0
  398. package/skills/ck-shopify/references/app-development.md +470 -0
  399. package/skills/ck-shopify/references/extensions.md +493 -0
  400. package/skills/ck-shopify/references/themes.md +498 -0
  401. package/skills/ck-shopify/scripts/.coverage +0 -0
  402. package/skills/ck-shopify/scripts/requirements.txt +19 -0
  403. package/skills/ck-shopify/scripts/shopify_init.py +423 -0
  404. package/skills/ck-shopify/scripts/tests/.coverage +0 -0
  405. package/skills/ck-shopify/scripts/tests/test_shopify_init.py +385 -0
  406. package/skills/ck-skill-creator/LICENSE.txt +202 -0
  407. package/skills/ck-skill-creator/SKILL.md +265 -0
  408. package/skills/ck-skill-creator/scripts/init_skill.py +303 -0
  409. package/skills/ck-skill-creator/scripts/package_skill.py +110 -0
  410. package/skills/ck-skill-creator/scripts/quick_validate.py +65 -0
  411. package/skills/ck-threejs/SKILL.md +87 -0
  412. package/skills/ck-threejs/references/01-getting-started.md +177 -0
  413. package/skills/ck-threejs/references/02-loaders.md +169 -0
  414. package/skills/ck-threejs/references/03-textures.md +170 -0
  415. package/skills/ck-threejs/references/04-cameras.md +195 -0
  416. package/skills/ck-threejs/references/05-lights.md +183 -0
  417. package/skills/ck-threejs/references/06-animations.md +214 -0
  418. package/skills/ck-threejs/references/07-math.md +260 -0
  419. package/skills/ck-threejs/references/08-interaction.md +267 -0
  420. package/skills/ck-threejs/references/09-postprocessing.md +240 -0
  421. package/skills/ck-threejs/references/10-controls.md +259 -0
  422. package/skills/ck-threejs/references/11-materials-advanced.md +270 -0
  423. package/skills/ck-threejs/references/12-performance.md +269 -0
  424. package/skills/ck-threejs/references/13-node-materials.md +298 -0
  425. package/skills/ck-threejs/references/14-physics-vr.md +304 -0
  426. package/skills/ck-threejs/references/15-specialized-loaders.md +333 -0
  427. package/skills/ck-threejs/references/16-webgpu.md +302 -0
  428. package/skills/ck-ui-styling/LICENSE.txt +202 -0
  429. package/skills/ck-ui-styling/SKILL.md +319 -0
  430. package/skills/ck-ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  431. package/skills/ck-ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  432. package/skills/ck-ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  433. package/skills/ck-ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
  434. package/skills/ck-ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  435. package/skills/ck-ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
  436. package/skills/ck-ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
  437. package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  438. package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  439. package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  440. package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  441. package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  442. package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  443. package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  444. package/skills/ck-ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
  445. package/skills/ck-ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
  446. package/skills/ck-ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
  447. package/skills/ck-ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
  448. package/skills/ck-ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
  449. package/skills/ck-ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
  450. package/skills/ck-ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
  451. package/skills/ck-ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
  452. package/skills/ck-ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
  453. package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  454. package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  455. package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  456. package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  457. package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  458. package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  459. package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  460. package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  461. package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  462. package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  463. package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  464. package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  465. package/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  466. package/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  467. package/skills/ck-ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
  468. package/skills/ck-ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
  469. package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  470. package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  471. package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  472. package/skills/ck-ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
  473. package/skills/ck-ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
  474. package/skills/ck-ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
  475. package/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  476. package/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  477. package/skills/ck-ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
  478. package/skills/ck-ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  479. package/skills/ck-ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
  480. package/skills/ck-ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
  481. package/skills/ck-ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
  482. package/skills/ck-ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
  483. package/skills/ck-ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
  484. package/skills/ck-ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
  485. package/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  486. package/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  487. package/skills/ck-ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
  488. package/skills/ck-ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
  489. package/skills/ck-ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
  490. package/skills/ck-ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  491. package/skills/ck-ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
  492. package/skills/ck-ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
  493. package/skills/ck-ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  494. package/skills/ck-ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  495. package/skills/ck-ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
  496. package/skills/ck-ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  497. package/skills/ck-ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
  498. package/skills/ck-ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  499. package/skills/ck-ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  500. package/skills/ck-ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
  501. package/skills/ck-ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
  502. package/skills/ck-ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
  503. package/skills/ck-ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
  504. package/skills/ck-ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
  505. package/skills/ck-ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  506. package/skills/ck-ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
  507. package/skills/ck-ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
  508. package/skills/ck-ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
  509. package/skills/ck-ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
  510. package/skills/ck-ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  511. package/skills/ck-ui-styling/references/canvas-design-system.md +320 -0
  512. package/skills/ck-ui-styling/references/shadcn-accessibility.md +471 -0
  513. package/skills/ck-ui-styling/references/shadcn-components.md +424 -0
  514. package/skills/ck-ui-styling/references/shadcn-theming.md +373 -0
  515. package/skills/ck-ui-styling/references/tailwind-customization.md +483 -0
  516. package/skills/ck-ui-styling/references/tailwind-responsive.md +382 -0
  517. package/skills/ck-ui-styling/references/tailwind-utilities.md +455 -0
  518. package/skills/ck-ui-styling/scripts/.coverage +0 -0
  519. package/skills/ck-ui-styling/scripts/requirements.txt +17 -0
  520. package/skills/ck-ui-styling/scripts/shadcn_add.py +292 -0
  521. package/skills/ck-ui-styling/scripts/tailwind_config_gen.py +456 -0
  522. package/skills/ck-ui-styling/scripts/tests/coverage-ui.json +1 -0
  523. package/skills/ck-ui-styling/scripts/tests/requirements.txt +3 -0
  524. package/skills/ck-ui-styling/scripts/tests/test_shadcn_add.py +266 -0
  525. package/skills/ck-ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
  526. package/skills/ck-ui-ux-pro-max/SKILL.md +227 -0
  527. package/skills/ck-ui-ux-pro-max/data/charts.csv +26 -0
  528. package/skills/ck-ui-ux-pro-max/data/colors.csv +97 -0
  529. package/skills/ck-ui-ux-pro-max/data/landing.csv +31 -0
  530. package/skills/ck-ui-ux-pro-max/data/products.csv +97 -0
  531. package/skills/ck-ui-ux-pro-max/data/prompts.csv +24 -0
  532. package/skills/ck-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  533. package/skills/ck-ui-ux-pro-max/data/stacks/html-tailwind.csv +51 -0
  534. package/skills/ck-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  535. package/skills/ck-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  536. package/skills/ck-ui-ux-pro-max/data/stacks/react.csv +54 -0
  537. package/skills/ck-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  538. package/skills/ck-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  539. package/skills/ck-ui-ux-pro-max/data/stacks/vue.csv +50 -0
  540. package/skills/ck-ui-ux-pro-max/data/styles.csv +59 -0
  541. package/skills/ck-ui-ux-pro-max/data/typography.csv +58 -0
  542. package/skills/ck-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  543. package/skills/ck-ui-ux-pro-max/scripts/core.py +236 -0
  544. package/skills/ck-ui-ux-pro-max/scripts/search.py +76 -0
  545. package/skills/ck-web-frameworks/SKILL.md +322 -0
  546. package/skills/ck-web-frameworks/references/nextjs-app-router.md +465 -0
  547. package/skills/ck-web-frameworks/references/nextjs-data-fetching.md +459 -0
  548. package/skills/ck-web-frameworks/references/nextjs-optimization.md +511 -0
  549. package/skills/ck-web-frameworks/references/nextjs-server-components.md +495 -0
  550. package/skills/ck-web-frameworks/references/remix-icon-integration.md +603 -0
  551. package/skills/ck-web-frameworks/references/turborepo-caching.md +551 -0
  552. package/skills/ck-web-frameworks/references/turborepo-pipelines.md +517 -0
  553. package/skills/ck-web-frameworks/references/turborepo-setup.md +542 -0
  554. package/skills/ck-web-frameworks/scripts/.coverage +0 -0
  555. package/skills/ck-web-frameworks/scripts/__init__.py +0 -0
  556. package/skills/ck-web-frameworks/scripts/nextjs_init.py +547 -0
  557. package/skills/ck-web-frameworks/scripts/requirements.txt +16 -0
  558. package/skills/ck-web-frameworks/scripts/tests/coverage-web.json +1 -0
  559. package/skills/ck-web-frameworks/scripts/tests/requirements.txt +3 -0
  560. package/skills/ck-web-frameworks/scripts/tests/test_nextjs_init.py +319 -0
  561. package/skills/ck-web-frameworks/scripts/tests/test_turborepo_migrate.py +374 -0
  562. package/skills/ck-web-frameworks/scripts/turborepo_migrate.py +394 -0
  563. package/src/commands/init.js +61 -30
  564. package/src/utils/paths.js +35 -4
@@ -0,0 +1,337 @@
1
+ # SePay Best Practices
2
+
3
+ Security, patterns, and monitoring for production SePay integrations.
4
+
5
+ ## Security
6
+
7
+ ### Credential Management
8
+ ```javascript
9
+ // ✓ Good: Environment variables
10
+ const client = new SePayClient({
11
+ merchant_id: process.env.SEPAY_MERCHANT_ID,
12
+ secret_key: process.env.SEPAY_SECRET_KEY,
13
+ env: process.env.NODE_ENV === 'production' ? 'production' : 'sandbox'
14
+ });
15
+
16
+ // ✗ Bad: Hardcoded credentials
17
+ const client = new SePayClient({
18
+ merchant_id: 'SP-TEST-12345',
19
+ secret_key: 'spsk_test_xxxxxxx'
20
+ });
21
+ ```
22
+
23
+ ### Webhook Security
24
+ 1. **IP Whitelisting:** Restrict endpoint to SePay IPs
25
+ 2. **API Key Verification:** Validate authorization header
26
+ 3. **HTTPS Only:** Never accept HTTP webhooks
27
+ 4. **Validate Payload:** Check all required fields exist
28
+ 5. **Duplicate Detection:** Use transaction ID for deduplication
29
+
30
+ ### Transaction Verification
31
+ ```javascript
32
+ // Always verify payment status via API, don't trust only redirects
33
+ app.get('/payment/success', async (req, res) => {
34
+ const orderId = req.query.order_id;
35
+
36
+ // Verify via API call
37
+ const order = await sePayClient.order.retrieve(orderId);
38
+
39
+ if (order.status === 'completed') {
40
+ await updateOrderStatus(orderId, 'paid');
41
+ res.redirect(`/order/${orderId}/confirmation`);
42
+ } else {
43
+ res.redirect(`/order/${orderId}/pending`);
44
+ }
45
+ });
46
+ ```
47
+
48
+ ## Implementation Patterns
49
+
50
+ ### Payment Flow Pattern
51
+ ```javascript
52
+ class PaymentService {
53
+ async createPayment(order) {
54
+ // 1. Create order in your system
55
+ const paymentCode = `ORDER_${order.id}_${Date.now()}`;
56
+ await this.savePaymentCode(order.id, paymentCode);
57
+
58
+ // 2. Generate checkout form
59
+ const fields = this.client.checkout.initOneTimePaymentFields({
60
+ order_invoice_number: paymentCode,
61
+ order_amount: order.total,
62
+ currency: 'VND',
63
+ success_url: `${config.baseUrl}/payment/success?order=${order.id}`,
64
+ error_url: `${config.baseUrl}/payment/error?order=${order.id}`,
65
+ cancel_url: `${config.baseUrl}/payment/cancel?order=${order.id}`,
66
+ order_description: `Payment for Order #${order.id}`,
67
+ });
68
+
69
+ return fields;
70
+ }
71
+
72
+ async verifyPayment(orderId) {
73
+ const paymentCode = await this.getPaymentCode(orderId);
74
+ const payment = await this.client.order.retrieve(paymentCode);
75
+
76
+ return {
77
+ isPaid: payment.status === 'completed',
78
+ amount: payment.amount,
79
+ paidAt: payment.completed_at,
80
+ };
81
+ }
82
+ }
83
+ ```
84
+
85
+ ### Webhook Resilience Pattern
86
+ ```javascript
87
+ async function handleWebhook(data) {
88
+ const maxRetries = 3;
89
+ let attempt = 0;
90
+
91
+ while (attempt < maxRetries) {
92
+ try {
93
+ await db.transaction(async (trx) => {
94
+ // Check duplicate
95
+ const exists = await trx('transactions')
96
+ .where('sepay_id', data.id)
97
+ .first();
98
+
99
+ if (exists) return;
100
+
101
+ // Save transaction
102
+ await trx('transactions').insert({
103
+ sepay_id: data.id,
104
+ amount: data.transferAmount,
105
+ content: data.content,
106
+ reference_code: data.referenceCode,
107
+ });
108
+
109
+ // Process payment
110
+ const order = await findOrderByPaymentCode(data.content);
111
+ if (order) {
112
+ await markOrderAsPaid(order.id, trx);
113
+ }
114
+ });
115
+
116
+ return { success: true };
117
+ } catch (error) {
118
+ attempt++;
119
+ if (attempt >= maxRetries) throw error;
120
+ await sleep(1000 * attempt); // Exponential backoff
121
+ }
122
+ }
123
+ }
124
+ ```
125
+
126
+ ### Reconciliation Pattern
127
+ ```javascript
128
+ async function reconcilePayments(fromDate, toDate) {
129
+ // Get all pending orders
130
+ const pendingOrders = await Order.findPending();
131
+
132
+ // Fetch SePay transactions in batches
133
+ let sinceId = 0;
134
+ const batchSize = 1000;
135
+
136
+ while (true) {
137
+ const transactions = await sePayClient.transaction.list({
138
+ transaction_date_min: fromDate,
139
+ transaction_date_max: toDate,
140
+ transfer_type: 'in',
141
+ since_id: sinceId,
142
+ limit: batchSize,
143
+ });
144
+
145
+ if (transactions.length === 0) break;
146
+
147
+ // Match and update
148
+ for (const transaction of transactions) {
149
+ const order = pendingOrders.find(o =>
150
+ transaction.content.includes(o.payment_code)
151
+ );
152
+
153
+ if (order) {
154
+ await order.markAsPaid(transaction);
155
+ }
156
+ }
157
+
158
+ sinceId = transactions[transactions.length - 1].id;
159
+ }
160
+ }
161
+ ```
162
+
163
+ ## Performance Optimization
164
+
165
+ ### Caching
166
+ ```javascript
167
+ // Cache bank list
168
+ const getBankList = memoize(
169
+ async () => {
170
+ const response = await fetch('https://qr.sepay.vn/banks.json');
171
+ return response.json();
172
+ },
173
+ { maxAge: 86400000 } // 24 hours
174
+ );
175
+
176
+ // Cache QR codes for fixed amounts
177
+ const qrCache = new Map();
178
+
179
+ function getCachedQRUrl(account, bank, amount) {
180
+ const key = `${account}-${bank}-${amount}`;
181
+ if (!qrCache.has(key)) {
182
+ const url = generateQRUrl(account, bank, amount);
183
+ qrCache.set(key, url);
184
+ }
185
+ return qrCache.get(key);
186
+ }
187
+ ```
188
+
189
+ ### Rate Limit Management
190
+ ```javascript
191
+ const RateLimiter = require('bottleneck');
192
+
193
+ const limiter = new RateLimiter({
194
+ maxConcurrent: 1,
195
+ minTime: 500, // 2 requests per second
196
+ reservoir: 100,
197
+ reservoirRefreshAmount: 100,
198
+ reservoirRefreshInterval: 60000, // per minute
199
+ });
200
+
201
+ // Wrap API calls
202
+ const apiCall = limiter.wrap(async (endpoint, params) => {
203
+ return await sePayClient.api.call(endpoint, params);
204
+ });
205
+ ```
206
+
207
+ ### Async Processing
208
+ ```javascript
209
+ // Queue webhook processing
210
+ app.post('/webhook/sepay', async (req, res) => {
211
+ // Respond immediately
212
+ res.json({ success: true });
213
+
214
+ // Queue for background processing
215
+ await webhookQueue.add('process-sepay-webhook', req.body, {
216
+ attempts: 3,
217
+ backoff: {
218
+ type: 'exponential',
219
+ delay: 2000,
220
+ },
221
+ });
222
+ });
223
+
224
+ // Process in background worker
225
+ webhookQueue.process('process-sepay-webhook', async (job) => {
226
+ await handleWebhook(job.data);
227
+ });
228
+ ```
229
+
230
+ ## Monitoring & Logging
231
+
232
+ ### Essential Metrics
233
+ ```javascript
234
+ const metrics = {
235
+ payment_initiated: counter('sepay_payment_initiated_total'),
236
+ payment_success: counter('sepay_payment_success_total'),
237
+ payment_failed: counter('sepay_payment_failed_total'),
238
+ webhook_received: counter('sepay_webhook_received_total'),
239
+ webhook_processed: counter('sepay_webhook_processed_total'),
240
+ api_errors: counter('sepay_api_errors_total'),
241
+ processing_time: histogram('sepay_processing_duration_seconds'),
242
+ };
243
+
244
+ // Track metrics
245
+ metrics.payment_initiated.inc();
246
+ const timer = metrics.processing_time.startTimer();
247
+ // ... process payment
248
+ timer();
249
+ ```
250
+
251
+ ### Structured Logging
252
+ ```javascript
253
+ logger.info('Payment initiated', {
254
+ order_id: order.id,
255
+ amount: order.total,
256
+ payment_method: 'sepay',
257
+ customer_id: customer.id,
258
+ });
259
+
260
+ logger.info('Webhook received', {
261
+ transaction_id: webhook.id,
262
+ amount: webhook.transferAmount,
263
+ type: webhook.transferType,
264
+ reference: webhook.referenceCode,
265
+ });
266
+
267
+ logger.error('Payment failed', {
268
+ order_id: order.id,
269
+ error: error.message,
270
+ stack: error.stack,
271
+ sepay_response: response,
272
+ });
273
+ ```
274
+
275
+ ### Alerting
276
+ ```javascript
277
+ // Alert on high failure rate
278
+ if (failureRate > 0.1) { // 10%
279
+ alert.send({
280
+ severity: 'high',
281
+ message: 'SePay payment failure rate exceeds 10%',
282
+ details: { failureRate, total, failed },
283
+ });
284
+ }
285
+
286
+ // Alert on webhook delivery failures
287
+ if (webhookFailures > 10) {
288
+ alert.send({
289
+ severity: 'medium',
290
+ message: 'SePay webhook delivery failures',
291
+ details: { failures: webhookFailures },
292
+ });
293
+ }
294
+ ```
295
+
296
+ ## Testing Strategy
297
+
298
+ ### Sandbox Testing Checklist
299
+ - [ ] Successful payment flow
300
+ - [ ] Failed payment handling
301
+ - [ ] Canceled payment handling
302
+ - [ ] Webhook delivery and processing
303
+ - [ ] Duplicate webhook handling
304
+ - [ ] Rate limit handling
305
+ - [ ] Error scenarios (network, timeout, invalid data)
306
+ - [ ] Payment verification via API
307
+ - [ ] QR code generation
308
+ - [ ] Order reconciliation
309
+
310
+ ### Load Testing
311
+ ```javascript
312
+ // Simulate high volume
313
+ for (let i = 0; i < 1000; i++) {
314
+ await createPayment({
315
+ amount: 100000,
316
+ orderId: `LOAD_TEST_${i}`,
317
+ });
318
+ await sleep(100); // Respect rate limits
319
+ }
320
+ ```
321
+
322
+ ## Production Checklist
323
+
324
+ - [ ] Environment variables configured
325
+ - [ ] Production credentials obtained
326
+ - [ ] HTTPS enabled for all endpoints
327
+ - [ ] Webhook endpoint publicly accessible
328
+ - [ ] IP whitelisting configured
329
+ - [ ] Error monitoring set up
330
+ - [ ] Logging infrastructure ready
331
+ - [ ] Alerting configured
332
+ - [ ] Rate limiting implemented
333
+ - [ ] Database indexes created
334
+ - [ ] Reconciliation job scheduled
335
+ - [ ] Backup strategy in place
336
+ - [ ] Documentation updated
337
+ - [ ] Team trained on operations
@@ -0,0 +1,138 @@
1
+ # SePay Overview
2
+
3
+ Vietnamese payment automation platform serving as intermediary between applications and banks.
4
+
5
+ ## Core Capabilities
6
+
7
+ **Payment Methods:**
8
+ - VietQR - QR code bank transfers (NAPAS standard)
9
+ - NAPAS QR - National payment gateway QR
10
+ - Bank Cards - Visa/Mastercard/JCB
11
+ - Bank Transfers - Direct bank-to-bank
12
+ - Virtual Accounts - Order-specific VAs with exact matching
13
+
14
+ **Supported Banks:** 44+ banks via NAPAS, 37+ with VietQR (Vietcombank, VPBank, BIDV, etc.)
15
+
16
+ **Use Cases:**
17
+ - Payment gateway for online payments
18
+ - Bank API direct connection
19
+ - Transaction verification automation
20
+ - Real-time balance monitoring
21
+
22
+ ## Authentication
23
+
24
+ ### API Token (Simple)
25
+
26
+ **Create:**
27
+ 1. Company Configuration → API Access → "+ Add API"
28
+ 2. Provide name, set status "Active"
29
+ 3. Copy token from list
30
+
31
+ **Usage:**
32
+ ```
33
+ Authorization: Bearer {API_TOKEN}
34
+ Content-Type: application/json
35
+ ```
36
+
37
+ **Note:** All tokens have full access (no permission levels currently)
38
+
39
+ ### OAuth2 (Advanced)
40
+
41
+ **Scopes:**
42
+ - `bank-account:read` - View accounts, balances
43
+ - `transaction:read` - Transaction history
44
+ - `webhook:read/write/delete` - Webhook management
45
+ - `profile` - User information
46
+ - `company` - Company details
47
+
48
+ **Authorization Code Flow:**
49
+
50
+ 1. **Authorization Request:**
51
+ ```
52
+ GET https://my.sepay.vn/oauth/authorize?
53
+ response_type=code&
54
+ client_id={CLIENT_ID}&
55
+ redirect_uri={REDIRECT_URI}&
56
+ scope={SCOPES}&
57
+ state={CSRF_TOKEN}
58
+ ```
59
+
60
+ 2. **Token Exchange (server-side only):**
61
+ ```
62
+ POST https://my.sepay.vn/oauth/token
63
+ {
64
+ "grant_type": "authorization_code",
65
+ "client_id": "{CLIENT_ID}",
66
+ "client_secret": "{CLIENT_SECRET}",
67
+ "code": "{AUTHORIZATION_CODE}"
68
+ }
69
+ ```
70
+
71
+ 3. **Token Refresh:**
72
+ ```
73
+ POST https://my.sepay.vn/oauth/token
74
+ {
75
+ "grant_type": "refresh_token",
76
+ "refresh_token": "{REFRESH_TOKEN}",
77
+ "client_id": "{CLIENT_ID}",
78
+ "client_secret": "{CLIENT_SECRET}"
79
+ }
80
+ ```
81
+
82
+ **Security:** Access tokens expire ~1 hour, never expose client_secret, use state for CSRF protection
83
+
84
+ ## Payment Gateway Flow (13 Steps)
85
+
86
+ 1. Customer selects products, initiates payment
87
+ 2. Merchant creates order record
88
+ 3. Generate checkout form with HMAC-SHA256 signature
89
+ 4. Send request to `/v1/checkout/init`
90
+ 5. SePay validates signature
91
+ 6. Redirect customer to SePay gateway
92
+ 7. Customer selects payment method
93
+ 8. SePay communicates with banks/card networks
94
+ 9. Financial institution returns result
95
+ 10. Callback notification sent to merchant
96
+ 11. IPN (Instant Payment Notification) transmitted
97
+ 12. Customer redirected to merchant result page
98
+ 13. Final outcome displayed
99
+
100
+ ## Environments
101
+
102
+ **Sandbox:**
103
+ - Dashboard: https://my.sepay.vn (free tier)
104
+ - Endpoint: https://sandbox.pay.sepay.vn/v1/init
105
+ - Credentials: `SP-TEST-XXXXXXX`, `spsk_test_xxxxxxxxxxxxx`
106
+
107
+ **Production:**
108
+ - Endpoint: https://pay.sepay.vn/v1/init
109
+ - Requirements: Personal/business bank account, completed testing
110
+ - Approval: 3-7 days for NAPAS QR/cards (requires documentation)
111
+
112
+ ## Rate Limits
113
+
114
+ **Limit:** 2 calls/second
115
+ **Response:** HTTP 429 with `x-sepay-userapi-retry-after` header (seconds to wait)
116
+
117
+ **Handling:**
118
+ ```javascript
119
+ if (response.status === 429) {
120
+ const retryAfter = response.headers.get('x-sepay-userapi-retry-after');
121
+ await sleep(retryAfter * 1000);
122
+ return retry();
123
+ }
124
+ ```
125
+
126
+ ## Support
127
+
128
+ - Email: info@sepay.vn
129
+ - Hotline: 02873059589 (24/7)
130
+ - Docs: https://developer.sepay.vn/en
131
+ - GitHub: https://github.com/sepayvn
132
+
133
+ ## Next Steps
134
+
135
+ - **For API integration:** Load `api.md`
136
+ - **For SDK integration:** Load `sdk.md`
137
+ - **For webhook setup:** Load `webhooks.md`
138
+ - **For QR generation:** Load `qr-codes.md`
@@ -0,0 +1,228 @@
1
+ # SePay VietQR Generation
2
+
3
+ Dynamic QR code generation service compatible with VietQR standard (NAPAS).
4
+
5
+ ## API Endpoint
6
+
7
+ ```
8
+ https://qr.sepay.vn/img?acc={ACCOUNT}&bank={BANK}&amount={AMOUNT}&des={DESCRIPTION}
9
+ ```
10
+
11
+ ## Parameters
12
+
13
+ **Required:**
14
+ - `acc` - Bank account number
15
+ - `bank` - Bank code or short name
16
+
17
+ **Optional:**
18
+ - `amount` - Transfer amount (omit for flexible amount)
19
+ - `des` - Transfer description/content (URL encoded)
20
+ - `template` - QR image template (empty/compact/qronly)
21
+ - `download` - Set to "true" to download image
22
+
23
+ ## Examples
24
+
25
+ ### Complete QR (Fixed Amount)
26
+ ```
27
+ https://qr.sepay.vn/img?
28
+ acc=0010000000355&
29
+ bank=Vietcombank&
30
+ amount=100000&
31
+ des=ung%20ho%20quy%20bao%20tro%20tre%20em
32
+ ```
33
+
34
+ ### Flexible QR (Customer Enters Amount)
35
+ ```
36
+ https://qr.sepay.vn/img?acc=0010000000355&bank=Vietcombank
37
+ ```
38
+
39
+ ### QR Only Template
40
+ ```
41
+ https://qr.sepay.vn/img?
42
+ acc=0010000000355&
43
+ bank=Vietcombank&
44
+ amount=100000&
45
+ template=qronly
46
+ ```
47
+
48
+ ## Integration
49
+
50
+ ### HTML
51
+ ```html
52
+ <img src="https://qr.sepay.vn/img?acc=0010000000355&bank=Vietcombank&amount=100000"
53
+ alt="Payment QR Code" />
54
+ ```
55
+
56
+ ### JavaScript (Dynamic)
57
+ ```javascript
58
+ function generatePaymentQR(account, bank, amount, description) {
59
+ const params = new URLSearchParams({
60
+ acc: account,
61
+ bank: bank,
62
+ amount: amount,
63
+ des: description
64
+ });
65
+ return `https://qr.sepay.vn/img?${params}`;
66
+ }
67
+
68
+ // Usage
69
+ const qrUrl = generatePaymentQR(
70
+ '0010000000355',
71
+ 'Vietcombank',
72
+ 100000,
73
+ 'Order #12345'
74
+ );
75
+
76
+ document.getElementById('qr-code').src = qrUrl;
77
+ ```
78
+
79
+ ### PHP (Dynamic)
80
+ ```php
81
+ <?php
82
+ function generatePaymentQR($account, $bank, $amount, $description) {
83
+ return 'https://qr.sepay.vn/img?' . http_build_query([
84
+ 'acc' => $account,
85
+ 'bank' => $bank,
86
+ 'amount' => $amount,
87
+ 'des' => $description
88
+ ]);
89
+ }
90
+
91
+ // Usage
92
+ $qrUrl = generatePaymentQR(
93
+ '0010000000355',
94
+ 'Vietcombank',
95
+ 100000,
96
+ 'Order #' . $orderId
97
+ );
98
+
99
+ echo "<img src='{$qrUrl}' alt='Payment QR' />";
100
+ ?>
101
+ ```
102
+
103
+ ### Node.js (Express)
104
+ ```javascript
105
+ app.get('/payment/:orderId/qr', async (req, res) => {
106
+ const order = await Order.findById(req.params.orderId);
107
+
108
+ const qrUrl = new URL('https://qr.sepay.vn/img');
109
+ qrUrl.searchParams.set('acc', process.env.SEPAY_ACCOUNT);
110
+ qrUrl.searchParams.set('bank', process.env.SEPAY_BANK);
111
+ qrUrl.searchParams.set('amount', order.total);
112
+ qrUrl.searchParams.set('des', `Order ${order.id}`);
113
+
114
+ res.render('payment', { qrUrl: qrUrl.toString() });
115
+ });
116
+ ```
117
+
118
+ ### React Component
119
+ ```jsx
120
+ function PaymentQR({ account, bank, amount, description }) {
121
+ const qrUrl = useMemo(() => {
122
+ const params = new URLSearchParams({
123
+ acc: account,
124
+ bank: bank,
125
+ amount: amount,
126
+ des: description
127
+ });
128
+ return `https://qr.sepay.vn/img?${params}`;
129
+ }, [account, bank, amount, description]);
130
+
131
+ return (
132
+ <div className="payment-qr">
133
+ <img src={qrUrl} alt="Payment QR Code" />
134
+ <p>Scan to pay {amount.toLocaleString('vi-VN')} VND</p>
135
+ </div>
136
+ );
137
+ }
138
+ ```
139
+
140
+ ## Templates
141
+
142
+ **Default:**
143
+ - Full QR with bank logo
144
+ - Account information displayed
145
+ - Branded with bank colors
146
+
147
+ **Compact:**
148
+ - Smaller version
149
+ - Minimal branding
150
+ - More space-efficient
151
+
152
+ **QR Only:**
153
+ - Pure QR code
154
+ - No decorations
155
+ - For custom layouts
156
+
157
+ ## Bank Codes
158
+
159
+ **Get Bank List:**
160
+ ```
161
+ GET https://qr.sepay.vn/banks.json
162
+ ```
163
+
164
+ **Common Banks:**
165
+ - Vietcombank (VCB)
166
+ - VPBank
167
+ - BIDV
168
+ - Techcombank (TCB)
169
+ - ACB
170
+ - MB Bank
171
+ - Sacombank
172
+ - VietinBank
173
+ - And 40+ others
174
+
175
+ **Cache Bank List:**
176
+ ```javascript
177
+ // Fetch once and cache
178
+ const banks = await fetch('https://qr.sepay.vn/banks.json')
179
+ .then(res => res.json());
180
+
181
+ // Store in memory or Redis
182
+ cache.set('sepay_banks', banks, 86400); // 24 hours
183
+ ```
184
+
185
+ ## Best Practices
186
+
187
+ 1. **Cache Bank List:** Avoid repeated API calls
188
+ 2. **URL Encode Descriptions:** Use `encodeURIComponent()` or `http_build_query()`
189
+ 3. **Error Handling:** Provide fallback for QR generation failures
190
+ 4. **Amount Validation:** Ensure amount is positive integer
191
+ 5. **Flexible vs Fixed:** Use flexible QR for varying amounts
192
+ 6. **Template Selection:** Choose based on UI design
193
+ 7. **Responsive Design:** Scale QR code for mobile devices
194
+ 8. **Alt Text:** Always provide descriptive alt text
195
+ 9. **Loading State:** Show placeholder while QR loads
196
+ 10. **Print Support:** Ensure QR codes are print-friendly
197
+
198
+ ## Integration Patterns
199
+
200
+ ### Checkout Page
201
+ ```html
202
+ <div class="payment-methods">
203
+ <h3>Pay via Bank Transfer</h3>
204
+ <img src="[QR_URL]" alt="Payment QR Code" class="qr-code" />
205
+ <p>Scan this QR code with your banking app</p>
206
+ <div class="payment-details">
207
+ <p><strong>Account:</strong> 0010000000355</p>
208
+ <p><strong>Bank:</strong> Vietcombank</p>
209
+ <p><strong>Amount:</strong> 100,000 VND</p>
210
+ <p><strong>Content:</strong> Order #12345</p>
211
+ </div>
212
+ </div>
213
+ ```
214
+
215
+ ### Email Receipt
216
+ ```html
217
+ <table>
218
+ <tr>
219
+ <td align="center">
220
+ <img src="[QR_URL]" alt="Payment QR Code" width="200" />
221
+ <p>Scan to pay for your order</p>
222
+ </td>
223
+ </tr>
224
+ </table>
225
+ ```
226
+
227
+ ### PDF Invoice
228
+ Use QR URL in PDF generation libraries (wkhtmltopdf, Puppeteer, etc.)