oh-my-oop 0.2.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/MCP_STRUCTURE.md +301 -0
- package/README.md +167 -0
- package/SCOPE.md +27 -0
- package/dist/application/discovery.d.ts +133 -0
- package/dist/application/discovery.js +62 -0
- package/dist/application/discovery.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +80 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +16 -0
- package/dist/config.js +32 -0
- package/dist/config.js.map +1 -0
- package/dist/domain/collaborators.d.ts +2 -0
- package/dist/domain/collaborators.js +26 -0
- package/dist/domain/collaborators.js.map +1 -0
- package/dist/domain/ids.d.ts +4 -0
- package/dist/domain/ids.js +23 -0
- package/dist/domain/ids.js.map +1 -0
- package/dist/domain/model.d.ts +71 -0
- package/dist/domain/model.js +2 -0
- package/dist/domain/model.js.map +1 -0
- package/dist/domain/schemas.d.ts +213 -0
- package/dist/domain/schemas.js +79 -0
- package/dist/domain/schemas.js.map +1 -0
- package/dist/domain/stereotypes.d.ts +7 -0
- package/dist/domain/stereotypes.js +65 -0
- package/dist/domain/stereotypes.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/io/classStore.d.ts +9 -0
- package/dist/io/classStore.js +39 -0
- package/dist/io/classStore.js.map +1 -0
- package/dist/io/collaborationStore.d.ts +7 -0
- package/dist/io/collaborationStore.js +32 -0
- package/dist/io/collaborationStore.js.map +1 -0
- package/dist/io/design.d.ts +3 -0
- package/dist/io/design.js +22 -0
- package/dist/io/design.js.map +1 -0
- package/dist/io/designIndex.d.ts +6 -0
- package/dist/io/designIndex.js +49 -0
- package/dist/io/designIndex.js.map +1 -0
- package/dist/io/frontmatter.d.ts +8 -0
- package/dist/io/frontmatter.js +31 -0
- package/dist/io/frontmatter.js.map +1 -0
- package/dist/io/history.d.ts +10 -0
- package/dist/io/history.js +38 -0
- package/dist/io/history.js.map +1 -0
- package/dist/io/useCaseStore.d.ts +8 -0
- package/dist/io/useCaseStore.js +36 -0
- package/dist/io/useCaseStore.js.map +1 -0
- package/dist/io/workspace.d.ts +14 -0
- package/dist/io/workspace.js +82 -0
- package/dist/io/workspace.js.map +1 -0
- package/dist/oop/commands.d.ts +446 -0
- package/dist/oop/commands.js +319 -0
- package/dist/oop/commands.js.map +1 -0
- package/dist/oop/conformance.d.ts +16 -0
- package/dist/oop/conformance.js +30 -0
- package/dist/oop/conformance.js.map +1 -0
- package/dist/prompts/discovery.d.ts +2 -0
- package/dist/prompts/discovery.js +41 -0
- package/dist/prompts/discovery.js.map +1 -0
- package/dist/prompts/imagineWithoutController.d.ts +2 -0
- package/dist/prompts/imagineWithoutController.js +75 -0
- package/dist/prompts/imagineWithoutController.js.map +1 -0
- package/dist/prompts/index.d.ts +2 -0
- package/dist/prompts/index.js +17 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/phasePressureTest.d.ts +2 -0
- package/dist/prompts/phasePressureTest.js +69 -0
- package/dist/prompts/phasePressureTest.js.map +1 -0
- package/dist/prompts/rddIntro.d.ts +2 -0
- package/dist/prompts/rddIntro.js +53 -0
- package/dist/prompts/rddIntro.js.map +1 -0
- package/dist/prompts/review.d.ts +2 -0
- package/dist/prompts/review.js +45 -0
- package/dist/prompts/review.js.map +1 -0
- package/dist/prompts/stateMachineIntrospect.d.ts +2 -0
- package/dist/prompts/stateMachineIntrospect.js +80 -0
- package/dist/prompts/stateMachineIntrospect.js.map +1 -0
- package/dist/prompts/tellDontAskRephrase.d.ts +2 -0
- package/dist/prompts/tellDontAskRephrase.js +66 -0
- package/dist/prompts/tellDontAskRephrase.js.map +1 -0
- package/dist/render/diff.d.ts +21 -0
- package/dist/render/diff.js +84 -0
- package/dist/render/diff.js.map +1 -0
- package/dist/render/mermaid.d.ts +24 -0
- package/dist/render/mermaid.js +53 -0
- package/dist/render/mermaid.js.map +1 -0
- package/dist/render/sideBySide.d.ts +14 -0
- package/dist/render/sideBySide.js +91 -0
- package/dist/render/sideBySide.js.map +1 -0
- package/dist/resources/index.d.ts +2 -0
- package/dist/resources/index.js +349 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.js +22 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/alternatives.d.ts +2 -0
- package/dist/tools/alternatives.js +9 -0
- package/dist/tools/alternatives.js.map +1 -0
- package/dist/tools/classes.d.ts +2 -0
- package/dist/tools/classes.js +13 -0
- package/dist/tools/classes.js.map +1 -0
- package/dist/tools/collaborations.d.ts +2 -0
- package/dist/tools/collaborations.js +8 -0
- package/dist/tools/collaborations.js.map +1 -0
- package/dist/tools/compare.d.ts +2 -0
- package/dist/tools/compare.js +9 -0
- package/dist/tools/compare.js.map +1 -0
- package/dist/tools/conformance.d.ts +3 -0
- package/dist/tools/conformance.js +11 -0
- package/dist/tools/conformance.js.map +1 -0
- package/dist/tools/diagram.d.ts +2 -0
- package/dist/tools/diagram.js +9 -0
- package/dist/tools/diagram.js.map +1 -0
- package/dist/tools/discovery.d.ts +2 -0
- package/dist/tools/discovery.js +23 -0
- package/dist/tools/discovery.js.map +1 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.js +27 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/init.d.ts +2 -0
- package/dist/tools/init.js +9 -0
- package/dist/tools/init.js.map +1 -0
- package/dist/tools/oop.d.ts +9 -0
- package/dist/tools/oop.js +26 -0
- package/dist/tools/oop.js.map +1 -0
- package/dist/tools/responsibilities.d.ts +2 -0
- package/dist/tools/responsibilities.js +13 -0
- package/dist/tools/responsibilities.js.map +1 -0
- package/dist/tools/state.d.ts +2 -0
- package/dist/tools/state.js +8 -0
- package/dist/tools/state.js.map +1 -0
- package/dist/tools/useCases.d.ts +2 -0
- package/dist/tools/useCases.js +18 -0
- package/dist/tools/useCases.js.map +1 -0
- package/dist/tools/validate.d.ts +2 -0
- package/dist/tools/validate.js +9 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/tradeoff/engine.d.ts +61 -0
- package/dist/tradeoff/engine.js +171 -0
- package/dist/tradeoff/engine.js.map +1 -0
- package/dist/tradeoff/heuristics/classSplit.d.ts +3 -0
- package/dist/tradeoff/heuristics/classSplit.js +94 -0
- package/dist/tradeoff/heuristics/classSplit.js.map +1 -0
- package/dist/tradeoff/heuristics/collaborationShape.d.ts +2 -0
- package/dist/tradeoff/heuristics/collaborationShape.js +82 -0
- package/dist/tradeoff/heuristics/collaborationShape.js.map +1 -0
- package/dist/tradeoff/heuristics/collectionShape.d.ts +2 -0
- package/dist/tradeoff/heuristics/collectionShape.js +113 -0
- package/dist/tradeoff/heuristics/collectionShape.js.map +1 -0
- package/dist/tradeoff/heuristics/dualSubjectComparison.d.ts +2 -0
- package/dist/tradeoff/heuristics/dualSubjectComparison.js +114 -0
- package/dist/tradeoff/heuristics/dualSubjectComparison.js.map +1 -0
- package/dist/tradeoff/heuristics/errorHandling.d.ts +2 -0
- package/dist/tradeoff/heuristics/errorHandling.js +110 -0
- package/dist/tradeoff/heuristics/errorHandling.js.map +1 -0
- package/dist/tradeoff/heuristics/responsibilitySplit.d.ts +23 -0
- package/dist/tradeoff/heuristics/responsibilitySplit.js +183 -0
- package/dist/tradeoff/heuristics/responsibilitySplit.js.map +1 -0
- package/dist/tradeoff/heuristics/stereotypeChoice.d.ts +2 -0
- package/dist/tradeoff/heuristics/stereotypeChoice.js +23 -0
- package/dist/tradeoff/heuristics/stereotypeChoice.js.map +1 -0
- package/dist/tradeoff/heuristics/strategyOrPolicy.d.ts +2 -0
- package/dist/tradeoff/heuristics/strategyOrPolicy.js +110 -0
- package/dist/tradeoff/heuristics/strategyOrPolicy.js.map +1 -0
- package/dist/tradeoff/heuristics/valueObjectShape.d.ts +2 -0
- package/dist/tradeoff/heuristics/valueObjectShape.js +111 -0
- package/dist/tradeoff/heuristics/valueObjectShape.js.map +1 -0
- package/dist/tradeoff/templates.d.ts +2 -0
- package/dist/tradeoff/templates.js +33 -0
- package/dist/tradeoff/templates.js.map +1 -0
- package/dist/util/log.d.ts +1 -0
- package/dist/util/log.js +7 -0
- package/dist/util/log.js.map +1 -0
- package/dist/util/mcp.d.ts +4 -0
- package/dist/util/mcp.js +18 -0
- package/dist/util/mcp.js.map +1 -0
- package/dist/validate/cohesion.d.ts +3 -0
- package/dist/validate/cohesion.js +88 -0
- package/dist/validate/cohesion.js.map +1 -0
- package/dist/validate/collectionWrapper.d.ts +3 -0
- package/dist/validate/collectionWrapper.js +131 -0
- package/dist/validate/collectionWrapper.js.map +1 -0
- package/dist/validate/coupling.d.ts +3 -0
- package/dist/validate/coupling.js +47 -0
- package/dist/validate/coupling.js.map +1 -0
- package/dist/validate/cycle.d.ts +3 -0
- package/dist/validate/cycle.js +101 -0
- package/dist/validate/cycle.js.map +1 -0
- package/dist/validate/dataDuplication.d.ts +3 -0
- package/dist/validate/dataDuplication.js +150 -0
- package/dist/validate/dataDuplication.js.map +1 -0
- package/dist/validate/dependencyDirection.d.ts +3 -0
- package/dist/validate/dependencyDirection.js +106 -0
- package/dist/validate/dependencyDirection.js.map +1 -0
- package/dist/validate/dualUseKnowing.d.ts +3 -0
- package/dist/validate/dualUseKnowing.js +137 -0
- package/dist/validate/dualUseKnowing.js.map +1 -0
- package/dist/validate/emptyObjectFill.d.ts +3 -0
- package/dist/validate/emptyObjectFill.js +119 -0
- package/dist/validate/emptyObjectFill.js.map +1 -0
- package/dist/validate/findings.d.ts +22 -0
- package/dist/validate/findings.js +12 -0
- package/dist/validate/findings.js.map +1 -0
- package/dist/validate/functionDecompositionExcess.d.ts +3 -0
- package/dist/validate/functionDecompositionExcess.js +120 -0
- package/dist/validate/functionDecompositionExcess.js.map +1 -0
- package/dist/validate/functionNotObject.d.ts +3 -0
- package/dist/validate/functionNotObject.js +80 -0
- package/dist/validate/functionNotObject.js.map +1 -0
- package/dist/validate/godObject.d.ts +6 -0
- package/dist/validate/godObject.js +76 -0
- package/dist/validate/godObject.js.map +1 -0
- package/dist/validate/presentationInDomain.d.ts +3 -0
- package/dist/validate/presentationInDomain.js +57 -0
- package/dist/validate/presentationInDomain.js.map +1 -0
- package/dist/validate/primitiveWrapper.d.ts +3 -0
- package/dist/validate/primitiveWrapper.js +106 -0
- package/dist/validate/primitiveWrapper.js.map +1 -0
- package/dist/validate/rules.d.ts +24 -0
- package/dist/validate/rules.js +269 -0
- package/dist/validate/rules.js.map +1 -0
- package/dist/validate/singletonStatefulHolder.d.ts +3 -0
- package/dist/validate/singletonStatefulHolder.js +128 -0
- package/dist/validate/singletonStatefulHolder.js.map +1 -0
- package/dist/validate/strategyAsymmetry.d.ts +3 -0
- package/dist/validate/strategyAsymmetry.js +131 -0
- package/dist/validate/strategyAsymmetry.js.map +1 -0
- package/dist/validate/testability.d.ts +5 -0
- package/dist/validate/testability.js +157 -0
- package/dist/validate/testability.js.map +1 -0
- package/dist/validate/vagueName.d.ts +3 -0
- package/dist/validate/vagueName.js +136 -0
- package/dist/validate/vagueName.js.map +1 -0
- package/dist/validate/validationLocation.d.ts +3 -0
- package/dist/validate/validationLocation.js +120 -0
- package/dist/validate/validationLocation.js.map +1 -0
- package/lessons/STYLE_GUIDE.md +304 -0
- package/lessons/woowacourse-kotlin-blackjack/2chang5/33-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +293 -0
- package/lessons/woowacourse-kotlin-blackjack/Choisehyeon/52-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +106 -0
- package/lessons/woowacourse-kotlin-blackjack/Choisehyeon/9-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +282 -0
- package/lessons/woowacourse-kotlin-blackjack/DYGames/14-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +182 -0
- package/lessons/woowacourse-kotlin-blackjack/DYGames/37-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +122 -0
- package/lessons/woowacourse-kotlin-blackjack/EmilyCh0/12-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +117 -0
- package/lessons/woowacourse-kotlin-blackjack/EmilyCh0/38-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +291 -0
- package/lessons/woowacourse-kotlin-blackjack/HANDOVER.md +1475 -0
- package/lessons/woowacourse-kotlin-blackjack/HamBeomJoon/119-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +251 -0
- package/lessons/woowacourse-kotlin-blackjack/HamBeomJoon/137-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +459 -0
- package/lessons/woowacourse-kotlin-blackjack/Hevton/100-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +282 -0
- package/lessons/woowacourse-kotlin-blackjack/Hevton/82-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +303 -0
- package/lessons/woowacourse-kotlin-blackjack/Hogu59/71-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +134 -0
- package/lessons/woowacourse-kotlin-blackjack/Hogu59/96-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +323 -0
- package/lessons/woowacourse-kotlin-blackjack/JoYehyun99/66-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +210 -0
- package/lessons/woowacourse-kotlin-blackjack/Junyoung-WON/101-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +191 -0
- package/lessons/woowacourse-kotlin-blackjack/Junyoung-WON/80-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +253 -0
- package/lessons/woowacourse-kotlin-blackjack/Leeyerin0210/108-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +516 -0
- package/lessons/woowacourse-kotlin-blackjack/Leeyerin0210/133-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +541 -0
- package/lessons/woowacourse-kotlin-blackjack/RightHennessy/22-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +278 -0
- package/lessons/woowacourse-kotlin-blackjack/RightHennessy/48-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +188 -0
- package/lessons/woowacourse-kotlin-blackjack/SeongHoonC/16-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +228 -0
- package/lessons/woowacourse-kotlin-blackjack/SeongHoonC/54-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +227 -0
- package/lessons/woowacourse-kotlin-blackjack/Yunseok-Nam/76-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +279 -0
- package/lessons/woowacourse-kotlin-blackjack/Yunseok-Nam/86-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +203 -0
- package/lessons/woowacourse-kotlin-blackjack/aprilgom/105-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +162 -0
- package/lessons/woowacourse-kotlin-blackjack/aprilgom/64-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +279 -0
- package/lessons/woowacourse-kotlin-blackjack/boogi-woogi/18-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +188 -0
- package/lessons/woowacourse-kotlin-blackjack/boogi-woogi/36-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +769 -0
- package/lessons/woowacourse-kotlin-blackjack/briandr97/19-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +226 -0
- package/lessons/woowacourse-kotlin-blackjack/briandr97/59-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +193 -0
- package/lessons/woowacourse-kotlin-blackjack/chaehyuns/70-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +175 -0
- package/lessons/woowacourse-kotlin-blackjack/chaehyuns/98-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +206 -0
- package/lessons/woowacourse-kotlin-blackjack/chanho0908/123-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +277 -0
- package/lessons/woowacourse-kotlin-blackjack/chanho0908/150-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +219 -0
- package/lessons/woowacourse-kotlin-blackjack/chws0508/26-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +259 -0
- package/lessons/woowacourse-kotlin-blackjack/chws0508/43-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +189 -0
- package/lessons/woowacourse-kotlin-blackjack/cucumber99/109-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +351 -0
- package/lessons/woowacourse-kotlin-blackjack/cucumber99/149-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +147 -0
- package/lessons/woowacourse-kotlin-blackjack/devfeijoa/121-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +168 -0
- package/lessons/woowacourse-kotlin-blackjack/devfeijoa/153-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +116 -0
- package/lessons/woowacourse-kotlin-blackjack/doabletuple/126-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +680 -0
- package/lessons/woowacourse-kotlin-blackjack/doabletuple/142-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +739 -0
- package/lessons/woowacourse-kotlin-blackjack/donghyun81/116-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +297 -0
- package/lessons/woowacourse-kotlin-blackjack/donghyun81/147-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +244 -0
- package/lessons/woowacourse-kotlin-blackjack/dpcks0509/78-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +232 -0
- package/lessons/woowacourse-kotlin-blackjack/dpcks0509/88-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +137 -0
- package/lessons/woowacourse-kotlin-blackjack/etama123/112-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +269 -0
- package/lessons/woowacourse-kotlin-blackjack/etama123/148-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +240 -0
- package/lessons/woowacourse-kotlin-blackjack/gaeun5744/102-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +146 -0
- package/lessons/woowacourse-kotlin-blackjack/gaeun5744/69-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +224 -0
- package/lessons/woowacourse-kotlin-blackjack/gahyunkim/118-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +397 -0
- package/lessons/woowacourse-kotlin-blackjack/gahyunkim/141-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +215 -0
- package/lessons/woowacourse-kotlin-blackjack/giovannijunseokim/106-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +395 -0
- package/lessons/woowacourse-kotlin-blackjack/giovannijunseokim/134-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +219 -0
- package/lessons/woowacourse-kotlin-blackjack/haeum808/62-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +230 -0
- package/lessons/woowacourse-kotlin-blackjack/haeum808/89-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +169 -0
- package/lessons/woowacourse-kotlin-blackjack/hwannow/110-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +221 -0
- package/lessons/woowacourse-kotlin-blackjack/hwannow/132-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +573 -0
- package/lessons/woowacourse-kotlin-blackjack/hxeyexn/103-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +188 -0
- package/lessons/woowacourse-kotlin-blackjack/hxeyexn/81-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +301 -0
- package/lessons/woowacourse-kotlin-blackjack/hyemdooly/21-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +613 -0
- package/lessons/woowacourse-kotlin-blackjack/hyemdooly/35-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +691 -0
- package/lessons/woowacourse-kotlin-blackjack/hyunji1203/13-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +206 -0
- package/lessons/woowacourse-kotlin-blackjack/ii2001/79-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +153 -0
- package/lessons/woowacourse-kotlin-blackjack/ii2001/85-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +318 -0
- package/lessons/woowacourse-kotlin-blackjack/ijh1298/128-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +250 -0
- package/lessons/woowacourse-kotlin-blackjack/ijh1298/135-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +269 -0
- package/lessons/woowacourse-kotlin-blackjack/inseonyun/28-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +346 -0
- package/lessons/woowacourse-kotlin-blackjack/inseonyun/49-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +360 -0
- package/lessons/woowacourse-kotlin-blackjack/ippnsj/30-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +152 -0
- package/lessons/woowacourse-kotlin-blackjack/ippnsj/42-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +213 -0
- package/lessons/woowacourse-kotlin-blackjack/jaeyeongjo/73-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +247 -0
- package/lessons/woowacourse-kotlin-blackjack/jaeyeongjo/87-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +900 -0
- package/lessons/woowacourse-kotlin-blackjack/jerry8282/125-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +248 -0
- package/lessons/woowacourse-kotlin-blackjack/jerry8282/151-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +243 -0
- package/lessons/woowacourse-kotlin-blackjack/jinuemong/63-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +281 -0
- package/lessons/woowacourse-kotlin-blackjack/jinuemong/92-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +283 -0
- package/lessons/woowacourse-kotlin-blackjack/jiyuneel/113-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +348 -0
- package/lessons/woowacourse-kotlin-blackjack/jiyuneel/140-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +265 -0
- package/lessons/woowacourse-kotlin-blackjack/junjange/61-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +270 -0
- package/lessons/woowacourse-kotlin-blackjack/junjange/93-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +465 -0
- package/lessons/woowacourse-kotlin-blackjack/junseo511/107-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +296 -0
- package/lessons/woowacourse-kotlin-blackjack/junseo511/145-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +316 -0
- package/lessons/woowacourse-kotlin-blackjack/ki960213/11-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +175 -0
- package/lessons/woowacourse-kotlin-blackjack/kimhm0728/72-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +458 -0
- package/lessons/woowacourse-kotlin-blackjack/kimhm0728/97-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +225 -0
- package/lessons/woowacourse-kotlin-blackjack/kkosang/68-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +221 -0
- package/lessons/woowacourse-kotlin-blackjack/kkosang/94-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +158 -0
- package/lessons/woowacourse-kotlin-blackjack/kmkim2689/65-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +252 -0
- package/lessons/woowacourse-kotlin-blackjack/kmkim2689/90-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +460 -0
- package/lessons/woowacourse-kotlin-blackjack/krrong/32-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +216 -0
- package/lessons/woowacourse-kotlin-blackjack/krrong/46-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +285 -0
- package/lessons/woowacourse-kotlin-blackjack/m6z1/122-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +177 -0
- package/lessons/woowacourse-kotlin-blackjack/m6z1/144-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +155 -0
- package/lessons/woowacourse-kotlin-blackjack/medAndro/130-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +683 -0
- package/lessons/woowacourse-kotlin-blackjack/medAndro/143-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +678 -0
- package/lessons/woowacourse-kotlin-blackjack/moondev03/114-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +262 -0
- package/lessons/woowacourse-kotlin-blackjack/moondev03/131-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +498 -0
- package/lessons/woowacourse-kotlin-blackjack/murjune/77-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +287 -0
- package/lessons/woowacourse-kotlin-blackjack/murjune/91-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +280 -0
- package/lessons/woowacourse-kotlin-blackjack/no1msh/31-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +250 -0
- package/lessons/woowacourse-kotlin-blackjack/otter66/24-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +302 -0
- package/lessons/woowacourse-kotlin-blackjack/otter66/58-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +391 -0
- package/lessons/woowacourse-kotlin-blackjack/oungsi2000/111-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +253 -0
- package/lessons/woowacourse-kotlin-blackjack/oungsi2000/136-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +540 -0
- package/lessons/woowacourse-kotlin-blackjack/parkjiminnnn/117-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +819 -0
- package/lessons/woowacourse-kotlin-blackjack/parkjiminnnn/139-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +683 -0
- package/lessons/woowacourse-kotlin-blackjack/pingu244/20-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +258 -0
- package/lessons/woowacourse-kotlin-blackjack/pingu244/41-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +171 -0
- package/lessons/woowacourse-kotlin-blackjack/re4rk/34-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +289 -0
- package/lessons/woowacourse-kotlin-blackjack/re4rk/8-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +297 -0
- package/lessons/woowacourse-kotlin-blackjack/rhkrwngud445/17-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +279 -0
- package/lessons/woowacourse-kotlin-blackjack/rhkrwngud445/50-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +145 -0
- package/lessons/woowacourse-kotlin-blackjack/rhthrhrl0/23-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +253 -0
- package/lessons/woowacourse-kotlin-blackjack/rhthrhrl0/39-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +238 -0
- package/lessons/woowacourse-kotlin-blackjack/rosemin928/129-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +726 -0
- package/lessons/woowacourse-kotlin-blackjack/rosemin928/138-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +845 -0
- package/lessons/woowacourse-kotlin-blackjack/s6m1n/67-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +220 -0
- package/lessons/woowacourse-kotlin-blackjack/s6m1n/99-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +229 -0
- package/lessons/woowacourse-kotlin-blackjack/s9hn/10-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +284 -0
- package/lessons/woowacourse-kotlin-blackjack/sh1mj1/75-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +224 -0
- package/lessons/woowacourse-kotlin-blackjack/songpink/74-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +238 -0
- package/lessons/woowacourse-kotlin-blackjack/songpink/95-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +216 -0
- package/lessons/woowacourse-kotlin-blackjack/sujin9/15-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +132 -0
- package/lessons/woowacourse-kotlin-blackjack/sujin9/47-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +265 -0
- package/lessons/woowacourse-kotlin-blackjack/tmdgh1592/29-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +305 -0
- package/lessons/woowacourse-kotlin-blackjack/tmdgh1592/51-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +278 -0
- package/lessons/woowacourse-kotlin-blackjack/tobae-time/115-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +305 -0
- package/lessons/woowacourse-kotlin-blackjack/tobae-time/154-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +298 -0
- package/lessons/woowacourse-kotlin-blackjack/whk06061/25-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +235 -0
- package/lessons/woowacourse-kotlin-blackjack/whk06061/53-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +130 -0
- package/lessons/woowacourse-kotlin-blackjack/wondroid-world/124-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +486 -0
- package/lessons/woowacourse-kotlin-blackjack/wondroid-world/152-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +482 -0
- package/lessons/woowacourse-kotlin-blackjack/yrsel/120-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +194 -0
- package/lessons/woowacourse-kotlin-blackjack/yrsel/146-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +444 -0
- package/lessons/woowacourse-kotlin-lotto/2chang5/27-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +155 -0
- package/lessons/woowacourse-kotlin-lotto/2chang5/52-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +187 -0
- package/lessons/woowacourse-kotlin-lotto/Choisehyeon/14-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +206 -0
- package/lessons/woowacourse-kotlin-lotto/Choisehyeon/47-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +119 -0
- package/lessons/woowacourse-kotlin-lotto/DYGames/2-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +83 -0
- package/lessons/woowacourse-kotlin-lotto/DYGames/34-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +88 -0
- package/lessons/woowacourse-kotlin-lotto/EmilyCh0/12-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +107 -0
- package/lessons/woowacourse-kotlin-lotto/EmilyCh0/40-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +135 -0
- package/lessons/woowacourse-kotlin-lotto/HANDOVER.md +217 -0
- package/lessons/woowacourse-kotlin-lotto/HamBeomJoon/121-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +66 -0
- package/lessons/woowacourse-kotlin-lotto/HamBeomJoon/139-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +75 -0
- package/lessons/woowacourse-kotlin-lotto/Hevton/76-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
- package/lessons/woowacourse-kotlin-lotto/Hevton/92-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +122 -0
- package/lessons/woowacourse-kotlin-lotto/Hogu59/100-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +110 -0
- package/lessons/woowacourse-kotlin-lotto/Hogu59/68-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +84 -0
- package/lessons/woowacourse-kotlin-lotto/JoYehyun99/60-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +176 -0
- package/lessons/woowacourse-kotlin-lotto/JoYehyun99/96-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +71 -0
- package/lessons/woowacourse-kotlin-lotto/Junyoung-WON/61-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
- package/lessons/woowacourse-kotlin-lotto/Junyoung-WON/93-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +16 -0
- package/lessons/woowacourse-kotlin-lotto/Leeyerin0210/109-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +57 -0
- package/lessons/woowacourse-kotlin-lotto/Leeyerin0210/135-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +115 -0
- package/lessons/woowacourse-kotlin-lotto/PROGRESS.md +160 -0
- package/lessons/woowacourse-kotlin-lotto/README.md +77 -0
- package/lessons/woowacourse-kotlin-lotto/RightHennessy/32-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +178 -0
- package/lessons/woowacourse-kotlin-lotto/RightHennessy/5-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
- package/lessons/woowacourse-kotlin-lotto/SUMMARY.md +369 -0
- package/lessons/woowacourse-kotlin-lotto/SeongHoonC/25-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +129 -0
- package/lessons/woowacourse-kotlin-lotto/SeongHoonC/37-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +27 -0
- package/lessons/woowacourse-kotlin-lotto/Yunseok-Nam/72-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +137 -0
- package/lessons/woowacourse-kotlin-lotto/Yunseok-Nam/86-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +17 -0
- package/lessons/woowacourse-kotlin-lotto/aprilgom/102-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +62 -0
- package/lessons/woowacourse-kotlin-lotto/aprilgom/64-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +146 -0
- package/lessons/woowacourse-kotlin-lotto/boogi-woogi/11-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +26 -0
- package/lessons/woowacourse-kotlin-lotto/boogi-woogi/29-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +26 -0
- package/lessons/woowacourse-kotlin-lotto/briandr97/26-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +52 -0
- package/lessons/woowacourse-kotlin-lotto/briandr97/51-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +123 -0
- package/lessons/woowacourse-kotlin-lotto/chaehyuns/71-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +115 -0
- package/lessons/woowacourse-kotlin-lotto/chaehyuns/97-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +107 -0
- package/lessons/woowacourse-kotlin-lotto/chanho0908/124-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +51 -0
- package/lessons/woowacourse-kotlin-lotto/chanho0908/129-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
- package/lessons/woowacourse-kotlin-lotto/chws0508/24-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +117 -0
- package/lessons/woowacourse-kotlin-lotto/chws0508/50-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +167 -0
- package/lessons/woowacourse-kotlin-lotto/cucumber99/116-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +155 -0
- package/lessons/woowacourse-kotlin-lotto/cucumber99/147-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +223 -0
- package/lessons/woowacourse-kotlin-lotto/devfeijoa/125-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +68 -0
- package/lessons/woowacourse-kotlin-lotto/devfeijoa/153-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +107 -0
- package/lessons/woowacourse-kotlin-lotto/doabletuple/119-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +157 -0
- package/lessons/woowacourse-kotlin-lotto/doabletuple/138-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +77 -0
- package/lessons/woowacourse-kotlin-lotto/donghyun81/111-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +67 -0
- package/lessons/woowacourse-kotlin-lotto/donghyun81/152-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +124 -0
- package/lessons/woowacourse-kotlin-lotto/dpcks0509/80-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +141 -0
- package/lessons/woowacourse-kotlin-lotto/dpcks0509/87-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +134 -0
- package/lessons/woowacourse-kotlin-lotto/etama123/112-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +170 -0
- package/lessons/woowacourse-kotlin-lotto/etama123/148-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +183 -0
- package/lessons/woowacourse-kotlin-lotto/gaeun5744/101-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
- package/lessons/woowacourse-kotlin-lotto/gaeun5744/78-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +158 -0
- package/lessons/woowacourse-kotlin-lotto/gahyunkim/107-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +83 -0
- package/lessons/woowacourse-kotlin-lotto/gahyunkim/136-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +51 -0
- package/lessons/woowacourse-kotlin-lotto/giovannijunseokim/106-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +171 -0
- package/lessons/woowacourse-kotlin-lotto/giovannijunseokim/137-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +111 -0
- package/lessons/woowacourse-kotlin-lotto/haeum808/67-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +52 -0
- package/lessons/woowacourse-kotlin-lotto/haeum808/95-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +97 -0
- package/lessons/woowacourse-kotlin-lotto/hwannow/113-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +235 -0
- package/lessons/woowacourse-kotlin-lotto/hwannow/132-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
- package/lessons/woowacourse-kotlin-lotto/hxeyexn/77-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +141 -0
- package/lessons/woowacourse-kotlin-lotto/hxeyexn/98-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +162 -0
- package/lessons/woowacourse-kotlin-lotto/hyemdooly/17-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +19 -0
- package/lessons/woowacourse-kotlin-lotto/hyemdooly/28-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +23 -0
- package/lessons/woowacourse-kotlin-lotto/hyunji1203/15-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +171 -0
- package/lessons/woowacourse-kotlin-lotto/hyunji1203/48-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +150 -0
- package/lessons/woowacourse-kotlin-lotto/ii2001/62-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +104 -0
- package/lessons/woowacourse-kotlin-lotto/ii2001/88-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +20 -0
- package/lessons/woowacourse-kotlin-lotto/ijh1298/122-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +179 -0
- package/lessons/woowacourse-kotlin-lotto/ijh1298/133-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +153 -0
- package/lessons/woowacourse-kotlin-lotto/inseonyun/3-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +222 -0
- package/lessons/woowacourse-kotlin-lotto/inseonyun/49-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +166 -0
- package/lessons/woowacourse-kotlin-lotto/ippnsj/16-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +154 -0
- package/lessons/woowacourse-kotlin-lotto/ippnsj/55-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +145 -0
- package/lessons/woowacourse-kotlin-lotto/jaeyeongjo/59-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +68 -0
- package/lessons/woowacourse-kotlin-lotto/jaeyeongjo/83-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +53 -0
- package/lessons/woowacourse-kotlin-lotto/jerry8282/115-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +97 -0
- package/lessons/woowacourse-kotlin-lotto/jerry8282/134-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +145 -0
- package/lessons/woowacourse-kotlin-lotto/jinuemong/63-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +144 -0
- package/lessons/woowacourse-kotlin-lotto/jinuemong/89-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +148 -0
- package/lessons/woowacourse-kotlin-lotto/jiyuneel/128-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +52 -0
- package/lessons/woowacourse-kotlin-lotto/jiyuneel/144-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
- package/lessons/woowacourse-kotlin-lotto/junjange/58-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +148 -0
- package/lessons/woowacourse-kotlin-lotto/junjange/81-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +178 -0
- package/lessons/woowacourse-kotlin-lotto/junseo511/120-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +153 -0
- package/lessons/woowacourse-kotlin-lotto/junseo511/131-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +188 -0
- package/lessons/woowacourse-kotlin-lotto/ki960213/43-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +24 -0
- package/lessons/woowacourse-kotlin-lotto/ki960213/8-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +159 -0
- package/lessons/woowacourse-kotlin-lotto/kimhm0728/74-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +50 -0
- package/lessons/woowacourse-kotlin-lotto/kimhm0728/94-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +176 -0
- package/lessons/woowacourse-kotlin-lotto/kkosang/85-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +145 -0
- package/lessons/woowacourse-kotlin-lotto/kmkim2689/70-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +97 -0
- package/lessons/woowacourse-kotlin-lotto/kmkim2689/82-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +157 -0
- package/lessons/woowacourse-kotlin-lotto/krrong/19-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +161 -0
- package/lessons/woowacourse-kotlin-lotto/krrong/41-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +73 -0
- package/lessons/woowacourse-kotlin-lotto/m6z1/105-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +67 -0
- package/lessons/woowacourse-kotlin-lotto/m6z1/151-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +104 -0
- package/lessons/woowacourse-kotlin-lotto/medAndro/127-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +186 -0
- package/lessons/woowacourse-kotlin-lotto/medAndro/130-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +132 -0
- package/lessons/woowacourse-kotlin-lotto/moondev03/110-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +66 -0
- package/lessons/woowacourse-kotlin-lotto/moondev03/141-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +155 -0
- package/lessons/woowacourse-kotlin-lotto/murjune/69-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
- package/lessons/woowacourse-kotlin-lotto/murjune/90-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +177 -0
- package/lessons/woowacourse-kotlin-lotto/no1msh/20-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +69 -0
- package/lessons/woowacourse-kotlin-lotto/no1msh/46-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
- package/lessons/woowacourse-kotlin-lotto/otter66/13-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +178 -0
- package/lessons/woowacourse-kotlin-lotto/otter66/53-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +160 -0
- package/lessons/woowacourse-kotlin-lotto/oungsi2000/126-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +71 -0
- package/lessons/woowacourse-kotlin-lotto/oungsi2000/149-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +56 -0
- package/lessons/woowacourse-kotlin-lotto/parkjiminnnn/117-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +129 -0
- package/lessons/woowacourse-kotlin-lotto/parkjiminnnn/146-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +173 -0
- package/lessons/woowacourse-kotlin-lotto/pingu244/33-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
- package/lessons/woowacourse-kotlin-lotto/pingu244/54-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +30 -0
- package/lessons/woowacourse-kotlin-lotto/pingu244/7-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +19 -0
- package/lessons/woowacourse-kotlin-lotto/re4rk/31-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
- package/lessons/woowacourse-kotlin-lotto/re4rk/4-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +66 -0
- package/lessons/woowacourse-kotlin-lotto/rhkrwngud445/23-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +26 -0
- package/lessons/woowacourse-kotlin-lotto/rhkrwngud445/38-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +129 -0
- package/lessons/woowacourse-kotlin-lotto/rhthrhrl0/21-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +146 -0
- package/lessons/woowacourse-kotlin-lotto/rhthrhrl0/36-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +150 -0
- package/lessons/woowacourse-kotlin-lotto/rosemin928/123-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +179 -0
- package/lessons/woowacourse-kotlin-lotto/rosemin928/140-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +126 -0
- package/lessons/woowacourse-kotlin-lotto/s6m1n/103-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +119 -0
- package/lessons/woowacourse-kotlin-lotto/s6m1n/66-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +118 -0
- package/lessons/woowacourse-kotlin-lotto/s9hn/18-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +112 -0
- package/lessons/woowacourse-kotlin-lotto/sh1mj1/75-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +104 -0
- package/lessons/woowacourse-kotlin-lotto/sh1mj1/91-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +140 -0
- package/lessons/woowacourse-kotlin-lotto/songpink/65-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +96 -0
- package/lessons/woowacourse-kotlin-lotto/songpink/99-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +64 -0
- package/lessons/woowacourse-kotlin-lotto/sujin9/10-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +20 -0
- package/lessons/woowacourse-kotlin-lotto/sujin9/35-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +124 -0
- package/lessons/woowacourse-kotlin-lotto/tmdgh1592/22-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +30 -0
- package/lessons/woowacourse-kotlin-lotto/tmdgh1592/30-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +20 -0
- package/lessons/woowacourse-kotlin-lotto/tobae-time/114-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +158 -0
- package/lessons/woowacourse-kotlin-lotto/tobae-time/145-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +120 -0
- package/lessons/woowacourse-kotlin-lotto/whk06061/42-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
- package/lessons/woowacourse-kotlin-lotto/whk06061/9-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +89 -0
- package/lessons/woowacourse-kotlin-lotto/wondroid-world/118-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +100 -0
- package/lessons/woowacourse-kotlin-lotto/wondroid-world/150-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +142 -0
- package/lessons/woowacourse-kotlin-lotto/yrsel/108-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +124 -0
- package/lessons/woowacourse-kotlin-lotto/yrsel/143-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +108 -0
- package/lessons/woowacourse-racingcar/2chang5/33-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
- package/lessons/woowacourse-racingcar/2chang5/75-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/CFalws/85-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
- package/lessons/woowacourse-racingcar/Choisehyeon/46-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +61 -0
- package/lessons/woowacourse-racingcar/DYGames/49-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +62 -0
- package/lessons/woowacourse-racingcar/EmilyCh0/40-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +64 -0
- package/lessons/woowacourse-racingcar/EmilyCh0/57-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/HamBeomJoon/137-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/HamBeomJoon/170-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/Hevton/106-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/Hevton/118-/353/246/254/355/214/251/355/204/260/353/247/201.md +51 -0
- package/lessons/woowacourse-racingcar/Hogu59/108-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
- package/lessons/woowacourse-racingcar/Hogu59/125-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
- package/lessons/woowacourse-racingcar/JoYehyun99/111-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/JoYehyun99/88-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +45 -0
- package/lessons/woowacourse-racingcar/Junyoung-WON/127-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/Junyoung-WON/90-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/Leeyerin0210/133-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/Leeyerin0210/159-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/PROGRESS.md +94 -0
- package/lessons/woowacourse-racingcar/README.md +69 -0
- package/lessons/woowacourse-racingcar/RightHennessy/51-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/RightHennessy/58-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/RunaNam/81-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +44 -0
- package/lessons/woowacourse-racingcar/SUMMARY.md +339 -0
- package/lessons/woowacourse-racingcar/SeongHoonC/37-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/SeongHoonC/66-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
- package/lessons/woowacourse-racingcar/Songusika/84-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
- package/lessons/woowacourse-racingcar/Yunseok-Nam/114-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +43 -0
- package/lessons/woowacourse-racingcar/Yunseok-Nam/96-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/aprilgom/130-/353/246/254/355/214/251/355/204/260/353/247/201.md +52 -0
- package/lessons/woowacourse-racingcar/aprilgom/97-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/awesomeo184/23-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
- package/lessons/woowacourse-racingcar/boogi-woogi/35-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +62 -0
- package/lessons/woowacourse-racingcar/boogi-woogi/59-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/briandr97/54-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/chaehyuns/131-/353/246/254/355/214/251/355/204/260/353/247/201.md +49 -0
- package/lessons/woowacourse-racingcar/chaehyuns/99-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
- package/lessons/woowacourse-racingcar/chanho0908/147-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/chanho0908/160-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/chws0508/45-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +61 -0
- package/lessons/woowacourse-racingcar/chws0508/73-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +46 -0
- package/lessons/woowacourse-racingcar/cucumber99/132-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/cucumber99/177-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/devfeijoa/146-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/doabletuple/149-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/doabletuple/175-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/donghyun81/154-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
- package/lessons/woowacourse-racingcar/dpcks0509/103-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
- package/lessons/woowacourse-racingcar/dpcks0509/112-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
- package/lessons/woowacourse-racingcar/drunkenhw/82-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
- package/lessons/woowacourse-racingcar/etama123/145-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
- package/lessons/woowacourse-racingcar/gaeun5744/124-/353/246/254/355/214/251/355/204/260/353/247/201.md +53 -0
- package/lessons/woowacourse-racingcar/gaeun5744/93-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
- package/lessons/woowacourse-racingcar/gahyunkim/134-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/gahyunkim/164-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/giovannijunseokim/140-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/haeum808/101-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/haeum808/129-/353/246/254/355/214/251/355/204/260/353/247/201.md +46 -0
- package/lessons/woowacourse-racingcar/hwannow/141-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
- package/lessons/woowacourse-racingcar/hwannow/157-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +45 -0
- package/lessons/woowacourse-racingcar/hxeyexn/109-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +61 -0
- package/lessons/woowacourse-racingcar/hxeyexn/128-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
- package/lessons/woowacourse-racingcar/hyemdooly/50-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
- package/lessons/woowacourse-racingcar/hyemdooly/68-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/hyunji1203/29-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/hyunji1203/60-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/ii2001/102-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +42 -0
- package/lessons/woowacourse-racingcar/ii2001/122-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/ijh1298/144-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/injoon2019/24-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
- package/lessons/woowacourse-racingcar/inseonyun/44-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
- package/lessons/woowacourse-racingcar/inseonyun/76-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/ippnsj/36-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/ippnsj/67-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/jaeyeongjo/110-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +39 -0
- package/lessons/woowacourse-racingcar/jaeyeongjo/89-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +46 -0
- package/lessons/woowacourse-racingcar/jinuemong/104-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/jinuemong/117-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +42 -0
- package/lessons/woowacourse-racingcar/jiyuneel/142-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
- package/lessons/woowacourse-racingcar/junjange/113-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +41 -0
- package/lessons/woowacourse-racingcar/junjange/87-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +39 -0
- package/lessons/woowacourse-racingcar/junseo511/148-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
- package/lessons/woowacourse-racingcar/junseo511/165-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +51 -0
- package/lessons/woowacourse-racingcar/ki960213/32-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/ki960213/63-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +51 -0
- package/lessons/woowacourse-racingcar/kimhm0728/100-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
- package/lessons/woowacourse-racingcar/kimhm0728/116-/353/246/254/355/214/251/355/204/260/353/247/201.md +54 -0
- package/lessons/woowacourse-racingcar/kkosang/105-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/kkosang/126-/353/246/254/355/214/251/355/204/260/353/247/201.md +53 -0
- package/lessons/woowacourse-racingcar/kmkim2689/123-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/kmkim2689/92-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/krrong/34-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +63 -0
- package/lessons/woowacourse-racingcar/m6z1/150-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/m6z1/156-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +40 -0
- package/lessons/woowacourse-racingcar/medAndro/153-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/moondev03/135-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/moondev03/161-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
- package/lessons/woowacourse-racingcar/murjune/121-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/murjune/95-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/no1msh/43-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/no1msh/69-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
- package/lessons/woowacourse-racingcar/otter66/48-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/otter66/77-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
- package/lessons/woowacourse-racingcar/oungsi2000/152-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
- package/lessons/woowacourse-racingcar/oungsi2000/187-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/parkjiminnnn/143-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
- package/lessons/woowacourse-racingcar/parkjiminnnn/158-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/pingu244/38-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
- package/lessons/woowacourse-racingcar/pingu244/62-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
- package/lessons/woowacourse-racingcar/re4rk/28-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
- package/lessons/woowacourse-racingcar/re4rk/55-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/rhkrwngud445/42-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/rhkrwngud445/74-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +47 -0
- package/lessons/woowacourse-racingcar/rhthrhrl0/31-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +43 -0
- package/lessons/woowacourse-racingcar/rosemin928/138-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/rosemin928/171-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +38 -0
- package/lessons/woowacourse-racingcar/s6m1n/120-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/s6m1n/91-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +62 -0
- package/lessons/woowacourse-racingcar/s9hn/53-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +44 -0
- package/lessons/woowacourse-racingcar/s9hn/78-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +43 -0
- package/lessons/woowacourse-racingcar/sh1mj1/107-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/sh1mj1/115-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +61 -0
- package/lessons/woowacourse-racingcar/songpink/119-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +51 -0
- package/lessons/woowacourse-racingcar/songpink/98-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/sujin9/52-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
- package/lessons/woowacourse-racingcar/sujin9/61-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +47 -0
- package/lessons/woowacourse-racingcar/tmdgh1592/47-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/tmdgh1592/64-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/tobae-time/151-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +51 -0
- package/lessons/woowacourse-racingcar/tobae-time/167-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +43 -0
- package/lessons/woowacourse-racingcar/whk06061/41-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
- package/lessons/woowacourse-racingcar/wondroid-world/136-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/wondroid-world/166-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/yrsel/139-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/yujamint/83-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
- package/package.json +46 -0
- package/skills/oh-my-oop/SKILL.md +39 -0
package/MCP_STRUCTURE.md
ADDED
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# MCP 소스 구조 가이드 (oh-my-oop)
|
|
2
|
+
|
|
3
|
+
`src/oop/commands.ts`가 MCP/CLI 공통 코어입니다. `src/cli.ts`는 JSON CLI, `src/application/discovery.ts`는 OOP 명령 스키마 발견을 담당합니다. 아키텍처/실행기/JEV 모듈은 분리했습니다. 현재 제품 경계는 `SCOPE.md`를 읽으세요.
|
|
4
|
+
|
|
5
|
+
> **목적:** 다음 세션이 빠르게 MCP 룰/도구 확장 작업에 들어갈 수 있도록.
|
|
6
|
+
> **마지막 정찰:** 2026-05-23 (lotto 141 PR 분석 직후, 룰 확장 작업 진입 전)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. 디렉토리 구조
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
src/
|
|
14
|
+
├── index.ts ← entry point (stdio transport)
|
|
15
|
+
├── server.ts ← McpServer 생성 + 도구/리소스/프롬프트 등록
|
|
16
|
+
├── config.ts ← .oop/ 워크스페이스 위치 해석
|
|
17
|
+
│
|
|
18
|
+
├── domain/ ← 도메인 모델 (CRC 카드, 유스케이스, 협력)
|
|
19
|
+
│ ├── ids.ts
|
|
20
|
+
│ ├── model.ts ← CrcCard, UseCase, Collaboration, Design 타입
|
|
21
|
+
│ ├── schemas.ts ← Zod 스키마 (TradeoffQuestion 등)
|
|
22
|
+
│ └── stereotypes.ts ← Wirfs-Brock 5종 + fits/misfits 힌트
|
|
23
|
+
│
|
|
24
|
+
├── io/ ← 파일 시스템 영속화 (.oop/ markdown frontmatter)
|
|
25
|
+
│ ├── classStore.ts ← CrcCard CRUD
|
|
26
|
+
│ ├── useCaseStore.ts
|
|
27
|
+
│ ├── collaborationStore.ts
|
|
28
|
+
│ ├── designIndex.ts ← .oop/index.json 관리
|
|
29
|
+
│ ├── design.ts ← loadDesign() — 모든 카드/유스케이스/협력 통합 로딩
|
|
30
|
+
│ ├── frontmatter.ts ← gray-matter wrapper, nowIso()
|
|
31
|
+
│ ├── history.ts ← Before/After 비교용 스냅샷
|
|
32
|
+
│ └── workspace.ts ← .oop/ 부트스트랩 (oop_init)
|
|
33
|
+
│
|
|
34
|
+
├── tools/ ← MCP 도구 등록 (각 파일 = 1~2개 도구)
|
|
35
|
+
│ ├── index.ts ← registerAllTools() 진입점
|
|
36
|
+
│ ├── init.ts ← oop_init
|
|
37
|
+
│ ├── useCases.ts ← oop_use_case_add, oop_use_case_list
|
|
38
|
+
│ ├── responsibilities.ts ← oop_propose_responsibilities, oop_assign_responsibility
|
|
39
|
+
│ ├── classes.ts ← oop_class_upsert, oop_class_list
|
|
40
|
+
│ ├── collaborations.ts ← oop_collaboration_define
|
|
41
|
+
│ ├── alternatives.ts ← oop_propose_alternatives
|
|
42
|
+
│ ├── diagram.ts ← oop_diagram_generate (Mermaid)
|
|
43
|
+
│ ├── compare.ts ← oop_design_compare (Before/After)
|
|
44
|
+
│ ├── validate.ts ← oop_design_validate
|
|
45
|
+
│ └── state.ts ← oop_state_read
|
|
46
|
+
│
|
|
47
|
+
├── validate/ ← 검증 룰 (각 파일 = 1개 룰)
|
|
48
|
+
│ ├── rules.ts ← ALL_RULE_IDS, validateDesign() dispatch
|
|
49
|
+
│ ├── findings.ts ← Finding/Remedy/Severity 타입 + assertHasMultipleRemedies
|
|
50
|
+
│ ├── godObject.ts ← 책임/협력자 임계치 초과
|
|
51
|
+
│ ├── cohesion.ts ← low-cohesion
|
|
52
|
+
│ ├── coupling.ts ← too-many-collaborators
|
|
53
|
+
│ ├── testability.ts ← non-newable, side-effect-in-holder, mocking-pressure
|
|
54
|
+
│ ├── cycle.ts ← 순환 의존
|
|
55
|
+
│ ├── vagueName.ts ← Validator/Manager/Helper 등 god-name (racingcar 인용)
|
|
56
|
+
│ ├── validationLocation.ts ← 검증 분산 (UI 형식 vs 입력 정책 vs 도메인 invariant 3분류)
|
|
57
|
+
│ ├── dependencyDirection.ts ← Domain → UI 역방향 의존 (BeokBeok 인용)
|
|
58
|
+
│ ├── dataDuplication.ts ← knowing 책임 중복
|
|
59
|
+
│ └── functionNotObject.ts ← 함수형 클래스 (= 정적 유틸)
|
|
60
|
+
│
|
|
61
|
+
├── tradeoff/ ← N개 대안 + 트레이드오프 생성
|
|
62
|
+
│ ├── engine.ts ← generateAlternatives() + attachReflectionQuestions()
|
|
63
|
+
│ ├── templates.ts ← expansion_prompt 텍스트
|
|
64
|
+
│ └── heuristics/
|
|
65
|
+
│ ├── classSplit.ts
|
|
66
|
+
│ ├── collaborationShape.ts
|
|
67
|
+
│ ├── responsibilitySplit.ts ← by-noun/by-verb/by-stereotype/single-class
|
|
68
|
+
│ └── stereotypeChoice.ts
|
|
69
|
+
│
|
|
70
|
+
├── prompts/ ← MCP 프롬프트 (대화 시드)
|
|
71
|
+
│ ├── index.ts
|
|
72
|
+
│ ├── rddIntro.ts ← /rdd-workshop-intro
|
|
73
|
+
│ ├── discovery.ts
|
|
74
|
+
│ └── review.ts ← /design-review-cho-younghos-lens
|
|
75
|
+
│
|
|
76
|
+
├── render/
|
|
77
|
+
│ ├── mermaid.ts ← Mermaid classDiagram 생성
|
|
78
|
+
│ ├── diff.ts
|
|
79
|
+
│ └── sideBySide.ts
|
|
80
|
+
│
|
|
81
|
+
├── resources/
|
|
82
|
+
│ └── index.ts
|
|
83
|
+
│
|
|
84
|
+
└── util/
|
|
85
|
+
├── log.ts
|
|
86
|
+
└── mcp.ts ← jsonResult, errorResult 헬퍼
|
|
87
|
+
|
|
88
|
+
test/
|
|
89
|
+
├── unit/
|
|
90
|
+
├── integration/
|
|
91
|
+
├── kotlin-racingcar/ ← racingcar 미션 케이스
|
|
92
|
+
└── fixtures/
|
|
93
|
+
|
|
94
|
+
lessons/ ← PR 분석 데이터셋 (정적 자산)
|
|
95
|
+
├── STYLE_GUIDE.md
|
|
96
|
+
├── woowacourse-kotlin-lotto/ ← 141 PR 분석 (2026-05-22 완료)
|
|
97
|
+
└── woowacourse-racingcar/ ← 이전 분석
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 2. 핵심 계약 (반드시 지킬 것)
|
|
103
|
+
|
|
104
|
+
### 2-1. `Finding`은 항상 ≥2개 `remedies`
|
|
105
|
+
```ts
|
|
106
|
+
// validate/findings.ts
|
|
107
|
+
assertHasMultipleRemedies(finding) // throw if < 2 remedies
|
|
108
|
+
```
|
|
109
|
+
→ 모든 새 룰은 *최소 2개 대안 remedy + pros/cons*를 자동 첨부해야 함. 단일 권고 금지 (조영호 철학).
|
|
110
|
+
|
|
111
|
+
### 2-2. 모든 도구는 jsonResult/errorResult 사용
|
|
112
|
+
```ts
|
|
113
|
+
// util/mcp.ts
|
|
114
|
+
return jsonResult({ ... });
|
|
115
|
+
return errorResult((e as Error).message);
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 2-3. 도구 description은 *[USE WHEN] ... + 호출 시점* 명시
|
|
119
|
+
- validate.ts 참고: "'리뷰'/'검토'/'평가'해달라거나, 'god object 같지 않아?'를 물을 때"
|
|
120
|
+
|
|
121
|
+
### 2-4. `AlternativeSeed`는 항상 `reflection_questions` 첨부
|
|
122
|
+
- `tradeoff/engine.ts::attachReflectionQuestions()` 가 자동 부착
|
|
123
|
+
- `testability_justification` + `expansion_pressure` 2개 강제
|
|
124
|
+
|
|
125
|
+
### 2-5. 도메인 종속 룰/도구 금지 (general-OOP 원칙)
|
|
126
|
+
|
|
127
|
+
`src/` 의 모든 룰, tradeoff heuristic, 도구, prompt, stereotype 은 **어떤 도메인에도 적용 가능**한 일반 OOP 패턴이어야 한다. 도메인 종속 어휘(블랙잭의 Ace, 로또의 Bonus, 자동차 경주의 Move 등)는 *룰 시그니처/이름/판정 로직*에 등장하지 않는다.
|
|
128
|
+
|
|
129
|
+
**허용**: `lessons/<mission>/` 의 PR 인용을 evidence/remedy 에 첨부. `vagueName.ts` 가 racingcar `@vagabond95` 인용한 패턴과 동일. 도메인 어휘는 *근거*로만 등장한다.
|
|
130
|
+
|
|
131
|
+
**금지 예시**:
|
|
132
|
+
- `ace-bonus-while-anti-pattern` 룰 (블랙잭 Ace 한정)
|
|
133
|
+
- `blackjack-rule-fidelity` 룰 (블랙잭 룰 명세)
|
|
134
|
+
- `lotto-bonus-number-locus` 룰 (로또 한정)
|
|
135
|
+
- `/blackjack-phase2-entry` prompt (블랙잭 단계명)
|
|
136
|
+
|
|
137
|
+
**허용 예시**:
|
|
138
|
+
- `value-arithmetic-invariant-conflict` 룰 (값 객체 산술 일반)
|
|
139
|
+
- `dual-purpose-knowing` 룰 (한 데이터 두 책임 일반)
|
|
140
|
+
- `/phase-pressure-test` prompt (단계 진화 일반)
|
|
141
|
+
- 위 룰의 evidence 에 *"블랙잭 BettingMoney → Profit 분리"* PR 인용
|
|
142
|
+
|
|
143
|
+
**판단 기준**: *룰 이름·시그니처·판정 로직에서 그 도메인 어휘를 제거해도 일반 OOP 안티패턴인가?* 그렇다면 일반. 아니면 도메인 종속이므로 거부.
|
|
144
|
+
|
|
145
|
+
**Stereotype 5종 동결**: 현재 5종 (Knowing/Doing/Controller/Coordinator/Structurer) + Interfacer 는 *추상화 정점*이다. 도메인 stereotype (Participant/Dealer/Judge 등) 은 추가하지 않고, 도메인 역할은 카드 `metadata.role`(자유 텍스트)로 표현한다. fits/misfits 일관성 유지 비용과 학생 분류 부담이 폭증하기 때문.
|
|
146
|
+
|
|
147
|
+
**룰 폭증 회피 동반 원칙**: 신규 룰 1개 추가 = *기존 룰 인용 보강 ≥2개* 동반. lessons 코퍼스의 발견은 *기존 룰 강화로 흡수 가능한지* 먼저 검토하고, 흡수 불가일 때만 신규 룰.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## 3. 신규 룰 추가 방법 (체크리스트)
|
|
152
|
+
|
|
153
|
+
1. `src/validate/<ruleName>.ts` 생성 (godObject.ts 패턴 그대로)
|
|
154
|
+
2. `check<RuleName>(design: Design, ...): Finding[]` 함수 export
|
|
155
|
+
3. `validate/rules.ts`:
|
|
156
|
+
- import 추가
|
|
157
|
+
- `ALL_RULE_IDS` 배열에 ID 추가
|
|
158
|
+
- `validateDesign()`의 if 체인에 호출 추가
|
|
159
|
+
- 임계치 필요하면 `DEFAULT_THRESHOLDS`에 추가
|
|
160
|
+
4. 모든 finding에 `assertHasMultipleRemedies()` 감싸기 (≥2 remedies 강제)
|
|
161
|
+
5. `test/unit/validate.rules.test.ts`에 테스트 케이스 *추가* (모듈당 1 파일, 평면 구조 — 디렉토리 분리 X). 케이스 패턴: positive 1개 + suppression(skip) negative 2~3개. 마지막 `all rules pass the >=2 remedies contract` 케이스가 신규 룰도 자동 검증.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 4. 기존 18개 룰 ↔ 코퍼스 안티패턴 매핑
|
|
166
|
+
|
|
167
|
+
이미 lotto/racingcar/blackjack 에서 본 안티패턴 중 **이미 룰로 존재하는 것**:
|
|
168
|
+
|
|
169
|
+
| 안티패턴 | 룰 ID | 비고 |
|
|
170
|
+
|---|---|---|
|
|
171
|
+
| Validator/Verifier/Picker/Distributor/Judge god-name | `vague-class-name` | racingcar 추출. blackjack 으로 가상 객체 사전 +14 + laco-dev/ghojeong 인용 보강 |
|
|
172
|
+
| Controller god-object / Dealer 이중 역할 | `god-object` | 책임/협력자 임계치 + blackjack ghojeong "사람 한 명 더 필요한가" 인용 |
|
|
173
|
+
| 검증 분산 (View + Domain) | `validation-misplacement` | UI 형식/입력 정책/도메인 invariant 3분류 |
|
|
174
|
+
| Domain → View 의존 / enum UI value 침투 | `dependency-direction` | BeokBeok + blackjack laco-dev "Rank 출력 = UI 관심사" 인용 |
|
|
175
|
+
| toString 도메인 침투 | `dependency-direction` 부분 + `mixed-stereotype` | UI 어휘 + InformationHolder misfits 힌트 |
|
|
176
|
+
| Tell-Don't-Ask 위반 / 외부 비교자 (Judge.judge) | `feature-envy` | knowing 점수 기반 + blackjack laco-dev/BeokBeok 메시지 어휘 인용 |
|
|
177
|
+
| 양방향/순환 의존 | `cycle` | |
|
|
178
|
+
| 단일 위임만 하는 객체 | `function-not-object` 일부 | 좀 다름. 추가 룰 필요할 수 있음 |
|
|
179
|
+
| 모호한 책임 혼합 | `mixed-stereotype` | knowing+doing+coordinating 모두 |
|
|
180
|
+
| 미사용 클래스 | `orphan-class` | |
|
|
181
|
+
| 데이터 중복 | `data-source-duplication` | knowing 토큰 중복 |
|
|
182
|
+
| 빈 InformationHolder + 외부 mutation | `empty-object-external-fill` | lotto malibinYun 인용 |
|
|
183
|
+
| 행위 없는 컬렉션 wrapper | `collection-wrapper-without-behavior` | lotto krrong 인용 |
|
|
184
|
+
| 값 wrapper invariant 부재 / BettingMoney 산술 invariant 충돌 | `primitive-wrapper-without-invariant` | lotto junjange + blackjack malibinYun "BettingMoney → Profit" 인용 |
|
|
185
|
+
| 전략 그룹 knowing 비대칭 | `strategy-default-param-pollution` | lotto krrong 인용 |
|
|
186
|
+
| doing 과도 분해 | `function-decomposition-excess` | lotto 일반 가르침 |
|
|
187
|
+
| 한 데이터 두 책임 (출력 vs 비교) | `dual-purpose-knowing` | blackjack laco-dev "strength vs displayScore" — Phase 1 신규 |
|
|
188
|
+
| 도메인 상태 보유 전역 객체 (Singleton Deck) | `singleton-stateful-holder` | blackjack malibinYun "53번 뽑으면 오류?" — Phase 1 신규 |
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 5. 추가 룰 후보 (lotto에서 새로 발견)
|
|
193
|
+
|
|
194
|
+
### ✅ 추가 완료 — lotto 코퍼스 (2026-05-23, 세션 2)
|
|
195
|
+
1. **`empty-object-external-fill`** — InformationHolder + knowing 0 + doing이 모두 mutation 동사 (PR #14 @malibinYun)
|
|
196
|
+
2. **`collection-wrapper-without-behavior`** — Structurer + 단일 컬렉션 knowing + pass-through doing (PR #144 @krrong)
|
|
197
|
+
3. **`primitive-wrapper-without-invariant`** — 값 wrapper 명명 + 단일 원시 knowing + invariant 의도 없음 (PR #58 @junjange, #77 @hxeyexn)
|
|
198
|
+
4. **`strategy-default-param-pollution`** — 같은 전략 suffix 그룹의 knowing 비대칭 (PR #144 @krrong)
|
|
199
|
+
5. **`function-decomposition-excess`** — doing ≥4개 모두 짧은 동사 + 도메인 명사 부재 (lotto 일반 가르침)
|
|
200
|
+
|
|
201
|
+
### ✅ 추가 완료 — blackjack 코퍼스 (2026-05-28, 세션 3 Phase 1)
|
|
202
|
+
6. **`dual-purpose-knowing`** — InformationHolder/Structurer + 표현(display/format/render/출력) 동사 ≥1 + 비교/판정(compare/judge/strength/비교) 동사 ≥1 동시 등장 (blackjack aprilgom/105 @laco-dev "strength vs displayScore")
|
|
203
|
+
7. **`singleton-stateful-holder`** — InformationHolder/Structurer + notes/name 에 singleton/global 표식 + 가변 컬렉션 knowing (blackjack krrong/46 @malibinYun "53번 뽑으면 오류?")
|
|
204
|
+
|
|
205
|
+
→ 총 18개 룰 (기존 16 + blackjack 신규 2) = **18개**.
|
|
206
|
+
|
|
207
|
+
### ✅ 기존 룰 인용 보강 — blackjack 코퍼스 (Phase 2)
|
|
208
|
+
- `vague-class-name` — SUSPECT 사전 +14 (Picker/Distributor/Judge/Rule/Calculator/Information/Info/Decider 등) + laco-dev/ghojeong 가상 객체 회피 인용
|
|
209
|
+
- `dependency-direction` — laco-dev "Rank 출력 = UI 관심사" + galcyurio "domain → ui 반대 문제" 인용
|
|
210
|
+
- `feature-envy` — laco-dev "메시지를 보낸다" + BeokBeok "내 카드 줄테니 알려줘" 인용
|
|
211
|
+
- `god-object` — ghojeong "사람 한 명 더 필요한가" 인용
|
|
212
|
+
- `primitive-wrapper-without-invariant` — malibinYun "BettingMoney 산술이 invariant 깰 때 결과 타입 분리" 인용
|
|
213
|
+
|
|
214
|
+
### Priority 3 (코드 분석 필요해 룰화 어려움 — 보류)
|
|
215
|
+
- `enum-ordinal-dependency` — Design 모델만으로는 감지 어려움 (코드 AST 필요)
|
|
216
|
+
- `null-assertion-misuse` — 동일
|
|
217
|
+
- `runCatching-on-non-input` — 동일
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## 6. 추가 트레이드오프 케이스 (`tradeoff/heuristics/`)
|
|
222
|
+
|
|
223
|
+
### ✅ 추가 완료 (2026-05-23, 세션 2 + 2026-05-28, 세션 3) — `TradeoffQuestion` 10종
|
|
224
|
+
| 케이스 | 위치 | question type | 추가 시점 |
|
|
225
|
+
|---|---|---|---|
|
|
226
|
+
| `data class vs value class` | `heuristics/valueObjectShape.ts` | `value_object_shape` | 세션 2 |
|
|
227
|
+
| `Strategy interface vs enum policy` | `heuristics/strategyOrPolicy.ts` | `strategy_or_policy` | 세션 2 |
|
|
228
|
+
| `runCatching vs null+while` | `heuristics/errorHandling.ts` | `error_handling` | 세션 2 |
|
|
229
|
+
| `일급 컬렉션 채택 여부` | `heuristics/collectionShape.ts` | `collection_shape` | 세션 2 |
|
|
230
|
+
| `두 동등 주체 간 비교 책임 위치` | `heuristics/dualSubjectComparison.ts` | `dual_subject_comparison` | **세션 3 (blackjack)** |
|
|
231
|
+
|
|
232
|
+
각 4개 대안 + 도메인 어휘 pros/cons + 조영호 렌즈 (cohesion/coupling/testability) 첨부.
|
|
233
|
+
|
|
234
|
+
기존 5종은 그대로: `responsibility_split`, `class_split`, `collaboration_shape`, `stereotype_choice`, `free_form`.
|
|
235
|
+
|
|
236
|
+
`검증 위치 (View + Domain 모두 vs 단일)`은 이미 `validationLocation.ts` 룰로 다룸.
|
|
237
|
+
|
|
238
|
+
### ✅ 학습 장치: 대안 0번 슬롯 (2026-05-28, 세션 3)
|
|
239
|
+
|
|
240
|
+
`tradeoff/engine.ts::nullOptionFor()` — 모든 `propose_alternatives` 호출에 *"이 객체/분리를 만들지 않는다"* 카드를 0번 슬롯에 자동 prepend. `free_form` 제외 9개 question 별 다른 label.
|
|
241
|
+
|
|
242
|
+
*답을 받는 게 아니라 문제를 거부하는 카드*를 항상 노출해서 가상 객체 회피를 *학생 자가 자각*하도록 강제. *N안 + 트레이드오프*의 *경험적 체화* 장치.
|
|
243
|
+
|
|
244
|
+
@laco-dev (blackjack tobae-time/115): *"객체는 모두 스스로 일을 합니다."*
|
|
245
|
+
|
|
246
|
+
### ✅ prompts 4종 추가 (2026-05-28, 세션 3)
|
|
247
|
+
|
|
248
|
+
| prompt | 용도 |
|
|
249
|
+
|---|---|
|
|
250
|
+
| `/tell-dont-ask-rephrase` | 외부 비교자/getter → 메시지 호출로 다시 쓰는 4안 + 진단 질문 |
|
|
251
|
+
| `/state-machine-introspect` | sealed State 도입 2 기준 (다형성 + Context 책임) + 4안. 자동 감지 X, 학생 자가 도달 |
|
|
252
|
+
| `/phase-pressure-test` | 추가 요구사항이 깰 부분 학생 자가 진단. 1단계→2단계 학습 장치 |
|
|
253
|
+
| `/imagine-without-controller` | Controller 가상 제거 + 가상 객체 회피 사고 실험 |
|
|
254
|
+
|
|
255
|
+
기존 3종: `/rdd-workshop-intro`, `/design-discovery`, `/design-review-cho-younghos-lens`. 총 7종.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 7. 빌드/테스트
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
npm run dev # tsx src/index.ts (dev mode)
|
|
263
|
+
npm run build # tsc -p . → dist/
|
|
264
|
+
npm test # vitest run
|
|
265
|
+
npm run test:watch
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
- TypeScript strict mode, ESM (`"type": "module"`)
|
|
269
|
+
- Node ≥ 18.17
|
|
270
|
+
- 의존성: `@modelcontextprotocol/sdk`, `zod`, `gray-matter`
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## 8. 다음 세션 진입 시 추천 작업 순서
|
|
275
|
+
|
|
276
|
+
1. **이 문서 + `validate/godObject.ts` + `validate/vagueName.ts` 읽기** (룰 작성 패턴 익히기)
|
|
277
|
+
2. **`validate/findings.ts` 읽기** (`assertHasMultipleRemedies` 계약 이해)
|
|
278
|
+
3. **Priority 1 룰 1개 선택 (예: `empty-object-external-fill`) 후 PR-ready 수준으로 구현**:
|
|
279
|
+
- `validate/emptyObjectFill.ts` 작성
|
|
280
|
+
- `rules.ts`에 등록
|
|
281
|
+
- `test/unit/validate/emptyObjectFill.test.ts` 작성
|
|
282
|
+
- `npm test` 통과 확인
|
|
283
|
+
4. **lessons/woowacourse-kotlin-lotto/ 에서 해당 룰이 잡을 PR 예시 1-2개 인용해 evidence/remedy에 첨부** (vagueName.ts 패턴)
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## 9. lotto PR 분석 자산 활용
|
|
288
|
+
|
|
289
|
+
`lessons/woowacourse-kotlin-lotto/` — 141 PR 분석 완료 (2026-05-23 사족 정리 끝).
|
|
290
|
+
|
|
291
|
+
새 룰의 evidence/remedy 작성 시 `lessons/woowacourse-kotlin-lotto/<reviewee>/<PR>.md`에서 *대표 인용* 발췌해 첨부하면 학생에게 *왜*가 즉시 전달됨. (vagueName.ts 가 `@vagabond95` 인용한 패턴과 동일.)
|
|
292
|
+
|
|
293
|
+
PROGRESS.md에 PR# / reviewee / 코멘트 수 인덱스 있음.
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## 10. 알려진 한계
|
|
298
|
+
|
|
299
|
+
- **코드 AST 분석 없음** — 룰은 모두 `.oop/` 설계 모델(CRC/협력) 기반. `enum.ordinal`, `!!`, `runCatching` 같은 코드 패턴은 감지 불가.
|
|
300
|
+
- **lotto의 5종 stereotype 매핑**이 학생 입력 의존 — 자동 추론 안 함.
|
|
301
|
+
- **blackjack 미션 데이터셋 없음** — 향후 분석 가능.
|
package/README.md
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# Oh-My-OOP
|
|
2
|
+
|
|
3
|
+
객체의 책임·역할·협력을 함께 설계하는 OOP/RDD 도구입니다. **Skill + CLI 또는 MCP 중 하나를 선택**하세요. 같은 코어와 같은 `.oop` 설계 데이터를 사용하며, 모델 API 키·JEV·JVM·Docker는 필요하지 않습니다.
|
|
4
|
+
|
|
5
|
+
## 사용 방식 선택
|
|
6
|
+
|
|
7
|
+
| | Skill + CLI | MCP |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| 실행 | 에이전트가 Skill을 읽고 CLI 호출 | 에이전트가 `oop_*` 도구 호출 |
|
|
10
|
+
| 필요한 환경 | Agent Skills 지원, 파일 읽기·명령 실행 권한, Node.js | 로컬 stdio MCP 지원, Node.js |
|
|
11
|
+
| 설치 | 호스트의 Skill 디렉터리에 설치 | 호스트에 MCP 서버 등록 |
|
|
12
|
+
| 상대 방식 필요? | MCP 연결 불필요 | Skill 설치 불필요 |
|
|
13
|
+
|
|
14
|
+
둘 다 설치할 수도 있지만 같은 변경을 두 번 실행하지 마세요. Skill과 MCP의 프롬프트/리소스 전달 방식은 다르며, 보장하는 공통 부분은 OOP 연산과 저장 형식입니다.
|
|
15
|
+
|
|
16
|
+
## 공통 준비
|
|
17
|
+
|
|
18
|
+
배포 코어의 실행 최소 버전은 Node.js 18.17입니다. 신규 설치는 유지보수 중인 Node.js 버전을 권장합니다. npm에서 코어를 설치하면 소스를 직접 빌드할 필요가 없습니다.
|
|
19
|
+
|
|
20
|
+
```sh
|
|
21
|
+
npm install -g oh-my-oop@0.2.0
|
|
22
|
+
oh-my-oop --version
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
전역 설치를 원하지 않으면 대상 프로젝트에서 `npm install --save-dev oh-my-oop@0.2.0`으로 설치하고 에이전트에 `node /absolute/my-project/node_modules/oh-my-oop/dist/index.js` 경로를 명시하세요.
|
|
26
|
+
|
|
27
|
+
소스 수정·개발을 하려면 다음 방법을 사용합니다. 개발 의존성(Vitest/Vite) 때문에 Node.js 22.12 이상인 22.x 또는 24 이상이 필요합니다.
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
git clone https://github.com/no1msh/Oh-My-OOP.git
|
|
31
|
+
cd Oh-My-OOP
|
|
32
|
+
npm ci
|
|
33
|
+
npm run build
|
|
34
|
+
node dist/index.js --help
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
이미 저장소가 있다면 clone 없이 해당 디렉터리에서 빌드하세요.
|
|
38
|
+
|
|
39
|
+
## A. Skill로 사용하기
|
|
40
|
+
|
|
41
|
+
배포·에이전트 선택은 [Vercel Skills CLI](https://github.com/vercel-labs/skills)에 맡깁니다. `npx skills`는 Skill 안내 파일을 설치하고, **실제 검사는 별도로 준비한 `oh-my-oop` CLI가 실행**합니다. MCP 연결은 필요 없습니다.
|
|
42
|
+
|
|
43
|
+
### 1. 실행 코어 준비
|
|
44
|
+
|
|
45
|
+
공통 준비에서 npm으로 설치했다면 완료입니다. 소스로 빌드했다면 저장소 디렉터리에서 아래 명령으로 CLI를 PATH에 연결할 수 있습니다.
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
npm link
|
|
49
|
+
oh-my-oop --version
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`npm link`는 로컬 소스를 npm의 전역 prefix에 연결합니다. 전역 연결을 원하지 않으면 건너뛰고 에이전트에 `node /absolute/Oh-My-OOP/dist/index.js`라는 실행 경로를 명시하세요. 새 에이전트 프로세스에서도 Node.js와 해당 CLI에 접근할 수 있어야 합니다. npm 레지스트리의 동명 패키지를 자동 다운로드하는 `npx oh-my-oop`는 안내하지 않습니다.
|
|
53
|
+
|
|
54
|
+
### 2. Skill 설치 — 대상 프로젝트에서 실행
|
|
55
|
+
|
|
56
|
+
**현재 로컬 변경을 바로 사용하려면**, 대상 프로젝트로 이동한 후 로컬 저장소에서 설치하세요.
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
cd /absolute/my-project
|
|
60
|
+
npx skills add /absolute/Oh-My-OOP --skill oh-my-oop -a claude-code -a codex
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Claude Code와 Codex 양쪽에 같은 Skill을 설치합니다. 하나만 사용하면 해당 `-a`만 남기세요. 다른 에이전트는 `-a`를 생략해 대화형으로 선택하거나 Skills CLI의 지원 에이전트 ID를 지정하세요.
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
npx skills add /absolute/Oh-My-OOP --skill oh-my-oop
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
기본은 프로젝트 범위이고 개인 공용 설치는 `-g`를 추가합니다. 복사 설치를 원하면 `--copy`를 사용하세요. 로컬 저장소 없이 Skill만 설치하려면 GitHub 소스를 사용합니다. 코어 CLI 준비는 여전히 별도입니다.
|
|
70
|
+
|
|
71
|
+
```sh
|
|
72
|
+
npx skills add no1msh/Oh-My-OOP --skill oh-my-oop -a claude-code -a codex
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
설치 목록/업데이트/삭제는 Skills CLI로 관리합니다.
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
npx skills list
|
|
79
|
+
npx skills update oh-my-oop
|
|
80
|
+
npx skills remove oh-my-oop
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
로컬 경로 설치의 갱신은 해당 Skills CLI 버전의 안내를 따르세요. 원본 변경이 자동 동기화된다고 가정하지 마세요. 원격 소스 업데이트 역시 **Skill만 갱신**합니다. npm으로 설치한 코어는 `npm install -g oh-my-oop@latest`로 별도 갱신하고, 소스 설치는 저장소 갱신 후 다시 빌드하세요.
|
|
84
|
+
|
|
85
|
+
### 3. 에이전트에서 사용
|
|
86
|
+
|
|
87
|
+
“oh-my-oop Skill로 주문 객체의 책임 분배를 검토해줘. 대상 프로젝트는 /absolute/my-project야”라고 요청하세요. 호스트의 Skill 선택 UI/직접 호출 기능을 사용해도 됩니다.
|
|
88
|
+
|
|
89
|
+
공통 Skill은 표준 name/description과 Markdown만 사용하며 호스트 전용 확장 문법이나 `runtime.json`에 의존하지 않습니다. 자동 설치 대상에 없는 에이전트도 표준 Skill 폴더를 읽고 CLI를 실행할 수 있다면 수동으로 연결할 수 있지만, 모든 에이전트에서의 동작을 보증하지는 않습니다.
|
|
90
|
+
|
|
91
|
+
- Skill 설치만으로 CLI·의존성이 설치되거나 `.oop`가 초기화되지는 않습니다.
|
|
92
|
+
- 셸 실행이 금지된 채팅 환경에서는 실행 코어를 사용할 수 없습니다. 원격/컨테이너 에이전트는 그 환경 안에 코어를 준비하세요.
|
|
93
|
+
- 자체 `skill install --target` 명령은 제거했습니다. 예전에 자체 설치기로 설치했다면 **해당 oh-my-oop 폴더만** 백업한 뒤 Skills CLI로 다시 설치하세요. 기존 파일의 덮어쓰기/삭제 확인을 읽고 진행하세요.
|
|
94
|
+
- 이전 `runtime.json` 경로는 새 Skill이 읽지 않습니다. PATH 또는 명시한 CLI 경로를 준비하세요.
|
|
95
|
+
- 설치는 사용자의 선택입니다. 에이전트가 소프트웨어를 임의 설치하거나 권한을 우회하지 않도록 Skill에 명시했습니다.
|
|
96
|
+
|
|
97
|
+
## B. MCP로 사용하기
|
|
98
|
+
|
|
99
|
+
Skill 설치 없이 MCP 서버만 등록하면 됩니다. 다음은 npm 전역 설치 후 사용하는 `mcpServers` JSON 형식 예시입니다. 호스트별 설정 파일/형식은 해당 호스트 안내를 따르세요.
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"mcpServers": {
|
|
104
|
+
"oh-my-oop": {
|
|
105
|
+
"command": "oh-my-oop",
|
|
106
|
+
"args": ["mcp"],
|
|
107
|
+
"env": { "OOP_PROJECT_ROOT": "/absolute/my-project" }
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
호스트가 PATH에서 CLI를 찾지 못하거나 소스로 설치했다면 `command`를 `node`, `args`를 `["/absolute/Oh-My-OOP/dist/index.js", "mcp"]`로 지정하세요. 프로젝트 로컬 npm 설치라면 위의 `node_modules` 경로를 사용합니다.
|
|
114
|
+
|
|
115
|
+
인자 없이 실행해도 stdio MCP가 시작됩니다. 서버 로그는 stderr로 나갑니다. `oop_capabilities`와 `oop_describe`에서 연산과 입력 스키마를 확인할 수 있습니다. 서버를 변경/재빌드했다면 MCP 연결을 재시작하세요.
|
|
116
|
+
|
|
117
|
+
## 제공하는 기능과 한계
|
|
118
|
+
|
|
119
|
+
- 유스케이스, CRC 카드, 책임 배분, 객체 간 협력 저장
|
|
120
|
+
- 여러 설계 대안·트레이드오프·재검토 질문
|
|
121
|
+
- 저장된 설계 모델의 응집도·결합도·의존 방향 등 권고 검사
|
|
122
|
+
- Mermaid 클래스 다이어그램, 이력과 Before/After 비교
|
|
123
|
+
- 구현 검토에 사용할 설계 계약과 체크리스트
|
|
124
|
+
|
|
125
|
+
`design_validate`는 **저장된 설계 모델**을 검사하지, 실제 Kotlin/Android 소스를 자동 분석하지 않습니다. `conformance_check`는 호스트 LLM이 허용된 실제 구현과 비교할 계약을 반환하며 자동 합격 판정이 아닙니다. Finding은 권고이고 둘 이상의 remedy를 제공합니다.
|
|
126
|
+
|
|
127
|
+
동일한 프로젝트 루트라면 Skill/CLI와 MCP가 같은 `.oop`를 읽습니다. 대화·로그인은 이전하지 않으며 여러 에이전트의 동시 편집 잠금을 제공하지 않습니다.
|
|
128
|
+
|
|
129
|
+
## CLI 직접 사용
|
|
130
|
+
|
|
131
|
+
```sh
|
|
132
|
+
node dist/index.js system capabilities
|
|
133
|
+
node dist/index.js oop init --root /absolute/my-project
|
|
134
|
+
node dist/index.js oop design_validate --root /absolute/my-project
|
|
135
|
+
echo '{"command":"oop","operation":"class_upsert"}' | node dist/index.js system describe --input -
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
`oop <operation> --input FILE` 또는 `--input -`로 JSON 객체를 전달합니다. JSON에는 `action`을 넣지 않습니다. `--root`는 대상 프로젝트이며 생략 시 `OOP_PROJECT_ROOT`, 호환 별칭 `ARCH_PROJECT_ROOT`, 현재 디렉터리 순으로 결정합니다.
|
|
139
|
+
|
|
140
|
+
## 개발과 제품 범위
|
|
141
|
+
|
|
142
|
+
새 디렉터리에 소스만 복사해 `npm ci` → 빌드 → 테스트 → tarball 설치를 검증할 수 있습니다. 설치된 패키지의 CLI/MCP와 Claude Code·Codex용 Skill 복사 설치도 확인합니다. npm 네트워크 접근이 필요하며 전역 설치·모델 호출·배포는 하지 않습니다. 새 폴더 검사이지 새 OS/VM 검사는 아닙니다.
|
|
143
|
+
|
|
144
|
+
```sh
|
|
145
|
+
node scripts/check-package-install.mjs --execute
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
```sh
|
|
149
|
+
npm run build
|
|
150
|
+
npm test
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
실제 외부 설치 CLI까지 확인하려면 다음 검사를 별도로 실행하세요. `skills@1.7.0`을 npm에서 가져올 수 있으며 임시 프로젝트에서 Claude Code/Codex의 복사·심볼릭 링크 설치와 MCP 없는 코어 실행을 검사합니다. 텔레메트리는 끄고 실행하며 테스트 산출물 경로를 출력합니다. 실제 에이전트 추론이나 UI의 Skill 선택 품질을 검증하는 것은 아닙니다.
|
|
154
|
+
|
|
155
|
+
```sh
|
|
156
|
+
node scripts/check-skills-distribution.mjs --execute
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
실제 로그인된 Claude Code/Codex가 Skill을 읽고 CLI를 사용하는 테스트도 별도로 실행할 수 있습니다. 두 CLI가 설치·로그인되어 있어야 하며 **모델 사용량/비용이 발생할 수 있습니다**. 새 `Downloads/oh-my-oop-live-*` 프로젝트에서 Claude가 설계를 저장하고 Codex가 읽기·검증하며, 프롬프트/도구 로그/전후 상태를 그 폴더에 보존합니다. 기본 설정 일부를 테스트 세션에서 제외하므로 기존 MCP 연결이나 그래픽 UI 테스트와는 다릅니다. 재실행은 필요할 때만 하세요.
|
|
160
|
+
|
|
161
|
+
```sh
|
|
162
|
+
node scripts/check-live-agents.mjs --execute
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
이 제품은 OOP 전용입니다. 아키텍처 워커·Kotlin 분석·JEV 실험은 별도 하네스로 분리했으며 `arch_*`, project/task/review/semantic 명령은 제공하지 않습니다. Skill 배포는 외부 `npx skills`를 사용하며 자체 설치기는 제공하지 않습니다.
|
|
166
|
+
|
|
167
|
+
[제품 경계](SCOPE.md) · [코어/MCP 구조](MCP_STRUCTURE.md) · [개발 가이드](CLAUDE.md) · [공통 Skill](skills/oh-my-oop/SKILL.md)
|
package/SCOPE.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# OOP 제품 경계와 전달 방식 — 2026-09-24
|
|
2
|
+
|
|
3
|
+
## 결정
|
|
4
|
+
|
|
5
|
+
사용자가 **Skill + CLI** 또는 **MCP**를 선택한다. 두 경로는 `src/oop/commands.ts`의 같은 검증·저장 코드를 호출한다. `skills/oh-my-oop/SKILL.md`는 표준 Agent Skills 형식이며 특정 호스트의 확장 문법에 의존하지 않는다. Skill 배포·에이전트 선택은 외부 `npx skills`가 담당한다. 자체 설치기와 runtime.json 생성을 제거했으며 OOP 코어는 별도 빌드/실행한다. Skill 업데이트와 코어 업데이트도 별개다.
|
|
6
|
+
|
|
7
|
+
| 선택 | 이 제품에서 얻는 것 | 부담 / 한계 |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| MCP | 구조화된 도구 입력, `.oop` 상태, 검사·다이어그램 코어 재사용. 새 하네스도 CLI/MCP로 호출 가능 | MCP 등록·호환성 테스트 유지 필요 |
|
|
10
|
+
| Skill + CLI | 워크숍 순서를 필요할 때 읽고 셸에서 코어 실행. MCP 연결 불필요 | 호스트별 Skill 발견·권한 차이. 실행 코드와 상태 저장은 여전히 필요 |
|
|
11
|
+
| 순수 Skill | 배포 파일이 적고 설명 중심 워크숍에 간단함 | 검사·저장·비교를 LLM 지시에 맡기거나 실행기를 다시 만들어야 함 |
|
|
12
|
+
|
|
13
|
+
현재 가볍게 만들 부분은 프로토콜보다 제품 범위다. MCP를 유지한다고 특정 모델/API가 필요한 것은 아니다. 다만 어느 방식이 더 빠른지는 별도 비교하지 않았으며 속도 우위를 주장하지 않는다.
|
|
14
|
+
|
|
15
|
+
공식 개념 근거: [MCP 서버 도구·리소스·프롬프트](https://modelcontextprotocol.io/docs/learn/server-concepts), [Agent Skills](https://agentskills.io/home). Skills도 스크립트를 포함할 수 있으므로 ‘Skill은 코드 실행 불가’라는 구분은 틀리다. 여기서는 절차 안내와 실행 코어의 책임을 구분한다.
|
|
16
|
+
|
|
17
|
+
## 남긴 것
|
|
18
|
+
|
|
19
|
+
`src/oop`, `domain`, `io`, `validate`, `tradeoff`, `render`, `prompts`, `resources`, OOP MCP 래퍼, 작은 CLI/명령 발견 기능. 새 OOP Skill은 CLI를 사용한다. OOP 관련 기존 수정·신규 규칙·프롬프트·lessons·발표 문서는 보존했다.
|
|
20
|
+
|
|
21
|
+
## 분리한 것
|
|
22
|
+
|
|
23
|
+
`src/architecture`, `src/runner`, `src/semantic`, 대응 MCP 도구와 테스트, `docs`, `benchmarks`, `integrations`, `examples`, 아키텍처 Skills/TypeSafe Skill과 lock. 새 하네스에서 실험 코드를 재검토해 채택한다. OOP 제품에는 JEV 호출이나 에이전트 실행기를 남기지 않는다.
|
|
24
|
+
|
|
25
|
+
로컬 인수인계 위치: `/Users/moon/Downloads/architecture-migration/START-HERE.md`. 저장소 독자가 이 개인 경로에 접근할 수 있다고 가정하지 않는다. 외부 공개·업로드·새 저장소 생성은 하지 않았다.
|
|
26
|
+
|
|
27
|
+
원본 파일/해시/이동 대상은 그 폴더의 `migration-manifest.json`, 이동 전 전체 작업 트리는 `reference-project`에 있다. `.git`, 의존성, 빌드 산출물, 실제 로컬 비밀값은 참조 스냅샷에서 제외했다. 원래 dirty 변경을 reset/checkout하지 않았다. 복구는 필요한 파일만 스냅샷과 비교 후 복사하며 현재 변경 전체를 덮어쓰지 않는다.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const CapabilitiesInputSchema: z.ZodObject<{}, "strict", z.ZodTypeAny, {}, {}>;
|
|
3
|
+
export declare const DescribeInputSchema: z.ZodObject<{
|
|
4
|
+
command: z.ZodEnum<["oop", "system"]>;
|
|
5
|
+
operation: z.ZodString;
|
|
6
|
+
}, "strict", z.ZodTypeAny, {
|
|
7
|
+
command: "oop" | "system";
|
|
8
|
+
operation: string;
|
|
9
|
+
}, {
|
|
10
|
+
command: "oop" | "system";
|
|
11
|
+
operation: string;
|
|
12
|
+
}>;
|
|
13
|
+
export declare function capabilities(): {
|
|
14
|
+
schema_version: number;
|
|
15
|
+
product: string;
|
|
16
|
+
model: {
|
|
17
|
+
required: null;
|
|
18
|
+
skill_required: boolean;
|
|
19
|
+
};
|
|
20
|
+
interfaces: {
|
|
21
|
+
skill: {
|
|
22
|
+
installer: string;
|
|
23
|
+
install: string;
|
|
24
|
+
core_setup: string;
|
|
25
|
+
invokes: string;
|
|
26
|
+
mcp_required: boolean;
|
|
27
|
+
};
|
|
28
|
+
mcp: {
|
|
29
|
+
transport: string;
|
|
30
|
+
argv: string[];
|
|
31
|
+
skill_required: boolean;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
operations: {
|
|
35
|
+
command: string;
|
|
36
|
+
operation: string;
|
|
37
|
+
cli: {
|
|
38
|
+
argv: string[];
|
|
39
|
+
};
|
|
40
|
+
mcp: {
|
|
41
|
+
tool: string;
|
|
42
|
+
exposed: boolean;
|
|
43
|
+
arguments: string;
|
|
44
|
+
};
|
|
45
|
+
side_effect: string;
|
|
46
|
+
}[];
|
|
47
|
+
state: {
|
|
48
|
+
durable: string[];
|
|
49
|
+
scope: string;
|
|
50
|
+
};
|
|
51
|
+
limits: string[];
|
|
52
|
+
};
|
|
53
|
+
export declare function describeOperation(input: unknown): {
|
|
54
|
+
input_schema: import("zod-to-json-schema").JsonSchema7Type & {
|
|
55
|
+
$schema?: string | undefined;
|
|
56
|
+
definitions?: {
|
|
57
|
+
[key: string]: import("zod-to-json-schema").JsonSchema7Type;
|
|
58
|
+
} | undefined;
|
|
59
|
+
};
|
|
60
|
+
validation: string;
|
|
61
|
+
command: string;
|
|
62
|
+
operation: string;
|
|
63
|
+
cli: {
|
|
64
|
+
argv: string[];
|
|
65
|
+
};
|
|
66
|
+
mcp: {
|
|
67
|
+
tool: string;
|
|
68
|
+
exposed: boolean;
|
|
69
|
+
arguments: string;
|
|
70
|
+
};
|
|
71
|
+
side_effect: string;
|
|
72
|
+
schema_version: number;
|
|
73
|
+
};
|
|
74
|
+
export declare function systemCommand(action: string, input: unknown): {
|
|
75
|
+
schema_version: number;
|
|
76
|
+
product: string;
|
|
77
|
+
model: {
|
|
78
|
+
required: null;
|
|
79
|
+
skill_required: boolean;
|
|
80
|
+
};
|
|
81
|
+
interfaces: {
|
|
82
|
+
skill: {
|
|
83
|
+
installer: string;
|
|
84
|
+
install: string;
|
|
85
|
+
core_setup: string;
|
|
86
|
+
invokes: string;
|
|
87
|
+
mcp_required: boolean;
|
|
88
|
+
};
|
|
89
|
+
mcp: {
|
|
90
|
+
transport: string;
|
|
91
|
+
argv: string[];
|
|
92
|
+
skill_required: boolean;
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
operations: {
|
|
96
|
+
command: string;
|
|
97
|
+
operation: string;
|
|
98
|
+
cli: {
|
|
99
|
+
argv: string[];
|
|
100
|
+
};
|
|
101
|
+
mcp: {
|
|
102
|
+
tool: string;
|
|
103
|
+
exposed: boolean;
|
|
104
|
+
arguments: string;
|
|
105
|
+
};
|
|
106
|
+
side_effect: string;
|
|
107
|
+
}[];
|
|
108
|
+
state: {
|
|
109
|
+
durable: string[];
|
|
110
|
+
scope: string;
|
|
111
|
+
};
|
|
112
|
+
limits: string[];
|
|
113
|
+
} | {
|
|
114
|
+
input_schema: import("zod-to-json-schema").JsonSchema7Type & {
|
|
115
|
+
$schema?: string | undefined;
|
|
116
|
+
definitions?: {
|
|
117
|
+
[key: string]: import("zod-to-json-schema").JsonSchema7Type;
|
|
118
|
+
} | undefined;
|
|
119
|
+
};
|
|
120
|
+
validation: string;
|
|
121
|
+
command: string;
|
|
122
|
+
operation: string;
|
|
123
|
+
cli: {
|
|
124
|
+
argv: string[];
|
|
125
|
+
};
|
|
126
|
+
mcp: {
|
|
127
|
+
tool: string;
|
|
128
|
+
exposed: boolean;
|
|
129
|
+
arguments: string;
|
|
130
|
+
};
|
|
131
|
+
side_effect: string;
|
|
132
|
+
schema_version: number;
|
|
133
|
+
};
|