ccjk 14.2.2 → 15.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +58 -341
  3. package/dist/cli.js +59 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/detect.js +15 -0
  6. package/dist/commands/detect.js.map +1 -0
  7. package/dist/commands/doctor.js +68 -0
  8. package/dist/commands/doctor.js.map +1 -0
  9. package/dist/commands/git-install.js +50 -0
  10. package/dist/commands/git-install.js.map +1 -0
  11. package/dist/commands/init.js +102 -0
  12. package/dist/commands/init.js.map +1 -0
  13. package/dist/commands/mcp.js +66 -0
  14. package/dist/commands/mcp.js.map +1 -0
  15. package/dist/commands/menu.js +33 -0
  16. package/dist/commands/menu.js.map +1 -0
  17. package/dist/core/detect.js +24 -0
  18. package/dist/core/detect.js.map +1 -0
  19. package/dist/core/lint.js +49 -0
  20. package/dist/core/lint.js.map +1 -0
  21. package/dist/core/mcp.js +41 -0
  22. package/dist/core/mcp.js.map +1 -0
  23. package/dist/core/paths.js +9 -0
  24. package/dist/core/paths.js.map +1 -0
  25. package/dist/core/providers.js +53 -0
  26. package/dist/core/providers.js.map +1 -0
  27. package/dist/core/settings.js +31 -0
  28. package/dist/core/settings.js.map +1 -0
  29. package/dist/core/slash-templates.js +56 -0
  30. package/dist/core/slash-templates.js.map +1 -0
  31. package/dist/core/tools.js +27 -0
  32. package/dist/core/tools.js.map +1 -0
  33. package/package.json +43 -164
  34. package/README.HONEST.md +0 -176
  35. package/README.en.md +0 -67
  36. package/README.ja.md +0 -67
  37. package/README.ko.md +0 -67
  38. package/README.zh-CN.md +0 -86
  39. package/bin/ccjk.mjs +0 -5
  40. package/bin/ccjk.ts +0 -222
  41. package/dist/chunks/agent-teams.mjs +0 -145
  42. package/dist/chunks/agent.mjs +0 -1439
  43. package/dist/chunks/agents.mjs +0 -3783
  44. package/dist/chunks/api-cli.mjs +0 -135
  45. package/dist/chunks/api-config-selector.mjs +0 -159
  46. package/dist/chunks/api-providers.mjs +0 -144
  47. package/dist/chunks/api.mjs +0 -115
  48. package/dist/chunks/auto-bootstrap.mjs +0 -358
  49. package/dist/chunks/auto-fixer.mjs +0 -95
  50. package/dist/chunks/auto-updater.mjs +0 -507
  51. package/dist/chunks/banner.mjs +0 -173
  52. package/dist/chunks/bash.mjs +0 -187
  53. package/dist/chunks/boost.mjs +0 -474
  54. package/dist/chunks/brain-config.mjs +0 -75
  55. package/dist/chunks/brain-status.mjs +0 -89
  56. package/dist/chunks/ccjk-agents.mjs +0 -416
  57. package/dist/chunks/ccjk-all.mjs +0 -1046
  58. package/dist/chunks/ccjk-config.mjs +0 -445
  59. package/dist/chunks/ccjk-hooks.mjs +0 -1074
  60. package/dist/chunks/ccjk-mcp.mjs +0 -763
  61. package/dist/chunks/ccjk-setup.mjs +0 -765
  62. package/dist/chunks/ccjk-skills.mjs +0 -518
  63. package/dist/chunks/ccr.mjs +0 -109
  64. package/dist/chunks/ccu.mjs +0 -40
  65. package/dist/chunks/check-updates.mjs +0 -117
  66. package/dist/chunks/claude-code-incremental-manager.mjs +0 -761
  67. package/dist/chunks/claude-config.mjs +0 -606
  68. package/dist/chunks/claude-config2.mjs +0 -62
  69. package/dist/chunks/claude-wrapper.mjs +0 -85
  70. package/dist/chunks/clavue-config.mjs +0 -1454
  71. package/dist/chunks/cleanup-migration.mjs +0 -20
  72. package/dist/chunks/cli-hook.mjs +0 -4096
  73. package/dist/chunks/cloud-sync.mjs +0 -29
  74. package/dist/chunks/code-type-resolver.mjs +0 -880
  75. package/dist/chunks/codex-config-switch.mjs +0 -452
  76. package/dist/chunks/codex-provider-manager.mjs +0 -238
  77. package/dist/chunks/codex-uninstaller.mjs +0 -404
  78. package/dist/chunks/codex.mjs +0 -2141
  79. package/dist/chunks/commands.mjs +0 -108
  80. package/dist/chunks/commands2.mjs +0 -421
  81. package/dist/chunks/commit.mjs +0 -140
  82. package/dist/chunks/completion.mjs +0 -517
  83. package/dist/chunks/config-consolidator.mjs +0 -172
  84. package/dist/chunks/config-switch.mjs +0 -334
  85. package/dist/chunks/config.mjs +0 -558
  86. package/dist/chunks/config2.mjs +0 -484
  87. package/dist/chunks/config3.mjs +0 -486
  88. package/dist/chunks/constants.mjs +0 -323
  89. package/dist/chunks/context-opt.mjs +0 -444
  90. package/dist/chunks/context.mjs +0 -974
  91. package/dist/chunks/dashboard.mjs +0 -481
  92. package/dist/chunks/doctor.mjs +0 -1301
  93. package/dist/chunks/eval.mjs +0 -502
  94. package/dist/chunks/evolution.mjs +0 -322
  95. package/dist/chunks/features.mjs +0 -715
  96. package/dist/chunks/fish.mjs +0 -181
  97. package/dist/chunks/fs-operations.mjs +0 -180
  98. package/dist/chunks/health-alerts.mjs +0 -830
  99. package/dist/chunks/help.mjs +0 -341
  100. package/dist/chunks/hook-installer.mjs +0 -48
  101. package/dist/chunks/impact.mjs +0 -651
  102. package/dist/chunks/index.mjs +0 -23
  103. package/dist/chunks/index10.mjs +0 -19
  104. package/dist/chunks/index11.mjs +0 -1171
  105. package/dist/chunks/index12.mjs +0 -218
  106. package/dist/chunks/index13.mjs +0 -679
  107. package/dist/chunks/index14.mjs +0 -1009
  108. package/dist/chunks/index15.mjs +0 -194
  109. package/dist/chunks/index2.mjs +0 -7637
  110. package/dist/chunks/index3.mjs +0 -171
  111. package/dist/chunks/index4.mjs +0 -26
  112. package/dist/chunks/index5.mjs +0 -19
  113. package/dist/chunks/index6.mjs +0 -19092
  114. package/dist/chunks/index7.mjs +0 -616
  115. package/dist/chunks/index8.mjs +0 -1602
  116. package/dist/chunks/index9.mjs +0 -5384
  117. package/dist/chunks/init.mjs +0 -1911
  118. package/dist/chunks/installer.mjs +0 -757
  119. package/dist/chunks/installer2.mjs +0 -103
  120. package/dist/chunks/interview.mjs +0 -2927
  121. package/dist/chunks/json-config.mjs +0 -60
  122. package/dist/chunks/linux.mjs +0 -3863
  123. package/dist/chunks/macos.mjs +0 -69
  124. package/dist/chunks/main.mjs +0 -635
  125. package/dist/chunks/manager.mjs +0 -1048
  126. package/dist/chunks/marketplace.mjs +0 -265
  127. package/dist/chunks/mcp-cli.mjs +0 -205
  128. package/dist/chunks/mcp-performance.mjs +0 -187
  129. package/dist/chunks/mcp.mjs +0 -667
  130. package/dist/chunks/memory-check.mjs +0 -2973
  131. package/dist/chunks/memory-paths.mjs +0 -259
  132. package/dist/chunks/memory-sync.mjs +0 -209
  133. package/dist/chunks/memory.mjs +0 -354
  134. package/dist/chunks/metrics-display.mjs +0 -153
  135. package/dist/chunks/monitor.mjs +0 -1856
  136. package/dist/chunks/notification.mjs +0 -1864
  137. package/dist/chunks/onboarding.mjs +0 -386
  138. package/dist/chunks/package.mjs +0 -3
  139. package/dist/chunks/paradigm.mjs +0 -74
  140. package/dist/chunks/permission-manager.mjs +0 -250
  141. package/dist/chunks/permissions.mjs +0 -265
  142. package/dist/chunks/persistence-manager.mjs +0 -801
  143. package/dist/chunks/persistence.mjs +0 -707
  144. package/dist/chunks/platform.mjs +0 -395
  145. package/dist/chunks/plugin.mjs +0 -1936
  146. package/dist/chunks/powershell.mjs +0 -213
  147. package/dist/chunks/prompts.mjs +0 -244
  148. package/dist/chunks/providers.mjs +0 -263
  149. package/dist/chunks/quick-actions.mjs +0 -335
  150. package/dist/chunks/quick-provider.mjs +0 -755
  151. package/dist/chunks/quick-setup.mjs +0 -421
  152. package/dist/chunks/remote.mjs +0 -497
  153. package/dist/chunks/research.mjs +0 -1904
  154. package/dist/chunks/rollback.mjs +0 -38
  155. package/dist/chunks/session-manager.mjs +0 -1371
  156. package/dist/chunks/session.mjs +0 -878
  157. package/dist/chunks/sessions.mjs +0 -106
  158. package/dist/chunks/silent-updater.mjs +0 -396
  159. package/dist/chunks/simple-config.mjs +0 -122
  160. package/dist/chunks/skill.mjs +0 -117
  161. package/dist/chunks/skill2.mjs +0 -9052
  162. package/dist/chunks/skills-sync.mjs +0 -1343
  163. package/dist/chunks/skills.mjs +0 -577
  164. package/dist/chunks/slash-commands.mjs +0 -208
  165. package/dist/chunks/smart-guide.mjs +0 -247
  166. package/dist/chunks/snapshot.mjs +0 -58
  167. package/dist/chunks/startup.mjs +0 -487
  168. package/dist/chunks/stats.mjs +0 -191
  169. package/dist/chunks/status.mjs +0 -471
  170. package/dist/chunks/team.mjs +0 -63
  171. package/dist/chunks/thinking.mjs +0 -626
  172. package/dist/chunks/trace.mjs +0 -57
  173. package/dist/chunks/uninstall.mjs +0 -852
  174. package/dist/chunks/update.mjs +0 -174
  175. package/dist/chunks/upgrade-manager.mjs +0 -204
  176. package/dist/chunks/upgrade.mjs +0 -133
  177. package/dist/chunks/version-checker.mjs +0 -891
  178. package/dist/chunks/vim.mjs +0 -903
  179. package/dist/chunks/windows.mjs +0 -14
  180. package/dist/chunks/workflows.mjs +0 -633
  181. package/dist/chunks/wsl.mjs +0 -129
  182. package/dist/chunks/zero-config.mjs +0 -871
  183. package/dist/chunks/zsh.mjs +0 -182
  184. package/dist/cli.d.mts +0 -1
  185. package/dist/cli.d.ts +0 -1
  186. package/dist/cli.mjs +0 -2684
  187. package/dist/i18n/locales/en/agent-teams.json +0 -18
  188. package/dist/i18n/locales/en/agentBrowser.json +0 -80
  189. package/dist/i18n/locales/en/agents.json +0 -135
  190. package/dist/i18n/locales/en/api.json +0 -63
  191. package/dist/i18n/locales/en/ccjk-agents.json +0 -33
  192. package/dist/i18n/locales/en/ccjk-all.json +0 -23
  193. package/dist/i18n/locales/en/ccjk-skills.json +0 -22
  194. package/dist/i18n/locales/en/ccjk.json +0 -276
  195. package/dist/i18n/locales/en/ccr.json +0 -65
  196. package/dist/i18n/locales/en/claude-md.json +0 -73
  197. package/dist/i18n/locales/en/cli.json +0 -148
  198. package/dist/i18n/locales/en/cloud-setup.json +0 -31
  199. package/dist/i18n/locales/en/cloud-sync.json +0 -147
  200. package/dist/i18n/locales/en/cloud.json +0 -40
  201. package/dist/i18n/locales/en/cloudPlugins.json +0 -118
  202. package/dist/i18n/locales/en/codex.json +0 -184
  203. package/dist/i18n/locales/en/cometix.json +0 -29
  204. package/dist/i18n/locales/en/common.json +0 -68
  205. package/dist/i18n/locales/en/config.json +0 -108
  206. package/dist/i18n/locales/en/configuration.json +0 -236
  207. package/dist/i18n/locales/en/context.json +0 -85
  208. package/dist/i18n/locales/en/dashboard.json +0 -78
  209. package/dist/i18n/locales/en/errors.json +0 -26
  210. package/dist/i18n/locales/en/evolution.json +0 -54
  211. package/dist/i18n/locales/en/hooks.json +0 -74
  212. package/dist/i18n/locales/en/hooksSync.json +0 -133
  213. package/dist/i18n/locales/en/installation.json +0 -83
  214. package/dist/i18n/locales/en/interview.json +0 -104
  215. package/dist/i18n/locales/en/language.json +0 -19
  216. package/dist/i18n/locales/en/lsp.json +0 -78
  217. package/dist/i18n/locales/en/marketplace.json +0 -116
  218. package/dist/i18n/locales/en/mcp.json +0 -180
  219. package/dist/i18n/locales/en/memory.json +0 -23
  220. package/dist/i18n/locales/en/menu.json +0 -299
  221. package/dist/i18n/locales/en/multi-config.json +0 -79
  222. package/dist/i18n/locales/en/notification.json +0 -307
  223. package/dist/i18n/locales/en/permissions.json +0 -95
  224. package/dist/i18n/locales/en/persistence.json +0 -127
  225. package/dist/i18n/locales/en/plugins.json +0 -146
  226. package/dist/i18n/locales/en/quick-actions.json +0 -78
  227. package/dist/i18n/locales/en/registry.json +0 -54
  228. package/dist/i18n/locales/en/remote.json +0 -93
  229. package/dist/i18n/locales/en/sandbox.json +0 -44
  230. package/dist/i18n/locales/en/setup.json +0 -44
  231. package/dist/i18n/locales/en/shencha.json +0 -14
  232. package/dist/i18n/locales/en/skills.json +0 -100
  233. package/dist/i18n/locales/en/skillsSync.json +0 -74
  234. package/dist/i18n/locales/en/smartGuide.json +0 -49
  235. package/dist/i18n/locales/en/stats.json +0 -20
  236. package/dist/i18n/locales/en/subagent.json +0 -69
  237. package/dist/i18n/locales/en/superpowers.json +0 -117
  238. package/dist/i18n/locales/en/team.json +0 -7
  239. package/dist/i18n/locales/en/thinking.json +0 -65
  240. package/dist/i18n/locales/en/tools.json +0 -42
  241. package/dist/i18n/locales/en/uninstall.json +0 -56
  242. package/dist/i18n/locales/en/updater.json +0 -29
  243. package/dist/i18n/locales/en/vim.json +0 -169
  244. package/dist/i18n/locales/en/workflow.json +0 -55
  245. package/dist/i18n/locales/en/workspace.json +0 -108
  246. package/dist/i18n/locales/zh-CN/agent-teams.json +0 -18
  247. package/dist/i18n/locales/zh-CN/agentBrowser.json +0 -80
  248. package/dist/i18n/locales/zh-CN/agents.json +0 -135
  249. package/dist/i18n/locales/zh-CN/api.json +0 -63
  250. package/dist/i18n/locales/zh-CN/ccjk-agents.json +0 -33
  251. package/dist/i18n/locales/zh-CN/ccjk-all.json +0 -23
  252. package/dist/i18n/locales/zh-CN/ccjk-skills.json +0 -22
  253. package/dist/i18n/locales/zh-CN/ccjk.json +0 -276
  254. package/dist/i18n/locales/zh-CN/ccr.json +0 -65
  255. package/dist/i18n/locales/zh-CN/claude-md.json +0 -73
  256. package/dist/i18n/locales/zh-CN/cli.json +0 -148
  257. package/dist/i18n/locales/zh-CN/cloud-setup.json +0 -31
  258. package/dist/i18n/locales/zh-CN/cloud-sync.json +0 -147
  259. package/dist/i18n/locales/zh-CN/cloud.json +0 -40
  260. package/dist/i18n/locales/zh-CN/cloudPlugins.json +0 -118
  261. package/dist/i18n/locales/zh-CN/codex.json +0 -184
  262. package/dist/i18n/locales/zh-CN/cometix.json +0 -29
  263. package/dist/i18n/locales/zh-CN/common.json +0 -68
  264. package/dist/i18n/locales/zh-CN/config.json +0 -108
  265. package/dist/i18n/locales/zh-CN/configuration.json +0 -234
  266. package/dist/i18n/locales/zh-CN/context.json +0 -85
  267. package/dist/i18n/locales/zh-CN/dashboard.json +0 -78
  268. package/dist/i18n/locales/zh-CN/errors.json +0 -26
  269. package/dist/i18n/locales/zh-CN/evolution.json +0 -54
  270. package/dist/i18n/locales/zh-CN/hooks.json +0 -74
  271. package/dist/i18n/locales/zh-CN/hooksSync.json +0 -133
  272. package/dist/i18n/locales/zh-CN/installation.json +0 -83
  273. package/dist/i18n/locales/zh-CN/interview.json +0 -104
  274. package/dist/i18n/locales/zh-CN/language.json +0 -19
  275. package/dist/i18n/locales/zh-CN/lsp.json +0 -78
  276. package/dist/i18n/locales/zh-CN/marketplace.json +0 -116
  277. package/dist/i18n/locales/zh-CN/mcp.json +0 -180
  278. package/dist/i18n/locales/zh-CN/memory.json +0 -23
  279. package/dist/i18n/locales/zh-CN/menu.json +0 -299
  280. package/dist/i18n/locales/zh-CN/multi-config.json +0 -79
  281. package/dist/i18n/locales/zh-CN/notification.json +0 -307
  282. package/dist/i18n/locales/zh-CN/permissions.json +0 -95
  283. package/dist/i18n/locales/zh-CN/persistence.json +0 -127
  284. package/dist/i18n/locales/zh-CN/plugins.json +0 -146
  285. package/dist/i18n/locales/zh-CN/quick-actions.json +0 -78
  286. package/dist/i18n/locales/zh-CN/registry.json +0 -54
  287. package/dist/i18n/locales/zh-CN/remote.json +0 -93
  288. package/dist/i18n/locales/zh-CN/sandbox.json +0 -44
  289. package/dist/i18n/locales/zh-CN/setup.json +0 -44
  290. package/dist/i18n/locales/zh-CN/shencha.json +0 -14
  291. package/dist/i18n/locales/zh-CN/skills.json +0 -100
  292. package/dist/i18n/locales/zh-CN/skillsSync.json +0 -74
  293. package/dist/i18n/locales/zh-CN/smartGuide.json +0 -49
  294. package/dist/i18n/locales/zh-CN/stats.json +0 -20
  295. package/dist/i18n/locales/zh-CN/subagent.json +0 -69
  296. package/dist/i18n/locales/zh-CN/superpowers.json +0 -117
  297. package/dist/i18n/locales/zh-CN/team.json +0 -7
  298. package/dist/i18n/locales/zh-CN/thinking.json +0 -65
  299. package/dist/i18n/locales/zh-CN/tools.json +0 -42
  300. package/dist/i18n/locales/zh-CN/uninstall.json +0 -56
  301. package/dist/i18n/locales/zh-CN/updater.json +0 -29
  302. package/dist/i18n/locales/zh-CN/vim.json +0 -169
  303. package/dist/i18n/locales/zh-CN/workflow.json +0 -55
  304. package/dist/i18n/locales/zh-CN/workspace.json +0 -108
  305. package/dist/index.d.mts +0 -5658
  306. package/dist/index.d.ts +0 -5658
  307. package/dist/index.mjs +0 -3732
  308. package/dist/shared/ccjk.5bEolFrk.mjs +0 -254
  309. package/dist/shared/ccjk.8oaxX4iR.mjs +0 -90
  310. package/dist/shared/ccjk.B2U7DsPy.mjs +0 -31
  311. package/dist/shared/ccjk.B2f-cwUP.mjs +0 -468
  312. package/dist/shared/ccjk.BAGoDD49.mjs +0 -36
  313. package/dist/shared/ccjk.BBtCGd_g.mjs +0 -899
  314. package/dist/shared/ccjk.BFQ7yr5S.mjs +0 -16
  315. package/dist/shared/ccjk.BLsIiTqO.mjs +0 -449
  316. package/dist/shared/ccjk.BXv8aYs1.mjs +0 -170
  317. package/dist/shared/ccjk.BnsY5WxD.mjs +0 -171
  318. package/dist/shared/ccjk.BoApaI4j.mjs +0 -28
  319. package/dist/shared/ccjk.Bq8TqZG_.mjs +0 -189
  320. package/dist/shared/ccjk.BtrioX1Z.mjs +0 -25
  321. package/dist/shared/ccjk.Bx_rmYfN.mjs +0 -69
  322. package/dist/shared/ccjk.BzPbSEP2.mjs +0 -115
  323. package/dist/shared/ccjk.C0WLUnFV.mjs +0 -293
  324. package/dist/shared/ccjk.C1hANZTu.mjs +0 -19
  325. package/dist/shared/ccjk.C2jHOZVP.mjs +0 -52
  326. package/dist/shared/ccjk.CNhnT6uQ.mjs +0 -636
  327. package/dist/shared/ccjk.COweQ1RR.mjs +0 -5
  328. package/dist/shared/ccjk.CfKKcvWy.mjs +0 -126
  329. package/dist/shared/ccjk.Cjgrln_h.mjs +0 -297
  330. package/dist/shared/ccjk.CoCHVXl3.mjs +0 -3951
  331. package/dist/shared/ccjk.CwGZSTAK.mjs +0 -319
  332. package/dist/shared/ccjk.CxpGa6MC.mjs +0 -2724
  333. package/dist/shared/ccjk.D-magaEx.mjs +0 -763
  334. package/dist/shared/ccjk.D0g2ABGg.mjs +0 -171
  335. package/dist/shared/ccjk.D6ycHbak.mjs +0 -270
  336. package/dist/shared/ccjk.D75wivnp.mjs +0 -142
  337. package/dist/shared/ccjk.DDL-4C-k.mjs +0 -100
  338. package/dist/shared/ccjk.DFRPtmK_.mjs +0 -75
  339. package/dist/shared/ccjk.DMV3x5Sd.mjs +0 -299
  340. package/dist/shared/ccjk.DZ2LLOa-.mjs +0 -2195
  341. package/dist/shared/ccjk.DbigonEQ.mjs +0 -698
  342. package/dist/shared/ccjk.DcMvE7lf.mjs +0 -618
  343. package/dist/shared/ccjk.DeWpAShp.mjs +0 -1828
  344. package/dist/shared/ccjk.DhJ1kyDR.mjs +0 -30
  345. package/dist/shared/ccjk.DlTXS9rP.mjs +0 -224
  346. package/dist/shared/ccjk.DopKzo3z.mjs +0 -305
  347. package/dist/shared/ccjk.DsZsc4LR.mjs +0 -1280
  348. package/dist/shared/ccjk.DuzJZlgj.mjs +0 -418
  349. package/dist/shared/ccjk.Dxgd2vjc.mjs +0 -444
  350. package/dist/shared/ccjk.J8YiPsOw.mjs +0 -259
  351. package/dist/shared/ccjk.KfSWcGlE.mjs +0 -38
  352. package/dist/shared/ccjk.L7yC58_i.mjs +0 -225
  353. package/dist/shared/ccjk.MwtjAULc.mjs +0 -1447
  354. package/dist/shared/ccjk.OJKHVSOb.mjs +0 -2005
  355. package/dist/shared/ccjk.OTnevPNE.mjs +0 -225
  356. package/dist/shared/ccjk.RyizuzOI.mjs +0 -21
  357. package/dist/shared/ccjk.T_cX87dY.mjs +0 -15
  358. package/dist/shared/ccjk.bQ7Dh1g4.mjs +0 -249
  359. package/dist/shared/ccjk.gDEDGD_t.mjs +0 -38
  360. package/dist/shared/ccjk.hoqrwWdN.mjs +0 -333
  361. package/dist/shared/ccjk.i_vn-9C3.mjs +0 -317
  362. package/dist/shared/ccjk.lG3ccFjm.mjs +0 -885
  363. package/dist/shared/ccjk.wLJHO0Af.mjs +0 -244
  364. package/dist/shared/ccjk.y-a_1vK4.mjs +0 -5127
  365. package/dist/templates/agents/README.md +0 -78
  366. package/dist/templates/agents/fullstack-developer.json +0 -70
  367. package/dist/templates/agents/go-expert.json +0 -69
  368. package/dist/templates/agents/index.json +0 -64
  369. package/dist/templates/agents/python-expert.json +0 -69
  370. package/dist/templates/agents/react-specialist.json +0 -69
  371. package/dist/templates/agents/testing-automation-expert.json +0 -70
  372. package/dist/templates/agents/typescript-architect.json +0 -69
  373. package/dist/templates/claude-code/common/settings.json +0 -109
  374. package/dist/templates/common/error-prevention.md +0 -267
  375. package/dist/templates/common/karpathy-baseline.md +0 -83
  376. package/dist/templates/common/output-styles/zh-CN/carmack-mode.md +0 -381
  377. package/dist/templates/common/output-styles/zh-CN/codex-rigor-mode.md +0 -114
  378. package/dist/templates/common/output-styles/zh-CN/dhh-mode.md +0 -265
  379. package/dist/templates/common/output-styles/zh-CN/evan-you-mode.md +0 -539
  380. package/dist/templates/common/output-styles/zh-CN/jobs-mode.md +0 -369
  381. package/dist/templates/common/output-styles/zh-CN/linus-mode.md +0 -135
  382. package/dist/templates/common/output-styles/zh-CN/uncle-bob-mode.md +0 -221
  383. package/dist/templates/common/workflow/continuousDelivery/en/continuous-delivery.md +0 -628
  384. package/dist/templates/common/workflow/continuousDelivery/zh-CN/continuous-delivery.md +0 -628
  385. package/dist/templates/common/workflow/essential/en/agents/ccjk-config-agent.md +0 -187
  386. package/dist/templates/common/workflow/essential/en/agents/ccjk-mcp-agent.md +0 -191
  387. package/dist/templates/common/workflow/essential/en/agents/ccjk-skill-agent.md +0 -249
  388. package/dist/templates/common/workflow/essential/en/agents/ccjk-workflow-agent.md +0 -277
  389. package/dist/templates/common/workflow/essential/en/agents/get-current-datetime.md +0 -29
  390. package/dist/templates/common/workflow/essential/en/agents/init-architect.md +0 -115
  391. package/dist/templates/common/workflow/essential/en/agents/ui-ux-designer.md +0 -91
  392. package/dist/templates/common/workflow/essential/en/feat.md +0 -92
  393. package/dist/templates/common/workflow/essential/en/goal.md +0 -147
  394. package/dist/templates/common/workflow/essential/en/init-project.md +0 -53
  395. package/dist/templates/common/workflow/essential/zh-CN/agents/get-current-datetime.md +0 -29
  396. package/dist/templates/common/workflow/essential/zh-CN/agents/init-architect.md +0 -115
  397. package/dist/templates/common/workflow/essential/zh-CN/agents/ui-ux-designer.md +0 -91
  398. package/dist/templates/common/workflow/essential/zh-CN/feat.md +0 -315
  399. package/dist/templates/common/workflow/essential/zh-CN/goal.md +0 -146
  400. package/dist/templates/common/workflow/essential/zh-CN/init-project.md +0 -53
  401. package/dist/templates/common/workflow/git/en/git-cleanBranches.md +0 -102
  402. package/dist/templates/common/workflow/git/en/git-commit.md +0 -205
  403. package/dist/templates/common/workflow/git/en/git-rollback.md +0 -90
  404. package/dist/templates/common/workflow/git/en/git-worktree.md +0 -276
  405. package/dist/templates/common/workflow/git/zh-CN/git-cleanBranches.md +0 -102
  406. package/dist/templates/common/workflow/git/zh-CN/git-commit.md +0 -205
  407. package/dist/templates/common/workflow/git/zh-CN/git-rollback.md +0 -90
  408. package/dist/templates/common/workflow/git/zh-CN/git-worktree.md +0 -276
  409. package/dist/templates/common/workflow/interview/en/interview.md +0 -67
  410. package/dist/templates/common/workflow/interview/zh-CN/interview.md +0 -67
  411. package/dist/templates/common/workflow/linearMethod/en/linear-method.md +0 -651
  412. package/dist/templates/common/workflow/linearMethod/zh-CN/linear-method.md +0 -752
  413. package/dist/templates/common/workflow/refactoringMaster/en/refactoring-master.md +0 -516
  414. package/dist/templates/common/workflow/refactoringMaster/zh-CN/refactoring-master.md +0 -812
  415. package/dist/templates/common/workflow/sixStep/en/workflow.md +0 -83
  416. package/dist/templates/common/workflow/sixStep/zh-CN/workflow.md +0 -359
  417. package/dist/templates/common/workflow/specFirstTDD/en/spec-first-tdd.md +0 -364
  418. package/dist/templates/common/workflow/specFirstTDD/zh-CN/spec-first-tdd.md +0 -366
  419. package/dist/templates/hooks/README.md +0 -212
  420. package/dist/templates/hooks/git-workflow-hooks.md +0 -551
  421. package/dist/templates/hooks/post-test/coverage.json +0 -21
  422. package/dist/templates/hooks/post-test/summary.json +0 -21
  423. package/dist/templates/hooks/post-test-coverage.md +0 -434
  424. package/dist/templates/hooks/pre-commit/eslint.json +0 -22
  425. package/dist/templates/hooks/pre-commit/prettier.json +0 -22
  426. package/dist/templates/hooks/pre-commit-black.md +0 -274
  427. package/dist/templates/hooks/pre-commit-eslint.md +0 -153
  428. package/dist/templates/hooks/pre-commit-gofmt.md +0 -284
  429. package/dist/templates/hooks/pre-commit-prettier.md +0 -212
  430. package/dist/templates/hooks/pre-commit-type-check.md +0 -377
  431. package/dist/templates/skills/ccjk-init.md +0 -154
  432. package/dist/templates/skills/ccjk-mcp-setup.md +0 -205
  433. package/dist/templates/skills/ccjk-troubleshoot.md +0 -228
  434. package/dist/templates/skills/django-patterns.md +0 -1016
  435. package/dist/templates/skills/git-workflow.md +0 -748
  436. package/dist/templates/skills/go-idioms.md +0 -963
  437. package/dist/templates/skills/index.json +0 -132
  438. package/dist/templates/skills/nextjs-optimization.md +0 -694
  439. package/dist/templates/skills/python-pep8.md +0 -852
  440. package/dist/templates/skills/react-patterns.md +0 -686
  441. package/dist/templates/skills/rust-patterns.md +0 -1057
  442. package/dist/templates/skills/security-best-practices.md +0 -1413
  443. package/dist/templates/skills/testing-best-practices.md +0 -1315
  444. package/dist/templates/skills/ts-best-practices.md +0 -354
  445. package/templates/agents/README.md +0 -78
  446. package/templates/agents/fullstack-developer.json +0 -70
  447. package/templates/agents/go-expert.json +0 -69
  448. package/templates/agents/index.json +0 -64
  449. package/templates/agents/python-expert.json +0 -69
  450. package/templates/agents/react-specialist.json +0 -69
  451. package/templates/agents/testing-automation-expert.json +0 -70
  452. package/templates/agents/typescript-architect.json +0 -69
  453. package/templates/claude-code/common/settings.json +0 -109
  454. package/templates/common/error-prevention.md +0 -267
  455. package/templates/common/karpathy-baseline.md +0 -83
  456. package/templates/common/output-styles/zh-CN/carmack-mode.md +0 -381
  457. package/templates/common/output-styles/zh-CN/codex-rigor-mode.md +0 -114
  458. package/templates/common/output-styles/zh-CN/dhh-mode.md +0 -265
  459. package/templates/common/output-styles/zh-CN/evan-you-mode.md +0 -539
  460. package/templates/common/output-styles/zh-CN/jobs-mode.md +0 -369
  461. package/templates/common/output-styles/zh-CN/linus-mode.md +0 -135
  462. package/templates/common/output-styles/zh-CN/uncle-bob-mode.md +0 -221
  463. package/templates/common/workflow/continuousDelivery/en/continuous-delivery.md +0 -628
  464. package/templates/common/workflow/continuousDelivery/zh-CN/continuous-delivery.md +0 -628
  465. package/templates/common/workflow/essential/en/agents/ccjk-config-agent.md +0 -187
  466. package/templates/common/workflow/essential/en/agents/ccjk-mcp-agent.md +0 -191
  467. package/templates/common/workflow/essential/en/agents/ccjk-skill-agent.md +0 -249
  468. package/templates/common/workflow/essential/en/agents/ccjk-workflow-agent.md +0 -277
  469. package/templates/common/workflow/essential/en/agents/get-current-datetime.md +0 -29
  470. package/templates/common/workflow/essential/en/agents/init-architect.md +0 -115
  471. package/templates/common/workflow/essential/en/agents/ui-ux-designer.md +0 -91
  472. package/templates/common/workflow/essential/en/feat.md +0 -92
  473. package/templates/common/workflow/essential/en/goal.md +0 -147
  474. package/templates/common/workflow/essential/en/init-project.md +0 -53
  475. package/templates/common/workflow/essential/zh-CN/agents/get-current-datetime.md +0 -29
  476. package/templates/common/workflow/essential/zh-CN/agents/init-architect.md +0 -115
  477. package/templates/common/workflow/essential/zh-CN/agents/ui-ux-designer.md +0 -91
  478. package/templates/common/workflow/essential/zh-CN/feat.md +0 -315
  479. package/templates/common/workflow/essential/zh-CN/goal.md +0 -146
  480. package/templates/common/workflow/essential/zh-CN/init-project.md +0 -53
  481. package/templates/common/workflow/git/en/git-cleanBranches.md +0 -102
  482. package/templates/common/workflow/git/en/git-commit.md +0 -205
  483. package/templates/common/workflow/git/en/git-rollback.md +0 -90
  484. package/templates/common/workflow/git/en/git-worktree.md +0 -276
  485. package/templates/common/workflow/git/zh-CN/git-cleanBranches.md +0 -102
  486. package/templates/common/workflow/git/zh-CN/git-commit.md +0 -205
  487. package/templates/common/workflow/git/zh-CN/git-rollback.md +0 -90
  488. package/templates/common/workflow/git/zh-CN/git-worktree.md +0 -276
  489. package/templates/common/workflow/interview/en/interview.md +0 -67
  490. package/templates/common/workflow/interview/zh-CN/interview.md +0 -67
  491. package/templates/common/workflow/linearMethod/en/linear-method.md +0 -651
  492. package/templates/common/workflow/linearMethod/zh-CN/linear-method.md +0 -752
  493. package/templates/common/workflow/refactoringMaster/en/refactoring-master.md +0 -516
  494. package/templates/common/workflow/refactoringMaster/zh-CN/refactoring-master.md +0 -812
  495. package/templates/common/workflow/sixStep/en/workflow.md +0 -83
  496. package/templates/common/workflow/sixStep/zh-CN/workflow.md +0 -359
  497. package/templates/common/workflow/specFirstTDD/en/spec-first-tdd.md +0 -364
  498. package/templates/common/workflow/specFirstTDD/zh-CN/spec-first-tdd.md +0 -366
  499. package/templates/hooks/README.md +0 -212
  500. package/templates/hooks/git-workflow-hooks.md +0 -551
  501. package/templates/hooks/post-test/coverage.json +0 -21
  502. package/templates/hooks/post-test/summary.json +0 -21
  503. package/templates/hooks/post-test-coverage.md +0 -434
  504. package/templates/hooks/pre-commit/eslint.json +0 -22
  505. package/templates/hooks/pre-commit/prettier.json +0 -22
  506. package/templates/hooks/pre-commit-black.md +0 -274
  507. package/templates/hooks/pre-commit-eslint.md +0 -153
  508. package/templates/hooks/pre-commit-gofmt.md +0 -284
  509. package/templates/hooks/pre-commit-prettier.md +0 -212
  510. package/templates/hooks/pre-commit-type-check.md +0 -377
  511. package/templates/skills/basic.hbs +0 -72
  512. package/templates/skills/ccjk-init.md +0 -154
  513. package/templates/skills/ccjk-mcp-setup.md +0 -205
  514. package/templates/skills/ccjk-troubleshoot.md +0 -228
  515. package/templates/skills/code-refactor.hbs +0 -133
  516. package/templates/skills/code-review.hbs +0 -141
  517. package/templates/skills/django-patterns.md +0 -1016
  518. package/templates/skills/git-workflow.md +0 -748
  519. package/templates/skills/go-idioms.md +0 -963
  520. package/templates/skills/index.json +0 -132
  521. package/templates/skills/nextjs-optimization.md +0 -694
  522. package/templates/skills/python-pep8.md +0 -852
  523. package/templates/skills/react-patterns.md +0 -686
  524. package/templates/skills/rust-patterns.md +0 -1057
  525. package/templates/skills/security-best-practices.md +0 -1413
  526. package/templates/skills/testing-best-practices.md +0 -1315
  527. package/templates/skills/ts-best-practices.md +0 -354
  528. package/templates/skills/type-fix.hbs +0 -132
@@ -1,852 +0,0 @@
1
- ---
2
- name: python-pep8
3
- description: Python PEP 8 style guide, type hints, and modern Python 3.12+ best practices
4
- description_zh: Python PEP 8 风格指南、类型提示和现代 Python 3.12+ 最佳实践
5
- version: 1.0.0
6
- category: programming
7
- triggers: ['/python-pep8', '/python', '/pep8', '/python-style']
8
- use_when:
9
- - Writing Python code following PEP 8 standards
10
- - Implementing type hints and modern Python features
11
- - Code review for Python projects
12
- - Setting up Python project structure and tooling
13
- use_when_zh:
14
- - 编写遵循 PEP 8 标准的 Python 代码
15
- - 实现类型提示和现代 Python 功能
16
- - Python 项目代码审查
17
- - 设置 Python 项目结构和工具
18
- auto_activate: true
19
- priority: 8
20
- agents: [python-expert, code-reviewer]
21
- tags: [python, pep8, type-hints, style-guide, best-practices]
22
- ---
23
-
24
- # Python PEP 8 Best Practices | Python PEP 8 最佳实践
25
-
26
- ## Context | 上下文
27
-
28
- Use this skill when writing Python code that follows PEP 8 standards, implements modern type hints, and uses Python 3.12+ features. Essential for maintainable and professional Python development.
29
-
30
- 在编写遵循 PEP 8 标准、实现现代类型提示并使用 Python 3.12+ 功能的 Python 代码时使用此技能。对于可维护和专业的 Python 开发至关重要。
31
-
32
- ## Code Style and Formatting | 代码风格和格式化
33
-
34
- ### 1. Naming Conventions | 命名约定
35
-
36
- ```python
37
- # ✅ Good: Follow PEP 8 naming conventions
38
-
39
- # Variables and functions: snake_case
40
- user_name = "john_doe"
41
- total_count = 42
42
-
43
- def calculate_total_price(items: list[dict]) -> float:
44
- """Calculate total price of items."""
45
- return sum(item['price'] for item in items)
46
-
47
- # Constants: UPPER_SNAKE_CASE
48
- MAX_RETRY_ATTEMPTS = 3
49
- DEFAULT_TIMEOUT = 30.0
50
- API_BASE_URL = "https://api.example.com"
51
-
52
- # Classes: PascalCase
53
- class UserRepository:
54
- """Repository for user data operations."""
55
-
56
- def __init__(self, database_url: str) -> None:
57
- self._database_url = database_url
58
- self._connection = None
59
-
60
- def find_by_id(self, user_id: int) -> User | None:
61
- """Find user by ID."""
62
- pass
63
-
64
- # Private attributes: leading underscore
65
- class BankAccount:
66
- def __init__(self, initial_balance: float) -> None:
67
- self._balance = initial_balance # Protected
68
- self.__account_number = self._generate_account_number() # Private
69
-
70
- def _generate_account_number(self) -> str:
71
- """Generate unique account number."""
72
- pass
73
-
74
- # ❌ Bad: Inconsistent naming
75
- userName = "john" # Should be user_name
76
- def CalculatePrice(): # Should be calculate_price
77
- pass
78
-
79
- class userRepository: # Should be UserRepository
80
- pass
81
- ```
82
-
83
- ### 2. Line Length and Formatting | 行长度和格式化
84
-
85
- ```python
86
- # ✅ Good: Proper line breaks and formatting
87
-
88
- # Function definitions with many parameters
89
- def create_user_account(
90
- username: str,
91
- email: str,
92
- password: str,
93
- first_name: str,
94
- last_name: str,
95
- date_of_birth: date,
96
- phone_number: str | None = None,
97
- address: str | None = None,
98
- ) -> UserAccount:
99
- """Create a new user account with provided information."""
100
- return UserAccount(
101
- username=username,
102
- email=email,
103
- password=hash_password(password),
104
- profile=UserProfile(
105
- first_name=first_name,
106
- last_name=last_name,
107
- date_of_birth=date_of_birth,
108
- phone_number=phone_number,
109
- address=address,
110
- ),
111
- )
112
-
113
- # Long expressions
114
- total_price = (
115
- base_price
116
- + tax_amount
117
- + shipping_cost
118
- - discount_amount
119
- + handling_fee
120
- )
121
-
122
- # Dictionary formatting
123
- user_data = {
124
- "id": 123,
125
- "username": "john_doe",
126
- "email": "john@example.com",
127
- "profile": {
128
- "first_name": "John",
129
- "last_name": "Doe",
130
- "age": 30,
131
- },
132
- "preferences": {
133
- "theme": "dark",
134
- "notifications": True,
135
- "language": "en",
136
- },
137
- }
138
-
139
- # List comprehensions
140
- filtered_users = [
141
- user for user in users
142
- if user.is_active and user.age >= 18
143
- ]
144
-
145
- # ❌ Bad: Long lines and poor formatting
146
- def create_user_account(username: str, email: str, password: str, first_name: str, last_name: str, date_of_birth: date, phone_number: str | None = None, address: str | None = None) -> UserAccount:
147
- pass
148
-
149
- total_price = base_price + tax_amount + shipping_cost - discount_amount + handling_fee
150
- ```
151
-
152
- ### 3. Import Organization | 导入组织
153
-
154
- ```python
155
- # ✅ Good: Proper import organization
156
-
157
- # Standard library imports
158
- import asyncio
159
- import json
160
- import logging
161
- import os
162
- from collections import defaultdict
163
- from datetime import datetime, timedelta
164
- from pathlib import Path
165
- from typing import Any, Dict, List, Optional, Union
166
-
167
- # Third-party imports
168
- import httpx
169
- import pydantic
170
- from fastapi import FastAPI, HTTPException
171
- from sqlalchemy import create_engine
172
- from sqlalchemy.orm import sessionmaker
173
-
174
- # Local application imports
175
- from .config import settings
176
- from .database import Base, get_db
177
- from .models import User, UserCreate, UserUpdate
178
- from .services import UserService, EmailService
179
-
180
- # ❌ Bad: Mixed import styles and poor organization
181
- from typing import *
182
- import os, sys, json
183
- from fastapi import *
184
- import httpx, pydantic
185
- from .models import User
186
- from .config import settings
187
- import logging
188
- ```
189
-
190
- ## Type Hints and Modern Python | 类型提示和现代 Python
191
-
192
- ### 1. Type Hints Best Practices | 类型提示最佳实践
193
-
194
- ```python
195
- from typing import Any, Dict, List, Optional, Union, TypeVar, Generic, Protocol
196
- from collections.abc import Callable, Iterable, Mapping
197
- from dataclasses import dataclass
198
- from enum import Enum
199
-
200
- # ✅ Good: Comprehensive type hints
201
-
202
- # Basic types
203
- def process_user_data(
204
- user_id: int,
205
- username: str,
206
- email: str,
207
- is_active: bool = True,
208
- metadata: dict[str, Any] | None = None,
209
- ) -> dict[str, Any]:
210
- """Process user data and return result."""
211
- return {
212
- "user_id": user_id,
213
- "username": username,
214
- "email": email,
215
- "is_active": is_active,
216
- "metadata": metadata or {},
217
- "processed_at": datetime.now().isoformat(),
218
- }
219
-
220
- # Generic types
221
- T = TypeVar('T')
222
- K = TypeVar('K')
223
- V = TypeVar('V')
224
-
225
- class Repository(Generic[T]):
226
- """Generic repository pattern."""
227
-
228
- def __init__(self, model_class: type[T]) -> None:
229
- self._model_class = model_class
230
-
231
- def find_by_id(self, id: int) -> T | None:
232
- """Find entity by ID."""
233
- pass
234
-
235
- def find_all(self) -> list[T]:
236
- """Find all entities."""
237
- pass
238
-
239
- def save(self, entity: T) -> T:
240
- """Save entity."""
241
- pass
242
-
243
- # Protocol for structural typing
244
- class Drawable(Protocol):
245
- """Protocol for drawable objects."""
246
-
247
- def draw(self) -> None:
248
- """Draw the object."""
249
- ...
250
-
251
- def render_objects(objects: Iterable[Drawable]) -> None:
252
- """Render all drawable objects."""
253
- for obj in objects:
254
- obj.draw()
255
-
256
- # Union types (Python 3.10+)
257
- def parse_id(value: str | int) -> int:
258
- """Parse ID from string or int."""
259
- if isinstance(value, str):
260
- return int(value)
261
- return value
262
-
263
- # Optional with None default
264
- def get_user_by_email(email: str, include_inactive: bool = False) -> User | None:
265
- """Get user by email address."""
266
- pass
267
-
268
- # Callable types
269
- def apply_operation(
270
- data: list[int],
271
- operation: Callable[[int], int],
272
- ) -> list[int]:
273
- """Apply operation to each item in data."""
274
- return [operation(item) for item in data]
275
-
276
- # ❌ Bad: Missing or incorrect type hints
277
- def process_data(data): # Missing type hints
278
- return data
279
-
280
- def get_user(id: str) -> dict: # Too generic return type
281
- pass
282
-
283
- def calculate(x: Any, y: Any) -> Any: # Overuse of Any
284
- return x + y
285
- ```
286
-
287
- ### 2. Dataclasses and Pydantic Models | 数据类和 Pydantic 模型
288
-
289
- ```python
290
- from dataclasses import dataclass, field
291
- from datetime import datetime
292
- from enum import Enum
293
- from pydantic import BaseModel, Field, validator
294
-
295
- # ✅ Good: Dataclass usage
296
- @dataclass(frozen=True)
297
- class Point:
298
- """Immutable point in 2D space."""
299
- x: float
300
- y: float
301
-
302
- def distance_to(self, other: 'Point') -> float:
303
- """Calculate distance to another point."""
304
- return ((self.x - other.x) ** 2 + (self.y - other.y) ** 2) ** 0.5
305
-
306
- @dataclass
307
- class User:
308
- """User data model."""
309
- id: int
310
- username: str
311
- email: str
312
- created_at: datetime = field(default_factory=datetime.now)
313
- is_active: bool = True
314
- tags: list[str] = field(default_factory=list)
315
-
316
- def __post_init__(self) -> None:
317
- """Validate data after initialization."""
318
- if not self.email or '@' not in self.email:
319
- raise ValueError("Invalid email address")
320
-
321
- # ✅ Good: Pydantic models for validation
322
- class UserStatus(str, Enum):
323
- """User status enumeration."""
324
- ACTIVE = "active"
325
- INACTIVE = "inactive"
326
- SUSPENDED = "suspended"
327
-
328
- class UserCreate(BaseModel):
329
- """Model for creating a new user."""
330
- username: str = Field(..., min_length=3, max_length=50)
331
- email: str = Field(..., regex=r'^[^@]+@[^@]+\.[^@]+$')
332
- password: str = Field(..., min_length=8)
333
- first_name: str = Field(..., min_length=1, max_length=100)
334
- last_name: str = Field(..., min_length=1, max_length=100)
335
-
336
- @validator('username')
337
- def username_must_be_alphanumeric(cls, v: str) -> str:
338
- """Validate username contains only alphanumeric characters."""
339
- if not v.isalnum():
340
- raise ValueError('Username must be alphanumeric')
341
- return v.lower()
342
-
343
- class UserResponse(BaseModel):
344
- """Model for user API responses."""
345
- id: int
346
- username: str
347
- email: str
348
- first_name: str
349
- last_name: str
350
- status: UserStatus
351
- created_at: datetime
352
-
353
- class Config:
354
- """Pydantic configuration."""
355
- orm_mode = True
356
- use_enum_values = True
357
- ```
358
-
359
- ### 3. Error Handling and Exceptions | 错误处理和异常
360
-
361
- ```python
362
- # ✅ Good: Custom exceptions with proper hierarchy
363
- class ApplicationError(Exception):
364
- """Base exception for application errors."""
365
-
366
- def __init__(self, message: str, error_code: str | None = None) -> None:
367
- super().__init__(message)
368
- self.message = message
369
- self.error_code = error_code
370
-
371
- class ValidationError(ApplicationError):
372
- """Exception raised for validation errors."""
373
- pass
374
-
375
- class NotFoundError(ApplicationError):
376
- """Exception raised when resource is not found."""
377
- pass
378
-
379
- class DatabaseError(ApplicationError):
380
- """Exception raised for database operations."""
381
- pass
382
-
383
- # ✅ Good: Proper exception handling
384
- def get_user_by_id(user_id: int) -> User:
385
- """Get user by ID with proper error handling."""
386
- try:
387
- user = database.query(User).filter(User.id == user_id).first()
388
- if user is None:
389
- raise NotFoundError(
390
- f"User with ID {user_id} not found",
391
- error_code="USER_NOT_FOUND"
392
- )
393
- return user
394
- except DatabaseError as e:
395
- logger.error(f"Database error while fetching user {user_id}: {e}")
396
- raise
397
- except Exception as e:
398
- logger.error(f"Unexpected error while fetching user {user_id}: {e}")
399
- raise ApplicationError(
400
- "An unexpected error occurred",
401
- error_code="INTERNAL_ERROR"
402
- ) from e
403
-
404
- # ✅ Good: Context managers for resource management
405
- from contextlib import contextmanager
406
- from typing import Generator
407
-
408
- @contextmanager
409
- def database_transaction() -> Generator[None, None, None]:
410
- """Context manager for database transactions."""
411
- transaction = database.begin()
412
- try:
413
- yield
414
- transaction.commit()
415
- except Exception:
416
- transaction.rollback()
417
- raise
418
- finally:
419
- transaction.close()
420
-
421
- # Usage
422
- def transfer_funds(from_account: int, to_account: int, amount: float) -> None:
423
- """Transfer funds between accounts."""
424
- with database_transaction():
425
- debit_account(from_account, amount)
426
- credit_account(to_account, amount)
427
- log_transaction(from_account, to_account, amount)
428
-
429
- # ❌ Bad: Poor exception handling
430
- def get_user(user_id):
431
- try:
432
- return database.get(user_id)
433
- except: # Too broad exception handling
434
- return None # Silently ignoring errors
435
-
436
- def process_file(filename):
437
- file = open(filename) # No proper resource management
438
- data = file.read()
439
- return data # File never closed
440
- ```
441
-
442
- ## Documentation and Docstrings | 文档和文档字符串
443
-
444
- ### 1. Docstring Conventions | 文档字符串约定
445
-
446
- ```python
447
- # ✅ Good: Comprehensive docstrings following Google style
448
-
449
- def calculate_compound_interest(
450
- principal: float,
451
- rate: float,
452
- time: float,
453
- compound_frequency: int = 1,
454
- ) -> float:
455
- """Calculate compound interest.
456
-
457
- This function calculates the compound interest based on the principal
458
- amount, interest rate, time period, and compounding frequency.
459
-
460
- Args:
461
- principal: The initial amount of money.
462
- rate: The annual interest rate as a decimal (e.g., 0.05 for 5%).
463
- time: The time period in years.
464
- compound_frequency: Number of times interest is compounded per year.
465
- Defaults to 1 (annually).
466
-
467
- Returns:
468
- The final amount after compound interest.
469
-
470
- Raises:
471
- ValueError: If any of the input values are negative.
472
-
473
- Example:
474
- >>> calculate_compound_interest(1000, 0.05, 2, 4)
475
- 1104.89
476
-
477
- Note:
478
- The formula used is: A = P(1 + r/n)^(nt)
479
- where A is the amount, P is principal, r is rate,
480
- n is compound frequency, and t is time.
481
- """
482
- if principal < 0 or rate < 0 or time < 0 or compound_frequency <= 0:
483
- raise ValueError("All values must be non-negative, compound_frequency must be positive")
484
-
485
- return principal * (1 + rate / compound_frequency) ** (compound_frequency * time)
486
-
487
- class UserService:
488
- """Service class for user-related operations.
489
-
490
- This class provides methods for creating, updating, and managing
491
- user accounts in the system.
492
-
493
- Attributes:
494
- repository: The user repository for data access.
495
- email_service: Service for sending emails.
496
-
497
- Example:
498
- >>> service = UserService(user_repo, email_service)
499
- >>> user = service.create_user("john", "john@example.com")
500
- """
501
-
502
- def __init__(self, repository: UserRepository, email_service: EmailService) -> None:
503
- """Initialize the user service.
504
-
505
- Args:
506
- repository: Repository for user data operations.
507
- email_service: Service for sending emails to users.
508
- """
509
- self.repository = repository
510
- self.email_service = email_service
511
-
512
- def create_user(self, username: str, email: str) -> User:
513
- """Create a new user account.
514
-
515
- Args:
516
- username: Unique username for the account.
517
- email: User's email address.
518
-
519
- Returns:
520
- The created user object.
521
-
522
- Raises:
523
- ValidationError: If username or email is invalid.
524
- DuplicateError: If username or email already exists.
525
- """
526
- # Implementation here
527
- pass
528
-
529
- # ❌ Bad: Poor or missing docstrings
530
- def calc(p, r, t):
531
- # Calculate something
532
- return p * r * t
533
-
534
- class User:
535
- def __init__(self, name):
536
- self.name = name
537
-
538
- def save(self):
539
- pass # No documentation
540
- ```
541
-
542
- ## Testing and Code Quality | 测试和代码质量
543
-
544
- ### 1. Unit Testing with pytest | 使用 pytest 进行单元测试
545
-
546
- ```python
547
- import pytest
548
- from unittest.mock import Mock, patch
549
- from datetime import datetime, timedelta
550
-
551
- # ✅ Good: Comprehensive test structure
552
-
553
- class TestUserService:
554
- """Test suite for UserService class."""
555
-
556
- @pytest.fixture
557
- def mock_repository(self) -> Mock:
558
- """Create mock user repository."""
559
- return Mock(spec=UserRepository)
560
-
561
- @pytest.fixture
562
- def mock_email_service(self) -> Mock:
563
- """Create mock email service."""
564
- return Mock(spec=EmailService)
565
-
566
- @pytest.fixture
567
- def user_service(self, mock_repository: Mock, mock_email_service: Mock) -> UserService:
568
- """Create UserService instance with mocked dependencies."""
569
- return UserService(mock_repository, mock_email_service)
570
-
571
- def test_create_user_success(self, user_service: UserService, mock_repository: Mock) -> None:
572
- """Test successful user creation."""
573
- # Arrange
574
- username = "testuser"
575
- email = "test@example.com"
576
- expected_user = User(id=1, username=username, email=email)
577
- mock_repository.create.return_value = expected_user
578
-
579
- # Act
580
- result = user_service.create_user(username, email)
581
-
582
- # Assert
583
- assert result == expected_user
584
- mock_repository.create.assert_called_once_with(username, email)
585
-
586
- def test_create_user_duplicate_username(
587
- self,
588
- user_service: UserService,
589
- mock_repository: Mock
590
- ) -> None:
591
- """Test user creation with duplicate username."""
592
- # Arrange
593
- mock_repository.create.side_effect = DuplicateError("Username already exists")
594
-
595
- # Act & Assert
596
- with pytest.raises(DuplicateError, match="Username already exists"):
597
- user_service.create_user("existing_user", "test@example.com")
598
-
599
- @pytest.mark.parametrize("username,email,expected_error", [
600
- ("", "test@example.com", "Username cannot be empty"),
601
- ("user", "", "Email cannot be empty"),
602
- ("user", "invalid-email", "Invalid email format"),
603
- ])
604
- def test_create_user_validation_errors(
605
- self,
606
- user_service: UserService,
607
- username: str,
608
- email: str,
609
- expected_error: str,
610
- ) -> None:
611
- """Test user creation validation errors."""
612
- with pytest.raises(ValidationError, match=expected_error):
613
- user_service.create_user(username, email)
614
-
615
- # ✅ Good: Integration tests
616
- @pytest.mark.integration
617
- class TestUserServiceIntegration:
618
- """Integration tests for UserService."""
619
-
620
- @pytest.fixture(scope="class")
621
- def database(self):
622
- """Set up test database."""
623
- # Database setup code
624
- yield
625
- # Database cleanup code
626
-
627
- def test_user_creation_flow(self, database) -> None:
628
- """Test complete user creation flow."""
629
- # Test with real database
630
- pass
631
-
632
- # ✅ Good: Property-based testing
633
- from hypothesis import given, strategies as st
634
-
635
- @given(
636
- principal=st.floats(min_value=0.01, max_value=1000000),
637
- rate=st.floats(min_value=0.001, max_value=0.2),
638
- time=st.floats(min_value=0.1, max_value=50),
639
- )
640
- def test_compound_interest_properties(principal: float, rate: float, time: float) -> None:
641
- """Test compound interest calculation properties."""
642
- result = calculate_compound_interest(principal, rate, time)
643
-
644
- # Result should always be greater than principal
645
- assert result > principal
646
-
647
- # Result should be finite
648
- assert math.isfinite(result)
649
- ```
650
-
651
- ### 2. Code Quality Tools Configuration | 代码质量工具配置
652
-
653
- ```python
654
- # pyproject.toml
655
- [tool.black]
656
- line-length = 88
657
- target-version = ['py312']
658
- include = '\.pyi?$'
659
- extend-exclude = '''
660
- /(
661
- # directories
662
- \.eggs
663
- | \.git
664
- | \.hg
665
- | \.mypy_cache
666
- | \.tox
667
- | \.venv
668
- | build
669
- | dist
670
- )/
671
- '''
672
-
673
- [tool.isort]
674
- profile = "black"
675
- multi_line_output = 3
676
- line_length = 88
677
- known_first_party = ["myapp"]
678
- known_third_party = ["fastapi", "pydantic", "sqlalchemy"]
679
-
680
- [tool.mypy]
681
- python_version = "3.12"
682
- warn_return_any = true
683
- warn_unused_configs = true
684
- disallow_untyped_defs = true
685
- disallow_incomplete_defs = true
686
- check_untyped_defs = true
687
- disallow_untyped_decorators = true
688
- no_implicit_optional = true
689
- warn_redundant_casts = true
690
- warn_unused_ignores = true
691
- warn_no_return = true
692
- warn_unreachable = true
693
- strict_equality = true
694
-
695
- [tool.pylint.messages_control]
696
- disable = [
697
- "missing-docstring",
698
- "too-few-public-methods",
699
- ]
700
-
701
- [tool.pytest.ini_options]
702
- minversion = "6.0"
703
- addopts = "-ra -q --strict-markers --strict-config"
704
- testpaths = ["tests"]
705
- markers = [
706
- "slow: marks tests as slow",
707
- "integration: marks tests as integration tests",
708
- "unit: marks tests as unit tests",
709
- ]
710
-
711
- [tool.coverage.run]
712
- source = ["src"]
713
- omit = [
714
- "*/tests/*",
715
- "*/venv/*",
716
- "*/__pycache__/*",
717
- ]
718
-
719
- [tool.coverage.report]
720
- exclude_lines = [
721
- "pragma: no cover",
722
- "def __repr__",
723
- "raise AssertionError",
724
- "raise NotImplementedError",
725
- ]
726
- ```
727
-
728
- ## Performance and Best Practices | 性能和最佳实践
729
-
730
- ### 1. Efficient Data Structures | 高效的数据结构
731
-
732
- ```python
733
- from collections import defaultdict, deque, Counter
734
- from typing import DefaultDict
735
-
736
- # ✅ Good: Use appropriate data structures
737
-
738
- # Use defaultdict to avoid key checks
739
- def group_users_by_department(users: list[User]) -> DefaultDict[str, list[User]]:
740
- """Group users by their department."""
741
- groups: DefaultDict[str, list[User]] = defaultdict(list)
742
- for user in users:
743
- groups[user.department].append(user)
744
- return groups
745
-
746
- # Use deque for efficient queue operations
747
- class TaskQueue:
748
- """Efficient task queue using deque."""
749
-
750
- def __init__(self) -> None:
751
- self._queue: deque[Task] = deque()
752
-
753
- def add_task(self, task: Task) -> None:
754
- """Add task to the end of queue."""
755
- self._queue.append(task)
756
-
757
- def add_priority_task(self, task: Task) -> None:
758
- """Add high-priority task to the front."""
759
- self._queue.appendleft(task)
760
-
761
- def get_next_task(self) -> Task | None:
762
- """Get next task from queue."""
763
- try:
764
- return self._queue.popleft()
765
- except IndexError:
766
- return None
767
-
768
- # Use Counter for counting operations
769
- def analyze_text(text: str) -> dict[str, int]:
770
- """Analyze word frequency in text."""
771
- words = text.lower().split()
772
- return dict(Counter(words))
773
-
774
- # ❌ Bad: Inefficient data structure usage
775
- def group_users_bad(users):
776
- groups = {}
777
- for user in users:
778
- if user.department not in groups: # Unnecessary key check
779
- groups[user.department] = []
780
- groups[user.department].append(user)
781
- return groups
782
- ```
783
-
784
- ### 2. Generator Functions and Memory Efficiency | 生成器函数和内存效率
785
-
786
- ```python
787
- # ✅ Good: Use generators for memory efficiency
788
-
789
- def read_large_file(filename: str) -> Generator[str, None, None]:
790
- """Read large file line by line using generator."""
791
- with open(filename, 'r', encoding='utf-8') as file:
792
- for line in file:
793
- yield line.strip()
794
-
795
- def process_users_batch(users: list[User], batch_size: int = 100) -> Generator[list[User], None, None]:
796
- """Process users in batches to manage memory."""
797
- for i in range(0, len(users), batch_size):
798
- yield users[i:i + batch_size]
799
-
800
- def fibonacci_sequence(n: int) -> Generator[int, None, None]:
801
- """Generate Fibonacci sequence up to n numbers."""
802
- a, b = 0, 1
803
- for _ in range(n):
804
- yield a
805
- a, b = b, a + b
806
-
807
- # Usage
808
- for batch in process_users_batch(all_users, batch_size=50):
809
- process_batch(batch)
810
-
811
- # ✅ Good: List comprehensions vs generator expressions
812
- # Use list comprehension when you need the full list
813
- squared_numbers = [x**2 for x in range(10)]
814
-
815
- # Use generator expression for memory efficiency
816
- sum_of_squares = sum(x**2 for x in range(1000000)) # Memory efficient
817
-
818
- # ❌ Bad: Loading everything into memory
819
- def read_large_file_bad(filename):
820
- with open(filename, 'r') as file:
821
- return file.readlines() # Loads entire file into memory
822
- ```
823
-
824
- ## Code Quality Checklist | 代码质量检查清单
825
-
826
- - [ ] All functions and classes have proper type hints
827
- - [ ] Code follows PEP 8 naming conventions
828
- - [ ] Line length is kept under 88 characters
829
- - [ ] Imports are properly organized (stdlib, third-party, local)
830
- - [ ] Docstrings follow Google or NumPy style
831
- - [ ] Error handling is comprehensive with custom exceptions
832
- - [ ] Unit tests cover all critical functionality
833
- - [ ] Code is formatted with Black and isort
834
- - [ ] Type checking passes with mypy
835
- - [ ] No unused imports or variables
836
- - [ ] Appropriate data structures are used for performance
837
- - [ ] Memory efficiency is considered for large data processing
838
-
839
- ## 代码质量检查清单
840
-
841
- - [ ] 所有函数和类都有适当的类型提示
842
- - [ ] 代码遵循 PEP 8 命名约定
843
- - [ ] 行长度保持在 88 个字符以下
844
- - [ ] 导入正确组织(标准库、第三方、本地)
845
- - [ ] 文档字符串遵循 Google 或 NumPy 风格
846
- - [ ] 使用自定义异常进行全面的错误处理
847
- - [ ] 单元测试覆盖所有关键功能
848
- - [ ] 代码使用 Black 和 isort 格式化
849
- - [ ] 使用 mypy 通过类型检查
850
- - [ ] 没有未使用的导入或变量
851
- - [ ] 使用适当的数据结构以提高性能
852
- - [ ] 考虑大数据处理的内存效率