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.
- package/LICENSE +1 -1
- package/README.md +58 -341
- package/dist/cli.js +59 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/detect.js +15 -0
- package/dist/commands/detect.js.map +1 -0
- package/dist/commands/doctor.js +68 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/git-install.js +50 -0
- package/dist/commands/git-install.js.map +1 -0
- package/dist/commands/init.js +102 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp.js +66 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/menu.js +33 -0
- package/dist/commands/menu.js.map +1 -0
- package/dist/core/detect.js +24 -0
- package/dist/core/detect.js.map +1 -0
- package/dist/core/lint.js +49 -0
- package/dist/core/lint.js.map +1 -0
- package/dist/core/mcp.js +41 -0
- package/dist/core/mcp.js.map +1 -0
- package/dist/core/paths.js +9 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/providers.js +53 -0
- package/dist/core/providers.js.map +1 -0
- package/dist/core/settings.js +31 -0
- package/dist/core/settings.js.map +1 -0
- package/dist/core/slash-templates.js +56 -0
- package/dist/core/slash-templates.js.map +1 -0
- package/dist/core/tools.js +27 -0
- package/dist/core/tools.js.map +1 -0
- package/package.json +43 -164
- package/README.HONEST.md +0 -176
- package/README.en.md +0 -67
- package/README.ja.md +0 -67
- package/README.ko.md +0 -67
- package/README.zh-CN.md +0 -86
- package/bin/ccjk.mjs +0 -5
- package/bin/ccjk.ts +0 -222
- package/dist/chunks/agent-teams.mjs +0 -145
- package/dist/chunks/agent.mjs +0 -1439
- package/dist/chunks/agents.mjs +0 -3783
- package/dist/chunks/api-cli.mjs +0 -135
- package/dist/chunks/api-config-selector.mjs +0 -159
- package/dist/chunks/api-providers.mjs +0 -144
- package/dist/chunks/api.mjs +0 -115
- package/dist/chunks/auto-bootstrap.mjs +0 -358
- package/dist/chunks/auto-fixer.mjs +0 -95
- package/dist/chunks/auto-updater.mjs +0 -507
- package/dist/chunks/banner.mjs +0 -173
- package/dist/chunks/bash.mjs +0 -187
- package/dist/chunks/boost.mjs +0 -474
- package/dist/chunks/brain-config.mjs +0 -75
- package/dist/chunks/brain-status.mjs +0 -89
- package/dist/chunks/ccjk-agents.mjs +0 -416
- package/dist/chunks/ccjk-all.mjs +0 -1046
- package/dist/chunks/ccjk-config.mjs +0 -445
- package/dist/chunks/ccjk-hooks.mjs +0 -1074
- package/dist/chunks/ccjk-mcp.mjs +0 -763
- package/dist/chunks/ccjk-setup.mjs +0 -765
- package/dist/chunks/ccjk-skills.mjs +0 -518
- package/dist/chunks/ccr.mjs +0 -109
- package/dist/chunks/ccu.mjs +0 -40
- package/dist/chunks/check-updates.mjs +0 -117
- package/dist/chunks/claude-code-incremental-manager.mjs +0 -761
- package/dist/chunks/claude-config.mjs +0 -606
- package/dist/chunks/claude-config2.mjs +0 -62
- package/dist/chunks/claude-wrapper.mjs +0 -85
- package/dist/chunks/clavue-config.mjs +0 -1454
- package/dist/chunks/cleanup-migration.mjs +0 -20
- package/dist/chunks/cli-hook.mjs +0 -4096
- package/dist/chunks/cloud-sync.mjs +0 -29
- package/dist/chunks/code-type-resolver.mjs +0 -880
- package/dist/chunks/codex-config-switch.mjs +0 -452
- package/dist/chunks/codex-provider-manager.mjs +0 -238
- package/dist/chunks/codex-uninstaller.mjs +0 -404
- package/dist/chunks/codex.mjs +0 -2141
- package/dist/chunks/commands.mjs +0 -108
- package/dist/chunks/commands2.mjs +0 -421
- package/dist/chunks/commit.mjs +0 -140
- package/dist/chunks/completion.mjs +0 -517
- package/dist/chunks/config-consolidator.mjs +0 -172
- package/dist/chunks/config-switch.mjs +0 -334
- package/dist/chunks/config.mjs +0 -558
- package/dist/chunks/config2.mjs +0 -484
- package/dist/chunks/config3.mjs +0 -486
- package/dist/chunks/constants.mjs +0 -323
- package/dist/chunks/context-opt.mjs +0 -444
- package/dist/chunks/context.mjs +0 -974
- package/dist/chunks/dashboard.mjs +0 -481
- package/dist/chunks/doctor.mjs +0 -1301
- package/dist/chunks/eval.mjs +0 -502
- package/dist/chunks/evolution.mjs +0 -322
- package/dist/chunks/features.mjs +0 -715
- package/dist/chunks/fish.mjs +0 -181
- package/dist/chunks/fs-operations.mjs +0 -180
- package/dist/chunks/health-alerts.mjs +0 -830
- package/dist/chunks/help.mjs +0 -341
- package/dist/chunks/hook-installer.mjs +0 -48
- package/dist/chunks/impact.mjs +0 -651
- package/dist/chunks/index.mjs +0 -23
- package/dist/chunks/index10.mjs +0 -19
- package/dist/chunks/index11.mjs +0 -1171
- package/dist/chunks/index12.mjs +0 -218
- package/dist/chunks/index13.mjs +0 -679
- package/dist/chunks/index14.mjs +0 -1009
- package/dist/chunks/index15.mjs +0 -194
- package/dist/chunks/index2.mjs +0 -7637
- package/dist/chunks/index3.mjs +0 -171
- package/dist/chunks/index4.mjs +0 -26
- package/dist/chunks/index5.mjs +0 -19
- package/dist/chunks/index6.mjs +0 -19092
- package/dist/chunks/index7.mjs +0 -616
- package/dist/chunks/index8.mjs +0 -1602
- package/dist/chunks/index9.mjs +0 -5384
- package/dist/chunks/init.mjs +0 -1911
- package/dist/chunks/installer.mjs +0 -757
- package/dist/chunks/installer2.mjs +0 -103
- package/dist/chunks/interview.mjs +0 -2927
- package/dist/chunks/json-config.mjs +0 -60
- package/dist/chunks/linux.mjs +0 -3863
- package/dist/chunks/macos.mjs +0 -69
- package/dist/chunks/main.mjs +0 -635
- package/dist/chunks/manager.mjs +0 -1048
- package/dist/chunks/marketplace.mjs +0 -265
- package/dist/chunks/mcp-cli.mjs +0 -205
- package/dist/chunks/mcp-performance.mjs +0 -187
- package/dist/chunks/mcp.mjs +0 -667
- package/dist/chunks/memory-check.mjs +0 -2973
- package/dist/chunks/memory-paths.mjs +0 -259
- package/dist/chunks/memory-sync.mjs +0 -209
- package/dist/chunks/memory.mjs +0 -354
- package/dist/chunks/metrics-display.mjs +0 -153
- package/dist/chunks/monitor.mjs +0 -1856
- package/dist/chunks/notification.mjs +0 -1864
- package/dist/chunks/onboarding.mjs +0 -386
- package/dist/chunks/package.mjs +0 -3
- package/dist/chunks/paradigm.mjs +0 -74
- package/dist/chunks/permission-manager.mjs +0 -250
- package/dist/chunks/permissions.mjs +0 -265
- package/dist/chunks/persistence-manager.mjs +0 -801
- package/dist/chunks/persistence.mjs +0 -707
- package/dist/chunks/platform.mjs +0 -395
- package/dist/chunks/plugin.mjs +0 -1936
- package/dist/chunks/powershell.mjs +0 -213
- package/dist/chunks/prompts.mjs +0 -244
- package/dist/chunks/providers.mjs +0 -263
- package/dist/chunks/quick-actions.mjs +0 -335
- package/dist/chunks/quick-provider.mjs +0 -755
- package/dist/chunks/quick-setup.mjs +0 -421
- package/dist/chunks/remote.mjs +0 -497
- package/dist/chunks/research.mjs +0 -1904
- package/dist/chunks/rollback.mjs +0 -38
- package/dist/chunks/session-manager.mjs +0 -1371
- package/dist/chunks/session.mjs +0 -878
- package/dist/chunks/sessions.mjs +0 -106
- package/dist/chunks/silent-updater.mjs +0 -396
- package/dist/chunks/simple-config.mjs +0 -122
- package/dist/chunks/skill.mjs +0 -117
- package/dist/chunks/skill2.mjs +0 -9052
- package/dist/chunks/skills-sync.mjs +0 -1343
- package/dist/chunks/skills.mjs +0 -577
- package/dist/chunks/slash-commands.mjs +0 -208
- package/dist/chunks/smart-guide.mjs +0 -247
- package/dist/chunks/snapshot.mjs +0 -58
- package/dist/chunks/startup.mjs +0 -487
- package/dist/chunks/stats.mjs +0 -191
- package/dist/chunks/status.mjs +0 -471
- package/dist/chunks/team.mjs +0 -63
- package/dist/chunks/thinking.mjs +0 -626
- package/dist/chunks/trace.mjs +0 -57
- package/dist/chunks/uninstall.mjs +0 -852
- package/dist/chunks/update.mjs +0 -174
- package/dist/chunks/upgrade-manager.mjs +0 -204
- package/dist/chunks/upgrade.mjs +0 -133
- package/dist/chunks/version-checker.mjs +0 -891
- package/dist/chunks/vim.mjs +0 -903
- package/dist/chunks/windows.mjs +0 -14
- package/dist/chunks/workflows.mjs +0 -633
- package/dist/chunks/wsl.mjs +0 -129
- package/dist/chunks/zero-config.mjs +0 -871
- package/dist/chunks/zsh.mjs +0 -182
- package/dist/cli.d.mts +0 -1
- package/dist/cli.d.ts +0 -1
- package/dist/cli.mjs +0 -2684
- package/dist/i18n/locales/en/agent-teams.json +0 -18
- package/dist/i18n/locales/en/agentBrowser.json +0 -80
- package/dist/i18n/locales/en/agents.json +0 -135
- package/dist/i18n/locales/en/api.json +0 -63
- package/dist/i18n/locales/en/ccjk-agents.json +0 -33
- package/dist/i18n/locales/en/ccjk-all.json +0 -23
- package/dist/i18n/locales/en/ccjk-skills.json +0 -22
- package/dist/i18n/locales/en/ccjk.json +0 -276
- package/dist/i18n/locales/en/ccr.json +0 -65
- package/dist/i18n/locales/en/claude-md.json +0 -73
- package/dist/i18n/locales/en/cli.json +0 -148
- package/dist/i18n/locales/en/cloud-setup.json +0 -31
- package/dist/i18n/locales/en/cloud-sync.json +0 -147
- package/dist/i18n/locales/en/cloud.json +0 -40
- package/dist/i18n/locales/en/cloudPlugins.json +0 -118
- package/dist/i18n/locales/en/codex.json +0 -184
- package/dist/i18n/locales/en/cometix.json +0 -29
- package/dist/i18n/locales/en/common.json +0 -68
- package/dist/i18n/locales/en/config.json +0 -108
- package/dist/i18n/locales/en/configuration.json +0 -236
- package/dist/i18n/locales/en/context.json +0 -85
- package/dist/i18n/locales/en/dashboard.json +0 -78
- package/dist/i18n/locales/en/errors.json +0 -26
- package/dist/i18n/locales/en/evolution.json +0 -54
- package/dist/i18n/locales/en/hooks.json +0 -74
- package/dist/i18n/locales/en/hooksSync.json +0 -133
- package/dist/i18n/locales/en/installation.json +0 -83
- package/dist/i18n/locales/en/interview.json +0 -104
- package/dist/i18n/locales/en/language.json +0 -19
- package/dist/i18n/locales/en/lsp.json +0 -78
- package/dist/i18n/locales/en/marketplace.json +0 -116
- package/dist/i18n/locales/en/mcp.json +0 -180
- package/dist/i18n/locales/en/memory.json +0 -23
- package/dist/i18n/locales/en/menu.json +0 -299
- package/dist/i18n/locales/en/multi-config.json +0 -79
- package/dist/i18n/locales/en/notification.json +0 -307
- package/dist/i18n/locales/en/permissions.json +0 -95
- package/dist/i18n/locales/en/persistence.json +0 -127
- package/dist/i18n/locales/en/plugins.json +0 -146
- package/dist/i18n/locales/en/quick-actions.json +0 -78
- package/dist/i18n/locales/en/registry.json +0 -54
- package/dist/i18n/locales/en/remote.json +0 -93
- package/dist/i18n/locales/en/sandbox.json +0 -44
- package/dist/i18n/locales/en/setup.json +0 -44
- package/dist/i18n/locales/en/shencha.json +0 -14
- package/dist/i18n/locales/en/skills.json +0 -100
- package/dist/i18n/locales/en/skillsSync.json +0 -74
- package/dist/i18n/locales/en/smartGuide.json +0 -49
- package/dist/i18n/locales/en/stats.json +0 -20
- package/dist/i18n/locales/en/subagent.json +0 -69
- package/dist/i18n/locales/en/superpowers.json +0 -117
- package/dist/i18n/locales/en/team.json +0 -7
- package/dist/i18n/locales/en/thinking.json +0 -65
- package/dist/i18n/locales/en/tools.json +0 -42
- package/dist/i18n/locales/en/uninstall.json +0 -56
- package/dist/i18n/locales/en/updater.json +0 -29
- package/dist/i18n/locales/en/vim.json +0 -169
- package/dist/i18n/locales/en/workflow.json +0 -55
- package/dist/i18n/locales/en/workspace.json +0 -108
- package/dist/i18n/locales/zh-CN/agent-teams.json +0 -18
- package/dist/i18n/locales/zh-CN/agentBrowser.json +0 -80
- package/dist/i18n/locales/zh-CN/agents.json +0 -135
- package/dist/i18n/locales/zh-CN/api.json +0 -63
- package/dist/i18n/locales/zh-CN/ccjk-agents.json +0 -33
- package/dist/i18n/locales/zh-CN/ccjk-all.json +0 -23
- package/dist/i18n/locales/zh-CN/ccjk-skills.json +0 -22
- package/dist/i18n/locales/zh-CN/ccjk.json +0 -276
- package/dist/i18n/locales/zh-CN/ccr.json +0 -65
- package/dist/i18n/locales/zh-CN/claude-md.json +0 -73
- package/dist/i18n/locales/zh-CN/cli.json +0 -148
- package/dist/i18n/locales/zh-CN/cloud-setup.json +0 -31
- package/dist/i18n/locales/zh-CN/cloud-sync.json +0 -147
- package/dist/i18n/locales/zh-CN/cloud.json +0 -40
- package/dist/i18n/locales/zh-CN/cloudPlugins.json +0 -118
- package/dist/i18n/locales/zh-CN/codex.json +0 -184
- package/dist/i18n/locales/zh-CN/cometix.json +0 -29
- package/dist/i18n/locales/zh-CN/common.json +0 -68
- package/dist/i18n/locales/zh-CN/config.json +0 -108
- package/dist/i18n/locales/zh-CN/configuration.json +0 -234
- package/dist/i18n/locales/zh-CN/context.json +0 -85
- package/dist/i18n/locales/zh-CN/dashboard.json +0 -78
- package/dist/i18n/locales/zh-CN/errors.json +0 -26
- package/dist/i18n/locales/zh-CN/evolution.json +0 -54
- package/dist/i18n/locales/zh-CN/hooks.json +0 -74
- package/dist/i18n/locales/zh-CN/hooksSync.json +0 -133
- package/dist/i18n/locales/zh-CN/installation.json +0 -83
- package/dist/i18n/locales/zh-CN/interview.json +0 -104
- package/dist/i18n/locales/zh-CN/language.json +0 -19
- package/dist/i18n/locales/zh-CN/lsp.json +0 -78
- package/dist/i18n/locales/zh-CN/marketplace.json +0 -116
- package/dist/i18n/locales/zh-CN/mcp.json +0 -180
- package/dist/i18n/locales/zh-CN/memory.json +0 -23
- package/dist/i18n/locales/zh-CN/menu.json +0 -299
- package/dist/i18n/locales/zh-CN/multi-config.json +0 -79
- package/dist/i18n/locales/zh-CN/notification.json +0 -307
- package/dist/i18n/locales/zh-CN/permissions.json +0 -95
- package/dist/i18n/locales/zh-CN/persistence.json +0 -127
- package/dist/i18n/locales/zh-CN/plugins.json +0 -146
- package/dist/i18n/locales/zh-CN/quick-actions.json +0 -78
- package/dist/i18n/locales/zh-CN/registry.json +0 -54
- package/dist/i18n/locales/zh-CN/remote.json +0 -93
- package/dist/i18n/locales/zh-CN/sandbox.json +0 -44
- package/dist/i18n/locales/zh-CN/setup.json +0 -44
- package/dist/i18n/locales/zh-CN/shencha.json +0 -14
- package/dist/i18n/locales/zh-CN/skills.json +0 -100
- package/dist/i18n/locales/zh-CN/skillsSync.json +0 -74
- package/dist/i18n/locales/zh-CN/smartGuide.json +0 -49
- package/dist/i18n/locales/zh-CN/stats.json +0 -20
- package/dist/i18n/locales/zh-CN/subagent.json +0 -69
- package/dist/i18n/locales/zh-CN/superpowers.json +0 -117
- package/dist/i18n/locales/zh-CN/team.json +0 -7
- package/dist/i18n/locales/zh-CN/thinking.json +0 -65
- package/dist/i18n/locales/zh-CN/tools.json +0 -42
- package/dist/i18n/locales/zh-CN/uninstall.json +0 -56
- package/dist/i18n/locales/zh-CN/updater.json +0 -29
- package/dist/i18n/locales/zh-CN/vim.json +0 -169
- package/dist/i18n/locales/zh-CN/workflow.json +0 -55
- package/dist/i18n/locales/zh-CN/workspace.json +0 -108
- package/dist/index.d.mts +0 -5658
- package/dist/index.d.ts +0 -5658
- package/dist/index.mjs +0 -3732
- package/dist/shared/ccjk.5bEolFrk.mjs +0 -254
- package/dist/shared/ccjk.8oaxX4iR.mjs +0 -90
- package/dist/shared/ccjk.B2U7DsPy.mjs +0 -31
- package/dist/shared/ccjk.B2f-cwUP.mjs +0 -468
- package/dist/shared/ccjk.BAGoDD49.mjs +0 -36
- package/dist/shared/ccjk.BBtCGd_g.mjs +0 -899
- package/dist/shared/ccjk.BFQ7yr5S.mjs +0 -16
- package/dist/shared/ccjk.BLsIiTqO.mjs +0 -449
- package/dist/shared/ccjk.BXv8aYs1.mjs +0 -170
- package/dist/shared/ccjk.BnsY5WxD.mjs +0 -171
- package/dist/shared/ccjk.BoApaI4j.mjs +0 -28
- package/dist/shared/ccjk.Bq8TqZG_.mjs +0 -189
- package/dist/shared/ccjk.BtrioX1Z.mjs +0 -25
- package/dist/shared/ccjk.Bx_rmYfN.mjs +0 -69
- package/dist/shared/ccjk.BzPbSEP2.mjs +0 -115
- package/dist/shared/ccjk.C0WLUnFV.mjs +0 -293
- package/dist/shared/ccjk.C1hANZTu.mjs +0 -19
- package/dist/shared/ccjk.C2jHOZVP.mjs +0 -52
- package/dist/shared/ccjk.CNhnT6uQ.mjs +0 -636
- package/dist/shared/ccjk.COweQ1RR.mjs +0 -5
- package/dist/shared/ccjk.CfKKcvWy.mjs +0 -126
- package/dist/shared/ccjk.Cjgrln_h.mjs +0 -297
- package/dist/shared/ccjk.CoCHVXl3.mjs +0 -3951
- package/dist/shared/ccjk.CwGZSTAK.mjs +0 -319
- package/dist/shared/ccjk.CxpGa6MC.mjs +0 -2724
- package/dist/shared/ccjk.D-magaEx.mjs +0 -763
- package/dist/shared/ccjk.D0g2ABGg.mjs +0 -171
- package/dist/shared/ccjk.D6ycHbak.mjs +0 -270
- package/dist/shared/ccjk.D75wivnp.mjs +0 -142
- package/dist/shared/ccjk.DDL-4C-k.mjs +0 -100
- package/dist/shared/ccjk.DFRPtmK_.mjs +0 -75
- package/dist/shared/ccjk.DMV3x5Sd.mjs +0 -299
- package/dist/shared/ccjk.DZ2LLOa-.mjs +0 -2195
- package/dist/shared/ccjk.DbigonEQ.mjs +0 -698
- package/dist/shared/ccjk.DcMvE7lf.mjs +0 -618
- package/dist/shared/ccjk.DeWpAShp.mjs +0 -1828
- package/dist/shared/ccjk.DhJ1kyDR.mjs +0 -30
- package/dist/shared/ccjk.DlTXS9rP.mjs +0 -224
- package/dist/shared/ccjk.DopKzo3z.mjs +0 -305
- package/dist/shared/ccjk.DsZsc4LR.mjs +0 -1280
- package/dist/shared/ccjk.DuzJZlgj.mjs +0 -418
- package/dist/shared/ccjk.Dxgd2vjc.mjs +0 -444
- package/dist/shared/ccjk.J8YiPsOw.mjs +0 -259
- package/dist/shared/ccjk.KfSWcGlE.mjs +0 -38
- package/dist/shared/ccjk.L7yC58_i.mjs +0 -225
- package/dist/shared/ccjk.MwtjAULc.mjs +0 -1447
- package/dist/shared/ccjk.OJKHVSOb.mjs +0 -2005
- package/dist/shared/ccjk.OTnevPNE.mjs +0 -225
- package/dist/shared/ccjk.RyizuzOI.mjs +0 -21
- package/dist/shared/ccjk.T_cX87dY.mjs +0 -15
- package/dist/shared/ccjk.bQ7Dh1g4.mjs +0 -249
- package/dist/shared/ccjk.gDEDGD_t.mjs +0 -38
- package/dist/shared/ccjk.hoqrwWdN.mjs +0 -333
- package/dist/shared/ccjk.i_vn-9C3.mjs +0 -317
- package/dist/shared/ccjk.lG3ccFjm.mjs +0 -885
- package/dist/shared/ccjk.wLJHO0Af.mjs +0 -244
- package/dist/shared/ccjk.y-a_1vK4.mjs +0 -5127
- package/dist/templates/agents/README.md +0 -78
- package/dist/templates/agents/fullstack-developer.json +0 -70
- package/dist/templates/agents/go-expert.json +0 -69
- package/dist/templates/agents/index.json +0 -64
- package/dist/templates/agents/python-expert.json +0 -69
- package/dist/templates/agents/react-specialist.json +0 -69
- package/dist/templates/agents/testing-automation-expert.json +0 -70
- package/dist/templates/agents/typescript-architect.json +0 -69
- package/dist/templates/claude-code/common/settings.json +0 -109
- package/dist/templates/common/error-prevention.md +0 -267
- package/dist/templates/common/karpathy-baseline.md +0 -83
- package/dist/templates/common/output-styles/zh-CN/carmack-mode.md +0 -381
- package/dist/templates/common/output-styles/zh-CN/codex-rigor-mode.md +0 -114
- package/dist/templates/common/output-styles/zh-CN/dhh-mode.md +0 -265
- package/dist/templates/common/output-styles/zh-CN/evan-you-mode.md +0 -539
- package/dist/templates/common/output-styles/zh-CN/jobs-mode.md +0 -369
- package/dist/templates/common/output-styles/zh-CN/linus-mode.md +0 -135
- package/dist/templates/common/output-styles/zh-CN/uncle-bob-mode.md +0 -221
- package/dist/templates/common/workflow/continuousDelivery/en/continuous-delivery.md +0 -628
- package/dist/templates/common/workflow/continuousDelivery/zh-CN/continuous-delivery.md +0 -628
- package/dist/templates/common/workflow/essential/en/agents/ccjk-config-agent.md +0 -187
- package/dist/templates/common/workflow/essential/en/agents/ccjk-mcp-agent.md +0 -191
- package/dist/templates/common/workflow/essential/en/agents/ccjk-skill-agent.md +0 -249
- package/dist/templates/common/workflow/essential/en/agents/ccjk-workflow-agent.md +0 -277
- package/dist/templates/common/workflow/essential/en/agents/get-current-datetime.md +0 -29
- package/dist/templates/common/workflow/essential/en/agents/init-architect.md +0 -115
- package/dist/templates/common/workflow/essential/en/agents/ui-ux-designer.md +0 -91
- package/dist/templates/common/workflow/essential/en/feat.md +0 -92
- package/dist/templates/common/workflow/essential/en/goal.md +0 -147
- package/dist/templates/common/workflow/essential/en/init-project.md +0 -53
- package/dist/templates/common/workflow/essential/zh-CN/agents/get-current-datetime.md +0 -29
- package/dist/templates/common/workflow/essential/zh-CN/agents/init-architect.md +0 -115
- package/dist/templates/common/workflow/essential/zh-CN/agents/ui-ux-designer.md +0 -91
- package/dist/templates/common/workflow/essential/zh-CN/feat.md +0 -315
- package/dist/templates/common/workflow/essential/zh-CN/goal.md +0 -146
- package/dist/templates/common/workflow/essential/zh-CN/init-project.md +0 -53
- package/dist/templates/common/workflow/git/en/git-cleanBranches.md +0 -102
- package/dist/templates/common/workflow/git/en/git-commit.md +0 -205
- package/dist/templates/common/workflow/git/en/git-rollback.md +0 -90
- package/dist/templates/common/workflow/git/en/git-worktree.md +0 -276
- package/dist/templates/common/workflow/git/zh-CN/git-cleanBranches.md +0 -102
- package/dist/templates/common/workflow/git/zh-CN/git-commit.md +0 -205
- package/dist/templates/common/workflow/git/zh-CN/git-rollback.md +0 -90
- package/dist/templates/common/workflow/git/zh-CN/git-worktree.md +0 -276
- package/dist/templates/common/workflow/interview/en/interview.md +0 -67
- package/dist/templates/common/workflow/interview/zh-CN/interview.md +0 -67
- package/dist/templates/common/workflow/linearMethod/en/linear-method.md +0 -651
- package/dist/templates/common/workflow/linearMethod/zh-CN/linear-method.md +0 -752
- package/dist/templates/common/workflow/refactoringMaster/en/refactoring-master.md +0 -516
- package/dist/templates/common/workflow/refactoringMaster/zh-CN/refactoring-master.md +0 -812
- package/dist/templates/common/workflow/sixStep/en/workflow.md +0 -83
- package/dist/templates/common/workflow/sixStep/zh-CN/workflow.md +0 -359
- package/dist/templates/common/workflow/specFirstTDD/en/spec-first-tdd.md +0 -364
- package/dist/templates/common/workflow/specFirstTDD/zh-CN/spec-first-tdd.md +0 -366
- package/dist/templates/hooks/README.md +0 -212
- package/dist/templates/hooks/git-workflow-hooks.md +0 -551
- package/dist/templates/hooks/post-test/coverage.json +0 -21
- package/dist/templates/hooks/post-test/summary.json +0 -21
- package/dist/templates/hooks/post-test-coverage.md +0 -434
- package/dist/templates/hooks/pre-commit/eslint.json +0 -22
- package/dist/templates/hooks/pre-commit/prettier.json +0 -22
- package/dist/templates/hooks/pre-commit-black.md +0 -274
- package/dist/templates/hooks/pre-commit-eslint.md +0 -153
- package/dist/templates/hooks/pre-commit-gofmt.md +0 -284
- package/dist/templates/hooks/pre-commit-prettier.md +0 -212
- package/dist/templates/hooks/pre-commit-type-check.md +0 -377
- package/dist/templates/skills/ccjk-init.md +0 -154
- package/dist/templates/skills/ccjk-mcp-setup.md +0 -205
- package/dist/templates/skills/ccjk-troubleshoot.md +0 -228
- package/dist/templates/skills/django-patterns.md +0 -1016
- package/dist/templates/skills/git-workflow.md +0 -748
- package/dist/templates/skills/go-idioms.md +0 -963
- package/dist/templates/skills/index.json +0 -132
- package/dist/templates/skills/nextjs-optimization.md +0 -694
- package/dist/templates/skills/python-pep8.md +0 -852
- package/dist/templates/skills/react-patterns.md +0 -686
- package/dist/templates/skills/rust-patterns.md +0 -1057
- package/dist/templates/skills/security-best-practices.md +0 -1413
- package/dist/templates/skills/testing-best-practices.md +0 -1315
- package/dist/templates/skills/ts-best-practices.md +0 -354
- package/templates/agents/README.md +0 -78
- package/templates/agents/fullstack-developer.json +0 -70
- package/templates/agents/go-expert.json +0 -69
- package/templates/agents/index.json +0 -64
- package/templates/agents/python-expert.json +0 -69
- package/templates/agents/react-specialist.json +0 -69
- package/templates/agents/testing-automation-expert.json +0 -70
- package/templates/agents/typescript-architect.json +0 -69
- package/templates/claude-code/common/settings.json +0 -109
- package/templates/common/error-prevention.md +0 -267
- package/templates/common/karpathy-baseline.md +0 -83
- package/templates/common/output-styles/zh-CN/carmack-mode.md +0 -381
- package/templates/common/output-styles/zh-CN/codex-rigor-mode.md +0 -114
- package/templates/common/output-styles/zh-CN/dhh-mode.md +0 -265
- package/templates/common/output-styles/zh-CN/evan-you-mode.md +0 -539
- package/templates/common/output-styles/zh-CN/jobs-mode.md +0 -369
- package/templates/common/output-styles/zh-CN/linus-mode.md +0 -135
- package/templates/common/output-styles/zh-CN/uncle-bob-mode.md +0 -221
- package/templates/common/workflow/continuousDelivery/en/continuous-delivery.md +0 -628
- package/templates/common/workflow/continuousDelivery/zh-CN/continuous-delivery.md +0 -628
- package/templates/common/workflow/essential/en/agents/ccjk-config-agent.md +0 -187
- package/templates/common/workflow/essential/en/agents/ccjk-mcp-agent.md +0 -191
- package/templates/common/workflow/essential/en/agents/ccjk-skill-agent.md +0 -249
- package/templates/common/workflow/essential/en/agents/ccjk-workflow-agent.md +0 -277
- package/templates/common/workflow/essential/en/agents/get-current-datetime.md +0 -29
- package/templates/common/workflow/essential/en/agents/init-architect.md +0 -115
- package/templates/common/workflow/essential/en/agents/ui-ux-designer.md +0 -91
- package/templates/common/workflow/essential/en/feat.md +0 -92
- package/templates/common/workflow/essential/en/goal.md +0 -147
- package/templates/common/workflow/essential/en/init-project.md +0 -53
- package/templates/common/workflow/essential/zh-CN/agents/get-current-datetime.md +0 -29
- package/templates/common/workflow/essential/zh-CN/agents/init-architect.md +0 -115
- package/templates/common/workflow/essential/zh-CN/agents/ui-ux-designer.md +0 -91
- package/templates/common/workflow/essential/zh-CN/feat.md +0 -315
- package/templates/common/workflow/essential/zh-CN/goal.md +0 -146
- package/templates/common/workflow/essential/zh-CN/init-project.md +0 -53
- package/templates/common/workflow/git/en/git-cleanBranches.md +0 -102
- package/templates/common/workflow/git/en/git-commit.md +0 -205
- package/templates/common/workflow/git/en/git-rollback.md +0 -90
- package/templates/common/workflow/git/en/git-worktree.md +0 -276
- package/templates/common/workflow/git/zh-CN/git-cleanBranches.md +0 -102
- package/templates/common/workflow/git/zh-CN/git-commit.md +0 -205
- package/templates/common/workflow/git/zh-CN/git-rollback.md +0 -90
- package/templates/common/workflow/git/zh-CN/git-worktree.md +0 -276
- package/templates/common/workflow/interview/en/interview.md +0 -67
- package/templates/common/workflow/interview/zh-CN/interview.md +0 -67
- package/templates/common/workflow/linearMethod/en/linear-method.md +0 -651
- package/templates/common/workflow/linearMethod/zh-CN/linear-method.md +0 -752
- package/templates/common/workflow/refactoringMaster/en/refactoring-master.md +0 -516
- package/templates/common/workflow/refactoringMaster/zh-CN/refactoring-master.md +0 -812
- package/templates/common/workflow/sixStep/en/workflow.md +0 -83
- package/templates/common/workflow/sixStep/zh-CN/workflow.md +0 -359
- package/templates/common/workflow/specFirstTDD/en/spec-first-tdd.md +0 -364
- package/templates/common/workflow/specFirstTDD/zh-CN/spec-first-tdd.md +0 -366
- package/templates/hooks/README.md +0 -212
- package/templates/hooks/git-workflow-hooks.md +0 -551
- package/templates/hooks/post-test/coverage.json +0 -21
- package/templates/hooks/post-test/summary.json +0 -21
- package/templates/hooks/post-test-coverage.md +0 -434
- package/templates/hooks/pre-commit/eslint.json +0 -22
- package/templates/hooks/pre-commit/prettier.json +0 -22
- package/templates/hooks/pre-commit-black.md +0 -274
- package/templates/hooks/pre-commit-eslint.md +0 -153
- package/templates/hooks/pre-commit-gofmt.md +0 -284
- package/templates/hooks/pre-commit-prettier.md +0 -212
- package/templates/hooks/pre-commit-type-check.md +0 -377
- package/templates/skills/basic.hbs +0 -72
- package/templates/skills/ccjk-init.md +0 -154
- package/templates/skills/ccjk-mcp-setup.md +0 -205
- package/templates/skills/ccjk-troubleshoot.md +0 -228
- package/templates/skills/code-refactor.hbs +0 -133
- package/templates/skills/code-review.hbs +0 -141
- package/templates/skills/django-patterns.md +0 -1016
- package/templates/skills/git-workflow.md +0 -748
- package/templates/skills/go-idioms.md +0 -963
- package/templates/skills/index.json +0 -132
- package/templates/skills/nextjs-optimization.md +0 -694
- package/templates/skills/python-pep8.md +0 -852
- package/templates/skills/react-patterns.md +0 -686
- package/templates/skills/rust-patterns.md +0 -1057
- package/templates/skills/security-best-practices.md +0 -1413
- package/templates/skills/testing-best-practices.md +0 -1315
- package/templates/skills/ts-best-practices.md +0 -354
- package/templates/skills/type-fix.hbs +0 -132
|
@@ -1,516 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Refactoring Master Mode - Apply Martin Fowler's refactoring patterns, small steps to improve code design and reduce technical debt
|
|
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 # Start refactoring workflow
|
|
7
|
-
# - /refactoring-master --pattern extract-method # Apply specific pattern
|
|
8
|
-
# - /refactoring-master --safe-mode # Safe mode (run tests each step)
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Refactoring Master Mode
|
|
12
|
-
|
|
13
|
-
Based on Martin Fowler's *Refactoring: Improving the Design of Existing Code* (2nd Edition) for systematic code quality improvement.
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## Core Philosophy
|
|
18
|
-
|
|
19
|
-
**Refactoring**: Improving code's internal structure without changing its external behavior.
|
|
20
|
-
|
|
21
|
-
**Key Principles**:
|
|
22
|
-
1. **Small Steps**: Make one small change at a time
|
|
23
|
-
2. **Test Protection**: Tests must pass before and after refactoring
|
|
24
|
-
3. **Continuous Integration**: Commit frequently to avoid merge conflicts
|
|
25
|
-
4. **Identify Smells**: Systematically identify code that needs refactoring
|
|
26
|
-
5. **Apply Patterns**: Use proven refactoring techniques
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## Refactoring Workflow
|
|
31
|
-
|
|
32
|
-
### Phase 1: Code Smell Detection
|
|
33
|
-
|
|
34
|
-
**Goal**: Systematically identify code that needs improvement
|
|
35
|
-
|
|
36
|
-
#### Common Code Smells
|
|
37
|
-
|
|
38
|
-
##### 1. Mysterious Name
|
|
39
|
-
|
|
40
|
-
```typescript
|
|
41
|
-
// ❌ Bad: Unclear naming
|
|
42
|
-
function calc(a: number, b: number): number {
|
|
43
|
-
return a * b * 0.9
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// ✅ Good: Clear intent
|
|
47
|
-
function calculateDiscountedPrice(originalPrice: number, quantity: number): number {
|
|
48
|
-
const DISCOUNT_RATE = 0.9
|
|
49
|
-
return originalPrice * quantity * DISCOUNT_RATE
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
##### 2. Duplicated Code
|
|
54
|
-
|
|
55
|
-
```typescript
|
|
56
|
-
// ❌ Bad: Repeated validation logic
|
|
57
|
-
function createUser(data: UserData) {
|
|
58
|
-
if (!data.email || !data.email.includes('@')) {
|
|
59
|
-
throw new Error('Invalid email')
|
|
60
|
-
}
|
|
61
|
-
if (!data.password || data.password.length < 8) {
|
|
62
|
-
throw new Error('Password too short')
|
|
63
|
-
}
|
|
64
|
-
// ...
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function updateUser(id: string, data: UserData) {
|
|
68
|
-
if (!data.email || !data.email.includes('@')) {
|
|
69
|
-
throw new Error('Invalid email')
|
|
70
|
-
}
|
|
71
|
-
if (!data.password || data.password.length < 8) {
|
|
72
|
-
throw new Error('Password too short')
|
|
73
|
-
}
|
|
74
|
-
// ...
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// ✅ Good: Extract common validation
|
|
78
|
-
function validateUserData(data: UserData) {
|
|
79
|
-
if (!data.email || !data.email.includes('@')) {
|
|
80
|
-
throw new Error('Invalid email')
|
|
81
|
-
}
|
|
82
|
-
if (!data.password || data.password.length < 8) {
|
|
83
|
-
throw new Error('Password too short')
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function createUser(data: UserData) {
|
|
88
|
-
validateUserData(data)
|
|
89
|
-
// ...
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
function updateUser(id: string, data: UserData) {
|
|
93
|
-
validateUserData(data)
|
|
94
|
-
// ...
|
|
95
|
-
}
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
##### 3. Long Function
|
|
99
|
-
|
|
100
|
-
```typescript
|
|
101
|
-
// ❌ Bad: 100+ line function
|
|
102
|
-
function processOrder(order: Order) {
|
|
103
|
-
// Validate order (20 lines)
|
|
104
|
-
// Calculate price (30 lines)
|
|
105
|
-
// Check inventory (25 lines)
|
|
106
|
-
// Create shipment (20 lines)
|
|
107
|
-
// Send notifications (15 lines)
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// ✅ Good: Split into smaller functions
|
|
111
|
-
function processOrder(order: Order) {
|
|
112
|
-
validateOrder(order)
|
|
113
|
-
const totalPrice = calculateTotalPrice(order)
|
|
114
|
-
checkInventory(order.items)
|
|
115
|
-
createShipment(order)
|
|
116
|
-
sendNotifications(order)
|
|
117
|
-
}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
##### 4. Long Parameter List
|
|
121
|
-
|
|
122
|
-
```typescript
|
|
123
|
-
// ❌ Bad: 6 parameters
|
|
124
|
-
function createInvoice(
|
|
125
|
-
customerId: string,
|
|
126
|
-
customerName: string,
|
|
127
|
-
customerEmail: string,
|
|
128
|
-
items: Item[],
|
|
129
|
-
discount: number,
|
|
130
|
-
taxRate: number
|
|
131
|
-
) { }
|
|
132
|
-
|
|
133
|
-
// ✅ Good: Use parameter object
|
|
134
|
-
interface InvoiceParams {
|
|
135
|
-
customer: {
|
|
136
|
-
id: string
|
|
137
|
-
name: string
|
|
138
|
-
email: string
|
|
139
|
-
}
|
|
140
|
-
items: Item[]
|
|
141
|
-
pricing: {
|
|
142
|
-
discount: number
|
|
143
|
-
taxRate: number
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
function createInvoice(params: InvoiceParams) { }
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
##### 5. Primitive Obsession
|
|
151
|
-
|
|
152
|
-
```typescript
|
|
153
|
-
// ❌ Bad: Using primitives for domain concepts
|
|
154
|
-
function sendEmail(email: string) {
|
|
155
|
-
// Must validate every time
|
|
156
|
-
if (!email.includes('@')) {
|
|
157
|
-
throw new Error('Invalid email')
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// ✅ Good: Use value objects
|
|
162
|
-
class Email {
|
|
163
|
-
private constructor(private readonly value: string) {
|
|
164
|
-
if (!value.includes('@')) {
|
|
165
|
-
throw new Error('Invalid email')
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
static create(value: string): Email {
|
|
170
|
-
return new Email(value)
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
toString(): string {
|
|
174
|
-
return this.value
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
function sendEmail(email: Email) {
|
|
179
|
-
// No validation needed, type system guarantees validity
|
|
180
|
-
}
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
### Phase 2: Refactoring Catalog
|
|
186
|
-
|
|
187
|
-
#### Extract Function
|
|
188
|
-
|
|
189
|
-
**When**: Function is too long, or code block needs comments to understand
|
|
190
|
-
|
|
191
|
-
```typescript
|
|
192
|
-
// Before
|
|
193
|
-
function printOwing(invoice: Invoice) {
|
|
194
|
-
let outstanding = 0
|
|
195
|
-
|
|
196
|
-
console.log('***********************')
|
|
197
|
-
console.log('**** Customer Owes ****')
|
|
198
|
-
console.log('***********************')
|
|
199
|
-
|
|
200
|
-
// calculate outstanding
|
|
201
|
-
for (const order of invoice.orders) {
|
|
202
|
-
outstanding += order.amount
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// record due date
|
|
206
|
-
const today = new Date()
|
|
207
|
-
invoice.dueDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 30)
|
|
208
|
-
|
|
209
|
-
// print details
|
|
210
|
-
console.log(`name: ${invoice.customer}`)
|
|
211
|
-
console.log(`amount: ${outstanding}`)
|
|
212
|
-
console.log(`due: ${invoice.dueDate.toLocaleDateString()}`)
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
// After
|
|
216
|
-
function printOwing(invoice: Invoice) {
|
|
217
|
-
printBanner()
|
|
218
|
-
const outstanding = calculateOutstanding(invoice)
|
|
219
|
-
recordDueDate(invoice)
|
|
220
|
-
printDetails(invoice, outstanding)
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
function printBanner() {
|
|
224
|
-
console.log('***********************')
|
|
225
|
-
console.log('**** Customer Owes ****')
|
|
226
|
-
console.log('***********************')
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
function calculateOutstanding(invoice: Invoice): number {
|
|
230
|
-
return invoice.orders.reduce((sum, order) => sum + order.amount, 0)
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
function recordDueDate(invoice: Invoice) {
|
|
234
|
-
const today = new Date()
|
|
235
|
-
invoice.dueDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 30)
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
function printDetails(invoice: Invoice, outstanding: number) {
|
|
239
|
-
console.log(`name: ${invoice.customer}`)
|
|
240
|
-
console.log(`amount: ${outstanding}`)
|
|
241
|
-
console.log(`due: ${invoice.dueDate.toLocaleDateString()}`)
|
|
242
|
-
}
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
#### Extract Variable
|
|
246
|
-
|
|
247
|
-
**When**: Expression is complex and hard to understand
|
|
248
|
-
|
|
249
|
-
```typescript
|
|
250
|
-
// Before
|
|
251
|
-
function price(order: Order): number {
|
|
252
|
-
return order.quantity * order.itemPrice -
|
|
253
|
-
Math.max(0, order.quantity - 500) * order.itemPrice * 0.05 +
|
|
254
|
-
Math.min(order.quantity * order.itemPrice * 0.1, 100)
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
// After
|
|
258
|
-
function price(order: Order): number {
|
|
259
|
-
const basePrice = order.quantity * order.itemPrice
|
|
260
|
-
const quantityDiscount = Math.max(0, order.quantity - 500) * order.itemPrice * 0.05
|
|
261
|
-
const shipping = Math.min(basePrice * 0.1, 100)
|
|
262
|
-
return basePrice - quantityDiscount + shipping
|
|
263
|
-
}
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
#### Replace Conditional with Polymorphism
|
|
267
|
-
|
|
268
|
-
**When**: Conditional logic based on type codes
|
|
269
|
-
|
|
270
|
-
```typescript
|
|
271
|
-
// Before
|
|
272
|
-
class Bird {
|
|
273
|
-
constructor(public type: string) { }
|
|
274
|
-
|
|
275
|
-
getSpeed(): number {
|
|
276
|
-
switch (this.type) {
|
|
277
|
-
case 'european':
|
|
278
|
-
return 35
|
|
279
|
-
case 'african':
|
|
280
|
-
return 40
|
|
281
|
-
case 'norwegian-blue':
|
|
282
|
-
return this.isNailed ? 0 : 10
|
|
283
|
-
default:
|
|
284
|
-
throw new Error('Unknown bird type')
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
// After
|
|
290
|
-
abstract class Bird {
|
|
291
|
-
abstract getSpeed(): number
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
class EuropeanBird extends Bird {
|
|
295
|
-
getSpeed(): number {
|
|
296
|
-
return 35
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
class AfricanBird extends Bird {
|
|
301
|
-
getSpeed(): number {
|
|
302
|
-
return 40
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
class NorwegianBlueBird extends Bird {
|
|
307
|
-
constructor(private isNailed: boolean) {
|
|
308
|
-
super()
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
getSpeed(): number {
|
|
312
|
-
return this.isNailed ? 0 : 10
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
---
|
|
318
|
-
|
|
319
|
-
### Phase 3: Safe Refactoring Process
|
|
320
|
-
|
|
321
|
-
#### Step 1: Ensure Test Coverage
|
|
322
|
-
|
|
323
|
-
```bash
|
|
324
|
-
# Run tests to ensure current code works
|
|
325
|
-
npm test
|
|
326
|
-
|
|
327
|
-
# Check coverage
|
|
328
|
-
npm run coverage
|
|
329
|
-
|
|
330
|
-
# If coverage insufficient, add tests first
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
#### Step 2: Small Refactoring Steps
|
|
334
|
-
|
|
335
|
-
```typescript
|
|
336
|
-
// Make one small change at a time
|
|
337
|
-
// Example: First extract variable
|
|
338
|
-
const basePrice = order.quantity * order.itemPrice
|
|
339
|
-
|
|
340
|
-
// Run tests
|
|
341
|
-
npm test // ✅ Pass
|
|
342
|
-
|
|
343
|
-
// Then extract next variable
|
|
344
|
-
const quantityDiscount = Math.max(0, order.quantity - 500) * order.itemPrice * 0.05
|
|
345
|
-
|
|
346
|
-
// Run tests again
|
|
347
|
-
npm test // ✅ Pass
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
#### Step 3: Commit Frequently
|
|
351
|
-
|
|
352
|
-
```bash
|
|
353
|
-
# Commit after each small refactoring
|
|
354
|
-
git add .
|
|
355
|
-
git commit -m "refactor: extract basePrice variable"
|
|
356
|
-
|
|
357
|
-
# Continue next refactoring
|
|
358
|
-
# ...
|
|
359
|
-
|
|
360
|
-
git commit -m "refactor: extract quantityDiscount variable"
|
|
361
|
-
```
|
|
362
|
-
|
|
363
|
-
#### Step 4: Use IDE Automated Refactoring
|
|
364
|
-
|
|
365
|
-
```typescript
|
|
366
|
-
// Use IDE refactoring features (safer)
|
|
367
|
-
// - Rename Symbol (F2)
|
|
368
|
-
// - Extract Method
|
|
369
|
-
// - Extract Variable
|
|
370
|
-
// - Inline Variable
|
|
371
|
-
// - Move to File
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
---
|
|
375
|
-
|
|
376
|
-
### Phase 4: Refactoring Patterns
|
|
377
|
-
|
|
378
|
-
#### Pattern 1: Layered Architecture Refactoring
|
|
379
|
-
|
|
380
|
-
```typescript
|
|
381
|
-
// Before: All logic mixed together
|
|
382
|
-
app.post('/users', async (req, res) => {
|
|
383
|
-
// Validation
|
|
384
|
-
if (!req.body.email || !req.body.email.includes('@')) {
|
|
385
|
-
return res.status(400).json({ error: 'Invalid email' })
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
// Business logic
|
|
389
|
-
const hashedPassword = await bcrypt.hash(req.body.password, 10)
|
|
390
|
-
const user = {
|
|
391
|
-
email: req.body.email,
|
|
392
|
-
password: hashedPassword,
|
|
393
|
-
createdAt: new Date()
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
// Data access
|
|
397
|
-
await db.collection('users').insertOne(user)
|
|
398
|
-
|
|
399
|
-
res.json({ id: user._id })
|
|
400
|
-
})
|
|
401
|
-
|
|
402
|
-
// After: Layered architecture
|
|
403
|
-
// Controller Layer
|
|
404
|
-
class UserController {
|
|
405
|
-
async create(req: Request, res: Response) {
|
|
406
|
-
const dto = CreateUserDto.from(req.body)
|
|
407
|
-
const user = await this.userService.create(dto)
|
|
408
|
-
res.json({ id: user.id })
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
// Service Layer
|
|
413
|
-
class UserService {
|
|
414
|
-
async create(dto: CreateUserDto): Promise<User> {
|
|
415
|
-
const hashedPassword = await this.passwordHasher.hash(dto.password)
|
|
416
|
-
const user = User.create(dto.email, hashedPassword)
|
|
417
|
-
return await this.userRepository.save(user)
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
// Repository Layer
|
|
422
|
-
class UserRepository {
|
|
423
|
-
async save(user: User): Promise<User> {
|
|
424
|
-
await this.db.collection('users').insertOne(user)
|
|
425
|
-
return user
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
```
|
|
429
|
-
|
|
430
|
-
#### Pattern 2: Dependency Injection Refactoring
|
|
431
|
-
|
|
432
|
-
```typescript
|
|
433
|
-
// Before: Hardcoded dependencies
|
|
434
|
-
class OrderService {
|
|
435
|
-
processOrder(order: Order) {
|
|
436
|
-
const payment = new PaymentService() // Hardcoded
|
|
437
|
-
const shipping = new ShippingService() // Hardcoded
|
|
438
|
-
payment.charge(order.total)
|
|
439
|
-
shipping.ship(order)
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
// After: Dependency injection
|
|
444
|
-
class OrderService {
|
|
445
|
-
constructor(
|
|
446
|
-
private paymentService: PaymentService,
|
|
447
|
-
private shippingService: ShippingService
|
|
448
|
-
) { }
|
|
449
|
-
|
|
450
|
-
processOrder(order: Order) {
|
|
451
|
-
this.paymentService.charge(order.total)
|
|
452
|
-
this.shippingService.ship(order)
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
// Easy to test
|
|
457
|
-
const mockPayment = new MockPaymentService()
|
|
458
|
-
const mockShipping = new MockShippingService()
|
|
459
|
-
const service = new OrderService(mockPayment, mockShipping)
|
|
460
|
-
```
|
|
461
|
-
|
|
462
|
-
---
|
|
463
|
-
|
|
464
|
-
## Refactoring Checklist
|
|
465
|
-
|
|
466
|
-
### Before Refactoring
|
|
467
|
-
|
|
468
|
-
- [ ] Code has sufficient test coverage
|
|
469
|
-
- [ ] All tests pass
|
|
470
|
-
- [ ] Code committed to version control
|
|
471
|
-
- [ ] Understand the code to refactor
|
|
472
|
-
- [ ] Define refactoring goals
|
|
473
|
-
|
|
474
|
-
### During Refactoring
|
|
475
|
-
|
|
476
|
-
- [ ] Make one small change at a time
|
|
477
|
-
- [ ] Run tests after each change
|
|
478
|
-
- [ ] Keep tests green
|
|
479
|
-
- [ ] Commit frequently
|
|
480
|
-
- [ ] Use IDE automated refactoring
|
|
481
|
-
|
|
482
|
-
### After Refactoring
|
|
483
|
-
|
|
484
|
-
- [ ] All tests pass
|
|
485
|
-
- [ ] Code is more understandable
|
|
486
|
-
- [ ] Code is easier to modify
|
|
487
|
-
- [ ] No new bugs introduced
|
|
488
|
-
- [ ] No significant performance degradation
|
|
489
|
-
|
|
490
|
-
---
|
|
491
|
-
|
|
492
|
-
## Command Options
|
|
493
|
-
|
|
494
|
-
- `--pattern <name>`: Apply specific refactoring pattern
|
|
495
|
-
- `--scope <file|module|system>`: Refactoring scope
|
|
496
|
-
- `--safe-mode`: Run tests after each step
|
|
497
|
-
- `--dry-run`: Preview refactoring effects
|
|
498
|
-
|
|
499
|
-
---
|
|
500
|
-
|
|
501
|
-
## Success Metrics
|
|
502
|
-
|
|
503
|
-
- ✅ Code complexity reduced by 30%
|
|
504
|
-
- ✅ Code duplication < 5%
|
|
505
|
-
- ✅ Average function length < 20 lines
|
|
506
|
-
- ✅ Technical debt reduced by 60%
|
|
507
|
-
- ✅ New feature development speed increased by 40%
|
|
508
|
-
|
|
509
|
-
---
|
|
510
|
-
|
|
511
|
-
## References
|
|
512
|
-
|
|
513
|
-
- Martin Fowler - *Refactoring: Improving the Design of Existing Code* (2nd Edition)
|
|
514
|
-
- Robert C. Martin - *Clean Code*
|
|
515
|
-
- Joshua Kerievsky - *Refactoring to Patterns*
|
|
516
|
-
- Michael Feathers - *Working Effectively with Legacy Code*
|