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,812 +0,0 @@
1
- ---
2
- description: 重构大师模式 - 基于 Martin Fowler 重构模式,小步快跑改善代码设计,降低技术债务
3
- allowed-tools: Read(**), Write(**), Exec(npm test, npm run lint, git diff)
4
- argument-hint: [--pattern <pattern-name>] [--scope <file|module|system>] [--safe-mode]
5
- # examples:
6
- # - /refactoring-master # 启动重构流程
7
- # - /refactoring-master --pattern extract-method # 应用特定重构模式
8
- # - /refactoring-master --safe-mode # 安全模式(每步运行测试)
9
- ---
10
-
11
- > **基于 Discipline Baseline**:本 workflow 在 4 条全局原则(Think / Simplicity / Surgical / Goal-driven)之上提供更具体的流程编排。当本文档与 baseline 冲突,**baseline 优先**。
12
-
13
- # Refactoring Master Mode
14
-
15
- 基于 Martin Fowler 的《重构:改善既有代码的设计》(第 2 版),系统化地改善代码质量。
16
-
17
- ---
18
-
19
- ## 核心理念
20
-
21
- **重构(Refactoring)**:在不改变代码外部行为的前提下,改善代码内部结构。
22
-
23
- **关键原则**:
24
- 1. **小步前进**:每次只做一个小改动
25
- 2. **测试保护**:重构前后测试必须通过
26
- 3. **持续集成**:频繁提交,避免大规模合并冲突
27
- 4. **识别坏味道**:系统化识别需要重构的代码
28
- 5. **应用模式**:使用经过验证的重构手法
29
-
30
- ---
31
-
32
- ## Refactoring Workflow
33
-
34
- ### Phase 1: Code Smell Detection(识别代码坏味道)
35
-
36
- **目标**:系统化识别需要改进的代码
37
-
38
- #### 常见代码坏味道
39
-
40
- ##### 1. 神秘命名(Mysterious Name)
41
-
42
- ```typescript
43
- // ❌ Bad: 命名不清晰
44
- function calc(a: number, b: number): number {
45
- return a * b * 0.9
46
- }
47
-
48
- // ✅ Good: 清晰表达意图
49
- function calculateDiscountedPrice(originalPrice: number, quantity: number): number {
50
- const DISCOUNT_RATE = 0.9
51
- return originalPrice * quantity * DISCOUNT_RATE
52
- }
53
- ```
54
-
55
- ##### 2. 重复代码(Duplicated Code)
56
-
57
- ```typescript
58
- // ❌ Bad: 重复的验证逻辑
59
- function createUser(data: UserData) {
60
- if (!data.email || !data.email.includes('@')) {
61
- throw new Error('Invalid email')
62
- }
63
- if (!data.password || data.password.length < 8) {
64
- throw new Error('Password too short')
65
- }
66
- // ...
67
- }
68
-
69
- function updateUser(id: string, data: UserData) {
70
- if (!data.email || !data.email.includes('@')) {
71
- throw new Error('Invalid email')
72
- }
73
- if (!data.password || data.password.length < 8) {
74
- throw new Error('Password too short')
75
- }
76
- // ...
77
- }
78
-
79
- // ✅ Good: 提取共同验证逻辑
80
- function validateUserData(data: UserData) {
81
- if (!data.email || !data.email.includes('@')) {
82
- throw new Error('Invalid email')
83
- }
84
- if (!data.password || data.password.length < 8) {
85
- throw new Error('Password too short')
86
- }
87
- }
88
-
89
- function createUser(data: UserData) {
90
- validateUserData(data)
91
- // ...
92
- }
93
-
94
- function updateUser(id: string, data: UserData) {
95
- validateUserData(data)
96
- // ...
97
- }
98
- ```
99
-
100
- ##### 3. 过长函数(Long Function)
101
-
102
- ```typescript
103
- // ❌ Bad: 100+ 行的函数
104
- function processOrder(order: Order) {
105
- // 验证订单(20 行)
106
- // 计算价格(30 行)
107
- // 检查库存(25 行)
108
- // 创建发货单(20 行)
109
- // 发送通知(15 行)
110
- }
111
-
112
- // ✅ Good: 拆分为多个小函数
113
- function processOrder(order: Order) {
114
- validateOrder(order)
115
- const totalPrice = calculateTotalPrice(order)
116
- checkInventory(order.items)
117
- createShipment(order)
118
- sendNotifications(order)
119
- }
120
- ```
121
-
122
- ##### 4. 过长参数列表(Long Parameter List)
123
-
124
- ```typescript
125
- // ❌ Bad: 6 个参数
126
- function createInvoice(
127
- customerId: string,
128
- customerName: string,
129
- customerEmail: string,
130
- items: Item[],
131
- discount: number,
132
- taxRate: number
133
- ) { }
134
-
135
- // ✅ Good: 使用对象参数
136
- interface InvoiceParams {
137
- customer: {
138
- id: string
139
- name: string
140
- email: string
141
- }
142
- items: Item[]
143
- pricing: {
144
- discount: number
145
- taxRate: number
146
- }
147
- }
148
-
149
- function createInvoice(params: InvoiceParams) { }
150
- ```
151
-
152
- ##### 5. 发散式变化(Divergent Change)
153
-
154
- ```typescript
155
- // ❌ Bad: 一个类承担多种变化原因
156
- class User {
157
- // 用户数据管理
158
- updateProfile() { }
159
- changePassword() { }
160
-
161
- // 权限管理
162
- grantPermission() { }
163
- revokePermission() { }
164
-
165
- // 通知管理
166
- sendEmail() { }
167
- sendSMS() { }
168
- }
169
-
170
- // ✅ Good: 按职责分离
171
- class User {
172
- updateProfile() { }
173
- changePassword() { }
174
- }
175
-
176
- class UserPermissions {
177
- grant() { }
178
- revoke() { }
179
- }
180
-
181
- class UserNotifications {
182
- sendEmail() { }
183
- sendSMS() { }
184
- }
185
- ```
186
-
187
- ##### 6. 霰弹式修改(Shotgun Surgery)
188
-
189
- ```typescript
190
- // ❌ Bad: 修改一个功能需要改多个文件
191
- // file1.ts
192
- const TAX_RATE = 0.08
193
-
194
- // file2.ts
195
- const TAX_RATE = 0.08
196
-
197
- // file3.ts
198
- const TAX_RATE = 0.08
199
-
200
- // ✅ Good: 集中配置
201
- // config.ts
202
- export const TAX_RATE = 0.08
203
-
204
- // file1.ts, file2.ts, file3.ts
205
- import { TAX_RATE } from './config'
206
- ```
207
-
208
- ##### 7. 依恋情结(Feature Envy)
209
-
210
- ```typescript
211
- // ❌ Bad: 函数过度使用另一个类的数据
212
- class Order {
213
- calculateTotal(customer: Customer) {
214
- let total = this.basePrice
215
- if (customer.loyaltyLevel === 'gold') {
216
- total *= 0.9
217
- } else if (customer.loyaltyLevel === 'silver') {
218
- total *= 0.95
219
- }
220
- return total
221
- }
222
- }
223
-
224
- // ✅ Good: 将逻辑移到数据所在的类
225
- class Customer {
226
- getDiscountRate(): number {
227
- if (this.loyaltyLevel === 'gold') return 0.9
228
- if (this.loyaltyLevel === 'silver') return 0.95
229
- return 1.0
230
- }
231
- }
232
-
233
- class Order {
234
- calculateTotal(customer: Customer) {
235
- return this.basePrice * customer.getDiscountRate()
236
- }
237
- }
238
- ```
239
-
240
- ##### 8. 数据泥团(Data Clumps)
241
-
242
- ```typescript
243
- // ❌ Bad: 总是一起出现的数据
244
- function createAddress(street: string, city: string, zipCode: string) { }
245
- function validateAddress(street: string, city: string, zipCode: string) { }
246
- function formatAddress(street: string, city: string, zipCode: string) { }
247
-
248
- // ✅ Good: 封装为对象
249
- interface Address {
250
- street: string
251
- city: string
252
- zipCode: string
253
- }
254
-
255
- function createAddress(address: Address) { }
256
- function validateAddress(address: Address) { }
257
- function formatAddress(address: Address) { }
258
- ```
259
-
260
- ##### 9. 基本类型偏执(Primitive Obsession)
261
-
262
- ```typescript
263
- // ❌ Bad: 使用基本类型表示领域概念
264
- function sendEmail(email: string) {
265
- // 每次都要验证
266
- if (!email.includes('@')) {
267
- throw new Error('Invalid email')
268
- }
269
- }
270
-
271
- // ✅ Good: 使用值对象
272
- class Email {
273
- private constructor(private readonly value: string) {
274
- if (!value.includes('@')) {
275
- throw new Error('Invalid email')
276
- }
277
- }
278
-
279
- static create(value: string): Email {
280
- return new Email(value)
281
- }
282
-
283
- toString(): string {
284
- return this.value
285
- }
286
- }
287
-
288
- function sendEmail(email: Email) {
289
- // 不需要验证,类型系统保证有效性
290
- }
291
- ```
292
-
293
- ##### 10. 过长的条件语句(Long Conditional)
294
-
295
- ```typescript
296
- // ❌ Bad: 复杂的条件判断
297
- function getShippingCost(order: Order): number {
298
- if (order.total > 100 && order.customer.isPremium && order.destination === 'domestic') {
299
- return 0
300
- } else if (order.total > 50 && order.customer.isPremium) {
301
- return 5
302
- } else if (order.destination === 'international') {
303
- return 20
304
- } else {
305
- return 10
306
- }
307
- }
308
-
309
- // ✅ Good: 使用策略模式
310
- interface ShippingStrategy {
311
- calculate(order: Order): number
312
- }
313
-
314
- class FreeShipping implements ShippingStrategy {
315
- calculate(order: Order): number {
316
- return 0
317
- }
318
- }
319
-
320
- class StandardShipping implements ShippingStrategy {
321
- calculate(order: Order): number {
322
- return order.destination === 'international' ? 20 : 10
323
- }
324
- }
325
-
326
- class ShippingCalculator {
327
- calculate(order: Order): number {
328
- const strategy = this.selectStrategy(order)
329
- return strategy.calculate(order)
330
- }
331
-
332
- private selectStrategy(order: Order): ShippingStrategy {
333
- if (this.qualifiesForFreeShipping(order)) {
334
- return new FreeShipping()
335
- }
336
- return new StandardShipping()
337
- }
338
-
339
- private qualifiesForFreeShipping(order: Order): boolean {
340
- return order.total > 100 &&
341
- order.customer.isPremium &&
342
- order.destination === 'domestic'
343
- }
344
- }
345
- ```
346
-
347
- ---
348
-
349
- ### Phase 2: Refactoring Catalog(重构手法目录)
350
-
351
- #### 提取函数(Extract Function)
352
-
353
- **时机**:函数过长,或需要注释才能理解的代码块
354
-
355
- ```typescript
356
- // Before
357
- function printOwing(invoice: Invoice) {
358
- let outstanding = 0
359
-
360
- console.log('***********************')
361
- console.log('**** Customer Owes ****')
362
- console.log('***********************')
363
-
364
- // calculate outstanding
365
- for (const order of invoice.orders) {
366
- outstanding += order.amount
367
- }
368
-
369
- // record due date
370
- const today = new Date()
371
- invoice.dueDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 30)
372
-
373
- // print details
374
- console.log(`name: ${invoice.customer}`)
375
- console.log(`amount: ${outstanding}`)
376
- console.log(`due: ${invoice.dueDate.toLocaleDateString()}`)
377
- }
378
-
379
- // After
380
- function printOwing(invoice: Invoice) {
381
- printBanner()
382
- const outstanding = calculateOutstanding(invoice)
383
- recordDueDate(invoice)
384
- printDetails(invoice, outstanding)
385
- }
386
-
387
- function printBanner() {
388
- console.log('***********************')
389
- console.log('**** Customer Owes ****')
390
- console.log('***********************')
391
- }
392
-
393
- function calculateOutstanding(invoice: Invoice): number {
394
- return invoice.orders.reduce((sum, order) => sum + order.amount, 0)
395
- }
396
-
397
- function recordDueDate(invoice: Invoice) {
398
- const today = new Date()
399
- invoice.dueDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 30)
400
- }
401
-
402
- function printDetails(invoice: Invoice, outstanding: number) {
403
- console.log(`name: ${invoice.customer}`)
404
- console.log(`amount: ${outstanding}`)
405
- console.log(`due: ${invoice.dueDate.toLocaleDateString()}`)
406
- }
407
- ```
408
-
409
- #### 内联函数(Inline Function)
410
-
411
- **时机**:函数体和函数名一样清晰,或函数过度拆分
412
-
413
- ```typescript
414
- // Before
415
- function getRating(driver: Driver): number {
416
- return moreThanFiveLateDeliveries(driver) ? 2 : 1
417
- }
418
-
419
- function moreThanFiveLateDeliveries(driver: Driver): boolean {
420
- return driver.numberOfLateDeliveries > 5
421
- }
422
-
423
- // After
424
- function getRating(driver: Driver): number {
425
- return driver.numberOfLateDeliveries > 5 ? 2 : 1
426
- }
427
- ```
428
-
429
- #### 提取变量(Extract Variable)
430
-
431
- **时机**:表达式复杂难懂
432
-
433
- ```typescript
434
- // Before
435
- function price(order: Order): number {
436
- return order.quantity * order.itemPrice -
437
- Math.max(0, order.quantity - 500) * order.itemPrice * 0.05 +
438
- Math.min(order.quantity * order.itemPrice * 0.1, 100)
439
- }
440
-
441
- // After
442
- function price(order: Order): number {
443
- const basePrice = order.quantity * order.itemPrice
444
- const quantityDiscount = Math.max(0, order.quantity - 500) * order.itemPrice * 0.05
445
- const shipping = Math.min(basePrice * 0.1, 100)
446
- return basePrice - quantityDiscount + shipping
447
- }
448
- ```
449
-
450
- #### 引入参数对象(Introduce Parameter Object)
451
-
452
- **时机**:多个参数总是一起出现
453
-
454
- ```typescript
455
- // Before
456
- function amountInvoiced(startDate: Date, endDate: Date) { }
457
- function amountReceived(startDate: Date, endDate: Date) { }
458
- function amountOverdue(startDate: Date, endDate: Date) { }
459
-
460
- // After
461
- class DateRange {
462
- constructor(
463
- public readonly start: Date,
464
- public readonly end: Date
465
- ) { }
466
- }
467
-
468
- function amountInvoiced(dateRange: DateRange) { }
469
- function amountReceived(dateRange: DateRange) { }
470
- function amountOverdue(dateRange: DateRange) { }
471
- ```
472
-
473
- #### 以多态取代条件表达式(Replace Conditional with Polymorphism)
474
-
475
- **时机**:根据类型码进行条件判断
476
-
477
- ```typescript
478
- // Before
479
- class Bird {
480
- constructor(public type: string) { }
481
-
482
- getSpeed(): number {
483
- switch (this.type) {
484
- case 'european':
485
- return 35
486
- case 'african':
487
- return 40
488
- case 'norwegian-blue':
489
- return this.isNailed ? 0 : 10
490
- default:
491
- throw new Error('Unknown bird type')
492
- }
493
- }
494
- }
495
-
496
- // After
497
- abstract class Bird {
498
- abstract getSpeed(): number
499
- }
500
-
501
- class EuropeanBird extends Bird {
502
- getSpeed(): number {
503
- return 35
504
- }
505
- }
506
-
507
- class AfricanBird extends Bird {
508
- getSpeed(): number {
509
- return 40
510
- }
511
- }
512
-
513
- class NorwegianBlueBird extends Bird {
514
- constructor(private isNailed: boolean) {
515
- super()
516
- }
517
-
518
- getSpeed(): number {
519
- return this.isNailed ? 0 : 10
520
- }
521
- }
522
- ```
523
-
524
- #### 拆分循环(Split Loop)
525
-
526
- **时机**:一个循环做多件事
527
-
528
- ```typescript
529
- // Before
530
- let youngest = people[0] ? people[0].age : Infinity
531
- let totalSalary = 0
532
- for (const person of people) {
533
- if (person.age < youngest) youngest = person.age
534
- totalSalary += person.salary
535
- }
536
-
537
- // After
538
- let youngest = people[0] ? people[0].age : Infinity
539
- for (const person of people) {
540
- if (person.age < youngest) youngest = person.age
541
- }
542
-
543
- let totalSalary = 0
544
- for (const person of people) {
545
- totalSalary += person.salary
546
- }
547
-
548
- // Better: 使用函数式编程
549
- const youngest = Math.min(...people.map(p => p.age))
550
- const totalSalary = people.reduce((sum, p) => sum + p.salary, 0)
551
- ```
552
-
553
- #### 移除死代码(Remove Dead Code)
554
-
555
- **时机**:代码不再被使用
556
-
557
- ```typescript
558
- // Before
559
- function oldFeature() {
560
- // 这个功能已经被新版本替代
561
- // 但代码还在这里
562
- }
563
-
564
- function newFeature() {
565
- // 新实现
566
- }
567
-
568
- // After
569
- function newFeature() {
570
- // 新实现
571
- }
572
- // 直接删除 oldFeature,版本控制系统会保留历史
573
- ```
574
-
575
- ---
576
-
577
- ### Phase 3: Safe Refactoring Process(安全重构流程)
578
-
579
- #### 步骤 1: 确保测试覆盖
580
-
581
- ```bash
582
- # 运行测试,确保当前代码正常工作
583
- npm test
584
-
585
- # 检查覆盖率
586
- npm run coverage
587
-
588
- # 如果覆盖率不足,先补充测试
589
- ```
590
-
591
- #### 步骤 2: 小步重构
592
-
593
- ```typescript
594
- // 每次只做一个小改动
595
- // 例如:先提取变量
596
- const basePrice = order.quantity * order.itemPrice
597
-
598
- // 运行测试
599
- npm test // ✅ 通过
600
-
601
- // 再提取下一个变量
602
- const quantityDiscount = Math.max(0, order.quantity - 500) * order.itemPrice * 0.05
603
-
604
- // 再次运行测试
605
- npm test // ✅ 通过
606
- ```
607
-
608
- #### 步骤 3: 频繁提交
609
-
610
- ```bash
611
- # 每完成一个小重构就提交
612
- git add .
613
- git commit -m "refactor: extract basePrice variable"
614
-
615
- # 继续下一个重构
616
- # ...
617
-
618
- git commit -m "refactor: extract quantityDiscount variable"
619
- ```
620
-
621
- #### 步骤 4: 使用 IDE 自动重构
622
-
623
- ```typescript
624
- // 使用 IDE 的重构功能(更安全)
625
- // - Rename Symbol (F2)
626
- // - Extract Method
627
- // - Extract Variable
628
- // - Inline Variable
629
- // - Move to File
630
- ```
631
-
632
- ---
633
-
634
- ### Phase 4: Refactoring Patterns(重构模式)
635
-
636
- #### 模式 1: 分层架构重构
637
-
638
- ```typescript
639
- // Before: 所有逻辑混在一起
640
- app.post('/users', async (req, res) => {
641
- // 验证
642
- if (!req.body.email || !req.body.email.includes('@')) {
643
- return res.status(400).json({ error: 'Invalid email' })
644
- }
645
-
646
- // 业务逻辑
647
- const hashedPassword = await bcrypt.hash(req.body.password, 10)
648
- const user = {
649
- email: req.body.email,
650
- password: hashedPassword,
651
- createdAt: new Date()
652
- }
653
-
654
- // 数据访问
655
- await db.collection('users').insertOne(user)
656
-
657
- res.json({ id: user._id })
658
- })
659
-
660
- // After: 分层架构
661
- // Controller Layer
662
- class UserController {
663
- async create(req: Request, res: Response) {
664
- const dto = CreateUserDto.from(req.body)
665
- const user = await this.userService.create(dto)
666
- res.json({ id: user.id })
667
- }
668
- }
669
-
670
- // Service Layer
671
- class UserService {
672
- async create(dto: CreateUserDto): Promise<User> {
673
- const hashedPassword = await this.passwordHasher.hash(dto.password)
674
- const user = User.create(dto.email, hashedPassword)
675
- return await this.userRepository.save(user)
676
- }
677
- }
678
-
679
- // Repository Layer
680
- class UserRepository {
681
- async save(user: User): Promise<User> {
682
- await this.db.collection('users').insertOne(user)
683
- return user
684
- }
685
- }
686
- ```
687
-
688
- #### 模式 2: 依赖注入重构
689
-
690
- ```typescript
691
- // Before: 硬编码依赖
692
- class OrderService {
693
- processOrder(order: Order) {
694
- const payment = new PaymentService() // 硬编码
695
- const shipping = new ShippingService() // 硬编码
696
- payment.charge(order.total)
697
- shipping.ship(order)
698
- }
699
- }
700
-
701
- // After: 依赖注入
702
- class OrderService {
703
- constructor(
704
- private paymentService: PaymentService,
705
- private shippingService: ShippingService
706
- ) { }
707
-
708
- processOrder(order: Order) {
709
- this.paymentService.charge(order.total)
710
- this.shippingService.ship(order)
711
- }
712
- }
713
-
714
- // 便于测试
715
- const mockPayment = new MockPaymentService()
716
- const mockShipping = new MockShippingService()
717
- const service = new OrderService(mockPayment, mockShipping)
718
- ```
719
-
720
- #### 模式 3: 领域模型重构
721
-
722
- ```typescript
723
- // Before: 贫血模型
724
- interface User {
725
- id: string
726
- email: string
727
- password: string
728
- createdAt: Date
729
- }
730
-
731
- function changePassword(user: User, newPassword: string) {
732
- if (newPassword.length < 8) {
733
- throw new Error('Password too short')
734
- }
735
- user.password = hashPassword(newPassword)
736
- }
737
-
738
- // After: 充血模型
739
- class User {
740
- private constructor(
741
- public readonly id: string,
742
- public readonly email: Email,
743
- private password: HashedPassword,
744
- public readonly createdAt: Date
745
- ) { }
746
-
747
- changePassword(newPassword: string) {
748
- const hashed = HashedPassword.create(newPassword)
749
- this.password = hashed
750
- }
751
-
752
- verifyPassword(password: string): boolean {
753
- return this.password.verify(password)
754
- }
755
- }
756
- ```
757
-
758
- ---
759
-
760
- ## Refactoring Checklist
761
-
762
- ### 重构前
763
-
764
- - [ ] 代码有足够的测试覆盖
765
- - [ ] 所有测试都通过
766
- - [ ] 代码已提交到版本控制
767
- - [ ] 理解要重构的代码
768
- - [ ] 确定重构目标
769
-
770
- ### 重构中
771
-
772
- - [ ] 每次只做一个小改动
773
- - [ ] 每次改动后运行测试
774
- - [ ] 保持测试绿色
775
- - [ ] 频繁提交
776
- - [ ] 使用 IDE 自动重构功能
777
-
778
- ### 重构后
779
-
780
- - [ ] 所有测试通过
781
- - [ ] 代码更易理解
782
- - [ ] 代码更易修改
783
- - [ ] 没有引入新的 bug
784
- - [ ] 性能没有明显下降
785
-
786
- ---
787
-
788
- ## Command Options
789
-
790
- - `--pattern <name>`:应用特定重构模式
791
- - `--scope <file|module|system>`:重构范围
792
- - `--safe-mode`:每步都运行测试
793
- - `--dry-run`:预览重构效果
794
-
795
- ---
796
-
797
- ## Success Metrics
798
-
799
- - ✅ 代码复杂度降低 30%
800
- - ✅ 代码重复率 < 5%
801
- - ✅ 平均函数长度 < 20 行
802
- - ✅ 技术债务减少 60%
803
- - ✅ 新功能开发速度提升 40%
804
-
805
- ---
806
-
807
- ## References
808
-
809
- - Martin Fowler - *Refactoring: Improving the Design of Existing Code* (2nd Edition)
810
- - Robert C. Martin - *Clean Code*
811
- - Joshua Kerievsky - *Refactoring to Patterns*
812
- - Michael Feathers - *Working Effectively with Legacy Code*