ccjk 14.2.2 → 15.1.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 (532) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +75 -338
  3. package/dist/cli.js +89 -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 +165 -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 +42 -0
  16. package/dist/commands/menu.js.map +1 -0
  17. package/dist/commands/profile.js +138 -0
  18. package/dist/commands/profile.js.map +1 -0
  19. package/dist/core/detect.js +24 -0
  20. package/dist/core/detect.js.map +1 -0
  21. package/dist/core/lint.js +49 -0
  22. package/dist/core/lint.js.map +1 -0
  23. package/dist/core/mcp.js +41 -0
  24. package/dist/core/mcp.js.map +1 -0
  25. package/dist/core/paths.js +9 -0
  26. package/dist/core/paths.js.map +1 -0
  27. package/dist/core/profiles.js +104 -0
  28. package/dist/core/profiles.js.map +1 -0
  29. package/dist/core/providers.js +53 -0
  30. package/dist/core/providers.js.map +1 -0
  31. package/dist/core/settings.js +31 -0
  32. package/dist/core/settings.js.map +1 -0
  33. package/dist/core/slash-templates.js +56 -0
  34. package/dist/core/slash-templates.js.map +1 -0
  35. package/dist/core/tools.js +27 -0
  36. package/dist/core/tools.js.map +1 -0
  37. package/package.json +43 -164
  38. package/README.HONEST.md +0 -176
  39. package/README.en.md +0 -67
  40. package/README.ja.md +0 -67
  41. package/README.ko.md +0 -67
  42. package/README.zh-CN.md +0 -86
  43. package/bin/ccjk.mjs +0 -5
  44. package/bin/ccjk.ts +0 -222
  45. package/dist/chunks/agent-teams.mjs +0 -145
  46. package/dist/chunks/agent.mjs +0 -1439
  47. package/dist/chunks/agents.mjs +0 -3783
  48. package/dist/chunks/api-cli.mjs +0 -135
  49. package/dist/chunks/api-config-selector.mjs +0 -159
  50. package/dist/chunks/api-providers.mjs +0 -144
  51. package/dist/chunks/api.mjs +0 -115
  52. package/dist/chunks/auto-bootstrap.mjs +0 -358
  53. package/dist/chunks/auto-fixer.mjs +0 -95
  54. package/dist/chunks/auto-updater.mjs +0 -507
  55. package/dist/chunks/banner.mjs +0 -173
  56. package/dist/chunks/bash.mjs +0 -187
  57. package/dist/chunks/boost.mjs +0 -474
  58. package/dist/chunks/brain-config.mjs +0 -75
  59. package/dist/chunks/brain-status.mjs +0 -89
  60. package/dist/chunks/ccjk-agents.mjs +0 -416
  61. package/dist/chunks/ccjk-all.mjs +0 -1046
  62. package/dist/chunks/ccjk-config.mjs +0 -445
  63. package/dist/chunks/ccjk-hooks.mjs +0 -1074
  64. package/dist/chunks/ccjk-mcp.mjs +0 -763
  65. package/dist/chunks/ccjk-setup.mjs +0 -765
  66. package/dist/chunks/ccjk-skills.mjs +0 -518
  67. package/dist/chunks/ccr.mjs +0 -109
  68. package/dist/chunks/ccu.mjs +0 -40
  69. package/dist/chunks/check-updates.mjs +0 -117
  70. package/dist/chunks/claude-code-incremental-manager.mjs +0 -761
  71. package/dist/chunks/claude-config.mjs +0 -606
  72. package/dist/chunks/claude-config2.mjs +0 -62
  73. package/dist/chunks/claude-wrapper.mjs +0 -85
  74. package/dist/chunks/clavue-config.mjs +0 -1454
  75. package/dist/chunks/cleanup-migration.mjs +0 -20
  76. package/dist/chunks/cli-hook.mjs +0 -4096
  77. package/dist/chunks/cloud-sync.mjs +0 -29
  78. package/dist/chunks/code-type-resolver.mjs +0 -880
  79. package/dist/chunks/codex-config-switch.mjs +0 -452
  80. package/dist/chunks/codex-provider-manager.mjs +0 -238
  81. package/dist/chunks/codex-uninstaller.mjs +0 -404
  82. package/dist/chunks/codex.mjs +0 -2141
  83. package/dist/chunks/commands.mjs +0 -108
  84. package/dist/chunks/commands2.mjs +0 -421
  85. package/dist/chunks/commit.mjs +0 -140
  86. package/dist/chunks/completion.mjs +0 -517
  87. package/dist/chunks/config-consolidator.mjs +0 -172
  88. package/dist/chunks/config-switch.mjs +0 -334
  89. package/dist/chunks/config.mjs +0 -558
  90. package/dist/chunks/config2.mjs +0 -484
  91. package/dist/chunks/config3.mjs +0 -486
  92. package/dist/chunks/constants.mjs +0 -323
  93. package/dist/chunks/context-opt.mjs +0 -444
  94. package/dist/chunks/context.mjs +0 -974
  95. package/dist/chunks/dashboard.mjs +0 -481
  96. package/dist/chunks/doctor.mjs +0 -1301
  97. package/dist/chunks/eval.mjs +0 -502
  98. package/dist/chunks/evolution.mjs +0 -322
  99. package/dist/chunks/features.mjs +0 -715
  100. package/dist/chunks/fish.mjs +0 -181
  101. package/dist/chunks/fs-operations.mjs +0 -180
  102. package/dist/chunks/health-alerts.mjs +0 -830
  103. package/dist/chunks/help.mjs +0 -341
  104. package/dist/chunks/hook-installer.mjs +0 -48
  105. package/dist/chunks/impact.mjs +0 -651
  106. package/dist/chunks/index.mjs +0 -23
  107. package/dist/chunks/index10.mjs +0 -19
  108. package/dist/chunks/index11.mjs +0 -1171
  109. package/dist/chunks/index12.mjs +0 -218
  110. package/dist/chunks/index13.mjs +0 -679
  111. package/dist/chunks/index14.mjs +0 -1009
  112. package/dist/chunks/index15.mjs +0 -194
  113. package/dist/chunks/index2.mjs +0 -7637
  114. package/dist/chunks/index3.mjs +0 -171
  115. package/dist/chunks/index4.mjs +0 -26
  116. package/dist/chunks/index5.mjs +0 -19
  117. package/dist/chunks/index6.mjs +0 -19092
  118. package/dist/chunks/index7.mjs +0 -616
  119. package/dist/chunks/index8.mjs +0 -1602
  120. package/dist/chunks/index9.mjs +0 -5384
  121. package/dist/chunks/init.mjs +0 -1911
  122. package/dist/chunks/installer.mjs +0 -757
  123. package/dist/chunks/installer2.mjs +0 -103
  124. package/dist/chunks/interview.mjs +0 -2927
  125. package/dist/chunks/json-config.mjs +0 -60
  126. package/dist/chunks/linux.mjs +0 -3863
  127. package/dist/chunks/macos.mjs +0 -69
  128. package/dist/chunks/main.mjs +0 -635
  129. package/dist/chunks/manager.mjs +0 -1048
  130. package/dist/chunks/marketplace.mjs +0 -265
  131. package/dist/chunks/mcp-cli.mjs +0 -205
  132. package/dist/chunks/mcp-performance.mjs +0 -187
  133. package/dist/chunks/mcp.mjs +0 -667
  134. package/dist/chunks/memory-check.mjs +0 -2973
  135. package/dist/chunks/memory-paths.mjs +0 -259
  136. package/dist/chunks/memory-sync.mjs +0 -209
  137. package/dist/chunks/memory.mjs +0 -354
  138. package/dist/chunks/metrics-display.mjs +0 -153
  139. package/dist/chunks/monitor.mjs +0 -1856
  140. package/dist/chunks/notification.mjs +0 -1864
  141. package/dist/chunks/onboarding.mjs +0 -386
  142. package/dist/chunks/package.mjs +0 -3
  143. package/dist/chunks/paradigm.mjs +0 -74
  144. package/dist/chunks/permission-manager.mjs +0 -250
  145. package/dist/chunks/permissions.mjs +0 -265
  146. package/dist/chunks/persistence-manager.mjs +0 -801
  147. package/dist/chunks/persistence.mjs +0 -707
  148. package/dist/chunks/platform.mjs +0 -395
  149. package/dist/chunks/plugin.mjs +0 -1936
  150. package/dist/chunks/powershell.mjs +0 -213
  151. package/dist/chunks/prompts.mjs +0 -244
  152. package/dist/chunks/providers.mjs +0 -263
  153. package/dist/chunks/quick-actions.mjs +0 -335
  154. package/dist/chunks/quick-provider.mjs +0 -755
  155. package/dist/chunks/quick-setup.mjs +0 -421
  156. package/dist/chunks/remote.mjs +0 -497
  157. package/dist/chunks/research.mjs +0 -1904
  158. package/dist/chunks/rollback.mjs +0 -38
  159. package/dist/chunks/session-manager.mjs +0 -1371
  160. package/dist/chunks/session.mjs +0 -878
  161. package/dist/chunks/sessions.mjs +0 -106
  162. package/dist/chunks/silent-updater.mjs +0 -396
  163. package/dist/chunks/simple-config.mjs +0 -122
  164. package/dist/chunks/skill.mjs +0 -117
  165. package/dist/chunks/skill2.mjs +0 -9052
  166. package/dist/chunks/skills-sync.mjs +0 -1343
  167. package/dist/chunks/skills.mjs +0 -577
  168. package/dist/chunks/slash-commands.mjs +0 -208
  169. package/dist/chunks/smart-guide.mjs +0 -247
  170. package/dist/chunks/snapshot.mjs +0 -58
  171. package/dist/chunks/startup.mjs +0 -487
  172. package/dist/chunks/stats.mjs +0 -191
  173. package/dist/chunks/status.mjs +0 -471
  174. package/dist/chunks/team.mjs +0 -63
  175. package/dist/chunks/thinking.mjs +0 -626
  176. package/dist/chunks/trace.mjs +0 -57
  177. package/dist/chunks/uninstall.mjs +0 -852
  178. package/dist/chunks/update.mjs +0 -174
  179. package/dist/chunks/upgrade-manager.mjs +0 -204
  180. package/dist/chunks/upgrade.mjs +0 -133
  181. package/dist/chunks/version-checker.mjs +0 -891
  182. package/dist/chunks/vim.mjs +0 -903
  183. package/dist/chunks/windows.mjs +0 -14
  184. package/dist/chunks/workflows.mjs +0 -633
  185. package/dist/chunks/wsl.mjs +0 -129
  186. package/dist/chunks/zero-config.mjs +0 -871
  187. package/dist/chunks/zsh.mjs +0 -182
  188. package/dist/cli.d.mts +0 -1
  189. package/dist/cli.d.ts +0 -1
  190. package/dist/cli.mjs +0 -2684
  191. package/dist/i18n/locales/en/agent-teams.json +0 -18
  192. package/dist/i18n/locales/en/agentBrowser.json +0 -80
  193. package/dist/i18n/locales/en/agents.json +0 -135
  194. package/dist/i18n/locales/en/api.json +0 -63
  195. package/dist/i18n/locales/en/ccjk-agents.json +0 -33
  196. package/dist/i18n/locales/en/ccjk-all.json +0 -23
  197. package/dist/i18n/locales/en/ccjk-skills.json +0 -22
  198. package/dist/i18n/locales/en/ccjk.json +0 -276
  199. package/dist/i18n/locales/en/ccr.json +0 -65
  200. package/dist/i18n/locales/en/claude-md.json +0 -73
  201. package/dist/i18n/locales/en/cli.json +0 -148
  202. package/dist/i18n/locales/en/cloud-setup.json +0 -31
  203. package/dist/i18n/locales/en/cloud-sync.json +0 -147
  204. package/dist/i18n/locales/en/cloud.json +0 -40
  205. package/dist/i18n/locales/en/cloudPlugins.json +0 -118
  206. package/dist/i18n/locales/en/codex.json +0 -184
  207. package/dist/i18n/locales/en/cometix.json +0 -29
  208. package/dist/i18n/locales/en/common.json +0 -68
  209. package/dist/i18n/locales/en/config.json +0 -108
  210. package/dist/i18n/locales/en/configuration.json +0 -236
  211. package/dist/i18n/locales/en/context.json +0 -85
  212. package/dist/i18n/locales/en/dashboard.json +0 -78
  213. package/dist/i18n/locales/en/errors.json +0 -26
  214. package/dist/i18n/locales/en/evolution.json +0 -54
  215. package/dist/i18n/locales/en/hooks.json +0 -74
  216. package/dist/i18n/locales/en/hooksSync.json +0 -133
  217. package/dist/i18n/locales/en/installation.json +0 -83
  218. package/dist/i18n/locales/en/interview.json +0 -104
  219. package/dist/i18n/locales/en/language.json +0 -19
  220. package/dist/i18n/locales/en/lsp.json +0 -78
  221. package/dist/i18n/locales/en/marketplace.json +0 -116
  222. package/dist/i18n/locales/en/mcp.json +0 -180
  223. package/dist/i18n/locales/en/memory.json +0 -23
  224. package/dist/i18n/locales/en/menu.json +0 -299
  225. package/dist/i18n/locales/en/multi-config.json +0 -79
  226. package/dist/i18n/locales/en/notification.json +0 -307
  227. package/dist/i18n/locales/en/permissions.json +0 -95
  228. package/dist/i18n/locales/en/persistence.json +0 -127
  229. package/dist/i18n/locales/en/plugins.json +0 -146
  230. package/dist/i18n/locales/en/quick-actions.json +0 -78
  231. package/dist/i18n/locales/en/registry.json +0 -54
  232. package/dist/i18n/locales/en/remote.json +0 -93
  233. package/dist/i18n/locales/en/sandbox.json +0 -44
  234. package/dist/i18n/locales/en/setup.json +0 -44
  235. package/dist/i18n/locales/en/shencha.json +0 -14
  236. package/dist/i18n/locales/en/skills.json +0 -100
  237. package/dist/i18n/locales/en/skillsSync.json +0 -74
  238. package/dist/i18n/locales/en/smartGuide.json +0 -49
  239. package/dist/i18n/locales/en/stats.json +0 -20
  240. package/dist/i18n/locales/en/subagent.json +0 -69
  241. package/dist/i18n/locales/en/superpowers.json +0 -117
  242. package/dist/i18n/locales/en/team.json +0 -7
  243. package/dist/i18n/locales/en/thinking.json +0 -65
  244. package/dist/i18n/locales/en/tools.json +0 -42
  245. package/dist/i18n/locales/en/uninstall.json +0 -56
  246. package/dist/i18n/locales/en/updater.json +0 -29
  247. package/dist/i18n/locales/en/vim.json +0 -169
  248. package/dist/i18n/locales/en/workflow.json +0 -55
  249. package/dist/i18n/locales/en/workspace.json +0 -108
  250. package/dist/i18n/locales/zh-CN/agent-teams.json +0 -18
  251. package/dist/i18n/locales/zh-CN/agentBrowser.json +0 -80
  252. package/dist/i18n/locales/zh-CN/agents.json +0 -135
  253. package/dist/i18n/locales/zh-CN/api.json +0 -63
  254. package/dist/i18n/locales/zh-CN/ccjk-agents.json +0 -33
  255. package/dist/i18n/locales/zh-CN/ccjk-all.json +0 -23
  256. package/dist/i18n/locales/zh-CN/ccjk-skills.json +0 -22
  257. package/dist/i18n/locales/zh-CN/ccjk.json +0 -276
  258. package/dist/i18n/locales/zh-CN/ccr.json +0 -65
  259. package/dist/i18n/locales/zh-CN/claude-md.json +0 -73
  260. package/dist/i18n/locales/zh-CN/cli.json +0 -148
  261. package/dist/i18n/locales/zh-CN/cloud-setup.json +0 -31
  262. package/dist/i18n/locales/zh-CN/cloud-sync.json +0 -147
  263. package/dist/i18n/locales/zh-CN/cloud.json +0 -40
  264. package/dist/i18n/locales/zh-CN/cloudPlugins.json +0 -118
  265. package/dist/i18n/locales/zh-CN/codex.json +0 -184
  266. package/dist/i18n/locales/zh-CN/cometix.json +0 -29
  267. package/dist/i18n/locales/zh-CN/common.json +0 -68
  268. package/dist/i18n/locales/zh-CN/config.json +0 -108
  269. package/dist/i18n/locales/zh-CN/configuration.json +0 -234
  270. package/dist/i18n/locales/zh-CN/context.json +0 -85
  271. package/dist/i18n/locales/zh-CN/dashboard.json +0 -78
  272. package/dist/i18n/locales/zh-CN/errors.json +0 -26
  273. package/dist/i18n/locales/zh-CN/evolution.json +0 -54
  274. package/dist/i18n/locales/zh-CN/hooks.json +0 -74
  275. package/dist/i18n/locales/zh-CN/hooksSync.json +0 -133
  276. package/dist/i18n/locales/zh-CN/installation.json +0 -83
  277. package/dist/i18n/locales/zh-CN/interview.json +0 -104
  278. package/dist/i18n/locales/zh-CN/language.json +0 -19
  279. package/dist/i18n/locales/zh-CN/lsp.json +0 -78
  280. package/dist/i18n/locales/zh-CN/marketplace.json +0 -116
  281. package/dist/i18n/locales/zh-CN/mcp.json +0 -180
  282. package/dist/i18n/locales/zh-CN/memory.json +0 -23
  283. package/dist/i18n/locales/zh-CN/menu.json +0 -299
  284. package/dist/i18n/locales/zh-CN/multi-config.json +0 -79
  285. package/dist/i18n/locales/zh-CN/notification.json +0 -307
  286. package/dist/i18n/locales/zh-CN/permissions.json +0 -95
  287. package/dist/i18n/locales/zh-CN/persistence.json +0 -127
  288. package/dist/i18n/locales/zh-CN/plugins.json +0 -146
  289. package/dist/i18n/locales/zh-CN/quick-actions.json +0 -78
  290. package/dist/i18n/locales/zh-CN/registry.json +0 -54
  291. package/dist/i18n/locales/zh-CN/remote.json +0 -93
  292. package/dist/i18n/locales/zh-CN/sandbox.json +0 -44
  293. package/dist/i18n/locales/zh-CN/setup.json +0 -44
  294. package/dist/i18n/locales/zh-CN/shencha.json +0 -14
  295. package/dist/i18n/locales/zh-CN/skills.json +0 -100
  296. package/dist/i18n/locales/zh-CN/skillsSync.json +0 -74
  297. package/dist/i18n/locales/zh-CN/smartGuide.json +0 -49
  298. package/dist/i18n/locales/zh-CN/stats.json +0 -20
  299. package/dist/i18n/locales/zh-CN/subagent.json +0 -69
  300. package/dist/i18n/locales/zh-CN/superpowers.json +0 -117
  301. package/dist/i18n/locales/zh-CN/team.json +0 -7
  302. package/dist/i18n/locales/zh-CN/thinking.json +0 -65
  303. package/dist/i18n/locales/zh-CN/tools.json +0 -42
  304. package/dist/i18n/locales/zh-CN/uninstall.json +0 -56
  305. package/dist/i18n/locales/zh-CN/updater.json +0 -29
  306. package/dist/i18n/locales/zh-CN/vim.json +0 -169
  307. package/dist/i18n/locales/zh-CN/workflow.json +0 -55
  308. package/dist/i18n/locales/zh-CN/workspace.json +0 -108
  309. package/dist/index.d.mts +0 -5658
  310. package/dist/index.d.ts +0 -5658
  311. package/dist/index.mjs +0 -3732
  312. package/dist/shared/ccjk.5bEolFrk.mjs +0 -254
  313. package/dist/shared/ccjk.8oaxX4iR.mjs +0 -90
  314. package/dist/shared/ccjk.B2U7DsPy.mjs +0 -31
  315. package/dist/shared/ccjk.B2f-cwUP.mjs +0 -468
  316. package/dist/shared/ccjk.BAGoDD49.mjs +0 -36
  317. package/dist/shared/ccjk.BBtCGd_g.mjs +0 -899
  318. package/dist/shared/ccjk.BFQ7yr5S.mjs +0 -16
  319. package/dist/shared/ccjk.BLsIiTqO.mjs +0 -449
  320. package/dist/shared/ccjk.BXv8aYs1.mjs +0 -170
  321. package/dist/shared/ccjk.BnsY5WxD.mjs +0 -171
  322. package/dist/shared/ccjk.BoApaI4j.mjs +0 -28
  323. package/dist/shared/ccjk.Bq8TqZG_.mjs +0 -189
  324. package/dist/shared/ccjk.BtrioX1Z.mjs +0 -25
  325. package/dist/shared/ccjk.Bx_rmYfN.mjs +0 -69
  326. package/dist/shared/ccjk.BzPbSEP2.mjs +0 -115
  327. package/dist/shared/ccjk.C0WLUnFV.mjs +0 -293
  328. package/dist/shared/ccjk.C1hANZTu.mjs +0 -19
  329. package/dist/shared/ccjk.C2jHOZVP.mjs +0 -52
  330. package/dist/shared/ccjk.CNhnT6uQ.mjs +0 -636
  331. package/dist/shared/ccjk.COweQ1RR.mjs +0 -5
  332. package/dist/shared/ccjk.CfKKcvWy.mjs +0 -126
  333. package/dist/shared/ccjk.Cjgrln_h.mjs +0 -297
  334. package/dist/shared/ccjk.CoCHVXl3.mjs +0 -3951
  335. package/dist/shared/ccjk.CwGZSTAK.mjs +0 -319
  336. package/dist/shared/ccjk.CxpGa6MC.mjs +0 -2724
  337. package/dist/shared/ccjk.D-magaEx.mjs +0 -763
  338. package/dist/shared/ccjk.D0g2ABGg.mjs +0 -171
  339. package/dist/shared/ccjk.D6ycHbak.mjs +0 -270
  340. package/dist/shared/ccjk.D75wivnp.mjs +0 -142
  341. package/dist/shared/ccjk.DDL-4C-k.mjs +0 -100
  342. package/dist/shared/ccjk.DFRPtmK_.mjs +0 -75
  343. package/dist/shared/ccjk.DMV3x5Sd.mjs +0 -299
  344. package/dist/shared/ccjk.DZ2LLOa-.mjs +0 -2195
  345. package/dist/shared/ccjk.DbigonEQ.mjs +0 -698
  346. package/dist/shared/ccjk.DcMvE7lf.mjs +0 -618
  347. package/dist/shared/ccjk.DeWpAShp.mjs +0 -1828
  348. package/dist/shared/ccjk.DhJ1kyDR.mjs +0 -30
  349. package/dist/shared/ccjk.DlTXS9rP.mjs +0 -224
  350. package/dist/shared/ccjk.DopKzo3z.mjs +0 -305
  351. package/dist/shared/ccjk.DsZsc4LR.mjs +0 -1280
  352. package/dist/shared/ccjk.DuzJZlgj.mjs +0 -418
  353. package/dist/shared/ccjk.Dxgd2vjc.mjs +0 -444
  354. package/dist/shared/ccjk.J8YiPsOw.mjs +0 -259
  355. package/dist/shared/ccjk.KfSWcGlE.mjs +0 -38
  356. package/dist/shared/ccjk.L7yC58_i.mjs +0 -225
  357. package/dist/shared/ccjk.MwtjAULc.mjs +0 -1447
  358. package/dist/shared/ccjk.OJKHVSOb.mjs +0 -2005
  359. package/dist/shared/ccjk.OTnevPNE.mjs +0 -225
  360. package/dist/shared/ccjk.RyizuzOI.mjs +0 -21
  361. package/dist/shared/ccjk.T_cX87dY.mjs +0 -15
  362. package/dist/shared/ccjk.bQ7Dh1g4.mjs +0 -249
  363. package/dist/shared/ccjk.gDEDGD_t.mjs +0 -38
  364. package/dist/shared/ccjk.hoqrwWdN.mjs +0 -333
  365. package/dist/shared/ccjk.i_vn-9C3.mjs +0 -317
  366. package/dist/shared/ccjk.lG3ccFjm.mjs +0 -885
  367. package/dist/shared/ccjk.wLJHO0Af.mjs +0 -244
  368. package/dist/shared/ccjk.y-a_1vK4.mjs +0 -5127
  369. package/dist/templates/agents/README.md +0 -78
  370. package/dist/templates/agents/fullstack-developer.json +0 -70
  371. package/dist/templates/agents/go-expert.json +0 -69
  372. package/dist/templates/agents/index.json +0 -64
  373. package/dist/templates/agents/python-expert.json +0 -69
  374. package/dist/templates/agents/react-specialist.json +0 -69
  375. package/dist/templates/agents/testing-automation-expert.json +0 -70
  376. package/dist/templates/agents/typescript-architect.json +0 -69
  377. package/dist/templates/claude-code/common/settings.json +0 -109
  378. package/dist/templates/common/error-prevention.md +0 -267
  379. package/dist/templates/common/karpathy-baseline.md +0 -83
  380. package/dist/templates/common/output-styles/zh-CN/carmack-mode.md +0 -381
  381. package/dist/templates/common/output-styles/zh-CN/codex-rigor-mode.md +0 -114
  382. package/dist/templates/common/output-styles/zh-CN/dhh-mode.md +0 -265
  383. package/dist/templates/common/output-styles/zh-CN/evan-you-mode.md +0 -539
  384. package/dist/templates/common/output-styles/zh-CN/jobs-mode.md +0 -369
  385. package/dist/templates/common/output-styles/zh-CN/linus-mode.md +0 -135
  386. package/dist/templates/common/output-styles/zh-CN/uncle-bob-mode.md +0 -221
  387. package/dist/templates/common/workflow/continuousDelivery/en/continuous-delivery.md +0 -628
  388. package/dist/templates/common/workflow/continuousDelivery/zh-CN/continuous-delivery.md +0 -628
  389. package/dist/templates/common/workflow/essential/en/agents/ccjk-config-agent.md +0 -187
  390. package/dist/templates/common/workflow/essential/en/agents/ccjk-mcp-agent.md +0 -191
  391. package/dist/templates/common/workflow/essential/en/agents/ccjk-skill-agent.md +0 -249
  392. package/dist/templates/common/workflow/essential/en/agents/ccjk-workflow-agent.md +0 -277
  393. package/dist/templates/common/workflow/essential/en/agents/get-current-datetime.md +0 -29
  394. package/dist/templates/common/workflow/essential/en/agents/init-architect.md +0 -115
  395. package/dist/templates/common/workflow/essential/en/agents/ui-ux-designer.md +0 -91
  396. package/dist/templates/common/workflow/essential/en/feat.md +0 -92
  397. package/dist/templates/common/workflow/essential/en/goal.md +0 -147
  398. package/dist/templates/common/workflow/essential/en/init-project.md +0 -53
  399. package/dist/templates/common/workflow/essential/zh-CN/agents/get-current-datetime.md +0 -29
  400. package/dist/templates/common/workflow/essential/zh-CN/agents/init-architect.md +0 -115
  401. package/dist/templates/common/workflow/essential/zh-CN/agents/ui-ux-designer.md +0 -91
  402. package/dist/templates/common/workflow/essential/zh-CN/feat.md +0 -315
  403. package/dist/templates/common/workflow/essential/zh-CN/goal.md +0 -146
  404. package/dist/templates/common/workflow/essential/zh-CN/init-project.md +0 -53
  405. package/dist/templates/common/workflow/git/en/git-cleanBranches.md +0 -102
  406. package/dist/templates/common/workflow/git/en/git-commit.md +0 -205
  407. package/dist/templates/common/workflow/git/en/git-rollback.md +0 -90
  408. package/dist/templates/common/workflow/git/en/git-worktree.md +0 -276
  409. package/dist/templates/common/workflow/git/zh-CN/git-cleanBranches.md +0 -102
  410. package/dist/templates/common/workflow/git/zh-CN/git-commit.md +0 -205
  411. package/dist/templates/common/workflow/git/zh-CN/git-rollback.md +0 -90
  412. package/dist/templates/common/workflow/git/zh-CN/git-worktree.md +0 -276
  413. package/dist/templates/common/workflow/interview/en/interview.md +0 -67
  414. package/dist/templates/common/workflow/interview/zh-CN/interview.md +0 -67
  415. package/dist/templates/common/workflow/linearMethod/en/linear-method.md +0 -651
  416. package/dist/templates/common/workflow/linearMethod/zh-CN/linear-method.md +0 -752
  417. package/dist/templates/common/workflow/refactoringMaster/en/refactoring-master.md +0 -516
  418. package/dist/templates/common/workflow/refactoringMaster/zh-CN/refactoring-master.md +0 -812
  419. package/dist/templates/common/workflow/sixStep/en/workflow.md +0 -83
  420. package/dist/templates/common/workflow/sixStep/zh-CN/workflow.md +0 -359
  421. package/dist/templates/common/workflow/specFirstTDD/en/spec-first-tdd.md +0 -364
  422. package/dist/templates/common/workflow/specFirstTDD/zh-CN/spec-first-tdd.md +0 -366
  423. package/dist/templates/hooks/README.md +0 -212
  424. package/dist/templates/hooks/git-workflow-hooks.md +0 -551
  425. package/dist/templates/hooks/post-test/coverage.json +0 -21
  426. package/dist/templates/hooks/post-test/summary.json +0 -21
  427. package/dist/templates/hooks/post-test-coverage.md +0 -434
  428. package/dist/templates/hooks/pre-commit/eslint.json +0 -22
  429. package/dist/templates/hooks/pre-commit/prettier.json +0 -22
  430. package/dist/templates/hooks/pre-commit-black.md +0 -274
  431. package/dist/templates/hooks/pre-commit-eslint.md +0 -153
  432. package/dist/templates/hooks/pre-commit-gofmt.md +0 -284
  433. package/dist/templates/hooks/pre-commit-prettier.md +0 -212
  434. package/dist/templates/hooks/pre-commit-type-check.md +0 -377
  435. package/dist/templates/skills/ccjk-init.md +0 -154
  436. package/dist/templates/skills/ccjk-mcp-setup.md +0 -205
  437. package/dist/templates/skills/ccjk-troubleshoot.md +0 -228
  438. package/dist/templates/skills/django-patterns.md +0 -1016
  439. package/dist/templates/skills/git-workflow.md +0 -748
  440. package/dist/templates/skills/go-idioms.md +0 -963
  441. package/dist/templates/skills/index.json +0 -132
  442. package/dist/templates/skills/nextjs-optimization.md +0 -694
  443. package/dist/templates/skills/python-pep8.md +0 -852
  444. package/dist/templates/skills/react-patterns.md +0 -686
  445. package/dist/templates/skills/rust-patterns.md +0 -1057
  446. package/dist/templates/skills/security-best-practices.md +0 -1413
  447. package/dist/templates/skills/testing-best-practices.md +0 -1315
  448. package/dist/templates/skills/ts-best-practices.md +0 -354
  449. package/templates/agents/README.md +0 -78
  450. package/templates/agents/fullstack-developer.json +0 -70
  451. package/templates/agents/go-expert.json +0 -69
  452. package/templates/agents/index.json +0 -64
  453. package/templates/agents/python-expert.json +0 -69
  454. package/templates/agents/react-specialist.json +0 -69
  455. package/templates/agents/testing-automation-expert.json +0 -70
  456. package/templates/agents/typescript-architect.json +0 -69
  457. package/templates/claude-code/common/settings.json +0 -109
  458. package/templates/common/error-prevention.md +0 -267
  459. package/templates/common/karpathy-baseline.md +0 -83
  460. package/templates/common/output-styles/zh-CN/carmack-mode.md +0 -381
  461. package/templates/common/output-styles/zh-CN/codex-rigor-mode.md +0 -114
  462. package/templates/common/output-styles/zh-CN/dhh-mode.md +0 -265
  463. package/templates/common/output-styles/zh-CN/evan-you-mode.md +0 -539
  464. package/templates/common/output-styles/zh-CN/jobs-mode.md +0 -369
  465. package/templates/common/output-styles/zh-CN/linus-mode.md +0 -135
  466. package/templates/common/output-styles/zh-CN/uncle-bob-mode.md +0 -221
  467. package/templates/common/workflow/continuousDelivery/en/continuous-delivery.md +0 -628
  468. package/templates/common/workflow/continuousDelivery/zh-CN/continuous-delivery.md +0 -628
  469. package/templates/common/workflow/essential/en/agents/ccjk-config-agent.md +0 -187
  470. package/templates/common/workflow/essential/en/agents/ccjk-mcp-agent.md +0 -191
  471. package/templates/common/workflow/essential/en/agents/ccjk-skill-agent.md +0 -249
  472. package/templates/common/workflow/essential/en/agents/ccjk-workflow-agent.md +0 -277
  473. package/templates/common/workflow/essential/en/agents/get-current-datetime.md +0 -29
  474. package/templates/common/workflow/essential/en/agents/init-architect.md +0 -115
  475. package/templates/common/workflow/essential/en/agents/ui-ux-designer.md +0 -91
  476. package/templates/common/workflow/essential/en/feat.md +0 -92
  477. package/templates/common/workflow/essential/en/goal.md +0 -147
  478. package/templates/common/workflow/essential/en/init-project.md +0 -53
  479. package/templates/common/workflow/essential/zh-CN/agents/get-current-datetime.md +0 -29
  480. package/templates/common/workflow/essential/zh-CN/agents/init-architect.md +0 -115
  481. package/templates/common/workflow/essential/zh-CN/agents/ui-ux-designer.md +0 -91
  482. package/templates/common/workflow/essential/zh-CN/feat.md +0 -315
  483. package/templates/common/workflow/essential/zh-CN/goal.md +0 -146
  484. package/templates/common/workflow/essential/zh-CN/init-project.md +0 -53
  485. package/templates/common/workflow/git/en/git-cleanBranches.md +0 -102
  486. package/templates/common/workflow/git/en/git-commit.md +0 -205
  487. package/templates/common/workflow/git/en/git-rollback.md +0 -90
  488. package/templates/common/workflow/git/en/git-worktree.md +0 -276
  489. package/templates/common/workflow/git/zh-CN/git-cleanBranches.md +0 -102
  490. package/templates/common/workflow/git/zh-CN/git-commit.md +0 -205
  491. package/templates/common/workflow/git/zh-CN/git-rollback.md +0 -90
  492. package/templates/common/workflow/git/zh-CN/git-worktree.md +0 -276
  493. package/templates/common/workflow/interview/en/interview.md +0 -67
  494. package/templates/common/workflow/interview/zh-CN/interview.md +0 -67
  495. package/templates/common/workflow/linearMethod/en/linear-method.md +0 -651
  496. package/templates/common/workflow/linearMethod/zh-CN/linear-method.md +0 -752
  497. package/templates/common/workflow/refactoringMaster/en/refactoring-master.md +0 -516
  498. package/templates/common/workflow/refactoringMaster/zh-CN/refactoring-master.md +0 -812
  499. package/templates/common/workflow/sixStep/en/workflow.md +0 -83
  500. package/templates/common/workflow/sixStep/zh-CN/workflow.md +0 -359
  501. package/templates/common/workflow/specFirstTDD/en/spec-first-tdd.md +0 -364
  502. package/templates/common/workflow/specFirstTDD/zh-CN/spec-first-tdd.md +0 -366
  503. package/templates/hooks/README.md +0 -212
  504. package/templates/hooks/git-workflow-hooks.md +0 -551
  505. package/templates/hooks/post-test/coverage.json +0 -21
  506. package/templates/hooks/post-test/summary.json +0 -21
  507. package/templates/hooks/post-test-coverage.md +0 -434
  508. package/templates/hooks/pre-commit/eslint.json +0 -22
  509. package/templates/hooks/pre-commit/prettier.json +0 -22
  510. package/templates/hooks/pre-commit-black.md +0 -274
  511. package/templates/hooks/pre-commit-eslint.md +0 -153
  512. package/templates/hooks/pre-commit-gofmt.md +0 -284
  513. package/templates/hooks/pre-commit-prettier.md +0 -212
  514. package/templates/hooks/pre-commit-type-check.md +0 -377
  515. package/templates/skills/basic.hbs +0 -72
  516. package/templates/skills/ccjk-init.md +0 -154
  517. package/templates/skills/ccjk-mcp-setup.md +0 -205
  518. package/templates/skills/ccjk-troubleshoot.md +0 -228
  519. package/templates/skills/code-refactor.hbs +0 -133
  520. package/templates/skills/code-review.hbs +0 -141
  521. package/templates/skills/django-patterns.md +0 -1016
  522. package/templates/skills/git-workflow.md +0 -748
  523. package/templates/skills/go-idioms.md +0 -963
  524. package/templates/skills/index.json +0 -132
  525. package/templates/skills/nextjs-optimization.md +0 -694
  526. package/templates/skills/python-pep8.md +0 -852
  527. package/templates/skills/react-patterns.md +0 -686
  528. package/templates/skills/rust-patterns.md +0 -1057
  529. package/templates/skills/security-best-practices.md +0 -1413
  530. package/templates/skills/testing-best-practices.md +0 -1315
  531. package/templates/skills/ts-best-practices.md +0 -354
  532. 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*