이 문서는 AI 에이전트가 node-packages 모노레포에서 코드를 작성하고 기여할 때 따라야 하는 규칙과 가이드라인을 정의합니다.
node-packages 는 hmmhmmhm 의 개인 연구용 npm 패키지 모노레포입니다. pnpm workspaces + Turborepo 구조로 운영되며, 현재 10개 패키지를 포함합니다.
base2000,base6000— 진수 변환·인코딩 실험biggest— 임의 정밀도 큰 수·소수 라이브러리curse-script— 텍스트 변환 실험edge-crypto— 엣지 런타임용 암호화 헬퍼gauss-spiral— 가우스 나선 좌표 시스템mugunghwa— 한글 기반 base 인코딩patternly— 패턴 매칭 유틸pseudo-shuffle— 순열 없는 가짜 셔플usernamer— 사용자명 생성기
각 패키지는 독립적으로 npm 에 발행되며, 공통 의존성·도구 설정은 루트에서 관리합니다.
모든 코드 파일은 450줄 이하로 작성되어야 합니다.
- 최대 줄 수: 450줄
- 권장 줄 수: 300-400줄
- 초과 시 조치: 파일이 450줄을 초과하면 기능별로 분리하여 모듈화
- 예외: 자동 생성 파일(예: 빌드 산출물, lockfile) 은 예외로 둘 수 있음
// ❌ 나쁜 예: 하나의 파일에 모든 기능 (600줄)
// packages/biggest/src/index.ts (600줄)
// ✅ 좋은 예: 기능별로 분리
// packages/biggest/src/integer.ts (200줄)
// packages/biggest/src/decimal.ts (180줄)
// packages/biggest/src/format.ts (120줄)
// packages/biggest/src/index.ts (50줄, re-export)- 명확성: 코드는 명확하고 이해하기 쉽게 작성
- 재사용성: 중복 코드를 최소화하고 공통 로직은 함수로 추출
- 타입 안정성: TypeScript 의 타입 시스템을 적극 활용 (strict 모드 유지)
- 에러 핸들링: 모든 비동기 작업과 외부 API 호출에 적절한 에러 처리 구현
- 제로 의존성 지향: 가능한 한 외부 런타임 의존성을 추가하지 않습니다. 추가 시 합당한 사유를 PR 본문에 명시합니다.
// ✅ 좋은 예
export function parse(input: string): Result {
if (!input) {
throw new TypeError("input must be a non-empty string");
}
return doParse(input);
}
// ❌ 나쁜 예
export function parse(input: any) {
return doParse(input);
}- 주기적인 커밋: 논리적인 작업 단위마다 커밋
- 작은 단위: 한 번에 하나의 기능이나 수정사항만 포함
- 완성된 코드: 빌드 실패나 런타임 에러가 없는 상태에서만 커밋
<type>: <설명>
[선택: 본문]
feat— 신규 기능fix— 버그 수정docs— 문서만 변경chore— 빌드/도구/의존성refactor— 동작 변경 없는 구조 개선test— 테스트 추가/수정perf— 성능 개선
feat: add base6000 hangul-aware decoder
fix: handle negative zero in biggest comparison
chore: bump turbo to 2.x
- 비밀키·토큰·자격증명을 코드·테스트·문서에 포함하지 않습니다.
- 개인 정보(이메일, 실명) 를 예시 코드에 박지 않고, 의도된 mock 만 사용합니다.
- 보안 관련 변경(예: edge-crypto 의 알고리즘 변경) 은 별도 PR 로 분리하고 commit 메시지에 명시합니다.
node-packages/
├── packages/
│ └── <name>/
│ ├── src/
│ ├── tests/ (있는 경우)
│ ├── package.json
│ ├── tsconfig.json
│ └── README.md
├── package.json (root, workspaces 정의)
├── pnpm-workspace.yaml
├── turbo.json
└── AGENTS.md / CLAUDE.md
각 패키지는 자기 자신의 package.json 을 가지며, npm 에 독립 발행됩니다.
- 포매터: prettier (
pnpm format) - 린터: 각 패키지 단위로 turbo 가 위임 (
pnpm lint) - 타입 체크:
pnpm check-types - 빌드:
pnpm build(turbo 가 의존 그래프에 따라 캐시·병렬 실행)
PR 제출 전 위 4개를 모두 통과시킵니다.
- 각 패키지는 자체
README.md를 가지며, 설치·사용 예제·API 표를 포함합니다. - 영어 README 를 우선하며, 한국어 README 는 선택적입니다 (있다면 영어와 동기 유지).
- 새 패키지 추가 시 root
README.md의 패키지 목록도 갱신합니다.
- 각 패키지는 자기에게 적합한 테스트 도구를 사용합니다 (Vitest 권장).
- 신규 함수·버그 수정에는 회귀 테스트를 동봉합니다.
- 외부 시스템에 의존하지 않는 단위 테스트만 운영합니다 (의존하면 mock 처리).
- 각 패키지의
package.json에publishConfig.access = public명시. - 발행 전
pnpm build && pnpm check-types && pnpm lint모두 통과 확인. - 버전 범프는 SemVer 를 따릅니다. breaking change 는 major.
- npm 발행 토큰은
personal-agent/secrets/.npmrc.personal을 사용합니다 (CI 가 아닌 로컬 발행 시).