lee-spec-kit 0.6.20 → 0.6.21
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/dist/index.d.ts +2 -0
- package/dist/index.js +2129 -1664
- package/dist/index.js.map +1 -0
- package/package.json +1 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/.pnpm/tsup@8.5.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/esm_shims.js","../src/utils/fs-walk.ts","../src/utils/template.ts","../src/utils/paths.ts","../src/utils/locales/ko.ts","../src/utils/locales/en.ts","../src/utils/i18n.ts","../src/utils/cli-error.ts","../src/utils/components.ts","../src/utils/project-type.ts","../src/utils/validation.ts","../src/utils/async.ts","../src/utils/lock.ts","../src/utils/date.ts","../src/utils/engine-managed-docs.ts","../src/utils/git-run.ts","../src/utils/init/options.ts","../src/commands/init.ts","../src/utils/config.ts","../src/utils/local-workflow-template.ts","../src/commands/feature.ts","../src/utils/workflow.ts","../src/utils/context/steps.ts","../src/utils/context/progress.ts","../src/utils/context/git.ts","../src/utils/context/parse.ts","../src/utils/context/scan.ts","../src/commands/status.ts","../src/commands/update.ts","../src/commands/config.ts","../src/utils/context/component-option.ts","../src/utils/context-selection.ts","../src/utils/context/approval-reply.ts","../src/utils/context/approval-ticket.ts","../src/utils/builtin-docs.ts","../src/commands/context.ts","../src/commands/doctor.ts","../src/commands/view.ts","../src/commands/flow.ts","../src/utils/github-draft-contract.ts","../src/commands/github/process.ts","../src/commands/github.ts","../src/commands/docs.ts","../src/commands/detect.ts","../src/commands/onboard.ts","../src/utils/banner.ts","../src/utils/version-check.ts","../src/index.ts"],"names":["path","__dirname","fs","__filename","fileURLToPath","execFileSync","program","lang","chalk","response","relativePath","config","prompts","isCompletionChecklistDone","isPrMetadataConfigured","isPrePrReviewSatisfied","escapeRegExp","normalizeSkillList","getGitTopLevel","normalizeGitPath","createHash","f","stepName","spawnSync","runGhJson","os","configPath","configFilePresent","detectionSource","ko","en"],"mappings":"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","file":"index.js","sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import path from 'path';\nimport fs from 'fs-extra';\n\ninterface WalkFilesOptions {\n extensions?: string[];\n ignoreDirs?: string[];\n}\n\nexport async function walkFiles(\n rootDir: string,\n options: WalkFilesOptions = {}\n): Promise<string[]> {\n const out: string[] = [];\n const normalizedExtensions = new Set(\n (options.extensions || [])\n .map((ext) => ext.trim().toLowerCase())\n .filter(Boolean)\n .map((ext) => (ext.startsWith('.') ? ext : `.${ext}`))\n );\n const ignored = new Set(\n (options.ignoreDirs || []).map((value) => value.trim().toLowerCase()).filter(Boolean)\n );\n\n async function visit(current: string): Promise<void> {\n const entries = await fs.readdir(current, { withFileTypes: true });\n for (const entry of entries) {\n const absolute = path.join(current, entry.name);\n if (entry.isDirectory()) {\n if (ignored.has(entry.name.trim().toLowerCase())) continue;\n await visit(absolute);\n continue;\n }\n if (!entry.isFile()) continue;\n if (normalizedExtensions.size > 0) {\n const ext = path.extname(entry.name).toLowerCase();\n if (!normalizedExtensions.has(ext)) continue;\n }\n out.push(absolute);\n }\n }\n\n if (await fs.pathExists(rootDir)) {\n await visit(rootDir);\n }\n return out;\n}\n\nexport async function listSubdirectories(rootDir: string): Promise<string[]> {\n if (!(await fs.pathExists(rootDir))) return [];\n const entries = await fs.readdir(rootDir, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => path.join(rootDir, entry.name));\n}\n","import fs from 'fs-extra';\nimport { walkFiles } from './fs-walk.js';\n\nexport async function copyTemplates(src: string, dest: string): Promise<void> {\n await fs.copy(src, dest, {\n overwrite: true,\n errorOnExist: false,\n });\n}\n\nexport function applyReplacements(\n content: string,\n replacements: Record<string, string>\n): string {\n // Avoid overlap issues (e.g. \"{{projectName}}\" vs \"{{projectName}}-{component}\")\n // by applying longer keys first.\n const keys = Object.keys(replacements).sort((a, b) => b.length - a.length);\n let next = content;\n for (const key of keys) {\n next = next.replaceAll(key, replacements[key]);\n }\n return next;\n}\n\nexport async function replaceInFiles(\n dir: string,\n replacements: Record<string, string>\n): Promise<void> {\n const files = await walkFiles(dir, { extensions: ['.md'] });\n\n for (const file of files) {\n let content = await fs.readFile(file, 'utf-8');\n content = applyReplacements(content, replacements);\n\n await fs.writeFile(file, content, 'utf-8');\n }\n\n // .sh 파일도 치환\n const shFiles = await walkFiles(dir, { extensions: ['.sh'] });\n\n for (const file of shFiles) {\n let content = await fs.readFile(file, 'utf-8');\n content = applyReplacements(content, replacements);\n\n await fs.writeFile(file, content, 'utf-8');\n }\n}\n","import path from \"path\";\nimport { fileURLToPath } from \"url\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport function getTemplatesDir(): string {\n // 빌드 후: dist/index.js -> templates/\n // 개발 시에도 동일하게 동작 (src/utils/paths.ts 기준이 아님)\n // tsup이 모든 코드를 dist/index.js로 번들링하므로 __dirname은 dist/\n const rootDir = path.resolve(__dirname, \"..\");\n return path.join(rootDir, \"templates\");\n}\n","const ko = {\n cli: {\n 'common.errorLabel': '오류:',\n 'common.canceled': '작업이 취소되었습니다.',\n 'common.configNotFound': '설정 파일을 찾을 수 없습니다. 먼저 init을 실행해주세요.',\n 'common.docsNotFound': 'docs 폴더를 찾을 수 없습니다. 먼저 init을 실행하세요.',\n\n 'status.noFeatures': 'Feature를 찾을 수 없습니다.',\n 'status.duplicateIds': '중복 Feature ID 발견:',\n 'status.missingIds': 'Feature ID가 없는 항목:',\n 'status.wrote': '✅ {path} 생성 완료',\n\n 'feature.selectRepo': '레포지토리를 선택하세요:',\n 'feature.folderExists': '이미 존재하는 폴더입니다: {path}',\n 'feature.baseNotFound': 'CLI 내장 feature 템플릿을 찾을 수 없습니다.',\n 'feature.created': '✅ Feature 폴더 생성 완료: {path}',\n 'feature.nextStepsTitle': '다음 단계:',\n 'feature.nextSteps1': ' 1. {path}/spec.md 작성',\n 'feature.nextSteps2': ' 2. 사용자 리뷰 요청',\n 'feature.nextSteps3': ' 3. 승인 후 plan.md 작성',\n\n 'config.currentTitle': '📋 현재 설정:',\n 'config.pathLabel': '경로',\n 'config.projectRootStandaloneOnly':\n '⚠️ projectRoot는 standalone 모드에서만 설정 가능합니다.',\n 'config.selectRepoToUpdate': '수정할 레포지토리를 선택하세요:',\n 'config.fullstackRepoRequired':\n 'Multi 프로젝트는 --component로 대상 컴포넌트를 지정해야 합니다.',\n 'config.projectRootSet': '✅ {repo} projectRoot 설정 완료: {path}',\n 'config.projectRootSetSingle': '✅ projectRoot 설정 완료: {path}',\n\n 'update.start': '📦 템플릿 업데이트를 시작합니다...',\n 'update.langLabel': '언어',\n 'update.typeLabel': '타입',\n 'update.updatingAgents': '📁 agents/ 폴더 업데이트 중...',\n 'update.updatingSkills': '📁 agents/skills 폴더 업데이트 중...',\n 'update.agentsUpdated': 'agents/ 업데이트 완료',\n 'update.skillsUpdated': 'agents/skills 업데이트 완료',\n 'update.updatingFeatureBase': '📁 features/feature-base/ 폴더 업데이트 중...',\n 'update.engineManagedSkillsBuiltin':\n 'agents/skills는 CLI 내장 규칙으로 관리되어 docs로 동기화하지 않습니다.',\n 'update.engineManagedFeatureBaseBuiltin':\n 'features/feature-base는 CLI 내장 템플릿으로 관리되어 docs로 동기화하지 않습니다.',\n 'update.engineManagedPruned':\n 'docs에서 CLI 관리 문서 {count}개를 정리했습니다.',\n 'update.filesUpdated': '{count}개 파일 업데이트 완료',\n 'update.updatedTotal': '총 {count}개 파일 업데이트 완료!',\n 'update.changeDetected': '변경 감지 (--force로 덮어쓰기)',\n 'update.fileUpdated': '{file} 업데이트',\n 'update.gitStatusUnavailable':\n 'git 상태를 확인할 수 없습니다. (git repo가 아니거나 git 실행 불가) --force로 강제 덮어쓰기를 사용하세요.',\n 'update.docsWorktreeDirty':\n 'docs 작업트리에 변경사항이 있어 update를 진행할 수 없습니다. 변경사항을 커밋/스태시 후 다시 실행하거나 --force로 덮어쓰세요.',\n\n 'doctor.title': '🔎 문서 진단',\n 'doctor.envWarnings': '⚠️ 환경 경고:',\n 'doctor.noIssues': '✅ 문제를 찾지 못했습니다.',\n 'doctor.errorsTitle': '오류',\n 'doctor.warningsTitle': '경고',\n 'doctor.tipJson': 'Tip: 에이전트용 JSON 출력: npx lee-spec-kit doctor --json{strictFlag}',\n 'doctor.issue.missingRequiredDir': '필수 폴더가 없습니다: {dir}',\n 'doctor.issue.missingConfig':\n '설정 파일(.lee-spec-kit.json)이 없습니다. 일부 기능이 폴더 구조 추정으로 동작할 수 있습니다.',\n 'doctor.issue.noFeatures':\n 'Feature 폴더를 찾지 못했습니다. (feature-base만 존재하거나 아직 feature를 만들지 않았을 수 있습니다.)',\n 'doctor.issue.placeholdersLeft': '플레이스홀더가 남아있습니다: {placeholders}',\n 'doctor.issue.missingSpec': 'spec.md가 없습니다.',\n 'doctor.issue.specStatusUnset':\n 'spec.md의 Status(상태)가 설정되지 않았습니다. (템플릿 그대로일 수 있음)',\n 'doctor.issue.planStatusUnset':\n 'plan.md의 Status(상태)가 설정되지 않았습니다. (템플릿 그대로일 수 있음)',\n 'doctor.issue.tasksEmpty': 'tasks.md에 태스크가 없습니다.',\n 'doctor.issue.tasksDocStatusUnset':\n 'tasks.md의 문서 상태(Doc Status)가 설정되지 않았습니다. (Draft/Review/Approved 중 하나로 설정하세요.)',\n 'doctor.issue.tasksDocStatusMissing':\n 'tasks.md에 문서 상태(Doc Status) 필드가 없습니다. `- **문서 상태**: -`와 `값: Draft | Review | Approved`를 추가하세요.',\n 'doctor.issue.duplicateFeatureId': '중복 Feature ID 감지: {id} ({count}개)',\n 'doctor.issue.missingFeatureId':\n 'Feature 폴더명이 F001-... 형식이 아닙니다. (ID를 추출할 수 없음)',\n\n 'context.noActiveFeatures': '⚠️ 진행 중인 Feature를 찾을 수 없습니다.',\n 'context.header': '📍 현재 컨텍스트 확인',\n 'context.envWarnings': '⚠️ 환경 경고:',\n 'context.openFallbackSummary':\n '(브랜치로 Feature를 특정하지 못해 미완료 Feature만 표시합니다. 진행 중: {inProgress}개 / 종료 대기: {readyToClose}개 / 완료: {done}개)',\n 'context.sectionInProgress': '진행 중',\n 'context.sectionReadyToClose': '종료 준비',\n 'context.tipDetails': 'Tip: 특정 Feature의 상세 정보를 보려면:',\n 'context.tipShowAll': '전체 보기',\n 'context.tipShowDone': '완료만 보기',\n 'context.checkRequired': '[확인 필요] ',\n 'context.checkPolicyHint':\n 'ℹ️ 사용자 확인 정책은 세션 시작(또는 context 압축/리셋 직후)에 1회 확인하고, 이후에는 정책/설정 변경 또는 사용자 새로고침 요청 시에만 재확인하세요. (git push/merge/merge commit 포함) [확인 필요]가 있으면 사용자에게 라벨 토큰이 포함된 응답(예: `A`, `A OK`, `A 진행해`)을 받은 뒤 진행 (config: approval로 조정 가능)',\n 'context.actionOptionHint':\n '승인 응답 형식: 라벨 토큰 포함 (예: `A`, `A OK`, `A 진행해`)',\n 'context.actionExplainHint':\n '승인 요청 전, 각 라벨이 무엇을 실행/변경하는지 한 줄 요약과 함께 설명하세요.',\n 'context.finalLabelPrompt':\n '현재 선택 가능한 라벨: {labels}. 라벨 토큰 포함 형식으로 응답하세요. (예: `{example}`)',\n 'context.finalLabelPromptWithRequest':\n '현재 선택 가능한 라벨: {labels}. 라벨 토큰 포함 형식으로 응답하세요. (예: `{example}`) 요청 텍스트가 필요한 라벨은 다음 형식으로 입력하세요: {requestExamples}',\n 'context.suggestionHeader': '추천 다음 선택지',\n 'context.suggestionCommandHint': '라벨 참고 명령: {command}',\n 'context.suggestionFinalPrompt':\n '현재 추천 라벨: {labels}. 응답은 라벨 토큰 포함 형식으로 해주세요. (예: {example}, `A 진행해`)',\n 'context.actionDetail.featureFolder': 'Feature 폴더와 기본 문서 골격을 준비하세요',\n 'context.actionDetail.specWrite': 'spec.md를 작성/보완하고 상태를 맞추세요',\n 'context.actionDetail.specApprove': 'spec.md를 공유하고 명시적 승인을 요청하세요',\n 'context.actionDetail.planWrite': 'plan.md를 작성/보완하고 상태를 맞추세요',\n 'context.actionDetail.planApprove': 'plan.md를 공유하고 명시적 승인을 요청하세요',\n 'context.actionDetail.tasksWrite':\n 'tasks.md를 작성/보완하고 문서 상태를 정렬하세요',\n 'context.actionDetail.tasksApprove':\n 'tasks.md를 공유하고 진행 승인을 요청하세요',\n 'context.actionDetail.issueCreate': '이슈 메타데이터를 준비/생성/동기화하세요',\n 'context.actionDetail.taskExecute': '현재 태스크 실행 단계를 진행하세요',\n 'context.actionDetail.reviewFixCommit':\n '해결한 리뷰 항목 요약으로 리뷰 수정 커밋을 만드세요',\n 'context.actionDetail.prePrReview':\n 'Pre-PR 리뷰 점검을 수행하고 Findings/Evidence를 기록하세요',\n 'context.actionDetail.prCreate': 'PR을 준비/생성하고 PR 메타데이터를 동기화하세요',\n 'context.actionDetail.prStatusUpdate': 'tasks.md의 PR 상태 필드를 업데이트하세요',\n 'context.actionDetail.codeReview':\n '리뷰 코멘트를 반영하고 Findings/Evidence를 최신화하세요',\n 'context.actionDetail.worktreeCleanup':\n 'feature worktree를 제거하고 stale worktree 엔트리를 정리하세요',\n 'context.actionDetail.prMetadataMigrate':\n 'tasks.md의 PR 필드를 최신 템플릿으로 마이그레이션하세요',\n 'context.actionDetail.userRequestReplan':\n '새 사용자 요구를 먼저 반영한 뒤 context를 다시 실행하세요',\n 'context.actionDetail.featureDone': '이 Feature의 워크플로우 완료 조건이 충족되었습니다',\n 'context.actionDetail.fallback':\n '현재 문서/상태를 점검한 뒤 context를 다시 실행하세요',\n 'context.suggestion.createFeature': '새 Feature를 생성합니다',\n 'context.suggestion.runOnboard': '초기 설정 점검(onboard)을 실행합니다',\n 'context.suggestion.showDone': '완료된 Feature 목록을 확인합니다',\n 'context.suggestion.showAll': '전체 Feature 목록을 확인합니다',\n 'context.suggestion.selectFeature':\n '진행할 Feature를 선택해 상세 컨텍스트를 엽니다',\n 'context.suggestion.showOpen': '진행 중 Feature 목록을 확인합니다',\n 'context.finalLabelCommandHint':\n '라벨을 받으면 승인 선택 실행: {command}',\n 'context.finalTicketCommandHint':\n '명령 실행은 승인 결과의 티켓으로 실행: {command}',\n 'context.readBuiltinDocFirst':\n '이번 세션에 아직 읽지 않았거나 변경 가능성이 있을 때만 필요한 내장 문서를 확인하세요.',\n 'context.tipDocsCommitRules':\n '커밋 메시지 규칙은 git-workflow 가이드를 기준으로 확인하세요.',\n 'context.list.docsCommitNeeded': '문서 커밋 필요',\n 'context.list.projectCommitNeeded': '프로젝트 코드 커밋 필요',\n 'context.list.issueNumberNeeded': '이슈 번호 기록 필요',\n 'context.list.addPrMetadata': 'PR 메타데이터(PR/PR 상태) 추가',\n 'context.list.recordPrLink': 'PR 링크 기록',\n 'context.list.addPrePrReviewField': 'Pre-PR Review 필드 추가',\n 'context.list.completePrePrReview': 'Pre-PR 리뷰 완료 처리',\n 'context.list.addPrePrFindings': 'Pre-PR Findings 필드/값 보완',\n 'context.list.addPrePrEvidence': 'Pre-PR Evidence 근거 추가',\n 'context.list.addPrReviewFindings': 'PR 리뷰 Findings 필드/값 보완',\n 'context.list.addPrReviewEvidence': 'PR 리뷰 Evidence 요약 추가',\n 'context.list.resolvePrePrMajorFindings':\n 'Pre-PR 주요 Findings 해소 필요 ({count}건)',\n 'context.list.resolvePrePrMinorFindings':\n 'Pre-PR minor Findings 해소 필요 ({count}건)',\n 'context.list.setPrStatus': 'PR 상태 설정',\n 'context.list.prStatusToApproved': 'PR 머지 필요 (현재 PR 상태: {status} → Approved)',\n 'context.list.approveSpec': 'spec 승인 필요',\n 'context.list.approvePlan': 'plan 승인 필요',\n\n 'init.selectLangPrompt': '문서 언어를 선택하세요:',\n 'init.currentDirectoryLabel': '📍 현재 위치',\n 'init.gitDetected': '✅ Git 레포지토리 감지됨',\n 'init.insideProjectRoot': '현재 프로젝트 루트 내에서 실행하고 계십니다.',\n 'init.modeEmbeddedDesc': '• embedded: 여기에 ./docs 폴더를 생성합니다. 프로젝트와 함께 관리됩니다.',\n 'init.modeStandaloneDesc': '• standalone: 별도 폴더에서 독립 docs 레포로 관리하려면,',\n 'init.modeStandaloneMove': ' 해당 폴더로 이동 후 다시 실행해주세요.',\n 'init.gitNotDetected': '⚠️ Git 레포지토리가 감지되지 않았습니다.',\n 'init.gitNotDetectedDetail': '새로운 Git 레포지토리가 생성됩니다.',\n 'init.prompt.projectName': '프로젝트 이름을 입력하세요:',\n 'init.prompt.projectType': '프로젝트 타입을 선택하세요:',\n 'init.choice.projectType.single.title': 'Single - 단일 레포 프로젝트',\n 'init.choice.projectType.single.desc': 'features/ 폴더 하나로 관리',\n 'init.choice.projectType.fullstack.title': 'Multi - 멀티 컴포넌트 프로젝트',\n 'init.choice.projectType.fullstack.desc': 'Multi 컴포넌트 프로젝트 (기본: features/{component}/)',\n 'init.prompt.docsMode': 'Docs 관리 방식을 선택하세요:',\n 'init.choice.docsRepo.embedded.title': 'embedded - 프로젝트 내 포함 (./docs)',\n 'init.choice.docsRepo.embedded.desc': '프로젝트와 함께 push됩니다',\n 'init.choice.docsRepo.standalone.title': 'standalone - 별도 독립 레포',\n 'init.choice.docsRepo.standalone.desc': 'push 여부를 별도로 설정합니다',\n 'init.prompt.componentRepoPath': '{component} 컴포넌트 레포지토리 경로를 입력하세요:',\n 'init.prompt.projectRepoPath': '프로젝트 레포지토리 경로를 입력하세요:',\n 'init.validation.enterPath': '경로를 입력해주세요',\n 'init.prompt.pushMode': 'Docs push 방식을 선택하세요:',\n 'init.choice.push.local': 'local - 로컬에서만 관리 (push 안 함)',\n 'init.choice.push.remote': 'remote - 원격에도 push',\n 'init.prompt.remoteUrl': '원격 레포 URL을 입력하세요:',\n 'init.validation.enterUrl': 'URL을 입력해주세요',\n 'init.prompt.overwrite': '{dir} 폴더가 이미 존재합니다. 덮어쓰시겠습니까?',\n 'init.log.creatingDocs': '📁 docs 구조 생성 중...',\n 'init.log.projectLabel': '프로젝트',\n 'init.log.typeLabel': '타입',\n 'init.log.langLabel': '언어',\n 'init.log.pathLabel': '경로',\n 'init.log.docsCreated': '✅ docs 구조 생성 완료!',\n 'init.log.nextStepsTitle': '다음 단계:',\n 'init.log.nextSteps1': ' 1. {docsDir}/prd/README.md 작성',\n 'init.log.nextSteps2': ' 2. npx lee-spec-kit feature <name> 으로 기능 추가',\n 'init.log.nextSteps3': ' 3. npx lee-spec-kit onboard --strict 로 초기 설정 점검',\n 'init.log.gitRepoDetectedCommit': '📦 Git 레포지토리 감지, docs 커밋 중...',\n 'init.log.gitInit': '📦 Git 초기화 중...',\n 'init.warn.stagedChangesSkip':\n '⚠️ 현재 Git index에 이미 stage된 변경이 있습니다. (--dir \".\" 인 경우 커밋 범위를 안전하게 제한할 수 없어 자동 커밋을 건너뜁니다)',\n 'init.warn.docsPathIgnoredSkipCommit':\n '⚠️ docs 경로가 .gitignore 규칙에 매칭되어 자동 커밋을 건너뜁니다: {path}',\n 'init.warn.docsPathIgnoredHint':\n ' 계속 추적하려면 `git add -f {path}` 후 커밋하거나, `--dir`를 ignore되지 않은 경로로 변경하세요.',\n 'init.warn.commitManually': ' 수동으로 변경 내용을 확인한 뒤 커밋해주세요.',\n 'init.log.gitRemoteSet': '✅ Git remote 설정 완료: {remote}',\n 'init.warn.gitRemoteExists': '⚠️ Git remote가 이미 존재합니다.',\n 'init.log.gitInitialCommitDone': '✅ Git 초기 커밋 완료!',\n 'init.warn.skipGitInit': '⚠️ Git 초기화를 건너뜁니다 (수동으로 커밋해주세요)',\n 'init.error.templateNotFound': '템플릿을 찾을 수 없습니다: {path}',\n\n 'github.cmdGithubDescription':\n 'GitHub 워크플로우 도우미 (issue/pr 본문 템플릿 생성, 검증, merge 재시도)',\n 'github.cmdIssueDescription': 'feature 문서 기반 GitHub issue 본문 생성/생성',\n 'github.cmdPrDescription': 'GitHub PR 본문 생성/생성 + tasks 동기화 + merge 재시도',\n 'github.optJson': '에이전트용 JSON 형식으로 출력',\n 'github.optComponent': '멀티 프로젝트 컴포넌트 이름',\n 'github.optIssueTitle': 'Issue 제목',\n 'github.optLabels': '쉼표 구분 라벨 목록 (기본: enhancement)',\n 'github.optIssueBodyFile':\n 'Issue 본문 파일 출력 경로 (기본: OS 임시 디렉터리의 프로젝트/컴포넌트 고정 파일)',\n 'github.optIssueAssignee': 'Issue 담당자 (기본: @me)',\n 'github.optIssueCreate': 'gh CLI로 issue 생성',\n 'github.optIssueConfirm': '원격 작업(--create)용 명시적 승인 토큰. 사용값: OK',\n 'github.optPrTitle': 'PR 제목',\n 'github.optPrBodyFile':\n 'PR 본문 파일 출력 경로 (기본: OS 임시 디렉터리의 프로젝트/컴포넌트 고정 파일)',\n 'github.optPrAssignee': 'PR 담당자 (기본: @me)',\n 'github.optPrBase': 'PR base 브랜치 (기본: main)',\n 'github.optPrCreate': 'gh CLI로 PR 생성',\n 'github.optPrRef': '--merge 시 사용할 기존 PR URL/번호',\n 'github.optPrMerge': '재시도/헤드 갱신과 함께 PR merge 수행',\n 'github.optPrConfirm': '원격 작업(--create/--merge)용 명시적 승인 토큰. 사용값: OK',\n 'github.optPrRetry': 'merge 재시도 횟수 (기본: 3)',\n 'github.optPrScreenshots': 'PR 스크린샷 섹션 모드 (auto|on|off, 기본: auto)',\n 'github.optPrMermaid': 'PR Mermaid 섹션 모드 (auto|on|off, 기본: auto)',\n 'github.optPrNoSyncTasks': 'tasks.md PR URL/PR 상태 동기화를 건너뜀',\n 'github.optPrCommitSync': 'tasks.md 동기화 변경을 자동 commit/push',\n 'github.labelsRequired': '최소 1개 라벨이 필요합니다. `--labels enhancement`를 사용하세요.',\n 'github.approvalRequired':\n '{operation}은(는) 사용자 명시 승인 후에만 실행할 수 있습니다. 계획 공유 후 `--confirm OK`로 다시 실행하세요.',\n 'github.ghCommandFailed': 'GitHub CLI 명령 실행에 실패했습니다',\n 'github.ghEmptyJson': 'GitHub CLI JSON 출력이 비어 있습니다.',\n 'github.ghInvalidJson': 'GitHub CLI JSON 파싱에 실패했습니다: {snippet}',\n 'github.sectionsMissing': '{kind} 본문에 필수 섹션이 없습니다: {sections}',\n 'github.todoPlaceholdersRemain':\n '{kind} 본문에 TODO 항목이 남아 있습니다. 목표/완료 기준 등을 채운 뒤 다시 실행하세요.',\n 'github.artifactModeInvalid':\n '`--{kind}` 값이 올바르지 않습니다: {value}. 허용값: auto,on,off',\n 'github.prScreenshotsSectionMissing':\n 'PR 본문에 필수 섹션이 없습니다: {section}',\n 'github.prScreenshotImageMissing':\n 'PR 본문의 `{section}` 섹션에 이미지 마크다운(``)을 추가하세요.',\n 'github.prMermaidSectionMissing':\n 'PR 본문에 필수 섹션이 없습니다: {section}',\n 'github.prMermaidBlockMissing':\n 'PR 본문의 `{section}` 섹션에 ```mermaid 코드 블록을 추가하세요.',\n 'github.docsMissing': '관련 문서 경로가 존재하지 않습니다: {paths}',\n 'github.noFeatures': 'Feature를 찾을 수 없습니다.',\n 'github.multipleFeaturesMatched':\n '여러 Feature가 매칭되었습니다. feature 이름(slug | F001 | F001-slug)을 명시하세요.',\n 'github.featureSelectFailed':\n 'Feature 자동 선택에 실패했습니다. feature 이름을 명시해서 다시 실행하세요.',\n 'github.tasksNotFound': 'tasks.md를 찾을 수 없습니다: {path}',\n 'github.detectBranchFailed': '현재 git 브랜치 확인에 실패했습니다',\n 'github.inspectWorktreeFailed': 'git 워크트리 상태 확인에 실패했습니다',\n 'github.worktreeNotClean':\n 'git 워크트리가 깨끗하지 않습니다. merge 재시도 동기화 전에 커밋/스태시하세요.',\n 'github.inspectFileStatusFailed': '파일 git 상태 확인에 실패했습니다',\n 'github.stageFileFailed': '동기화 파일 stage에 실패했습니다',\n 'github.commitSyncFailed': '동기화 메타데이터 commit에 실패했습니다',\n 'github.pushSyncFailed': '동기화 메타데이터 push에 실패했습니다',\n 'github.fetchPrBranchesFailed': 'PR 브랜치 fetch에 실패했습니다',\n 'github.checkoutHeadFailed': 'PR 헤드 브랜치 checkout에 실패했습니다',\n 'github.createLocalHeadFailed': '로컬 PR 헤드 브랜치 생성에 실패했습니다',\n 'github.rebaseHeadFailed': 'PR 헤드 브랜치 rebase에 실패했습니다',\n 'github.pushRebasedHeadFailed': 'rebase된 PR 헤드 브랜치 push에 실패했습니다',\n 'github.restoreBranchFailed': 'PR 헤드 갱신 후 이전 브랜치 복원에 실패했습니다',\n 'github.mergeRetryFailed': '재시도 후에도 PR merge에 실패했습니다.{lastError}',\n 'github.retryInvalid': '`--retry`는 1 이상의 정수여야 합니다.',\n 'github.operationIssueCreate': 'GitHub issue 생성',\n 'github.operationPrCreate': 'GitHub PR 생성',\n 'github.operationPrMerge': 'GitHub PR merge',\n 'github.createIssueFailed': 'GitHub issue 생성에 실패했습니다',\n 'github.createPrFailed': 'GitHub PR 생성에 실패했습니다',\n 'github.mergeRequiresPr':\n '`--merge`를 사용하려면 `--create`, `--pr <url|number>`, 또는 tasks.md의 PR 링크가 필요합니다.',\n 'github.checkoutBaseAfterMergeFailed': 'merge 후 {base} 브랜치 checkout에 실패했습니다',\n 'github.pullBaseAfterMergeFailed': 'merge 후 {base} 브랜치 최신화에 실패했습니다',\n 'github.postMergeCheckoutWarning':\n 'PR merge는 완료되었지만 `{base}` checkout에 실패했습니다(치명 아님): {detail}',\n 'github.postMergePullWarning':\n 'PR merge는 완료되었지만 `{base}` pull에 실패했습니다(치명 아님): {detail}',\n 'github.issueDefaultTitle': '{slug} ({summary})',\n 'github.prDefaultTitleWithIssue': 'feat(#{issue}): {slug} (구현 업데이트)',\n 'github.prDefaultTitleNoIssue': 'feat: {slug} (구현 업데이트)',\n 'github.issueHeader': '🧾 GitHub Issue 도우미',\n 'github.prHeader': '🔀 GitHub PR 도우미',\n 'github.labelFeature': 'Feature',\n 'github.labelBodyFile': '본문 파일',\n 'github.labelLabels': '라벨',\n 'github.labelPr': 'PR',\n 'github.issueCreated': '✅ 생성 완료: {url}',\n 'github.issueTemplateGenerated':\n '본문 템플릿을 생성했습니다. 원격으로 이슈를 생성하려면 `--create`를 사용하세요.',\n 'github.prTasksSynced': '✅ tasks.md PR 메타데이터를 동기화했습니다.',\n 'github.prMerged': '✅ PR merge 완료 (시도 횟수: {attempts})',\n 'github.prAlreadyMergedNotice':\n 'ℹ️ PR이 이미 원격에서 merge된 상태입니다. 로컬/문서 동기화만 이어서 처리합니다.',\n 'github.prTemplateGenerated':\n '본문 템플릿을 생성했습니다. 원격으로 PR을 생성하려면 `--create`를 사용하세요.',\n 'github.syncCommitWithIssue': 'docs(#{issue}): {folder} PR 메타데이터 동기화',\n 'github.syncCommitNoIssue': 'docs: {folder} PR 메타데이터 동기화',\n 'github.kindIssue': 'Issue',\n 'github.kindPr': 'PR',\n 'docs.cmdDocsDescription': 'CLI 내장 에이전트 문서를 조회합니다',\n 'docs.cmdListDescription': '조회 가능한 내장 문서 목록을 출력합니다',\n 'docs.cmdGetDescription': '내장 문서 1개를 출력합니다',\n 'docs.optJson': '에이전트용 JSON 형식으로 출력',\n 'docs.invalidDocId': '알 수 없는 문서 ID입니다: {docId}. 사용 가능: {available}',\n 'docs.listHeader': '📚 내장 문서',\n 'docs.nextDocs': '다음 문서',\n 'docs.sourceLabel': 'source',\n 'docs.hashLabel': 'hash',\n 'detect.cmdDescription':\n '현재 워크스페이스가 lee-spec-kit 프로젝트인지 감지합니다',\n 'detect.optDir': '감지 기준 경로 (기본: 현재 경로)',\n 'detect.optJson': '에이전트용 JSON 형식으로 출력',\n 'detect.header': '🔎 Project Detection',\n 'detect.labelTarget': 'Target',\n 'detect.resultDetected': 'lee-spec-kit 프로젝트를 감지했습니다',\n 'detect.resultNotDetected': 'lee-spec-kit 프로젝트를 찾지 못했습니다',\n 'detect.notDetectedHint':\n '`npx lee-spec-kit init`으로 초기화하거나 `--dir`로 올바른 경로를 지정하세요.',\n 'detect.labelDocsDir': 'Docs',\n 'detect.labelConfigPath': 'Config',\n 'detect.labelSource': 'Source',\n 'detect.labelProjectType': 'Project Type',\n 'detect.labelLang': 'Lang',\n 'detect.labelProjectName': 'Project',\n 'detect.sourceConfig': 'config (.lee-spec-kit.json)',\n 'detect.sourceHeuristic': 'heuristic (agents/features folder)',\n\n 'cliError.headerNextOptionsError': '👉 다음 옵션 (오류):',\n 'cliError.promptBlocked.retryWithoutNonInteractive':\n '--non-interactive 없이 같은 명령을 다시 실행하세요.',\n 'cliError.promptBlocked.passRequiredFlags':\n '필수 플래그를 모두 명시하거나(`--force` 포함) 다시 실행하세요.',\n 'cliError.promptBlocked.checkRequiredOptions': '필수 옵션을 먼저 확인하세요.',\n 'cliError.configOrDocs.initializeDocs': '현재 워크스페이스에서 docs를 초기화하세요.',\n 'cliError.configOrDocs.verifyDocsLocation': 'docs 위치와 설정을 점검하세요.',\n 'cliError.configOrDocs.runFromDocsDir': 'docs/가 있는 디렉터리에서 명령을 실행하세요.',\n 'cliError.lock.retryLater': '잠시 기다린 뒤 같은 명령을 다시 실행하세요.',\n 'cliError.lock.checkOtherProcess': '다른 lee-spec-kit 프로세스가 실행 중인지 확인하세요.',\n 'cliError.lock.inspectLockFiles':\n '런타임 lock 파일(프로젝트 `.git/lee-spec-kit.runtime/locks` 또는 OS temp)을 확인하세요.',\n 'cliError.invalidArg.reviewUsage': '명령 사용법과 유효한 플래그를 확인하세요.',\n 'cliError.invalidArg.fixValues': '잘못된 값을 수정한 뒤 다시 실행하세요.',\n 'cliError.invalidArg.validateBeforeAutomation':\n '자동화 환경이라면 CLI 호출 전에 인자를 검증하세요.',\n 'cliError.precondition.satisfyPreconditions':\n '실행 전제조건을 만족하도록 환경/작업트리를 먼저 정리하세요.',\n 'cliError.precondition.runDoctor': '워크스페이스 진단으로 현재 상태를 확인하세요.',\n 'cliError.precondition.considerForce': '의도한 덮어쓰기라면 강제 옵션 사용을 검토하세요.',\n 'cliError.duplicateId.resolveDuplicates': '중복된 Feature ID를 정리한 뒤 다시 실행하세요.',\n 'cliError.duplicateId.ensureUniqueFormat':\n '각 Feature 폴더명이 고유한 `F###-slug` 형식인지 확인하세요.',\n 'cliError.duplicateId.inspectJson': '중복 여부를 JSON 진단으로 확인하세요.',\n 'cliError.missingId.renameFolders':\n 'ID가 없는 Feature 폴더를 `F###-slug` 형식으로 변경하세요.',\n 'cliError.missingId.alignDocs': 'spec/tasks 문서의 Feature ID도 함께 정리하세요.',\n 'cliError.missingId.inspectJson': '누락 항목을 JSON 진단으로 확인하세요.',\n 'cliError.invalidApproval.fetchLatestOptions': '먼저 최신 옵션을 다시 조회하세요.',\n 'cliError.invalidApproval.replyWithValidLabel':\n '유효한 라벨(또는 `<라벨> OK`)만 응답하세요. 예: A',\n 'cliError.invalidApproval.oneLabelOnly': '한 번에 라벨 1개만 선택하세요.',\n 'cliError.invalidApproval.userRequestRequired':\n '라벨 \"{label}\"은 사용자 요청 텍스트가 필요합니다. `{example}` 형식으로 입력하세요.',\n 'cliError.approvalRequired.reRunWithApprove':\n 'context 승인 흐름이면 --approve <라벨>과 함께 다시 실행하세요.',\n 'cliError.approvalRequired.githubConfirmOk':\n 'github 원격 생성/머지면 --confirm OK를 함께 전달하세요.',\n 'cliError.approvalRequired.shareAndGetApproval':\n '실행 전에 제목/본문/라벨(또는 머지 계획)을 사용자에게 공유하고 명시적 승인을 받으세요.',\n 'cliError.contextSelection.specifySelector': '단일 Feature selector를 명시하세요.',\n 'cliError.contextSelection.narrowByComponent':\n 'multi 모드에서는 --component로 범위를 좁히세요.',\n 'cliError.contextSelection.inspectAllCandidates': '먼저 전체 후보를 확인하세요.',\n 'cliError.noActionOptions.refreshContext':\n '현재 상태를 보기 위해 context를 새로 조회하세요.',\n 'cliError.noActionOptions.completeChecklist':\n 'Feature 문서를 열어 누락된 체크 항목을 완료하세요.',\n 'cliError.noActionOptions.listAllFeatures':\n '실행 가능한 옵션이 있는 Feature를 찾기 위해 전체를 조회하세요.',\n 'cliError.contextStale.refreshBeforeApprove': '승인 전에 최신 context를 다시 조회하세요.',\n 'cliError.contextStale.reapproveWithFreshLabel':\n '최신 출력의 라벨로 다시 승인하세요.',\n 'cliError.contextStale.executeAfterFreshApproval':\n '최신 라벨 재승인 후에만 실행하세요.',\n 'cliError.execution.notCommand': '승인 라벨이 command인지 먼저 확인하세요.',\n 'cliError.execution.failed': '실패한 명령의 출력과 선행 조건을 확인하세요.',\n 'cliError.execution.rerunContextAndExecute':\n 'context를 다시 조회하고 최신 라벨 1개를 실행하세요.',\n 'cliError.execution.runManually': '환경 문제 분리를 위해 명령을 수동 실행해보세요.',\n 'cliError.unknown.rerunAndCaptureLogs':\n '같은 입력으로 재실행하고 전체 오류 로그를 수집하세요.',\n 'cliError.unknown.runDoctor': '워크스페이스 상태를 진단하세요.',\n 'cliError.unknown.reportReasonCode': 'reasonCode와 로그를 유지보수자에게 전달하세요.',\n\n 'context.git.standaloneProjectRootMissing':\n 'standalone 모드입니다. projectRoot가 설정되지 않아 프로젝트 브랜치 확인이 불가능합니다. (npx lee-spec-kit config --project-root ...)',\n 'context.git.multiProjectRootShapeInvalid':\n 'multi standalone 모드인데 projectRoot 형태가 올바르지 않습니다. (예: { \"app\": \"...\", \"api\": \"...\", \"worker\": \"...\" })',\n 'context.git.multiProjectRootRepoMissing':\n 'projectRoot.{repo}가 비어있습니다. (npx lee-spec-kit config --project-root ... --component {repo})',\n 'context.git.singleProjectRootShapeInvalid':\n 'single standalone 모드인데 projectRoot 형태가 올바르지 않습니다. (예: \"/path/to/project\")',\n\n 'validation.nameEmpty': '이름은 비어있을 수 없습니다.',\n 'validation.nameTooLong': '이름은 100자를 초과할 수 없습니다.',\n 'validation.nameTraversal': \"이름에 '..' 또는 경로 구분자를 사용할 수 없습니다.\",\n 'validation.nameNullByte': '이름에 null 문자를 사용할 수 없습니다.',\n 'validation.nameInvalidChars':\n '이름에는 영문, 숫자, 하이픈, 언더스코어, 한글만 사용할 수 있습니다.',\n 'validation.nameReserved': '예약된 이름은 사용할 수 없습니다.',\n 'validation.projectTypeInvalid':\n '프로젝트 타입은 {values} 중 하나여야 합니다.',\n 'validation.languageInvalid': '언어는 {values} 중 하나여야 합니다.',\n 'validation.workflowModeInvalid':\n '워크플로우 모드는 {values} 중 하나여야 합니다.',\n 'validation.featureIdEmpty': 'Feature ID는 비어있을 수 없습니다.',\n 'validation.featureIdFormat': \"Feature ID는 'F' + 숫자 형식이어야 합니다 (예: F001).\",\n 'validation.pathEmpty': '경로는 비어있을 수 없습니다.',\n 'validation.pathNullByte': '경로에 null 문자를 사용할 수 없습니다.',\n 'validation.genericFailed': '검증 실패',\n 'validation.context.featureName': '기능 이름',\n 'validation.context.featureId': 'Feature ID',\n 'validation.context.projectName': '프로젝트 이름',\n 'validation.context.projectType': '프로젝트 타입',\n 'validation.context.language': '언어',\n 'validation.context.workflowMode': '워크플로우 모드',\n\n 'versionCheck.noticeAvailable': '📦 lee-spec-kit v{latest} 사용 가능 (현재: v{current})',\n 'versionCheck.updateCommand': ' 업데이트: npm update -g lee-spec-kit',\n },\n steps: {\n featureFolder: 'Feature 폴더 생성',\n specWrite: 'spec.md 작성',\n specApprove: 'spec.md 승인',\n planWrite: 'plan.md 작성',\n planApprove: 'plan.md 승인',\n tasksWrite: 'tasks.md 작성/승인',\n docsInitialCommit: '초기 문서 커밋',\n docsCommitPlanning: '문서 커밋(동기화)',\n issueCreate: 'GitHub Issue 생성',\n branchCreate: '브랜치 생성',\n tasksExecute: '태스크 실행',\n docsCommitSync: '문서 커밋(동기화)',\n prePrReview: 'Pre-PR 리뷰',\n prCreate: 'PR 생성',\n codeReview: '코드 리뷰',\n featureDone: 'Feature 완료',\n },\n messages: {\n specCreate:\n 'spec.md를 작성하고 상태를 Review로 변경하세요. (agents 가이드 기준)',\n specImprove: 'spec.md를 보완하고 상태를 Review로 변경하세요.',\n specApproval:\n 'spec.md 내용을 사용자에게 공유하고 승인(`A` 또는 `A OK` 형식)을 받으세요.',\n planCreate:\n 'plan.md를 작성하고 상태를 Review로 변경하세요. (agents 가이드 기준)',\n planImprove: 'plan.md를 보완하고 상태를 Review로 변경하세요.',\n planApproval:\n 'plan.md 내용을 사용자에게 공유하고 승인(`A` 또는 `A OK` 형식)을 받으세요.',\n tasksCreate:\n 'tasks.md를 작성하고 문서 상태를 Review로 변경하세요. (agents/execute-task 가이드 기준)',\n tasksNeedAtLeastOne: 'tasks.md에 최소 1개 이상의 태스크를 작성하세요.',\n tasksImprove: 'tasks.md를 보완하고 문서 상태를 Review로 변경하세요.',\n tasksApproval:\n 'tasks.md 내용을 사용자에게 공유하고 진행 승인(`A` 또는 `A OK` 형식)을 받으세요. (승인 후 문서 상태를 Approved로 변경)',\n docsCommitPlanning:\n 'cd \"{docsGitCwd}\" && git add \"{featurePath}\" && git commit -m \"docs(planning): {folderName} 기획 문서\"',\n issueCreateAndWrite:\n '이슈 본문 템플릿을 생성해 목표/완료 기준을 검토·보완하고, 사용자 승인(OK) 후 이슈를 생성하세요. 이후 tasks.md의 이슈 번호를 채우고 문서 커밋을 준비하세요.',\n issuePrepareFromDoc:\n '`issue.md`를 기준으로 이슈 제목/본문/라벨 초안을 보완하고 사용자 승인(OK)을 받아 상태를 `Ready`로 변경하세요.',\n issueCreateFromDoc:\n '`issue.md` 상태가 `Ready`이면 GitHub Issue를 생성하고, 생성된 이슈 번호를 `tasks.md`에 반영하세요.',\n docsCommitIssueUpdate:\n 'cd \"{docsGitCwd}\" && git add \"{featurePath}\" && git commit -m \"docs(#{issueNumber}): {folderName} 문서 업데이트\"',\n docsCommitUpdate:\n 'cd \"{docsGitCwd}\" && git add \"{featurePath}\" && git commit -m \"docs: {folderName} 문서 업데이트\"',\n projectCommitIssueUpdate:\n 'cd \"{projectGitCwd}\" && (git diff --cached --quiet && echo \"스테이징된 파일이 없습니다. 이번 태스크에서 수정한 파일만 선택해 git add [files] 후 다시 실행하세요.\" && exit 1 || git commit -m \"feat(#{issueNumber}): {commitTopic}\")',\n projectCommitUpdate:\n 'cd \"{projectGitCwd}\" && (git diff --cached --quiet && echo \"스테이징된 파일이 없습니다. 이번 태스크에서 수정한 파일만 선택해 git add [files] 후 다시 실행하세요.\" && exit 1 || git commit -m \"feat({folderName}): {commitTopic}\")',\n reviewFixCommitIssueGuidance:\n 'PR 리뷰 수정 커밋을 진행하세요. 리뷰 반영 파일만 스테이징한 뒤 `fix(#{issueNumber}): <review-fix-summary>` 형식으로 커밋하세요. `<review-fix-summary>`에는 이번 커밋에서 실제로 해결한 리뷰 항목 요약을 작성하세요. (태스크 제목 재사용 금지)',\n reviewFixCommitGuidance:\n 'PR 리뷰 수정 커밋을 진행하세요. 리뷰 반영 파일만 스테이징한 뒤 `fix(review): <review-fix-summary>` 형식으로 커밋하세요. `<review-fix-summary>`에는 이번 커밋에서 실제로 해결한 리뷰 항목 요약을 작성하세요. (태스크 제목 재사용 금지)',\n standaloneNeedsProjectRoot:\n 'standalone 모드에서는 projectRoot 설정이 필요합니다. (npx lee-spec-kit config --project-root ...)',\n createBranch:\n 'cd \"{projectGitCwd}\" && mkdir -p .worktrees && (git worktree add \".worktrees/feat-{issueNumber}-{slug}\" \"feat/{issueNumber}-{slug}\" || git worktree add -b \"feat/{issueNumber}-{slug}\" \".worktrees/feat-{issueNumber}-{slug}\") && echo \"worktree: {projectGitCwd}/.worktrees/feat-{issueNumber}-{slug}\"',\n worktreeCleanupCommand:\n 'cd \"{projectGitCwd}\" && git worktree remove \"{worktreePath}\" && git worktree prune',\n tasksAllDoneButNoChecklist:\n '완료 조건 체크리스트를 작성하세요. tasks.md의 \"완료 조건\" 섹션에 검증 항목을 추가하고, 사용자와 확인 후 충족 항목을 [x]로 체크하세요. 최종 승인(OK)도 반영하세요.',\n tasksAllDoneButChecklist:\n '완료 조건 체크리스트의 남은 항목을 진행하세요. 현재 진행: ({checked}/{total}) 사용자와 확인 후 충족 항목을 [x]로 체크하고 최종 승인(OK)을 반영하세요.',\n finishDoingTask:\n '현재 DOING/REVIEW 태스크를 수행하세요: \"{title}\" ({done}/{total}) 완료 시 결과/검증을 공유하고 승인(`A` 또는 `A OK` 형식)을 받은 뒤 DONE 처리',\n startNextTodoTask:\n '다음 TODO 태스크를 시작합니다: \"{title}\" ({done}/{total}) 승인(`A` 또는 `A OK` 형식) 후 DOING 처리',\n checkTaskStatuses:\n '태스크 상태를 확인하세요. ({done}/{total})',\n taskCommitGateStrictBlock:\n '다음 TODO 태스크로 넘어가기 전에 `1 태스크 = 1 커밋` 규칙을 충족해야 합니다. 점검 결과: {reason}. 태스크 커밋 단위를 정리한 뒤 다시 진행하세요.',\n taskCommitGateWarnProceed:\n '⚠️ 태스크 커밋 단위 점검 경고: {reason}. 현재는 진행 가능하지만 `1 태스크 = 1 커밋`을 권장합니다.',\n taskCommitGateReasonNoTasksCommit:\n '최근 프로젝트 코드 커밋을 찾을 수 없습니다',\n taskCommitGateReasonTasksFileUnavailable:\n '최근 프로젝트 코드 커밋 이력을 판독할 수 없습니다',\n taskCommitGateReasonDoneCount:\n '최신 tasks.md 커밋에서 DONE 전환이 {count}건 감지되었습니다',\n taskCommitGateReasonMismatchLastDone:\n '최근 프로젝트 코드 커밋이 직전 완료 태스크와 일치하지 않습니다',\n prLegacyAsk:\n 'tasks.md에 PR/PR 상태 필드가 없습니다. 템플릿을 최신 포맷으로 업데이트할까요? (확인 필요)',\n prePrReviewFieldMissing:\n 'tasks.md에 `PR 전 리뷰` 필드가 없습니다. `- **PR 전 리뷰**: Pending | Done` 항목을 추가하고 다시 context를 실행하세요. (확인 필요)',\n prePrReviewFindingsMissing:\n 'tasks.md에 `PR 전 리뷰 Findings` 필드가 없거나 값 형식이 잘못되었습니다. `- **PR 전 리뷰 Findings**: major=0, minor=0` 형식으로 기록하세요. (확인 필요)',\n prePrReviewEvidenceMissing:\n 'tasks.md의 `PR 전 리뷰 Evidence`가 비어있거나 placeholder입니다. 리뷰 근거(문서 경로/링크/로그)를 채우세요. (확인 필요)',\n prePrReviewMajorBlocked:\n 'Pre-PR 주요 Findings가 {count}건으로 기록되었습니다. `blockOnFindings=true` 정책에서는 주요 이슈 해결/합의 전 PR 생성으로 진행할 수 없습니다.',\n prePrReviewMinorBlocked:\n 'Pre-PR minor Findings가 {count}건으로 기록되었습니다. `minorPolicy=block` 정책에서는 minor 이슈 정리/합의 전 PR 생성으로 진행할 수 없습니다.',\n prePrReviewRun:\n 'PR 생성 전 사전 코드리뷰를 진행하세요. 기본 베이스라인은 `{fallback}`이며, `create-pr` 문서의 `Pre-PR 기본 체크리스트` 섹션을 항상 수행하세요. 우선순위 스킬: {skills} (설치된 더 적합한 스킬이 있다면 먼저 제안 후 사용)로 추가 심화 검토를 진행하세요. 완료 후 `PR 전 리뷰`를 Done으로 업데이트하세요. Major 정책: {findingsPolicy}. Minor 정책: {minorFindingsPolicy}',\n prePrReviewFindingsBlock:\n '중요 이슈는 수정/합의 후에만 PR 생성',\n prePrReviewFindingsWarn:\n '리스크를 공유하면 PR 생성 진행 가능',\n prePrReviewMinorFindingsBlock:\n 'minor 이슈도 정리/합의 후에만 PR 생성',\n prePrReviewMinorFindingsWarn:\n 'minor 이슈는 기록/공유 후 PR 생성 진행 가능',\n prReviewFindingsFieldMissing:\n 'tasks.md에 `PR 리뷰 Findings` 필드가 없습니다. `- **PR 리뷰 Findings**: major=0, minor=0` 항목을 추가하고 다시 진행하세요. (확인 필요)',\n prReviewFindingsMissing:\n 'tasks.md의 `PR 리뷰 Findings` 값이 없거나 형식이 잘못되었습니다. `- **PR 리뷰 Findings**: major=0, minor=0` 형식으로 기록하세요. (확인 필요)',\n prReviewEvidenceFieldMissing:\n 'tasks.md에 `PR 리뷰 Evidence` 필드가 없습니다. `- **PR 리뷰 Evidence**: -` 항목을 추가하고 다시 진행하세요. (확인 필요)',\n prReviewEvidenceMissing:\n 'tasks.md의 `PR 리뷰 Evidence`가 비어있거나 placeholder이거나 요약 형식이 없습니다. 해결/합의한 리뷰 코멘트 근거를 `요약: ...`(또는 `summary: ...`) 형식으로 기록하세요. (확인 필요)',\n prCreate:\n 'PR 본문 템플릿을 생성해 변경 사항/테스트 섹션을 검토·보완하고, 사용자 승인(OK) 후 PR을 생성하세요. 이후 tasks.md에 PR 링크를 기록하세요.',\n prCreatePrepareFromDoc:\n '`pr.md`를 기준으로 PR 제목/본문/라벨 초안을 보완하고 사용자 승인(OK)을 받아 상태를 `Ready`로 변경하세요.',\n prCreateExecuteFromDoc:\n '`pr.md` 상태가 `Ready`이면 PR을 생성하고, 생성된 PR 링크/PR 상태를 `tasks.md`에 기록하세요. (`pr.md`는 상태 `Ready`만 유지)',\n prCreatePrepare:\n 'PR 본문 템플릿을 생성해 변경 사항/테스트 섹션을 검토·보완하고, PR 생성 전 사용자 승인(OK)을 받으세요.',\n prCreateExecute:\n '확정된 PR 본문으로 PR을 생성하고, 생성된 PR 링크를 tasks.md의 PR 필드에 기록하세요.',\n prCreateRequiredSequence:\n 'PR 생성은 필수 2단계입니다: (1) PR 본문 템플릿 생성/보완 + 사용자 승인(OK), (2) PR 생성 + tasks.md PR 링크 기록. 위 순서를 모두 완료하세요.',\n prFillStatus:\n 'tasks.md의 PR 상태를 Review로 설정하세요. (PR 생성/리뷰 단계에서는 Review를 유지합니다.)',\n prReviewMergedSyncStatus:\n '원격 PR이 이미 머지되었습니다. tasks.md의 PR 상태를 Approved로 업데이트하세요. (PR/리뷰 근거 필드도 최신 상태로 확인)',\n prResolveReview:\n '리뷰 코멘트를 해결하세요. PR 상태는 Review를 유지하고, 리뷰 수정 커밋 메시지는 실제로 해결한 항목 요약으로 작성하세요. (태스크 제목 재사용 금지) 머지 준비가 되면 사용자 승인(OK) 후 머지 옵션을 실행하세요. (성공 시 PR 상태가 Approved로 동기화됩니다.)',\n prReviewResolve:\n '리뷰 코멘트를 확인/분석한 뒤 필요한 수정을 진행하세요. PR 상태는 Review를 유지하고 `PR 리뷰 Findings/Evidence`를 최신으로 기록하세요. 원격 반영(push)은 사용자 승인(OK) 후 진행하세요.',\n prReviewPush:\n 'cd \"{projectGitCwd}\" && git push',\n prReviewRemoteBlocked:\n '원격 PR 상태를 확인한 결과 아직 머지 준비가 되지 않았습니다: {reasons}. 리뷰 코멘트/체크 상태를 정리한 뒤 다시 확인하세요.',\n prReviewRemoteReasonChangesRequested:\n '리뷰 승인 상태가 변경 요청 또는 추가 리뷰 필요 상태입니다',\n prReviewRemoteReasonClosed:\n 'PR이 머지되지 않은 채 닫혀 있습니다 (reopen 또는 새 PR 필요)',\n prReviewRemoteReasonChecksFailing:\n '실패한 체크가 {count}건 있습니다',\n prReviewRemoteReasonChecksPending:\n '대기 중인 체크가 {count}건 있습니다',\n prReviewRemoteReasonMergeBlocked:\n '머지 상태가 `{status}`로 차단되어 있습니다',\n prReviewRemoteReasonUnavailable:\n '원격 PR 상태를 확인하지 못했습니다 (gh 인증/네트워크/권한 확인 필요)',\n prReviewMerge:\n '머지 준비가 되면 사용자 승인(OK)을 받은 뒤 머지 옵션을 실행하세요. (성공 시 PR 상태가 Approved로 동기화됩니다.)',\n prReviewMergeCommand:\n 'npx lee-spec-kit github pr {featureRef} --merge --confirm OK',\n prRequestReview:\n '리뷰어에게 리뷰를 요청하고 PR 상태를 Review로 설정/유지하세요.',\n userRequestReplan:\n '현재 단계와 별개로 사용자가 제안한 새 요구를 먼저 반영할 수 있습니다. 요구사항을 요약해 tasks.md에 추가하거나 별도 Feature로 분리한 뒤, 문서 상태를 맞추고 context를 다시 실행하세요.',\n featureDone:\n '워크플로우 요구사항과 모든 태스크/완료 조건이 충족되었습니다. 이 Feature는 완료 상태입니다.',\n fallbackRerunContext:\n '상태를 판별할 수 없습니다. 문서를 확인한 뒤 다시 context를 실행하세요.',\n },\n warnings: {\n projectBranchUnavailable:\n '프로젝트 브랜치를 확인할 수 없습니다. (standalone 모드에서는 projectRoot가 필요합니다.)',\n docsGitUnavailable:\n 'docs 레포의 git 상태를 확인할 수 없습니다. (레포 위치 / git init 확인)',\n docsPathIgnored:\n '현재 Feature 문서 경로가 git ignore 대상입니다: {path} (docs 커밋 감지가 제한될 수 있습니다.)',\n docsUncommittedChanges:\n '문서 변경사항이 커밋되지 않았습니다. (추가 문서 커밋 필요) 커밋 메시지 규칙은 git-workflow 가이드를 기준으로 확인하세요.',\n projectUncommittedChanges:\n '프로젝트 코드 변경사항이 커밋되지 않았습니다. (추가 코드 커밋 필요)',\n legacyTasksDocStatusField:\n '구버전 tasks.md 포맷입니다. `문서 상태` 필드(Draft/Review/Approved)를 추가해 태스크 승인 단계를 활성화하세요.',\n legacyTasksPrFields:\n '구버전 tasks.md 포맷입니다. PR 단계 전에 `PR` 및 `PR 상태` 필드를 추가하세요.',\n legacyTasksPrePrReviewField:\n '구버전 tasks.md 포맷입니다. PR 단계 전에 `PR 전 리뷰` 필드를 추가하세요. (`- **PR 전 리뷰**: Pending | Done`)',\n legacyTasksPrePrFindingsField:\n '구버전 tasks.md 포맷입니다. PR 단계 전에 `PR 전 리뷰 Findings` 필드를 추가하세요. (`- **PR 전 리뷰 Findings**: major=0, minor=0`)',\n legacyTasksPrePrEvidenceField:\n '구버전 tasks.md 포맷입니다. PR 단계 전에 `PR 전 리뷰 Evidence` 필드를 추가하세요.',\n legacyTasksPrReviewFindingsField:\n '구버전 tasks.md 포맷입니다. 리뷰 단계 전에 `PR 리뷰 Findings` 필드를 추가하세요. (`- **PR 리뷰 Findings**: major=0, minor=0`)',\n legacyTasksPrReviewEvidenceField:\n '구버전 tasks.md 포맷입니다. 리뷰 단계 전에 `PR 리뷰 Evidence` 필드를 추가하세요.',\n workflowSpecNotApproved:\n '완료 상태이지만 spec.md 상태가 Approved가 아닙니다. (spec.md의 상태를 Approved로 업데이트하세요.)',\n workflowPlanNotApproved:\n '완료 상태이지만 plan.md 상태가 Approved가 아닙니다. (plan.md의 상태를 Approved로 업데이트하세요.)',\n workflowIssueMissing:\n '완료 상태이지만 이슈 번호가 비어있습니다. (tasks.md의 이슈 번호를 채우세요.)',\n workflowProjectUncommittedChanges:\n '완료 조건 이전에 프로젝트 코드 변경사항을 커밋해야 합니다. (프로젝트 워크트리 미커밋 변경 존재)',\n workflowPrLinkMissing:\n '완료 상태이지만 PR 링크가 비어있습니다. (tasks.md의 PR 필드를 채우세요.)',\n workflowPrStatusMissing:\n '완료 상태이지만 PR 상태가 비어있습니다. (PR 생성/리뷰 단계에서는 PR 상태를 Review로 설정하세요.)',\n workflowPrStatusNotApproved:\n '완료 상태이지만 PR 상태가 Approved가 아닙니다. (PR 생성/리뷰 단계는 Review를 유지하고, merge 성공 시에만 Approved로 동기화하세요.)',\n workflowPrReviewFindingsMissing:\n '리뷰 단계에서 `PR 리뷰 Findings`가 없거나 형식이 올바르지 않습니다. (`major=0, minor=0` 형식)',\n workflowPrReviewEvidenceMissing:\n '리뷰 단계에서 `PR 리뷰 Evidence`가 비어있거나 placeholder이거나 요약 형식이 없습니다. (`요약: ...` 또는 `summary: ...` 형식으로 기록)',\n workflowPrRemoteChangesRequested:\n '원격 PR에서 변경 요청 또는 추가 리뷰가 감지되었습니다. 코멘트 반영 후 push하고 다시 확인하세요.',\n workflowPrRemoteChecksFailing:\n '원격 PR 체크 실패가 {count}건 감지되었습니다. 실패 원인을 해결 후 다시 확인하세요.',\n workflowPrRemoteChecksPending:\n '원격 PR 체크 대기가 {count}건 감지되었습니다. 체크 완료 후 다시 확인하세요.',\n workflowPrePrReviewMissing:\n '완료 상태이지만 `PR 전 리뷰` 필드가 없습니다. (tasks.md에 `- **PR 전 리뷰**: Pending | Done`을 추가하세요.)',\n workflowPrePrReviewNotDone:\n '완료 상태이지만 `PR 전 리뷰`가 Done이 아닙니다. (사전 코드리뷰 후 Done으로 업데이트하세요.)',\n workflowPrePrFindingsMissing:\n '완료 상태이지만 `PR 전 리뷰 Findings`가 없거나 형식이 올바르지 않습니다. (`major=0, minor=0` 형식)',\n workflowPrePrEvidenceMissing:\n '완료 상태이지만 `PR 전 리뷰 Evidence`가 비어있습니다. (리뷰 근거를 기록하세요.)',\n workflowPrePrFindingsBlocked:\n '완료 상태이지만 Pre-PR 주요 Findings가 {count}건 남아 있습니다. (`blockOnFindings=true` 정책)',\n workflowPrePrMinorFindingsBlocked:\n '완료 상태이지만 Pre-PR minor Findings가 {count}건 남아 있습니다. (`minorPolicy=block` 정책)',\n },\n } as const;\n\nexport default ko;\n","const en = {\n cli: {\n 'common.errorLabel': 'Error:',\n 'common.canceled': 'Operation canceled.',\n 'common.configNotFound': 'Config file not found. Run `init` first.',\n 'common.docsNotFound': 'docs folder not found. Run `init` first.',\n\n 'status.noFeatures': 'No features found.',\n 'status.duplicateIds': 'Duplicate Feature IDs found:',\n 'status.missingIds': 'Entries missing Feature ID:',\n 'status.wrote': '✅ Wrote {path}',\n\n 'feature.selectRepo': 'Select a repository:',\n 'feature.folderExists': 'Folder already exists: {path}',\n 'feature.baseNotFound': 'Built-in feature template not found.',\n 'feature.created': '✅ Feature folder created: {path}',\n 'feature.nextStepsTitle': 'Next steps:',\n 'feature.nextSteps1': ' 1. Write {path}/spec.md',\n 'feature.nextSteps2': ' 2. Ask for review',\n 'feature.nextSteps3': ' 3. After approval, write plan.md',\n\n 'config.currentTitle': '📋 Current config:',\n 'config.pathLabel': 'Path',\n 'config.projectRootStandaloneOnly':\n '⚠️ projectRoot can only be set in standalone mode.',\n 'config.selectRepoToUpdate': 'Select a repository to update:',\n 'config.fullstackRepoRequired':\n 'For multi projects, specify a target component via `--component`.',\n 'config.projectRootSet': '✅ {repo} projectRoot set: {path}',\n 'config.projectRootSetSingle': '✅ projectRoot set: {path}',\n\n 'update.start': '📦 Starting template update...',\n 'update.langLabel': 'Lang',\n 'update.typeLabel': 'Type',\n 'update.updatingAgents': '📁 Updating agents/ folder...',\n 'update.updatingSkills': '📁 Updating agents/skills folder...',\n 'update.agentsUpdated': 'agents/ updated',\n 'update.skillsUpdated': 'agents/skills updated',\n 'update.updatingFeatureBase': '📁 Updating features/feature-base/ folder...',\n 'update.engineManagedSkillsBuiltin':\n 'agents/skills is CLI-managed and is not synced into docs.',\n 'update.engineManagedFeatureBaseBuiltin':\n 'features/feature-base is CLI-managed and is not synced into docs.',\n 'update.engineManagedPruned':\n 'Removed {count} CLI-managed docs entries from this docs tree.',\n 'update.filesUpdated': '{count} files updated',\n 'update.updatedTotal': 'Updated {count} files!',\n 'update.changeDetected': 'changes detected (use --force to overwrite)',\n 'update.fileUpdated': '{file} updated',\n 'update.gitStatusUnavailable':\n 'Cannot determine git status (not a git repo or git unavailable). Use --force to overwrite.',\n 'update.docsWorktreeDirty':\n 'Docs working tree has changes. Commit/stash your changes, or run with --force to overwrite.',\n\n 'doctor.title': '🔎 Docs Doctor',\n 'doctor.envWarnings': '⚠️ Environment warnings:',\n 'doctor.noIssues': '✅ No issues found.',\n 'doctor.errorsTitle': 'Errors',\n 'doctor.warningsTitle': 'Warnings',\n 'doctor.tipJson': 'Tip: Agent JSON output: npx lee-spec-kit doctor --json{strictFlag}',\n 'doctor.issue.missingRequiredDir': 'Missing required directory: {dir}',\n 'doctor.issue.missingConfig':\n 'Missing .lee-spec-kit.json. Some commands may rely on folder-structure heuristics.',\n 'doctor.issue.noFeatures':\n 'No feature folders found. (Only feature-base exists, or no features created yet.)',\n 'doctor.issue.placeholdersLeft': 'Leftover placeholders detected: {placeholders}',\n 'doctor.issue.missingSpec': 'Missing spec.md.',\n 'doctor.issue.specStatusUnset': 'spec.md Status is not set. (May still be a template)',\n 'doctor.issue.planStatusUnset': 'plan.md Status is not set. (May still be a template)',\n 'doctor.issue.tasksEmpty': 'tasks.md has no tasks.',\n 'doctor.issue.tasksDocStatusUnset':\n 'tasks.md Doc Status is not set. (Set it to Draft, Review, or Approved.)',\n 'doctor.issue.tasksDocStatusMissing':\n 'tasks.md is missing the Doc Status field. Add `- **Doc Status**: -` and `Values: Draft | Review | Approved`.',\n 'doctor.issue.duplicateFeatureId': 'Duplicate Feature ID detected: {id} ({count})',\n 'doctor.issue.missingFeatureId':\n 'Feature folder name is not in F001-... format. (Cannot extract ID)',\n\n 'context.noActiveFeatures': '⚠️ No active features found.',\n 'context.header': '📍 Current Context Check',\n 'context.envWarnings': '⚠️ Environment warnings:',\n 'context.openFallbackSummary':\n '(Could not detect a feature from the branch, so showing only open features. In Progress: {inProgress} / Ready To Close: {readyToClose} / Done: {done})',\n 'context.sectionInProgress': 'In Progress',\n 'context.sectionReadyToClose': 'Ready To Close',\n 'context.tipDetails': 'Tip: To view details for a feature:',\n 'context.tipShowAll': 'Show all',\n 'context.tipShowDone': 'Show done only',\n 'context.checkRequired': '[CHECK required] ',\n 'context.checkPolicyHint':\n 'ℹ️ Check user-approval policy once at session start (or right after context compression/reset); re-check only when policy/config changes or the user explicitly requests refresh. (includes git push/merge and merge commits). If you see [CHECK required], wait for a reply that includes a label token (e.g. `A`, `A OK`, `A proceed`) before proceeding (config: approval can override)',\n 'context.actionOptionHint':\n 'Approval reply format: include a label token (e.g. `A`, `A OK`, `A proceed`)',\n 'context.actionExplainHint':\n 'Before requesting approval, explain what each label will run/change with a one-line summary.',\n 'context.finalLabelPrompt':\n 'Available labels now: {labels}. Reply with a label-token format. (e.g. `{example}`)',\n 'context.finalLabelPromptWithRequest':\n 'Available labels now: {labels}. Reply with a label-token format. (e.g. `{example}`) Labels that require a request must be replied as: {requestExamples}',\n 'context.suggestionHeader': 'Suggested Next Options',\n 'context.suggestionCommandHint': 'Reference command: {command}',\n 'context.suggestionFinalPrompt':\n 'Recommended labels now: {labels}. Please reply with a format that includes a label token. (e.g. {example}, `A proceed`)',\n 'context.actionDetail.featureFolder': 'Prepare feature folder and baseline docs',\n 'context.actionDetail.specWrite': 'Write or refine spec.md and set status',\n 'context.actionDetail.specApprove': 'Share spec.md and request explicit approval',\n 'context.actionDetail.planWrite': 'Write or refine plan.md and set status',\n 'context.actionDetail.planApprove': 'Share plan.md and request explicit approval',\n 'context.actionDetail.tasksWrite': 'Write or refine tasks.md and align document status',\n 'context.actionDetail.tasksApprove': 'Share tasks.md and request progress approval',\n 'context.actionDetail.issueCreate': 'Prepare and create/update issue metadata',\n 'context.actionDetail.taskExecute': 'Proceed with the current task execution step',\n 'context.actionDetail.reviewFixCommit':\n 'Create a review-fix commit with resolved feedback summary',\n 'context.actionDetail.prePrReview':\n 'Complete pre-PR review checks and record findings/evidence',\n 'context.actionDetail.prCreate': 'Prepare or create PR and sync PR metadata',\n 'context.actionDetail.prStatusUpdate': 'Update PR status fields in tasks.md',\n 'context.actionDetail.codeReview':\n 'Address review comments and sync findings/evidence',\n 'context.actionDetail.worktreeCleanup':\n 'remove the feature worktree and prune stale worktree entries',\n 'context.actionDetail.prMetadataMigrate':\n 'Migrate tasks.md PR fields to the latest template',\n 'context.actionDetail.userRequestReplan':\n 'Handle the new user request first and re-run context',\n 'context.actionDetail.featureDone':\n 'All workflow checks are complete for this feature',\n 'context.actionDetail.fallback':\n 'Re-check context after verifying current docs/status',\n 'context.suggestion.createFeature': 'Create a new feature',\n 'context.suggestion.runOnboard': 'Run onboarding checks',\n 'context.suggestion.showDone': 'Show completed features',\n 'context.suggestion.showAll': 'Show all features',\n 'context.suggestion.selectFeature':\n 'Select a feature and open detailed context',\n 'context.suggestion.showOpen': 'Show open features',\n 'context.finalLabelCommandHint':\n 'When a label is provided, run approval selection: {command}',\n 'context.finalTicketCommandHint':\n 'Execute commands using the ticket from approval result: {command}',\n 'context.readBuiltinDocFirst':\n 'Read required built-in docs only if not read in this session yet or likely changed.',\n 'context.tipDocsCommitRules':\n 'Check commit message rules against the git-workflow guide.',\n 'context.list.docsCommitNeeded': 'Commit docs changes',\n 'context.list.projectCommitNeeded': 'Commit project code changes',\n 'context.list.issueNumberNeeded': 'Fill issue number in docs',\n 'context.list.addPrMetadata': 'Add PR metadata (PR/PR Status)',\n 'context.list.recordPrLink': 'Record PR link',\n 'context.list.addPrePrReviewField': 'Add Pre-PR Review field',\n 'context.list.completePrePrReview': 'Complete Pre-PR review',\n 'context.list.addPrePrFindings': 'Add/fill Pre-PR Findings',\n 'context.list.addPrePrEvidence': 'Add Pre-PR Evidence',\n 'context.list.addPrReviewFindings': 'Add/fill PR Review Findings',\n 'context.list.addPrReviewEvidence': 'Add PR Review Evidence summary',\n 'context.list.resolvePrePrMajorFindings':\n 'Resolve major pre-PR findings ({count})',\n 'context.list.resolvePrePrMinorFindings':\n 'Resolve minor pre-PR findings ({count})',\n 'context.list.setPrStatus': 'Set PR Status',\n 'context.list.prStatusToApproved': 'PR merge required (PR Status: {status} → Approved)',\n 'context.list.approveSpec': 'Approve spec',\n 'context.list.approvePlan': 'Approve plan',\n\n 'init.selectLangPrompt': 'Select docs language:',\n 'init.currentDirectoryLabel': '📍 Current directory',\n 'init.gitDetected': '✅ Git repository detected',\n 'init.insideProjectRoot': 'You are running inside your project root.',\n 'init.modeEmbeddedDesc':\n '• embedded: creates ./docs here and manages it with the project.',\n 'init.modeStandaloneDesc': '• standalone: to manage docs as a separate repo,',\n 'init.modeStandaloneMove': ' move to that folder and run again.',\n 'init.gitNotDetected': '⚠️ Git repository not detected.',\n 'init.gitNotDetectedDetail': 'A new Git repo will be initialized.',\n 'init.prompt.projectName': 'Enter project name:',\n 'init.prompt.projectType': 'Select project type:',\n 'init.choice.projectType.single.title': 'Single - single repo project',\n 'init.choice.projectType.single.desc': 'Manage with a single features/ folder',\n 'init.choice.projectType.fullstack.title': 'Multi - multi-component project',\n 'init.choice.projectType.fullstack.desc': 'Default structure uses features/{component}/',\n 'init.prompt.docsMode': 'Select docs mode:',\n 'init.choice.docsRepo.embedded.title': 'embedded - inside the project (./docs)',\n 'init.choice.docsRepo.embedded.desc': 'Pushed together with the project',\n 'init.choice.docsRepo.standalone.title': 'standalone - separate docs repo',\n 'init.choice.docsRepo.standalone.desc': 'Configure push settings separately',\n 'init.prompt.componentRepoPath': 'Enter repository path for component \"{component}\":',\n 'init.prompt.projectRepoPath': 'Enter project repository path:',\n 'init.validation.enterPath': 'Please enter a path',\n 'init.prompt.pushMode': 'Select docs push mode:',\n 'init.choice.push.local': 'local - manage locally (no push)',\n 'init.choice.push.remote': 'remote - push to remote',\n 'init.prompt.remoteUrl': 'Enter remote repository URL:',\n 'init.validation.enterUrl': 'Please enter a URL',\n 'init.prompt.overwrite': '{dir} already exists. Overwrite?',\n 'init.log.creatingDocs': '📁 Creating docs structure...',\n 'init.log.projectLabel': 'Project',\n 'init.log.typeLabel': 'Type',\n 'init.log.langLabel': 'Lang',\n 'init.log.pathLabel': 'Path',\n 'init.log.docsCreated': '✅ Docs structure created!',\n 'init.log.nextStepsTitle': 'Next steps:',\n 'init.log.nextSteps1': ' 1. Write {docsDir}/prd/README.md',\n 'init.log.nextSteps2': ' 2. Add a feature with: npx lee-spec-kit feature <name>',\n 'init.log.nextSteps3': ' 3. Run setup checks: npx lee-spec-kit onboard --strict',\n 'init.log.gitRepoDetectedCommit': '📦 Git repo detected, committing docs...',\n 'init.log.gitInit': '📦 Initializing Git...',\n 'init.warn.stagedChangesSkip':\n '⚠️ There are already staged changes in the Git index. (With --dir \".\", commit scope cannot be safely restricted, so auto-commit is skipped.)',\n 'init.warn.docsPathIgnoredSkipCommit':\n '⚠️ Docs path is matched by .gitignore, so auto-commit is skipped: {path}',\n 'init.warn.docsPathIgnoredHint':\n ' To keep tracking docs, use `git add -f {path}` then commit, or move docs via `--dir` to a non-ignored path.',\n 'init.warn.commitManually': ' Review the changes and commit manually.',\n 'init.log.gitRemoteSet': '✅ Git remote set: {remote}',\n 'init.warn.gitRemoteExists': '⚠️ Git remote already exists.',\n 'init.log.gitInitialCommitDone': '✅ Initial Git commit created!',\n 'init.warn.skipGitInit': '⚠️ Skipping Git initialization (please commit manually)',\n 'init.error.templateNotFound': 'Template not found: {path}',\n\n 'github.cmdGithubDescription':\n 'GitHub workflow helpers (issue/pr templates, validation, merge retry)',\n 'github.cmdIssueDescription':\n 'Generate/create GitHub issue body from feature docs with validation',\n 'github.cmdPrDescription':\n 'Generate/create GitHub PR body with validation, tasks PR sync, and merge retry',\n 'github.optJson': 'Output in JSON format for agents',\n 'github.optComponent': 'Component name for multi projects',\n 'github.optIssueTitle': 'Issue title',\n 'github.optLabels': 'Comma-separated labels (default: enhancement)',\n 'github.optIssueBodyFile':\n 'Issue body file output path (default: project/component-scoped file in OS temp dir)',\n 'github.optIssueAssignee': 'Issue assignee (default: @me)',\n 'github.optIssueCreate': 'Create issue via gh CLI',\n 'github.optIssueConfirm':\n 'Explicit user approval token for remote operations (--create). Use: OK',\n 'github.optPrTitle': 'PR title',\n 'github.optPrBodyFile':\n 'PR body file output path (default: project/component-scoped file in OS temp dir)',\n 'github.optPrAssignee': 'PR assignee (default: @me)',\n 'github.optPrBase': 'PR base branch (default: main)',\n 'github.optPrCreate': 'Create PR via gh CLI',\n 'github.optPrRef': 'Existing PR URL/number (used by --merge)',\n 'github.optPrMerge': 'Merge PR with retry and head-branch refresh',\n 'github.optPrConfirm':\n 'Explicit user approval token for remote operations (--create/--merge). Use: OK',\n 'github.optPrRetry': 'Retry count for merge (default: 3)',\n 'github.optPrScreenshots': 'PR screenshots section mode (auto|on|off, default: auto)',\n 'github.optPrMermaid': 'PR Mermaid section mode (auto|on|off, default: auto)',\n 'github.optPrNoSyncTasks': 'Do not sync PR URL/PR status into tasks.md',\n 'github.optPrCommitSync': 'Commit and push tasks.md metadata sync automatically',\n 'github.labelsRequired': 'At least one label is required. Use `--labels enhancement`.',\n 'github.approvalRequired':\n '{operation} requires explicit user approval. Re-run with `--confirm OK` after sharing the plan with the user.',\n 'github.ghCommandFailed': 'GitHub CLI command failed',\n 'github.ghEmptyJson': 'GitHub CLI returned empty JSON output.',\n 'github.ghInvalidJson': 'GitHub CLI returned invalid JSON: {snippet}',\n 'github.sectionsMissing': '{kind} body is missing required sections: {sections}',\n 'github.todoPlaceholdersRemain':\n '{kind} body still contains TODO placeholders. Fill goals/completion criteria before creating remotely.',\n 'github.artifactModeInvalid':\n 'Invalid value for `--{kind}`: {value}. Allowed: auto,on,off',\n 'github.prScreenshotsSectionMissing':\n 'PR body is missing required section: {section}',\n 'github.prScreenshotImageMissing':\n 'Add image markdown (``) to the `{section}` section in PR body.',\n 'github.prMermaidSectionMissing':\n 'PR body is missing required section: {section}',\n 'github.prMermaidBlockMissing':\n 'Add a ```mermaid code block to the `{section}` section in PR body.',\n 'github.docsMissing': 'Related document paths do not exist: {paths}',\n 'github.noFeatures': 'No features found.',\n 'github.multipleFeaturesMatched':\n 'Multiple features matched. Specify feature name (slug | F001 | F001-slug).',\n 'github.featureSelectFailed':\n 'Failed to auto-select a feature. Specify feature name explicitly.',\n 'github.tasksNotFound': 'tasks.md not found: {path}',\n 'github.detectBranchFailed': 'Failed to detect current git branch',\n 'github.inspectWorktreeFailed': 'Failed to inspect git worktree',\n 'github.worktreeNotClean':\n 'Git worktree is not clean. Commit or stash changes before merge retry sync.',\n 'github.inspectFileStatusFailed': 'Failed to inspect git file status',\n 'github.stageFileFailed': 'Failed to stage file',\n 'github.commitSyncFailed': 'Failed to commit synced metadata',\n 'github.pushSyncFailed': 'Failed to push synced metadata commit',\n 'github.fetchPrBranchesFailed': 'Failed to fetch PR branches',\n 'github.checkoutHeadFailed': 'Failed to checkout PR head branch',\n 'github.createLocalHeadFailed': 'Failed to create local PR head branch',\n 'github.rebaseHeadFailed': 'Failed to rebase PR head branch',\n 'github.pushRebasedHeadFailed': 'Failed to push rebased PR head branch',\n 'github.restoreBranchFailed': 'Failed to restore previous branch after PR refresh',\n 'github.mergeRetryFailed': 'Failed to merge PR after retry attempts.{lastError}',\n 'github.retryInvalid': '`--retry` must be a positive integer.',\n 'github.operationIssueCreate': 'GitHub issue creation',\n 'github.operationPrCreate': 'GitHub PR creation',\n 'github.operationPrMerge': 'GitHub PR merge',\n 'github.createIssueFailed': 'Failed to create GitHub issue',\n 'github.createPrFailed': 'Failed to create GitHub PR',\n 'github.mergeRequiresPr':\n '`--merge` requires `--create`, `--pr <url|number>`, or a PR link in tasks.md.',\n 'github.checkoutBaseAfterMergeFailed': 'Failed to checkout {base} after merge',\n 'github.pullBaseAfterMergeFailed': 'Failed to update {base} after merge',\n 'github.postMergeCheckoutWarning':\n 'PR merged, but checkout to `{base}` failed (non-fatal): {detail}',\n 'github.postMergePullWarning':\n 'PR merged, but pull for `{base}` failed (non-fatal): {detail}',\n 'github.issueDefaultTitle': '{slug} ({summary})',\n 'github.prDefaultTitleWithIssue': 'feat(#{issue}): {slug} (implementation update)',\n 'github.prDefaultTitleNoIssue': 'feat: {slug} (implementation update)',\n 'github.issueHeader': '🧾 GitHub Issue Helper',\n 'github.prHeader': '🔀 GitHub PR Helper',\n 'github.labelFeature': 'Feature',\n 'github.labelBodyFile': 'Body file',\n 'github.labelLabels': 'Labels',\n 'github.labelPr': 'PR',\n 'github.issueCreated': '✅ Created: {url}',\n 'github.issueTemplateGenerated':\n 'Template generated. Add --create to open the issue automatically.',\n 'github.prTasksSynced': '✅ tasks.md PR metadata synced.',\n 'github.prMerged': '✅ PR merged (attempts: {attempts}).',\n 'github.prAlreadyMergedNotice':\n 'ℹ️ PR was already merged remotely. Continuing with local/docs sync only.',\n 'github.prTemplateGenerated': 'Template generated. Add --create to open the PR automatically.',\n 'github.syncCommitWithIssue': 'docs(#{issue}): sync PR metadata for {folder}',\n 'github.syncCommitNoIssue': 'docs: sync PR metadata for {folder}',\n 'github.kindIssue': 'Issue',\n 'github.kindPr': 'PR',\n 'docs.cmdDocsDescription': 'Read CLI-managed built-in agent docs',\n 'docs.cmdListDescription': 'List available built-in docs',\n 'docs.cmdGetDescription': 'Read one built-in doc',\n 'docs.optJson': 'Output in JSON format for agents',\n 'docs.invalidDocId': 'Unknown doc id: {docId}. Available: {available}',\n 'docs.listHeader': '📚 Built-in Docs',\n 'docs.nextDocs': 'Next docs',\n 'docs.sourceLabel': 'source',\n 'docs.hashLabel': 'hash',\n 'detect.cmdDescription': 'Detect whether the current workspace is a lee-spec-kit project',\n 'detect.optDir': 'Target directory to probe (default: current directory)',\n 'detect.optJson': 'Output in JSON format for agents',\n 'detect.header': '🔎 Project Detection',\n 'detect.labelTarget': 'Target',\n 'detect.resultDetected': 'Detected a lee-spec-kit project',\n 'detect.resultNotDetected': 'No lee-spec-kit project detected',\n 'detect.notDetectedHint':\n 'Run `npx lee-spec-kit init` or pass `--dir` to the correct path.',\n 'detect.labelDocsDir': 'Docs',\n 'detect.labelConfigPath': 'Config',\n 'detect.labelSource': 'Source',\n 'detect.labelProjectType': 'Project Type',\n 'detect.labelLang': 'Lang',\n 'detect.labelProjectName': 'Project',\n 'detect.sourceConfig': 'config (.lee-spec-kit.json)',\n 'detect.sourceHeuristic': 'heuristic (agents/features folder)',\n\n 'cliError.headerNextOptionsError': '👉 Next Options (Error):',\n 'cliError.promptBlocked.retryWithoutNonInteractive':\n 'Run the same command without --non-interactive.',\n 'cliError.promptBlocked.passRequiredFlags':\n 'Pass all required flags (including `--force` when needed), then run again.',\n 'cliError.promptBlocked.checkRequiredOptions': 'Check required options first.',\n 'cliError.configOrDocs.initializeDocs':\n 'Initialize docs in the current workspace.',\n 'cliError.configOrDocs.verifyDocsLocation':\n 'Verify docs location and configuration.',\n 'cliError.configOrDocs.runFromDocsDir':\n 'Run command from the directory that contains docs/.',\n 'cliError.lock.retryLater': 'Wait briefly, then retry the same command.',\n 'cliError.lock.checkOtherProcess':\n 'Check whether another lee-spec-kit process is still running.',\n 'cliError.lock.inspectLockFiles':\n 'Inspect runtime lock files (project `.git/lee-spec-kit.runtime/locks` or OS temp).',\n 'cliError.invalidArg.reviewUsage': 'Review command usage and valid flags.',\n 'cliError.invalidArg.fixValues': 'Fix invalid value(s) and retry.',\n 'cliError.invalidArg.validateBeforeAutomation':\n 'If using automation, validate arguments before invoking CLI.',\n 'cliError.precondition.satisfyPreconditions':\n 'Satisfy the command preconditions first (environment/worktree).',\n 'cliError.precondition.runDoctor':\n 'Run workspace diagnostics to inspect current state.',\n 'cliError.precondition.considerForce':\n 'If overwrite is intentional, consider the force flag.',\n 'cliError.duplicateId.resolveDuplicates':\n 'Resolve duplicate Feature IDs, then run again.',\n 'cliError.duplicateId.ensureUniqueFormat':\n 'Ensure each feature folder has a unique `F###-slug` name.',\n 'cliError.duplicateId.inspectJson':\n 'Inspect duplicates via JSON diagnostics.',\n 'cliError.missingId.renameFolders':\n 'Rename feature folders without IDs to `F###-slug` format.',\n 'cliError.missingId.alignDocs':\n 'Align Feature IDs in spec/tasks docs after renaming.',\n 'cliError.missingId.inspectJson':\n 'Inspect missing IDs via JSON diagnostics.',\n 'cliError.invalidApproval.fetchLatestOptions': 'Fetch latest options first.',\n 'cliError.invalidApproval.replyWithValidLabel':\n 'Reply with a valid label only (or \"<label> OK\"), e.g. A.',\n 'cliError.invalidApproval.oneLabelOnly': 'Use one label at a time.',\n 'cliError.invalidApproval.userRequestRequired':\n 'Label \"{label}\" requires a user request. Use `{example}`.',\n 'cliError.approvalRequired.reRunWithApprove':\n 'For context approval flow, re-run with --approve <label>.',\n 'cliError.approvalRequired.githubConfirmOk':\n 'For github remote create/merge, pass --confirm OK.',\n 'cliError.approvalRequired.shareAndGetApproval':\n 'Share title/body/labels (or merge plan) and get explicit user approval first.',\n 'cliError.contextSelection.specifySelector':\n 'Specify one feature selector explicitly.',\n 'cliError.contextSelection.narrowByComponent':\n 'Narrow by component in multi mode.',\n 'cliError.contextSelection.inspectAllCandidates':\n 'Inspect all candidates first.',\n 'cliError.noActionOptions.refreshContext':\n 'Refresh context to see current state.',\n 'cliError.noActionOptions.completeChecklist':\n 'Open feature docs and complete the missing checklist item.',\n 'cliError.noActionOptions.listAllFeatures':\n 'List all features to find one with actionable options.',\n 'cliError.contextStale.refreshBeforeApprove':\n 'Get fresh context before approving.',\n 'cliError.contextStale.reapproveWithFreshLabel':\n 'Approve again using a label from the latest output.',\n 'cliError.contextStale.executeAfterFreshApproval':\n 'Execute only after re-approval of the fresh label.',\n 'cliError.execution.notCommand':\n 'Check whether the approved label points to a command action.',\n 'cliError.execution.failed':\n 'Review the failed command output and fix prerequisites.',\n 'cliError.execution.rerunContextAndExecute':\n 'Re-run context and execute one fresh label.',\n 'cliError.execution.runManually':\n 'Run the command manually to isolate environment issues.',\n 'cliError.unknown.rerunAndCaptureLogs':\n 'Re-run with the same input and capture full error logs.',\n 'cliError.unknown.runDoctor': 'Run diagnostics for workspace state.',\n 'cliError.unknown.reportReasonCode':\n 'Report the reasonCode and logs to maintainers.',\n\n 'context.git.standaloneProjectRootMissing':\n 'Standalone mode is enabled, but projectRoot is missing. Cannot resolve project branch. (npx lee-spec-kit config --project-root ...)',\n 'context.git.multiProjectRootShapeInvalid':\n 'Multi standalone mode requires projectRoot as an object. (Example: { \"app\": \"...\", \"api\": \"...\", \"worker\": \"...\" })',\n 'context.git.multiProjectRootRepoMissing':\n 'projectRoot.{repo} is empty. (npx lee-spec-kit config --project-root ... --component {repo})',\n 'context.git.singleProjectRootShapeInvalid':\n 'Single standalone mode requires projectRoot as a string path. (Example: \"/path/to/project\")',\n\n 'validation.nameEmpty': 'Name cannot be empty.',\n 'validation.nameTooLong': 'Name cannot exceed 100 characters.',\n 'validation.nameTraversal': \"Name cannot contain '..' or path separators.\",\n 'validation.nameNullByte': 'Name cannot contain null bytes.',\n 'validation.nameInvalidChars':\n 'Name can only include letters, numbers, hyphens, underscores, and Korean characters.',\n 'validation.nameReserved': 'Reserved name is not allowed.',\n 'validation.projectTypeInvalid': 'Project type must be one of: {values}.',\n 'validation.languageInvalid': 'Language must be one of: {values}.',\n 'validation.workflowModeInvalid': 'Workflow mode must be one of: {values}.',\n 'validation.featureIdEmpty': 'Feature ID cannot be empty.',\n 'validation.featureIdFormat': \"Feature ID must be 'F' + digits (e.g., F001).\",\n 'validation.pathEmpty': 'Path cannot be empty.',\n 'validation.pathNullByte': 'Path cannot contain null bytes.',\n 'validation.genericFailed': 'Validation failed',\n 'validation.context.featureName': 'Feature name',\n 'validation.context.featureId': 'Feature ID',\n 'validation.context.projectName': 'Project name',\n 'validation.context.projectType': 'Project type',\n 'validation.context.language': 'Language',\n 'validation.context.workflowMode': 'Workflow mode',\n\n 'versionCheck.noticeAvailable':\n '📦 lee-spec-kit v{latest} is available (current: v{current})',\n 'versionCheck.updateCommand': ' Update: npm update -g lee-spec-kit',\n },\n steps: {\n featureFolder: 'Create feature folder',\n specWrite: 'Write spec.md',\n specApprove: 'Approve spec.md',\n planWrite: 'Write plan.md',\n planApprove: 'Approve plan.md',\n tasksWrite: 'Write/approve tasks.md',\n docsInitialCommit: 'Initial docs commit',\n docsCommitPlanning: 'Commit docs (sync)',\n issueCreate: 'Create GitHub Issue',\n branchCreate: 'Create branch',\n tasksExecute: 'Execute tasks',\n docsCommitSync: 'Commit docs (sync)',\n prePrReview: 'Pre-PR review',\n prCreate: 'Create PR',\n codeReview: 'Code review',\n featureDone: 'Feature done',\n },\n messages: {\n specCreate:\n 'Write spec.md and change Status to Review. (Follow the agents guide baseline.)',\n specImprove: 'Improve spec.md and change Status to Review.',\n specApproval:\n 'Share spec.md with the user and get approval (`A` or `A OK` format).',\n planCreate:\n 'Write plan.md and change Status to Review. (Follow the agents guide baseline.)',\n planImprove: 'Improve plan.md and change Status to Review.',\n planApproval:\n 'Share plan.md with the user and get approval (`A` or `A OK` format).',\n tasksCreate:\n 'Write tasks.md and change Doc Status to Review. (Follow the agents/execute-task guide baseline.)',\n tasksNeedAtLeastOne: 'Write at least 1 task in tasks.md.',\n tasksImprove: 'Improve tasks.md and change Doc Status to Review.',\n tasksApproval:\n 'Share tasks.md with the user and get progress approval (`A` or `A OK` format). (Then set Doc Status to Approved)',\n docsCommitPlanning:\n 'cd \"{docsGitCwd}\" && git add \"{featurePath}\" && git commit -m \"docs(planning): {folderName} planning docs\"',\n issueCreateAndWrite:\n 'Generate the issue body template, refine goals/completion criteria, get explicit user OK, create the issue, then update issue number in tasks.md and prepare a docs commit.',\n issuePrepareFromDoc:\n 'Use `issue.md` to refine issue title/body/labels draft, get explicit user OK, then set status to `Ready`.',\n issueCreateFromDoc:\n 'When `issue.md` status is `Ready`, create the GitHub Issue and sync the created issue number into `tasks.md`.',\n docsCommitIssueUpdate:\n 'cd \"{docsGitCwd}\" && git add \"{featurePath}\" && git commit -m \"docs(#{issueNumber}): {folderName} docs update\"',\n docsCommitUpdate:\n 'cd \"{docsGitCwd}\" && git add \"{featurePath}\" && git commit -m \"docs: {folderName} docs update\"',\n projectCommitIssueUpdate:\n 'cd \"{projectGitCwd}\" && (git diff --cached --quiet && echo \"No staged files. Stage only files changed in this task with git add [files], then run again.\" && exit 1 || git commit -m \"feat(#{issueNumber}): {commitTopic}\")',\n projectCommitUpdate:\n 'cd \"{projectGitCwd}\" && (git diff --cached --quiet && echo \"No staged files. Stage only files changed in this task with git add [files], then run again.\" && exit 1 || git commit -m \"feat({folderName}): {commitTopic}\")',\n reviewFixCommitIssueGuidance:\n 'Commit PR review fixes. Stage only review-fix files, then commit with `fix(#{issueNumber}): <review-fix-summary>`. `<review-fix-summary>` must describe review comments resolved in this commit (do not reuse task titles).',\n reviewFixCommitGuidance:\n 'Commit PR review fixes. Stage only review-fix files, then commit with `fix(review): <review-fix-summary>`. `<review-fix-summary>` must describe review comments resolved in this commit (do not reuse task titles).',\n standaloneNeedsProjectRoot:\n 'Standalone mode requires projectRoot. (npx lee-spec-kit config --project-root ...)',\n createBranch:\n 'cd \"{projectGitCwd}\" && mkdir -p .worktrees && (git worktree add \".worktrees/feat-{issueNumber}-{slug}\" \"feat/{issueNumber}-{slug}\" || git worktree add -b \"feat/{issueNumber}-{slug}\" \".worktrees/feat-{issueNumber}-{slug}\") && echo \"worktree: {projectGitCwd}/.worktrees/feat-{issueNumber}-{slug}\"',\n worktreeCleanupCommand:\n 'cd \"{projectGitCwd}\" && git worktree remove \"{worktreePath}\" && git worktree prune',\n tasksAllDoneButNoChecklist:\n 'Create the completion checklist. Add verification items to the tasks.md \"Completion Criteria\" section, then mark satisfied items as [x] after user confirmation. Record final approval (OK) as well.',\n tasksAllDoneButChecklist:\n 'Proceed with remaining completion checklist items. Current progress: ({checked}/{total}) Mark items as [x] only after user confirmation and real verification. Record final approval (OK) as well.',\n finishDoingTask:\n 'Continue working on the current DOING/REVIEW task: \"{title}\" ({done}/{total}) After it is complete, share outcome/verification and get approval before marking DONE',\n startNextTodoTask:\n 'Start the next TODO task: \"{title}\" ({done}/{total}) Get approval (`A` or `A OK`) before marking DOING',\n checkTaskStatuses:\n 'Check task statuses. ({done}/{total})',\n taskCommitGateStrictBlock:\n 'Before moving to the next TODO task, you must satisfy the `1 task = 1 commit` rule. Check result: {reason}. Re-align task commit boundaries, then continue.',\n taskCommitGateWarnProceed:\n '⚠️ Task commit boundary warning: {reason}. You may continue, but `1 task = 1 commit` is recommended.',\n taskCommitGateReasonNoTasksCommit:\n 'No recent project code commit was found',\n taskCommitGateReasonTasksFileUnavailable:\n 'Cannot read recent project code commit history',\n taskCommitGateReasonDoneCount:\n 'DONE transitions detected in the latest tasks.md commit ({count})',\n taskCommitGateReasonMismatchLastDone:\n 'The latest project code commit does not match the last completed task',\n prLegacyAsk:\n 'tasks.md is missing PR/PR Status fields. Update to the latest template format? (CHECK required)',\n prePrReviewFieldMissing:\n 'tasks.md is missing the `Pre-PR Review` field. Add `- **Pre-PR Review**: Pending | Done` and run context again. (CHECK required)',\n prePrReviewFindingsMissing:\n 'tasks.md is missing `Pre-PR Findings` or uses an invalid format. Record it as `- **Pre-PR Findings**: major=0, minor=0`. (CHECK required)',\n prePrReviewEvidenceMissing:\n 'tasks.md `Pre-PR Evidence` is empty or placeholder. Add concrete review evidence (doc path/link/log). (CHECK required)',\n prePrReviewMajorBlocked:\n 'Pre-PR major findings are recorded ({count}). With `blockOnFindings=true`, PR creation is blocked until major findings are resolved/aligned.',\n prePrReviewMinorBlocked:\n 'Pre-PR minor findings are recorded ({count}). With `minorPolicy=block`, PR creation is blocked until minor findings are resolved/aligned.',\n prePrReviewRun:\n 'Run a pre-PR code review before creating the PR. Always execute the `{fallback}` baseline by following the `Pre-PR Baseline Checklist` section in the `create-pr` doc. Then use preferred skills ({skills}) for deeper review (if a better installed skill fits this change, propose it first). After completing it, set `Pre-PR Review` to Done in tasks.md. Major policy: {findingsPolicy}. Minor policy: {minorFindingsPolicy}',\n prePrReviewFindingsBlock:\n 'major findings must be fixed/aligned before PR creation',\n prePrReviewFindingsWarn:\n 'you may proceed after sharing the risks',\n prePrReviewMinorFindingsBlock:\n 'minor findings must also be fixed/aligned before PR creation',\n prePrReviewMinorFindingsWarn:\n 'you may proceed after documenting/sharing minor risks',\n prReviewFindingsFieldMissing:\n 'tasks.md is missing the `PR Review Findings` field. Add `- **PR Review Findings**: major=0, minor=0` and continue. (CHECK required)',\n prReviewFindingsMissing:\n 'tasks.md `PR Review Findings` is missing or invalid. Record it as `- **PR Review Findings**: major=0, minor=0`. (CHECK required)',\n prReviewEvidenceFieldMissing:\n 'tasks.md is missing the `PR Review Evidence` field. Add `- **PR Review Evidence**: -` and continue. (CHECK required)',\n prReviewEvidenceMissing:\n 'tasks.md `PR Review Evidence` is empty/placeholder or missing summary format. Record evidence as `summary: ...` (or `요약: ...`) for resolved/aligned review comments. (CHECK required)',\n prCreate:\n 'Generate the PR body template, refine changes/tests sections, get explicit user OK, create the PR, then record the PR link in tasks.md.',\n prCreatePrepareFromDoc:\n 'Use `pr.md` to refine PR title/body/labels draft, get explicit user OK, then set status to `Ready`.',\n prCreateExecuteFromDoc:\n 'When `pr.md` status is `Ready`, create the PR and record the PR link/status in `tasks.md`. (Keep only `pr.md` status as `Ready`.)',\n prCreatePrepare:\n 'Generate the PR body template, refine changes/tests sections, and get explicit user OK before PR creation.',\n prCreateExecute:\n 'Create the PR with the finalized body, then record the created PR link in tasks.md.',\n prCreateRequiredSequence:\n 'PR creation is a required 2-step sequence: (1) generate/refine PR body template + explicit user OK, (2) create PR + record PR link in tasks.md. Complete both in order.',\n prFillStatus:\n 'Set PR Status in tasks.md to Review. (Keep Review during PR creation/review stages.)',\n prReviewMergedSyncStatus:\n 'The remote PR is already merged. Update PR Status in tasks.md to Approved. (Also verify PR/review evidence fields are up to date.)',\n prResolveReview:\n 'Address review comments while keeping PR Status as Review. For review-fix commits, summarize resolved feedback in the commit message (do not reuse task titles). Once ready to merge, get explicit user OK and run the merge option. (On success, PR Status is synced to Approved.)',\n prReviewResolve:\n 'Review/analyze PR comments first, then apply required fixes while addressing comments. Keep PR Status as Review and keep `PR Review Findings/Evidence` updated. Run push only after explicit user OK.',\n prReviewPush:\n 'cd \"{projectGitCwd}\" && git push',\n prReviewRemoteBlocked:\n 'Remote PR checks indicate this PR is not ready to merge yet: {reasons}. Resolve review comments/check statuses, then re-check.',\n prReviewRemoteReasonChangesRequested:\n 'review decision is changes requested or additional review required',\n prReviewRemoteReasonClosed:\n 'PR is closed without merge (reopen or create a new PR)',\n prReviewRemoteReasonChecksFailing:\n '{count} failing check(s) detected',\n prReviewRemoteReasonChecksPending:\n '{count} pending check(s) detected',\n prReviewRemoteReasonMergeBlocked:\n 'merge state is blocked (`{status}`)',\n prReviewRemoteReasonUnavailable:\n 'remote PR status could not be verified (check gh auth/network/permissions)',\n prReviewMerge:\n 'When ready to merge, get explicit user OK and run the merge option. (On success, PR Status is synced to Approved.)',\n prReviewMergeCommand:\n 'npx lee-spec-kit github pr {featureRef} --merge --confirm OK',\n prRequestReview: 'Request review and set/keep PR Status as Review.',\n userRequestReplan:\n 'You can pause this step and handle a newly requested user requirement first. Summarize it, add it to tasks.md or split it into a separate Feature, then align document statuses and rerun context.',\n featureDone:\n 'Workflow requirements and all tasks/completion criteria are satisfied. This feature is done.',\n fallbackRerunContext:\n 'Cannot determine status. Check the docs and run context again.',\n },\n warnings: {\n projectBranchUnavailable:\n 'Cannot determine project branch. (In standalone mode, projectRoot is required.)',\n docsGitUnavailable:\n 'Cannot read git status for the docs repo. (Check repo location / git init.)',\n docsPathIgnored:\n 'Current feature docs path is ignored by git: {path} (docs commit detection may be limited).',\n docsUncommittedChanges:\n 'Docs changes are not committed. (Additional docs commit needed.) Check commit message rules against the git-workflow guide.',\n projectUncommittedChanges:\n 'Project code changes are not committed. (Additional code commit needed.)',\n legacyTasksDocStatusField:\n 'Legacy tasks.md format detected. Add a `Doc Status` field (Draft/Review/Approved) to enable tasks approval.',\n legacyTasksPrFields:\n 'Legacy tasks.md format detected. Add `PR` and `PR Status` fields before PR steps.',\n legacyTasksPrePrReviewField:\n 'Legacy tasks.md format detected. Add `Pre-PR Review` before PR steps. (`- **Pre-PR Review**: Pending | Done`)',\n legacyTasksPrePrFindingsField:\n 'Legacy tasks.md format detected. Add `Pre-PR Findings` before PR steps. (`- **Pre-PR Findings**: major=0, minor=0`)',\n legacyTasksPrePrEvidenceField:\n 'Legacy tasks.md format detected. Add `Pre-PR Evidence` before PR steps.',\n legacyTasksPrReviewFindingsField:\n 'Legacy tasks.md format detected. Add `PR Review Findings` before review iteration. (`- **PR Review Findings**: major=0, minor=0`)',\n legacyTasksPrReviewEvidenceField:\n 'Legacy tasks.md format detected. Add `PR Review Evidence` before review iteration.',\n workflowSpecNotApproved:\n 'Implementation is done but spec.md Status is not Approved. (Update spec.md Status to Approved.)',\n workflowPlanNotApproved:\n 'Implementation is done but plan.md Status is not Approved. (Update plan.md Status to Approved.)',\n workflowIssueMissing:\n 'Implementation is done but Issue Number is missing. (Fill Issue Number in tasks.md.)',\n workflowProjectUncommittedChanges:\n 'Commit project code changes before completing workflow. (Project worktree has uncommitted changes.)',\n workflowPrLinkMissing:\n 'Implementation is done but PR link is missing. (Fill the PR field in tasks.md.)',\n workflowPrStatusMissing:\n 'Implementation is done but PR Status is missing. (Set PR Status to Review during PR creation/review stages.)',\n workflowPrStatusNotApproved:\n 'Implementation is done but PR Status is not Approved. (Keep PR Status as Review before merge and sync to Approved only after successful merge.)',\n workflowPrReviewFindingsMissing:\n 'In review stage, `PR Review Findings` is missing or invalid. (Use `major=0, minor=0` format.)',\n workflowPrReviewEvidenceMissing:\n 'In review stage, `PR Review Evidence` is empty/placeholder or missing summary format. (Use `summary: ...` or `요약: ...`.)',\n workflowPrRemoteChangesRequested:\n 'Remote PR shows changes requested or additional review required. Address comments, push, then re-check.',\n workflowPrRemoteChecksFailing:\n 'Remote PR has {count} failing check(s). Fix failures, then re-check.',\n workflowPrRemoteChecksPending:\n 'Remote PR has {count} pending check(s). Wait for checks to complete, then re-check.',\n workflowPrePrReviewMissing:\n 'Implementation is done but `Pre-PR Review` is missing. (Add `- **Pre-PR Review**: Pending | Done` in tasks.md.)',\n workflowPrePrReviewNotDone:\n 'Implementation is done but `Pre-PR Review` is not Done. (Run pre-PR review, then update it to Done.)',\n workflowPrePrFindingsMissing:\n 'Implementation is done but `Pre-PR Findings` is missing or invalid. (Use `major=0, minor=0` format.)',\n workflowPrePrEvidenceMissing:\n 'Implementation is done but `Pre-PR Evidence` is empty. (Record review evidence.)',\n workflowPrePrFindingsBlocked:\n 'Implementation is done but major pre-PR findings remain ({count}) while `blockOnFindings=true`.',\n workflowPrePrMinorFindingsBlocked:\n 'Implementation is done but minor pre-PR findings remain ({count}) while `minorPolicy=block`.',\n },\n } as const;\n\nexport default en;\n","import ko from './locales/ko.js';\nimport en from './locales/en.js';\n\nexport type Lang = 'ko' | 'en';\n\nexport const DEFAULT_LANG: Lang = 'en';\n\nexport type I18nCategory = 'cli' | 'steps' | 'messages' | 'warnings';\n\nexport type I18nData = Record<I18nCategory, Record<string, string>>;\n\nexport function normalizeLang(lang: unknown): Lang {\n if (lang === 'ko' || lang === 'en') return lang;\n return DEFAULT_LANG;\n}\n\nexport function formatTemplate(\n template: string,\n vars: Record<string, string | number | undefined>\n): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, key: string) => {\n const value = vars[key];\n return value === undefined ? `{${key}}` : String(value);\n });\n}\n\nconst I18N = {\n ko,\n en,\n} as const satisfies Record<Lang, I18nData>;\n\ntype DefaultLocale = (typeof I18N)[typeof DEFAULT_LANG];\nexport type I18nKey<C extends I18nCategory> = keyof DefaultLocale[C] & string;\n\nexport function tr<C extends I18nCategory>(\n lang: Lang,\n category: C,\n key: I18nKey<C>,\n vars?: Record<string, string | number | undefined>\n): string;\nexport function tr(\n lang: Lang,\n category: I18nCategory,\n key: string,\n vars: Record<string, string | number | undefined> = {}\n): string {\n const safeLang = normalizeLang(lang);\n const template =\n I18N[safeLang]?.[category]?.[key] ??\n I18N[DEFAULT_LANG]?.[category]?.[key] ??\n I18N.ko?.[category]?.[key] ??\n `${category}.${key}`;\n return formatTemplate(template, vars);\n}\n","import { DEFAULT_LANG, normalizeLang, tr, type Lang } from './i18n.js';\n\nexport type CliReasonCode =\n | 'PROMPT_BLOCKED'\n | 'CONFIG_NOT_FOUND'\n | 'DOCS_NOT_FOUND'\n | 'LOCK_WAIT_TIMEOUT'\n | 'LOCK_ACQUIRE_TIMEOUT'\n | 'PRECONDITION_FAILED'\n | 'INVALID_ARGUMENT'\n | 'DUPLICATE_FEATURE_ID'\n | 'MISSING_FEATURE_ID'\n | 'INVALID_APPROVAL'\n | 'APPROVAL_REQUIRED'\n | 'CONTEXT_SELECTION_REQUIRED'\n | 'NO_ACTION_OPTIONS'\n | 'CONTEXT_STALE'\n | 'ACTION_NOT_AVAILABLE'\n | 'EXECUTION_NOT_COMMAND'\n | 'EXECUTION_FAILED'\n | 'UNKNOWN_ERROR';\n\nexport interface CliSuggestion {\n label: string;\n title: string;\n command?: string;\n}\n\nexport class CliError extends Error {\n readonly code: CliReasonCode;\n\n constructor(\n code: CliReasonCode,\n message: string,\n options?: { cause?: unknown; stack?: string }\n ) {\n super(message, options?.cause === undefined ? undefined : { cause: options.cause });\n this.name = 'CliError';\n this.code = code;\n if (options?.stack) this.stack = options.stack;\n }\n}\n\nexport function createCliError(code: CliReasonCode, message: string): CliError {\n return new CliError(code, message);\n}\n\nexport function toCliError(\n error: unknown,\n fallbackCode: CliReasonCode = 'UNKNOWN_ERROR'\n): CliError {\n if (error instanceof CliError) return error;\n if (error instanceof Error) {\n return new CliError(fallbackCode, error.message, {\n cause: error,\n stack: error.stack,\n });\n }\n return new CliError(fallbackCode, String(error), { cause: error });\n}\n\ntype SuggestionSeed = {\n titleKey: string;\n command?: string;\n};\n\nfunction withLabels(seeds: SuggestionSeed[], lang: Lang): CliSuggestion[] {\n return seeds.map((seed, index) => ({\n label: String.fromCharCode(65 + index),\n title: tr(lang, 'cli', `cliError.${seed.titleKey}`),\n command: seed.command,\n }));\n}\n\nconst SUGGESTION_MAP: Partial<Record<CliReasonCode, SuggestionSeed[]>> = {\n PROMPT_BLOCKED: [\n { titleKey: 'promptBlocked.retryWithoutNonInteractive' },\n { titleKey: 'promptBlocked.passRequiredFlags' },\n {\n titleKey: 'promptBlocked.checkRequiredOptions',\n command: 'npx lee-spec-kit <command> --help',\n },\n ],\n CONFIG_NOT_FOUND: [\n {\n titleKey: 'configOrDocs.initializeDocs',\n command: 'npx lee-spec-kit init',\n },\n {\n titleKey: 'configOrDocs.verifyDocsLocation',\n command: 'npx lee-spec-kit doctor --json',\n },\n { titleKey: 'configOrDocs.runFromDocsDir' },\n ],\n DOCS_NOT_FOUND: [\n {\n titleKey: 'configOrDocs.initializeDocs',\n command: 'npx lee-spec-kit init',\n },\n {\n titleKey: 'configOrDocs.verifyDocsLocation',\n command: 'npx lee-spec-kit doctor --json',\n },\n { titleKey: 'configOrDocs.runFromDocsDir' },\n ],\n LOCK_WAIT_TIMEOUT: [\n { titleKey: 'lock.retryLater' },\n { titleKey: 'lock.checkOtherProcess' },\n { titleKey: 'lock.inspectLockFiles' },\n ],\n LOCK_ACQUIRE_TIMEOUT: [\n { titleKey: 'lock.retryLater' },\n { titleKey: 'lock.checkOtherProcess' },\n { titleKey: 'lock.inspectLockFiles' },\n ],\n INVALID_ARGUMENT: [\n {\n titleKey: 'invalidArg.reviewUsage',\n command: 'npx lee-spec-kit <command> --help',\n },\n { titleKey: 'invalidArg.fixValues' },\n { titleKey: 'invalidArg.validateBeforeAutomation' },\n ],\n PRECONDITION_FAILED: [\n { titleKey: 'precondition.satisfyPreconditions' },\n {\n titleKey: 'precondition.runDoctor',\n command: 'npx lee-spec-kit doctor --json',\n },\n { titleKey: 'precondition.considerForce' },\n ],\n DUPLICATE_FEATURE_ID: [\n { titleKey: 'duplicateId.resolveDuplicates' },\n { titleKey: 'duplicateId.ensureUniqueFormat' },\n {\n titleKey: 'duplicateId.inspectJson',\n command: 'npx lee-spec-kit doctor --json',\n },\n ],\n MISSING_FEATURE_ID: [\n { titleKey: 'missingId.renameFolders' },\n { titleKey: 'missingId.alignDocs' },\n {\n titleKey: 'missingId.inspectJson',\n command: 'npx lee-spec-kit doctor --json',\n },\n ],\n INVALID_APPROVAL: [\n {\n titleKey: 'invalidApproval.fetchLatestOptions',\n command: 'npx lee-spec-kit context',\n },\n { titleKey: 'invalidApproval.replyWithValidLabel' },\n { titleKey: 'invalidApproval.oneLabelOnly' },\n ],\n APPROVAL_REQUIRED: [\n {\n titleKey: 'approvalRequired.reRunWithApprove',\n command: 'npx lee-spec-kit context --approve A',\n },\n {\n titleKey: 'approvalRequired.githubConfirmOk',\n command: 'npx lee-spec-kit github pr F001 --create --confirm OK',\n },\n { titleKey: 'approvalRequired.shareAndGetApproval' },\n ],\n CONTEXT_SELECTION_REQUIRED: [\n {\n titleKey: 'contextSelection.specifySelector',\n command: 'npx lee-spec-kit context <slug|F001|F001-slug>',\n },\n {\n titleKey: 'contextSelection.narrowByComponent',\n command: 'npx lee-spec-kit context --component <component>',\n },\n {\n titleKey: 'contextSelection.inspectAllCandidates',\n command: 'npx lee-spec-kit context --all',\n },\n ],\n NO_ACTION_OPTIONS: [\n {\n titleKey: 'noActionOptions.refreshContext',\n command: 'npx lee-spec-kit context',\n },\n { titleKey: 'noActionOptions.completeChecklist' },\n {\n titleKey: 'noActionOptions.listAllFeatures',\n command: 'npx lee-spec-kit context --all',\n },\n ],\n CONTEXT_STALE: [\n {\n titleKey: 'contextStale.refreshBeforeApprove',\n command: 'npx lee-spec-kit context',\n },\n {\n titleKey: 'contextStale.reapproveWithFreshLabel',\n command: 'npx lee-spec-kit context --approve A',\n },\n {\n titleKey: 'contextStale.executeAfterFreshApproval',\n command: 'npx lee-spec-kit context --approve A --execute',\n },\n ],\n ACTION_NOT_AVAILABLE: [\n {\n titleKey: 'contextStale.refreshBeforeApprove',\n command: 'npx lee-spec-kit context',\n },\n {\n titleKey: 'contextStale.reapproveWithFreshLabel',\n command: 'npx lee-spec-kit context --approve A',\n },\n {\n titleKey: 'contextStale.executeAfterFreshApproval',\n command: 'npx lee-spec-kit context --approve A --execute',\n },\n ],\n UNKNOWN_ERROR: [\n { titleKey: 'unknown.rerunAndCaptureLogs' },\n {\n titleKey: 'unknown.runDoctor',\n command: 'npx lee-spec-kit doctor --json',\n },\n { titleKey: 'unknown.reportReasonCode' },\n ],\n};\n\nexport function getCliErrorSuggestions(\n code: CliReasonCode,\n lang: Lang = DEFAULT_LANG\n): CliSuggestion[] {\n const resolvedLang = normalizeLang(lang);\n if (code === 'EXECUTION_FAILED' || code === 'EXECUTION_NOT_COMMAND') {\n return withLabels(\n [\n {\n titleKey:\n code === 'EXECUTION_NOT_COMMAND'\n ? 'execution.notCommand'\n : 'execution.failed',\n },\n {\n titleKey: 'execution.rerunContextAndExecute',\n command: 'npx lee-spec-kit context --approve A --execute',\n },\n { titleKey: 'execution.runManually' },\n ],\n resolvedLang\n );\n }\n\n const seeds = SUGGESTION_MAP[code] ?? SUGGESTION_MAP.UNKNOWN_ERROR ?? [];\n return withLabels(seeds, resolvedLang);\n}\n\nexport function printCliErrorSuggestions(\n suggestions: CliSuggestion[],\n lang: Lang = DEFAULT_LANG\n): void {\n if (suggestions.length === 0) return;\n console.error(tr(normalizeLang(lang), 'cli', 'cliError.headerNextOptionsError'));\n for (const suggestion of suggestions) {\n if (suggestion.command) {\n console.error(\n ` ${suggestion.label}. ${suggestion.title} (${suggestion.command})`\n );\n continue;\n }\n console.error(` ${suggestion.label}. ${suggestion.title}`);\n }\n}\n","import { createCliError } from './cli-error.js';\n\nexport const DEFAULT_MULTI_COMPONENTS = ['app'] as const;\n\nfunction unique(values: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const value of values) {\n if (seen.has(value)) continue;\n seen.add(value);\n out.push(value);\n }\n return out;\n}\n\nexport function parseComponentsOption(raw?: string): string[] {\n if (!raw) return [];\n return unique(\n raw\n .split(',')\n .map((part) => part.trim().toLowerCase())\n .filter(Boolean)\n );\n}\n\nexport function normalizeComponentList(input: unknown): string[] {\n if (!Array.isArray(input)) return [];\n\n const normalized = input\n .map((value) => String(value).trim().toLowerCase())\n .filter(Boolean);\n\n return unique(normalized);\n}\n\nexport function isValidComponentId(value: string): boolean {\n return /^[a-z][a-z0-9-]{0,39}$/.test(value);\n}\n\nexport function assertValidComponentId(value: string): void {\n if (!isValidComponentId(value)) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n `Invalid component \"${value}\". Use lowercase letters, numbers, and hyphens (max 40 chars).`\n );\n }\n}\n\nexport function resolveProjectComponents(\n projectType: 'single' | 'multi',\n configured: unknown\n): string[] {\n if (projectType === 'single') return [];\n\n const normalized = normalizeComponentList(configured);\n if (normalized.length > 0) return normalized;\n return [...DEFAULT_MULTI_COMPONENTS];\n}\n\nexport function assertAllowedComponent(\n component: string,\n allowed: string[]\n): void {\n if (!allowed.includes(component)) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n `Unknown component \"${component}\". Allowed: ${allowed.join(', ')}`\n );\n }\n}\n","export type ProjectType = 'single' | 'multi';\nexport type RawProjectType = ProjectType | 'fullstack';\n\nexport function normalizeProjectType(input: string): ProjectType {\n if (input === 'fullstack') return 'multi';\n if (input === 'multi') return 'multi';\n return 'single';\n}\n","/**\n * 입력 검증 및 보안 유틸리티\n */\nimport { createCliError } from './cli-error.js';\nimport { DEFAULT_LANG, Lang, tr } from './i18n.js';\n\nexport interface ValidationResult {\n valid: boolean;\n error?: string;\n}\n\n// 허용된 프로젝트 타입\nconst VALID_PROJECT_TYPES = ['single', 'multi', 'fullstack'] as const;\nexport type ProjectType = (typeof VALID_PROJECT_TYPES)[number];\n\n// 허용된 언어\nconst VALID_LANGUAGES = ['ko', 'en'] as const;\nexport type Language = (typeof VALID_LANGUAGES)[number];\n\n// 허용된 워크플로우 모드\nconst VALID_WORKFLOW_MODES = ['github', 'local'] as const;\nexport type WorkflowMode = (typeof VALID_WORKFLOW_MODES)[number];\n\n/**\n * 안전한 이름 검증 (Path Traversal 방지)\n * 허용: 영문, 숫자, 하이픈, 언더스코어\n */\nexport function validateSafeName(name: string): ValidationResult {\n return validateSafeNameWithLang(name, DEFAULT_LANG);\n}\n\nexport function validateSafeNameWithLang(name: string, lang: Lang): ValidationResult {\n if (!name || name.trim().length === 0) {\n return { valid: false, error: tr(lang, 'cli', 'validation.nameEmpty') };\n }\n\n if (name.length > 100) {\n return { valid: false, error: tr(lang, 'cli', 'validation.nameTooLong') };\n }\n\n // Path Traversal 공격 패턴 차단\n if (name.includes('..') || name.includes('/') || name.includes('\\\\')) {\n return {\n valid: false,\n error: tr(lang, 'cli', 'validation.nameTraversal'),\n };\n }\n\n // null bytes 차단\n if (name.includes('\\0')) {\n return { valid: false, error: tr(lang, 'cli', 'validation.nameNullByte') };\n }\n\n // 허용된 문자만 사용 (영문, 숫자, 하이픈, 언더스코어, 한글)\n const safePattern = /^[\\w가-힣-]+$/;\n if (!safePattern.test(name)) {\n return {\n valid: false,\n error: tr(lang, 'cli', 'validation.nameInvalidChars'),\n };\n }\n\n // 예약어 차단\n const reservedNames = [\n '.',\n '..',\n 'con',\n 'prn',\n 'aux',\n 'nul',\n 'com1',\n 'com2',\n 'com3',\n 'com4',\n 'lpt1',\n 'lpt2',\n 'lpt3',\n 'lpt4',\n ];\n if (reservedNames.includes(name.toLowerCase())) {\n return { valid: false, error: tr(lang, 'cli', 'validation.nameReserved') };\n }\n\n return { valid: true };\n}\n\n/**\n * 프로젝트 타입 검증\n */\nexport function validateProjectType(type: string): ValidationResult {\n return validateProjectTypeWithLang(type, DEFAULT_LANG);\n}\n\nexport function validateProjectTypeWithLang(type: string, lang: Lang): ValidationResult {\n if (!VALID_PROJECT_TYPES.includes(type as ProjectType)) {\n return {\n valid: false,\n error: tr(lang, 'cli', 'validation.projectTypeInvalid', {\n values: VALID_PROJECT_TYPES.join(', '),\n }),\n };\n }\n return { valid: true };\n}\n\n/**\n * 언어 검증\n */\nexport function validateLanguage(lang: string): ValidationResult {\n return validateLanguageWithLang(lang, DEFAULT_LANG);\n}\n\nexport function validateLanguageWithLang(value: string, lang: Lang): ValidationResult {\n if (!VALID_LANGUAGES.includes(value as Language)) {\n return {\n valid: false,\n error: tr(lang, 'cli', 'validation.languageInvalid', {\n values: VALID_LANGUAGES.join(', '),\n }),\n };\n }\n return { valid: true };\n}\n\n/**\n * 워크플로우 모드 검증\n */\nexport function validateWorkflowMode(mode: string): ValidationResult {\n return validateWorkflowModeWithLang(mode, DEFAULT_LANG);\n}\n\nexport function validateWorkflowModeWithLang(\n mode: string,\n lang: Lang\n): ValidationResult {\n if (!VALID_WORKFLOW_MODES.includes(mode as WorkflowMode)) {\n return {\n valid: false,\n error: tr(lang, 'cli', 'validation.workflowModeInvalid', {\n values: VALID_WORKFLOW_MODES.join(', '),\n }),\n };\n }\n return { valid: true };\n}\n\n/**\n * Feature ID 검증 (F001, F002 형식)\n */\nexport function validateFeatureId(id: string): ValidationResult {\n return validateFeatureIdWithLang(id, DEFAULT_LANG);\n}\n\nexport function validateFeatureIdWithLang(id: string, lang: Lang): ValidationResult {\n if (!id || id.trim().length === 0) {\n return { valid: false, error: tr(lang, 'cli', 'validation.featureIdEmpty') };\n }\n\n const featureIdPattern = /^F\\d{3,}$/;\n if (!featureIdPattern.test(id)) {\n return {\n valid: false,\n error: tr(lang, 'cli', 'validation.featureIdFormat'),\n };\n }\n\n return { valid: true };\n}\n\n/**\n * 경로 검증 및 정규화\n */\nexport function validatePath(inputPath: string): ValidationResult {\n return validatePathWithLang(inputPath, DEFAULT_LANG);\n}\n\nexport function validatePathWithLang(inputPath: string, lang: Lang): ValidationResult {\n if (!inputPath || inputPath.trim().length === 0) {\n return { valid: false, error: tr(lang, 'cli', 'validation.pathEmpty') };\n }\n\n // null bytes 차단\n if (inputPath.includes('\\0')) {\n return { valid: false, error: tr(lang, 'cli', 'validation.pathNullByte') };\n }\n\n return { valid: true };\n}\n\n/**\n * 검증 실패 시 에러 출력 헬퍼\n */\nexport function assertValid(\n result: ValidationResult,\n context?: string,\n lang: Lang = DEFAULT_LANG\n): void {\n if (!result.valid) {\n const message = context\n ? `${context}: ${result.error}`\n : (result.error ?? tr(lang, 'cli', 'validation.genericFailed'));\n throw createCliError('INVALID_ARGUMENT', message);\n }\n}\n","export function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => globalThis.setTimeout(resolve, ms));\n}\n","import path from 'path';\nimport fs from 'fs-extra';\nimport os from 'os';\nimport { createHash } from 'crypto';\nimport { execFileSync } from 'child_process';\nimport { createCliError } from './cli-error.js';\nimport { sleep } from './async.js';\n\ninterface FileLockOptions {\n timeoutMs?: number;\n pollMs?: number;\n staleMs?: number;\n owner?: string;\n}\n\ninterface LockPayload {\n pid?: number;\n}\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst DEFAULT_POLL_MS = 150;\nconst DEFAULT_STALE_MS = 2 * 60_000;\nconst RUNTIME_GIT_DIRNAME = 'lee-spec-kit.runtime';\nconst RUNTIME_TEMP_DIRNAME = 'lee-spec-kit-runtime';\n\nfunction toScopeKey(value: string): string {\n return createHash('sha1').update(path.resolve(value)).digest('hex').slice(0, 16);\n}\n\nfunction getTempRuntimeDir(scopePath: string): string {\n return path.join(os.tmpdir(), RUNTIME_TEMP_DIRNAME, toScopeKey(scopePath));\n}\n\nfunction resolveGitRuntimeDir(cwd: string): string | null {\n try {\n const out = execFileSync(\n 'git',\n ['rev-parse', '--git-path', RUNTIME_GIT_DIRNAME],\n {\n cwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'ignore'],\n }\n ).trim();\n if (!out) return null;\n return path.isAbsolute(out) ? out : path.resolve(cwd, out);\n } catch {\n return null;\n }\n}\n\nexport function getRuntimeStateDir(cwd: string): string {\n const resolved = path.resolve(cwd);\n return resolveGitRuntimeDir(resolved) ?? getTempRuntimeDir(resolved);\n}\n\nexport function getDocsLockPath(docsDir: string): string {\n return path.join(\n getRuntimeStateDir(docsDir),\n 'locks',\n `docs-${toScopeKey(docsDir)}.lock`\n );\n}\n\nexport function getInitLockPath(targetDir: string): string {\n return path.join(\n getRuntimeStateDir(path.dirname(path.resolve(targetDir))),\n 'locks',\n `init-${toScopeKey(targetDir)}.lock`\n );\n}\n\nexport function getApprovalTicketStorePath(docsDir: string): string {\n return path.join(\n getRuntimeStateDir(docsDir),\n 'tickets',\n `approval-${toScopeKey(docsDir)}.json`\n );\n}\n\nexport function getProjectExecutionLockPath(cwd: string): string {\n return path.join(getRuntimeStateDir(cwd), 'locks', 'project.lock');\n}\n\nasync function isStaleLock(lockPath: string, staleMs: number): Promise<boolean> {\n try {\n const stat = await fs.stat(lockPath);\n if (Date.now() - stat.mtimeMs <= staleMs) {\n return false;\n }\n\n const payload = await readLockPayload(lockPath);\n if (\n typeof payload?.pid === 'number' &&\n Number.isFinite(payload.pid) &&\n isProcessAlive(payload.pid)\n ) {\n return false;\n }\n\n return true;\n } catch {\n return false;\n }\n}\n\nasync function readLockPayload(lockPath: string): Promise<LockPayload | null> {\n try {\n const raw = await fs.readFile(lockPath, 'utf8');\n const parsed = JSON.parse(raw) as LockPayload;\n if (!parsed || typeof parsed !== 'object') return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction isProcessAlive(pid: number): boolean {\n if (!Number.isInteger(pid) || pid <= 0) return false;\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n const code = (error as { code?: string }).code;\n if (code === 'EPERM') {\n // Alive but not permitted to signal.\n return true;\n }\n return false;\n }\n}\n\nasync function tryAcquire(\n lockPath: string,\n owner: string | undefined\n): Promise<boolean> {\n await fs.ensureDir(path.dirname(lockPath));\n try {\n const fd = await fs.open(lockPath, 'wx');\n const payload = JSON.stringify(\n { pid: process.pid, owner: owner ?? 'unknown', createdAt: new Date().toISOString() },\n null,\n 2\n );\n await fs.writeFile(fd, `${payload}\\n`, { encoding: 'utf8' });\n await fs.close(fd);\n return true;\n } catch (error) {\n if ((error as { code?: string }).code === 'EEXIST') {\n return false;\n }\n throw error;\n }\n}\n\nexport async function waitForLockRelease(\n lockPath: string,\n options: Pick<FileLockOptions, 'timeoutMs' | 'pollMs' | 'staleMs'> = {}\n): Promise<void> {\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const pollMs = options.pollMs ?? DEFAULT_POLL_MS;\n const staleMs = options.staleMs ?? DEFAULT_STALE_MS;\n const startedAt = Date.now();\n\n while (await fs.pathExists(lockPath)) {\n if (await isStaleLock(lockPath, staleMs)) {\n await fs.remove(lockPath);\n break;\n }\n if (Date.now() - startedAt > timeoutMs) {\n throw createCliError('LOCK_WAIT_TIMEOUT', `Timed out waiting for lock: ${lockPath}`);\n }\n await sleep(pollMs);\n }\n}\n\nexport async function withFileLock<T>(\n lockPath: string,\n task: () => Promise<T>,\n options: FileLockOptions = {}\n): Promise<T> {\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const pollMs = options.pollMs ?? DEFAULT_POLL_MS;\n const staleMs = options.staleMs ?? DEFAULT_STALE_MS;\n const startedAt = Date.now();\n\n while (true) {\n const acquired = await tryAcquire(lockPath, options.owner);\n if (acquired) break;\n\n if (await isStaleLock(lockPath, staleMs)) {\n await fs.remove(lockPath);\n continue;\n }\n\n if (Date.now() - startedAt > timeoutMs) {\n throw createCliError(\n 'LOCK_ACQUIRE_TIMEOUT',\n `Timed out acquiring lock: ${lockPath}`\n );\n }\n await sleep(pollMs);\n }\n\n try {\n return await task();\n } finally {\n await fs.remove(lockPath).catch(() => {\n // Ignore cleanup errors; stale lock detection will recover.\n });\n }\n}\n","export function getLocalDateString(date = new Date()): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n","import path from 'path';\nimport fs from 'fs-extra';\n\nexport const ENGINE_MANAGED_AGENT_FILES = [\n 'agents.md',\n 'git-workflow.md',\n 'issue-template.md',\n 'pr-template.md',\n] as const;\n\nexport const ENGINE_MANAGED_AGENT_DIRS = ['skills'] as const;\n\nexport const ENGINE_MANAGED_FEATURE_PATH = path.join(\n 'features',\n 'feature-base'\n);\n\nexport async function pruneEngineManagedDocs(\n docsDir: string\n): Promise<string[]> {\n const removed: string[] = [];\n\n for (const file of ENGINE_MANAGED_AGENT_FILES) {\n const target = path.join(docsDir, 'agents', file);\n if (await fs.pathExists(target)) {\n await fs.remove(target);\n removed.push(path.relative(docsDir, target));\n }\n }\n\n for (const dir of ENGINE_MANAGED_AGENT_DIRS) {\n const target = path.join(docsDir, 'agents', dir);\n if (await fs.pathExists(target)) {\n await fs.remove(target);\n removed.push(path.relative(docsDir, target));\n }\n }\n\n const featureBasePath = path.join(docsDir, ENGINE_MANAGED_FEATURE_PATH);\n if (await fs.pathExists(featureBasePath)) {\n await fs.remove(featureBasePath);\n removed.push(path.relative(docsDir, featureBasePath));\n }\n\n return removed;\n}\n","import { execFileSync } from 'child_process';\n\nexport function runGitOrThrow(\n args: string[],\n cwd: string,\n options: {\n encoding?: BufferEncoding;\n stdio?: 'pipe' | 'ignore' | ['ignore', 'pipe', 'pipe'] | ['ignore', 'pipe', 'ignore'];\n } = {}\n): string {\n const encoding = options.encoding ?? 'utf-8';\n const stdio = options.stdio ?? 'ignore';\n const out = execFileSync('git', args, {\n cwd,\n encoding,\n stdio,\n });\n\n if (typeof out === 'string') return out.trim();\n if (Buffer.isBuffer(out)) return out.toString(encoding).trim();\n return '';\n}\n\nexport function runGitCapture(args: string[], cwd: string): string | undefined {\n try {\n return runGitOrThrow(args, cwd, { stdio: ['ignore', 'pipe', 'pipe'] });\n } catch {\n return undefined;\n }\n}\n","import { createCliError } from '../cli-error.js';\nimport { assertValidComponentId } from '../components.js';\nimport { Lang, tr } from '../i18n.js';\n\nexport function parseStandaloneMultiProjectRootJson(\n raw: string\n): Record<string, string> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--project-root` for standalone multi must be a JSON object. Example: {\"app\":\"/path/app\",\"api\":\"/path/api\"}'\n );\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--project-root` for standalone multi must be a JSON object.'\n );\n }\n\n const out: Record<string, string> = {};\n for (const [component, value] of Object.entries(parsed as Record<string, unknown>)) {\n const normalizedComponent = component.trim().toLowerCase();\n const normalizedRoot = String(value || '').trim();\n if (!normalizedComponent || !normalizedRoot) continue;\n assertValidComponentId(normalizedComponent);\n out[normalizedComponent] = normalizedRoot;\n }\n\n return out;\n}\n\nexport function parseComponentProjectRootsOption(raw: string): Record<string, string> {\n const out: Record<string, string> = {};\n const entries = raw\n .split(',')\n .map((part) => part.trim())\n .filter(Boolean);\n\n if (entries.length === 0) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--component-project-roots` requires at least one `component=/path` pair.'\n );\n }\n\n for (const entry of entries) {\n const eqIndex = entry.indexOf('=');\n if (eqIndex <= 0 || eqIndex === entry.length - 1) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n `Invalid component project root entry: ${entry}. Use \\`component=/absolute/or/relative/path\\`.`\n );\n }\n const component = entry.slice(0, eqIndex).trim().toLowerCase();\n const root = entry.slice(eqIndex + 1).trim();\n if (!component || !root) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n `Invalid component project root entry: ${entry}.`\n );\n }\n assertValidComponentId(component);\n out[component] = root;\n }\n\n return out;\n}\n\nexport function getComponentFeaturesReadme(lang: Lang, component: string): string {\n if (lang === 'ko') {\n return `# ${component} Feature 목록\n\n이 폴더는 \\`${component}\\` 컴포넌트의 Feature 문서를 보관합니다.\n\n- 새 Feature 생성: \\`npx lee-spec-kit feature <name> --component ${component}\\`\n- 상태 점검: \\`npx lee-spec-kit status\\`\n- 컨텍스트 확인: \\`npx lee-spec-kit context --component ${component}\\`\n`;\n }\n\n return `# ${component} Features\n\nThis directory stores feature documents for the \\`${component}\\` component.\n\n- Create a new feature: \\`npx lee-spec-kit feature <name> --component ${component}\\`\n- Check status: \\`npx lee-spec-kit status\\`\n- Show context: \\`npx lee-spec-kit context --component ${component}\\`\n`;\n}\n\nexport function validatePromptPathValue(\n value: string,\n lang: Lang\n): true | string {\n return value.trim() ? true : tr(lang, 'cli', 'init.validation.enterPath');\n}\n\nexport function validatePromptUrlValue(\n value: string,\n lang: Lang\n): true | string {\n return value.trim() ? true : tr(lang, 'cli', 'init.validation.enterUrl');\n}\n","import { Command } from 'commander';\nimport prompts from 'prompts';\nimport chalk from 'chalk';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { copyTemplates, replaceInFiles } from '../utils/template.js';\nimport { getTemplatesDir } from '../utils/paths.js';\nimport {\n assertValidComponentId,\n parseComponentsOption,\n} from '../utils/components.js';\nimport { normalizeProjectType } from '../utils/project-type.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport {\n validateSafeNameWithLang,\n validateProjectTypeWithLang,\n validateLanguageWithLang,\n validateWorkflowModeWithLang,\n assertValid,\n} from '../utils/validation.js';\nimport { execFileSync } from 'child_process';\nimport { getInitLockPath, withFileLock } from '../utils/lock.js';\nimport { getLocalDateString } from '../utils/date.js';\nimport { pruneEngineManagedDocs } from '../utils/engine-managed-docs.js';\nimport { runGitOrThrow } from '../utils/git-run.js';\nimport {\n getComponentFeaturesReadme,\n parseComponentProjectRootsOption,\n parseStandaloneMultiProjectRootJson,\n validatePromptPathValue,\n validatePromptUrlValue,\n} from '../utils/init/options.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\n\n// Git 레포지토리 내부인지 확인\nfunction checkGitRepo(cwd: string): boolean {\n try {\n execFileSync('git', ['rev-parse', '--is-inside-work-tree'], {\n cwd,\n stdio: 'ignore',\n });\n return true;\n } catch {\n return false;\n }\n}\n\ninterface InitOptions {\n name?: string;\n type?: 'single' | 'multi' | 'fullstack';\n components?: string;\n lang?: 'ko' | 'en';\n workflow?: 'github' | 'local';\n dir?: string;\n docsRepo?: 'embedded' | 'standalone';\n projectRoot?: string;\n componentProjectRoots?: string;\n pushDocs?: boolean;\n docsRemote?: string;\n yes?: boolean;\n force?: boolean;\n nonInteractive?: boolean;\n}\n\nexport function initCommand(program: Command): void {\n program\n .command('init')\n .description('Initialize project documentation structure')\n .option('-n, --name <name>', 'Project name (default: current folder name)')\n .option('-t, --type <type>', 'Project type: single | multi (fullstack alias)')\n .option(\n '--components <list>',\n 'Component list for multi (comma-separated, e.g. app,api,worker)'\n )\n .option('-l, --lang <lang>', 'Language: ko | en (default: en)')\n .option('--workflow <mode>', 'Workflow mode: github | local')\n .option('-d, --dir <dir>', 'Target directory (default: ./docs)', './docs')\n .option('--docs-repo <mode>', 'Docs repository mode: embedded | standalone')\n .option(\n '--project-root <path>',\n 'Project root path (standalone single) or JSON map for standalone multi'\n )\n .option(\n '--component-project-roots <pairs>',\n 'Component roots for standalone multi (comma-separated, e.g. app=/path/app,api=/path/api,worker=/path/worker)'\n )\n .option('--push-docs', 'Push standalone docs to remote')\n .option('--docs-remote <url>', 'Remote URL for standalone docs repository')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .option('-f, --force', 'Overwrite target directory if not empty')\n .option('--non-interactive', 'Fail instead of prompting for input')\n .action(async (options: InitOptions) => {\n try {\n await runInit(options);\n } catch (error) {\n if (error instanceof Error && error.message === 'canceled') {\n const lang = options.lang ?? DEFAULT_LANG;\n console.log(\n chalk.yellow(`\\n${tr(lang, 'cli', 'common.canceled')}`)\n );\n return;\n }\n const lang = options.lang ?? DEFAULT_LANG;\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n process.exitCode = 1;\n return;\n }\n });\n}\n\nasync function runInit(options: InitOptions): Promise<void> {\n const cwd = process.cwd();\n const defaultName = path.basename(cwd);\n\n let projectName = options.name || defaultName;\n let projectType = options.type;\n let components = parseComponentsOption(options.components);\n let lang = options.lang || 'en';\n let workflowMode = options.workflow || 'github';\n let docsRepo: 'embedded' | 'standalone' = options.docsRepo || 'embedded';\n let pushDocs: boolean | undefined =\n typeof options.pushDocs === 'boolean' ? options.pushDocs : undefined;\n let docsRemote: string | undefined = options.docsRemote;\n let projectRoot: string | Record<string, string> | undefined;\n const componentProjectRoots = options.componentProjectRoots\n ? parseComponentProjectRootsOption(options.componentProjectRoots)\n : {};\n const targetDir = path.resolve(cwd, options.dir || './docs');\n const skipPrompts = !!options.yes || !!options.nonInteractive;\n\n if (options.docsRepo && !['embedded', 'standalone'].includes(options.docsRepo)) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--docs-repo` must be `embedded` or `standalone`.'\n );\n }\n\n if (docsRemote && typeof pushDocs === 'undefined') {\n // docs remote is meaningful only when standalone docs push is enabled.\n pushDocs = true;\n }\n\n if (options.projectRoot) {\n projectRoot = options.projectRoot;\n }\n\n // Git 환경 감지\n const isInsideGitRepo = checkGitRepo(cwd);\n\n // 대화형 프롬프트 (--yes / --non-interactive가 없을 때)\n if (!skipPrompts) {\n // 언어 선택을 먼저 받아 이후 모든 프롬프트/메시지를 동일 언어로 출력\n if (!options.lang) {\n const langResponse = await prompts(\n [\n {\n type: 'select',\n name: 'lang',\n message: tr(DEFAULT_LANG, 'cli', 'init.selectLangPrompt'),\n choices: [\n { title: 'English (en)', value: 'en' },\n { title: '한국어 (ko)', value: 'ko' },\n ],\n initial: 0,\n },\n ],\n {\n onCancel: () => {\n throw new Error('canceled');\n },\n }\n );\n lang = langResponse.lang || lang;\n }\n\n // Git 환경 안내\n console.log();\n console.log(\n chalk.blue(`${tr(lang, 'cli', 'init.currentDirectoryLabel')}: ${cwd}`)\n );\n if (isInsideGitRepo) {\n console.log(chalk.green(tr(lang, 'cli', 'init.gitDetected')));\n console.log();\n console.log(\n chalk.gray(\n tr(lang, 'cli', 'init.insideProjectRoot')\n )\n );\n console.log(\n chalk.gray(\n tr(lang, 'cli', 'init.modeEmbeddedDesc')\n )\n );\n console.log(\n chalk.gray(\n tr(lang, 'cli', 'init.modeStandaloneDesc')\n )\n );\n console.log(\n chalk.gray(\n tr(lang, 'cli', 'init.modeStandaloneMove')\n )\n );\n } else {\n console.log(\n chalk.yellow(\n tr(lang, 'cli', 'init.gitNotDetected')\n )\n );\n console.log(chalk.gray(tr(lang, 'cli', 'init.gitNotDetectedDetail')));\n }\n console.log();\n\n const response = await prompts(\n [\n {\n type: options.name ? null : 'text',\n name: 'projectName',\n message: tr(lang, 'cli', 'init.prompt.projectName'),\n initial: defaultName,\n },\n {\n type: options.type ? null : 'select',\n name: 'projectType',\n message: tr(lang, 'cli', 'init.prompt.projectType'),\n choices: [\n {\n title: tr(lang, 'cli', 'init.choice.projectType.single.title'),\n value: 'single',\n description: tr(lang, 'cli', 'init.choice.projectType.single.desc'),\n },\n {\n title: tr(lang, 'cli', 'init.choice.projectType.fullstack.title'),\n value: 'multi',\n description: tr(lang, 'cli', 'init.choice.projectType.fullstack.desc'),\n },\n ],\n initial: 1,\n },\n {\n type: options.docsRepo ? null : 'select',\n name: 'docsRepo',\n message: tr(lang, 'cli', 'init.prompt.docsMode'),\n choices: [\n {\n title: tr(lang, 'cli', 'init.choice.docsRepo.embedded.title'),\n value: 'embedded',\n description: tr(lang, 'cli', 'init.choice.docsRepo.embedded.desc'),\n },\n {\n title: tr(lang, 'cli', 'init.choice.docsRepo.standalone.title'),\n value: 'standalone',\n description: tr(lang, 'cli', 'init.choice.docsRepo.standalone.desc'),\n },\n ],\n initial: 0,\n },\n ],\n {\n onCancel: () => {\n throw new Error('canceled');\n },\n }\n );\n\n projectName = response.projectName || projectName;\n projectType = response.projectType || projectType;\n docsRepo = response.docsRepo || 'embedded';\n\n // standalone 선택 시 추가 질문\n if (docsRepo === 'standalone') {\n // projectRoot 입력 (프로젝트 타입에 따라 다름)\n const resolvedType = normalizeProjectType(\n String(projectType || response.projectType || 'multi')\n );\n\n if (resolvedType === 'multi') {\n const promptComponents = components.length > 0 ? components : ['app'];\n const rootMap: Record<string, string> = {};\n\n if (typeof projectRoot === 'string' && projectRoot.trim()) {\n Object.assign(rootMap, parseStandaloneMultiProjectRootJson(projectRoot));\n } else if (projectRoot && typeof projectRoot === 'object') {\n for (const [component, root] of Object.entries(projectRoot)) {\n const normalized = component.trim().toLowerCase();\n const normalizedRoot = String(root || '').trim();\n if (!normalized || !normalizedRoot) continue;\n rootMap[normalized] = normalizedRoot;\n }\n }\n\n Object.assign(rootMap, componentProjectRoots);\n\n for (const component of promptComponents) {\n const seeded = (rootMap[component] || '').trim();\n if (seeded) {\n rootMap[component] = seeded;\n continue;\n }\n const message = tr(lang, 'cli', 'init.prompt.componentRepoPath', {\n component,\n });\n\n const response = await prompts(\n [\n {\n type: 'text',\n name: 'componentRoot',\n message,\n validate: (value: string) => validatePromptPathValue(value, lang),\n },\n ],\n {\n onCancel: () => {\n throw new Error('canceled');\n },\n }\n );\n rootMap[component] = (response.componentRoot || '').trim();\n }\n\n projectRoot = rootMap;\n } else {\n const projectRootResponse = await prompts(\n [\n {\n type: options.projectRoot ? null : 'text',\n name: 'projectRoot',\n message: tr(lang, 'cli', 'init.prompt.projectRepoPath'),\n validate: (value: string) => validatePromptPathValue(value, lang),\n },\n ],\n {\n onCancel: () => {\n throw new Error('canceled');\n },\n }\n );\n\n projectRoot =\n projectRootResponse.projectRoot ||\n (typeof projectRoot === 'string' ? projectRoot : '');\n }\n\n const standaloneResponse = await prompts(\n [\n {\n type: typeof options.pushDocs === 'boolean' ? null : 'select',\n name: 'pushDocs',\n message: tr(lang, 'cli', 'init.prompt.pushMode'),\n choices: [\n {\n title: tr(lang, 'cli', 'init.choice.push.local'),\n value: false,\n },\n {\n title: tr(lang, 'cli', 'init.choice.push.remote'),\n value: true,\n },\n ],\n initial: 0,\n },\n ],\n {\n onCancel: () => {\n throw new Error('canceled');\n },\n }\n );\n\n pushDocs =\n typeof standaloneResponse.pushDocs === 'boolean'\n ? standaloneResponse.pushDocs\n : pushDocs;\n\n // remote 선택 시 URL 입력\n if (pushDocs === true) {\n const remoteResponse = await prompts(\n [\n {\n type: options.docsRemote ? null : 'text',\n name: 'docsRemote',\n message: tr(lang, 'cli', 'init.prompt.remoteUrl'),\n validate: (value: string) => validatePromptUrlValue(value, lang),\n },\n ],\n {\n onCancel: () => {\n throw new Error('canceled');\n },\n }\n );\n\n docsRemote = remoteResponse.docsRemote || docsRemote;\n }\n }\n }\n\n // 타입 기본값\n if (!projectType) {\n projectType = 'multi';\n }\n\n // 입력 검증\n assertValid(\n validateSafeNameWithLang(projectName, lang),\n tr(lang, 'cli', 'validation.context.projectName'),\n lang\n );\n assertValid(\n validateProjectTypeWithLang(projectType, lang),\n tr(lang, 'cli', 'validation.context.projectType'),\n lang\n );\n projectType = normalizeProjectType(projectType);\n assertValid(\n validateLanguageWithLang(lang, lang),\n tr(lang, 'cli', 'validation.context.language'),\n lang\n );\n assertValid(\n validateWorkflowModeWithLang(workflowMode, lang),\n tr(lang, 'cli', 'validation.context.workflowMode'),\n lang\n );\n\n if (projectType === 'single') {\n if (components.length > 0) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--components` can only be used when `--type multi`.'\n );\n }\n } else {\n if (components.length === 0) {\n components = ['app'];\n }\n components.forEach(assertValidComponentId);\n }\n\n if (docsRepo !== 'standalone') {\n if (\n options.projectRoot ||\n options.componentProjectRoots ||\n typeof options.pushDocs === 'boolean' ||\n options.docsRemote\n ) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n 'Standalone-only options require `--docs-repo standalone`.'\n );\n }\n projectRoot = undefined;\n pushDocs = undefined;\n docsRemote = undefined;\n } else {\n if (projectType === 'multi') {\n const multiRoot: Record<string, string> = {};\n\n if (typeof projectRoot === 'string' && projectRoot.trim()) {\n Object.assign(multiRoot, parseStandaloneMultiProjectRootJson(projectRoot));\n } else if (projectRoot && typeof projectRoot === 'object') {\n for (const [component, root] of Object.entries(projectRoot)) {\n const normalized = component.trim().toLowerCase();\n const normalizedRoot = String(root || '').trim();\n if (!normalized || !normalizedRoot) continue;\n multiRoot[normalized] = normalizedRoot;\n }\n }\n\n Object.assign(multiRoot, componentProjectRoots);\n\n const unknownComponents = Object.keys(multiRoot).filter(\n (component) => !components.includes(component)\n );\n if (unknownComponents.length > 0) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n `Standalone multi project roots contain unknown components: ${unknownComponents.join(', ')}. Allowed: ${components.join(', ')}`\n );\n }\n\n const missingComponents = components.filter(\n (component) => !(multiRoot[component] || '').trim()\n );\n if (missingComponents.length > 0) {\n throw createCliError(\n 'PROMPT_BLOCKED',\n `Standalone multi mode requires project roots for all components: ${missingComponents.join(', ')}. Use \\`--component-project-roots <component=/path,...>\\` or \\`--project-root '{\"component\":\"/path\"}'\\`.`\n );\n }\n\n projectRoot = Object.fromEntries(\n components.map((component) => [component, multiRoot[component].trim()])\n );\n } else {\n if (options.componentProjectRoots) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--component-project-roots` can only be used when `--type multi`.'\n );\n }\n const singleRoot = typeof projectRoot === 'string' ? projectRoot.trim() : '';\n if (!singleRoot) {\n throw createCliError(\n 'PROMPT_BLOCKED',\n 'Standalone single mode requires `--project-root`.'\n );\n }\n projectRoot = singleRoot;\n }\n\n if (typeof pushDocs !== 'boolean') {\n pushDocs = false;\n }\n\n if (pushDocs === true && !docsRemote?.trim()) {\n throw createCliError(\n 'PROMPT_BLOCKED',\n '`--push-docs` requires `--docs-remote <url>` in standalone mode.'\n );\n }\n if (pushDocs === false) {\n docsRemote = undefined;\n }\n }\n\n const initLockPath = getInitLockPath(targetDir);\n await withFileLock(\n initLockPath,\n async () => {\n // 디렉토리 존재 확인\n if (await fs.pathExists(targetDir)) {\n const files = await fs.readdir(targetDir);\n if (files.length > 0) {\n if (options.force) {\n // Continue without confirmation in force mode.\n } else if (options.nonInteractive) {\n throw createCliError(\n 'PROMPT_BLOCKED',\n `Target directory is not empty: ${targetDir}. Re-run with \\`--force\\` or without \\`--non-interactive\\` to confirm overwrite.`\n );\n } else {\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: tr(lang, 'cli', 'init.prompt.overwrite', { dir: targetDir }),\n initial: false,\n });\n\n if (!overwrite) {\n console.log(chalk.yellow(tr(lang, 'cli', 'common.canceled')));\n return;\n }\n }\n }\n }\n\n console.log();\n console.log(chalk.blue(tr(lang, 'cli', 'init.log.creatingDocs')));\n console.log(\n chalk.gray(` ${tr(lang, 'cli', 'init.log.projectLabel')}: ${projectName}`)\n );\n console.log(\n chalk.gray(` ${tr(lang, 'cli', 'init.log.typeLabel')}: ${projectType}`)\n );\n console.log(chalk.gray(` ${tr(lang, 'cli', 'init.log.langLabel')}: ${lang}`));\n console.log(\n chalk.gray(` ${tr(lang, 'cli', 'init.log.pathLabel')}: ${targetDir}`)\n );\n console.log();\n\n // 템플릿 복사 (common only)\n const templatesDir = getTemplatesDir();\n const commonPath = path.join(templatesDir, lang, 'common');\n if (!(await fs.pathExists(commonPath))) {\n throw new Error(\n tr(lang, 'cli', 'init.error.templateNotFound', { path: commonPath })\n );\n }\n await copyTemplates(commonPath, targetDir);\n\n if (projectType === 'multi') {\n const featuresRoot = path.join(targetDir, 'features');\n for (const component of components) {\n const componentDir = path.join(featuresRoot, component);\n await fs.ensureDir(componentDir);\n const readmePath = path.join(componentDir, 'README.md');\n if (!(await fs.pathExists(readmePath))) {\n await fs.writeFile(\n readmePath,\n getComponentFeaturesReadme(lang, component),\n 'utf-8'\n );\n }\n }\n }\n\n // 플레이스홀더 치환\n const featurePath =\n projectType === 'multi'\n ? 'docs/features/{component}'\n : 'docs/features';\n const replacements: Record<string, string> = {\n '{{projectName}}': projectName,\n '{{projectType}}': projectType,\n '{{date}}': getLocalDateString(),\n '{{featurePath}}': featurePath,\n };\n\n await replaceInFiles(targetDir, replacements);\n\n // CLI-managed docs/templates are not project-managed artifacts.\n await pruneEngineManagedDocs(targetDir);\n\n // Config 파일 생성\n const config: Record<string, unknown> = {\n projectName,\n projectType,\n ...(projectType === 'multi' ? { components } : {}),\n lang,\n createdAt: getLocalDateString(),\n docsRepo,\n workflow: {\n mode: workflowMode,\n codeDirtyScope: 'auto',\n taskCommitGate: 'warn',\n prePrReview: {\n skills: ['code-review-excellence'],\n minorPolicy: 'warn',\n },\n },\n pr: {\n screenshots: { upload: false },\n },\n // Approval policy for \"requiresUserCheck\" actions shown by `context`.\n // - builtin (default): Use requiresUserCheck embedded in steps/actions.\n // - category: Override by action category (recommended for automation).\n // - steps: Override by step number (fragile; not recommended).\n approval: { mode: 'builtin' },\n };\n\n // standalone일 때만 pushDocs, projectRoot 추가\n if (docsRepo === 'standalone') {\n config.pushDocs = pushDocs;\n if (pushDocs && docsRemote) {\n config.docsRemote = docsRemote;\n }\n if (projectRoot) {\n config.projectRoot = projectRoot;\n }\n }\n\n const configPath = path.join(targetDir, '.lee-spec-kit.json');\n await fs.writeJson(configPath, config, { spaces: 2 });\n\n console.log(chalk.green(tr(lang, 'cli', 'init.log.docsCreated')));\n console.log();\n\n // Git 초기화\n await initGit(cwd, targetDir, docsRepo, lang, pushDocs, docsRemote);\n\n console.log(chalk.blue(tr(lang, 'cli', 'init.log.nextStepsTitle')));\n console.log(\n chalk.gray(tr(lang, 'cli', 'init.log.nextSteps1', { docsDir: targetDir }))\n );\n console.log(chalk.gray(tr(lang, 'cli', 'init.log.nextSteps2')));\n console.log(chalk.gray(tr(lang, 'cli', 'init.log.nextSteps3')));\n console.log();\n },\n { owner: 'init' }\n );\n}\n\nasync function initGit(\n cwd: string,\n targetDir: string,\n docsRepo: 'embedded' | 'standalone',\n lang: 'ko' | 'en',\n pushDocs?: boolean,\n docsRemote?: string\n): Promise<void> {\n try {\n // embedded: manage git in current workspace\n // standalone: manage git in docs directory itself\n const gitWorkdir = docsRepo === 'standalone' ? targetDir : cwd;\n\n const getCachedStagedFiles = (workdir: string): string[] | null => {\n try {\n const out = runGitOrThrow(['diff', '--cached', '--name-only'], workdir, {\n stdio: ['ignore', 'pipe', 'ignore'],\n });\n if (!out) return [];\n return out.split('\\n').map((s) => s.trim()).filter(Boolean);\n } catch {\n return null;\n }\n };\n\n const isPathIgnored = (workdir: string, relativePath: string): boolean => {\n try {\n execFileSync('git', ['check-ignore', '-q', '--', relativePath], {\n cwd: workdir,\n stdio: 'ignore',\n });\n return true;\n } catch (error) {\n const status = (error as { status?: number } | undefined)?.status;\n if (status === 1) return false;\n return false;\n }\n };\n\n const toGitPath = (input: string): string =>\n input.replace(/\\\\/g, '/').replace(/^\\.\\//, '');\n\n const toRepoRelativePath = (workdir: string, relativePath: string): string => {\n if (relativePath === '.') return '.';\n try {\n const prefix = runGitOrThrow(['rev-parse', '--show-prefix'], workdir, {\n stdio: ['ignore', 'pipe', 'ignore'],\n });\n const normalizedPrefix = toGitPath(prefix).replace(/\\/+$/, '');\n const normalizedPath = toGitPath(relativePath);\n return normalizedPrefix ? `${normalizedPrefix}/${normalizedPath}` : normalizedPath;\n } catch {\n return toGitPath(relativePath);\n }\n };\n\n // Git이 이미 초기화되어 있는지 확인\n try {\n runGitOrThrow(['rev-parse', '--is-inside-work-tree'], gitWorkdir);\n // Git이 이미 있으면 docs만 커밋\n console.log(chalk.blue(tr(lang, 'cli', 'init.log.gitRepoDetectedCommit')));\n } catch {\n // Git이 없으면 초기화\n console.log(chalk.blue(tr(lang, 'cli', 'init.log.gitInit')));\n runGitOrThrow(['init'], gitWorkdir);\n }\n\n // docs 폴더 스테이징\n const relativePath =\n docsRepo === 'standalone' ? '.' : path.relative(cwd, targetDir);\n const stagedBeforeAdd = getCachedStagedFiles(gitWorkdir);\n if (relativePath === '.' && stagedBeforeAdd && stagedBeforeAdd.length > 0) {\n console.log(\n chalk.yellow(\n tr(lang, 'cli', 'init.warn.stagedChangesSkip')\n )\n );\n console.log(chalk.gray(tr(lang, 'cli', 'init.warn.commitManually')));\n console.log();\n return;\n }\n\n if (relativePath !== '.' && isPathIgnored(gitWorkdir, relativePath)) {\n const repoRelativePath = toRepoRelativePath(gitWorkdir, relativePath);\n console.log(\n chalk.yellow(\n tr(lang, 'cli', 'init.warn.docsPathIgnoredSkipCommit', {\n path: repoRelativePath,\n })\n )\n );\n console.log(\n chalk.gray(\n tr(lang, 'cli', 'init.warn.docsPathIgnoredHint', {\n path: repoRelativePath,\n })\n )\n );\n console.log();\n return;\n }\n\n runGitOrThrow(['add', relativePath], gitWorkdir);\n\n // 커밋\n // pathspec을 사용해 \"docs만\" 커밋 (다른 staged 변경이 있어도 포함되지 않음)\n runGitOrThrow(\n ['commit', '-m', 'init: docs 구조 초기화 (lee-spec-kit)', '--', relativePath],\n gitWorkdir\n );\n\n // standalone + remote 선택 시 origin 추가\n if (docsRepo === 'standalone' && pushDocs && docsRemote) {\n try {\n runGitOrThrow(['remote', 'add', 'origin', docsRemote], gitWorkdir);\n console.log(\n chalk.green(tr(lang, 'cli', 'init.log.gitRemoteSet', { remote: docsRemote }))\n );\n } catch {\n // remote가 이미 존재할 수 있음\n console.log(chalk.yellow(tr(lang, 'cli', 'init.warn.gitRemoteExists')));\n }\n }\n\n console.log(chalk.green(tr(lang, 'cli', 'init.log.gitInitialCommitDone')));\n console.log();\n } catch {\n // Git 관련 오류는 무시하고 경고만 출력\n console.log(\n chalk.yellow(tr(lang, 'cli', 'init.warn.skipGitInit'))\n );\n console.log();\n }\n}\n","import path from 'path';\nimport fs from 'fs-extra';\nimport { resolveProjectComponents } from './components.js';\nimport { normalizeProjectType, ProjectType, RawProjectType } from './project-type.js';\n\nexport interface ProjectConfig {\n docsDir: string;\n projectName?: string;\n projectType: ProjectType;\n components?: string[];\n lang: 'ko' | 'en';\n docsRepo?: 'embedded' | 'standalone';\n pushDocs?: boolean;\n docsRemote?: string;\n projectRoot?: string | Record<string, string>;\n pr?: {\n screenshots?: {\n /**\n * When true, agents may upload screenshots (e.g. to GitHub Release assets)\n * and include the URL in PR body.\n * When false (default), screenshot upload is disabled and the PR body should omit screenshot sections.\n */\n upload?: boolean;\n };\n };\n workflow?: {\n /**\n * github: issue/branch/pr/review workflow required (default)\n * local: local-only workflow (issue/branch/pr/review not required)\n */\n mode?: 'github' | 'local';\n /**\n * Optional per-requirement overrides.\n */\n requireIssue?: boolean;\n requireBranch?: boolean;\n requirePr?: boolean;\n requireReview?: boolean;\n /**\n * Scope for \"project code dirty\" detection used by context/status/workflow completion.\n * - repo: entire project repo worktree\n * - component: only paths mapped to the current feature component\n * - auto: single=>repo, multi=>component\n *\n * Backward compatibility: when omitted, runtime defaults to \"repo\".\n */\n codeDirtyScope?: 'repo' | 'component' | 'auto';\n /**\n * Optional component path mapping (relative to project git root) used when\n * codeDirtyScope resolves to \"component\".\n */\n componentPaths?: Record<string, string[]>;\n /**\n * Gate policy for moving from one task to the next.\n * - off: disable the gate\n * - warn: show warning but allow next task\n * - strict: block only when the latest tasks.md commit adds more than one DONE transition\n *\n * Backward compatibility: when omitted, runtime defaults to \"warn\".\n */\n taskCommitGate?: 'off' | 'warn' | 'strict';\n /**\n * Pre-PR self review stage configuration.\n * Enabled by default when PR is required.\n */\n prePrReview?: {\n /**\n * Whether to enforce a pre-PR review stage before PR creation.\n */\n enabled?: boolean;\n /**\n * Preferred skill names in priority order.\n * If omitted, the runtime default list is used.\n */\n skills?: string[];\n /**\n * Baseline checklist policy for pre-PR review.\n * - builtin-checklist: pre-PR baseline checklist in create-pr doc\n */\n fallback?: 'builtin-checklist';\n /**\n * When true (default), major findings should be addressed before PR creation.\n */\n blockOnFindings?: boolean;\n /**\n * How to handle minor findings.\n * - warn (default): allow PR creation after sharing minor risks\n * - block: require resolving/alignment before PR creation\n */\n minorPolicy?: 'warn' | 'block';\n };\n };\n approval?: {\n /**\n * builtin: Use `requiresUserCheck` embedded in steps/actions (default).\n * steps: Determine check requirement only by step number list.\n * category: Determine check requirement by action category.\n */\n mode?: 'builtin' | 'steps' | 'category';\n /**\n * Only used when mode === \"steps\".\n * Steps that require explicit user check. (e.g. [3, 5, 12])\n */\n requireCheckSteps?: number[];\n /**\n * @deprecated Use requireCheckSteps instead.\n */\n requireOkSteps?: number[];\n /**\n * Only used when mode === \"category\".\n * - keep (default): keep action's builtin requiresUserCheck unless overridden\n * - require: require check unless overridden\n * - skip: skip check unless overridden\n */\n default?: 'keep' | 'require' | 'skip';\n /**\n * Only used when mode === \"category\".\n * Categories that always require check.\n */\n requireCheckCategories?: string[];\n /**\n * @deprecated Use requireCheckCategories instead.\n */\n requireOkCategories?: string[];\n /**\n * Only used when mode === \"category\".\n * Categories that never require check.\n */\n skipCheckCategories?: string[];\n /**\n * @deprecated Use skipCheckCategories instead.\n */\n skipOkCategories?: string[];\n };\n}\n\ninterface ConfigFile {\n projectName: string;\n projectType: RawProjectType;\n components?: string[];\n lang: 'ko' | 'en';\n createdAt: string;\n docsRepo?: 'embedded' | 'standalone';\n pushDocs?: boolean;\n docsRemote?: string;\n projectRoot?: string | Record<string, string>;\n pr?: ProjectConfig['pr'];\n workflow?: ProjectConfig['workflow'];\n approval?: ProjectConfig['approval'];\n}\n\nfunction getAncestorDirs(startDir: string): string[] {\n const dirs: string[] = [];\n let current = path.resolve(startDir);\n\n while (true) {\n dirs.push(current);\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n\n return dirs;\n}\n\nfunction hasWorkspaceBoundary(dir: string): boolean {\n return (\n fs.existsSync(path.join(dir, 'package.json')) ||\n fs.existsSync(path.join(dir, '.git'))\n );\n}\n\nfunction getSearchBaseDirs(cwd: string): string[] {\n const ancestors = getAncestorDirs(cwd);\n const boundaryIndex = ancestors.findIndex(hasWorkspaceBoundary);\n if (boundaryIndex === -1) {\n // Without a clear workspace boundary, keep lookup local to cwd to avoid\n // accidentally binding to unrelated ancestor docs directories.\n return [ancestors[0]];\n }\n return ancestors.slice(0, boundaryIndex + 1);\n}\n\nconst FEATURE_FOLDER_PATTERN = /^F\\d{3,}-/i;\n\nfunction normalizeComponentKeys(value: unknown): string[] {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return [];\n return Object.keys(value)\n .map((key) => key.trim().toLowerCase())\n .filter(Boolean);\n}\n\nasync function inferComponentsFromFeaturesDir(docsDir: string): Promise<string[]> {\n const featuresPath = path.join(docsDir, 'features');\n if (!(await fs.pathExists(featuresPath))) return [];\n\n const entries = await fs.readdir(featuresPath, { withFileTypes: true });\n const inferred = entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name.trim().toLowerCase())\n .filter(\n (name) =>\n !!name &&\n name !== 'feature-base' &&\n !FEATURE_FOLDER_PATTERN.test(name)\n );\n\n return [...new Set(inferred)];\n}\n\nexport async function getConfig(cwd: string): Promise<ProjectConfig | null> {\n const explicitDocsDir = (\n process.env.LEE_SPEC_KIT_DOCS_DIR ||\n ''\n ).trim();\n const baseDirs = [\n ...(explicitDocsDir ? [path.resolve(explicitDocsDir)] : []),\n ...getSearchBaseDirs(cwd),\n ];\n\n const visitedBaseDirs = new Set<string>();\n const visitedDocsDirs = new Set<string>();\n for (const baseDir of baseDirs) {\n const resolvedBaseDir = path.resolve(baseDir);\n if (visitedBaseDirs.has(resolvedBaseDir)) continue;\n visitedBaseDirs.add(resolvedBaseDir);\n\n const possibleDocsDirs = [path.join(resolvedBaseDir, 'docs'), resolvedBaseDir];\n for (const docsDir of possibleDocsDirs) {\n const resolvedDocsDir = path.resolve(docsDir);\n if (visitedDocsDirs.has(resolvedDocsDir)) continue;\n visitedDocsDirs.add(resolvedDocsDir);\n\n // 1. Config 파일 우선 확인\n const configPath = path.join(resolvedDocsDir, '.lee-spec-kit.json');\n if (await fs.pathExists(configPath)) {\n try {\n const configFile: ConfigFile = await fs.readJson(configPath);\n const projectType = normalizeProjectType(configFile.projectType);\n const inferredComponents = [\n ...normalizeComponentKeys(configFile.projectRoot),\n ...(await inferComponentsFromFeaturesDir(resolvedDocsDir)),\n ];\n const components = resolveProjectComponents(\n projectType,\n Array.isArray(configFile.components) && configFile.components.length > 0\n ? configFile.components\n : inferredComponents\n );\n return {\n docsDir: resolvedDocsDir,\n projectName: configFile.projectName,\n projectType,\n components:\n projectType === 'multi' ? components : undefined,\n lang: configFile.lang,\n docsRepo: configFile.docsRepo,\n pushDocs: configFile.pushDocs,\n docsRemote: configFile.docsRemote,\n projectRoot: configFile.projectRoot,\n pr: configFile.pr,\n workflow: configFile.workflow,\n approval: configFile.approval,\n };\n } catch {\n // JSON 파싱 실패 시 폴백\n }\n }\n\n // 2. 폴백: 기존 방식 (폴더 구조 기반 감지)\n const agentsPath = path.join(resolvedDocsDir, 'agents');\n const featuresPath = path.join(resolvedDocsDir, 'features');\n\n if (\n (await fs.pathExists(agentsPath)) &&\n (await fs.pathExists(featuresPath))\n ) {\n // 프로젝트 타입 감지\n const inferredComponents = await inferComponentsFromFeaturesDir(resolvedDocsDir);\n const projectType = inferredComponents.length > 0 ? 'multi' : 'single';\n const components =\n projectType === 'multi'\n ? resolveProjectComponents('multi', inferredComponents)\n : undefined;\n\n // 언어 감지 (project-managed agents docs 기반)\n const langProbeCandidates = [\n path.join(agentsPath, 'custom.md'),\n path.join(agentsPath, 'constitution.md'),\n path.join(agentsPath, 'agents.md'),\n ];\n let lang: 'ko' | 'en' = 'en';\n for (const candidate of langProbeCandidates) {\n if (!(await fs.pathExists(candidate))) continue;\n const content = await fs.readFile(candidate, 'utf-8');\n // 한국어가 포함되어 있는지 확인 (기본값은 en)\n if (/[가-힣]/.test(content)) {\n lang = 'ko';\n break;\n }\n }\n\n return { docsDir: resolvedDocsDir, projectType, components, lang };\n }\n }\n }\n\n return null;\n}\n","import fs from 'fs-extra';\nimport path from 'path';\nimport type { Lang } from './i18n.js';\n\nfunction normalizeTrailingBlankLines(content: string): string {\n return content.replace(/\\n{3,}/g, '\\n\\n').trimEnd() + '\\n';\n}\n\nfunction sanitizeSpecForLocal(content: string): string {\n const withoutIssueLine = content\n .split('\\n')\n .filter(\n (line) =>\n !/^\\s*-\\s*\\*\\*(Issue Number|이슈 번호)\\*\\*\\s*:/.test(line)\n )\n .join('\\n');\n return normalizeTrailingBlankLines(withoutIssueLine);\n}\n\nfunction sanitizeTasksForLocal(content: string, lang: Lang): string {\n let next = content;\n\n next = next.replace(\n /^##\\s+GitHub Issue\\s*$/m,\n lang === 'ko' ? '## 로컬 추적 정보' : '## Local Tracking'\n );\n\n const lines = next.split('\\n');\n const filtered: string[] = [];\n\n for (const line of lines) {\n if (\n /^\\s*-\\s*\\*\\*(Issue|PR|PR Status|PR 상태|Pre-PR Review|PR 전 리뷰)\\*\\*\\s*:/.test(\n line\n )\n ) {\n continue;\n }\n if (\n /^\\s*-\\s*\\*\\*(Pre-PR Findings|Pre-PR Evidence|PR 전 리뷰 Findings|PR 전 리뷰 Evidence)\\*\\*\\s*:/.test(\n line\n )\n ) {\n continue;\n }\n if (/^\\s*-\\s*(Example|Values)\\s*:/.test(line)) continue;\n if (/^\\s*-\\s*(예|값)\\s*:/.test(line)) continue;\n if (/^\\s*-\\s*Mark\\s+`?Done`?/i.test(line)) continue;\n if (/^\\s*-\\s*사전 코드리뷰 완료 후/.test(line)) continue;\n if (/^\\s*-\\s*Update with final findings counts from pre-PR review/i.test(line))\n continue;\n if (/^\\s*-\\s*Example:\\s*review note link/i.test(line)) continue;\n if (/^\\s*-\\s*사전 리뷰 최종 결과/.test(line)) continue;\n if (/^\\s*-\\s*예:\\s*리뷰 노트 링크/.test(line)) continue;\n filtered.push(line);\n }\n\n next = filtered.join('\\n');\n next = next\n .replace(/feat\\/\\{issue-number\\}-/g, 'feat/')\n .replace(/feat\\/\\{이슈번호\\}-/g, 'feat/')\n .replace(/feat\\/-/g, 'feat/');\n\n return normalizeTrailingBlankLines(next);\n}\n\nasync function patchMarkdownIfExists(\n filePath: string,\n transform: (content: string) => string\n): Promise<void> {\n if (!(await fs.pathExists(filePath))) return;\n const content = await fs.readFile(filePath, 'utf-8');\n await fs.writeFile(filePath, transform(content), 'utf-8');\n}\n\nexport async function applyLocalWorkflowTemplateToFeatureDir(\n featureDir: string,\n lang: Lang\n): Promise<void> {\n await patchMarkdownIfExists(path.join(featureDir, 'spec.md'), sanitizeSpecForLocal);\n await patchMarkdownIfExists(path.join(featureDir, 'tasks.md'), (content) =>\n sanitizeTasksForLocal(content, lang)\n );\n // Local workflow does not require remote issue/PR tracking docs.\n await fs.remove(path.join(featureDir, 'issue.md'));\n await fs.remove(path.join(featureDir, 'pr.md'));\n}\n\nexport async function applyLocalWorkflowTemplateToFeatureBase(\n docsDir: string,\n lang: Lang\n): Promise<void> {\n const baseDir = path.join(docsDir, 'features', 'feature-base');\n await applyLocalWorkflowTemplateToFeatureDir(baseDir, lang);\n}\n","import { Command } from 'commander';\nimport prompts from 'prompts';\nimport chalk from 'chalk';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { getConfig } from '../utils/config.js';\nimport {\n assertAllowedComponent,\n resolveProjectComponents,\n} from '../utils/components.js';\nimport { replaceInFiles } from '../utils/template.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport {\n getDocsLockPath,\n getInitLockPath,\n waitForLockRelease,\n withFileLock,\n} from '../utils/lock.js';\nimport {\n validateSafeNameWithLang,\n validateFeatureIdWithLang,\n assertValid,\n} from '../utils/validation.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\nimport { getLocalDateString } from '../utils/date.js';\nimport { applyLocalWorkflowTemplateToFeatureDir } from '../utils/local-workflow-template.js';\nimport { getTemplatesDir } from '../utils/paths.js';\nimport { sleep } from '../utils/async.js';\n\ninterface FeatureOptions {\n component?: string;\n id?: string;\n desc?: string;\n nonInteractive?: boolean;\n json?: boolean;\n}\n\ninterface FeatureRunResult {\n featureId: string;\n featureName: string;\n component?: string;\n featurePath: string;\n featurePathFromDocs: string;\n}\n\nexport function featureCommand(program: Command): void {\n program\n .command('feature <name>')\n .description('Create a new feature folder')\n .option('--component <component>', 'Component name (multi only)')\n .option('--id <id>', 'Feature ID (default: auto)')\n .option('-d, --desc <description>', 'Feature description for spec.md')\n .option('--non-interactive', 'Fail instead of prompting for input')\n .option('--json', 'Output in JSON format for agents')\n .action(async (name: string, options: FeatureOptions) => {\n try {\n const result = await runFeature(name, options);\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'ok',\n reasonCode: 'FEATURE_CREATED',\n featureId: result.featureId,\n featureName: result.featureName,\n component: result.component,\n featurePath: result.featurePath,\n featurePathFromDocs: result.featurePathFromDocs,\n },\n null,\n 2\n )\n );\n }\n } catch (error) {\n if (error instanceof Error && error.message === 'canceled') {\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'canceled',\n reasonCode: 'CANCELED',\n })\n );\n return;\n }\n console.log(chalk.yellow(`\\n${tr(lang, 'cli', 'common.canceled')}`));\n return;\n }\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'error',\n reasonCode: cliError.code,\n error: cliError.message,\n suggestions,\n })\n );\n process.exitCode = 1;\n return;\n }\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n process.exitCode = 1;\n return;\n }\n });\n}\n\nasync function runFeature(\n name: string,\n options: FeatureOptions\n): Promise<FeatureRunResult> {\n const cwd = process.cwd();\n let config = await getConfig(cwd);\n\n if (!config) {\n config = await waitForConfigAfterInit(cwd);\n }\n\n if (!config) {\n throw createCliError(\n 'DOCS_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.docsNotFound')\n );\n }\n\n const { docsDir, projectType, lang } = config;\n const projectName = config.projectName;\n const configuredComponents = resolveProjectComponents(\n projectType,\n config.components\n );\n\n // 기능 이름 검증 (Path Traversal 방지)\n assertValid(\n validateSafeNameWithLang(name, lang),\n tr(lang, 'cli', 'validation.context.featureName'),\n lang\n );\n\n let component = (options.component || '').trim().toLowerCase();\n if (!component) component = '';\n\n if (projectType === 'single' && component) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--component` can only be used in multi mode.'\n );\n }\n\n // multi인 경우 component 선택 필요\n if (projectType === 'multi' && !component) {\n if (configuredComponents.length === 1) {\n component = configuredComponents[0];\n } else if (options.nonInteractive) {\n throw createCliError(\n 'PROMPT_BLOCKED',\n '`--component` is required in multi mode when using `--non-interactive`.'\n );\n } else {\n const response = await prompts(\n {\n type: 'select',\n name: 'component',\n message: tr(lang, 'cli', 'feature.selectRepo'),\n choices: configuredComponents.map((value) => ({\n title: value.toUpperCase(),\n value,\n })),\n },\n {\n onCancel: () => {\n throw new Error('canceled');\n },\n }\n );\n component = response.component;\n }\n }\n\n if (projectType === 'multi') {\n assertAllowedComponent(component, configuredComponents);\n }\n\n const docsLockPath = getDocsLockPath(docsDir);\n return withFileLock(\n docsLockPath,\n async () => {\n // Feature ID 생성\n let featureId: string;\n if (options.id) {\n assertValid(\n validateFeatureIdWithLang(options.id, lang),\n tr(lang, 'cli', 'validation.context.featureId'),\n lang\n );\n featureId = options.id;\n } else {\n featureId = await getNextFeatureId(docsDir, projectType, configuredComponents);\n }\n\n // 기능 폴더 경로\n let featuresDir: string;\n if (projectType === 'multi') {\n featuresDir = path.join(docsDir, 'features', component);\n } else {\n featuresDir = path.join(docsDir, 'features');\n }\n\n const featureFolderName = `${featureId}-${name}`;\n const featureDir = path.join(featuresDir, featureFolderName);\n\n // 중복 확인\n if (await fs.pathExists(featureDir)) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'feature.folderExists', { path: featureDir })\n );\n }\n\n // Feature templates are sourced from CLI built-ins (single source of truth).\n const featureBasePath = path.join(\n getTemplatesDir(),\n lang,\n 'common',\n 'features',\n 'feature-base'\n );\n if (!(await fs.pathExists(featureBasePath))) {\n throw createCliError('DOCS_NOT_FOUND', tr(lang, 'cli', 'feature.baseNotFound'));\n }\n\n await fs.copy(featureBasePath, featureDir);\n\n // 플레이스홀더 치환\n const idNumber = featureId.replace('F', '');\n const repoName =\n projectType === 'multi'\n ? `{{projectName}}-${component}`\n : '{{projectName}}';\n\n const replacements: Record<string, string> = {\n '{{projectName}}': projectName ?? '{{projectName}}',\n // ko placeholders\n '{기능명}': name,\n '{번호}': idNumber,\n '{결정 제목}': `${name} 결정`,\n '{YYYY-MM-DD}': getLocalDateString(),\n '{component}': component || '',\n '{{projectName}}-{component}': repoName,\n '{be|fe}': component || '',\n '{이슈번호}': '',\n '{{description}}': options.desc || '',\n\n // en placeholders\n '{feature-name}': name,\n '{number}': idNumber,\n '{Decision Title}': `${name} design decision`,\n '{issue-number}': '',\n '{{projectName}}-{be|fe}': repoName,\n };\n\n // 한국어 템플릿의 경우 추가 치환\n if (lang === 'en') {\n replacements['기능 ID'] = 'Feature ID';\n replacements['기능명'] = 'Feature Name';\n replacements['대상 레포'] = 'Target Repo';\n replacements['이슈 번호'] = 'Issue Number';\n replacements['작성일'] = 'Created';\n replacements['상태'] = 'Status';\n }\n\n await replaceInFiles(featureDir, replacements);\n\n if (config.workflow?.mode === 'local') {\n await applyLocalWorkflowTemplateToFeatureDir(featureDir, lang);\n }\n\n if (!options.json) {\n console.log();\n console.log(chalk.green(tr(lang, 'cli', 'feature.created', { path: featureDir })));\n console.log();\n console.log(chalk.blue(tr(lang, 'cli', 'feature.nextStepsTitle')));\n console.log(chalk.gray(tr(lang, 'cli', 'feature.nextSteps1', { path: featureDir })));\n console.log(chalk.gray(tr(lang, 'cli', 'feature.nextSteps2')));\n console.log(chalk.gray(tr(lang, 'cli', 'feature.nextSteps3')));\n console.log();\n }\n\n return {\n featureId,\n featureName: name,\n component: projectType === 'multi' ? component : undefined,\n featurePath: featureDir,\n featurePathFromDocs: path.relative(docsDir, featureDir),\n };\n },\n { owner: 'feature' }\n );\n}\n\nasync function waitForConfigAfterInit(\n cwd: string,\n timeoutMs = 8_000\n): Promise<Awaited<ReturnType<typeof getConfig>> | null> {\n const explicitDocsDir = (process.env.LEE_SPEC_KIT_DOCS_DIR || '').trim();\n const candidates = [\n ...(explicitDocsDir ? [path.resolve(explicitDocsDir)] : []),\n path.resolve(cwd, 'docs'),\n path.resolve(cwd),\n ];\n\n const endAt = Date.now() + timeoutMs;\n\n while (Date.now() < endAt) {\n const config = await getConfig(cwd);\n if (config) return config;\n\n let sawLock = false;\n for (const dir of candidates) {\n const initLockPath = getInitLockPath(dir);\n const docsLockPath = getDocsLockPath(dir);\n for (const lockPath of [initLockPath, docsLockPath]) {\n if (await fs.pathExists(lockPath)) {\n sawLock = true;\n await waitForLockRelease(lockPath, {\n timeoutMs: Math.max(200, endAt - Date.now()),\n pollMs: 120,\n });\n }\n }\n }\n\n if (!sawLock) {\n await sleep(150);\n }\n }\n\n return getConfig(cwd);\n}\n\nasync function getNextFeatureId(\n docsDir: string,\n projectType: string,\n components: string[]\n): Promise<string> {\n const featuresDir = path.join(docsDir, 'features');\n let max = 0;\n\n const scanDirs: string[] = [];\n\n if (projectType === 'multi') {\n scanDirs.push(...components.map((component) => path.join(featuresDir, component)));\n } else {\n scanDirs.push(featuresDir);\n }\n\n for (const dir of scanDirs) {\n if (!(await fs.pathExists(dir))) continue;\n\n const entries = await fs.readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const match = entry.name.match(/^F(\\d+)-/);\n if (match) {\n const num = parseInt(match[1], 10);\n if (num > max) max = num;\n }\n }\n }\n\n const next = max + 1;\n const width = Math.max(3, String(next).length);\n return `F${String(next).padStart(width, '0')}`;\n}\n","import { ProjectConfig } from './config.js';\n\nexport interface WorkflowPolicy {\n mode: 'github' | 'local';\n requireIssue: boolean;\n requireBranch: boolean;\n requirePr: boolean;\n requireReview: boolean;\n}\n\nexport type CodeDirtyScopePolicy = 'repo' | 'component';\nexport type TaskCommitGatePolicy = 'off' | 'warn' | 'strict';\nexport type PrePrReviewFallbackPolicy = 'builtin-checklist';\nexport type PrePrReviewMinorPolicy = 'warn' | 'block';\n\nexport interface PrePrReviewPolicy {\n enabled: boolean;\n skills: string[];\n fallback: PrePrReviewFallbackPolicy;\n blockOnFindings: boolean;\n minorPolicy: PrePrReviewMinorPolicy;\n}\n\nconst DEFAULT_PRE_PR_REVIEW_SKILLS = ['code-review-excellence'];\n\nexport function resolveWorkflowPolicy(\n workflow?: ProjectConfig['workflow']\n): WorkflowPolicy {\n const mode = workflow?.mode === 'local' ? 'local' : 'github';\n\n const policy: WorkflowPolicy =\n mode === 'local'\n ? {\n mode,\n requireIssue: false,\n requireBranch: false,\n requirePr: false,\n requireReview: false,\n }\n : {\n mode,\n requireIssue: true,\n requireBranch: true,\n requirePr: true,\n requireReview: true,\n };\n\n if (typeof workflow?.requireIssue === 'boolean') {\n policy.requireIssue = workflow.requireIssue;\n }\n if (typeof workflow?.requireBranch === 'boolean') {\n policy.requireBranch = workflow.requireBranch;\n }\n if (typeof workflow?.requirePr === 'boolean') {\n policy.requirePr = workflow.requirePr;\n }\n if (typeof workflow?.requireReview === 'boolean') {\n policy.requireReview = workflow.requireReview;\n }\n\n // Branch naming currently depends on issue number: feat/<issue>-<slug>\n if (!policy.requireIssue) {\n policy.requireBranch = false;\n }\n\n if (!policy.requirePr) {\n policy.requireReview = false;\n } else if (policy.requireReview) {\n policy.requirePr = true;\n }\n\n return policy;\n}\n\nexport function resolveCodeDirtyScopePolicy(\n workflow: ProjectConfig['workflow'] | undefined,\n projectType: 'single' | 'multi'\n): CodeDirtyScopePolicy {\n const raw = workflow?.codeDirtyScope;\n\n // Backward compatibility for existing configs that do not define scope.\n if (!raw) return 'repo';\n\n if (raw === 'repo') return 'repo';\n if (raw === 'component') {\n return projectType === 'multi' ? 'component' : 'repo';\n }\n // auto\n return projectType === 'multi' ? 'component' : 'repo';\n}\n\nexport function resolveTaskCommitGatePolicy(\n workflow?: ProjectConfig['workflow']\n): TaskCommitGatePolicy {\n const raw = workflow?.taskCommitGate;\n if (raw === 'off' || raw === 'warn' || raw === 'strict') return raw;\n // Backward compatibility for existing configs that do not define this policy.\n return 'warn';\n}\n\nfunction normalizeSkillList(input: unknown): string[] {\n if (!Array.isArray(input)) return [];\n const deduped = new Set<string>();\n for (const raw of input) {\n const value = String(raw || '').trim();\n if (!value) continue;\n deduped.add(value);\n }\n return [...deduped];\n}\n\nexport function resolvePrePrReviewPolicy(\n workflow?: ProjectConfig['workflow']\n): PrePrReviewPolicy {\n const workflowPolicy = resolveWorkflowPolicy(workflow);\n const configured = workflow?.prePrReview;\n const configuredSkills = normalizeSkillList(configured?.skills);\n const configuredEnabled =\n typeof configured?.enabled === 'boolean'\n ? configured.enabled\n : workflowPolicy.requirePr;\n\n return {\n enabled: workflowPolicy.requirePr ? configuredEnabled : false,\n skills:\n configuredSkills.length > 0\n ? configuredSkills\n : DEFAULT_PRE_PR_REVIEW_SKILLS,\n fallback:\n configured?.fallback === 'builtin-checklist'\n ? configured.fallback\n : 'builtin-checklist',\n blockOnFindings:\n typeof configured?.blockOnFindings === 'boolean'\n ? configured.blockOnFindings\n : true,\n minorPolicy:\n configured?.minorPolicy === 'block' ? 'block' : 'warn',\n };\n}\n","import { FeatureState, Lang, NextAction, StepDefinition } from './types.js';\nimport { tr } from '../i18n.js';\nimport { ProjectConfig } from '../config.js';\nimport { execFileSync } from 'child_process';\nimport path from 'path';\nimport {\n resolvePrePrReviewPolicy,\n resolveTaskCommitGatePolicy,\n resolveWorkflowPolicy,\n} from '../workflow.js';\n\nfunction isCompletionChecklistDone(feature: FeatureState): boolean {\n return (\n !!feature.completionChecklist &&\n feature.completionChecklist.total > 0 &&\n feature.completionChecklist.checked === feature.completionChecklist.total\n );\n}\n\nfunction isTasksDocApproved(feature: FeatureState): boolean {\n return !feature.docs.tasksDocStatusFieldExists || feature.tasksDocStatus === 'Approved';\n}\n\nfunction isImplementationDone(feature: FeatureState): boolean {\n return (\n feature.docs.tasksExists &&\n feature.tasks.total > 0 &&\n feature.tasks.total === feature.tasks.done &&\n isCompletionChecklistDone(feature) &&\n isTasksDocApproved(feature)\n );\n}\n\nfunction isPrMetadataConfigured(feature: FeatureState): boolean {\n return feature.docs.prFieldExists && feature.docs.prStatusFieldExists;\n}\n\nfunction isReviewIterationPhase(\n feature: FeatureState,\n workflowPolicy: ReturnType<typeof resolveWorkflowPolicy>\n): boolean {\n return (\n workflowPolicy.requirePr &&\n workflowPolicy.requireReview &&\n isPrMetadataConfigured(feature) &&\n !!feature.pr.link &&\n feature.pr.status === 'Review'\n );\n}\n\nfunction isPrePrReviewSatisfied(\n feature: FeatureState,\n prePrReviewPolicy: ReturnType<typeof resolvePrePrReviewPolicy>\n): boolean {\n if (!prePrReviewPolicy.enabled) return true;\n if (!feature.docs.prePrReviewFieldExists || feature.prePrReview.status !== 'Done') {\n return false;\n }\n if (!feature.docs.prePrFindingsFieldExists || !feature.prePrReview.findings) {\n return false;\n }\n if (\n !feature.docs.prePrEvidenceFieldExists ||\n !feature.prePrReview.evidenceProvided\n ) {\n return false;\n }\n if (\n prePrReviewPolicy.blockOnFindings &&\n feature.prePrReview.findings.major > 0\n ) {\n return false;\n }\n if (\n prePrReviewPolicy.minorPolicy === 'block' &&\n feature.prePrReview.findings.minor > 0\n ) {\n return false;\n }\n return true;\n}\n\nfunction isFeatureDone(\n feature: FeatureState,\n workflowPolicy: ReturnType<typeof resolveWorkflowPolicy>,\n prePrReviewPolicy: ReturnType<typeof resolvePrePrReviewPolicy>\n): boolean {\n return (\n feature.specStatus === 'Approved' &&\n feature.planStatus === 'Approved' &&\n !feature.git.docsHasUncommittedChanges &&\n !feature.git.projectHasUncommittedChanges &&\n feature.docs.tasksExists &&\n feature.tasks.total > 0 &&\n feature.tasks.total === feature.tasks.done &&\n isCompletionChecklistDone(feature) &&\n isTasksDocApproved(feature) &&\n (!workflowPolicy.requireIssue || !!feature.issueNumber) &&\n (!workflowPolicy.requirePr ||\n (isPrMetadataConfigured(feature) && !!feature.pr.link)) &&\n (!workflowPolicy.requireReview || feature.pr.status === 'Approved') &&\n isPrePrReviewSatisfied(feature, prePrReviewPolicy)\n );\n}\n\nfunction formatSkillList(skills: string[]): string {\n return skills.join(', ');\n}\n\nfunction getFindingsPolicyText(lang: Lang, blockOnFindings: boolean): string {\n return blockOnFindings\n ? tr(lang, 'messages', 'prePrReviewFindingsBlock')\n : tr(lang, 'messages', 'prePrReviewFindingsWarn');\n}\n\nfunction getMinorFindingsPolicyText(\n lang: Lang,\n minorPolicy: ReturnType<typeof resolvePrePrReviewPolicy>['minorPolicy']\n): string {\n return minorPolicy === 'block'\n ? tr(lang, 'messages', 'prePrReviewMinorFindingsBlock')\n : tr(lang, 'messages', 'prePrReviewMinorFindingsWarn');\n}\n\nfunction getPrReviewRemoteBlockReasons(feature: FeatureState, lang: Lang): string[] {\n const remote = feature.pr.remote;\n if (!remote || !remote.available) return [];\n\n const reasons: string[] = [];\n if (remote.state === 'CLOSED' && !remote.isMerged) {\n reasons.push(tr(lang, 'messages', 'prReviewRemoteReasonClosed'));\n }\n if (remote.hasBlockingReview) {\n reasons.push(tr(lang, 'messages', 'prReviewRemoteReasonChangesRequested'));\n }\n if (remote.failingChecks > 0) {\n reasons.push(\n tr(lang, 'messages', 'prReviewRemoteReasonChecksFailing', {\n count: remote.failingChecks,\n })\n );\n }\n if (remote.pendingChecks > 0) {\n reasons.push(\n tr(lang, 'messages', 'prReviewRemoteReasonChecksPending', {\n count: remote.pendingChecks,\n })\n );\n }\n if (remote.mergeBlocked) {\n reasons.push(\n tr(lang, 'messages', 'prReviewRemoteReasonMergeBlocked', {\n status: remote.mergeStateStatus || 'UNKNOWN',\n })\n );\n }\n return reasons;\n}\n\nfunction normalizeCommitTopicText(value: string): string {\n return value.replace(/\\s+/g, ' ').trim();\n}\n\nfunction toShellSafeCommitTopic(value: string): string {\n return value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\$/g, '\\\\$')\n .replace(/`/g, '\\\\`');\n}\n\nfunction resolveProjectCommitTopic(feature: FeatureState): string {\n const raw =\n feature.activeTask?.title ||\n feature.lastDoneTask?.title ||\n feature.nextTodoTask?.title ||\n feature.folderName;\n const withoutTaskId = normalizeCommitTopicText(raw).replace(\n /^T-[A-Za-z0-9-]+\\s+/,\n ''\n );\n const topic = withoutTaskId || normalizeCommitTopicText(feature.folderName);\n return toShellSafeCommitTopic(topic);\n}\n\nfunction resolveManagedWorktreeCleanupPaths(\n projectGitCwd: string | undefined\n): { projectRoot: string; worktreePath: string } | null {\n if (!projectGitCwd) return null;\n const normalized = path.resolve(projectGitCwd);\n const marker = `${path.sep}.worktrees${path.sep}`;\n const markerIndex = normalized.lastIndexOf(marker);\n if (markerIndex <= 0) return null;\n const projectRoot = normalized.slice(0, markerIndex);\n if (!projectRoot) return null;\n return {\n projectRoot,\n worktreePath: normalized,\n };\n}\n\ninterface TaskCommitGateCheck {\n pass: boolean;\n reason?:\n | 'DONE_TRANSITIONS_COUNT'\n | 'NO_PROJECT_COMMIT'\n | 'PROJECT_LOG_UNAVAILABLE'\n | 'MISMATCH_LAST_DONE';\n doneTransitions?: number;\n}\n\nfunction shouldBlockTaskCommitGate(\n policy: ReturnType<typeof resolveTaskCommitGatePolicy>,\n check: TaskCommitGateCheck\n): boolean {\n if (policy !== 'strict') return false;\n return !check.pass;\n}\n\nfunction normalizeGitRelativePath(value: string): string {\n return value\n .replace(/\\\\/g, '/')\n .replace(/^\\.\\/+/, '')\n .replace(/\\/+$/, '');\n}\n\nfunction readGitText(cwd: string, args: string[]): string | undefined {\n try {\n return execFileSync('git', args, {\n cwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeTaskTopic(value: string): string {\n return normalizeCommitTopicText(value).replace(/^T-[A-Za-z0-9-]+\\s+/, '');\n}\n\nfunction normalizeCommitSubjectForGate(value: string): string {\n return normalizeCommitTopicText(value)\n .replace(/^[a-z]+(?:\\([^)]*\\))?!?:\\s*/i, '')\n .toLowerCase();\n}\n\nfunction toTaskKey(rawTitle: string): string {\n const trimmed = normalizeCommitTopicText(rawTitle);\n if (!trimmed) return '';\n const idMatch = trimmed.match(/^(T-[A-Za-z0-9-]+)/i);\n if (idMatch) return idMatch[1].toUpperCase();\n return normalizeTaskTopic(trimmed).toLowerCase();\n}\n\nfunction countDoneTransitionsInLatestTasksCommit(\n feature: FeatureState\n): number | undefined {\n const docsGitCwd = feature.git.docsGitCwd;\n const tasksRelativePath = normalizeGitRelativePath(\n path.join(feature.docs.featurePathFromDocs, 'tasks.md')\n );\n\n const diff = readGitText(docsGitCwd, [\n 'diff',\n '--unified=0',\n '--no-color',\n 'HEAD~1',\n 'HEAD',\n '--',\n tasksRelativePath,\n ]);\n if (diff === undefined) return 0;\n if (!diff.trim()) return 0;\n\n const removedByTask = new Map<string, Set<'TODO' | 'DOING' | 'DONE' | 'REVIEW'>>();\n const addedByTask = new Map<string, Set<'TODO' | 'DOING' | 'DONE' | 'REVIEW'>>();\n\n const parseTaskLine = (\n line: string\n ): { key: string; status: 'TODO' | 'DOING' | 'DONE' | 'REVIEW' } | null => {\n const match = line.match(/^\\s*-\\s*\\[(TODO|DOING|DONE|REVIEW)\\]\\s+(.+?)\\s*$/i);\n if (!match) return null;\n const key = toTaskKey(match[2]);\n if (!key) return null;\n return {\n key,\n status: match[1].toUpperCase() as 'TODO' | 'DOING' | 'DONE' | 'REVIEW',\n };\n };\n\n for (const line of diff.split('\\n')) {\n if (line.startsWith('---') || line.startsWith('+++')) continue;\n\n if (line.startsWith('-')) {\n const parsed = parseTaskLine(line.slice(1));\n if (!parsed) continue;\n const existing = removedByTask.get(parsed.key) || new Set();\n existing.add(parsed.status);\n removedByTask.set(parsed.key, existing);\n continue;\n }\n\n if (line.startsWith('+')) {\n const parsed = parseTaskLine(line.slice(1));\n if (!parsed) continue;\n const existing = addedByTask.get(parsed.key) || new Set();\n existing.add(parsed.status);\n addedByTask.set(parsed.key, existing);\n }\n }\n\n let doneTransitions = 0;\n for (const [taskKey, addedStatuses] of addedByTask.entries()) {\n if (!addedStatuses.has('DONE')) continue;\n const removedStatuses = removedByTask.get(taskKey);\n if (!removedStatuses) continue;\n const transitionedFromOpen =\n removedStatuses.has('TODO') || removedStatuses.has('DOING') || removedStatuses.has('REVIEW');\n if (transitionedFromOpen) {\n doneTransitions += 1;\n }\n }\n\n return doneTransitions;\n}\n\nfunction checkTaskCommitGate(feature: FeatureState): TaskCommitGateCheck {\n const doneTransitions = countDoneTransitionsInLatestTasksCommit(feature);\n if (doneTransitions === 0) {\n // Docs-only edits (e.g., adding/changing TODO text) should not trigger\n // project commit gate checks.\n return { pass: true, doneTransitions };\n }\n if (typeof doneTransitions === 'number' && doneTransitions > 1) {\n return {\n pass: false,\n reason: 'DONE_TRANSITIONS_COUNT',\n doneTransitions,\n };\n }\n\n const projectGitCwd = feature.git.projectGitCwd;\n const lastDoneTopic = normalizeTaskTopic(feature.lastDoneTask?.title || '');\n if (!projectGitCwd || !lastDoneTopic) {\n return { pass: true };\n }\n\n const args = ['log', '-n', '1', '--pretty=%s', '--', '.'];\n const relativeDocsDir = path.relative(projectGitCwd, feature.git.docsGitCwd);\n const normalizedDocsDir = normalizeGitRelativePath(relativeDocsDir);\n if (\n normalizedDocsDir &&\n normalizedDocsDir !== '.' &&\n normalizedDocsDir !== '..' &&\n !normalizedDocsDir.startsWith('../')\n ) {\n args.push(`:(exclude)${normalizedDocsDir}/**`);\n }\n\n const latestProjectSubject = readGitText(projectGitCwd, args);\n if (latestProjectSubject === undefined) {\n return { pass: false, reason: 'PROJECT_LOG_UNAVAILABLE' };\n }\n const normalizedSubject = normalizeCommitSubjectForGate(latestProjectSubject);\n if (!normalizedSubject) {\n return { pass: false, reason: 'NO_PROJECT_COMMIT' };\n }\n\n const normalizedLastDone = normalizeTaskTopic(lastDoneTopic).toLowerCase();\n if (!normalizedSubject.includes(normalizedLastDone)) {\n return { pass: false, reason: 'MISMATCH_LAST_DONE' };\n }\n\n return { pass: true };\n}\n\nfunction getTaskCommitGateReasonText(\n lang: Lang,\n check: TaskCommitGateCheck\n): string {\n switch (check.reason) {\n case 'DONE_TRANSITIONS_COUNT':\n return tr(lang, 'messages', 'taskCommitGateReasonDoneCount', {\n count: check.doneTransitions || 0,\n });\n case 'NO_PROJECT_COMMIT':\n return tr(lang, 'messages', 'taskCommitGateReasonNoTasksCommit');\n case 'PROJECT_LOG_UNAVAILABLE':\n return tr(lang, 'messages', 'taskCommitGateReasonTasksFileUnavailable');\n case 'MISMATCH_LAST_DONE':\n return tr(lang, 'messages', 'taskCommitGateReasonMismatchLastDone');\n default:\n return tr(lang, 'messages', 'taskCommitGateReasonMismatchLastDone');\n }\n}\n\nexport function getStepDefinitions(\n lang: Lang,\n workflow?: ProjectConfig['workflow']\n): StepDefinition[] {\n const workflowPolicy = resolveWorkflowPolicy(workflow);\n const prePrReviewPolicy = resolvePrePrReviewPolicy(workflow);\n const taskCommitGatePolicy = resolveTaskCommitGatePolicy(workflow);\n\n return [\n {\n step: 1,\n name: tr(lang, 'steps', 'featureFolder'),\n checklist: { done: () => true },\n },\n {\n step: 2,\n name: tr(lang, 'steps', 'specWrite'),\n checklist: {\n done: (f) => f.specStatus === 'Review' || f.specStatus === 'Approved',\n },\n current: {\n when: (f) =>\n !f.docs.specExists || !f.specStatus || f.specStatus === 'Draft',\n actions: (f) => [\n {\n type: 'instruction',\n category: 'spec_write',\n message: !f.docs.specExists\n ? tr(lang, 'messages', 'specCreate')\n : tr(lang, 'messages', 'specImprove'),\n },\n ],\n },\n },\n {\n step: 3,\n name: tr(lang, 'steps', 'specApprove'),\n checklist: { done: (f) => f.specStatus === 'Approved' },\n current: {\n when: (f) => f.specStatus === 'Review',\n actions: () => [\n {\n type: 'instruction',\n category: 'spec_approve',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'specApproval'),\n },\n ],\n },\n },\n {\n step: 4,\n name: tr(lang, 'steps', 'planWrite'),\n checklist: {\n done: (f) => f.planStatus === 'Review' || f.planStatus === 'Approved',\n },\n current: {\n when: (f) =>\n f.specStatus === 'Approved' &&\n (!f.docs.planExists || !f.planStatus || f.planStatus === 'Draft'),\n actions: (f) => [\n {\n type: 'instruction',\n category: 'plan_write',\n message: !f.docs.planExists\n ? tr(lang, 'messages', 'planCreate')\n : tr(lang, 'messages', 'planImprove'),\n },\n ],\n },\n },\n {\n step: 5,\n name: tr(lang, 'steps', 'planApprove'),\n checklist: { done: (f) => f.planStatus === 'Approved' },\n current: {\n when: (f) => f.planStatus === 'Review',\n actions: () => [\n {\n type: 'instruction',\n category: 'plan_approve',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'planApproval'),\n },\n ],\n },\n },\n {\n step: 6,\n name: tr(lang, 'steps', 'tasksWrite'),\n checklist: {\n done: (f) => f.docs.tasksExists && f.tasks.total > 0 && isTasksDocApproved(f),\n detail: (f) => (f.tasks.total > 0 ? `(${f.tasks.total})` : ''),\n },\n current: {\n when: (f) =>\n f.planStatus === 'Approved' &&\n (!f.docs.tasksExists ||\n f.tasks.total === 0 ||\n (f.docs.tasksDocStatusFieldExists &&\n (!f.tasksDocStatus || f.tasksDocStatus === 'Draft' || f.tasksDocStatus === 'Review'))),\n actions: (f) => {\n if (!f.docs.tasksExists) {\n return [\n {\n type: 'instruction',\n category: 'tasks_write',\n message: tr(lang, 'messages', 'tasksCreate'),\n },\n ];\n }\n\n if (f.tasks.total === 0) {\n return [\n {\n type: 'instruction',\n category: 'tasks_write',\n message: tr(lang, 'messages', 'tasksNeedAtLeastOne'),\n },\n ];\n }\n\n if (f.docs.tasksDocStatusFieldExists && (!f.tasksDocStatus || f.tasksDocStatus === 'Draft')) {\n return [\n {\n type: 'instruction',\n category: 'tasks_write',\n message: tr(lang, 'messages', 'tasksImprove'),\n },\n ];\n }\n\n if (f.docs.tasksDocStatusFieldExists && f.tasksDocStatus === 'Review') {\n return [\n {\n type: 'instruction',\n category: 'tasks_approve',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'tasksApproval'),\n },\n ];\n }\n\n return [\n {\n type: 'instruction',\n category: 'tasks_write',\n message: tr(lang, 'messages', 'tasksImprove'),\n },\n ];\n },\n },\n },\n {\n step: 7,\n name: tr(lang, 'steps', 'docsInitialCommit'),\n checklist: {\n done: (f) =>\n f.docs.tasksExists &&\n f.tasks.total > 0 &&\n f.specStatus === 'Approved' &&\n f.planStatus === 'Approved' &&\n isTasksDocApproved(f) &&\n f.git.docsEverCommitted,\n },\n current: {\n when: (f) =>\n f.docs.tasksExists &&\n f.tasks.total > 0 &&\n f.specStatus === 'Approved' &&\n f.planStatus === 'Approved' &&\n isTasksDocApproved(f) &&\n !f.activeTask &&\n !f.git.docsEverCommitted &&\n f.git.docsHasUncommittedChanges,\n actions: (f) => {\n if (f.issueNumber) {\n return [\n {\n type: 'command',\n category: 'docs_commit',\n requiresUserCheck: true,\n scope: 'docs',\n cwd: f.git.docsGitCwd,\n cmd: tr(lang, 'messages', 'docsCommitIssueUpdate', {\n docsGitCwd: f.git.docsGitCwd,\n featurePath: f.docs.featurePathFromDocs,\n issueNumber: f.issueNumber,\n folderName: f.folderName,\n }),\n },\n ];\n }\n return [\n {\n type: 'command',\n category: 'docs_commit',\n requiresUserCheck: true,\n scope: 'docs',\n cwd: f.git.docsGitCwd,\n cmd: isImplementationDone(f)\n ? tr(lang, 'messages', 'docsCommitUpdate', {\n docsGitCwd: f.git.docsGitCwd,\n featurePath: f.docs.featurePathFromDocs,\n folderName: f.folderName,\n })\n : tr(lang, 'messages', 'docsCommitPlanning', {\n docsGitCwd: f.git.docsGitCwd,\n featurePath: f.docs.featurePathFromDocs,\n folderName: f.folderName,\n }),\n },\n ];\n },\n },\n },\n {\n step: 8,\n name: tr(lang, 'steps', 'issueCreate'),\n checklist: {\n done: (f) => !workflowPolicy.requireIssue || !!f.issueNumber,\n },\n current: {\n when: (f) =>\n workflowPolicy.requireIssue &&\n f.docs.tasksExists &&\n f.tasks.total > 0 &&\n f.specStatus === 'Approved' &&\n f.planStatus === 'Approved' &&\n isTasksDocApproved(f) &&\n !f.issueNumber,\n actions: (f) => {\n void f;\n if (!f.docs.issueDocExists) {\n return [\n {\n type: 'instruction',\n category: 'issue_create',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'issueCreateAndWrite', {\n featureRef: f.id || f.folderName,\n }),\n },\n ];\n }\n if (f.docs.issueDocStatus === 'Ready') {\n return [\n {\n type: 'instruction',\n category: 'issue_create',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'issueCreateFromDoc', {\n featureRef: f.id || f.folderName,\n }),\n },\n ];\n }\n return [\n {\n type: 'instruction',\n category: 'issue_create',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'issuePrepareFromDoc', {\n featureRef: f.id || f.folderName,\n }),\n },\n ];\n },\n },\n },\n {\n step: 9,\n name: tr(lang, 'steps', 'branchCreate'),\n checklist: {\n done: (f) =>\n !workflowPolicy.requireBranch ||\n f.git.onExpectedBranch ||\n isImplementationDone(f) ||\n isFeatureDone(f, workflowPolicy, prePrReviewPolicy),\n },\n current: {\n when: (f) =>\n workflowPolicy.requireBranch &&\n !!f.issueNumber &&\n f.tasks.total > 0 &&\n f.tasks.done < f.tasks.total &&\n !isFeatureDone(f, workflowPolicy, prePrReviewPolicy) &&\n (!f.git.projectBranchAvailable || !f.git.onExpectedBranch),\n actions: (f) => {\n if (!f.git.projectBranchAvailable || !f.git.projectGitCwd) {\n return [\n {\n type: 'instruction',\n category: 'branch_create',\n message: tr(lang, 'messages', 'standaloneNeedsProjectRoot'),\n },\n ];\n }\n\n return [\n {\n type: 'command',\n category: 'branch_create',\n scope: 'project',\n cwd: f.git.projectGitCwd,\n cmd: tr(lang, 'messages', 'createBranch', {\n projectGitCwd: f.git.projectGitCwd,\n issueNumber: f.issueNumber,\n slug: f.slug,\n }),\n },\n ];\n },\n },\n },\n {\n step: 10,\n name: tr(lang, 'steps', 'tasksExecute'),\n checklist: {\n done: (f) =>\n f.docs.tasksExists &&\n f.tasks.total > 0 &&\n f.tasks.total === f.tasks.done &&\n isCompletionChecklistDone(f) &&\n isTasksDocApproved(f),\n detail: (f) =>\n f.tasks.total > 0 ? `(${f.tasks.done}/${f.tasks.total})` : '',\n },\n current: {\n when: (f) =>\n f.docs.tasksExists &&\n f.tasks.total > 0 &&\n (f.tasks.done < f.tasks.total || !isCompletionChecklistDone(f)) &&\n isTasksDocApproved(f) &&\n (!workflowPolicy.requireBranch ||\n f.git.onExpectedBranch ||\n f.tasks.done === f.tasks.total),\n actions: (f) => {\n if (f.tasks.total === f.tasks.done && !isCompletionChecklistDone(f)) {\n if (f.git.docsHasUncommittedChanges) {\n return [\n {\n type: 'command',\n category: 'docs_commit',\n requiresUserCheck: true,\n scope: 'docs',\n cwd: f.git.docsGitCwd,\n cmd: f.issueNumber\n ? tr(lang, 'messages', 'docsCommitIssueUpdate', {\n docsGitCwd: f.git.docsGitCwd,\n featurePath: f.docs.featurePathFromDocs,\n issueNumber: f.issueNumber,\n folderName: f.folderName,\n })\n : tr(lang, 'messages', 'docsCommitUpdate', {\n docsGitCwd: f.git.docsGitCwd,\n featurePath: f.docs.featurePathFromDocs,\n folderName: f.folderName,\n }),\n },\n ];\n }\n\n if (f.git.projectHasUncommittedChanges) {\n if (isReviewIterationPhase(f, workflowPolicy)) {\n if (!f.git.projectGitCwd) {\n return [\n {\n type: 'instruction',\n category: 'review_fix_commit',\n message: tr(lang, 'messages', 'standaloneNeedsProjectRoot'),\n },\n ];\n }\n\n return [\n {\n type: 'instruction',\n category: 'review_fix_commit',\n requiresUserCheck: true,\n message: f.issueNumber\n ? tr(lang, 'messages', 'reviewFixCommitIssueGuidance', {\n projectGitCwd: f.git.projectGitCwd,\n issueNumber: f.issueNumber,\n })\n : tr(lang, 'messages', 'reviewFixCommitGuidance', {\n projectGitCwd: f.git.projectGitCwd,\n }),\n },\n ];\n }\n\n if (!f.git.projectGitCwd) {\n return [\n {\n type: 'instruction',\n category: 'task_execute',\n message: tr(lang, 'messages', 'standaloneNeedsProjectRoot'),\n },\n ];\n }\n\n return [\n {\n type: 'command',\n category: 'task_execute',\n requiresUserCheck: true,\n scope: 'project',\n cwd: f.git.projectGitCwd,\n cmd: f.issueNumber\n ? tr(lang, 'messages', 'projectCommitIssueUpdate', {\n projectGitCwd: f.git.projectGitCwd,\n issueNumber: f.issueNumber,\n folderName: f.folderName,\n commitTopic: resolveProjectCommitTopic(f),\n })\n : tr(lang, 'messages', 'projectCommitUpdate', {\n projectGitCwd: f.git.projectGitCwd,\n folderName: f.folderName,\n commitTopic: resolveProjectCommitTopic(f),\n }),\n },\n ];\n }\n\n const actions: NextAction[] = [\n {\n type: 'instruction' as const,\n category: 'task_execute',\n requiresUserCheck: true,\n message: !f.completionChecklist\n ? tr(lang, 'messages', 'tasksAllDoneButNoChecklist')\n : tr(lang, 'messages', 'tasksAllDoneButChecklist', {\n checked: f.completionChecklist.checked,\n total: f.completionChecklist.total,\n }),\n },\n ];\n\n if (!isPrMetadataConfigured(f)) {\n actions.push({\n type: 'instruction' as const,\n category: 'pr_metadata_migrate',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prLegacyAsk'),\n });\n }\n\n return actions;\n }\n if (f.activeTask) {\n return [\n {\n type: 'instruction',\n category: 'task_execute',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'finishDoingTask', {\n title: f.activeTask.title,\n done: f.tasks.done,\n total: f.tasks.total,\n }),\n },\n ];\n }\n if (f.nextTodoTask) {\n if (f.git.docsHasUncommittedChanges) {\n return [\n {\n type: 'command',\n category: 'docs_commit',\n requiresUserCheck: true,\n scope: 'docs',\n cwd: f.git.docsGitCwd,\n cmd: f.issueNumber\n ? tr(lang, 'messages', 'docsCommitIssueUpdate', {\n docsGitCwd: f.git.docsGitCwd,\n featurePath: f.docs.featurePathFromDocs,\n issueNumber: f.issueNumber,\n folderName: f.folderName,\n })\n : tr(lang, 'messages', 'docsCommitUpdate', {\n docsGitCwd: f.git.docsGitCwd,\n featurePath: f.docs.featurePathFromDocs,\n folderName: f.folderName,\n }),\n },\n ];\n }\n if (f.git.projectHasUncommittedChanges) {\n if (!f.git.projectGitCwd) {\n return [\n {\n type: 'instruction',\n category: 'task_execute',\n message: tr(lang, 'messages', 'standaloneNeedsProjectRoot'),\n },\n ];\n }\n return [\n {\n type: 'command',\n category: 'task_execute',\n requiresUserCheck: true,\n scope: 'project',\n cwd: f.git.projectGitCwd,\n cmd: f.issueNumber\n ? tr(lang, 'messages', 'projectCommitIssueUpdate', {\n projectGitCwd: f.git.projectGitCwd,\n issueNumber: f.issueNumber,\n folderName: f.folderName,\n commitTopic: resolveProjectCommitTopic(f),\n })\n : tr(lang, 'messages', 'projectCommitUpdate', {\n projectGitCwd: f.git.projectGitCwd,\n folderName: f.folderName,\n commitTopic: resolveProjectCommitTopic(f),\n }),\n },\n ];\n }\n\n if (taskCommitGatePolicy !== 'off' && f.lastDoneTask) {\n const commitGate = checkTaskCommitGate(f);\n if (!commitGate.pass) {\n const reasonText = getTaskCommitGateReasonText(lang, commitGate);\n if (shouldBlockTaskCommitGate(taskCommitGatePolicy, commitGate)) {\n return [\n {\n type: 'instruction',\n category: 'task_execute',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'taskCommitGateStrictBlock', {\n reason: reasonText,\n }),\n },\n ];\n }\n return [\n {\n type: 'instruction',\n category: 'task_execute',\n requiresUserCheck: true,\n message: `${tr(lang, 'messages', 'startNextTodoTask', {\n title: f.nextTodoTask.title,\n done: f.tasks.done,\n total: f.tasks.total,\n })}\\n${tr(lang, 'messages', 'taskCommitGateWarnProceed', {\n reason: reasonText,\n })}`,\n },\n ];\n }\n }\n\n return [\n {\n type: 'instruction',\n category: 'task_execute',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'startNextTodoTask', {\n title: f.nextTodoTask.title,\n done: f.tasks.done,\n total: f.tasks.total,\n }),\n },\n ];\n }\n return [\n {\n type: 'instruction',\n category: 'task_execute',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'checkTaskStatuses', {\n done: f.tasks.done,\n total: f.tasks.total,\n }),\n },\n ];\n },\n },\n },\n {\n step: 11,\n name: tr(lang, 'steps', 'docsCommitSync'),\n checklist: {\n done: (f) =>\n !f.git.docsHasUncommittedChanges && !f.git.projectHasUncommittedChanges,\n },\n current: {\n when: (f) =>\n isImplementationDone(f) &&\n (f.git.docsHasUncommittedChanges || f.git.projectHasUncommittedChanges),\n actions: (f) => {\n if (f.git.docsHasUncommittedChanges) {\n return [\n {\n type: 'command',\n category: 'docs_commit',\n requiresUserCheck: true,\n scope: 'docs',\n cwd: f.git.docsGitCwd,\n cmd: f.issueNumber\n ? tr(lang, 'messages', 'docsCommitIssueUpdate', {\n docsGitCwd: f.git.docsGitCwd,\n featurePath: f.docs.featurePathFromDocs,\n issueNumber: f.issueNumber,\n folderName: f.folderName,\n })\n : tr(lang, 'messages', 'docsCommitUpdate', {\n docsGitCwd: f.git.docsGitCwd,\n featurePath: f.docs.featurePathFromDocs,\n folderName: f.folderName,\n }),\n },\n ];\n }\n\n if (isReviewIterationPhase(f, workflowPolicy)) {\n if (!f.git.projectGitCwd) {\n return [\n {\n type: 'instruction',\n category: 'review_fix_commit',\n message: tr(lang, 'messages', 'standaloneNeedsProjectRoot'),\n },\n ];\n }\n return [\n {\n type: 'instruction',\n category: 'review_fix_commit',\n requiresUserCheck: true,\n message: f.issueNumber\n ? tr(lang, 'messages', 'reviewFixCommitIssueGuidance', {\n projectGitCwd: f.git.projectGitCwd,\n issueNumber: f.issueNumber,\n })\n : tr(lang, 'messages', 'reviewFixCommitGuidance', {\n projectGitCwd: f.git.projectGitCwd,\n }),\n },\n ];\n }\n\n if (!f.git.projectGitCwd) {\n return [\n {\n type: 'instruction',\n category: 'task_execute',\n message: tr(lang, 'messages', 'standaloneNeedsProjectRoot'),\n },\n ];\n }\n\n return [\n {\n type: 'command',\n category: 'task_execute',\n requiresUserCheck: true,\n scope: 'project',\n cwd: f.git.projectGitCwd,\n cmd: f.issueNumber\n ? tr(lang, 'messages', 'projectCommitIssueUpdate', {\n projectGitCwd: f.git.projectGitCwd,\n issueNumber: f.issueNumber,\n folderName: f.folderName,\n commitTopic: resolveProjectCommitTopic(f),\n })\n : tr(lang, 'messages', 'projectCommitUpdate', {\n projectGitCwd: f.git.projectGitCwd,\n folderName: f.folderName,\n commitTopic: resolveProjectCommitTopic(f),\n }),\n },\n ];\n },\n },\n },\n {\n step: 12,\n name: tr(lang, 'steps', 'prePrReview'),\n checklist: {\n done: (f) => isPrePrReviewSatisfied(f, prePrReviewPolicy),\n },\n current: {\n when: (f) =>\n prePrReviewPolicy.enabled &&\n workflowPolicy.requirePr &&\n f.docs.tasksExists &&\n f.tasks.total > 0 &&\n f.tasks.total === f.tasks.done &&\n isCompletionChecklistDone(f) &&\n !f.git.docsHasUncommittedChanges &&\n !f.git.projectHasUncommittedChanges &&\n (!isPrMetadataConfigured(f) || !f.pr.link) &&\n !isPrePrReviewSatisfied(f, prePrReviewPolicy),\n actions: (f) => {\n if (!prePrReviewPolicy.enabled) return [];\n if (!f.docs.prePrReviewFieldExists) {\n return [\n {\n type: 'instruction',\n category: 'pr_metadata_migrate',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prePrReviewFieldMissing'),\n },\n ];\n }\n if (f.prePrReview.status !== 'Done') {\n if (!prePrReviewPolicy.skills.length) {\n return [\n {\n type: 'instruction',\n category: 'pre_pr_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prePrReviewRun', {\n skills: 'code-review-excellence',\n fallback: prePrReviewPolicy.fallback,\n findingsPolicy: getFindingsPolicyText(\n lang,\n prePrReviewPolicy.blockOnFindings\n ),\n minorFindingsPolicy: getMinorFindingsPolicyText(\n lang,\n prePrReviewPolicy.minorPolicy\n ),\n }),\n },\n ];\n }\n return [\n {\n type: 'instruction',\n category: 'pre_pr_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prePrReviewRun', {\n skills: formatSkillList(prePrReviewPolicy.skills),\n fallback: prePrReviewPolicy.fallback,\n findingsPolicy: getFindingsPolicyText(\n lang,\n prePrReviewPolicy.blockOnFindings\n ),\n minorFindingsPolicy: getMinorFindingsPolicyText(\n lang,\n prePrReviewPolicy.minorPolicy\n ),\n }),\n },\n ];\n }\n if (!f.docs.prePrFindingsFieldExists || !f.prePrReview.findings) {\n return [\n {\n type: 'instruction',\n category: 'pre_pr_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prePrReviewFindingsMissing'),\n },\n ];\n }\n if (!f.docs.prePrEvidenceFieldExists || !f.prePrReview.evidenceProvided) {\n return [\n {\n type: 'instruction',\n category: 'pre_pr_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prePrReviewEvidenceMissing'),\n },\n ];\n }\n if (\n prePrReviewPolicy.blockOnFindings &&\n f.prePrReview.findings.major > 0\n ) {\n return [\n {\n type: 'instruction',\n category: 'pre_pr_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prePrReviewMajorBlocked', {\n count: f.prePrReview.findings.major,\n }),\n },\n ];\n }\n if (\n prePrReviewPolicy.minorPolicy === 'block' &&\n f.prePrReview.findings.minor > 0\n ) {\n return [\n {\n type: 'instruction',\n category: 'pre_pr_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prePrReviewMinorBlocked', {\n count: f.prePrReview.findings.minor,\n }),\n },\n ];\n }\n if (!prePrReviewPolicy.skills.length) {\n return [\n {\n type: 'instruction',\n category: 'pre_pr_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prePrReviewRun', {\n skills: 'code-review-excellence',\n fallback: prePrReviewPolicy.fallback,\n findingsPolicy: getFindingsPolicyText(\n lang,\n prePrReviewPolicy.blockOnFindings\n ),\n minorFindingsPolicy: getMinorFindingsPolicyText(\n lang,\n prePrReviewPolicy.minorPolicy\n ),\n }),\n },\n ];\n }\n return [\n {\n type: 'instruction',\n category: 'pre_pr_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prePrReviewRun', {\n skills: formatSkillList(prePrReviewPolicy.skills),\n fallback: prePrReviewPolicy.fallback,\n findingsPolicy: getFindingsPolicyText(\n lang,\n prePrReviewPolicy.blockOnFindings\n ),\n minorFindingsPolicy: getMinorFindingsPolicyText(\n lang,\n prePrReviewPolicy.minorPolicy\n ),\n }),\n },\n ];\n },\n },\n },\n {\n step: 13,\n name: tr(lang, 'steps', 'prCreate'),\n checklist: {\n done: (f) =>\n !workflowPolicy.requirePr ||\n (isPrMetadataConfigured(f) && !!f.pr.link),\n },\n current: {\n when: (f) =>\n workflowPolicy.requirePr &&\n f.docs.tasksExists &&\n f.tasks.total > 0 &&\n f.tasks.total === f.tasks.done &&\n isCompletionChecklistDone(f) &&\n (!isPrMetadataConfigured(f) || !f.pr.link),\n actions: (f) => {\n if (!isPrMetadataConfigured(f)) {\n return [\n {\n type: 'instruction',\n category: 'pr_metadata_migrate',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prLegacyAsk'),\n },\n ];\n }\n if (!f.docs.prDocExists) {\n return [\n {\n type: 'instruction',\n category: 'pr_create',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prCreateRequiredSequence', {\n featureRef: f.id || f.folderName,\n }),\n },\n ];\n }\n if (f.docs.prDocStatus === 'Ready') {\n return [\n {\n type: 'instruction',\n category: 'pr_create',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prCreateExecuteFromDoc', {\n featureRef: f.id || f.folderName,\n }),\n },\n ];\n }\n return [\n {\n type: 'instruction',\n category: 'pr_create',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prCreatePrepareFromDoc', {\n featureRef: f.id || f.folderName,\n }),\n },\n ];\n },\n },\n },\n {\n step: 14,\n name: tr(lang, 'steps', 'codeReview'),\n checklist: {\n done: (f) =>\n !workflowPolicy.requireReview ||\n (isPrMetadataConfigured(f) && f.pr.status === 'Approved'),\n },\n current: {\n when: (f) =>\n workflowPolicy.requireReview &&\n isPrMetadataConfigured(f) &&\n !!f.pr.link &&\n f.pr.status !== 'Approved',\n actions: (f) => {\n if (!f.pr.status) {\n return [\n {\n type: 'instruction',\n category: 'pr_status_update',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prFillStatus'),\n },\n ];\n }\n if (f.pr.status === 'Review') {\n if (f.pr.remote?.available && f.pr.remote.isMerged) {\n return [\n {\n type: 'instruction',\n category: 'pr_status_update',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prReviewMergedSyncStatus'),\n },\n ];\n }\n if (!f.docs.prReviewFindingsFieldExists) {\n return [\n {\n type: 'instruction',\n category: 'code_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prReviewFindingsFieldMissing'),\n },\n ];\n }\n if (!f.prReview.findings) {\n return [\n {\n type: 'instruction',\n category: 'code_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prReviewFindingsMissing'),\n },\n ];\n }\n if (!f.docs.prReviewEvidenceFieldExists) {\n return [\n {\n type: 'instruction',\n category: 'code_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prReviewEvidenceFieldMissing'),\n },\n ];\n }\n if (\n (f.prReview.findings.major > 0 || f.prReview.findings.minor > 0) &&\n !f.prReview.evidenceProvided\n ) {\n return [\n {\n type: 'instruction',\n category: 'code_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prReviewEvidenceMissing'),\n },\n ];\n }\n\n const remoteBlockReasons = getPrReviewRemoteBlockReasons(f, lang);\n const remoteUnavailable =\n workflowPolicy.mode === 'github' &&\n !!f.pr.link &&\n (!f.pr.remote || !f.pr.remote.available);\n const actions: NextAction[] = [\n {\n type: 'instruction',\n category: 'code_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prReviewResolve'),\n },\n ];\n\n if (!f.git.projectGitCwd) {\n actions.push({\n type: 'instruction',\n category: 'code_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'standaloneNeedsProjectRoot'),\n });\n } else {\n actions.push({\n type: 'command',\n category: 'code_review',\n requiresUserCheck: true,\n scope: 'project',\n cwd: f.git.projectGitCwd,\n cmd: tr(lang, 'messages', 'prReviewPush', {\n projectGitCwd: f.git.projectGitCwd,\n }),\n });\n }\n\n if (remoteBlockReasons.length > 0 || remoteUnavailable) {\n const reasons = [...remoteBlockReasons];\n if (remoteUnavailable) {\n reasons.push(tr(lang, 'messages', 'prReviewRemoteReasonUnavailable'));\n }\n actions.push({\n type: 'instruction',\n category: 'code_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prReviewRemoteBlocked', {\n reasons: reasons.join('; '),\n }),\n });\n } else if (f.git.docsGitCwd) {\n actions.push({\n type: 'command',\n category: 'code_review',\n requiresUserCheck: true,\n operationType: 'remote',\n scope: 'docs',\n cwd: f.git.docsGitCwd,\n cmd: tr(lang, 'messages', 'prReviewMergeCommand', {\n featureRef: f.id || f.folderName,\n }),\n });\n } else {\n actions.push({\n type: 'instruction',\n category: 'code_review',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'prReviewMerge', {\n featureRef: f.id || f.folderName,\n }),\n });\n }\n\n return actions;\n }\n return [\n {\n type: 'instruction',\n category: 'code_review',\n message: tr(lang, 'messages', 'prRequestReview'),\n },\n ];\n },\n },\n },\n {\n step: 15,\n name: tr(lang, 'steps', 'featureDone'),\n checklist: {\n done: (f) => isFeatureDone(f, workflowPolicy, prePrReviewPolicy),\n },\n current: {\n when: (f) => isFeatureDone(f, workflowPolicy, prePrReviewPolicy),\n actions: (f) => {\n const actions: NextAction[] = [\n {\n type: 'instruction',\n category: 'feature_done',\n message: tr(lang, 'messages', 'featureDone'),\n },\n ];\n const cleanupPaths = resolveManagedWorktreeCleanupPaths(\n f.git.projectGitCwd\n );\n if (cleanupPaths) {\n actions.push({\n type: 'command',\n category: 'worktree_cleanup',\n requiresUserCheck: true,\n scope: 'project',\n cwd: cleanupPaths.projectRoot,\n cmd: tr(lang, 'messages', 'worktreeCleanupCommand', {\n projectGitCwd: cleanupPaths.projectRoot,\n worktreePath: cleanupPaths.worktreePath,\n }),\n });\n }\n return actions;\n },\n },\n },\n ];\n}\n\nexport function getStepsMap(\n lang: Lang,\n workflow?: ProjectConfig['workflow']\n): Record<number, string> {\n return Object.fromEntries(\n getStepDefinitions(lang, workflow).map((d) => [d.step, d.name])\n );\n}\n\nexport const STEP_DEFINITIONS: StepDefinition[] = getStepDefinitions('ko');\nexport const STEPS: Record<number, string> = getStepsMap('ko');\n","import { tr } from '../i18n.js';\nimport { FeatureState, Lang, NextAction, StepDefinition } from './types.js';\nimport { ProjectConfig } from '../config.js';\n\nfunction normalizeApprovalToken(value: string | undefined): string {\n return (value ?? '').trim().toLowerCase();\n}\n\nfunction applyApprovalPolicy(\n step: number,\n actions: NextAction[],\n approval?: ProjectConfig['approval']\n): NextAction[] {\n if (!approval) return actions;\n const mode = approval.mode ?? 'builtin';\n if (mode === 'builtin') return actions;\n\n if (mode === 'steps') {\n const required = new Set(\n (approval.requireCheckSteps ?? approval.requireOkSteps ?? [])\n .map((n) => (typeof n === 'number' ? n : Number(n)))\n .filter((n) => Number.isFinite(n))\n );\n const requiresUserCheck = required.has(step);\n return actions.map((a) => ({ ...a, requiresUserCheck }));\n }\n\n const requiredCategories = new Set(\n (approval.requireCheckCategories ?? approval.requireOkCategories ?? [])\n .map((c) => normalizeApprovalToken(c))\n .filter(Boolean)\n );\n const skippedCategories = new Set(\n (approval.skipCheckCategories ?? approval.skipOkCategories ?? [])\n .map((c) => normalizeApprovalToken(c))\n .filter(Boolean)\n );\n const defaultPolicy = approval.default ?? 'keep';\n\n return actions.map((a) => {\n const builtin = Boolean(a.requiresUserCheck);\n const category = normalizeApprovalToken(a.category ?? 'uncategorized');\n\n let requiresUserCheck = builtin;\n if (requiredCategories.has('*') || requiredCategories.has(category)) {\n requiresUserCheck = true;\n } else if (skippedCategories.has('*') || skippedCategories.has(category)) {\n requiresUserCheck = false;\n } else if (defaultPolicy === 'require') {\n requiresUserCheck = true;\n } else if (defaultPolicy === 'skip') {\n requiresUserCheck = false;\n }\n\n return { ...a, requiresUserCheck };\n });\n}\n\nfunction withUserRequestReplanOption(\n actions: NextAction[],\n lang: Lang\n): NextAction[] {\n if (actions.some((action) => action.category === 'user_request_replan')) {\n return actions;\n }\n return [\n ...actions,\n {\n type: 'instruction',\n category: 'user_request_replan',\n requiresUserCheck: true,\n message: tr(lang, 'messages', 'userRequestReplan'),\n },\n ];\n}\n\nexport function resolveFeatureProgress(\n feature: FeatureState,\n stepDefinitions: StepDefinition[],\n lang: Lang,\n approval?: ProjectConfig['approval']\n): {\n currentStep: number;\n actions: NextAction[];\n nextAction: string;\n} {\n const ordered = [...stepDefinitions].sort((a, b) => a.step - b.step);\n for (const definition of ordered) {\n if (!definition.current) continue;\n if (definition.current.when(feature)) {\n const currentActions = withUserRequestReplanOption(\n definition.current.actions(feature),\n lang\n );\n const actions = applyApprovalPolicy(\n definition.step,\n currentActions,\n approval\n );\n return {\n currentStep: definition.step,\n actions,\n nextAction: actions\n .map((a) => (a.type === 'command' ? a.cmd : a.message))\n .join('\\n'),\n };\n }\n }\n\n const lastStep = ordered[ordered.length - 1];\n return {\n currentStep: lastStep?.step ?? 10,\n actions: [\n {\n type: 'instruction',\n category: 'fallback',\n message: tr(lang, 'messages', 'fallbackRerunContext'),\n },\n ],\n nextAction: tr(lang, 'messages', 'fallbackRerunContext'),\n };\n}\n","import { execFileSync } from 'child_process';\nimport path from 'path';\nimport { ProjectConfig } from '../config.js';\nimport { DEFAULT_LANG, Lang, tr } from '../i18n.js';\n\nexport function getCurrentBranch(cwd: string): string {\n try {\n return execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {\n cwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n }).trim();\n } catch {\n return '';\n }\n}\n\nexport function getGitStatusPorcelain(\n cwd: string,\n relativePaths: string[]\n): string | undefined {\n const normalizedPaths = toUniqueNormalizedPaths(relativePaths);\n try {\n const args = ['status', '--porcelain=v1'];\n if (normalizedPaths.length > 0) {\n args.push('--', ...normalizedPaths);\n }\n return execFileSync('git', args, {\n cwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeInputPath(value: string): string {\n return value\n .replace(/\\\\/g, '/')\n .replace(/^\\.\\/+/, '')\n .replace(/\\/+$/, '');\n}\n\nfunction toUniqueNormalizedPaths(relativePaths: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const value of relativePaths) {\n const normalized = normalizeInputPath(value);\n if (!normalized) continue;\n if (seen.has(normalized)) continue;\n seen.add(normalized);\n out.push(normalized);\n }\n return out;\n}\n\nexport function getTrackedGitPaths(\n cwd: string,\n relativePaths: string[]\n): Set<string> | undefined {\n const inputs = toUniqueNormalizedPaths(relativePaths);\n if (inputs.length === 0) return new Set<string>();\n try {\n const out = execFileSync('git', ['ls-files', '--', ...inputs], {\n cwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n return new Set(\n out\n .split('\\n')\n .map((line) => normalizeInputPath(line))\n .filter(Boolean)\n );\n } catch {\n return undefined;\n }\n}\n\nexport function getIgnoredGitPaths(\n cwd: string,\n relativePaths: string[]\n): Set<string> | undefined {\n const inputs = toUniqueNormalizedPaths(relativePaths);\n if (inputs.length === 0) return new Set<string>();\n\n try {\n const out = execFileSync('git', ['check-ignore', '--stdin'], {\n cwd,\n encoding: 'utf-8',\n input: `${inputs.join('\\n')}\\n`,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return new Set(\n out\n .split('\\n')\n .map((line) => normalizeInputPath(line))\n .filter(Boolean)\n );\n } catch (error) {\n if (error && typeof error === 'object' && 'status' in error) {\n const status = (error as { status?: number }).status;\n if (status === 1) return new Set<string>();\n }\n return undefined;\n }\n}\n\nexport function getLastCommitForPath(\n cwd: string,\n relativePath: string\n): string | undefined {\n const normalizedPath = normalizeInputPath(relativePath);\n if (!normalizedPath) return undefined;\n try {\n const out = execFileSync(\n 'git',\n ['rev-list', '-n', '1', 'HEAD', '--', normalizedPath],\n {\n cwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n }\n ).trim();\n return out || undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function isGitPathIgnored(\n cwd: string,\n relativePath: string\n): boolean | undefined {\n try {\n execFileSync('git', ['check-ignore', '-q', '--', relativePath], {\n cwd,\n stdio: 'ignore',\n });\n return true;\n } catch (error) {\n if (error && typeof error === 'object' && 'status' in error) {\n const status = (error as { status?: number }).status;\n if (status === 1) return false;\n }\n return undefined;\n }\n}\n\ninterface GitWorktreeEntry {\n path: string;\n branch?: string;\n}\n\nconst GIT_WORKTREE_CACHE = new Map<string, GitWorktreeEntry[]>();\n\nexport function resetContextGitCaches(): void {\n GIT_WORKTREE_CACHE.clear();\n}\n\nfunction getGitTopLevel(cwd: string): string | null {\n try {\n return execFileSync('git', ['rev-parse', '--show-toplevel'], {\n cwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n }).trim();\n } catch {\n return null;\n }\n}\n\nfunction listGitWorktrees(cwd: string): GitWorktreeEntry[] | undefined {\n const topLevel = getGitTopLevel(cwd) || cwd;\n const cacheKey = path.resolve(topLevel);\n const cached = GIT_WORKTREE_CACHE.get(cacheKey);\n if (cached) return cached;\n\n try {\n const out = execFileSync('git', ['worktree', 'list', '--porcelain'], {\n cwd: topLevel,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n const entries: GitWorktreeEntry[] = [];\n let current: GitWorktreeEntry | null = null;\n\n for (const rawLine of out.split('\\n')) {\n const line = rawLine.trim();\n if (!line) {\n if (current?.path) entries.push(current);\n current = null;\n continue;\n }\n\n if (line.startsWith('worktree ')) {\n if (current?.path) entries.push(current);\n current = { path: line.slice('worktree '.length).trim() };\n continue;\n }\n\n if (line.startsWith('branch ')) {\n if (!current) continue;\n const fullRef = line.slice('branch '.length).trim();\n current.branch = fullRef.replace(/^refs\\/heads\\//, '');\n }\n }\n\n if (current?.path) entries.push(current);\n GIT_WORKTREE_CACHE.set(cacheKey, entries);\n return entries;\n } catch {\n return undefined;\n }\n}\n\nexport function findWorktreePathForBranch(\n cwd: string,\n branchName: string\n): string | undefined {\n const target = branchName.trim();\n if (!target) return undefined;\n const entries = listGitWorktrees(cwd);\n if (!entries) return undefined;\n const match = entries.find((entry) => entry.branch === target);\n return match?.path;\n}\n\nexport function resolveProjectGitCwd(\n config: ProjectConfig,\n repo: string,\n lang: Lang = config.lang ?? DEFAULT_LANG\n): { cwd: string | null; warning?: string } {\n const docsRepo = config.docsRepo;\n if (docsRepo !== 'standalone') {\n const topLevel = getGitTopLevel(process.cwd());\n return { cwd: topLevel || process.cwd() };\n }\n\n if (!config.projectRoot) {\n return {\n cwd: null,\n warning: tr(lang, 'cli', 'context.git.standaloneProjectRootMissing'),\n };\n }\n\n if (config.projectType === 'multi') {\n if (typeof config.projectRoot === 'string') {\n return {\n cwd: null,\n warning: tr(lang, 'cli', 'context.git.multiProjectRootShapeInvalid'),\n };\n }\n const root = config.projectRoot[repo];\n if (!root) {\n return {\n cwd: null,\n warning: tr(lang, 'cli', 'context.git.multiProjectRootRepoMissing', {\n repo,\n }),\n };\n }\n return { cwd: getGitTopLevel(root) || root };\n }\n\n if (typeof config.projectRoot !== 'string') {\n return {\n cwd: null,\n warning: tr(lang, 'cli', 'context.git.singleProjectRootShapeInvalid'),\n };\n }\n return { cwd: getGitTopLevel(config.projectRoot) || config.projectRoot };\n}\n\nexport function isExpectedFeatureBranch(\n branchName: string,\n issueNumber: string | undefined,\n slug: string,\n folderName: string\n): boolean {\n if (!branchName || !issueNumber) return false;\n const match = branchName.match(new RegExp(`^feat\\\\/${issueNumber}-(.+)$`));\n if (!match) return false;\n const rest = match[1];\n return rest === slug || rest === folderName;\n}\n","import fs from 'fs-extra';\nimport path from 'path';\nimport { execFileSync } from 'child_process';\nimport { tr } from '../i18n.js';\nimport {\n findWorktreePathForBranch,\n getCurrentBranch,\n getGitStatusPorcelain,\n getLastCommitForPath,\n isExpectedFeatureBranch,\n isGitPathIgnored,\n} from './git.js';\nimport { resolveFeatureProgress } from './progress.js';\nimport {\n CompletionChecklistSummary,\n DocStatus,\n FeatureContext,\n FeatureState,\n Lang,\n PrePrReviewFindings,\n PrePrReviewStatus,\n PrReviewFindings,\n PrRemoteStatus,\n PrReviewStatus,\n RepoType,\n StepDefinition,\n TaskRef,\n WorkflowDocStatus,\n} from './types.js';\nimport { ProjectConfig } from '../config.js';\nimport {\n resolveCodeDirtyScopePolicy,\n resolvePrePrReviewPolicy,\n resolveWorkflowPolicy,\n} from '../workflow.js';\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction extractSpecValue(content: string, key: string): string | undefined {\n const regex = new RegExp(\n `^\\\\s*-\\\\s*\\\\*\\\\*${escapeRegExp(key)}\\\\*\\\\*\\\\s*:\\\\s*(.*)$`,\n 'm'\n );\n const match = content.match(regex);\n return match ? match[1].trim() : undefined;\n}\n\nfunction hasSpecKey(content: string, key: string): boolean {\n const regex = new RegExp(\n `^\\\\s*-\\\\s*\\\\*\\\\*${escapeRegExp(key)}\\\\*\\\\*\\\\s*:`,\n 'm'\n );\n return regex.test(content);\n}\n\nfunction hasAnySpecKey(content: string, keys: string[]): boolean {\n return keys.some((key) => hasSpecKey(content, key));\n}\n\nfunction extractFirstSpecValue(content: string, keys: string[]): string | undefined {\n for (const key of keys) {\n const value = extractSpecValue(content, key);\n if (value) return value;\n }\n return undefined;\n}\n\nfunction parseDocStatus(value: string | undefined): DocStatus | undefined {\n if (!value) return undefined;\n const trimmed = value.trim();\n if (trimmed.includes('|')) return undefined;\n\n const match = trimmed.match(/\\b(Draft|Review|In[ -_]?Review|Approved)\\b/i);\n if (!match) return undefined;\n const normalized = match[1].toLowerCase().replace(/[\\s_-]/g, '');\n if (normalized === 'draft') return 'Draft';\n if (normalized === 'review' || normalized === 'inreview') return 'Review';\n return 'Approved';\n}\n\nfunction parseWorkflowDocStatus(value: string | undefined): WorkflowDocStatus | undefined {\n if (!value) return undefined;\n const trimmed = value.trim();\n if (!trimmed || trimmed.includes('|')) return undefined;\n\n const match = trimmed.match(/\\b(Draft|Ready|Opened|Open|Merged)\\b/i);\n if (!match) return undefined;\n const normalized = match[1].toLowerCase();\n if (normalized === 'draft') return 'Draft';\n // Backward compatibility:\n // Legacy workflow docs used Opened/Merged, but current branching treats\n // \"ready to execute/create\" as a single state.\n if (\n normalized === 'ready' ||\n normalized === 'opened' ||\n normalized === 'open' ||\n normalized === 'merged'\n ) {\n return 'Ready';\n }\n return undefined;\n}\n\nfunction parsePrReviewStatus(value: string | undefined): PrReviewStatus | undefined {\n if (!value) return undefined;\n const trimmed = value.trim();\n if (!trimmed || trimmed.includes('|')) return undefined;\n\n const match = trimmed.match(/\\b(Review|Approved)\\b/i);\n if (!match) return undefined;\n const normalized = match[1].toLowerCase();\n if (normalized === 'review') return 'Review';\n return 'Approved';\n}\n\nfunction parsePrePrReviewStatus(\n value: string | undefined\n): PrePrReviewStatus | undefined {\n if (!value) return undefined;\n const trimmed = value.trim();\n if (!trimmed || trimmed.includes('|')) return undefined;\n if (/^(done|complete|completed)$/i.test(trimmed)) return 'Done';\n if (/^pending$/i.test(trimmed)) return 'Pending';\n return undefined;\n}\n\nfunction parseReviewFindings(\n value: string | undefined\n): PrReviewFindings | undefined {\n if (!value) return undefined;\n const trimmed = value.trim();\n if (!trimmed || trimmed.includes('|')) return undefined;\n\n const majorMatch = trimmed.match(/\\bmajor\\s*[:=]\\s*(\\d+)\\b/i);\n const minorMatch = trimmed.match(/\\bminor\\s*[:=]\\s*(\\d+)\\b/i);\n if (!majorMatch || !minorMatch) return undefined;\n\n const major = Number(majorMatch[1]);\n const minor = Number(minorMatch[1]);\n if (!Number.isInteger(major) || !Number.isInteger(minor)) return undefined;\n if (major < 0 || minor < 0) return undefined;\n return { major, minor };\n}\n\nfunction isPlaceholderReviewEvidence(value: string | undefined): boolean {\n if (!value) return true;\n const trimmed = value.trim();\n if (!trimmed) return true;\n return /^(?:-|#)?\\s*(?:tbd|todo|n\\/a|na|none|pending|미정|없음|-)\\s*$/i.test(\n trimmed\n );\n}\n\nfunction hasStructuredReviewSummary(value: string | undefined): boolean {\n if (!value) return false;\n const trimmed = value.trim();\n if (!trimmed) return false;\n return /^(?:summary|요약)\\s*[::]\\s*\\S.+$/i.test(trimmed);\n}\n\nfunction parseIssueNumber(value: string | undefined): string | undefined {\n if (!value) return undefined;\n const match = value.match(/#?(\\d+)/);\n return match ? match[1] : undefined;\n}\n\nfunction parsePrLink(value: string | undefined): string | undefined {\n if (!value) return undefined;\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n if (trimmed === '#' || trimmed === '-') return undefined;\n // Common placeholders that shouldn't count as \"PR exists\"\n // e.g. \"#TBD\", \"TBD\", \"TODO\", \"N/A\", \"미정\", \"없음\"\n if (/^(?:#\\s*)?(?:tbd|todo|n\\/a|na|none|pending|미정|없음)$/i.test(trimmed)) {\n return undefined;\n }\n if (trimmed.includes('{') || trimmed.includes('}')) return undefined;\n return trimmed;\n}\n\nfunction normalizeGitPath(value: string): string {\n return value.split(path.sep).join('/');\n}\n\nfunction resolveProjectStatusPaths(\n projectGitCwd: string,\n docsDir: string\n): string[] {\n const relativeDocsDir = path.relative(projectGitCwd, docsDir);\n if (!relativeDocsDir) return [];\n if (path.isAbsolute(relativeDocsDir)) return [];\n if (relativeDocsDir === '..' || relativeDocsDir.startsWith(`..${path.sep}`)) {\n return [];\n }\n\n const normalizedDocsDir = normalizeGitPath(relativeDocsDir).replace(/\\/+$/, '');\n if (!normalizedDocsDir) return [];\n return ['.', `:(exclude)${normalizedDocsDir}/**`];\n}\n\nfunction uniqueNormalizedPaths(values: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const value of values) {\n const normalized = normalizeGitPath(value).replace(/^\\.\\/+/, '').replace(/\\/+$/, '');\n if (!normalized || normalized === '.' || normalized === '..') continue;\n if (seen.has(normalized)) continue;\n seen.add(normalized);\n out.push(normalized);\n }\n return out;\n}\n\nconst PROJECT_DIRTY_STATUS_CACHE = new Map<\n string,\n { hasUncommittedChanges: boolean; statusUnavailable: boolean }\n>();\n\nconst COMPONENT_STATUS_PATH_CACHE = new Map<string, string[]>();\nconst PR_REMOTE_STATUS_CACHE = new Map<string, PrRemoteStatus | null>();\nconst FEATURE_WORKTREE_CACHE = new Map<string, string | null>();\n\nexport function resetContextParseCaches(): void {\n PROJECT_DIRTY_STATUS_CACHE.clear();\n COMPONENT_STATUS_PATH_CACHE.clear();\n PR_REMOTE_STATUS_CACHE.clear();\n FEATURE_WORKTREE_CACHE.clear();\n}\n\nfunction resolveFeatureWorktreePath(\n projectGitCwd: string,\n issueNumber: string,\n slug: string,\n folderName: string\n): { cwd: string; branch: string } | undefined {\n const expectedBranches = [\n `feat/${issueNumber}-${slug}`,\n `feat/${issueNumber}-${folderName}`,\n ];\n\n for (const branchName of expectedBranches) {\n const cacheKey = `${projectGitCwd}::${branchName}`;\n let foundPath = FEATURE_WORKTREE_CACHE.get(cacheKey);\n if (typeof foundPath === 'undefined') {\n foundPath = findWorktreePathForBranch(projectGitCwd, branchName) || null;\n FEATURE_WORKTREE_CACHE.set(cacheKey, foundPath);\n }\n if (!foundPath) continue;\n return {\n cwd: foundPath,\n branch: getCurrentBranch(foundPath) || branchName,\n };\n }\n return undefined;\n}\n\nfunction toUpperToken(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const normalized = value.trim().toUpperCase();\n return normalized || undefined;\n}\n\nfunction parseCheckSignal(check: unknown): { failing: boolean; pending: boolean } {\n if (!check || typeof check !== 'object') return { failing: false, pending: false };\n const row = check as Record<string, unknown>;\n const tokens = new Set<string>();\n for (const key of ['conclusion', 'status', 'state']) {\n const token = toUpperToken(row[key]);\n if (token) tokens.add(token);\n }\n\n for (const token of tokens) {\n if (\n token === 'FAILURE' ||\n token === 'FAILED' ||\n token === 'ERROR' ||\n token === 'TIMED_OUT' ||\n token === 'CANCELLED' ||\n token === 'ACTION_REQUIRED' ||\n token === 'STARTUP_FAILURE'\n ) {\n return { failing: true, pending: false };\n }\n }\n\n for (const token of tokens) {\n if (\n token === 'PENDING' ||\n token === 'IN_PROGRESS' ||\n token === 'QUEUED' ||\n token === 'EXPECTED' ||\n token === 'WAITING' ||\n token === 'REQUESTED'\n ) {\n return { failing: false, pending: true };\n }\n }\n\n return { failing: false, pending: false };\n}\n\nfunction isMergeBlockedState(value: string | undefined): boolean {\n if (!value) return false;\n return (\n value === 'BLOCKED' ||\n value === 'DIRTY' ||\n value === 'BEHIND' ||\n value === 'DRAFT' ||\n value === 'HAS_HOOKS' ||\n value === 'UNKNOWN' ||\n value === 'UNSTABLE'\n );\n}\n\nfunction resolvePrRemoteStatus(\n prRef: string,\n projectGitCwd: string\n): PrRemoteStatus | null {\n const cacheKey = `${projectGitCwd}::${prRef}`;\n if (PR_REMOTE_STATUS_CACHE.has(cacheKey)) {\n return PR_REMOTE_STATUS_CACHE.get(cacheKey) || null;\n }\n\n try {\n const raw = execFileSync(\n 'gh',\n [\n 'pr',\n 'view',\n prRef,\n '--json',\n 'state,mergedAt,reviewDecision,mergeStateStatus,isDraft,statusCheckRollup',\n ],\n {\n cwd: projectGitCwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n timeout: 5000,\n maxBuffer: 1024 * 1024,\n }\n ).trim();\n if (!raw) {\n PR_REMOTE_STATUS_CACHE.set(cacheKey, null);\n return null;\n }\n\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n const state = toUpperToken(parsed.state);\n const mergedAt =\n typeof parsed.mergedAt === 'string' && parsed.mergedAt.trim().length > 0\n ? parsed.mergedAt.trim()\n : undefined;\n const isMerged = state === 'MERGED' || !!mergedAt;\n const reviewDecision = toUpperToken(parsed.reviewDecision);\n const mergeStateStatus = toUpperToken(parsed.mergeStateStatus);\n const isDraft = parsed.isDraft === true;\n\n let failingChecks = 0;\n let pendingChecks = 0;\n const rollup = Array.isArray(parsed.statusCheckRollup)\n ? parsed.statusCheckRollup\n : [];\n for (const check of rollup) {\n const signal = parseCheckSignal(check);\n if (signal.failing) failingChecks++;\n else if (signal.pending) pendingChecks++;\n }\n\n const remote: PrRemoteStatus = {\n source: 'gh',\n available: true,\n state,\n mergedAt,\n isMerged,\n reviewDecision,\n mergeStateStatus,\n isDraft,\n hasBlockingReview:\n reviewDecision === 'CHANGES_REQUESTED' || reviewDecision === 'REVIEW_REQUIRED',\n mergeBlocked: !isMerged && (isDraft || isMergeBlockedState(mergeStateStatus)),\n failingChecks,\n pendingChecks,\n };\n PR_REMOTE_STATUS_CACHE.set(cacheKey, remote);\n return remote;\n } catch {\n PR_REMOTE_STATUS_CACHE.set(cacheKey, null);\n return null;\n }\n}\n\nasync function resolveComponentStatusPaths(\n projectGitCwd: string,\n component: string,\n workflow?: ProjectConfig['workflow']\n): Promise<string[]> {\n const configured = workflow?.componentPaths?.[component];\n const configuredCandidates = Array.isArray(configured)\n ? configured.map((value) => String(value).trim()).filter(Boolean)\n : [];\n\n const candidates =\n configuredCandidates.length > 0\n ? configuredCandidates\n : [\n component,\n `apps/${component}`,\n `packages/${component}`,\n `services/${component}`,\n `modules/${component}`,\n ];\n\n const normalizedCandidates = uniqueNormalizedPaths(\n candidates\n .map((candidate) => {\n if (!candidate) return '';\n if (!path.isAbsolute(candidate)) return candidate;\n const relative = path.relative(projectGitCwd, candidate);\n if (!relative) return '';\n if (relative === '..' || relative.startsWith(`..${path.sep}`)) return '';\n return relative;\n })\n .filter(Boolean)\n );\n\n const cacheKey = JSON.stringify({\n projectGitCwd,\n component,\n normalizedCandidates,\n });\n const cached = COMPONENT_STATUS_PATH_CACHE.get(cacheKey);\n if (cached) return [...cached];\n\n const existing: string[] = [];\n for (const candidate of normalizedCandidates) {\n if (await fs.pathExists(path.join(projectGitCwd, candidate))) {\n existing.push(candidate);\n }\n }\n COMPONENT_STATUS_PATH_CACHE.set(cacheKey, [...existing]);\n return existing;\n}\n\nfunction parseTasks(content: string): {\n summary: FeatureState['tasks'];\n activeTask?: TaskRef;\n lastDoneTask?: TaskRef;\n nextTodoTask?: TaskRef;\n} {\n const summary = { total: 0, todo: 0, doing: 0, done: 0 };\n let activeTask: TaskRef | undefined;\n let lastDoneTask: TaskRef | undefined;\n let nextTodoTask: TaskRef | undefined;\n\n const lines = content.split('\\n');\n let inCodeBlock = false;\n for (const line of lines) {\n // Ignore fenced code blocks (templates/examples).\n if (/^\\s*(```|~~~)/.test(line)) {\n inCodeBlock = !inCodeBlock;\n continue;\n }\n if (inCodeBlock) continue;\n\n const match = line.match(/^\\s*-\\s*\\[([A-Z]+)\\]((?:\\[[^\\]]+\\])*)\\s*(.+?)\\s*$/);\n if (!match) continue;\n\n const status = match[1].toUpperCase();\n const title = match[3].trim();\n const taskIdMatch = title.match(/\\b(T-[A-Za-z0-9-]+)\\b/);\n const taskId = taskIdMatch ? taskIdMatch[1] : undefined;\n\n summary.total++;\n if (status === 'DONE') summary.done++;\n else if (status === 'DOING' || status === 'REVIEW') summary.doing++;\n else if (status === 'TODO') summary.todo++;\n\n if (!activeTask && (status === 'DOING' || status === 'REVIEW')) {\n activeTask = { id: taskId, status: status as TaskRef['status'], title };\n }\n if (status === 'DONE') {\n lastDoneTask = { id: taskId, status: 'DONE', title };\n }\n if (!nextTodoTask && status === 'TODO') {\n nextTodoTask = { id: taskId, status: 'TODO', title };\n }\n }\n\n return { summary, activeTask, lastDoneTask, nextTodoTask };\n}\n\nfunction parseCompletionChecklist(content: string): CompletionChecklistSummary | undefined {\n const lines = content.split('\\n');\n const startIndex = lines.findIndex((line) =>\n /^\\s*##\\s+(완료 조건|Completion Criteria)\\s*$/.test(line)\n );\n if (startIndex === -1) return undefined;\n\n let total = 0;\n let checked = 0;\n\n for (let i = startIndex + 1; i < lines.length; i++) {\n const line = lines[i];\n if (/^\\s*##\\s+/.test(line)) break;\n\n const match = line.match(/^\\s*-\\s*\\[([ xX])\\]\\s+/);\n if (!match) continue;\n total++;\n if (match[1].toLowerCase() === 'x') checked++;\n }\n\n return total > 0 ? { total, checked } : undefined;\n}\n\nfunction isCompletionChecklistDone(feature: {\n completionChecklist?: CompletionChecklistSummary;\n}): boolean {\n return (\n !!feature.completionChecklist &&\n feature.completionChecklist.total > 0 &&\n feature.completionChecklist.checked === feature.completionChecklist.total\n );\n}\n\nfunction isPrMetadataConfigured(feature: {\n docs: { prFieldExists: boolean; prStatusFieldExists: boolean };\n}): boolean {\n return feature.docs.prFieldExists && feature.docs.prStatusFieldExists;\n}\n\nfunction isPrePrReviewSatisfied(\n feature: {\n docs: {\n prePrReviewFieldExists: boolean;\n prePrFindingsFieldExists: boolean;\n prePrEvidenceFieldExists: boolean;\n };\n prePrReview: {\n status?: PrePrReviewStatus;\n findings?: PrePrReviewFindings;\n evidenceProvided: boolean;\n };\n },\n policy: ReturnType<typeof resolvePrePrReviewPolicy>\n): boolean {\n if (!policy.enabled) return true;\n if (!feature.docs.prePrReviewFieldExists || feature.prePrReview.status !== 'Done') {\n return false;\n }\n if (!feature.docs.prePrFindingsFieldExists || !feature.prePrReview.findings) {\n return false;\n }\n if (\n !feature.docs.prePrEvidenceFieldExists ||\n !feature.prePrReview.evidenceProvided\n ) {\n return false;\n }\n if (policy.blockOnFindings && feature.prePrReview.findings.major > 0) {\n return false;\n }\n if (\n policy.minorPolicy === 'block' &&\n feature.prePrReview.findings.minor > 0\n ) {\n return false;\n }\n return true;\n}\n\nexport async function parseFeature(\n featurePath: string,\n type: RepoType,\n context: {\n projectBranch: string;\n docsBranch: string;\n docsGitCwd: string;\n projectGitCwd?: string;\n docsDir: string;\n projectBranchAvailable: boolean;\n docsPathIgnored?: boolean;\n docsHasUncommittedChanges?: boolean;\n docsEverCommitted?: boolean;\n docsGitUnavailable?: boolean;\n projectHasUncommittedChanges?: boolean;\n projectStatusUnavailable?: boolean;\n },\n options: {\n lang: Lang;\n stepDefinitions: StepDefinition[];\n approval?: ProjectConfig['approval'];\n workflow?: ProjectConfig['workflow'];\n projectType: 'single' | 'multi';\n }\n): Promise<FeatureContext> {\n const lang = options.lang;\n const workflowPolicy = resolveWorkflowPolicy(options.workflow);\n const prePrReviewPolicy = resolvePrePrReviewPolicy(options.workflow);\n const folderName = path.basename(featurePath);\n const match = folderName.match(/^(F\\d+)-(.+)$/);\n const id = match?.[1];\n const slug = match?.[2] || folderName;\n\n const specPath = path.join(featurePath, 'spec.md');\n const planPath = path.join(featurePath, 'plan.md');\n const tasksPath = path.join(featurePath, 'tasks.md');\n const issueDocPath = path.join(featurePath, 'issue.md');\n const prDocPath = path.join(featurePath, 'pr.md');\n\n let specStatus: DocStatus | undefined;\n let issueNumber: string | undefined;\n const specExists = await fs.pathExists(specPath);\n\n if (specExists) {\n const content = await fs.readFile(specPath, 'utf-8');\n const statusValue = extractFirstSpecValue(content, ['상태', 'Status']);\n specStatus = parseDocStatus(statusValue);\n\n const issueValue = extractFirstSpecValue(content, ['이슈 번호', 'Issue Number', 'Issue']);\n issueNumber = parseIssueNumber(issueValue);\n }\n\n let effectiveProjectGitCwd = context.projectGitCwd;\n let effectiveProjectBranch = context.projectBranch;\n let effectiveProjectBranchAvailable = context.projectBranchAvailable;\n\n if (effectiveProjectGitCwd && issueNumber) {\n const alreadyExpected = isExpectedFeatureBranch(\n effectiveProjectBranch,\n issueNumber,\n slug,\n folderName\n );\n if (!alreadyExpected) {\n const worktree = resolveFeatureWorktreePath(\n effectiveProjectGitCwd,\n issueNumber,\n slug,\n folderName\n );\n if (worktree) {\n effectiveProjectGitCwd = worktree.cwd;\n effectiveProjectBranch = worktree.branch;\n effectiveProjectBranchAvailable = true;\n }\n }\n }\n\n let planStatus: DocStatus | undefined;\n const planExists = await fs.pathExists(planPath);\n\n if (planExists) {\n const content = await fs.readFile(planPath, 'utf-8');\n const statusValue = extractFirstSpecValue(content, ['상태', 'Status']);\n planStatus = parseDocStatus(statusValue);\n }\n\n const tasksExists = await fs.pathExists(tasksPath);\n const tasksSummary = { total: 0, todo: 0, doing: 0, done: 0 };\n let activeTask: TaskRef | undefined;\n let lastDoneTask: TaskRef | undefined;\n let nextTodoTask: TaskRef | undefined;\n let tasksDocStatus: DocStatus | undefined;\n let tasksDocStatusFieldExists = false;\n let completionChecklist: CompletionChecklistSummary | undefined;\n let prePrReviewStatus: PrePrReviewStatus | undefined;\n let prePrFindings: PrePrReviewFindings | undefined;\n let prePrEvidence: string | undefined;\n let prePrEvidenceProvided = false;\n let prReviewFindings: PrReviewFindings | undefined;\n let prReviewEvidence: string | undefined;\n let prReviewEvidenceProvided = false;\n let prLink: string | undefined;\n let prStatus: PrReviewStatus | undefined;\n let prRemote: PrRemoteStatus | undefined;\n let prFieldExists = false;\n let prStatusFieldExists = false;\n let issueDocStatus: WorkflowDocStatus | undefined;\n let issueDocStatusFieldExists = false;\n let issueDocIssueFieldExists = false;\n let prDocStatus: WorkflowDocStatus | undefined;\n let prDocStatusFieldExists = false;\n let prDocPrFieldExists = false;\n let prDocReviewStatusFieldExists = false;\n let prePrReviewFieldExists = false;\n let prePrFindingsFieldExists = false;\n let prePrEvidenceFieldExists = false;\n let prReviewFindingsFieldExists = false;\n let prReviewEvidenceFieldExists = false;\n\n if (tasksExists) {\n const content = await fs.readFile(tasksPath, 'utf-8');\n const {\n summary,\n activeTask: active,\n lastDoneTask: lastDone,\n nextTodoTask: nextTodo,\n } = parseTasks(content);\n tasksSummary.total = summary.total;\n tasksSummary.todo = summary.todo;\n tasksSummary.doing = summary.doing;\n tasksSummary.done = summary.done;\n activeTask = active;\n lastDoneTask = lastDone;\n nextTodoTask = nextTodo;\n completionChecklist = parseCompletionChecklist(content);\n\n const issueValue = extractFirstSpecValue(content, [\n '이슈 번호',\n 'Issue Number',\n 'Issue',\n ]);\n // tasks.md is the primary source of operational tracking metadata.\n issueNumber = parseIssueNumber(issueValue);\n\n const tasksDocStatusValue = extractFirstSpecValue(content, ['문서 상태', 'Doc Status']);\n tasksDocStatusFieldExists = hasAnySpecKey(content, ['문서 상태', 'Doc Status']);\n tasksDocStatus = parseDocStatus(tasksDocStatusValue);\n\n const prValue = extractFirstSpecValue(content, ['PR', 'Pull Request']);\n prFieldExists = hasAnySpecKey(content, ['PR', 'Pull Request']);\n prLink = parsePrLink(prValue);\n\n const prStatusValue = extractFirstSpecValue(content, ['PR 상태', 'PR Status']);\n prStatusFieldExists = hasAnySpecKey(content, ['PR 상태', 'PR Status']);\n prStatus = parsePrReviewStatus(prStatusValue);\n\n const prePrReviewValue = extractFirstSpecValue(content, [\n 'PR 전 리뷰',\n 'Pre-PR Review',\n ]);\n prePrReviewFieldExists = hasAnySpecKey(content, [\n 'PR 전 리뷰',\n 'Pre-PR Review',\n ]);\n prePrReviewStatus = parsePrePrReviewStatus(prePrReviewValue);\n\n const prePrFindingsValue = extractFirstSpecValue(content, [\n 'PR 전 리뷰 Findings',\n 'Pre-PR Findings',\n ]);\n prePrFindingsFieldExists = hasAnySpecKey(content, [\n 'PR 전 리뷰 Findings',\n 'Pre-PR Findings',\n ]);\n prePrFindings = parseReviewFindings(prePrFindingsValue);\n\n const prePrEvidenceValue = extractFirstSpecValue(content, [\n 'PR 전 리뷰 Evidence',\n 'Pre-PR Evidence',\n ]);\n prePrEvidenceFieldExists = hasAnySpecKey(content, [\n 'PR 전 리뷰 Evidence',\n 'Pre-PR Evidence',\n ]);\n prePrEvidence = prePrEvidenceValue?.trim();\n prePrEvidenceProvided = !isPlaceholderReviewEvidence(prePrEvidenceValue);\n\n const prReviewFindingsValue = extractFirstSpecValue(content, [\n 'PR 리뷰 Findings',\n 'PR Review Findings',\n ]);\n prReviewFindingsFieldExists = hasAnySpecKey(content, [\n 'PR 리뷰 Findings',\n 'PR Review Findings',\n ]);\n prReviewFindings = parseReviewFindings(prReviewFindingsValue);\n\n const prReviewEvidenceValue = extractFirstSpecValue(content, [\n 'PR 리뷰 Evidence',\n 'PR Review Evidence',\n ]);\n prReviewEvidenceFieldExists = hasAnySpecKey(content, [\n 'PR 리뷰 Evidence',\n 'PR Review Evidence',\n ]);\n prReviewEvidence = prReviewEvidenceValue?.trim();\n prReviewEvidenceProvided =\n !isPlaceholderReviewEvidence(prReviewEvidenceValue) &&\n hasStructuredReviewSummary(prReviewEvidenceValue);\n }\n\n // tasks.md is the primary source of issue metadata. Re-resolve feature worktree\n // after parsing tasks so branch detection reflects newly created worktrees\n // even when spec.md still has placeholder issue values.\n if (effectiveProjectGitCwd && issueNumber) {\n const alreadyExpected = isExpectedFeatureBranch(\n effectiveProjectBranch,\n issueNumber,\n slug,\n folderName\n );\n if (!alreadyExpected) {\n const worktree = resolveFeatureWorktreePath(\n effectiveProjectGitCwd,\n issueNumber,\n slug,\n folderName\n );\n if (worktree) {\n effectiveProjectGitCwd = worktree.cwd;\n effectiveProjectBranch = worktree.branch;\n effectiveProjectBranchAvailable = true;\n }\n }\n }\n\n const issueDocExists = await fs.pathExists(issueDocPath);\n if (issueDocExists) {\n const content = await fs.readFile(issueDocPath, 'utf-8');\n const issueDocStatusValue = extractFirstSpecValue(content, ['상태', 'Status']);\n issueDocStatusFieldExists = hasAnySpecKey(content, ['상태', 'Status']);\n issueDocStatus = parseWorkflowDocStatus(issueDocStatusValue);\n\n issueDocIssueFieldExists = hasAnySpecKey(content, [\n '이슈 번호',\n 'Issue Number',\n 'Issue',\n ]);\n }\n\n const prDocExists = await fs.pathExists(prDocPath);\n if (prDocExists) {\n const content = await fs.readFile(prDocPath, 'utf-8');\n const prDocStatusValue = extractFirstSpecValue(content, ['상태', 'Status']);\n prDocStatusFieldExists = hasAnySpecKey(content, ['상태', 'Status']);\n prDocStatus = parseWorkflowDocStatus(prDocStatusValue);\n\n prDocPrFieldExists = hasAnySpecKey(content, ['PR', 'Pull Request']);\n\n prDocReviewStatusFieldExists = hasAnySpecKey(content, ['PR 상태', 'PR Status']);\n }\n\n if (\n workflowPolicy.requireReview &&\n prStatus === 'Review' &&\n prLink &&\n effectiveProjectGitCwd\n ) {\n prRemote = resolvePrRemoteStatus(prLink, effectiveProjectGitCwd) || undefined;\n }\n\n const warnings: string[] = [];\n if (effectiveProjectBranchAvailable === false) {\n warnings.push(tr(lang, 'warnings', 'projectBranchUnavailable'));\n }\n\n const onExpectedBranch = isExpectedFeatureBranch(\n effectiveProjectBranch,\n issueNumber,\n slug,\n folderName\n );\n\n const relativeFeaturePathFromDocs = path.relative(context.docsDir, featurePath);\n const normalizedFeaturePathFromDocs = normalizeGitPath(relativeFeaturePathFromDocs);\n const docsPathIgnored =\n typeof context.docsPathIgnored === 'boolean'\n ? context.docsPathIgnored\n : isGitPathIgnored(context.docsGitCwd, normalizedFeaturePathFromDocs);\n\n let docsHasUncommittedChanges =\n typeof context.docsHasUncommittedChanges === 'boolean'\n ? context.docsHasUncommittedChanges\n : false;\n let docsEverCommitted =\n typeof context.docsEverCommitted === 'boolean'\n ? context.docsEverCommitted\n : false;\n let docsGitUnavailable = !!context.docsGitUnavailable;\n\n if (typeof context.docsHasUncommittedChanges !== 'boolean') {\n const docsStatus = getGitStatusPorcelain(context.docsGitCwd, [normalizedFeaturePathFromDocs]);\n if (docsStatus === undefined) {\n docsGitUnavailable = true;\n docsHasUncommittedChanges = true;\n } else {\n docsHasUncommittedChanges = docsStatus.trim().length > 0;\n }\n }\n\n if (typeof context.docsEverCommitted !== 'boolean') {\n const docsLastCommit = getLastCommitForPath(\n context.docsGitCwd,\n normalizedFeaturePathFromDocs\n );\n docsEverCommitted = !!docsLastCommit;\n }\n\n let projectHasUncommittedChanges =\n typeof context.projectHasUncommittedChanges === 'boolean'\n ? context.projectHasUncommittedChanges\n : false;\n let projectStatusUnavailable = !!context.projectStatusUnavailable;\n\n if (\n typeof context.projectHasUncommittedChanges !== 'boolean' &&\n effectiveProjectGitCwd\n ) {\n const dirtyScopePolicy = resolveCodeDirtyScopePolicy(options.workflow, options.projectType);\n const projectCacheKey = JSON.stringify({\n projectGitCwd: effectiveProjectGitCwd,\n docsDir: context.docsDir,\n type,\n dirtyScopePolicy,\n componentPaths: options.workflow?.componentPaths?.[type] || [],\n });\n const cachedStatus = PROJECT_DIRTY_STATUS_CACHE.get(projectCacheKey);\n if (cachedStatus) {\n projectHasUncommittedChanges = cachedStatus.hasUncommittedChanges;\n projectStatusUnavailable = cachedStatus.statusUnavailable;\n } else {\n let projectStatusPaths: string[] = [];\n if (dirtyScopePolicy === 'component' && type !== 'single') {\n const componentStatusPaths = await resolveComponentStatusPaths(\n effectiveProjectGitCwd,\n type,\n options.workflow\n );\n projectStatusPaths =\n componentStatusPaths.length > 0\n ? componentStatusPaths\n : resolveProjectStatusPaths(effectiveProjectGitCwd, context.docsDir);\n } else {\n projectStatusPaths = resolveProjectStatusPaths(\n effectiveProjectGitCwd,\n context.docsDir\n );\n }\n const projectStatus = getGitStatusPorcelain(\n effectiveProjectGitCwd,\n projectStatusPaths\n );\n projectStatusUnavailable = projectStatus === undefined;\n projectHasUncommittedChanges =\n projectStatus === undefined ? false : projectStatus.trim().length > 0;\n PROJECT_DIRTY_STATUS_CACHE.set(projectCacheKey, {\n hasUncommittedChanges: projectHasUncommittedChanges,\n statusUnavailable: projectStatusUnavailable,\n });\n }\n }\n\n if (docsGitUnavailable) {\n warnings.push(tr(lang, 'warnings', 'docsGitUnavailable'));\n }\n if (docsPathIgnored === true) {\n warnings.push(\n tr(lang, 'warnings', 'docsPathIgnored', {\n path: normalizedFeaturePathFromDocs,\n })\n );\n }\n if (\n tasksExists &&\n workflowPolicy.requirePr &&\n !prDocExists &&\n (!prFieldExists || !prStatusFieldExists)\n ) {\n warnings.push(tr(lang, 'warnings', 'legacyTasksPrFields'));\n }\n if (tasksExists && prePrReviewPolicy.enabled && !prePrReviewFieldExists) {\n warnings.push(tr(lang, 'warnings', 'legacyTasksPrePrReviewField'));\n }\n if (tasksExists && prePrReviewPolicy.enabled && !prePrFindingsFieldExists) {\n warnings.push(tr(lang, 'warnings', 'legacyTasksPrePrFindingsField'));\n }\n if (tasksExists && prePrReviewPolicy.enabled && !prePrEvidenceFieldExists) {\n warnings.push(tr(lang, 'warnings', 'legacyTasksPrePrEvidenceField'));\n }\n if (tasksExists && workflowPolicy.requireReview && !prReviewFindingsFieldExists) {\n warnings.push(tr(lang, 'warnings', 'legacyTasksPrReviewFindingsField'));\n }\n if (tasksExists && workflowPolicy.requireReview && !prReviewEvidenceFieldExists) {\n warnings.push(tr(lang, 'warnings', 'legacyTasksPrReviewEvidenceField'));\n }\n if (tasksExists && !tasksDocStatusFieldExists) {\n warnings.push(tr(lang, 'warnings', 'legacyTasksDocStatusField'));\n }\n\n if (docsEverCommitted && docsHasUncommittedChanges) {\n warnings.push(tr(lang, 'warnings', 'docsUncommittedChanges'));\n }\n if (projectHasUncommittedChanges) {\n warnings.push(tr(lang, 'warnings', 'projectUncommittedChanges'));\n }\n if (prRemote?.hasBlockingReview) {\n warnings.push(tr(lang, 'warnings', 'workflowPrRemoteChangesRequested'));\n }\n if ((prRemote?.failingChecks || 0) > 0) {\n warnings.push(\n tr(lang, 'warnings', 'workflowPrRemoteChecksFailing', {\n count: prRemote?.failingChecks || 0,\n })\n );\n }\n if ((prRemote?.pendingChecks || 0) > 0) {\n warnings.push(\n tr(lang, 'warnings', 'workflowPrRemoteChecksPending', {\n count: prRemote?.pendingChecks || 0,\n })\n );\n }\n\n const tasksDocApproved = !tasksDocStatusFieldExists || tasksDocStatus === 'Approved';\n const implementationDone =\n tasksExists &&\n tasksSummary.total > 0 &&\n tasksSummary.total === tasksSummary.done &&\n isCompletionChecklistDone({ completionChecklist }) &&\n tasksDocApproved;\n\n const workflowDone =\n implementationDone &&\n !docsHasUncommittedChanges &&\n !projectHasUncommittedChanges &&\n specStatus === 'Approved' &&\n planStatus === 'Approved' &&\n (!workflowPolicy.requireIssue || !!issueNumber) &&\n (!workflowPolicy.requirePr ||\n (isPrMetadataConfigured({ docs: { prFieldExists, prStatusFieldExists } }) &&\n !!prLink)) &&\n (!workflowPolicy.requireReview || prStatus === 'Approved') &&\n isPrePrReviewSatisfied(\n {\n docs: {\n prePrReviewFieldExists,\n prePrFindingsFieldExists,\n prePrEvidenceFieldExists,\n },\n prePrReview: {\n status: prePrReviewStatus,\n findings: prePrFindings,\n evidenceProvided: prePrEvidenceProvided,\n },\n },\n prePrReviewPolicy\n );\n\n if (implementationDone && !workflowDone) {\n if (specStatus !== 'Approved') {\n warnings.push(tr(lang, 'warnings', 'workflowSpecNotApproved'));\n }\n if (planStatus !== 'Approved') {\n warnings.push(tr(lang, 'warnings', 'workflowPlanNotApproved'));\n }\n\n if (workflowPolicy.requireIssue && !issueNumber) {\n warnings.push(tr(lang, 'warnings', 'workflowIssueMissing'));\n }\n if (projectHasUncommittedChanges) {\n warnings.push(tr(lang, 'warnings', 'workflowProjectUncommittedChanges'));\n }\n\n // PR 필드가 없다면 legacyTasksPrFields가 이미 경고로 올라감\n if (workflowPolicy.requirePr && prFieldExists && prStatusFieldExists) {\n if (!prLink) warnings.push(tr(lang, 'warnings', 'workflowPrLinkMissing'));\n if (workflowPolicy.requireReview) {\n if (!prStatus) warnings.push(tr(lang, 'warnings', 'workflowPrStatusMissing'));\n if (prStatus && prStatus !== 'Approved') {\n warnings.push(tr(lang, 'warnings', 'workflowPrStatusNotApproved'));\n if (prStatus === 'Review') {\n if (!prReviewFindingsFieldExists || !prReviewFindings) {\n warnings.push(tr(lang, 'warnings', 'workflowPrReviewFindingsMissing'));\n }\n if (\n (!prReviewEvidenceFieldExists || !prReviewEvidenceProvided) &&\n (prReviewFindings?.major || 0) + (prReviewFindings?.minor || 0) > 0\n ) {\n warnings.push(tr(lang, 'warnings', 'workflowPrReviewEvidenceMissing'));\n }\n }\n }\n }\n }\n if (prePrReviewPolicy.enabled) {\n if (!prePrReviewFieldExists) {\n warnings.push(tr(lang, 'warnings', 'workflowPrePrReviewMissing'));\n } else if (prePrReviewStatus !== 'Done') {\n warnings.push(tr(lang, 'warnings', 'workflowPrePrReviewNotDone'));\n } else if (!prePrFindingsFieldExists || !prePrFindings) {\n warnings.push(tr(lang, 'warnings', 'workflowPrePrFindingsMissing'));\n } else if (!prePrEvidenceFieldExists || !prePrEvidenceProvided) {\n warnings.push(tr(lang, 'warnings', 'workflowPrePrEvidenceMissing'));\n } else if (prePrReviewPolicy.blockOnFindings && prePrFindings.major > 0) {\n warnings.push(\n tr(lang, 'warnings', 'workflowPrePrFindingsBlocked', {\n count: prePrFindings.major,\n })\n );\n } else if (\n prePrReviewPolicy.minorPolicy === 'block' &&\n prePrFindings.minor > 0\n ) {\n warnings.push(\n tr(lang, 'warnings', 'workflowPrePrMinorFindingsBlocked', {\n count: prePrFindings.minor,\n })\n );\n }\n }\n }\n\n const featureState: FeatureState = {\n id,\n slug,\n folderName,\n type,\n path: featurePath,\n completion: {\n implementationDone,\n workflowDone,\n },\n issueNumber,\n specStatus,\n planStatus,\n tasksDocStatus,\n tasks: tasksSummary,\n activeTask,\n lastDoneTask,\n nextTodoTask,\n completionChecklist,\n prePrReview: {\n status: prePrReviewStatus,\n findings: prePrFindings,\n evidence: prePrEvidence,\n evidenceProvided: prePrEvidenceProvided,\n },\n prReview: {\n findings: prReviewFindings,\n evidence: prReviewEvidence,\n evidenceProvided: prReviewEvidenceProvided,\n },\n pr: { link: prLink, status: prStatus, remote: prRemote },\n git: {\n docsBranch: context.docsBranch,\n projectBranch: effectiveProjectBranch,\n projectBranchAvailable: effectiveProjectBranchAvailable,\n docsGitCwd: context.docsGitCwd,\n projectGitCwd: effectiveProjectGitCwd,\n onExpectedBranch,\n docsEverCommitted,\n docsHasUncommittedChanges,\n projectHasUncommittedChanges,\n docsPathIgnored: docsPathIgnored === true,\n },\n docs: {\n featurePathFromDocs: relativeFeaturePathFromDocs,\n specExists,\n planExists,\n tasksExists,\n issueDocExists,\n issueDocStatus,\n issueDocStatusFieldExists,\n issueDocIssueFieldExists,\n prDocExists,\n prDocStatus,\n prDocStatusFieldExists,\n prDocPrFieldExists,\n prDocReviewStatusFieldExists,\n tasksDocStatusFieldExists,\n prFieldExists,\n prStatusFieldExists,\n prePrReviewFieldExists,\n prePrFindingsFieldExists,\n prePrEvidenceFieldExists,\n prReviewFindingsFieldExists,\n prReviewEvidenceFieldExists,\n },\n };\n\n const { currentStep, actions, nextAction } = resolveFeatureProgress(\n featureState,\n options.stepDefinitions,\n lang,\n options.approval\n );\n\n return { ...featureState, currentStep, actions, nextAction, warnings };\n}\n","import path from 'path';\nimport { ProjectConfig } from '../config.js';\nimport { resolveProjectComponents } from '../components.js';\nimport { listSubdirectories } from '../fs-walk.js';\nimport {\n getCurrentBranch,\n getGitStatusPorcelain,\n getIgnoredGitPaths,\n getTrackedGitPaths,\n resetContextGitCaches,\n resolveProjectGitCwd,\n} from './git.js';\nimport { parseFeature, resetContextParseCaches } from './parse.js';\nimport { getStepDefinitions } from './steps.js';\nimport { FeatureContext } from './types.js';\n\ninterface DocsFeatureGitMeta {\n docsPathIgnored?: boolean;\n docsHasUncommittedChanges: boolean;\n docsEverCommitted: boolean;\n docsGitUnavailable: boolean;\n}\n\nasync function listFeatureDirs(rootDir: string): Promise<string[]> {\n const dirs = await listSubdirectories(rootDir);\n return dirs.filter(\n (value) => path.basename(value).trim().toLowerCase() !== 'feature-base'\n );\n}\n\nfunction normalizeRelPath(value: string): string {\n return value\n .replace(/\\\\/g, '/')\n .replace(/^\\.\\/+/, '')\n .replace(/\\/+$/, '');\n}\n\nfunction parsePorcelainChangedPaths(porcelain: string): string[] {\n const changed: string[] = [];\n for (const rawLine of porcelain.split('\\n')) {\n if (!rawLine.trim()) continue;\n const payload = rawLine.slice(3).trim();\n if (!payload) continue;\n const pathCandidate = payload.includes(' -> ')\n ? payload.split(' -> ').at(-1) || ''\n : payload;\n const normalized = normalizeRelPath(pathCandidate.replace(/^\"+|\"+$/g, ''));\n if (!normalized) continue;\n changed.push(normalized);\n }\n return changed;\n}\n\nfunction findFeaturePathPrefix(\n normalizedPath: string,\n relativeFeaturePaths: string[]\n): string | undefined {\n for (const featurePath of relativeFeaturePaths) {\n if (normalizedPath === featurePath) return featurePath;\n if (normalizedPath.startsWith(`${featurePath}/`)) return featurePath;\n const nestedPrefix = `/${featurePath}`;\n if (normalizedPath.endsWith(nestedPrefix)) return featurePath;\n if (normalizedPath.includes(`${nestedPrefix}/`)) return featurePath;\n }\n return undefined;\n}\n\nfunction buildDefaultDocsFeatureGitMeta(\n relativeFeaturePaths: string[]\n): Map<string, DocsFeatureGitMeta> {\n const map = new Map<string, DocsFeatureGitMeta>();\n for (const featurePath of relativeFeaturePaths) {\n map.set(featurePath, {\n docsPathIgnored: false,\n docsHasUncommittedChanges: false,\n docsEverCommitted: false,\n docsGitUnavailable: false,\n });\n }\n return map;\n}\n\nfunction buildDocsFeatureGitMeta(\n docsGitCwd: string,\n relativeFeaturePaths: string[]\n): Map<string, DocsFeatureGitMeta> {\n const normalizedFeaturePaths = relativeFeaturePaths.map((value) =>\n normalizeRelPath(value)\n );\n const map = buildDefaultDocsFeatureGitMeta(normalizedFeaturePaths);\n\n if (normalizedFeaturePaths.length === 0) return map;\n\n const docsStatus = getGitStatusPorcelain(docsGitCwd, normalizedFeaturePaths);\n if (docsStatus === undefined) {\n for (const featurePath of normalizedFeaturePaths) {\n const current = map.get(featurePath);\n if (!current) continue;\n current.docsGitUnavailable = true;\n current.docsHasUncommittedChanges = true;\n }\n } else {\n const changedPaths = parsePorcelainChangedPaths(docsStatus);\n for (const changedPath of changedPaths) {\n const featurePath = findFeaturePathPrefix(changedPath, normalizedFeaturePaths);\n if (!featurePath) continue;\n const current = map.get(featurePath);\n if (!current) continue;\n current.docsHasUncommittedChanges = true;\n }\n }\n\n const trackedPaths = getTrackedGitPaths(docsGitCwd, normalizedFeaturePaths);\n if (trackedPaths) {\n for (const trackedPath of trackedPaths) {\n const featurePath = findFeaturePathPrefix(\n normalizeRelPath(trackedPath),\n normalizedFeaturePaths\n );\n if (!featurePath) continue;\n const current = map.get(featurePath);\n if (!current) continue;\n current.docsEverCommitted = true;\n }\n }\n\n const ignoredPaths = getIgnoredGitPaths(docsGitCwd, normalizedFeaturePaths);\n if (ignoredPaths) {\n for (const ignoredPath of ignoredPaths) {\n const featurePath = findFeaturePathPrefix(\n normalizeRelPath(ignoredPath),\n normalizedFeaturePaths\n );\n if (!featurePath) continue;\n const current = map.get(featurePath);\n if (!current) continue;\n current.docsPathIgnored = true;\n }\n }\n\n return map;\n}\n\nexport async function scanFeatures(config: ProjectConfig): Promise<{\n features: FeatureContext[];\n branches: {\n docs: string;\n project: Record<string, string>;\n };\n warnings: string[];\n}> {\n // Keep cache lifetime within one scan pass so flow before/after re-evaluation\n // always reflects freshly created branches/worktrees.\n resetContextGitCaches();\n resetContextParseCaches();\n\n const features: FeatureContext[] = [];\n const warnings: string[] = [];\n const stepDefinitions = getStepDefinitions(config.lang, config.workflow);\n\n const docsBranch = getCurrentBranch(config.docsDir);\n\n const projectBranches: Record<string, string> = {};\n const projectGitCwds: Record<string, string | undefined> = {};\n let singleProject: { cwd: string | null; warning?: string } | undefined;\n\n if (config.projectType === 'single') {\n singleProject = resolveProjectGitCwd(config, 'single', config.lang);\n if (singleProject.warning) warnings.push(singleProject.warning);\n projectBranches.single = singleProject.cwd ? getCurrentBranch(singleProject.cwd) : '';\n projectGitCwds.single = singleProject.cwd ?? undefined;\n } else {\n const components = resolveProjectComponents(config.projectType, config.components);\n for (const component of components) {\n const project = resolveProjectGitCwd(config, component, config.lang);\n if (project.warning) warnings.push(project.warning);\n projectBranches[component] = project.cwd ? getCurrentBranch(project.cwd) : '';\n projectGitCwds[component] = project.cwd ?? undefined;\n }\n }\n\n const allFeatureDirs: string[] = [];\n const componentFeatureDirs = new Map<string, string[]>();\n\n if (config.projectType === 'single') {\n const featureDirs = await listFeatureDirs(path.join(config.docsDir, 'features'));\n componentFeatureDirs.set('single', featureDirs);\n allFeatureDirs.push(...featureDirs);\n } else {\n const components = resolveProjectComponents(config.projectType, config.components);\n for (const component of components) {\n const componentDirs = await listFeatureDirs(\n path.join(config.docsDir, 'features', component)\n );\n componentFeatureDirs.set(component, componentDirs);\n allFeatureDirs.push(...componentDirs);\n }\n }\n\n const relativeFeaturePaths = allFeatureDirs.map((dir) =>\n normalizeRelPath(path.relative(config.docsDir, dir))\n );\n const docsGitMeta = buildDocsFeatureGitMeta(config.docsDir, relativeFeaturePaths);\n\n const parseTargets =\n config.projectType === 'single'\n ? [{ type: 'single', dirs: componentFeatureDirs.get('single') || [] }]\n : resolveProjectComponents(config.projectType, config.components).map((component) => ({\n type: component,\n dirs: componentFeatureDirs.get(component) || [],\n }));\n\n for (const target of parseTargets) {\n const parsed = await Promise.all(\n target.dirs.map(async (dir) => {\n const relativeFeaturePathFromDocs = normalizeRelPath(\n path.relative(config.docsDir, dir)\n );\n const docsMeta = docsGitMeta.get(relativeFeaturePathFromDocs);\n return parseFeature(\n dir,\n target.type,\n {\n projectBranch: projectBranches[target.type] || '',\n docsBranch,\n docsGitCwd: config.docsDir,\n projectGitCwd: projectGitCwds[target.type],\n docsDir: config.docsDir,\n projectBranchAvailable: Boolean(projectGitCwds[target.type]),\n docsPathIgnored: docsMeta?.docsPathIgnored,\n docsHasUncommittedChanges: docsMeta?.docsHasUncommittedChanges,\n docsEverCommitted: docsMeta?.docsEverCommitted,\n docsGitUnavailable: docsMeta?.docsGitUnavailable,\n },\n {\n lang: config.lang,\n stepDefinitions,\n approval: config.approval,\n workflow: config.workflow,\n projectType: config.projectType,\n }\n );\n })\n );\n features.push(...parsed);\n }\n\n return {\n features,\n branches: {\n docs: docsBranch,\n project: projectBranches,\n },\n warnings,\n };\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { getConfig } from '../utils/config.js';\nimport { scanFeatures } from '../utils/context.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport { getLocalDateString } from '../utils/date.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\n\ninterface StatusOptions {\n json?: boolean;\n write?: boolean;\n strict?: boolean;\n}\n\ninterface FeatureInfo {\n id: string;\n name: string;\n repo: string;\n issue: string;\n status: string;\n progress: string;\n path: string;\n implementationDone: boolean;\n workflowDone: boolean;\n}\n\nexport function statusCommand(program: Command): void {\n program\n .command('status')\n .description('Show feature status')\n .option('--json', 'Output in JSON format for agents')\n .option('-w, --write', 'Write status.md file')\n .option('-s, --strict', 'Fail on missing/duplicate feature IDs')\n .action(async (options: StatusOptions) => {\n try {\n await runStatus(options);\n } catch (error) {\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n process.exitCode = 1;\n return;\n }\n });\n}\n\nasync function runStatus(options: StatusOptions): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n\n if (!config) {\n throw createCliError(\n 'CONFIG_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.configNotFound')\n );\n }\n\n const { docsDir, projectType, projectName, lang } = config;\n const featuresDir = path.join(docsDir, 'features');\n\n const scan = await scanFeatures(config);\n const features: FeatureInfo[] = [];\n const idMap = new Map<string, string[]>();\n\n for (const f of scan.features) {\n const id = f.id || 'UNKNOWN';\n const relPath = path.relative(docsDir, f.path);\n if (!idMap.has(id)) idMap.set(id, []);\n idMap.get(id)!.push(relPath);\n\n if (!f.docs.specExists || !f.docs.tasksExists) continue;\n\n const name = await getFeatureNameFromSpec(f.path, f.slug, f.folderName);\n const repo =\n projectType === 'multi'\n ? `${projectName ?? '{{projectName}}'}-${f.type}`\n : projectName ?? '{{projectName}}';\n const issue = f.issueNumber ? `#${f.issueNumber}` : '-';\n\n const total = f.tasks.total;\n const done = f.tasks.done;\n const doing = f.tasks.doing;\n const todo = f.tasks.todo;\n\n let status = 'TODO';\n if (f.completion.workflowDone) status = 'WORKFLOW_DONE';\n else if (total > 0 && done === total) status = 'DONE';\n else if (doing > 0) status = 'DOING';\n else if (todo > 0) status = 'TODO';\n else if (total === 0) status = 'NO_TASKS';\n\n features.push({\n id,\n name,\n repo,\n issue,\n status,\n progress: `${done}/${total}`,\n path: relPath,\n implementationDone: f.completion.implementationDone,\n workflowDone: f.completion.workflowDone,\n });\n }\n\n // 중복 ID 확인\n if (options.strict) {\n const unknowns = [...idMap.entries()].filter(([id]) => id === 'UNKNOWN');\n if (unknowns.length > 0) {\n const missingPaths = unknowns.flatMap(([, paths]) => paths).join(', ');\n throw createCliError(\n 'MISSING_FEATURE_ID',\n `${tr(lang, 'cli', 'status.missingIds')} ${missingPaths}`\n );\n }\n\n const duplicates = [...idMap.entries()].filter(\n ([id, paths]) => id !== 'UNKNOWN' && paths.length > 1\n );\n if (duplicates.length > 0) {\n const duplicateIds = duplicates.map(([id]) => id).join(', ');\n throw createCliError(\n 'DUPLICATE_FEATURE_ID',\n `${tr(lang, 'cli', 'status.duplicateIds')} ${duplicateIds}`\n );\n }\n }\n\n // JSON 출력\n if (options.json) {\n const payload = {\n status: 'ok',\n reasonCode: features.length === 0 ? 'NO_FEATURES' : 'FEATURES_LISTED',\n counts: {\n features: features.length,\n workflowDone: features.filter((f) => f.workflowDone).length,\n implementationDone: features.filter((f) => f.implementationDone).length,\n },\n features: [...features].sort((a, b) => a.id.localeCompare(b.id)),\n };\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n if (features.length === 0) {\n console.log(chalk.yellow(tr(lang, 'cli', 'status.noFeatures')));\n return;\n }\n\n // 정렬\n features.sort((a, b) => a.id.localeCompare(b.id));\n\n // 테이블 출력\n const header = '| ID | Name | Repo | Issue | Status | Progress | Path |';\n const separator = '| --- | --- | --- | --- | --- | --- | --- |';\n\n console.log();\n console.log(header);\n console.log(separator);\n for (const f of features) {\n const statusColor =\n f.status === 'WORKFLOW_DONE'\n ? chalk.green\n : f.status === 'DONE'\n ? chalk.cyan\n : f.status === 'DOING'\n ? chalk.yellow\n : chalk.gray;\n console.log(\n `| ${f.id} | ${f.name} | ${f.repo} | ${f.issue} | ${statusColor(f.status)} | ${f.progress} | ${f.path} |`\n );\n }\n console.log();\n\n // 파일 쓰기\n if (options.write) {\n const outputPath = path.join(featuresDir, 'status.md');\n const date = getLocalDateString();\n\n const content = [\n '# Feature Status',\n '',\n `- Generated: ${date}`,\n '- Source: `tasks.md`, `spec.md`',\n '',\n header,\n separator,\n ...features.map(\n (f) =>\n `| ${f.id} | ${f.name} | ${f.repo} | ${f.issue} | ${f.status} | ${f.progress} | ${f.path} |`\n ),\n '',\n ].join('\\n');\n\n await fs.writeFile(outputPath, content, 'utf-8');\n console.log(\n chalk.green(\n tr(lang, 'cli', 'status.wrote', { path: outputPath })\n )\n );\n }\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nasync function getFeatureNameFromSpec(\n featureDir: string,\n fallbackSlug: string,\n fallbackFolderName: string\n): Promise<string> {\n try {\n const specPath = path.join(featureDir, 'spec.md');\n if (!(await fs.pathExists(specPath))) return fallbackSlug;\n const content = await fs.readFile(specPath, 'utf-8');\n\n const keys = ['기능명', 'Feature Name'];\n for (const key of keys) {\n const regex = new RegExp(\n `^\\\\s*-\\\\s*\\\\*\\\\*${escapeRegExp(key)}\\\\*\\\\*\\\\s*:\\\\s*(.*)$`,\n 'm'\n );\n const match = content.match(regex);\n const value = match?.[1]?.trim();\n if (value) return value;\n }\n } catch {\n // ignore\n }\n return fallbackSlug || fallbackFolderName;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { execFileSync } from 'child_process';\nimport { getConfig } from '../utils/config.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport { getTemplatesDir } from '../utils/paths.js';\nimport { applyReplacements } from '../utils/template.js';\nimport { getDocsLockPath, withFileLock } from '../utils/lock.js';\nimport {\n ENGINE_MANAGED_AGENT_DIRS,\n ENGINE_MANAGED_AGENT_FILES,\n pruneEngineManagedDocs,\n} from '../utils/engine-managed-docs.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\n\ninterface UpdateOptions {\n agents?: boolean;\n skills?: boolean;\n templates?: boolean;\n force?: boolean;\n}\n\ninterface ConfigBackfillResult {\n changed: boolean;\n changedPaths: string[];\n}\n\nexport function updateCommand(program: Command): void {\n program\n .command('update')\n .description('Update docs templates to the latest version')\n .option('--agents', 'Update agents/ folder only')\n .option('--skills', 'Cleanup legacy agents/skills copies (CLI-managed)')\n .option('--templates', 'Cleanup legacy feature-base copies (CLI-managed)')\n .option(\n '-f, --force',\n 'Force overwrite even if docs has uncommitted changes'\n )\n .action(async (options: UpdateOptions) => {\n try {\n await runUpdate(options);\n } catch (error) {\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n if (error instanceof Error && error.message === 'canceled') {\n console.log(chalk.yellow(`\\n${tr(lang, 'cli', 'common.canceled')}`));\n return;\n }\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n process.exitCode = 1;\n return;\n }\n });\n}\n\nasync function runUpdate(options: UpdateOptions): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n\n if (!config) {\n throw createCliError(\n 'DOCS_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.docsNotFound')\n );\n }\n\n const { docsDir, projectType, lang } = config;\n await withFileLock(\n getDocsLockPath(docsDir),\n async () => {\n const templatesDir = getTemplatesDir();\n const docsLockPath = getDocsLockPath(docsDir);\n\n // Default behavior: only allow update when docs working tree is clean.\n // Then apply updates like --force. This keeps update predictable and simple.\n const forceOverwrite =\n !!options.force ||\n (await isDocsWorktreeCleanOrThrow(docsDir, lang, [docsLockPath]));\n\n // Backfill missing config defaults so older projects get current policy keys.\n const configBackfill = await backfillMissingConfigDefaults(docsDir);\n\n // 업데이트 대상 결정\n const hasExplicitSelection = !!(\n options.agents ||\n options.skills ||\n options.templates\n );\n const updateAgents = options.agents || options.skills || !hasExplicitSelection;\n const updateTemplates = options.templates || !hasExplicitSelection;\n const agentsMode: 'all' | 'skills' =\n options.skills && !options.agents ? 'skills' : 'all';\n\n console.log(chalk.blue(tr(lang, 'cli', 'update.start')));\n console.log(chalk.gray(` - ${tr(lang, 'cli', 'update.langLabel')}: ${lang}`));\n console.log(\n chalk.gray(` - ${tr(lang, 'cli', 'update.typeLabel')}: ${projectType}`)\n );\n console.log();\n\n let updatedCount = 0;\n\n // agents/ 폴더 업데이트 (common 먼저, 타입별 오버라이드)\n if (updateAgents) {\n if (agentsMode === 'skills') {\n console.log(chalk.blue(tr(lang, 'cli', 'update.updatingSkills')));\n console.log(\n chalk.gray(tr(lang, 'cli', 'update.engineManagedSkillsBuiltin'))\n );\n console.log(chalk.green(` ✅ ${tr(lang, 'cli', 'update.skillsUpdated')}`));\n } else {\n console.log(chalk.blue(tr(lang, 'cli', 'update.updatingAgents')));\n }\n\n if (agentsMode === 'all') {\n const commonAgentsBase = path.join(templatesDir, lang, 'common', 'agents');\n const targetAgentsBase = path.join(docsDir, 'agents');\n\n const commonAgents = commonAgentsBase;\n const targetAgents = targetAgentsBase;\n\n // featurePath 치환\n const featurePath =\n projectType === 'multi'\n ? 'docs/features/{component}'\n : 'docs/features';\n const projectName = config.projectName ?? '{{projectName}}';\n const commonReplacements: Record<string, string> = {\n '{{projectName}}': projectName,\n '{{featurePath}}': featurePath,\n };\n\n if (await fs.pathExists(commonAgents)) {\n const count = await updateFolder(\n commonAgents,\n targetAgents,\n forceOverwrite,\n commonReplacements,\n lang,\n {\n protectedFiles: new Set([\n 'custom.md',\n 'constitution.md',\n ...ENGINE_MANAGED_AGENT_FILES,\n ]),\n skipDirectories: new Set(ENGINE_MANAGED_AGENT_DIRS),\n }\n );\n updatedCount += count;\n }\n console.log(\n chalk.green(\n ` ✅ ${tr(lang, 'cli', 'update.agentsUpdated')}`\n )\n );\n }\n }\n\n // feature-base is CLI-managed and no longer synced into docs.\n if (updateTemplates) {\n console.log(chalk.blue(tr(lang, 'cli', 'update.updatingFeatureBase')));\n console.log(chalk.gray(tr(lang, 'cli', 'update.engineManagedFeatureBaseBuiltin')));\n }\n\n const pruned = await pruneEngineManagedDocs(docsDir);\n if (pruned.length > 0) {\n console.log(\n chalk.gray(\n ` - ${tr(lang, 'cli', 'update.engineManagedPruned', {\n count: pruned.length,\n })}`\n )\n );\n }\n\n console.log();\n if (configBackfill.changed) {\n console.log(\n chalk.gray(\n ` - ${tr(lang, 'cli', 'update.fileUpdated', { file: '.lee-spec-kit.json' })}`\n )\n );\n console.log(\n chalk.gray(\n ` (${configBackfill.changedPaths.join(', ')})`\n )\n );\n }\n console.log(\n chalk.green(`✅ ${tr(lang, 'cli', 'update.updatedTotal', { count: updatedCount })}`)\n );\n },\n { owner: 'update' }\n );\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction normalizeSkillList(raw: unknown): string[] {\n if (!Array.isArray(raw)) return [];\n const deduped = new Set<string>();\n for (const item of raw) {\n const value = String(item || '').trim();\n if (!value) continue;\n deduped.add(value);\n }\n return [...deduped];\n}\n\nasync function backfillMissingConfigDefaults(\n docsDir: string\n): Promise<ConfigBackfillResult> {\n const configPath = path.join(docsDir, '.lee-spec-kit.json');\n if (!(await fs.pathExists(configPath))) {\n return { changed: false, changedPaths: [] };\n }\n\n const raw = await fs.readJson(configPath);\n if (!isPlainObject(raw)) {\n return { changed: false, changedPaths: [] };\n }\n\n const changedPaths: string[] = [];\n\n const setIfMissing = <T>(\n parent: Record<string, unknown>,\n key: string,\n nextValue: T,\n pathLabel: string\n ): void => {\n if (parent[key] !== undefined) return;\n parent[key] = nextValue;\n changedPaths.push(pathLabel);\n };\n\n if (!isPlainObject(raw.workflow)) {\n raw.workflow = {};\n changedPaths.push('workflow');\n }\n const workflow = raw.workflow as Record<string, unknown>;\n setIfMissing(workflow, 'mode', 'github', 'workflow.mode');\n setIfMissing(workflow, 'codeDirtyScope', 'auto', 'workflow.codeDirtyScope');\n setIfMissing(workflow, 'taskCommitGate', 'warn', 'workflow.taskCommitGate');\n\n if (!isPlainObject(workflow.prePrReview)) {\n workflow.prePrReview = {};\n changedPaths.push('workflow.prePrReview');\n }\n const prePrReview = workflow.prePrReview as Record<string, unknown>;\n if (prePrReview.skills === undefined) {\n prePrReview.skills = ['code-review-excellence'];\n changedPaths.push('workflow.prePrReview.skills');\n } else {\n const normalizedSkills = normalizeSkillList(prePrReview.skills);\n if (normalizedSkills.length === 0) {\n prePrReview.skills = ['code-review-excellence'];\n changedPaths.push('workflow.prePrReview.skills');\n } else if (\n JSON.stringify(normalizedSkills) !== JSON.stringify(prePrReview.skills)\n ) {\n prePrReview.skills = normalizedSkills;\n changedPaths.push('workflow.prePrReview.skills');\n }\n }\n setIfMissing(prePrReview, 'fallback', 'builtin-checklist', 'workflow.prePrReview.fallback');\n setIfMissing(prePrReview, 'blockOnFindings', true, 'workflow.prePrReview.blockOnFindings');\n setIfMissing(prePrReview, 'minorPolicy', 'warn', 'workflow.prePrReview.minorPolicy');\n\n if (!isPlainObject(raw.pr)) {\n raw.pr = {};\n changedPaths.push('pr');\n }\n const pr = raw.pr as Record<string, unknown>;\n if (!isPlainObject(pr.screenshots)) {\n pr.screenshots = {};\n changedPaths.push('pr.screenshots');\n }\n const screenshots = pr.screenshots as Record<string, unknown>;\n setIfMissing(screenshots, 'upload', false, 'pr.screenshots.upload');\n\n if (!isPlainObject(raw.approval)) {\n raw.approval = {};\n changedPaths.push('approval');\n }\n const approval = raw.approval as Record<string, unknown>;\n setIfMissing(approval, 'mode', 'builtin', 'approval.mode');\n\n if (changedPaths.length === 0) {\n return { changed: false, changedPaths: [] };\n }\n\n await fs.writeJson(configPath, raw, { spaces: 2 });\n return { changed: true, changedPaths };\n}\n\nasync function updateFolder(\n sourceDir: string,\n targetDir: string,\n force?: boolean,\n replacements?: Record<string, string>,\n lang: 'ko' | 'en' = DEFAULT_LANG,\n options: {\n protectedFiles?: Set<string>;\n skipDirectories?: Set<string>;\n } = {}\n): Promise<number> {\n const protectedFiles = options.protectedFiles ?? new Set(['custom.md', 'constitution.md']);\n const skipDirectories = options.skipDirectories ?? new Set<string>();\n\n // 대상 폴더가 없으면 생성\n await fs.ensureDir(targetDir);\n\n const files = await fs.readdir(sourceDir);\n let updatedCount = 0;\n\n for (const file of files) {\n const sourcePath = path.join(sourceDir, file);\n const targetPath = path.join(targetDir, file);\n const stat = await fs.stat(sourcePath);\n\n if (stat.isFile()) {\n // 사용자 정의/정책 파일은 업데이트에서 제외\n if (protectedFiles.has(file)) {\n continue;\n }\n\n let sourceContent = await fs.readFile(sourcePath, 'utf-8');\n\n // 플레이스홀더 치환\n if (replacements) {\n sourceContent = applyReplacements(sourceContent, replacements);\n }\n\n let shouldUpdate = true;\n\n // 대상 파일이 존재하는 경우\n if (await fs.pathExists(targetPath)) {\n const targetContent = await fs.readFile(targetPath, 'utf-8');\n\n // 내용이 같으면 스킵\n if (sourceContent === targetContent) {\n continue;\n }\n\n // force가 아니면 경고 표시 (CI/파이프 환경에서는 stdout 오염/대화 불가)\n if (!force) {\n console.log(\n chalk.yellow(\n ` ⚠️ ${file} - ${tr(lang, 'cli', 'update.changeDetected')}`\n )\n );\n shouldUpdate = false;\n }\n }\n\n if (shouldUpdate) {\n await fs.writeFile(targetPath, sourceContent);\n console.log(\n chalk.gray(` 📄 ${tr(lang, 'cli', 'update.fileUpdated', { file })}`)\n );\n updatedCount++;\n }\n } else if (stat.isDirectory()) {\n if (skipDirectories.has(file)) {\n continue;\n }\n // 하위 디렉토리 재귀 처리\n const subCount = await updateFolder(\n sourcePath,\n targetPath,\n force,\n replacements,\n lang,\n options\n );\n updatedCount += subCount;\n }\n }\n\n return updatedCount;\n}\n\nfunction getGitTopLevel(cwd: string): string | null {\n try {\n const out = execFileSync('git', ['rev-parse', '--show-toplevel'], {\n cwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'ignore'],\n }).trim();\n return out || null;\n } catch {\n return null;\n }\n}\n\nfunction normalizeGitPath(input: string): string {\n return input.replace(/\\\\/g, '/').replace(/^\\.\\/+/, '');\n}\n\nfunction stripOuterQuotes(input: string): string {\n const trimmed = input.trim();\n if (trimmed.startsWith('\"') && trimmed.endsWith('\"') && trimmed.length >= 2) {\n return trimmed.slice(1, -1).replace(/\\\\\"/g, '\"');\n }\n return trimmed;\n}\n\nfunction extractPorcelainPaths(line: string): string[] {\n if (line.length < 4) return [];\n const body = line.slice(3).trim();\n if (!body) return [];\n if (body.includes(' -> ')) {\n return body\n .split(' -> ')\n .map((part) => normalizeGitPath(stripOuterQuotes(part)));\n }\n return [normalizeGitPath(stripOuterQuotes(body))];\n}\n\nfunction getDocsPorcelainStatus(\n docsDir: string,\n ignoredAbsPaths: string[] = []\n): string | null {\n const top = getGitTopLevel(docsDir);\n if (!top) return null;\n const rel = path.relative(top, docsDir) || '.';\n try {\n const output = execFileSync('git', ['status', '--porcelain=v1', '--', rel], {\n cwd: top,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'ignore'],\n });\n if (ignoredAbsPaths.length === 0) {\n return output;\n }\n\n const ignoredRelPaths = new Set(\n ignoredAbsPaths.map((absPath) =>\n normalizeGitPath(path.relative(top, absPath) || '.')\n )\n );\n const filtered = output\n .split('\\n')\n .filter((line) => {\n if (!line.trim()) return false;\n const touchedPaths = extractPorcelainPaths(line);\n if (touchedPaths.length === 0) return true;\n return touchedPaths.some((p) => !ignoredRelPaths.has(p));\n })\n .join('\\n');\n return filtered;\n } catch {\n return null;\n }\n}\n\nasync function isDocsWorktreeCleanOrThrow(\n docsDir: string,\n lang: 'ko' | 'en',\n ignoredAbsPaths: string[] = []\n): Promise<boolean> {\n const status = getDocsPorcelainStatus(docsDir, ignoredAbsPaths);\n if (status === null) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tr(lang, 'cli', 'update.gitStatusUnavailable')\n );\n }\n if (status.trim().length > 0) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tr(lang, 'cli', 'update.docsWorktreeDirty')\n );\n }\n return true;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport prompts from 'prompts';\nimport { getConfig } from '../utils/config.js';\nimport {\n assertAllowedComponent,\n resolveProjectComponents,\n} from '../utils/components.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport { normalizeProjectType } from '../utils/project-type.js';\nimport { getDocsLockPath, withFileLock } from '../utils/lock.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\n\ninterface ConfigOptions {\n dir?: string;\n projectRoot?: string;\n component?: string;\n nonInteractive?: boolean;\n}\n\nexport function configCommand(program: Command): void {\n program\n .command('config')\n .description('View or modify project configuration')\n .option('--dir <dir>', 'Docs directory or project path to target')\n .option('--project-root <path>', 'Set project root path')\n .option('--component <component>', 'Component name for multi projects')\n .option('--non-interactive', 'Fail instead of prompting for input')\n .action(async (options: ConfigOptions) => {\n try {\n await runConfig(options);\n } catch (error) {\n if (error instanceof Error && error.message === 'canceled') {\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n console.log(chalk.yellow(`\\n${tr(lang, 'cli', 'common.canceled')}`));\n return;\n }\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n process.exitCode = 1;\n return;\n }\n });\n}\n\nasync function runConfig(options: ConfigOptions): Promise<void> {\n const cwd = process.cwd();\n const targetCwd = options.dir ? path.resolve(cwd, options.dir) : cwd;\n const config = await getConfig(targetCwd);\n\n if (!config) {\n throw createCliError(\n 'CONFIG_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.configNotFound')\n );\n }\n\n const configPath = path.join(config.docsDir, '.lee-spec-kit.json');\n\n // 옵션 없이 실행: 현재 설정 출력\n if (!options.projectRoot) {\n console.log();\n console.log(chalk.blue(tr(config.lang, 'cli', 'config.currentTitle')));\n console.log();\n console.log(\n chalk.gray(\n ` ${tr(config.lang, 'cli', 'config.pathLabel')}: ${configPath}`\n )\n );\n console.log();\n\n const configFile = await fs.readJson(configPath);\n console.log(JSON.stringify(configFile, null, 2));\n console.log();\n return;\n }\n const projectRoot = options.projectRoot;\n\n await withFileLock(\n getDocsLockPath(config.docsDir),\n async () => {\n // projectRoot 수정\n const configFile = await fs.readJson(configPath);\n\n // embedded인 경우 projectRoot 설정 불필요\n if (configFile.docsRepo !== 'standalone') {\n console.log(\n chalk.yellow(tr(config.lang, 'cli', 'config.projectRootStandaloneOnly'))\n );\n return;\n }\n\n const projectType = normalizeProjectType(String(configFile.projectType || 'single'));\n const targetFromOptions = options.component?.trim().toLowerCase();\n\n if (projectType === 'multi') {\n const components = resolveProjectComponents(projectType, configFile.components);\n let targetComponent = targetFromOptions;\n\n if (!targetComponent) {\n if (components.length === 1) {\n targetComponent = components[0];\n } else if (options.nonInteractive) {\n throw createCliError(\n 'PROMPT_BLOCKED',\n '`--component` is required for multi projectRoot update when using `--non-interactive`.'\n );\n } else {\n // 대화형으로 선택\n const response = await prompts(\n [\n {\n type: 'select',\n name: 'component',\n message: tr(config.lang, 'cli', 'config.selectRepoToUpdate'),\n choices: components.map((value) => ({\n title: value.toUpperCase(),\n value,\n })),\n },\n ],\n {\n onCancel: () => {\n throw new Error('canceled');\n },\n }\n );\n targetComponent = response.component;\n }\n }\n if (!targetComponent) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n 'Component selection is required.'\n );\n }\n\n assertAllowedComponent(targetComponent, components);\n\n // 기존 projectRoot 가져오기 또는 초기화\n const currentRoot: Record<string, string> =\n typeof configFile.projectRoot === 'object' && configFile.projectRoot\n ? configFile.projectRoot\n : {};\n currentRoot[targetComponent] = projectRoot;\n configFile.projectRoot = currentRoot;\n\n console.log(\n chalk.green(\n tr(config.lang, 'cli', 'config.projectRootSet', {\n repo: targetComponent.toUpperCase(),\n path: projectRoot,\n })\n )\n );\n } else {\n if (targetFromOptions) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--component` is only valid for multi projectRoot updates.'\n );\n }\n // Single: 바로 설정\n configFile.projectRoot = projectRoot;\n console.log(\n chalk.green(\n tr(config.lang, 'cli', 'config.projectRootSetSingle', {\n path: projectRoot,\n })\n )\n );\n }\n\n await fs.writeJson(configPath, configFile, { spaces: 2 });\n console.log();\n },\n { owner: 'config' }\n );\n}\n","export function resolveComponentOption(\n value: string | undefined\n): string | undefined {\n const component = (value || '').trim().toLowerCase();\n return component || undefined;\n}\n","import { createHash } from 'crypto';\nimport { ProjectConfig } from './config.js';\nimport {\n ActionCategory,\n FeatureContext,\n NextAction,\n OperationType,\n scanFeatures,\n} from './context/index.js';\nimport { resolveComponentOption } from './context/component-option.js';\nimport { tr } from './i18n.js';\n\nexport type ContextStatus =\n | 'no_features'\n | 'no_open'\n | 'single_matched'\n | 'multiple_active'\n | 'no_match';\n\nexport type ContextSelectionMode = 'explicit' | 'branch' | 'open' | 'done' | 'all';\nexport type ContextSelectionFallback =\n | 'none'\n | 'open_features'\n | 'all_features'\n | 'done_features';\n\nexport interface ContextSelectionOptions {\n component?: string;\n all?: boolean;\n done?: boolean;\n}\n\nexport type ContextAction = NextAction & { operationType: OperationType };\n\nexport interface ActionOption {\n label: string;\n summary: string;\n detail: string;\n approvalPrompt: string;\n requiresRequestText: boolean;\n replyExample: string;\n action: ContextAction;\n}\n\nexport interface ContextSelectionState {\n features: FeatureContext[];\n branches: {\n docs: string;\n project: Record<string, string>;\n };\n warnings: string[];\n doneFeatures: FeatureContext[];\n openFeatures: FeatureContext[];\n inProgressFeatures: FeatureContext[];\n readyToCloseFeatures: FeatureContext[];\n selectionMode: ContextSelectionMode;\n selectionFallback: ContextSelectionFallback;\n targetFeatures: FeatureContext[];\n status: ContextStatus;\n matchedFeature: FeatureContext | null;\n actions: ContextAction[];\n actionOptions: ActionOption[];\n contextVersion: string | null;\n}\n\nconst REMOTE_ACTION_CATEGORIES: ReadonlySet<ActionCategory> = new Set([\n 'issue_create',\n 'pr_create',\n 'pr_status_update',\n 'code_review',\n]);\n\nconst LOCAL_ACTION_CATEGORIES: ReadonlySet<ActionCategory> = new Set([\n 'docs_commit',\n 'branch_create',\n 'task_execute',\n 'review_fix_commit',\n 'worktree_cleanup',\n]);\n\nconst REMOTE_COMMAND_PATTERN = /\\b(?:git\\s+push|git\\s+merge|gh\\s+(?:issue|pr)\\b)/i;\nconst ACTION_DETAIL_KEY_BY_CATEGORY: Partial<Record<ActionCategory, string>> = {\n feature_folder: 'context.actionDetail.featureFolder',\n spec_write: 'context.actionDetail.specWrite',\n spec_approve: 'context.actionDetail.specApprove',\n plan_write: 'context.actionDetail.planWrite',\n plan_approve: 'context.actionDetail.planApprove',\n tasks_write: 'context.actionDetail.tasksWrite',\n tasks_approve: 'context.actionDetail.tasksApprove',\n issue_create: 'context.actionDetail.issueCreate',\n task_execute: 'context.actionDetail.taskExecute',\n review_fix_commit: 'context.actionDetail.reviewFixCommit',\n pr_create: 'context.actionDetail.prCreate',\n pr_status_update: 'context.actionDetail.prStatusUpdate',\n code_review: 'context.actionDetail.codeReview',\n worktree_cleanup: 'context.actionDetail.worktreeCleanup',\n pr_metadata_migrate: 'context.actionDetail.prMetadataMigrate',\n user_request_replan: 'context.actionDetail.userRequestReplan',\n feature_done: 'context.actionDetail.featureDone',\n fallback: 'context.actionDetail.fallback',\n};\n\nfunction getActionLabel(index: number): string {\n let n = index + 1;\n let label = '';\n while (n > 0) {\n const rem = (n - 1) % 26;\n label = String.fromCharCode(65 + rem) + label;\n n = Math.floor((n - 1) / 26);\n }\n return label;\n}\n\nexport function resolveActionOperationType(\n action: FeatureContext['actions'][number]\n): OperationType {\n if (action.operationType) return action.operationType;\n if (action.type === 'command') {\n if (REMOTE_COMMAND_PATTERN.test(action.cmd)) return 'remote';\n return 'local';\n }\n\n if (action.category && REMOTE_ACTION_CATEGORIES.has(action.category)) {\n return 'remote';\n }\n if (action.category && LOCAL_ACTION_CATEGORIES.has(action.category)) {\n return 'local';\n }\n\n return 'manual';\n}\n\nfunction annotateActionOperationType(\n action: FeatureContext['actions'][number]\n): ContextAction {\n return {\n ...action,\n operationType: resolveActionOperationType(action),\n } as ContextAction;\n}\n\nfunction annotateActions(actions: FeatureContext['actions']): ContextAction[] {\n return actions.map((action) => annotateActionOperationType(action));\n}\n\nfunction getActionSummary(action: ContextAction): string {\n if (action.category === 'docs_commit') return 'Commit docs updates';\n if (action.category === 'issue_create') return 'Create and record issue';\n if (action.category === 'branch_create') return 'Create feature branch';\n if (action.category === 'pr_create') return 'Create PR and record link';\n if (action.category === 'pre_pr_review') return 'Run pre-PR self review';\n if (action.category === 'pr_status_update') return 'Update PR status';\n if (action.category === 'code_review') return 'Process code review feedback';\n if (action.category === 'worktree_cleanup') return 'Clean up feature worktree';\n if (action.category === 'user_request_replan') return 'Handle a new user request first';\n if (action.category === 'task_execute') return 'Proceed with task execution';\n if (action.category === 'review_fix_commit') return 'Commit review feedback fixes';\n if (action.category === 'feature_done') return 'Feature is complete';\n if (action.category === 'spec_approve') return 'Request spec approval';\n if (action.category === 'plan_approve') return 'Request plan approval';\n if (action.category === 'tasks_approve') return 'Request tasks approval';\n if (action.category === 'pr_metadata_migrate') return 'Update tasks.md to latest PR fields';\n if (action.category === 'fallback') return 'Re-check context and rerun';\n if (action.type === 'command') {\n return action.scope === 'docs'\n ? 'Run docs command'\n : 'Run project command';\n }\n return action.message;\n}\n\nfunction toOneLine(text: string): string {\n const normalized = text.replace(/\\s+/g, ' ').trim();\n if (!normalized) return '';\n if (normalized.length <= 160) return normalized;\n return `${normalized.slice(0, 157).trimEnd()}...`;\n}\n\nfunction buildActionDetail(action: ContextAction, lang: 'ko' | 'en'): string {\n const formatBranchCreateDetail = (command: string): string => {\n const worktreeMatch = command.match(/\\.worktrees\\/([A-Za-z0-9._-]+)/);\n const branchMatch = command.match(/\\bfeat\\/([A-Za-z0-9._-]+)/);\n const worktree = worktreeMatch ? `.worktrees/${worktreeMatch[1]}` : null;\n const branch = branchMatch ? `feat/${branchMatch[1]}` : null;\n if (worktree && branch) {\n return `(${action.scope}) create or reuse worktree ${worktree} for branch ${branch}`;\n }\n if (branch) {\n return `(${action.scope}) create or reuse worktree for branch ${branch}`;\n }\n return `(${action.scope}) create or reuse feature branch worktree`;\n };\n\n const extractCommitMessage = (command: string): string | null => {\n const doubleQuoted = command.match(/git\\s+commit\\s+-m\\s+\"((?:\\\\\"|[^\"])*)\"/);\n if (doubleQuoted) {\n return doubleQuoted[1].replace(/\\\\\"/g, '\"').trim();\n }\n\n const singleQuoted = command.match(/git\\s+commit\\s+-m\\s+'((?:\\\\'|[^'])*)'/);\n if (singleQuoted) {\n return singleQuoted[1].replace(/\\\\'/g, \"'\").trim();\n }\n\n return null;\n };\n\n if (action.type === 'command') {\n if (action.category === 'branch_create') {\n return formatBranchCreateDetail(action.cmd);\n }\n if (action.category === 'code_review') {\n if (/--merge\\s+--confirm\\s+OK/.test(action.cmd)) {\n return `(${action.scope}) merge PR after explicit OK`;\n }\n if (/\\bgit\\s+push\\b/i.test(action.cmd)) {\n return `(${action.scope}) push review-fix commits`;\n }\n }\n if (action.category === 'worktree_cleanup') {\n return `(${action.scope}) ${tr(lang, 'cli', 'context.actionDetail.worktreeCleanup')}`;\n }\n const commitMessage = extractCommitMessage(action.cmd);\n if (commitMessage) {\n return `(${action.scope}) commit: ${commitMessage}`;\n }\n return `(${action.scope}) ${action.cmd}`;\n }\n const detailKey = action.category ? ACTION_DETAIL_KEY_BY_CATEGORY[action.category] : undefined;\n if (detailKey) {\n const localized = tr(lang, 'cli', detailKey);\n if (localized !== `cli.${detailKey}`) return localized;\n }\n return toOneLine(action.message);\n}\n\nfunction toActionOptions(actions: ContextAction[], lang: 'ko' | 'en'): ActionOption[] {\n return actions.map((action, index) => {\n const label = getActionLabel(index);\n const summary = getActionSummary(action);\n const detail = buildActionDetail(action, lang);\n const requiresRequestText = action.category === 'user_request_replan';\n const replyExample = requiresRequestText\n ? `${label}, <your request>`\n : `${label} OK`;\n return {\n label,\n summary,\n detail,\n approvalPrompt: `${label}: ${detail}`,\n requiresRequestText,\n replyExample,\n action,\n };\n });\n}\n\nfunction buildActionSnapshot(actionOptions: ActionOption[]): Array<Record<string, string | boolean | undefined>> {\n return actionOptions.map(({ label, action }) => {\n if (action.type === 'command') {\n return {\n label,\n type: action.type,\n scope: action.scope,\n cwd: action.cwd,\n cmd: action.cmd,\n category: action.category,\n operationType: action.operationType,\n requiresUserCheck: !!action.requiresUserCheck,\n };\n }\n return {\n label,\n type: action.type,\n message: action.message,\n category: action.category,\n operationType: action.operationType,\n requiresUserCheck: !!action.requiresUserCheck,\n };\n });\n}\n\nfunction getContextVersion(\n feature: FeatureContext | null,\n actionOptions: ActionOption[]\n): string | null {\n if (!feature) return null;\n const payload = JSON.stringify({\n id: feature.id || '',\n folderName: feature.folderName,\n currentStep: feature.currentStep,\n actionSnapshot: buildActionSnapshot(actionOptions),\n });\n return createHash('sha256').update(payload).digest('hex').slice(0, 12);\n}\n\nfunction matchesFeatureSelector(f: FeatureContext, selector: string): boolean {\n const s = selector.trim();\n if (!s) return false;\n if (f.folderName.toLowerCase() === s.toLowerCase()) return true;\n if (f.slug.toLowerCase() === s.toLowerCase()) return true;\n if (f.id && f.id.toLowerCase() === s.toLowerCase()) return true;\n return false;\n}\n\nfunction detectFromBranch(\n branchName: string,\n features: FeatureContext[]\n): FeatureContext[] {\n const match = branchName.match(/^feat\\/\\d+-(.+)$/);\n if (!match) return [];\n const detected = match[1];\n return features.filter(\n (f) =>\n f.slug.toLowerCase() === detected.toLowerCase() ||\n f.folderName.toLowerCase() === detected.toLowerCase()\n );\n}\n\nfunction toSelectionStatus(\n features: FeatureContext[],\n selectionMode: ContextSelectionMode,\n openFeatures: FeatureContext[],\n targetFeatures: FeatureContext[]\n): ContextStatus {\n const isNoOpen =\n selectionMode === 'open' && features.length > 0 && openFeatures.length === 0;\n if (features.length === 0) return 'no_features';\n if (isNoOpen) return 'no_open';\n if (targetFeatures.length === 1) return 'single_matched';\n if (targetFeatures.length > 1) return 'multiple_active';\n return 'no_match';\n}\n\nexport function toReasonCode(status: ContextStatus): string {\n if (status === 'no_features') return 'NO_FEATURES';\n if (status === 'no_open') return 'NO_OPEN_FEATURES';\n if (status === 'single_matched') return 'SINGLE_MATCHED';\n if (status === 'multiple_active') return 'MULTIPLE_ACTIVE_FEATURES';\n return 'NO_MATCHED_FEATURES';\n}\n\nexport async function resolveContextSelection(\n config: ProjectConfig,\n featureName: string | undefined,\n options: ContextSelectionOptions\n): Promise<ContextSelectionState> {\n const { features, branches, warnings } = await scanFeatures(config);\n const selectedComponent = resolveComponentOption(options.component);\n const scopedFeatures = selectedComponent\n ? features.filter((f) => f.type === selectedComponent)\n : features;\n\n const doneFeatures = scopedFeatures.filter((f) => f.completion.workflowDone);\n const openFeatures = scopedFeatures.filter((f) => !f.completion.workflowDone);\n const inProgressFeatures = openFeatures.filter(\n (f) => !f.completion.implementationDone\n );\n const readyToCloseFeatures = openFeatures.filter(\n (f) => f.completion.implementationDone\n );\n\n let targetFeatures: FeatureContext[] = [];\n let selectionMode: ContextSelectionMode = 'explicit';\n let selectionFallback: ContextSelectionFallback = 'none';\n\n if (featureName) {\n targetFeatures = scopedFeatures.filter((f) =>\n matchesFeatureSelector(f, featureName)\n );\n selectionMode = 'explicit';\n } else {\n if (config.projectType === 'single') {\n const branchName = branches.project.single || '';\n targetFeatures = detectFromBranch(branchName, scopedFeatures);\n } else if (selectedComponent) {\n const branchName = branches.project[selectedComponent] || '';\n targetFeatures = detectFromBranch(\n branchName,\n scopedFeatures\n );\n } else {\n const matches: FeatureContext[] = [];\n const componentKeys = [...new Set(scopedFeatures.map((f) => f.type))]\n .filter((key) => key !== 'single');\n for (const component of componentKeys) {\n const branchName = branches.project[component] || '';\n if (!branchName) continue;\n matches.push(\n ...detectFromBranch(\n branchName,\n scopedFeatures.filter((f) => f.type === component)\n )\n );\n }\n targetFeatures = matches;\n }\n\n if (targetFeatures.length > 0) {\n selectionMode = 'branch';\n selectionFallback = 'none';\n } else if (options.all) {\n targetFeatures = scopedFeatures;\n selectionMode = 'all';\n selectionFallback = 'all_features';\n } else if (options.done) {\n targetFeatures = doneFeatures;\n selectionMode = 'done';\n selectionFallback = 'done_features';\n } else {\n targetFeatures = openFeatures;\n selectionMode = 'open';\n selectionFallback = 'open_features';\n }\n }\n\n const status = toSelectionStatus(\n scopedFeatures,\n selectionMode,\n openFeatures,\n targetFeatures\n );\n const matchedFeature = targetFeatures.length === 1 ? targetFeatures[0] : null;\n const actions = annotateActions(matchedFeature?.actions ?? []);\n const actionOptions = toActionOptions(actions, config.lang);\n const contextVersion = getContextVersion(matchedFeature, actionOptions);\n\n return {\n features: scopedFeatures,\n branches,\n warnings,\n doneFeatures,\n openFeatures,\n inProgressFeatures,\n readyToCloseFeatures,\n selectionMode,\n selectionFallback,\n targetFeatures,\n status,\n matchedFeature,\n actions,\n actionOptions,\n contextVersion,\n };\n}\n","function isAffirmativeApprovalReply(input: string): boolean {\n const raw = input.trim();\n if (!raw) return false;\n\n if (\n /\\b(?:no|don'?t|do not|stop|cancel|hold|wait|아니|취소|중지|보류)\\b/i.test(raw)\n ) {\n return false;\n }\n\n return /(?:^|[\\s`\"'([{<])(?:ok|okay|yes|y|go|proceed|continue|run|execute|approve(?:d)?|진행(?:해|하세요)?|수행(?:해|하세요)?|실행(?:해|하세요)?|승인(?:해|하세요)?|해줘|해주세요|오케이)(?:$|[\\s`\"')\\]}>.!?,])/i.test(\n raw\n );\n}\n\nexport interface ParsedApprovalReply {\n label: string;\n requestText?: string;\n}\n\nfunction normalizeRequestText(raw: string): string {\n return raw.replace(/^[\\s,;:]+/, '').trim();\n}\n\nexport function parseApprovalReply(\n input: string,\n validLabels: string[]\n): ParsedApprovalReply | null {\n const raw = input.trim();\n if (!raw) return null;\n const normalized = raw.toUpperCase();\n\n const normalizedLabels = validLabels\n .map((label) => label.trim().toUpperCase())\n .filter(Boolean);\n const validSet = new Set(normalizedLabels);\n if (validSet.size === 0) return null;\n\n // Prefer label-first replies: \"A\", \"A OK\", \"A proceed\", \"A 진행해\"\n const leading = raw.match(/^[`\"'([{<\\s]*([A-Za-z]+)\\b/);\n if (leading) {\n const label = leading[1].toUpperCase();\n if (validSet.has(label)) {\n const requestText = normalizeRequestText(raw.slice(leading[0].length));\n return requestText ? { label, requestText } : { label };\n }\n }\n\n // Fallback: allow natural sentences that include a valid label token.\n const tokens = normalized.match(/[A-Z]+/g) || [];\n for (const token of tokens) {\n if (validSet.has(token)) return { label: token };\n }\n\n // UX fallback:\n // When there is only one available label, accept plain affirmative replies\n // like \"진행해\", \"수행하세요\", \"proceed\" without requiring \"A\" token.\n if (normalizedLabels.length === 1 && isAffirmativeApprovalReply(input)) {\n return { label: normalizedLabels[0] };\n }\n return null;\n}\n\nexport function parseApprovalLabel(input: string, validLabels: string[]): string | null {\n return parseApprovalReply(input, validLabels)?.label ?? null;\n}\n","import path from 'path';\nimport fs from 'fs-extra';\nimport { createHash, randomUUID } from 'crypto';\nimport {\n getApprovalTicketStorePath,\n getDocsLockPath,\n withFileLock,\n} from '../lock.js';\nimport { createCliError } from '../cli-error.js';\n\nexport interface ApprovalTicketRecord {\n token: string;\n sessionId: string;\n contextVersion: string;\n actionHash: string;\n label: string;\n featureRef: string;\n createdAt: string;\n expiresAt: string;\n usedAt?: string;\n}\n\ninterface ApprovalTicketStore {\n tickets: ApprovalTicketRecord[];\n}\n\ninterface ApprovalTicketConfig {\n docsDir: string;\n}\n\nconst LEGACY_APPROVAL_TICKET_FILENAME = '.lee-spec-kit.approval-tickets.json';\nconst APPROVAL_TICKET_TTL_MS = 5 * 60 * 1000;\n\nfunction getApprovalSessionId(): string {\n const explicit = (process.env.LEE_SPEC_KIT_SESSION_ID || '').trim();\n if (explicit) return explicit;\n const terminalSession = (\n process.env.TERM_SESSION_ID ||\n process.env.WT_SESSION ||\n process.env.TMUX_PANE ||\n ''\n ).trim();\n if (terminalSession) return terminalSession;\n return `ppid:${process.ppid}`;\n}\n\nfunction getApprovalTicketPaths(\n config: ApprovalTicketConfig\n): { runtimePath: string; legacyPath: string } {\n return {\n runtimePath: getApprovalTicketStorePath(config.docsDir),\n legacyPath: path.join(config.docsDir, LEGACY_APPROVAL_TICKET_FILENAME),\n };\n}\n\nasync function loadApprovalTicketStore(storePath: string): Promise<ApprovalTicketStore> {\n if (!(await fs.pathExists(storePath))) return { tickets: [] };\n try {\n const parsed = await fs.readJson(storePath);\n if (!parsed || !Array.isArray(parsed.tickets)) return { tickets: [] };\n return { tickets: parsed.tickets as ApprovalTicketRecord[] };\n } catch {\n return { tickets: [] };\n }\n}\n\nasync function saveApprovalTicketStore(\n storePath: string,\n payload: Record<string, unknown>\n): Promise<void> {\n await fs.ensureDir(path.dirname(storePath));\n await fs.writeJson(storePath, payload, { spaces: 2 });\n}\n\nfunction pruneApprovalTickets(\n tickets: ApprovalTicketRecord[],\n nowMs: number\n): ApprovalTicketRecord[] {\n return tickets.filter((ticket) => {\n if (ticket.usedAt) return false;\n const expiresAtMs = Date.parse(ticket.expiresAt || '');\n if (!Number.isFinite(expiresAtMs)) return false;\n return expiresAtMs > nowMs;\n });\n}\n\nasync function resolveApprovalTicketStoreAndPath(\n config: ApprovalTicketConfig,\n nowMs: number\n): Promise<{ storePath: string; store: ApprovalTicketStore }> {\n const { runtimePath, legacyPath } = getApprovalTicketPaths(config);\n if (await fs.pathExists(runtimePath)) {\n return {\n storePath: runtimePath,\n store: await loadApprovalTicketStore(runtimePath),\n };\n }\n\n if (!(await fs.pathExists(legacyPath))) {\n return {\n storePath: runtimePath,\n store: { tickets: [] },\n };\n }\n\n const legacyStore = await loadApprovalTicketStore(legacyPath);\n const migrated = pruneApprovalTickets(legacyStore.tickets, nowMs);\n await saveApprovalTicketStore(\n runtimePath,\n {\n tickets: migrated,\n updatedAt: new Date(nowMs).toISOString(),\n migratedFrom: legacyPath,\n }\n );\n await fs.remove(legacyPath).catch(() => {\n // Best-effort cleanup of legacy docs-scoped ticket file.\n });\n\n return {\n storePath: runtimePath,\n store: { tickets: migrated },\n };\n}\n\nexport function toApprovalActionHash(payload: {\n label: string;\n action: unknown;\n}): string {\n return createHash('sha256')\n .update(JSON.stringify(payload))\n .digest('hex')\n .slice(0, 24);\n}\n\nexport async function issueApprovalTicket(\n config: ApprovalTicketConfig,\n payload: Pick<ApprovalTicketRecord, 'contextVersion' | 'actionHash' | 'label' | 'featureRef'>\n): Promise<ApprovalTicketRecord> {\n const sessionId = getApprovalSessionId();\n const nowMs = Date.now();\n const record: ApprovalTicketRecord = {\n token: randomUUID().replace(/-/g, ''),\n sessionId,\n contextVersion: payload.contextVersion,\n actionHash: payload.actionHash,\n label: payload.label,\n featureRef: payload.featureRef,\n createdAt: new Date(nowMs).toISOString(),\n expiresAt: new Date(nowMs + APPROVAL_TICKET_TTL_MS).toISOString(),\n };\n const lockPath = getDocsLockPath(config.docsDir);\n return withFileLock(\n lockPath,\n async () => {\n const { storePath, store } = await resolveApprovalTicketStoreAndPath(\n config,\n nowMs\n );\n const nextTickets = pruneApprovalTickets(store.tickets, nowMs);\n nextTickets.push(record);\n await saveApprovalTicketStore(\n storePath,\n {\n tickets: nextTickets,\n updatedAt: new Date(nowMs).toISOString(),\n }\n );\n return record;\n },\n { owner: 'context-approval-ticket:issue' }\n );\n}\n\nexport async function consumeApprovalTicket(\n config: ApprovalTicketConfig,\n token: string,\n expected: Pick<\n ApprovalTicketRecord,\n 'contextVersion' | 'actionHash' | 'label' | 'featureRef'\n >\n): Promise<ApprovalTicketRecord> {\n const normalizedToken = token.trim();\n if (!normalizedToken) {\n throw createCliError(\n 'APPROVAL_REQUIRED',\n 'Execution requires an approval ticket. Run `context --approve <reply> --json` first and pass `--ticket <token>`.'\n );\n }\n const lockPath = getDocsLockPath(config.docsDir);\n const sessionId = getApprovalSessionId();\n const nowMs = Date.now();\n\n return withFileLock(\n lockPath,\n async () => {\n const { storePath, store } = await resolveApprovalTicketStoreAndPath(\n config,\n nowMs\n );\n const cleaned = pruneApprovalTickets(store.tickets, nowMs);\n const index = cleaned.findIndex((entry) => entry.token === normalizedToken);\n if (index < 0) {\n await saveApprovalTicketStore(storePath, {\n tickets: cleaned,\n updatedAt: new Date(nowMs).toISOString(),\n });\n throw createCliError(\n 'INVALID_APPROVAL',\n 'Unknown or expired approval ticket. Re-run `context` and approve again.'\n );\n }\n\n const record = cleaned[index];\n const expiresAtMs = Date.parse(record.expiresAt || '');\n if (!Number.isFinite(expiresAtMs) || expiresAtMs <= nowMs) {\n cleaned.splice(index, 1);\n await saveApprovalTicketStore(storePath, {\n tickets: cleaned,\n updatedAt: new Date(nowMs).toISOString(),\n });\n throw createCliError(\n 'CONTEXT_STALE',\n 'Approval ticket expired. Run `context` again and re-approve.'\n );\n }\n\n if (record.sessionId !== sessionId) {\n throw createCliError(\n 'INVALID_APPROVAL',\n 'Approval ticket session mismatch. Re-run `context` in the current session and approve again.'\n );\n }\n if (record.label !== expected.label) {\n throw createCliError(\n 'INVALID_APPROVAL',\n `Approval ticket label mismatch. Ticket=${record.label}, expected=${expected.label}.`\n );\n }\n if (record.contextVersion !== expected.contextVersion) {\n throw createCliError(\n 'CONTEXT_STALE',\n 'Context changed after approval. Run `context` again and re-approve.'\n );\n }\n if (record.actionHash !== expected.actionHash) {\n throw createCliError(\n 'CONTEXT_STALE',\n 'Selected action changed after approval. Run `context` again and re-approve.'\n );\n }\n if (record.featureRef !== expected.featureRef) {\n throw createCliError(\n 'INVALID_APPROVAL',\n 'Approval ticket feature mismatch. Re-run `context` for this feature and approve again.'\n );\n }\n\n cleaned.splice(index, 1);\n await saveApprovalTicketStore(storePath, {\n tickets: cleaned,\n updatedAt: new Date(nowMs).toISOString(),\n });\n return record;\n },\n { owner: 'context-approval-ticket:consume' }\n );\n}\n","import { createHash } from 'crypto';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { Lang } from './i18n.js';\nimport { ProjectType } from './project-type.js';\nimport { getTemplatesDir } from './paths.js';\n\nexport type BuiltinDocId =\n | 'agents'\n | 'git-workflow'\n | 'issue-doc'\n | 'pr-doc'\n | 'create-feature'\n | 'execute-task'\n | 'create-issue'\n | 'create-pr';\n\ninterface BuiltinDocDefinition {\n id: BuiltinDocId;\n title: Record<Lang, string>;\n relativePath: (projectType: ProjectType, lang: Lang) => string;\n}\n\nexport interface BuiltinDocEntry {\n id: BuiltinDocId;\n title: string;\n relativePath: string;\n absolutePath: string;\n}\n\nconst BUILTIN_DOC_DEFINITIONS: ReadonlyArray<BuiltinDocDefinition> = [\n {\n id: 'agents',\n title: { ko: '에이전트 운영 규칙', en: 'Agent Operating Rules' },\n relativePath: (_, lang) => path.join(lang, 'common', 'agents', 'agents.md'),\n },\n {\n id: 'git-workflow',\n title: { ko: 'Git 워크플로우', en: 'Git Workflow' },\n relativePath: (_, lang) => path.join(lang, 'common', 'agents', 'git-workflow.md'),\n },\n {\n id: 'issue-doc',\n title: { ko: 'Issue 문서 템플릿', en: 'Issue Document Template' },\n relativePath: (_, lang) =>\n path.join(lang, 'common', 'features', 'feature-base', 'issue.md'),\n },\n {\n id: 'pr-doc',\n title: { ko: 'PR 문서 템플릿', en: 'PR Document Template' },\n relativePath: (_, lang) =>\n path.join(lang, 'common', 'features', 'feature-base', 'pr.md'),\n },\n {\n id: 'create-feature',\n title: { ko: 'create-feature 스킬', en: 'create-feature skill' },\n relativePath: (_, lang) =>\n path.join(lang, 'common', 'agents', 'skills', 'create-feature.md'),\n },\n {\n id: 'execute-task',\n title: { ko: 'execute-task 스킬', en: 'execute-task skill' },\n relativePath: (_, lang) =>\n path.join(lang, 'common', 'agents', 'skills', 'execute-task.md'),\n },\n {\n id: 'create-issue',\n title: { ko: 'create-issue 스킬', en: 'create-issue skill' },\n relativePath: (_, lang) =>\n path.join(lang, 'common', 'agents', 'skills', 'create-issue.md'),\n },\n {\n id: 'create-pr',\n title: { ko: 'create-pr 스킬', en: 'create-pr skill' },\n relativePath: (_, lang) =>\n path.join(lang, 'common', 'agents', 'skills', 'create-pr.md'),\n },\n];\n\nconst DOC_FOLLOWUPS: Readonly<Record<BuiltinDocId, BuiltinDocId[]>> = {\n agents: [\n 'create-feature',\n 'execute-task',\n 'git-workflow',\n 'create-issue',\n 'issue-doc',\n 'create-pr',\n 'pr-doc',\n ],\n 'git-workflow': [],\n 'issue-doc': [],\n 'pr-doc': [],\n 'create-feature': ['execute-task'],\n 'execute-task': ['git-workflow'],\n 'create-issue': ['issue-doc'],\n 'create-pr': ['pr-doc'],\n};\n\nconst CATEGORY_DOC_MAP: Readonly<Record<string, BuiltinDocId[]>> = {\n spec_write: ['agents'],\n spec_approve: ['agents'],\n plan_write: ['agents'],\n plan_approve: ['agents'],\n tasks_write: ['agents', 'execute-task'],\n tasks_approve: ['execute-task'],\n task_execute: ['execute-task', 'git-workflow'],\n review_fix_commit: ['create-pr', 'git-workflow'],\n docs_commit: ['git-workflow'],\n branch_create: ['git-workflow'],\n issue_create: ['create-issue', 'issue-doc', 'git-workflow'],\n pre_pr_review: ['create-pr'],\n pr_create: ['create-pr', 'pr-doc', 'git-workflow'],\n pr_status_update: ['create-pr'],\n code_review: ['create-pr'],\n worktree_cleanup: ['git-workflow'],\n user_request_replan: ['agents', 'execute-task'],\n};\n\nexport function getBuiltinDocIds(): BuiltinDocId[] {\n return BUILTIN_DOC_DEFINITIONS.map((doc) => doc.id);\n}\n\nexport function normalizeBuiltinDocId(input: string): BuiltinDocId | null {\n const normalized = input.trim().toLowerCase().replace(/_/g, '-');\n if (normalized === 'git-workflow') return 'git-workflow';\n if (normalized === 'issue-doc' || normalized === 'issue-md') return 'issue-doc';\n if (normalized === 'pr-doc' || normalized === 'pr-md') return 'pr-doc';\n // Backward-compat aliases (deprecated)\n if (normalized === 'issue-template') return 'issue-doc';\n if (normalized === 'pr-template') return 'pr-doc';\n if (normalized === 'create-feature') return 'create-feature';\n if (normalized === 'execute-task') return 'execute-task';\n if (normalized === 'create-issue') return 'create-issue';\n if (normalized === 'create-pr') return 'create-pr';\n if (normalized === 'agents') return 'agents';\n return null;\n}\n\nexport function toBuiltinDocCommand(docId: BuiltinDocId): string {\n return `npx lee-spec-kit docs get ${docId} --json`;\n}\n\nfunction uniqDocIds(ids: BuiltinDocId[]): BuiltinDocId[] {\n const seen = new Set<BuiltinDocId>();\n const ordered: BuiltinDocId[] = [];\n for (const id of ids) {\n if (seen.has(id)) continue;\n seen.add(id);\n ordered.push(id);\n }\n return ordered;\n}\n\nexport function getFollowupDocIds(docId: BuiltinDocId): BuiltinDocId[] {\n return [...(DOC_FOLLOWUPS[docId] || [])];\n}\n\nexport function getRecommendedDocIdsForCategories(\n categories: Array<string | undefined>\n): BuiltinDocId[] {\n const ids: BuiltinDocId[] = [];\n for (const category of categories) {\n if (!category) continue;\n ids.push(...(CATEGORY_DOC_MAP[category] || []));\n }\n return uniqDocIds(ids);\n}\n\nexport function listBuiltinDocs(\n projectType: ProjectType,\n lang: Lang\n): BuiltinDocEntry[] {\n const templatesDir = getTemplatesDir();\n return BUILTIN_DOC_DEFINITIONS.map((doc) => {\n const relativePath = doc.relativePath(projectType, lang);\n return {\n id: doc.id,\n title: doc.title[lang],\n relativePath,\n absolutePath: path.join(templatesDir, relativePath),\n };\n });\n}\n\nexport async function getBuiltinDoc(\n docId: BuiltinDocId,\n projectType: ProjectType,\n lang: Lang\n): Promise<{\n entry: BuiltinDocEntry;\n content: string;\n hash: string;\n followups: BuiltinDocId[];\n}> {\n const entry = listBuiltinDocs(projectType, lang).find((doc) => doc.id === docId);\n if (!entry) {\n throw new Error(`Unknown builtin doc: ${docId}`);\n }\n const content = await fs.readFile(entry.absolutePath, 'utf-8');\n const hash = createHash('sha256').update(content).digest('hex').slice(0, 12);\n return {\n entry,\n content,\n hash,\n followups: getFollowupDocIds(docId),\n };\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport { getConfig } from '../utils/config.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport {\n resolvePrePrReviewPolicy,\n resolveTaskCommitGatePolicy,\n resolveWorkflowPolicy,\n} from '../utils/workflow.js';\nimport {\n getDocsLockPath,\n getProjectExecutionLockPath,\n withFileLock,\n} from '../utils/lock.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\nimport {\n FeatureContext,\n getStepDefinitions,\n getStepsMap,\n StepDefinition,\n} from '../utils/context.js';\nimport {\n ActionOption,\n ContextSelectionOptions,\n ContextSelectionState,\n resolveContextSelection,\n toReasonCode,\n} from '../utils/context-selection.js';\nimport { parseApprovalReply } from '../utils/context/approval-reply.js';\nimport {\n consumeApprovalTicket,\n issueApprovalTicket,\n toApprovalActionHash,\n} from '../utils/context/approval-ticket.js';\nimport {\n BuiltinDocId,\n getRecommendedDocIdsForCategories,\n toBuiltinDocCommand,\n} from '../utils/builtin-docs.js';\n\ninterface ContextOptions {\n json?: boolean;\n jsonCompact?: boolean;\n component?: string;\n all?: boolean;\n done?: boolean;\n approve?: string;\n ticket?: string;\n execute?: boolean;\n executeStrict?: boolean;\n}\n\ntype CommandAction = Extract<ActionOption['action'], { type: 'command' }>;\ntype ResolvedContextState = ContextSelectionState;\ninterface RequiredDocHint {\n id: BuiltinDocId;\n command: string;\n}\n\ninterface SuggestionOption {\n label: string;\n summary: string;\n detail: string;\n command: string;\n}\n\nasync function resolveContextState(\n config: Awaited<ReturnType<typeof getConfig>>,\n featureName: string | undefined,\n options: ContextSelectionOptions\n): Promise<ResolvedContextState> {\n if (!config) {\n throw createCliError(\n 'CONFIG_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.configNotFound')\n );\n }\n return resolveContextSelection(config, featureName, options);\n}\n\nfunction listLabels(actionOptions: ActionOption[]): string {\n if (actionOptions.length === 0) return '-';\n return actionOptions.map((o) => o.label).join(', ');\n}\n\nfunction listSuggestionLabels(suggestionOptions: SuggestionOption[]): string {\n if (suggestionOptions.length === 0) return '-';\n return suggestionOptions.map((o) => o.label).join(', ');\n}\n\nfunction resolveFeatureRefForApproval(\n state: ResolvedContextState,\n featureName: string | undefined\n): string {\n const raw =\n featureName?.trim() ||\n state.matchedFeature?.folderName ||\n '<slug|F001|F001-slug>';\n return raw;\n}\n\nfunction buildApprovalCommand(\n state: ResolvedContextState,\n featureName: string | undefined,\n selectedComponent: string,\n execute: boolean\n): string {\n const featureRef = resolveFeatureRefForApproval(state, featureName);\n const componentArg = selectedComponent ? ` --component ${selectedComponent}` : '';\n if (execute) {\n return `npx lee-spec-kit context ${featureRef}${componentArg} --approve <LABEL> --execute [--ticket <TICKET>]`;\n }\n return `npx lee-spec-kit context ${featureRef}${componentArg} --approve <LABEL>`;\n}\n\nfunction buildFinalApprovalPrompt(\n lang: 'ko' | 'en',\n actionOptions: ActionOption[]\n): string {\n if (actionOptions.length === 0) return '';\n const labels = listLabels(actionOptions);\n const example = actionOptions[0]?.replyExample || `${actionOptions[0]?.label || 'A'} OK`;\n const requestExamples = actionOptions\n .filter((option) => option.requiresRequestText)\n .map((option) => `\\`${option.replyExample}\\``);\n if (requestExamples.length === 0) {\n return tr(lang, 'cli', 'context.finalLabelPrompt', {\n labels,\n example,\n });\n }\n return tr(lang, 'cli', 'context.finalLabelPromptWithRequest', {\n labels,\n example,\n requestExamples: requestExamples.join(', '),\n });\n}\n\nfunction buildSuggestionFinalPrompt(\n lang: 'ko' | 'en',\n suggestionOptions: SuggestionOption[]\n): string {\n if (suggestionOptions.length === 0) return '';\n const labels = listSuggestionLabels(suggestionOptions);\n const example = suggestionOptions[0]?.label || 'A';\n return tr(lang, 'cli', 'context.suggestionFinalPrompt', {\n labels,\n example,\n });\n}\n\nfunction toSuggestionLabel(index: number): string {\n let n = index + 1;\n let label = '';\n while (n > 0) {\n const rem = (n - 1) % 26;\n label = String.fromCharCode(65 + rem) + label;\n n = Math.floor((n - 1) / 26);\n }\n return label;\n}\n\nfunction buildSuggestionOptions(\n lang: 'ko' | 'en',\n state: ResolvedContextState,\n projectType: 'single' | 'multi',\n selectedComponent: string\n): SuggestionOption[] {\n const componentArg = selectedComponent ? ` --component ${selectedComponent}` : '';\n const createFeatureCommand =\n projectType === 'multi'\n ? selectedComponent\n ? `npx lee-spec-kit feature <name> --component ${selectedComponent}`\n : 'npx lee-spec-kit feature <name> --component <component>'\n : 'npx lee-spec-kit feature <name>';\n const selectFeatureCommand =\n projectType === 'multi'\n ? selectedComponent\n ? `npx lee-spec-kit context <slug|F001|F001-slug> --component ${selectedComponent}`\n : 'npx lee-spec-kit context <slug|F001|F001-slug> --component <component>'\n : 'npx lee-spec-kit context <slug|F001|F001-slug>';\n const showDoneCommand = `npx lee-spec-kit context --done${componentArg}`;\n const showAllCommand = `npx lee-spec-kit context --all${componentArg}`;\n const showOpenCommand = `npx lee-spec-kit context${componentArg}`;\n const runOnboardCommand = 'npx lee-spec-kit onboard --strict';\n\n const rawSuggestions: Array<{ summary: string; command: string }> = [];\n switch (state.status) {\n case 'no_features':\n rawSuggestions.push({\n summary: tr(lang, 'cli', 'context.suggestion.runOnboard'),\n command: runOnboardCommand,\n });\n rawSuggestions.push({\n summary: tr(lang, 'cli', 'context.suggestion.createFeature'),\n command: createFeatureCommand,\n });\n break;\n case 'no_open':\n rawSuggestions.push({\n summary: tr(lang, 'cli', 'context.suggestion.showDone'),\n command: showDoneCommand,\n });\n rawSuggestions.push({\n summary: tr(lang, 'cli', 'context.suggestion.createFeature'),\n command: createFeatureCommand,\n });\n rawSuggestions.push({\n summary: tr(lang, 'cli', 'context.suggestion.showAll'),\n command: showAllCommand,\n });\n break;\n case 'multiple_active':\n rawSuggestions.push({\n summary: tr(lang, 'cli', 'context.suggestion.selectFeature'),\n command: selectFeatureCommand,\n });\n rawSuggestions.push({\n summary: tr(lang, 'cli', 'context.suggestion.showAll'),\n command: showAllCommand,\n });\n break;\n case 'no_match':\n rawSuggestions.push({\n summary: tr(lang, 'cli', 'context.suggestion.showOpen'),\n command: showOpenCommand,\n });\n rawSuggestions.push({\n summary: tr(lang, 'cli', 'context.suggestion.showAll'),\n command: showAllCommand,\n });\n break;\n case 'single_matched':\n default:\n break;\n }\n\n return rawSuggestions.map((item, index) => {\n const label = toSuggestionLabel(index);\n return {\n label,\n summary: item.summary,\n detail: `${item.summary}: ${item.command}`,\n command: item.command,\n };\n });\n}\n\nfunction printSuggestionOptions(\n lang: 'ko' | 'en',\n suggestionOptions: SuggestionOption[]\n): void {\n if (suggestionOptions.length === 0) return;\n const finalPrompt = buildSuggestionFinalPrompt(lang, suggestionOptions);\n console.log(chalk.green(chalk.bold(`👉 ${tr(lang, 'cli', 'context.suggestionHeader')}`)));\n suggestionOptions.forEach((option) => {\n console.log(` ${option.label}: ${option.summary}`);\n console.log(\n chalk.gray(\n ` ↳ ${tr(lang, 'cli', 'context.suggestionCommandHint', {\n command: option.command,\n })}`\n )\n );\n });\n if (finalPrompt) {\n console.log(chalk.cyan(` ↳ ${finalPrompt}`));\n }\n}\n\nfunction buildRequiredDocHints(actionOptions: ActionOption[]): RequiredDocHint[] {\n const ids = getRecommendedDocIdsForCategories(\n actionOptions.map((option) => option.action.category)\n );\n return ids.map((id) => ({\n id,\n command: toBuiltinDocCommand(id),\n }));\n}\n\nfunction executeCommandAction(\n cmd: string,\n jsonMode: boolean,\n cwd?: string\n): { stdout?: string; stderr?: string } {\n const shellPath =\n process.env.SHELL ||\n (process.platform === 'win32' ? process.env.ComSpec || 'cmd.exe' : '/bin/sh');\n\n if (jsonMode) {\n const stdout = execSync(cmd, {\n shell: shellPath,\n cwd,\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n return { stdout };\n }\n\n execSync(cmd, {\n shell: shellPath,\n cwd,\n stdio: 'inherit',\n });\n return {};\n}\n\nfunction getCommandExecutionLockPath(\n action: CommandAction,\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>\n): string {\n if (action.scope === 'docs') {\n return getDocsLockPath(config.docsDir);\n }\n return getProjectExecutionLockPath(action.cwd);\n}\n\nexport function contextCommand(program: Command): void {\n program\n .command('context [feature-name]')\n .description('Show current feature context and next actions')\n .option('--json', 'Output in JSON format for agents')\n .option(\n '--json-compact',\n 'Output compact JSON for agents (implies --json, reduced duplication)'\n )\n .option('--component <component>', 'Component name for multi projects')\n .option('--all', 'Include completed features when auto-detecting')\n .option('--done', 'Show completed (workflow-done) features only')\n .option(\n '--approve <reply>',\n 'Approve one labeled option (examples: A, A OK, A proceed, A 진행해)'\n )\n .option(\n '--ticket <token>',\n 'Approval ticket issued by `--approve` (required only when selected option requires user check)'\n )\n .option(\n '--execute',\n 'Execute approved option when it is a command (ticket required only for check-required options)'\n )\n .option(\n '--execute-strict',\n 'Fail when approved option is instruction-only (use with --execute)'\n )\n .action(\n async (featureName: string | undefined, options: ContextOptions) => {\n try {\n await runContext(featureName, options);\n } catch (error) {\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n if (options.json || options.jsonCompact) {\n console.log(\n JSON.stringify({\n status: 'error',\n reasonCode: cliError.code,\n error: cliError.message,\n suggestions,\n })\n );\n } else {\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n }\n process.exitCode = 1;\n return;\n }\n }\n );\n}\n\nfunction getListLabel(\n f: FeatureContext,\n stepsMap: Record<number, string>,\n lang: 'ko' | 'en',\n workflowPolicy: ReturnType<typeof resolveWorkflowPolicy>,\n prePrReviewPolicy: ReturnType<typeof resolvePrePrReviewPolicy>\n): string {\n // For \"ready to close\" features, show the closest missing workflow requirement\n // instead of generic step names like \"tasks.md 작성\".\n if (f.completion.implementationDone && !f.completion.workflowDone) {\n if (f.git.docsHasUncommittedChanges) {\n return tr(lang, 'cli', 'context.list.docsCommitNeeded');\n }\n if (f.git.projectHasUncommittedChanges) {\n return tr(lang, 'cli', 'context.list.projectCommitNeeded');\n }\n if (workflowPolicy.requireIssue && !f.issueNumber) {\n return tr(lang, 'cli', 'context.list.issueNumberNeeded');\n }\n if (workflowPolicy.requirePr && (!f.docs.prFieldExists || !f.docs.prStatusFieldExists)) {\n return tr(lang, 'cli', 'context.list.addPrMetadata');\n }\n if (prePrReviewPolicy.enabled && !f.docs.prePrReviewFieldExists) {\n return tr(lang, 'cli', 'context.list.addPrePrReviewField');\n }\n if (prePrReviewPolicy.enabled && f.prePrReview.status !== 'Done') {\n return tr(lang, 'cli', 'context.list.completePrePrReview');\n }\n if (\n prePrReviewPolicy.enabled &&\n (!f.docs.prePrFindingsFieldExists || !f.prePrReview.findings)\n ) {\n return tr(lang, 'cli', 'context.list.addPrePrFindings');\n }\n if (\n prePrReviewPolicy.enabled &&\n (!f.docs.prePrEvidenceFieldExists || !f.prePrReview.evidenceProvided)\n ) {\n return tr(lang, 'cli', 'context.list.addPrePrEvidence');\n }\n if (\n prePrReviewPolicy.enabled &&\n prePrReviewPolicy.blockOnFindings &&\n (f.prePrReview.findings?.major || 0) > 0\n ) {\n return tr(lang, 'cli', 'context.list.resolvePrePrMajorFindings', {\n count: f.prePrReview.findings?.major || 0,\n });\n }\n if (\n prePrReviewPolicy.enabled &&\n prePrReviewPolicy.minorPolicy === 'block' &&\n (f.prePrReview.findings?.minor || 0) > 0\n ) {\n return tr(lang, 'cli', 'context.list.resolvePrePrMinorFindings', {\n count: f.prePrReview.findings?.minor || 0,\n });\n }\n if (workflowPolicy.requirePr && !f.pr.link) {\n return tr(lang, 'cli', 'context.list.recordPrLink');\n }\n if (workflowPolicy.requireReview && !f.pr.status) {\n return tr(lang, 'cli', 'context.list.setPrStatus');\n }\n if (\n workflowPolicy.requireReview &&\n f.pr.status === 'Review' &&\n (!f.docs.prReviewFindingsFieldExists || !f.prReview.findings)\n ) {\n return tr(lang, 'cli', 'context.list.addPrReviewFindings');\n }\n if (\n workflowPolicy.requireReview &&\n f.pr.status === 'Review' &&\n (!f.docs.prReviewEvidenceFieldExists ||\n (((f.prReview.findings?.major || 0) + (f.prReview.findings?.minor || 0) > 0) &&\n !f.prReview.evidenceProvided))\n ) {\n return tr(lang, 'cli', 'context.list.addPrReviewEvidence');\n }\n if (workflowPolicy.requireReview && f.pr.status !== 'Approved') {\n return tr(lang, 'cli', 'context.list.prStatusToApproved', {\n status: f.pr.status,\n });\n }\n if (f.specStatus !== 'Approved') {\n return tr(lang, 'cli', 'context.list.approveSpec');\n }\n if (f.planStatus !== 'Approved') {\n return tr(lang, 'cli', 'context.list.approvePlan');\n }\n }\n\n return stepsMap[f.currentStep] || 'Unknown';\n}\n\nfunction getMultipleFeaturesRecommendation(\n projectType: 'single' | 'multi',\n selectedComponent: string\n): string {\n if (projectType === 'single') {\n return 'Multiple features detected. Please specify feature name (slug | F001 | F001-slug).';\n }\n if (selectedComponent) {\n return `Multiple features detected in component \"${selectedComponent}\". Please specify feature name (slug | F001 | F001-slug).`;\n }\n return 'Multiple features detected across components. Please specify feature name (slug | F001 | F001-slug) or use --component.';\n}\n\nfunction getFeatureRef(feature: FeatureContext): string {\n return feature.folderName || `${feature.type}:${feature.slug}`;\n}\n\nfunction toCompactFeature(\n feature: FeatureContext | null | undefined\n): Record<string, unknown> | null {\n if (!feature) return null;\n\n return {\n ref: getFeatureRef(feature),\n id: feature.id ?? null,\n slug: feature.slug,\n folderName: feature.folderName,\n type: feature.type,\n path: feature.path,\n currentStep: feature.currentStep,\n nextAction: feature.nextAction,\n completion: feature.completion,\n specStatus: feature.specStatus,\n planStatus: feature.planStatus,\n tasks: feature.tasks,\n prePrReview: {\n status: feature.prePrReview.status,\n findings: feature.prePrReview.findings,\n evidenceProvided: feature.prePrReview.evidenceProvided,\n },\n prReview: {\n findings: feature.prReview.findings,\n evidenceProvided: feature.prReview.evidenceProvided,\n },\n pr: {\n link: feature.pr.link,\n status: feature.pr.status,\n remote: feature.pr.remote,\n },\n git: {\n docsBranch: feature.git.docsBranch,\n projectBranch: feature.git.projectBranch,\n projectBranchAvailable: feature.git.projectBranchAvailable,\n onExpectedBranch: feature.git.onExpectedBranch,\n docsEverCommitted: feature.git.docsEverCommitted,\n docsHasUncommittedChanges: feature.git.docsHasUncommittedChanges,\n projectHasUncommittedChanges: feature.git.projectHasUncommittedChanges,\n docsPathIgnored: feature.git.docsPathIgnored,\n },\n docs: {\n specExists: feature.docs.specExists,\n planExists: feature.docs.planExists,\n tasksExists: feature.docs.tasksExists,\n issueDocIssueFieldExists: feature.docs.issueDocIssueFieldExists,\n prDocPrFieldExists: feature.docs.prDocPrFieldExists,\n prDocReviewStatusFieldExists: feature.docs.prDocReviewStatusFieldExists,\n prFieldExists: feature.docs.prFieldExists,\n prStatusFieldExists: feature.docs.prStatusFieldExists,\n prePrReviewFieldExists: feature.docs.prePrReviewFieldExists,\n prePrFindingsFieldExists: feature.docs.prePrFindingsFieldExists,\n prePrEvidenceFieldExists: feature.docs.prePrEvidenceFieldExists,\n prReviewFindingsFieldExists: feature.docs.prReviewFindingsFieldExists,\n prReviewEvidenceFieldExists: feature.docs.prReviewEvidenceFieldExists,\n },\n warnings: feature.warnings,\n };\n}\n\nfunction toCompactActionOption(option: ActionOption): Record<string, unknown> {\n const base: Record<string, unknown> = {\n label: option.label,\n summary: option.summary,\n detail: option.detail,\n approvalPrompt: option.approvalPrompt,\n requiresRequestText: option.requiresRequestText,\n replyExample: option.replyExample,\n actionType: option.action.type,\n category: option.action.category,\n operationType: option.action.operationType,\n requiresUserCheck: !!option.action.requiresUserCheck,\n };\n\n if (option.action.type === 'command') {\n base.scope = option.action.scope;\n base.cwd = option.action.cwd;\n base.cmd = option.action.cmd;\n return base;\n }\n\n base.message = option.action.message;\n return base;\n}\n\nfunction toCompactSuggestionOption(\n option: SuggestionOption\n): Record<string, string> {\n return {\n label: option.label,\n summary: option.summary,\n command: option.command,\n };\n}\n\nfunction resolveContextRecommendation(\n state: ResolvedContextState,\n projectType: 'single' | 'multi',\n selectedComponent: string\n): string {\n if (state.status === 'multiple_active') {\n return getMultipleFeaturesRecommendation(projectType, selectedComponent);\n }\n if (state.status === 'no_features') {\n return 'No features found. Run onboarding checks first, then create a feature.';\n }\n if (state.status === 'no_open') {\n return 'No open features found. Use `context --done` to inspect completed features.';\n }\n if (state.status === 'no_match') {\n return 'No features found.';\n }\n if (state.targetFeatures.length === 1) {\n return state.targetFeatures[0].nextAction;\n }\n return 'No matched feature.';\n}\n\nasync function runContext(\n featureName: string | undefined,\n options: ContextOptions\n): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n const lang = config?.lang ?? 'en';\n const workflowPolicy = resolveWorkflowPolicy(config?.workflow);\n const prePrReviewPolicy = resolvePrePrReviewPolicy(config?.workflow);\n const taskCommitGatePolicy = resolveTaskCommitGatePolicy(config?.workflow);\n\n if (!config) {\n throw createCliError(\n 'CONFIG_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.configNotFound')\n );\n }\n\n if (options.execute && !options.approve) {\n throw createCliError(\n 'APPROVAL_REQUIRED',\n '`--execute` requires `--approve <reply>`.'\n );\n }\n\n if (!options.execute && options.ticket) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--ticket` is only valid with `--execute`.'\n );\n }\n\n if (options.executeStrict && !options.execute) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--execute-strict` requires `--execute`.'\n );\n }\n\n const selectedComponent = (options.component || '').trim().toLowerCase();\n\n const stepDefinitions = getStepDefinitions(lang, config.workflow);\n const stepsMap = getStepsMap(lang, config.workflow);\n const selectionOptions: ContextSelectionOptions = {\n component: selectedComponent || undefined,\n all: options.all,\n done: options.done,\n };\n const state = await resolveContextState(config, featureName, selectionOptions);\n const requiredDocs = buildRequiredDocHints(state.actionOptions);\n const suggestionOptions = buildSuggestionOptions(\n lang,\n state,\n config.projectType,\n selectedComponent\n );\n const suggestionFinalPrompt = buildSuggestionFinalPrompt(lang, suggestionOptions);\n\n if (options.approve || options.execute) {\n await runApprovedOption(\n state,\n config,\n lang,\n featureName,\n selectionOptions,\n options\n );\n return;\n }\n\n const jsonMode = !!options.json || !!options.jsonCompact;\n\n // 2. 결과 출력 (JSON)\n if (jsonMode) {\n const primaryAction = state.actionOptions[0] ?? null;\n const finalApprovalPrompt = buildFinalApprovalPrompt(lang, state.actionOptions);\n const approveCommand = buildApprovalCommand(\n state,\n featureName,\n selectedComponent,\n false\n );\n const executeCommand = buildApprovalCommand(\n state,\n featureName,\n selectedComponent,\n true\n );\n const recommendation = resolveContextRecommendation(\n state,\n config.projectType,\n selectedComponent\n );\n\n if (options.jsonCompact) {\n const compactResult = {\n schema: 'context.v2.compact',\n status: state.status,\n reasonCode: toReasonCode(state.status),\n selectionMode: state.selectionMode,\n selectionFallback: state.selectionFallback,\n branches: state.branches,\n warnings: state.warnings,\n contextVersion: state.contextVersion,\n matchedFeature: toCompactFeature(state.matchedFeature),\n candidateRefs:\n state.targetFeatures.length > 1\n ? state.targetFeatures.map((feature) => getFeatureRef(feature))\n : [],\n completedCandidateRefs:\n state.selectionMode === 'open'\n ? state.doneFeatures.map((feature) => getFeatureRef(feature))\n : [],\n openCandidateRefs:\n state.selectionMode === 'open'\n ? state.openFeatures.map((feature) => getFeatureRef(feature))\n : [],\n inProgressCandidateRefs:\n state.selectionMode === 'open'\n ? state.inProgressFeatures.map((feature) => getFeatureRef(feature))\n : [],\n readyToCloseCandidateRefs:\n state.selectionMode === 'open'\n ? state.readyToCloseFeatures.map((feature) => getFeatureRef(feature))\n : [],\n actionOptions: state.actionOptions.map((option) => toCompactActionOption(option)),\n suggestionOptions: suggestionOptions.map((option) =>\n toCompactSuggestionOption(option)\n ),\n primaryActionLabel: primaryAction?.label ?? null,\n workflowPolicy,\n taskCommitGatePolicy,\n prePrReviewPolicy,\n checkPolicy: {\n docPath: 'builtin://agents/policy',\n token: '<LABEL>',\n acceptedTokens: ['<LABEL>', '<LABEL> OK', '<LABEL> ...', '... <LABEL> ...'],\n tokenPattern: '^.*\\\\b([A-Z]+)\\\\b.*$',\n validLabels: state.actionOptions.map((o) => o.label),\n oneApprovalPerAction: true,\n requireFreshContext: true,\n contextVersion: state.contextVersion,\n config: config.approval ?? { mode: 'builtin' },\n },\n approvalRequest: {\n finalPrompt: finalApprovalPrompt,\n userFacingLines: [\n ...state.actionOptions.map((o) => o.approvalPrompt),\n finalApprovalPrompt,\n ].filter((line) => line.length > 0),\n labels: state.actionOptions.map((o) => o.label),\n approveCommand,\n executeCommand,\n executeRequiresTicket:\n !!state.actionOptions[0]?.action?.requiresUserCheck,\n },\n suggestionRequest: {\n finalPrompt: suggestionFinalPrompt,\n userFacingLines: [\n ...suggestionOptions.map((o) => `${o.label}: ${o.summary}`),\n suggestionFinalPrompt,\n ].filter((line) => line.length > 0),\n labels: suggestionOptions.map((o) => o.label),\n },\n prPolicy: {\n screenshots: {\n upload: config.pr?.screenshots?.upload ?? false,\n },\n },\n requiredDocs,\n recommendation,\n };\n console.log(JSON.stringify(compactResult, null, 2));\n return;\n }\n\n const result = {\n status: state.status,\n reasonCode: toReasonCode(state.status),\n selectionMode: state.selectionMode,\n selectionFallback: state.selectionFallback,\n branches: state.branches,\n warnings: state.warnings,\n matchedFeature: state.matchedFeature,\n candidates: state.targetFeatures.length > 1 ? state.targetFeatures : [],\n // \"Completed\" now means workflow-done.\n completedCandidates: state.selectionMode === 'open' ? state.doneFeatures : [],\n openCandidates: state.selectionMode === 'open' ? state.openFeatures : [],\n inProgressCandidates:\n state.selectionMode === 'open' ? state.inProgressFeatures : [],\n readyToCloseCandidates:\n state.selectionMode === 'open' ? state.readyToCloseFeatures : [],\n actions: state.actions,\n actionOptions: state.actionOptions,\n suggestionOptions,\n primaryActionLabel: primaryAction?.label ?? null,\n primaryActionType: primaryAction?.action.type ?? null,\n primaryActionCategory: primaryAction?.action.category ?? null,\n primaryActionOperationType: primaryAction?.action.operationType ?? null,\n workflowPolicy,\n taskCommitGatePolicy,\n prePrReviewPolicy,\n checkPolicy: {\n docPath: 'builtin://agents/policy',\n hint: tr(lang, 'cli', 'context.checkPolicyHint'),\n policyOnly: true,\n token: '<LABEL>',\n acceptedTokens: ['<LABEL>', '<LABEL> OK', '<LABEL> ...', '... <LABEL> ...'],\n tokenPattern: '^.*\\\\b([A-Z]+)\\\\b.*$',\n validLabels: state.actionOptions.map((o) => o.label),\n requireExplanationBeforeApproval: true,\n requiredExplanationFields: [\n 'actionOptions[].label',\n 'actionOptions[].detail',\n 'actionOptions[].approvalPrompt',\n ],\n recommendation:\n 'Before asking for approval, show only `actionOptions[].approvalPrompt` lines and `approvalRequest.finalPrompt` to the user. Keep `requiredDocs`, `checkPolicy`, and raw execution commands as internal guidance. For commit actions, include scope (`docs`/`project`) and commit message in the visible prompt. User replies should include the label token (e.g. `A`, `A OK`, `A proceed`, `A 진행해`). For command execution, prefer one-shot `npx lee-spec-kit flow <featureRef> --approve <LABEL> --execute` to avoid session mismatch after context compression/reset. Use ticket-based `context --execute --ticket` only when explicitly needed.',\n oneApprovalPerAction: true,\n requireFreshContext: true,\n contextVersion: state.contextVersion,\n config: config.approval ?? { mode: 'builtin' },\n },\n approvalRequest: {\n guidance:\n 'User-facing output must include only approval prompts (`A: ...`) and `finalPrompt`. Do not expose `requiredDocs`, `checkPolicy`, or raw `cmd` unless explicitly requested. For approved command actions, prefer one-shot `flow --approve <LABEL> --execute`.',\n finalPrompt: finalApprovalPrompt,\n userFacingLines: [\n ...state.actionOptions.map((o) => o.approvalPrompt),\n finalApprovalPrompt,\n ].filter((line) => line.length > 0),\n labels: state.actionOptions.map((o) => o.label),\n approveCommand,\n executeCommand,\n executeRequiresTicket:\n !!state.actionOptions[0]?.action?.requiresUserCheck,\n options: state.actionOptions.map((o) => ({\n label: o.label,\n summary: o.summary,\n detail: o.detail,\n approvalPrompt: o.approvalPrompt,\n requiresRequestText: o.requiresRequestText,\n replyExample: o.replyExample,\n actionType: o.action.type,\n scope: o.action.type === 'command' ? o.action.scope : undefined,\n cwd: o.action.type === 'command' ? o.action.cwd : undefined,\n cmd: o.action.type === 'command' ? o.action.cmd : undefined,\n message: o.action.type === 'instruction' ? o.action.message : undefined,\n requiresUserCheck: !!o.action.requiresUserCheck,\n executeRequiresTicket: !!o.action.requiresUserCheck,\n operationType: o.action.operationType,\n })),\n },\n suggestionRequest: {\n guidance:\n 'When `actionOptions` is empty, present `suggestionOptions` as user-facing next choices. Keep command strings internal unless the user asks for executable commands.',\n finalPrompt: suggestionFinalPrompt,\n userFacingLines: [\n ...suggestionOptions.map((o) => `${o.label}: ${o.summary}`),\n suggestionFinalPrompt,\n ].filter((line) => line.length > 0),\n labels: suggestionOptions.map((o) => o.label),\n options: suggestionOptions.map((o) => ({\n label: o.label,\n summary: o.summary,\n detail: o.detail,\n command: o.command,\n })),\n },\n prPolicy: {\n screenshots: {\n upload: config.pr?.screenshots?.upload ?? false,\n },\n },\n requiredDocs,\n recommendation,\n };\n\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n // 3. 결과 출력 (Text)\n console.log();\n console.log(chalk.bold(tr(lang, 'cli', 'context.header')));\n if (config.projectType === 'single') {\n if (state.branches.project.single) {\n console.log(\n chalk.gray(\n ` (Detected from Project Branch: ${state.branches.project.single})`\n )\n );\n }\n } else if (selectedComponent) {\n const branchName = state.branches.project[selectedComponent] || '';\n if (branchName) {\n console.log(\n chalk.gray(\n ` (Detected from Project Branch: ${selectedComponent.toUpperCase()} ${branchName})`\n )\n );\n }\n } else {\n const parts = Object.entries(state.branches.project)\n .filter(([key, value]) => key !== 'single' && !!value)\n .map(([key, value]) => `${key.toUpperCase()} ${value}`);\n if (parts.length > 0) {\n console.log(chalk.gray(` (Detected from Project Branch: ${parts.join(' / ')})`));\n }\n }\n if (config.docsRepo === 'standalone' && state.branches.docs) {\n console.log(chalk.gray(` (Docs Branch: ${state.branches.docs})`));\n }\n console.log(chalk.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));\n console.log();\n\n if (state.features.length === 0) {\n console.log(\n chalk.yellow(\n tr(lang, 'cli', 'context.noActiveFeatures')\n )\n );\n console.log();\n printSuggestionOptions(lang, suggestionOptions);\n console.log();\n return;\n }\n\n if (state.warnings.length > 0) {\n console.log(chalk.yellow(tr(lang, 'cli', 'context.envWarnings')));\n state.warnings.forEach((w) => console.log(chalk.yellow(` - ${w}`)));\n console.log();\n }\n\n if (state.targetFeatures.length === 0) {\n console.log(chalk.yellow(tr(lang, 'cli', 'context.noActiveFeatures')));\n if (state.status === 'no_open') {\n console.log(\n chalk.gray(\n ` $ npx lee-spec-kit context --done # ${tr(lang, 'cli', 'context.tipShowDone')}`\n )\n );\n console.log(\n chalk.gray(\n ` $ npx lee-spec-kit context --all # ${tr(lang, 'cli', 'context.tipShowAll')}`\n )\n );\n }\n console.log();\n printSuggestionOptions(lang, suggestionOptions);\n console.log();\n return;\n }\n\n if (state.targetFeatures.length > 1) {\n if (state.selectionMode === 'open') {\n console.log(\n chalk.gray(\n ` ${tr(lang, 'cli', 'context.openFallbackSummary', {\n inProgress: state.inProgressFeatures.length,\n readyToClose: state.readyToCloseFeatures.length,\n done: state.doneFeatures.length,\n })}`\n )\n );\n console.log();\n }\n if (state.selectionMode === 'open') {\n console.log(\n chalk.blue(\n `🔹 ${tr(lang, 'cli', 'context.sectionInProgress')} (${state.inProgressFeatures.length})`\n )\n );\n state.inProgressFeatures.forEach((f) => {\n const stepName = getListLabel(\n f,\n stepsMap,\n lang,\n workflowPolicy,\n prePrReviewPolicy\n );\n const typeStr =\n config.projectType === 'multi' ? chalk.cyan(`(${f.type})`) : '';\n console.log(\n ` • ${chalk.bold(f.folderName)} ${typeStr} - ${chalk.yellow(stepName)}`\n );\n });\n\n console.log();\n console.log(\n chalk.blue(\n `🔸 ${tr(lang, 'cli', 'context.sectionReadyToClose')} (${state.readyToCloseFeatures.length})`\n )\n );\n state.readyToCloseFeatures.forEach((f) => {\n const stepName = getListLabel(\n f,\n stepsMap,\n lang,\n workflowPolicy,\n prePrReviewPolicy\n );\n const typeStr =\n config.projectType === 'multi' ? chalk.cyan(`(${f.type})`) : '';\n console.log(\n ` • ${chalk.bold(f.folderName)} ${typeStr} - ${chalk.yellow(stepName)}`\n );\n });\n } else {\n const title =\n state.selectionMode === 'all'\n ? `🔹 ${state.targetFeatures.length} Features:`\n : state.selectionMode === 'done'\n ? `🔹 ${state.targetFeatures.length} Done Features:`\n : `🔹 ${state.targetFeatures.length} Features Detected:`;\n console.log(chalk.blue(title));\n console.log();\n state.targetFeatures.forEach((f) => {\n const stepName = getListLabel(\n f,\n stepsMap,\n lang,\n workflowPolicy,\n prePrReviewPolicy\n );\n const typeStr =\n config.projectType === 'multi' ? chalk.cyan(`(${f.type})`) : '';\n console.log(\n ` • ${chalk.bold(f.folderName)} ${typeStr} - ${chalk.yellow(stepName)}`\n );\n });\n }\n\n console.log();\n console.log(chalk.gray(tr(lang, 'cli', 'context.tipDetails')));\n const selectorTip =\n config.projectType === 'multi'\n ? selectedComponent\n ? ` $ npx lee-spec-kit context <slug|F001|F001-slug> --component ${selectedComponent}`\n : ' $ npx lee-spec-kit context <slug|F001|F001-slug> [--component <component>]'\n : ' $ npx lee-spec-kit context <slug|F001|F001-slug>';\n console.log(\n chalk.gray(selectorTip)\n );\n if (state.selectionMode === 'open') {\n console.log(\n chalk.gray(\n ` $ npx lee-spec-kit context --all # ${tr(lang, 'cli', 'context.tipShowAll')}`\n )\n );\n console.log(\n chalk.gray(\n ` $ npx lee-spec-kit context --done # ${tr(lang, 'cli', 'context.tipShowDone')}`\n )\n );\n }\n console.log();\n printSuggestionOptions(lang, suggestionOptions);\n console.log();\n return;\n }\n\n // Single Matched Feature\n const f = state.targetFeatures[0];\n const stepName = stepsMap[f.currentStep] || 'Unknown';\n\n const checkTag = (requiresUserCheck?: boolean): string =>\n requiresUserCheck\n ? chalk.yellow(tr(lang, 'cli', 'context.checkRequired'))\n : '';\n const hasCheckAction = (f.actions || []).some((a) => !!a.requiresUserCheck);\n\n console.log(\n `🔹 Feature: ${chalk.bold(f.folderName)} ${config.projectType === 'multi' ? chalk.cyan(`(${f.type})`) : ''}`\n );\n console.log(\n ` • Completion: ${f.completion.implementationDone ? chalk.green('Implementation ✅') : chalk.gray('Implementation ◯')} / ${f.completion.workflowDone ? chalk.green('Workflow ✅') : chalk.yellow('Workflow ◯')}`\n );\n if (f.issueNumber) {\n console.log(` • Issue: #${f.issueNumber}`);\n }\n console.log(` • Path: ${path.relative(cwd, f.path)}`);\n if (f.git.projectBranch) {\n console.log(` • Project Branch: ${f.git.projectBranch}`);\n }\n\n console.log();\n console.log(\n `🔹 Progress: ${chalk.yellow(`Step ${f.currentStep}. ${stepName}`)}`\n );\n\n if (f.activeTask) {\n console.log(\n ` • Active Task: ${chalk.yellow(`[${f.activeTask.status}]`)} ${f.activeTask.title}`\n );\n } else if (f.nextTodoTask && f.currentStep === 10) {\n console.log(\n ` • Next TODO: ${chalk.gray(`[${f.nextTodoTask.status}]`)} ${f.nextTodoTask.title}`\n );\n }\n\n // 체크리스트 표시\n printChecklist(f, stepDefinitions);\n\n if (f.warnings.length > 0) {\n console.log();\n console.log(chalk.yellow('⚠️ Feature Warnings:'));\n f.warnings.forEach((w) => console.log(chalk.yellow(` - ${w}`)));\n }\n\n console.log();\n console.log(chalk.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));\n if (hasCheckAction) {\n console.log(chalk.gray(tr(lang, 'cli', 'context.checkPolicyHint')));\n }\n if (!f.actions || f.actions.length === 0) {\n console.log(`👉 Next Action: ${chalk.green(chalk.bold(f.nextAction))}`);\n console.log();\n return;\n }\n\n const actionOptions = state.actionOptions;\n console.log(chalk.green(chalk.bold('👉 Next Options (Atomic):')));\n let hasDocsCommand = false;\n actionOptions.forEach((option) => {\n const requiresCheck = option.action.requiresUserCheck;\n const detail = option.detail;\n console.log(` ${option.label}. ${checkTag(requiresCheck)}${detail}`);\n if (option.action.type === 'command' && option.action.scope === 'docs') {\n hasDocsCommand = true;\n }\n });\n if (hasDocsCommand) {\n console.log(chalk.gray(` ↳ ${tr(lang, 'cli', 'context.tipDocsCommitRules')}`));\n }\n if (hasCheckAction) {\n console.log(chalk.gray(` ↳ ${tr(lang, 'cli', 'context.actionOptionHint')}`));\n console.log(chalk.gray(` ↳ ${tr(lang, 'cli', 'context.actionExplainHint')}`));\n }\n if (requiredDocs.length > 0) {\n for (const requiredDoc of requiredDocs) {\n console.log(\n chalk.gray(\n ` ↳ ${tr(lang, 'cli', 'context.readBuiltinDocFirst', {\n command: requiredDoc.command,\n })}`\n )\n );\n }\n }\n if (actionOptions.length > 0) {\n const finalApprovalPrompt = buildFinalApprovalPrompt(lang, actionOptions);\n const approveCommand = buildApprovalCommand(\n state,\n featureName,\n selectedComponent,\n false\n );\n const executeCommand = buildApprovalCommand(\n state,\n featureName,\n selectedComponent,\n true\n );\n console.log(chalk.cyan(` ↳ ${finalApprovalPrompt}`));\n console.log(\n chalk.gray(\n ` ↳ ${tr(lang, 'cli', 'context.finalLabelCommandHint', {\n command: approveCommand,\n })}`\n )\n );\n console.log(\n chalk.gray(\n ` ↳ ${tr(lang, 'cli', 'context.finalTicketCommandHint', {\n command: executeCommand,\n })}`\n )\n );\n }\n console.log();\n}\n\nasync function runApprovedOption(\n state: ResolvedContextState,\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n lang: 'ko' | 'en',\n featureName: string | undefined,\n selectionOptions: ContextSelectionOptions,\n options: ContextOptions\n): Promise<void> {\n const approval = options.approve || '';\n const ticketToken = (options.ticket || '').trim();\n const jsonMode = !!options.json || !!options.jsonCompact;\n let parsedLabel: string | null = null;\n let userRequest: string | undefined;\n\n if (state.status !== 'single_matched' || !state.matchedFeature) {\n throw createCliError(\n 'CONTEXT_SELECTION_REQUIRED',\n 'Approval execution requires a single matched feature. Specify feature selector first.'\n );\n }\n\n if (state.actionOptions.length === 0) {\n throw createCliError('NO_ACTION_OPTIONS', 'No action options to approve.');\n }\n\n const parsedApproval = parseApprovalReply(\n approval,\n state.actionOptions.map((o) => o.label)\n );\n parsedLabel = parsedApproval?.label ?? null;\n if (!parsedLabel) {\n throw createCliError(\n 'INVALID_APPROVAL',\n 'Invalid approval reply. Include a valid label token (e.g. `A`, `A OK`, `A proceed`, `A 진행해`).'\n );\n }\n\n const selected = state.actionOptions.find((o) => o.label === parsedLabel);\n if (!selected) {\n throw createCliError(\n 'INVALID_APPROVAL',\n `Unknown label \"${parsedLabel}\". Valid labels: ${listLabels(state.actionOptions)}`\n );\n }\n\n // Re-check right before execution/selection to avoid stale context approvals.\n const freshState = await resolveContextState(config, featureName, selectionOptions);\n if (freshState.contextVersion !== state.contextVersion) {\n throw createCliError(\n 'CONTEXT_STALE',\n 'Context changed since approval was requested. Run `context` again and re-approve.'\n );\n }\n\n const freshSelected = freshState.actionOptions.find(\n (o) => o.label === parsedLabel\n );\n if (!freshSelected) {\n throw createCliError(\n 'ACTION_NOT_AVAILABLE',\n `Approved label \"${parsedLabel}\" is no longer available. Run \\`context\\` again.`\n );\n }\n\n if (!freshState.matchedFeature || !freshState.contextVersion) {\n throw createCliError(\n 'CONTEXT_STALE',\n 'Context changed since approval was requested. Run `context` again and re-approve.'\n );\n }\n\n const selectedAction = freshSelected.action;\n if (selectedAction.category === 'user_request_replan') {\n const requestText = parsedApproval?.requestText?.trim();\n if (!requestText) {\n throw createCliError(\n 'INVALID_APPROVAL',\n tr(lang, 'cli', 'cliError.invalidApproval.userRequestRequired', {\n label: parsedLabel,\n example: `${parsedLabel}, <your request>`,\n })\n );\n }\n userRequest = requestText;\n }\n const executeRequiresTicket = !!selectedAction.requiresUserCheck;\n const actionHash = toApprovalActionHash({\n label: freshSelected.label,\n action: freshSelected.action,\n });\n const featureRef = freshState.matchedFeature.folderName;\n\n if (!options.execute) {\n const ticket = executeRequiresTicket\n ? await issueApprovalTicket(config, {\n contextVersion: freshState.contextVersion,\n actionHash,\n label: parsedLabel,\n featureRef,\n })\n : null;\n if (jsonMode) {\n console.log(\n JSON.stringify(\n {\n status: 'approved_selected',\n reasonCode: 'APPROVED_SELECTED',\n feature: freshState.matchedFeature?.folderName ?? null,\n label: parsedLabel,\n action: selectedAction,\n userRequest,\n contextVersion: freshState.contextVersion,\n executable: selectedAction.type === 'command',\n executeRequiresTicket,\n oneApprovalPerAction: true,\n approvalTicket: ticket\n ? {\n token: ticket.token,\n sessionId: ticket.sessionId,\n label: ticket.label,\n contextVersion: ticket.contextVersion,\n actionHash: ticket.actionHash,\n expiresAt: ticket.expiresAt,\n oneTime: true,\n }\n : undefined,\n },\n null,\n 2\n )\n );\n return;\n }\n\n console.log();\n console.log(chalk.green(`✅ Approved option: ${parsedLabel}`));\n console.log(chalk.gray(` - Action: ${freshSelected.detail}`));\n if (userRequest) {\n console.log(chalk.gray(` - User request: ${userRequest}`));\n }\n if (selectedAction.type === 'command') {\n const selectedComponent = selectionOptions.component || '';\n let executeCommand = buildApprovalCommand(\n freshState,\n featureName,\n selectedComponent,\n true\n ).replace('<LABEL>', parsedLabel);\n if (ticket) {\n executeCommand = executeCommand.replace(\n '[--ticket <TICKET>]',\n `--ticket ${ticket.token}`\n );\n console.log(chalk.gray(` - Ticket: ${ticket.token} (expires: ${ticket.expiresAt})`));\n } else {\n executeCommand = executeCommand.replace(' [--ticket <TICKET>]', '');\n }\n console.log(chalk.gray(` - Run with: ${executeCommand}`));\n } else {\n console.log(chalk.gray(' - Instruction-only action (no command execution).'));\n }\n console.log();\n return;\n }\n\n if (!ticketToken) {\n if (executeRequiresTicket) {\n throw createCliError(\n 'APPROVAL_REQUIRED',\n '`--execute` requires `--ticket <token>` for check-required options. Run `context --approve <reply>` first.'\n );\n }\n }\n\n if (executeRequiresTicket) {\n await consumeApprovalTicket(config, ticketToken, {\n contextVersion: freshState.contextVersion,\n actionHash,\n label: parsedLabel,\n featureRef,\n });\n }\n\n if (selectedAction.type !== 'command') {\n if (options.executeStrict) {\n throw createCliError(\n 'EXECUTION_NOT_COMMAND',\n `Approved label \"${parsedLabel}\" is instruction-only. Re-run without \\`--execute\\` or pick a command option.`\n );\n }\n if (jsonMode) {\n console.log(\n JSON.stringify(\n {\n status: 'approved_instruction',\n reasonCode: 'INSTRUCTION_ONLY',\n feature: freshState.matchedFeature?.folderName ?? null,\n label: parsedLabel,\n action: selectedAction,\n userRequest,\n contextVersion: freshState.contextVersion,\n executed: false,\n reason: 'instruction_only',\n },\n null,\n 2\n )\n );\n return;\n }\n\n console.log();\n console.log(chalk.yellow(`⚠️ Approved label ${parsedLabel} is instruction-only.`));\n if (userRequest) {\n console.log(chalk.gray(` User request: ${userRequest}`));\n }\n console.log(chalk.gray(` ${selectedAction.message}`));\n console.log();\n return;\n }\n\n if (!jsonMode) {\n console.log();\n console.log(chalk.blue(`▶ Executing option ${parsedLabel}...`));\n console.log(chalk.gray(` ${selectedAction.cmd}`));\n console.log();\n }\n\n try {\n const lockPath = getCommandExecutionLockPath(selectedAction, config);\n const execResult = await withFileLock(\n lockPath,\n async () =>\n executeCommandAction(\n selectedAction.cmd,\n jsonMode,\n selectedAction.cwd\n ),\n { owner: `context-execute:${selectedAction.scope}` }\n );\n if (jsonMode) {\n console.log(\n JSON.stringify(\n {\n status: 'approved_executed',\n reasonCode: 'APPROVED_EXECUTED',\n feature: freshState.matchedFeature?.folderName ?? null,\n label: parsedLabel,\n action: selectedAction,\n userRequest,\n contextVersion: freshState.contextVersion,\n executed: true,\n stdout: execResult.stdout?.trim() || undefined,\n stderr: execResult.stderr?.trim() || undefined,\n },\n null,\n 2\n )\n );\n return;\n }\n console.log(chalk.green(`✅ Executed option ${parsedLabel}.`));\n console.log();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw createCliError(\n 'EXECUTION_FAILED',\n `Failed to execute option ${parsedLabel}: ${message}`\n );\n }\n}\n\nfunction printChecklist(f: FeatureContext, stepDefinitions: StepDefinition[]): void {\n const checklistSteps = [...stepDefinitions].sort((a, b) => a.step - b.step);\n\n checklistSteps.forEach((definition) => {\n const done = definition.checklist.done(f);\n const detail = definition.checklist.detail?.(f) ?? '';\n const mark = done ? chalk.green('✅') : chalk.gray('◯');\n const label =\n definition.step === f.currentStep\n ? chalk.bold(definition.name)\n : definition.name;\n console.log(` ${mark} ${definition.step}. ${label} ${detail}`);\n });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport { getConfig } from '../utils/config.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport { scanFeatures, FeatureContext } from '../utils/context.js';\nimport { getLocalDateString } from '../utils/date.js';\nimport { applyReplacements } from '../utils/template.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\n\ntype IssueLevel = 'error' | 'warn' | 'info';\n\ntype DoctorIssue = {\n level: IssueLevel;\n code: string;\n message: string;\n path?: string;\n};\n\ninterface DoctorOptions {\n json?: boolean;\n strict?: boolean;\n fix?: boolean;\n dryRun?: boolean;\n decisionsPlaceholders?: string;\n}\n\ninterface DoctorFixEntry {\n path: string;\n changes: string[];\n}\n\ninterface DoctorFixResult {\n enabled: boolean;\n dryRun: boolean;\n changedFiles: number;\n entries: DoctorFixEntry[];\n}\n\nconst FIXABLE_ISSUE_CODES = new Set([\n 'placeholder_left',\n 'spec_status_unset',\n 'plan_status_unset',\n 'tasks_doc_status_missing',\n 'tasks_doc_status_unset',\n]);\n\nfunction formatPath(cwd: string, p: string | undefined): string {\n if (!p) return '';\n return path.isAbsolute(p) ? path.relative(cwd, p) : p;\n}\n\nfunction detectPlaceholders(content: string): string[] {\n const patterns: Array<{ key: string; re: RegExp }> = [\n { key: '{{projectName}}', re: /\\{\\{projectName\\}\\}/g },\n { key: '{{date}}', re: /\\{\\{date\\}\\}/g },\n { key: '{{featurePath}}', re: /\\{\\{featurePath\\}\\}/g },\n { key: '{{description}}', re: /\\{\\{description\\}\\}/g },\n { key: '{기능명}', re: /\\{기능명\\}/g },\n { key: '{번호}', re: /\\{번호\\}/g },\n { key: '{이슈번호}', re: /\\{이슈번호\\}/g },\n { key: '{feature-name}', re: /\\{feature-name\\}/g },\n { key: '{number}', re: /\\{number\\}/g },\n { key: '{issue-number}', re: /\\{issue-number\\}/g },\n { key: '{component}', re: /\\{component\\}/g },\n { key: '{be|fe}', re: /\\{be\\|fe\\}/g },\n { key: '{Story Title}', re: /\\{Story Title\\}/g },\n { key: '{user type}', re: /\\{user type\\}/g },\n { key: '{desired action}', re: /\\{desired action\\}/g },\n { key: '{reason/value}', re: /\\{reason\\/value\\}/g },\n { key: '{Requirement Title}', re: /\\{Requirement Title\\}/g },\n { key: '{Phase Name}', re: /\\{Phase Name\\}/g },\n { key: '{Task Title}', re: /\\{Task Title\\}/g },\n { key: '{Decision Title}', re: /\\{Decision Title\\}/g },\n { key: '{test command you ran}', re: /\\{test command you ran\\}/g },\n { key: '{PASS/FAIL summary}', re: /\\{PASS\\/FAIL summary\\}/g },\n { key: '{스토리 제목}', re: /\\{스토리 제목\\}/g },\n { key: '{사용자 유형}', re: /\\{사용자 유형\\}/g },\n { key: '{원하는 것}', re: /\\{원하는 것\\}/g },\n { key: '{이유/가치}', re: /\\{이유\\/가치\\}/g },\n { key: '{요구사항 제목}', re: /\\{요구사항 제목\\}/g },\n { key: '{단계명}', re: /\\{단계명\\}/g },\n { key: '{태스크 제목}', re: /\\{태스크 제목\\}/g },\n { key: '{실행한 테스트 명령어}', re: /\\{실행한 테스트 명령어\\}/g },\n { key: '{PASS/FAIL 요약}', re: /\\{PASS\\/FAIL 요약\\}/g },\n { key: 'YYYY-MM-DD', re: /\\bYYYY-MM-DD\\b/g },\n ];\n\n const hits = new Set<string>();\n for (const { key, re } of patterns) {\n if (re.test(content)) hits.add(key);\n }\n\n const genericBraceTokens = content.match(\n /\\{[A-Za-z가-힣][A-Za-z0-9가-힣 _/\\-|]{1,40}\\}/g\n );\n if (genericBraceTokens && genericBraceTokens.length > 0) {\n hits.add('{...}');\n }\n\n return [...hits];\n}\n\nfunction normalizeStatusLine(\n content: string,\n keys: string[],\n target: 'Draft' | 'Review' | 'Approved'\n): { content: string; changed: boolean } {\n const escaped = keys.map((key) => key.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n const re = new RegExp(\n `^(\\\\s*-\\\\s*\\\\*\\\\*(?:${escaped.join('|')})\\\\*\\\\*\\\\s*:\\\\s*)(.*)$`,\n 'm'\n );\n const match = content.match(re);\n if (!match) return { content, changed: false };\n const current = (match[2] || '').trim();\n if (/^(Draft|Review|Approved)$/i.test(current)) {\n return { content, changed: false };\n }\n return {\n content: content.replace(re, `$1${target}`),\n changed: true,\n };\n}\n\nfunction ensureTasksDocStatus(\n content: string,\n lang: 'ko' | 'en'\n): { content: string; changed: boolean } {\n const normalized = normalizeStatusLine(content, ['Doc Status', '문서 상태'], 'Review');\n if (normalized.changed) return normalized;\n\n const hasField = /^\\s*-\\s*\\*\\*(Doc Status|문서 상태)\\*\\*\\s*:/m.test(content);\n if (hasField) return { content, changed: false };\n\n const line =\n lang === 'ko' ? '- **문서 상태**: Review' : '- **Doc Status**: Review';\n const lines = content.split('\\n');\n const headingIdx = lines.findIndex((lineText) =>\n /^\\s*##\\s+(GitHub Issue|Local Tracking|로컬 추적 정보)\\s*$/.test(lineText)\n );\n\n if (headingIdx >= 0) {\n let insertAt = headingIdx + 1;\n if (lines[insertAt] !== undefined && lines[insertAt].trim() === '') {\n insertAt += 1;\n }\n lines.splice(insertAt, 0, line);\n return { content: lines.join('\\n'), changed: true };\n }\n\n const fallbackHeading = lang === 'ko' ? '## 로컬 추적 정보' : '## Local Tracking';\n const next = `${content.trimEnd()}\\n\\n${fallbackHeading}\\n\\n${line}\\n`;\n return { content: next, changed: true };\n}\n\nfunction applyPlaceholderFixes(\n content: string,\n context: {\n projectName?: string;\n featureName: string;\n featurePath: string;\n repoType: string;\n featureNumber: string;\n },\n lang: 'ko' | 'en'\n): { content: string; changed: boolean } {\n const date = getLocalDateString();\n const projectName = context.projectName || 'project';\n const repoName =\n context.repoType === 'single'\n ? projectName\n : `${projectName}-${context.repoType}`;\n const replacements: Record<string, string> = {\n '{{projectName}}': projectName,\n '{{projectName}}-{component}': repoName,\n '{{projectName}}-{be|fe}': repoName,\n '{{date}}': date,\n '{{featurePath}}': context.featurePath,\n '{{description}}': `${context.featureName} feature`,\n '{feature-name}': context.featureName,\n '{기능명}': context.featureName,\n '{number}': context.featureNumber,\n '{번호}': context.featureNumber,\n '{issue-number}': '-',\n '{이슈번호}': '-',\n '{component}': context.repoType === 'single' ? '' : context.repoType,\n '{be|fe}': context.repoType === 'single' ? '' : context.repoType,\n 'YYYY-MM-DD': date,\n '{Story Title}': `${context.featureName} user flow`,\n '{user type}': 'developer',\n '{desired action}': `complete ${context.featureName}`,\n '{reason/value}': 'deliver value quickly',\n '{Requirement Title}': `${context.featureName} requirement`,\n '{Phase Name}': 'Implementation',\n '{Task Title}': `${context.featureName} task`,\n '{Decision Title}': `${context.featureName} design decision`,\n '{test command you ran}': 'npm test',\n '{PASS/FAIL summary}': 'PENDING',\n '{스토리 제목}': `${context.featureName} 사용자 흐름`,\n '{사용자 유형}': '개발자',\n '{원하는 것}': `${context.featureName} 완료`,\n '{이유/가치}': '빠른 가치 전달',\n '{요구사항 제목}': `${context.featureName} 요구사항`,\n '{단계명}': '구현',\n '{태스크 제목}': `${context.featureName} 태스크`,\n '{실행한 테스트 명령어}': 'npm test',\n '{PASS/FAIL 요약}': 'PENDING',\n };\n\n let next = applyReplacements(content, replacements);\n next = next.replace(/\\{\\d{4}-\\d{2}-\\d{2}\\}/g, date);\n\n if (lang === 'en') {\n next = next.replace(/\\s+\\(\\s*Why is this feature needed\\? What problem does it solve\\?\\)/g, '');\n } else {\n next = next.replace(/\\s+\\(\\s*이 기능이 왜 필요한지, 어떤 문제를 해결하는지\\)/g, '');\n }\n\n return { content: next, changed: next !== content };\n}\n\nasync function applyDoctorFixes(\n config: { docsDir: string; projectType: 'single' | 'multi'; lang: 'ko' | 'en'; projectName?: string },\n cwd: string,\n features: FeatureContext[],\n dryRun: boolean\n): Promise<DoctorFixResult> {\n const entries: DoctorFixEntry[] = [];\n\n for (const f of features) {\n const featureNumber = f.id ? f.id.replace(/^F/, '') : '000';\n const placeholderContext = {\n projectName: config.projectName,\n featureName: f.slug,\n featurePath: f.docs.featurePathFromDocs || path.relative(config.docsDir, f.path),\n repoType: f.type,\n featureNumber,\n };\n\n const files: Array<'spec.md' | 'plan.md' | 'tasks.md'> = [\n 'spec.md',\n 'plan.md',\n 'tasks.md',\n ];\n\n for (const file of files) {\n const fullPath = path.join(f.path, file);\n if (!(await fs.pathExists(fullPath))) continue;\n\n const original = await fs.readFile(fullPath, 'utf-8');\n let next = original;\n const changes: string[] = [];\n\n const placeholderFix = applyPlaceholderFixes(next, placeholderContext, config.lang);\n next = placeholderFix.content;\n if (placeholderFix.changed) {\n changes.push('replaced placeholders');\n }\n\n if (file === 'spec.md' || file === 'plan.md') {\n const normalized = normalizeStatusLine(next, ['Status', '상태'], 'Review');\n next = normalized.content;\n if (normalized.changed) {\n changes.push('normalized document status to Review');\n }\n }\n\n if (file === 'tasks.md') {\n const ensured = ensureTasksDocStatus(next, config.lang);\n next = ensured.content;\n if (ensured.changed) {\n changes.push('ensured Doc Status field is Review');\n }\n }\n\n if (next === original) continue;\n\n if (!dryRun) {\n await fs.writeFile(fullPath, next, 'utf-8');\n }\n\n entries.push({\n path: formatPath(cwd, fullPath),\n changes,\n });\n }\n }\n\n return {\n enabled: true,\n dryRun,\n changedFiles: entries.length,\n entries,\n };\n}\n\nasync function checkDocsStructure(\n config: { docsDir: string; projectType: 'single' | 'multi'; lang: 'ko' | 'en' },\n cwd: string\n): Promise<DoctorIssue[]> {\n const issues: DoctorIssue[] = [];\n const requiredDirs = ['agents', 'features', 'prd', 'designs', 'ideas'];\n\n for (const dir of requiredDirs) {\n const p = path.join(config.docsDir, dir);\n if (!(await fs.pathExists(p))) {\n issues.push({\n level: 'error',\n code: 'missing_dir',\n message: tr(config.lang, 'cli', 'doctor.issue.missingRequiredDir', { dir }),\n path: formatPath(cwd, p),\n });\n }\n }\n\n const configPath = path.join(config.docsDir, '.lee-spec-kit.json');\n if (!(await fs.pathExists(configPath))) {\n issues.push({\n level: 'warn',\n code: 'missing_config',\n message: tr(config.lang, 'cli', 'doctor.issue.missingConfig'),\n path: formatPath(cwd, configPath),\n });\n }\n\n return issues;\n}\n\nasync function checkFeatures(\n config: { docsDir: string; projectType: 'single' | 'multi'; lang: 'ko' | 'en' },\n cwd: string,\n features: FeatureContext[],\n decisionsPlaceholderMode: 'off' | 'info' | 'warn'\n): Promise<DoctorIssue[]> {\n const issues: DoctorIssue[] = [];\n\n if (features.length === 0) {\n issues.push({\n level: 'warn',\n code: 'no_features',\n message: tr(config.lang, 'cli', 'doctor.issue.noFeatures'),\n });\n return issues;\n }\n\n const idMap = new Map<string, string[]>();\n for (const f of features) {\n const rel = f.docs.featurePathFromDocs || path.relative(config.docsDir, f.path);\n const id = f.id || 'UNKNOWN';\n if (!idMap.has(id)) idMap.set(id, []);\n idMap.get(id)!.push(rel);\n\n const isInitialTemplateState =\n f.docs.specExists &&\n f.docs.planExists &&\n f.docs.tasksExists &&\n !f.specStatus &&\n !f.planStatus &&\n f.tasks.total === 0 &&\n (!f.docs.tasksDocStatusFieldExists ||\n !f.tasksDocStatus ||\n f.tasksDocStatus === 'Draft');\n\n // placeholder 잔존 여부는 \"feature 폴더 내부\"만 검사 (agents/prd 등은 템플릿 성격이라 제외)\n if (!isInitialTemplateState) {\n const featureDocs = ['spec.md', 'plan.md', 'tasks.md'];\n for (const file of featureDocs) {\n const p = path.join(f.path, file);\n if (!(await fs.pathExists(p))) continue;\n const content = await fs.readFile(p, 'utf-8');\n const placeholders = detectPlaceholders(content);\n if (placeholders.length === 0) continue;\n issues.push({\n level: 'warn',\n code: 'placeholder_left',\n message: tr(config.lang, 'cli', 'doctor.issue.placeholdersLeft', {\n placeholders: placeholders.join(', '),\n }),\n path: formatPath(cwd, p),\n });\n }\n\n if (decisionsPlaceholderMode !== 'off') {\n const decisionsPath = path.join(f.path, 'decisions.md');\n if (await fs.pathExists(decisionsPath)) {\n const content = await fs.readFile(decisionsPath, 'utf-8');\n const placeholders = detectPlaceholders(content);\n if (placeholders.length > 0) {\n issues.push({\n level: decisionsPlaceholderMode,\n code: 'placeholder_left_decisions',\n message: tr(config.lang, 'cli', 'doctor.issue.placeholdersLeft', {\n placeholders: placeholders.join(', '),\n }),\n path: formatPath(cwd, decisionsPath),\n });\n }\n }\n }\n }\n\n if (!f.docs.specExists) {\n issues.push({\n level: 'warn',\n code: 'missing_spec',\n message: tr(config.lang, 'cli', 'doctor.issue.missingSpec'),\n path: formatPath(cwd, f.path),\n });\n } else if (!f.specStatus && !isInitialTemplateState) {\n issues.push({\n level: 'warn',\n code: 'spec_status_unset',\n message: tr(config.lang, 'cli', 'doctor.issue.specStatusUnset'),\n path: formatPath(cwd, path.join(f.path, 'spec.md')),\n });\n }\n\n if (f.docs.planExists && !f.planStatus && !isInitialTemplateState) {\n issues.push({\n level: 'warn',\n code: 'plan_status_unset',\n message: tr(config.lang, 'cli', 'doctor.issue.planStatusUnset'),\n path: formatPath(cwd, path.join(f.path, 'plan.md')),\n });\n }\n\n if (f.docs.tasksExists && f.tasks.total === 0 && !isInitialTemplateState) {\n issues.push({\n level: 'warn',\n code: 'tasks_empty',\n message: tr(config.lang, 'cli', 'doctor.issue.tasksEmpty'),\n path: formatPath(cwd, path.join(f.path, 'tasks.md')),\n });\n }\n\n if (\n f.docs.tasksExists &&\n !f.docs.tasksDocStatusFieldExists &&\n !isInitialTemplateState\n ) {\n issues.push({\n level: 'warn',\n code: 'tasks_doc_status_missing',\n message: tr(config.lang, 'cli', 'doctor.issue.tasksDocStatusMissing'),\n path: formatPath(cwd, path.join(f.path, 'tasks.md')),\n });\n }\n\n if (\n f.docs.tasksExists &&\n f.docs.tasksDocStatusFieldExists &&\n !f.tasksDocStatus &&\n !isInitialTemplateState\n ) {\n issues.push({\n level: 'warn',\n code: 'tasks_doc_status_unset',\n message: tr(config.lang, 'cli', 'doctor.issue.tasksDocStatusUnset'),\n path: formatPath(cwd, path.join(f.path, 'tasks.md')),\n });\n }\n }\n\n const duplicates = [...idMap.entries()].filter(\n ([id, paths]) => id !== 'UNKNOWN' && paths.length > 1\n );\n for (const [id, paths] of duplicates) {\n issues.push({\n level: 'warn',\n code: 'duplicate_feature_id',\n message: tr(config.lang, 'cli', 'doctor.issue.duplicateFeatureId', {\n id,\n count: String(paths.length),\n }),\n path: formatPath(cwd, paths[0]),\n });\n }\n\n const unknowns = idMap.get('UNKNOWN') || [];\n for (const p of unknowns) {\n issues.push({\n level: 'warn',\n code: 'missing_feature_id',\n message: tr(config.lang, 'cli', 'doctor.issue.missingFeatureId'),\n path: formatPath(cwd, path.join(config.docsDir, p)),\n });\n }\n\n return issues;\n}\n\nfunction hasFixableIssues(issues: DoctorIssue[]): boolean {\n return issues.some((issue) => FIXABLE_ISSUE_CODES.has(issue.code));\n}\n\nexport function doctorCommand(program: Command): void {\n program\n .command('doctor')\n .description('Validate docs structure and feature metadata')\n .option('--json', 'Output in JSON format for agents')\n .option('--fix', 'Automatically apply safe fixes for common docs issues')\n .option('--dry-run', 'Show potential fixes without writing files (requires --fix)')\n .option(\n '--decisions-placeholders <mode>',\n 'decisions.md placeholder severity: off | info | warn (default: info)',\n 'info'\n )\n .option('-s, --strict', 'Exit with non-zero code when issues are found')\n .action(async (options: DoctorOptions) => {\n try {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n\n if (!config) {\n throw createCliError(\n 'CONFIG_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.configNotFound')\n );\n }\n\n if (options.dryRun && !options.fix) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--dry-run` requires `--fix`.'\n );\n }\n\n const rawDecisionsMode = (options.decisionsPlaceholders || 'info')\n .trim()\n .toLowerCase();\n if (\n rawDecisionsMode !== 'off' &&\n rawDecisionsMode !== 'info' &&\n rawDecisionsMode !== 'warn'\n ) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--decisions-placeholders` must be one of: off, info, warn.'\n );\n }\n const decisionsPlaceholderMode = rawDecisionsMode as\n | 'off'\n | 'info'\n | 'warn';\n\n const { docsDir, projectType, lang } = config;\n let scan = await scanFeatures(config);\n let features = scan.features;\n let branches = scan.branches;\n let warnings = scan.warnings;\n\n let issues: DoctorIssue[] = [];\n issues.push(...(await checkDocsStructure({ docsDir, projectType, lang }, cwd)));\n issues.push(\n ...(await checkFeatures(\n { docsDir, projectType, lang },\n cwd,\n features,\n decisionsPlaceholderMode\n ))\n );\n\n let fixResult: DoctorFixResult | null = null;\n if (options.fix) {\n if (hasFixableIssues(issues)) {\n fixResult = await applyDoctorFixes(\n { docsDir, projectType, lang, projectName: config.projectName },\n cwd,\n features,\n !!options.dryRun\n );\n } else {\n fixResult = {\n enabled: true,\n dryRun: !!options.dryRun,\n changedFiles: 0,\n entries: [],\n };\n }\n\n if (!options.dryRun && fixResult.changedFiles > 0) {\n scan = await scanFeatures(config);\n features = scan.features;\n branches = scan.branches;\n warnings = scan.warnings;\n issues = [];\n issues.push(...(await checkDocsStructure({ docsDir, projectType, lang }, cwd)));\n issues.push(\n ...(await checkFeatures(\n { docsDir, projectType, lang },\n cwd,\n features,\n decisionsPlaceholderMode\n ))\n );\n }\n }\n\n const nonInfoIssues = issues.filter((i) => i.level !== 'info');\n const hasIssues = nonInfoIssues.length > 0;\n const hasErrors = issues.some((i) => i.level === 'error');\n const hasWarns = issues.some((i) => i.level === 'warn');\n const exitCode = options.strict && hasIssues ? 1 : 0;\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: hasErrors ? 'error' : hasWarns ? 'warn' : 'ok',\n meta: { docsDir, projectType, lang },\n branches,\n warnings,\n counts: {\n features: features.length,\n issues: nonInfoIssues.length,\n errors: issues.filter((i) => i.level === 'error').length,\n warnings: issues.filter((i) => i.level === 'warn').length,\n infos: issues.filter((i) => i.level === 'info').length,\n },\n fixes: fixResult\n ? {\n enabled: fixResult.enabled,\n dryRun: fixResult.dryRun,\n changedFiles: fixResult.changedFiles,\n entries: fixResult.entries,\n }\n : undefined,\n issues,\n },\n null,\n 2\n )\n );\n process.exitCode = exitCode;\n return;\n }\n\n console.log();\n console.log(chalk.bold(tr(lang, 'cli', 'doctor.title')));\n console.log(chalk.gray(`- Docs: ${path.relative(cwd, docsDir)}`));\n console.log(chalk.gray(`- Type: ${projectType}`));\n console.log(chalk.gray(`- Lang: ${lang}`));\n console.log();\n\n if (warnings.length > 0) {\n console.log(chalk.yellow(tr(lang, 'cli', 'doctor.envWarnings')));\n warnings.forEach((w) => console.log(chalk.yellow(` - ${w}`)));\n console.log();\n }\n\n if (fixResult) {\n const label = fixResult.dryRun ? '🧪 Doctor Fix (dry-run)' : '🛠️ Doctor Fix';\n console.log(chalk.blue(`${label}: ${fixResult.changedFiles} file(s)`));\n if (fixResult.changedFiles > 0) {\n fixResult.entries.forEach((entry) =>\n console.log(chalk.gray(` - ${entry.path}: ${entry.changes.join(', ')}`))\n );\n }\n console.log();\n }\n\n const errors = issues.filter((i) => i.level === 'error');\n const warns = issues.filter((i) => i.level === 'warn');\n const infos = issues.filter((i) => i.level === 'info');\n\n if (!hasIssues && infos.length === 0) {\n console.log(chalk.green(tr(lang, 'cli', 'doctor.noIssues')));\n console.log();\n return;\n }\n\n if (!hasIssues && infos.length > 0) {\n console.log(chalk.green(tr(lang, 'cli', 'doctor.noIssues')));\n console.log();\n }\n\n if (errors.length > 0) {\n console.log(\n chalk.red(\n `❌ ${tr(lang, 'cli', 'doctor.errorsTitle')} (${errors.length})`\n )\n );\n errors.forEach((i) =>\n console.log(chalk.red(` - ${i.message}${i.path ? ` (${i.path})` : ''}`))\n );\n console.log();\n }\n\n if (warns.length > 0) {\n console.log(\n chalk.yellow(\n `⚠️ ${tr(lang, 'cli', 'doctor.warningsTitle')} (${warns.length})`\n )\n );\n warns.forEach((i) =>\n console.log(\n chalk.yellow(` - ${i.message}${i.path ? ` (${i.path})` : ''}`)\n )\n );\n console.log();\n }\n\n if (infos.length > 0) {\n console.log(chalk.blue(`ℹ️ Info (${infos.length})`));\n infos.forEach((i) =>\n console.log(chalk.blue(` - ${i.message}${i.path ? ` (${i.path})` : ''}`))\n );\n console.log();\n }\n\n console.log(\n chalk.gray(\n tr(lang, 'cli', 'doctor.tipJson', {\n strictFlag: options.strict ? ' --strict' : '',\n })\n )\n );\n console.log();\n\n process.exitCode = exitCode;\n return;\n } catch (error) {\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n const cliError = toCliError(error, 'UNKNOWN_ERROR');\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'error',\n reasonCode: cliError.code,\n error: cliError.message,\n suggestions,\n },\n null,\n 2\n )\n );\n } else {\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n }\n process.exitCode = 1;\n return;\n }\n });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport path from 'path';\nimport { getConfig } from '../utils/config.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\nimport {\n ContextSelectionOptions,\n resolveContextSelection,\n toReasonCode,\n} from '../utils/context-selection.js';\nimport { resolveComponentOption } from '../utils/context/component-option.js';\n\ninterface ViewOptions extends ContextSelectionOptions {\n json?: boolean;\n}\n\nexport function viewCommand(program: Command): void {\n program\n .command('view [feature-name]')\n .description('Show workflow dashboard for features')\n .option('--json', 'Output in JSON format for agents')\n .option('--component <component>', 'Component name for multi projects')\n .option('--all', 'Include completed features when auto-detecting')\n .option('--done', 'Show completed (workflow-done) features only')\n .action(async (featureName: string | undefined, options: ViewOptions) => {\n try {\n await runView(featureName, options);\n } catch (error) {\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'error',\n reasonCode: cliError.code,\n error: cliError.message,\n suggestions,\n })\n );\n } else {\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n }\n process.exitCode = 1;\n return;\n }\n });\n}\n\nasync function runView(\n featureName: string | undefined,\n options: ViewOptions\n): Promise<void> {\n const cwd = process.cwd();\n const config = await getConfig(cwd);\n if (!config) {\n throw createCliError(\n 'CONFIG_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.configNotFound')\n );\n }\n\n const selectedComponent = resolveComponentOption(options.component);\n const state = await resolveContextSelection(config, featureName, {\n component: selectedComponent,\n all: options.all,\n done: options.done,\n });\n\n if (options.json) {\n const payload = {\n status: state.status,\n reasonCode: toReasonCode(state.status),\n selectionMode: state.selectionMode,\n selectionFallback: state.selectionFallback,\n counts: {\n features: state.features.length,\n open: state.openFeatures.length,\n inProgress: state.inProgressFeatures.length,\n readyToClose: state.readyToCloseFeatures.length,\n done: state.doneFeatures.length,\n },\n branches: state.branches,\n warnings: state.warnings,\n matchedFeature: state.matchedFeature,\n targetFeatures: state.targetFeatures,\n actionOptions: state.actionOptions,\n contextVersion: state.contextVersion,\n };\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log();\n console.log(chalk.bold('📊 Workflow View'));\n console.log(chalk.gray(`- Docs: ${path.relative(cwd, config.docsDir)}`));\n console.log(\n chalk.gray(\n `- Features: ${state.features.length} (open ${state.openFeatures.length} / done ${state.doneFeatures.length})`\n )\n );\n console.log(\n chalk.gray(\n `- In Progress: ${state.inProgressFeatures.length}, Ready To Close: ${state.readyToCloseFeatures.length}`\n )\n );\n if (state.warnings.length > 0) {\n console.log();\n console.log(chalk.yellow('⚠️ Environment warnings:'));\n for (const warning of state.warnings) {\n console.log(chalk.yellow(` - ${warning}`));\n }\n }\n\n if (state.features.length === 0) {\n console.log();\n console.log(chalk.yellow('No features found.'));\n console.log(chalk.gray('Try: npx lee-spec-kit feature <name>'));\n console.log();\n return;\n }\n\n if (!state.matchedFeature) {\n console.log();\n console.log(chalk.blue(`Selection: ${state.status} (${toReasonCode(state.status)})`));\n const rows =\n state.targetFeatures.length > 0 ? state.targetFeatures : state.features;\n for (const f of rows) {\n const statusText = f.completion.workflowDone\n ? chalk.green('WORKFLOW_DONE')\n : f.completion.implementationDone\n ? chalk.cyan('DONE')\n : chalk.yellow('IN_PROGRESS');\n console.log(\n `- ${f.folderName} (${f.tasks.done}/${f.tasks.total}) ${statusText} step:${f.currentStep}`\n );\n console.log(chalk.gray(` next: ${f.nextAction}`));\n }\n console.log();\n const selectorTip =\n config.projectType === 'multi'\n ? selectedComponent\n ? `Tip: npx lee-spec-kit view <slug|F001|F001-slug> --component ${selectedComponent}`\n : 'Tip: npx lee-spec-kit view <slug|F001|F001-slug> [--component <component>]'\n : 'Tip: npx lee-spec-kit view <slug|F001|F001-slug>';\n console.log(\n chalk.gray(selectorTip)\n );\n console.log();\n return;\n }\n\n const f = state.matchedFeature;\n const completion = `${f.tasks.done}/${f.tasks.total}`;\n const stateLabel = f.completion.workflowDone\n ? 'WORKFLOW_DONE'\n : f.completion.implementationDone\n ? 'DONE'\n : 'IN_PROGRESS';\n\n console.log();\n console.log(chalk.blue(`Feature: ${chalk.bold(f.folderName)}`));\n console.log(`- State: ${stateLabel}`);\n console.log(`- Progress: ${completion}`);\n console.log(`- Step: ${f.currentStep}`);\n const nextSummary =\n state.actionOptions.length > 0 ? state.actionOptions[0].detail : f.nextAction;\n console.log(`- Next: ${nextSummary}`);\n\n if (state.actionOptions.length > 0) {\n console.log();\n console.log(chalk.green('Atomic options:'));\n for (const option of state.actionOptions) {\n const lang = config.lang ?? DEFAULT_LANG;\n const requiresCheck = option.action.requiresUserCheck\n ? tr(lang, 'cli', 'context.checkRequired')\n : '';\n console.log(` ${option.label}. ${requiresCheck}${option.detail}`);\n }\n console.log(\n chalk.gray(\n `Approve with: npx lee-spec-kit context ${f.folderName} --approve <LABEL>`\n )\n );\n }\n console.log();\n}\n","import { spawnSync } from 'child_process';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { getConfig } from '../utils/config.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\nimport {\n ContextSelectionOptions,\n resolveContextSelection,\n toReasonCode,\n} from '../utils/context-selection.js';\nimport { resolveComponentOption } from '../utils/context/component-option.js';\n\ninterface FlowOptions extends ContextSelectionOptions {\n json?: boolean;\n approve?: string;\n execute?: boolean;\n executeStrict?: boolean;\n strict?: boolean;\n}\n\ninterface CliRunResult {\n code: number;\n stdout: string;\n stderr: string;\n}\n\nfunction runSelfCli(args: string[]): CliRunResult {\n const entry = process.argv[1];\n const result = spawnSync(process.execPath, [entry, '--no-banner', ...args], {\n cwd: process.cwd(),\n encoding: 'utf-8',\n env: {\n ...process.env,\n LEE_SPEC_KIT_NO_UPDATE_CHECK: '1',\n LEE_SPEC_KIT_NO_BANNER: '1',\n },\n });\n return {\n code: result.status ?? 1,\n stdout: result.stdout || '',\n stderr: result.stderr || '',\n };\n}\n\nfunction runSelfCliJson(args: string[], allowFailure = false): unknown {\n const result = runSelfCli([...args, '--json']);\n if (result.code !== 0 && !allowFailure) {\n const detail = result.stderr.trim() || result.stdout.trim() || args.join(' ');\n throw createCliError('EXECUTION_FAILED', `Flow sub-command failed: ${detail}`);\n }\n const text = result.stdout.trim();\n if (!text) return { status: 'empty' };\n try {\n return JSON.parse(text);\n } catch {\n if (allowFailure) {\n return { status: 'parse_error', raw: text };\n }\n throw createCliError(\n 'EXECUTION_FAILED',\n `Flow sub-command returned non-JSON output: ${args.join(' ')}`\n );\n }\n}\n\nfunction buildSelectionArgs(\n featureName: string | undefined,\n options: ContextSelectionOptions\n): string[] {\n const args: string[] = [];\n if (featureName) args.push(featureName);\n const component = (options.component || '').trim();\n if (component) args.push('--component', component);\n if (options.all) args.push('--all');\n if (options.done) args.push('--done');\n return args;\n}\n\nexport function flowCommand(program: Command): void {\n program\n .command('flow [feature-name]')\n .description('Run combined workflow checks (context + status + doctor)')\n .option('--json', 'Output in JSON format for agents')\n .option('--component <component>', 'Component name for multi projects')\n .option('--all', 'Include completed features when auto-detecting')\n .option('--done', 'Show completed (workflow-done) features only')\n .option(\n '--approve <reply>',\n 'Approve one labeled context option (examples: A, A OK, A proceed, A 진행해)'\n )\n .option('--execute', 'Execute approved option when it is a command')\n .option(\n '--execute-strict',\n 'With --execute, fail if approved option is instruction-only'\n )\n .option('--strict', 'Also run status --strict and doctor --strict')\n .action(async (featureName: string | undefined, options: FlowOptions) => {\n try {\n await runFlow(featureName, options);\n } catch (error) {\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'error',\n reasonCode: cliError.code,\n error: cliError.message,\n suggestions,\n })\n );\n } else {\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n }\n process.exitCode = 1;\n return;\n }\n });\n}\n\nasync function runFlow(\n featureName: string | undefined,\n options: FlowOptions\n): Promise<void> {\n const config = await getConfig(process.cwd());\n if (!config) {\n throw createCliError(\n 'CONFIG_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.configNotFound')\n );\n }\n\n if (options.executeStrict && !options.execute) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--execute-strict` requires `--execute`.'\n );\n }\n\n if (options.execute && !options.approve) {\n throw createCliError(\n 'APPROVAL_REQUIRED',\n '`--execute` requires `--approve <reply>`.'\n );\n }\n\n const selectedComponent = resolveComponentOption(options.component);\n const selectionOptions: ContextSelectionOptions = {\n component: selectedComponent,\n all: options.all,\n done: options.done,\n };\n const componentHint = selectedComponent\n ? ` --component ${selectedComponent}`\n : '';\n\n const before = await resolveContextSelection(config, featureName, selectionOptions);\n\n const contextArgs = ['context', ...buildSelectionArgs(featureName, selectionOptions)];\n let approvalResult: unknown = null;\n if (options.approve) {\n const approveArgs = [...contextArgs, '--approve', options.approve];\n const selected = runSelfCliJson(approveArgs, true);\n\n if (options.execute) {\n const selectedPayload = selected as\n | {\n status?: string;\n executeRequiresTicket?: boolean;\n approvalTicket?: { token?: string };\n }\n | undefined;\n const executeRequiresTicket = selectedPayload?.executeRequiresTicket === true;\n const ticket = selectedPayload?.approvalTicket?.token;\n if (selectedPayload?.status === 'approved_selected') {\n const executeArgs = [\n ...contextArgs,\n '--approve',\n options.approve,\n '--execute',\n ];\n if (executeRequiresTicket && ticket) {\n executeArgs.push('--ticket', ticket);\n }\n if (options.executeStrict) executeArgs.push('--execute-strict');\n approvalResult = runSelfCliJson(executeArgs, true);\n } else {\n approvalResult = selected;\n }\n } else {\n approvalResult = selected;\n }\n }\n\n const after = await resolveContextSelection(config, featureName, selectionOptions);\n const statusReport = runSelfCliJson(['status']);\n const doctorReport = runSelfCliJson(['doctor']);\n\n let strictChecks: {\n enabled: boolean;\n statusStrictOk: boolean;\n doctorStrictOk: boolean;\n } | null = null;\n\n if (options.strict) {\n const statusStrict = runSelfCli(['status', '--strict']);\n const doctorStrict = runSelfCli(['doctor', '--strict']);\n strictChecks = {\n enabled: true,\n statusStrictOk: statusStrict.code === 0,\n doctorStrictOk: doctorStrict.code === 0,\n };\n\n if (!strictChecks.statusStrictOk || !strictChecks.doctorStrictOk) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Flow strict checks failed. Run `status --strict` and `doctor --strict` to inspect details.'\n );\n }\n }\n\n if (options.json) {\n const payload = {\n status: 'ok',\n reasonCode: 'FLOW_SUMMARY',\n context: {\n before: {\n status: before.status,\n reasonCode: toReasonCode(before.status),\n selectionMode: before.selectionMode,\n selectionFallback: before.selectionFallback,\n matchedFeature: before.matchedFeature,\n actionOptions: before.actionOptions,\n contextVersion: before.contextVersion,\n },\n after: {\n status: after.status,\n reasonCode: toReasonCode(after.status),\n selectionMode: after.selectionMode,\n selectionFallback: after.selectionFallback,\n matchedFeature: after.matchedFeature,\n actionOptions: after.actionOptions,\n contextVersion: after.contextVersion,\n },\n },\n approval: approvalResult,\n statusReport,\n doctorReport,\n strictChecks,\n suggestion: after.matchedFeature\n ? `npx lee-spec-kit context ${after.matchedFeature.folderName}${componentHint}`\n : `npx lee-spec-kit context${componentHint}`,\n };\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n\n console.log();\n console.log(chalk.bold('🔁 Flow Summary'));\n console.log(\n chalk.gray(\n `- Before: ${before.status} (${toReasonCode(before.status)}) / After: ${after.status} (${toReasonCode(after.status)})`\n )\n );\n\n if (approvalResult && typeof approvalResult === 'object') {\n const result = approvalResult as { status?: string; reasonCode?: string };\n console.log(\n chalk.gray(\n `- Approval: ${result.status ?? 'unknown'} (${result.reasonCode ?? '-'})`\n )\n );\n }\n\n const statusCounts = (statusReport as { counts?: { features?: number } }).counts;\n const doctorCounts = (\n doctorReport as { counts?: { issues?: number; warnings?: number; errors?: number } }\n ).counts;\n console.log(chalk.gray(`- Status features: ${statusCounts?.features ?? 0}`));\n console.log(\n chalk.gray(\n `- Doctor issues: ${doctorCounts?.issues ?? 0} (errors ${doctorCounts?.errors ?? 0}, warnings ${doctorCounts?.warnings ?? 0})`\n )\n );\n\n if (strictChecks) {\n const strictLabel =\n strictChecks.statusStrictOk && strictChecks.doctorStrictOk\n ? chalk.green('PASS')\n : chalk.red('FAIL');\n console.log(chalk.gray(`- Strict checks: ${strictLabel}`));\n }\n\n console.log();\n if (after.matchedFeature) {\n console.log(\n chalk.blue(\n `Next: npx lee-spec-kit context ${after.matchedFeature.folderName}${componentHint}`\n )\n );\n } else {\n console.log(chalk.blue(`Next: npx lee-spec-kit context${componentHint}`));\n }\n console.log(chalk.gray('Tip: add --approve <LABEL> [--execute] to run the selected atomic action.'));\n console.log();\n}\n","import { Lang } from './i18n.js';\nimport type { BuiltinDocId } from './builtin-docs.js';\n\nexport type GithubDraftKind = 'issue' | 'pr';\nexport type GithubDraftArtifactId = 'screenshots' | 'mermaid';\nexport type GithubDraftBodyRule = 'image-markdown' | 'mermaid-fence';\n\ninterface GithubDraftArtifactContract {\n id: GithubDraftArtifactId;\n headings: Record<Lang, string>;\n bodyRule: GithubDraftBodyRule;\n}\n\ninterface GithubDraftContractDefinition {\n kind: GithubDraftKind;\n requiredSections: Record<Lang, string[]>;\n artifacts: GithubDraftArtifactContract[];\n}\n\nexport interface GithubDraftContractView {\n kind: GithubDraftKind;\n requiredSections: string[];\n artifacts: Array<{\n id: GithubDraftArtifactId;\n section: string;\n bodyRule: GithubDraftBodyRule;\n }>;\n}\n\nconst ISSUE_CONTRACT: GithubDraftContractDefinition = {\n kind: 'issue',\n requiredSections: {\n ko: ['개요', '목표', '완료 기준', '관련 문서', '라벨'],\n en: ['Overview', 'Goals', 'Completion Criteria', 'Related Documents', 'Labels'],\n },\n artifacts: [],\n};\n\nconst PR_CONTRACT: GithubDraftContractDefinition = {\n kind: 'pr',\n requiredSections: {\n ko: ['개요', '변경 사항', '테스트', '관련 문서'],\n en: ['Overview', 'Changes', 'Tests', 'Related Documents'],\n },\n artifacts: [\n {\n id: 'screenshots',\n headings: { ko: '스크린샷', en: 'Screenshots' },\n bodyRule: 'image-markdown',\n },\n {\n id: 'mermaid',\n headings: { ko: '아키텍처 다이어그램', en: 'Architecture Diagram' },\n bodyRule: 'mermaid-fence',\n },\n ],\n};\n\nconst CONTRACTS: Record<GithubDraftKind, GithubDraftContractDefinition> = {\n issue: ISSUE_CONTRACT,\n pr: PR_CONTRACT,\n};\n\nexport function getGithubDraftContractDefinition(\n kind: GithubDraftKind\n): GithubDraftContractDefinition {\n return CONTRACTS[kind];\n}\n\nexport function getGithubDraftRequiredSections(\n kind: GithubDraftKind,\n lang: Lang\n): string[] {\n return [...CONTRACTS[kind].requiredSections[lang]];\n}\n\nexport function getGithubDraftArtifactHeading(\n kind: GithubDraftKind,\n artifactId: GithubDraftArtifactId,\n lang: Lang\n): string | null {\n const artifact = CONTRACTS[kind].artifacts.find((item) => item.id === artifactId);\n if (!artifact) return null;\n return artifact.headings[lang];\n}\n\nexport function getGithubDraftContractView(\n kind: GithubDraftKind,\n lang: Lang\n): GithubDraftContractView {\n const definition = CONTRACTS[kind];\n return {\n kind: definition.kind,\n requiredSections: [...definition.requiredSections[lang]],\n artifacts: definition.artifacts.map((artifact) => ({\n id: artifact.id,\n section: artifact.headings[lang],\n bodyRule: artifact.bodyRule,\n })),\n };\n}\n\nexport function getGithubDraftContractForBuiltinDoc(\n docId: BuiltinDocId,\n lang: Lang\n): GithubDraftContractView | null {\n if (docId === 'create-issue' || docId === 'issue-doc') {\n return getGithubDraftContractView('issue', lang);\n }\n if (docId === 'create-pr' || docId === 'pr-doc') {\n return getGithubDraftContractView('pr', lang);\n }\n return null;\n}\n","import { spawnSync } from 'child_process';\nimport { createCliError } from '../../utils/cli-error.js';\n\nexport interface ProcessResult {\n code: number;\n stdout: string;\n stderr: string;\n}\n\nexport function runProcess(\n bin: string,\n args: string[],\n cwd: string\n): ProcessResult {\n const result = spawnSync(bin, args, {\n cwd,\n encoding: 'utf-8',\n env: {\n ...process.env,\n LEE_SPEC_KIT_NO_UPDATE_CHECK: '1',\n LEE_SPEC_KIT_NO_BANNER: '1',\n },\n });\n return {\n code: result.status ?? 1,\n stdout: result.stdout || '',\n stderr: result.stderr || '',\n };\n}\n\nexport function runProcessOrThrow(\n bin: string,\n args: string[],\n cwd: string,\n failureMessage: string\n): ProcessResult {\n const result = runProcess(bin, args, cwd);\n if (result.code !== 0) {\n const detail = (result.stderr || result.stdout || '').trim();\n throw createCliError(\n 'EXECUTION_FAILED',\n `${failureMessage}${detail ? `: ${detail}` : ''}`\n );\n }\n return result;\n}\n\nexport function runGhJson<T>(\n args: string[],\n cwd: string,\n messages: {\n commandFailed: string;\n emptyJson: string;\n invalidJson: (snippet: string) => string;\n }\n): T {\n const result = runProcessOrThrow('gh', args, cwd, messages.commandFailed);\n const text = result.stdout.trim();\n if (!text) {\n throw createCliError('EXECUTION_FAILED', messages.emptyJson);\n }\n try {\n return JSON.parse(text) as T;\n } catch {\n throw createCliError(\n 'EXECUTION_FAILED',\n messages.invalidJson(text.slice(0, 160))\n );\n }\n}\n","import { createHash } from 'crypto';\nimport os from 'os';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { DEFAULT_LANG, I18nKey, Lang, tr } from '../utils/i18n.js';\nimport { getConfig } from '../utils/config.js';\nimport {\n ContextSelectionOptions,\n resolveContextSelection,\n} from '../utils/context-selection.js';\nimport { FeatureContext } from '../utils/context/index.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\nimport { assertValid, validatePathWithLang } from '../utils/validation.js';\nimport {\n getGithubDraftArtifactHeading,\n getGithubDraftRequiredSections,\n} from '../utils/github-draft-contract.js';\nimport { resolveComponentOption } from '../utils/context/component-option.js';\nimport {\n runGhJson as runGhJsonProcess,\n runProcess,\n runProcessOrThrow,\n} from './github/process.js';\n\ninterface GithubBaseOptions {\n json?: boolean;\n component?: string;\n}\n\ninterface GithubIssueOptions extends GithubBaseOptions {\n create?: boolean;\n confirm?: string;\n title?: string;\n labels?: string;\n bodyFile?: string;\n assignee?: string;\n}\n\ninterface GithubPrOptions extends GithubBaseOptions {\n create?: boolean;\n merge?: boolean;\n confirm?: string;\n pr?: string;\n title?: string;\n labels?: string;\n bodyFile?: string;\n assignee?: string;\n base?: string;\n retry?: string;\n syncTasks?: boolean;\n commitSync?: boolean;\n screenshots?: string;\n mermaid?: string;\n}\n\ntype PrArtifactMode = 'auto' | 'on' | 'off';\n\ninterface PrArtifactPolicy {\n includeScreenshots: boolean;\n includeMermaid: boolean;\n}\n\ninterface PrViewMeta {\n url: string;\n headRefName: string;\n baseRefName: string;\n}\n\ninterface PrMergeStateMeta {\n state?: string;\n mergedAt?: string | null;\n baseRefName?: string;\n}\n\ntype GithubTextKey = Extract<I18nKey<'cli'>, `github.${string}`> extends `github.${infer Key}`\n ? Key\n : never;\n\nfunction tg(\n lang: Lang,\n key: GithubTextKey,\n vars: Record<string, string | number | undefined> = {}\n): string {\n const fullKey = `github.${key}` as I18nKey<'cli'>;\n return tr(lang, 'cli', fullKey, vars);\n}\n\nfunction detectGithubCliLangSync(cwd: string): Lang {\n const explicitDocsDir = (process.env.LEE_SPEC_KIT_DOCS_DIR || '').trim();\n const startDirs = [explicitDocsDir ? path.resolve(explicitDocsDir) : '', path.resolve(cwd)]\n .filter(Boolean);\n\n const scanOrder: string[] = [];\n const seen = new Set<string>();\n for (const start of startDirs) {\n let current = start;\n while (true) {\n const abs = path.resolve(current);\n if (!seen.has(abs)) {\n scanOrder.push(abs);\n seen.add(abs);\n }\n const parent = path.dirname(abs);\n if (parent === abs) break;\n current = parent;\n }\n }\n\n for (const base of scanOrder) {\n for (const docsDir of [path.join(base, 'docs'), base]) {\n const configPath = path.join(docsDir, '.lee-spec-kit.json');\n if (fs.existsSync(configPath)) {\n try {\n const parsed = fs.readJsonSync(configPath) as { lang?: unknown };\n if (parsed?.lang === 'ko' || parsed?.lang === 'en') return parsed.lang;\n } catch {\n // ignore parse errors and continue fallback probing\n }\n }\n\n const agentsPath = path.join(docsDir, 'agents');\n const featuresPath = path.join(docsDir, 'features');\n if (!fs.existsSync(agentsPath) || !fs.existsSync(featuresPath)) continue;\n\n for (const probe of ['custom.md', 'constitution.md', 'agents.md']) {\n const file = path.join(agentsPath, probe);\n if (!fs.existsSync(file)) continue;\n try {\n const content = fs.readFileSync(file, 'utf-8');\n if (/[가-힣]/.test(content)) return 'ko';\n } catch {\n // ignore and keep probing\n }\n }\n return 'en';\n }\n }\n\n return DEFAULT_LANG;\n}\n\nfunction parseLabels(raw: string | undefined, lang: Lang): string[] {\n const labels = (raw || 'enhancement')\n .split(',')\n .map((part) => part.trim())\n .filter(Boolean);\n if (labels.length === 0) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n tg(lang, 'labelsRequired')\n );\n }\n return [...new Set(labels)];\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction extractDraftMetadataValue(content: string, keys: string[]): string | undefined {\n for (const key of keys) {\n const re = new RegExp(\n `^\\\\s*-\\\\s*\\\\*\\\\*${escapeRegExp(key)}\\\\*\\\\*\\\\s*:\\\\s*(.*?)\\\\s*$`,\n 'mi'\n );\n const match = content.match(re);\n if (!match) continue;\n const value = match[1].trim();\n if (value) return value;\n }\n return undefined;\n}\n\nfunction sanitizeDraftMetadataValue(raw: string | undefined): string | undefined {\n const value = (raw || '').trim();\n if (!value || value === '-') return undefined;\n if (/^\\{[^}]+\\}$/.test(value)) return undefined;\n if (/^\\(.+\\)$/.test(value)) return undefined;\n return value;\n}\n\nfunction parseWorkflowDraftStatus(raw: string | undefined): 'draft' | 'ready' | undefined {\n const value = (raw || '').trim();\n if (!value) return undefined;\n const matched = value.match(/\\b(Draft|Ready)\\b/i)?.[1]?.toLowerCase();\n if (matched === 'draft' || matched === 'ready') return matched;\n return undefined;\n}\n\ninterface WorkflowDraftMetadata {\n status?: 'draft' | 'ready';\n title?: string;\n labels?: string;\n}\n\nfunction parseWorkflowDraftMetadata(content: string): WorkflowDraftMetadata {\n const status = parseWorkflowDraftStatus(\n extractDraftMetadataValue(content, ['Status', '상태'])\n );\n const title = sanitizeDraftMetadataValue(\n extractDraftMetadataValue(content, ['Title', '제목', 'PR Title', 'PR 제목'])\n );\n const labels = sanitizeDraftMetadataValue(\n extractDraftMetadataValue(content, ['Labels', '라벨'])\n );\n return {\n status,\n title,\n labels,\n };\n}\n\ninterface PreparedGithubBody {\n body: string;\n bodyFile: string;\n source: 'generated' | 'explicit' | 'workflow-ready';\n draftMetadata?: WorkflowDraftMetadata;\n}\n\nasync function prepareGithubBody(\n params: {\n create?: boolean;\n explicitBodyFile: string;\n defaultBodyFile: string;\n workflowDraftPath: string;\n generatedBody: string;\n requiredSections: string[];\n kindLabel: string;\n lang: Lang;\n }\n): Promise<PreparedGithubBody> {\n const {\n create,\n explicitBodyFile,\n defaultBodyFile,\n workflowDraftPath,\n generatedBody,\n requiredSections,\n kindLabel,\n lang,\n } = params;\n\n if (create && explicitBodyFile && (await fs.pathExists(defaultBodyFile))) {\n const body = await fs.readFile(defaultBodyFile, 'utf-8');\n ensureSections(body, requiredSections, kindLabel, lang);\n return {\n body,\n bodyFile: defaultBodyFile,\n source: 'explicit',\n };\n }\n\n if (create && !explicitBodyFile && (await fs.pathExists(workflowDraftPath))) {\n const body = await fs.readFile(workflowDraftPath, 'utf-8');\n const draftMetadata = parseWorkflowDraftMetadata(body);\n if (draftMetadata.status === 'ready') {\n ensureSections(body, requiredSections, kindLabel, lang);\n return {\n body,\n bodyFile: workflowDraftPath,\n source: 'workflow-ready',\n draftMetadata,\n };\n }\n }\n\n await fs.ensureDir(path.dirname(defaultBodyFile));\n await fs.writeFile(defaultBodyFile, generatedBody, 'utf-8');\n return {\n body: generatedBody,\n bodyFile: defaultBodyFile,\n source: 'generated',\n };\n}\n\nfunction hasExplicitRemoteApproval(raw: string | undefined): boolean {\n return (raw || '').trim().toUpperCase() === 'OK';\n}\n\nfunction assertRemoteApproval(raw: string | undefined, operation: string, lang: Lang): void {\n if (hasExplicitRemoteApproval(raw)) return;\n throw createCliError(\n 'APPROVAL_REQUIRED',\n tg(lang, 'approvalRequired', { operation })\n );\n}\n\nfunction runGhJson<T>(args: string[], cwd: string, lang: Lang): T {\n return runGhJsonProcess<T>(args, cwd, {\n commandFailed: tg(lang, 'ghCommandFailed'),\n emptyJson: tg(lang, 'ghEmptyJson'),\n invalidJson: (snippet) =>\n tg(lang, 'ghInvalidJson', {\n snippet,\n }),\n });\n}\n\nfunction ensureSections(\n body: string,\n sections: string[],\n kind: string,\n lang: Lang\n): void {\n const hasHeading = (sectionHeading: string): boolean => {\n const re = new RegExp(`^##\\\\s+${escapeRegExp(sectionHeading)}\\\\s*$`, 'm');\n return re.test(body);\n };\n const hasMetadataField = (field: string): boolean => {\n const re = new RegExp(`^\\\\s*-\\\\s*\\\\*\\\\*${escapeRegExp(field)}\\\\*\\\\*\\\\s*:`, 'm');\n return re.test(body);\n };\n const hasRequiredSection = (section: string): boolean => {\n if (hasHeading(section)) return true;\n\n const normalized = section.trim().toLowerCase();\n if (normalized === 'related documents') return hasHeading('Related Docs');\n if (normalized === 'related docs') return hasHeading('Related Documents');\n if (normalized === 'labels' || normalized === '라벨') {\n return hasMetadataField('Labels') || hasMetadataField('라벨');\n }\n\n return false;\n };\n\n const missing = sections.filter((section) => {\n return !hasRequiredSection(section);\n });\n if (missing.length > 0) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'sectionsMissing', {\n kind,\n sections: missing.join(', '),\n })\n );\n }\n}\n\nfunction ensureDocsExist(docsDir: string, relativePaths: string[], lang: Lang): void {\n const missing = relativePaths.filter(\n (relativePath) => !fs.existsSync(path.join(docsDir, relativePath))\n );\n if (missing.length > 0) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'docsMissing', { paths: missing.join(', ') })\n );\n }\n}\n\nfunction buildDefaultBodyFileName(\n kind: 'issue' | 'pr',\n docsDir: string,\n component: string\n): string {\n const key = `${path.resolve(docsDir)}::${component.trim().toLowerCase()}`;\n const digest = createHash('sha1').update(key).digest('hex').slice(0, 12);\n return `lee-spec-kit.${digest}.${kind}.md`;\n}\n\nfunction toBodyFilePath(\n raw: string | undefined,\n kind: 'issue' | 'pr',\n docsDir: string,\n component: string,\n lang: Lang\n): string {\n const selected =\n raw?.trim() ||\n path.join(os.tmpdir(), buildDefaultBodyFileName(kind, docsDir, component));\n assertValid(\n validatePathWithLang(selected, lang),\n `github.${kind}.bodyFile`,\n lang\n );\n return path.resolve(selected);\n}\n\nfunction toProjectRootDocsPath(relativePathFromDocs: string): string {\n const normalized = relativePathFromDocs\n .replace(/\\\\/g, '/')\n .replace(/^\\.\\//, '')\n .replace(/^\\/+/, '');\n if (normalized.startsWith('docs/')) return normalized;\n return `docs/${normalized}`;\n}\n\nfunction toBodyDocPaths(\n paths: ReturnType<typeof getFeatureDocPaths>\n): ReturnType<typeof getFeatureDocPaths> {\n return {\n ...paths,\n specPath: toProjectRootDocsPath(paths.specPath),\n planPath: toProjectRootDocsPath(paths.planPath),\n tasksPath: toProjectRootDocsPath(paths.tasksPath),\n };\n}\n\nconst TODO_PLACEHOLDER_PATTERN = /(^|\\n)\\s*-\\s*\\[[ xX]\\]\\s*TODO:/m;\n\nfunction ensureNoTodoPlaceholders(body: string, kind: string, lang: Lang): void {\n if (!TODO_PLACEHOLDER_PATTERN.test(body)) return;\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'todoPlaceholdersRemain', { kind })\n );\n}\n\nfunction parsePrArtifactMode(\n raw: string | undefined,\n kind: 'screenshots' | 'mermaid',\n lang: Lang\n): PrArtifactMode {\n const value = (raw || 'auto').trim().toLowerCase();\n if (value === 'auto' || value === 'on' || value === 'off') {\n return value;\n }\n throw createCliError(\n 'INVALID_ARGUMENT',\n tg(lang, 'artifactModeInvalid', { kind, value })\n );\n}\n\nfunction resolvePrArtifactPolicy(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n options: GithubPrOptions\n): PrArtifactPolicy {\n const screenshotsMode = parsePrArtifactMode(\n options.screenshots,\n 'screenshots',\n config.lang\n );\n const mermaidMode = parsePrArtifactMode(\n options.mermaid,\n 'mermaid',\n config.lang\n );\n\n const includeScreenshots =\n screenshotsMode === 'on'\n ? true\n : screenshotsMode === 'off'\n ? false\n : (config.pr?.screenshots?.upload ?? false);\n const includeMermaid =\n mermaidMode === 'on'\n ? true\n : mermaidMode === 'off'\n ? false\n : true;\n\n return {\n includeScreenshots,\n includeMermaid,\n };\n}\n\nasync function resolveFeatureOrThrow(\n featureName: string | undefined,\n options: ContextSelectionOptions,\n lang: Lang\n): Promise<{ config: NonNullable<Awaited<ReturnType<typeof getConfig>>>; feature: FeatureContext }> {\n const config = await getConfig(process.cwd());\n if (!config) {\n throw createCliError(\n 'CONFIG_NOT_FOUND',\n tr(lang, 'cli', 'common.configNotFound')\n );\n }\n\n const state = await resolveContextSelection(config, featureName, options);\n if (!state.matchedFeature) {\n if (state.status === 'no_features') {\n throw createCliError('PRECONDITION_FAILED', tg(lang, 'noFeatures'));\n }\n if (state.status === 'multiple_active') {\n throw createCliError(\n 'CONTEXT_SELECTION_REQUIRED',\n tg(lang, 'multipleFeaturesMatched')\n );\n }\n throw createCliError(\n 'CONTEXT_SELECTION_REQUIRED',\n tg(lang, 'featureSelectFailed')\n );\n }\n\n return { config, feature: state.matchedFeature };\n}\n\nfunction resolveGithubProjectCwd(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n feature: FeatureContext\n): string {\n const projectGitCwd = (feature.git.projectGitCwd || '').trim();\n if (projectGitCwd) return projectGitCwd;\n if (config.docsRepo === 'standalone') {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tr(config.lang, 'messages', 'standaloneNeedsProjectRoot')\n );\n }\n return process.cwd();\n}\n\nfunction resolveGithubDocsCwd(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n feature: FeatureContext\n): string {\n const docsGitCwd = (feature.git.docsGitCwd || '').trim();\n if (docsGitCwd) return docsGitCwd;\n return config.docsDir;\n}\n\nfunction shouldPushDocsSync(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>\n): boolean {\n if (config.docsRepo !== 'standalone') return true;\n return config.pushDocs === true;\n}\n\nfunction getFeatureDocPaths(feature: FeatureContext): {\n featurePathFromDocs: string;\n specPath: string;\n planPath: string;\n tasksPath: string;\n issuePath: string;\n prPath: string;\n} {\n const featurePathFromDocs = feature.docs.featurePathFromDocs;\n return {\n featurePathFromDocs,\n specPath: `${featurePathFromDocs}/spec.md`,\n planPath: `${featurePathFromDocs}/plan.md`,\n tasksPath: `${featurePathFromDocs}/tasks.md`,\n issuePath: `${featurePathFromDocs}/issue.md`,\n prPath: `${featurePathFromDocs}/pr.md`,\n };\n}\n\nfunction normalizeHeading(value: string): string {\n return value.trim().replace(/\\s+/g, ' ').toLowerCase();\n}\n\nfunction extractMarkdownByHeadings(\n content: string,\n headings: string[],\n levels: number[]\n): string | undefined {\n const targets = new Set(headings.map((heading) => normalizeHeading(heading)));\n const lines = content.split('\\n');\n let start = -1;\n let startLevel = 0;\n const levelSet = new Set(levels);\n\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(/^\\s*(#{2,6})\\s+(.+?)\\s*$/);\n if (!match) continue;\n const level = match[1].length;\n if (!levelSet.has(level)) continue;\n if (!targets.has(normalizeHeading(match[2]))) continue;\n start = i + 1;\n startLevel = level;\n break;\n }\n\n if (start < 0) return undefined;\n\n let end = lines.length;\n for (let i = start; i < lines.length; i++) {\n const heading = lines[i].match(/^\\s*(#{2,6})\\s+(.+?)\\s*$/);\n if (!heading) continue;\n const level = heading[1].length;\n if (level <= startLevel) {\n end = i;\n break;\n }\n }\n\n return lines.slice(start, end).join('\\n');\n}\n\nfunction extractMarkdownSection(content: string, headings: string[]): string | undefined {\n return extractMarkdownByHeadings(content, headings, [2]);\n}\n\nfunction isTemplateLine(line: string): boolean {\n const trimmed = line.trim();\n if (!trimmed) return true;\n if (/^---+$/.test(trimmed)) return true;\n if (/^\\(.+\\)$/.test(trimmed)) return true;\n if (/\\{\\{[^}]+\\}\\}/.test(trimmed)) return true;\n if (/^\\{[^}]+\\}$/.test(trimmed)) return true;\n return false;\n}\n\nfunction sanitizeOverviewSection(raw: string | undefined): string | undefined {\n if (!raw) return undefined;\n const lines = raw\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => !isTemplateLine(line));\n if (lines.length === 0) return undefined;\n return lines.slice(0, 5).join('\\n');\n}\n\nfunction sanitizeDraftItem(raw: string): string | undefined {\n const trimmed = raw\n .replace(/^\\s*-\\s*\\[[ xX]\\]\\s*/, '')\n .replace(/^\\s*-\\s+/, '')\n .replace(/^\\s*###\\s+/, '')\n .trim();\n const plain = trimmed.replace(/\\*\\*/g, '').trim();\n if (!plain) return undefined;\n if (isTemplateLine(plain)) return undefined;\n if (/^todo:/i.test(plain)) return undefined;\n if (/\\{[^}]*\\}/.test(plain)) return undefined;\n if (/^(as a|i want|so that)\\b/i.test(plain)) return undefined;\n if (/^acceptance criteria:?$/i.test(plain)) return undefined;\n return plain.replace(/\\s+/g, ' ');\n}\n\nfunction uniqItems(items: string[]): string[] {\n const seen = new Set<string>();\n const ordered: string[] = [];\n for (const item of items) {\n const normalized = item.trim().toLowerCase();\n if (!normalized || seen.has(normalized)) continue;\n seen.add(normalized);\n ordered.push(item.trim());\n }\n return ordered;\n}\n\nfunction normalizeSemanticKey(value: string): string {\n return value\n .toLowerCase()\n .replace(/[`\\]\\u005B'\"(){}.,:;!?/\\\\_|-]/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n .replace(/\\s/g, '');\n}\n\nfunction uniqItemsByContainment(items: string[]): string[] {\n const kept: string[] = [];\n const keys: string[] = [];\n\n for (const item of items) {\n const clean = item.trim();\n if (!clean) continue;\n const key = normalizeSemanticKey(clean);\n if (!key) continue;\n\n let replaced = false;\n for (let i = 0; i < keys.length; i++) {\n const current = keys[i];\n if (!current.includes(key) && !key.includes(current)) continue;\n if (key.length > current.length) {\n keys[i] = key;\n kept[i] = clean;\n }\n replaced = true;\n break;\n }\n\n if (!replaced) {\n keys.push(key);\n kept.push(clean);\n }\n }\n\n return kept;\n}\n\nfunction extractSectionLines(raw: string | undefined): string[] {\n if (!raw) return [];\n return uniqItems(\n raw\n .split('\\n')\n .map((line) => sanitizeDraftItem(line))\n .filter((line): line is string => !!line)\n );\n}\n\nfunction extractSectionHeadings(raw: string | undefined): string[] {\n if (!raw) return [];\n return uniqItems(\n raw\n .split('\\n')\n .map((line) => line.match(/^\\s*###\\s+(.+?)\\s*$/)?.[1] || '')\n .map((line) => sanitizeDraftItem(line))\n .filter((line): line is string => !!line)\n .map((line) => line.replace(/^FR-\\d+:\\s*/i, '').trim())\n );\n}\n\nfunction toChecklistLines(items: string[]): string {\n return items.map((item) => `- [ ] ${item}`).join('\\n');\n}\n\nfunction extractChecklistItems(raw: string | undefined): string[] {\n if (!raw) return [];\n return uniqItems(\n raw\n .split('\\n')\n .map((line) => {\n const match = line.match(/^\\s*-\\s*\\[[ xX]\\]\\s+(.+?)\\s*$/);\n if (!match) return undefined;\n return sanitizeDraftItem(match[1]);\n })\n .filter((line): line is string => !!line)\n );\n}\n\nfunction extractTaskTitles(tasksContent: string): string[] {\n return uniqItems(\n tasksContent\n .split('\\n')\n .map((line) => {\n const match = line.match(\n /^\\s*-\\s*\\[(?:TODO|DOING|DONE)\\][^\\n]*?\\s+(?:T-[A-Z0-9-]+\\s+)?(.+?)\\s*$/\n );\n if (!match) return undefined;\n return sanitizeDraftItem(match[1]);\n })\n .filter((line): line is string => !!line)\n );\n}\n\nfunction extractTasksAcceptanceItems(tasksContent: string): string[] {\n const lines = tasksContent.split('\\n');\n const accepted: string[] = [];\n let inAcceptance = false;\n\n for (const line of lines) {\n if (/^\\s*-\\s*Acceptance\\s*:\\s*$/i.test(line)) {\n inAcceptance = true;\n continue;\n }\n if (inAcceptance && /^\\s*-\\s*Checklist\\s*:\\s*$/i.test(line)) {\n inAcceptance = false;\n continue;\n }\n if (!inAcceptance) continue;\n const match =\n line.match(/^\\s*-\\s*\\[[ xX]\\]\\s+(.+?)\\s*$/) ||\n line.match(/^\\s*-\\s+(.+?)\\s*$/);\n if (!match) continue;\n const item = sanitizeDraftItem(match[1]);\n if (!item) continue;\n accepted.push(item);\n }\n\n return uniqItems(accepted);\n}\n\nfunction extractScopeItemsFromPlan(\n planContent: string,\n lang: Lang\n): { include: string[]; exclude: string[] } {\n const section = extractMarkdownSection(\n planContent,\n ['범위(명확화)', '범위', 'Scope', 'Scope Clarification']\n );\n if (!section) return { include: [], exclude: [] };\n\n const lines = section.split('\\n');\n const include: string[] = [];\n const exclude: string[] = [];\n let mode: 'include' | 'exclude' | null = null;\n\n const includePatterns =\n lang === 'ko' ? [/포함/] : [/in\\s*scope/i, /^include$/i, /included/i];\n const excludePatterns =\n lang === 'ko' ? [/비포함/, /제외/] : [/out\\s*of\\s*scope/i, /^exclude$/i, /excluded/i];\n\n for (const line of lines) {\n const plain = line.replace(/\\*\\*/g, '').trim();\n if (!plain) continue;\n\n if (excludePatterns.some((re) => re.test(plain))) {\n mode = 'exclude';\n continue;\n }\n if (includePatterns.some((re) => re.test(plain))) {\n mode = 'include';\n continue;\n }\n\n const bullet = line.match(/^\\s*-\\s+(.+?)\\s*$/)?.[1];\n if (!bullet) continue;\n const item = sanitizeDraftItem(bullet);\n if (!item) continue;\n if (mode === 'include') {\n include.push(item);\n } else if (mode === 'exclude') {\n exclude.push(item);\n }\n }\n\n return {\n include: uniqItems(include),\n exclude: uniqItems(exclude),\n };\n}\n\nfunction getIssueGoalsAndCriteria(\n specContent: string,\n planContent: string,\n tasksContent: string,\n overview: string,\n lang: Lang\n): { goals: string[]; criteria: string[]; scope: string[] } {\n const purposeLines = extractSectionLines(\n extractMarkdownSection(specContent, ['목적', 'Purpose'])\n );\n const requirementHeadings = extractSectionHeadings(\n extractMarkdownSection(specContent, ['기능 요구사항', 'Functional Requirements'])\n );\n const userStoryChecklist = extractChecklistItems(\n extractMarkdownSection(specContent, ['사용자 스토리', 'User Stories'])\n );\n const tasksAcceptance = extractTasksAcceptanceItems(tasksContent);\n const scopeFromPlan = extractScopeItemsFromPlan(planContent, lang);\n const taskTitles = extractTaskTitles(tasksContent);\n\n const goals = uniqItemsByContainment(uniqItems([\n ...requirementHeadings,\n ...scopeFromPlan.include,\n ...purposeLines.slice(0, 1),\n sanitizeDraftItem(overview) || '',\n ])).slice(0, 5);\n\n while (goals.length < 3) {\n goals.push(\n lang === 'ko'\n ? goals.length === 0\n ? 'spec.md 목적에 맞춰 구현 범위를 확정한다.'\n : goals.length === 1\n ? '포함/제외 범위를 명확히 정의하고 문서와 구현을 일치시킨다.'\n : '관련 테스트 및 검증 경로를 포함해 기능 완성도를 확보한다.'\n : goals.length === 0\n ? 'Define implementation scope aligned with spec.md purpose.'\n : goals.length === 1\n ? 'Clarify in-scope and out-of-scope boundaries and keep docs/code aligned.'\n : 'Ensure feature completeness with concrete validation paths.'\n );\n }\n\n const criteria = uniqItemsByContainment(\n uniqItems([...userStoryChecklist, ...tasksAcceptance])\n ).slice(0, 6);\n while (criteria.length < 4) {\n criteria.push(\n lang === 'ko'\n ? criteria.length === 0\n ? '핵심 사용자 시나리오에서 목표 동작이 재현된다.'\n : criteria.length === 1\n ? '요구사항별 수용 기준이 모두 충족된다.'\n : criteria.length === 2\n ? '검증 방법(테스트/수동 시나리오)을 기록해 완료를 확인할 수 있다.'\n : '회귀 없이 기존 동작과의 호환성을 유지한다.'\n : criteria.length === 0\n ? 'Core user scenarios reproduce expected behavior.'\n : criteria.length === 1\n ? 'All requirement-level acceptance criteria are satisfied.'\n : criteria.length === 2\n ? 'Validation method (tests/manual scenarios) is documented for completion checks.'\n : 'Compatibility is preserved without regressions.'\n );\n }\n\n const scope = uniqItemsByContainment(\n uniqItems([...scopeFromPlan.include, ...taskTitles])\n ).slice(0, 6);\n\n return {\n goals: goals.slice(0, 5),\n criteria: criteria.slice(0, 6),\n scope,\n };\n}\n\nfunction extractPlanChangeTargets(planContent: string, lang: Lang): string[] {\n const section = extractMarkdownSection(\n planContent,\n [\n '변경 대상(예상)',\n '변경 대상',\n 'Changed Files',\n 'Change Targets',\n 'Expected Changes',\n ]\n );\n if (!section) return [];\n\n const lines = section.split('\\n');\n const out: string[] = [];\n let inCode = false;\n\n for (const line of lines) {\n if (/^\\s*```/.test(line)) {\n inCode = !inCode;\n continue;\n }\n\n if (inCode) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n if (!/[\\\\/]/.test(trimmed)) continue;\n out.push(\n lang === 'ko' ? `\\`${trimmed}\\` 변경` : `Update \\`${trimmed}\\``\n );\n continue;\n }\n\n const bullet = line.match(/^\\s*-\\s+(.+?)\\s*$/)?.[1];\n if (!bullet) continue;\n const item = sanitizeDraftItem(bullet);\n if (!item) continue;\n out.push(item);\n }\n\n return uniqItemsByContainment(uniqItems(out));\n}\n\nfunction extractCommandsFromSection(raw: string | undefined): string[] {\n if (!raw) return [];\n const commands: string[] = [];\n\n for (const match of raw.matchAll(/`([^`]+)`/g)) {\n const candidate = match[1].trim();\n if (!candidate) continue;\n if (/\\{[^}]*\\}/.test(candidate)) continue;\n if (!/\\b(pnpm|npm|yarn|bun|vitest|jest|tsx?|node)\\b/.test(candidate)) continue;\n commands.push(candidate);\n }\n\n for (const line of raw.split('\\n')) {\n const trimmed = line.trim().replace(/^-+\\s*/, '');\n if (!trimmed) continue;\n if (!/\\b(pnpm|npm|yarn|bun|vitest|jest|tsx?|node)\\b/.test(trimmed)) continue;\n if (/\\{[^}]*\\}/.test(trimmed)) continue;\n commands.push(trimmed);\n }\n\n return uniqItems(commands);\n}\n\nfunction extractRecordedTestLines(\n tasksContent: string,\n planContent: string,\n lang: Lang\n): string[] {\n const section = extractMarkdownByHeadings(\n tasksContent,\n ['테스트 실행 기록', 'Tests Run', 'Test Run Log', 'Test Execution Log'],\n [3, 2]\n );\n\n const records: string[] = [];\n if (section) {\n for (const line of section.split('\\n')) {\n if (!line.trim().startsWith('|')) continue;\n const cells = line\n .split('|')\n .slice(1, -1)\n .map((cell) => cell.trim().replace(/`/g, ''));\n if (cells.length < 3) continue;\n const [cmd, time, result] = cells;\n if (!cmd || /^명령어$/i.test(cmd) || /^command$/i.test(cmd) || /^-+$/.test(cmd)) continue;\n if (/\\{[^}]*\\}/.test(cmd) || /\\{[^}]*\\}/.test(result || '')) continue;\n const renderedResult = result || (lang === 'ko' ? '미기록' : 'not recorded');\n const renderedTime = time && time !== '-' ? ` (${time})` : '';\n records.push(`\\`${cmd}\\` — ${renderedResult}${renderedTime}`);\n }\n\n const lines = section.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const commandMatch =\n lines[i].match(/^\\s*-\\s*(?:명령어|Command)\\s*:\\s*`?([^`]+?)`?\\s*$/i);\n if (!commandMatch) continue;\n const command = commandMatch[1].trim();\n if (!command || /\\{[^}]*\\}/.test(command)) continue;\n let result = '';\n for (let j = i + 1; j < Math.min(lines.length, i + 5); j++) {\n const resultMatch =\n lines[j].match(/^\\s*-\\s*(?:결과|Result)\\s*:\\s*(.+?)\\s*$/i);\n if (!resultMatch) continue;\n result = resultMatch[1].replace(/`/g, '').trim();\n break;\n }\n if (!result || /\\{[^}]*\\}/.test(result)) continue;\n records.push(`\\`${command}\\` — ${result}`);\n }\n }\n\n if (records.length > 0) {\n return uniqItemsByContainment(uniqItems(records));\n }\n\n const plannedCommands = extractCommandsFromSection(\n extractMarkdownByHeadings(\n planContent,\n ['검증 명령(예정)', 'Validation Commands', 'Verification Commands'],\n [3, 2]\n )\n );\n\n if (plannedCommands.length > 0) {\n return plannedCommands.map((command) =>\n lang === 'ko'\n ? `\\`${command}\\` — 실행 결과를 기록하세요.`\n : `\\`${command}\\` — record execution result.`\n );\n }\n\n return [];\n}\n\nfunction getPrChangesAndTests(\n specContent: string,\n planContent: string,\n tasksContent: string,\n overview: string,\n lang: Lang\n): { changes: string[]; tests: string[] } {\n const requirementHeadings = extractSectionHeadings(\n extractMarkdownSection(specContent, ['기능 요구사항', 'Functional Requirements'])\n );\n const scopeFromPlan = extractScopeItemsFromPlan(planContent, lang).include;\n const planTargets = extractPlanChangeTargets(planContent, lang);\n const taskTitles = extractTaskTitles(tasksContent);\n\n const changes = uniqItemsByContainment(\n uniqItems([\n ...taskTitles,\n ...scopeFromPlan,\n ...requirementHeadings,\n ...planTargets,\n sanitizeDraftItem(overview) || '',\n ])\n ).slice(0, 6);\n\n while (changes.length < 3) {\n changes.push(\n lang === 'ko'\n ? changes.length === 0\n ? '핵심 구현 변경 사항을 요약해 반영한다.'\n : changes.length === 1\n ? '영향 범위(호환성/마이그레이션 포함)를 명시한다.'\n : '문서와 구현 간 불일치가 없도록 정합성을 점검한다.'\n : changes.length === 0\n ? 'Summarize key implementation changes.'\n : changes.length === 1\n ? 'Document impact scope (including compatibility/migration).'\n : 'Verify document and implementation consistency.'\n );\n }\n\n const tests = uniqItemsByContainment(\n uniqItems(extractRecordedTestLines(tasksContent, planContent, lang))\n ).slice(0, 4);\n\n while (tests.length < 2) {\n tests.push(\n lang === 'ko'\n ? tests.length === 0\n ? '관련 테스트를 실행하고 결과를 기록한다.'\n : '미실행 테스트가 있으면 사유와 리스크를 기록한다.'\n : tests.length === 0\n ? 'Run relevant tests and record results.'\n : 'If tests were not run, record rationale and risk.'\n );\n }\n\n return {\n changes: changes.slice(0, 6),\n tests: tests.slice(0, 4),\n };\n}\n\nfunction resolveOverviewFromSpec(\n specContent: string,\n feature: FeatureContext,\n lang: Lang\n): string {\n const fromPurpose = sanitizeOverviewSection(\n extractMarkdownSection(specContent, ['목적', 'Purpose'])\n );\n if (fromPurpose) return fromPurpose;\n\n const fromOverview = sanitizeOverviewSection(\n extractMarkdownSection(specContent, ['개요', 'Overview'])\n );\n if (fromOverview) return fromOverview;\n\n return lang === 'ko'\n ? `\\`${feature.folderName}\\` 기능 개요를 spec.md 기준으로 작성하세요.`\n : `Summarize feature \\`${feature.folderName}\\` from spec.md.`;\n}\n\nfunction normalizeIssueTitleSummaryLine(raw: string): string {\n return raw\n .trim()\n .replace(/^\\s*[-*+]\\s+/, '')\n .replace(/^\\s*\\d+[.)]\\s+/, '')\n .replace(/^\\s*>\\s*/, '')\n .replace(/`/g, '')\n .replace(/\\*\\*(.*?)\\*\\*/g, '$1')\n .replace(/\\[(.*?)\\]\\((.*?)\\)/g, '$1')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\nfunction isOverviewMetadataLine(line: string, lang: Lang): boolean {\n const cleaned = line.replace(/^[-*+]\\s*/, '').trim().toLowerCase();\n const keys =\n lang === 'ko'\n ? ['기능 id', '기능명', '대상 레포', '이슈 번호', '작성일', '상태']\n : ['feature id', 'feature name', 'target repo', 'issue number', 'created', 'status'];\n return keys.some((key) => cleaned.startsWith(`${key}:`));\n}\n\nfunction truncateIssueTitleSummary(input: string, maxLength = 72): string {\n if (input.length <= maxLength) return input;\n return `${input.slice(0, maxLength - 3).trimEnd()}...`;\n}\n\nfunction resolveIssueTitleSummary(\n overview: string,\n feature: FeatureContext,\n lang: Lang\n): string {\n const candidates = overview\n .split('\\n')\n .map((line) => normalizeIssueTitleSummaryLine(line))\n .filter((line) => !!line)\n .filter((line) => !isOverviewMetadataLine(line, lang));\n\n const fallback =\n lang === 'ko'\n ? `${feature.slug} 기능 구현`\n : `${feature.slug} feature implementation`;\n const picked = candidates[0] || fallback;\n return truncateIssueTitleSummary(picked);\n}\n\nfunction getPrScreenshotsHeading(lang: Lang): string {\n return getGithubDraftArtifactHeading('pr', 'screenshots', lang) || (\n lang === 'ko' ? '스크린샷' : 'Screenshots'\n );\n}\n\nfunction getPrMermaidHeading(lang: Lang): string {\n return getGithubDraftArtifactHeading('pr', 'mermaid', lang) || (\n lang === 'ko' ? '아키텍처 다이어그램' : 'Architecture Diagram'\n );\n}\n\nfunction buildPrScreenshotsSection(lang: Lang): string {\n if (lang === 'ko') {\n return `\n## 스크린샷\n\n- [ ] 업로드한 스크린샷 URL을 포함하세요. (예: \\`\\`)\n`;\n }\n return `\n## Screenshots\n\n- [ ] Include uploaded screenshot URL(s). (e.g. \\`\\`)\n`;\n}\n\nfunction buildPrMermaidSection(lang: Lang): string {\n if (lang === 'ko') {\n return `\n## 아키텍처 다이어그램\n\n\\`\\`\\`mermaid\nsequenceDiagram\n participant Client\n participant API\n participant Service\n participant DB\n Client->>API: Request\n API->>Service: Execute\n Service->>DB: Query/Command\n DB-->>Service: Result\n Service-->>API: Response DTO\n API-->>Client: Response\n\\`\\`\\`\n`;\n }\n return `\n## Architecture Diagram\n\n\\`\\`\\`mermaid\nsequenceDiagram\n participant Client\n participant API\n participant Service\n participant DB\n Client->>API: Request\n API->>Service: Execute\n Service->>DB: Query/Command\n DB-->>Service: Result\n Service-->>API: Response DTO\n API-->>Client: Response\n\\`\\`\\`\n`;\n}\n\nfunction ensurePrArtifacts(\n body: string,\n policy: PrArtifactPolicy,\n lang: Lang\n): void {\n if (policy.includeScreenshots) {\n const heading = getPrScreenshotsHeading(lang);\n const section = extractMarkdownByHeadings(body, [heading], [2]);\n if (!section) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'prScreenshotsSectionMissing', { section: heading })\n );\n }\n if (!/!\\[[^\\]]*]\\((?!\\s*\\))[^)]+\\)/m.test(section)) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'prScreenshotImageMissing', { section: heading })\n );\n }\n }\n\n if (policy.includeMermaid) {\n const heading = getPrMermaidHeading(lang);\n const section = extractMarkdownByHeadings(body, [heading], [2]);\n if (!section) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'prMermaidSectionMissing', { section: heading })\n );\n }\n if (!/```mermaid[\\s\\S]*?```/m.test(section)) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'prMermaidBlockMissing', { section: heading })\n );\n }\n }\n}\n\nfunction buildIssueBody(\n specContent: string,\n planContent: string,\n tasksContent: string,\n overview: string,\n labels: string[],\n paths: ReturnType<typeof getFeatureDocPaths>,\n lang: Lang\n): string {\n const bodyPaths = toBodyDocPaths(paths);\n const draft = getIssueGoalsAndCriteria(specContent, planContent, tasksContent, overview, lang);\n const goals = toChecklistLines(draft.goals);\n const criteria = toChecklistLines(draft.criteria);\n const scopeSection =\n draft.scope.length > 0\n ? lang === 'ko'\n ? `\n## 작업 범위(예정)\n\n${draft.scope.map((item) => `- ${item}`).join('\\n')}\n`\n : `\n## Planned Scope\n\n${draft.scope.map((item) => `- ${item}`).join('\\n')}\n`\n : '';\n if (lang === 'ko') {\n return `## 개요\n\n${overview}\n\n## 목표\n\n${goals}\n\n## 완료 기준\n\n${criteria}\n${scopeSection}\n\n## 관련 문서\n\n- **Spec**: \\`${bodyPaths.specPath}\\`\n- **Plan**: \\`${bodyPaths.planPath}\\`\n- **Tasks**: \\`${bodyPaths.tasksPath}\\`\n\n## 라벨\n\n${labels.map((label) => `- \\`${label}\\``).join('\\n')}\n`;\n }\n\n return `## Overview\n\n${overview}\n\n## Goals\n\n${goals}\n\n## Completion Criteria\n\n${criteria}\n${scopeSection}\n\n## Related Documents\n\n- **Spec**: \\`${bodyPaths.specPath}\\`\n- **Plan**: \\`${bodyPaths.planPath}\\`\n- **Tasks**: \\`${bodyPaths.tasksPath}\\`\n\n## Labels\n\n${labels.map((label) => `- \\`${label}\\``).join('\\n')}\n`;\n}\n\nfunction buildPrBody(\n feature: FeatureContext,\n specContent: string,\n planContent: string,\n tasksContent: string,\n overview: string,\n paths: ReturnType<typeof getFeatureDocPaths>,\n artifactPolicy: PrArtifactPolicy,\n lang: Lang\n): string {\n const bodyPaths = toBodyDocPaths(paths);\n const closes = feature.issueNumber ? `\\nCloses #${feature.issueNumber}\\n` : '\\n';\n const draft = getPrChangesAndTests(\n specContent,\n planContent,\n tasksContent,\n overview,\n lang\n );\n const changes = toChecklistLines(draft.changes);\n const tests = toChecklistLines(draft.tests);\n const screenshotsSection = artifactPolicy.includeScreenshots\n ? buildPrScreenshotsSection(lang)\n : '';\n const mermaidSection = artifactPolicy.includeMermaid\n ? buildPrMermaidSection(lang)\n : '';\n if (lang === 'ko') {\n return `## 개요\n\n${overview}\n\n## 변경 사항\n\n${changes}\n\n## 테스트\n\n### 실행한 테스트\n\n${tests}\n${screenshotsSection}\n${mermaidSection}\n\n## 관련 문서\n\n- **Spec**: \\`${bodyPaths.specPath}\\`\n- **Tasks**: \\`${bodyPaths.tasksPath}\\`${closes}`;\n }\n\n return `## Overview\n\n${overview}\n\n## Changes\n\n${changes}\n\n## Tests\n\n### Tests Run\n\n${tests}\n${screenshotsSection}\n${mermaidSection}\n\n## Related Documents\n\n- **Spec**: \\`${bodyPaths.specPath}\\`\n- **Tasks**: \\`${bodyPaths.tasksPath}\\`${closes}`;\n}\n\nfunction getRequiredIssueSections(lang: Lang): string[] {\n return getGithubDraftRequiredSections('issue', lang);\n}\n\nfunction getRequiredPrSections(lang: Lang): string[] {\n return getGithubDraftRequiredSections('pr', lang);\n}\n\nfunction replaceListField(\n content: string,\n keys: string[],\n value: string\n): { content: string; changed: boolean; found: boolean } {\n for (const key of keys) {\n const re = new RegExp(\n `^(\\\\s*-\\\\s*\\\\*\\\\*${key.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\*\\\\*\\\\s*:\\\\s*).*$`,\n 'm'\n );\n if (!re.test(content)) continue;\n const next = content.replace(re, `$1${value}`);\n return { content: next, changed: next !== content, found: true };\n }\n return { content, changed: false, found: false };\n}\n\nfunction insertFieldInGithubIssueSection(\n content: string,\n key: string,\n value: string\n): { content: string; changed: boolean } {\n const lines = content.split('\\n');\n const headingIndex = lines.findIndex((line) =>\n /^\\s*##\\s+(GitHub Issue|로컬 추적 정보|Local Tracking)\\s*$/.test(line)\n );\n if (headingIndex < 0) return { content, changed: false };\n\n let end = lines.length;\n for (let i = headingIndex + 1; i < lines.length; i++) {\n if (/^\\s*##\\s+/.test(lines[i])) {\n end = i;\n break;\n }\n }\n\n lines.splice(end, 0, `- **${key}**: ${value}`);\n return { content: lines.join('\\n'), changed: true };\n}\n\nfunction syncTasksPrMetadata(\n tasksPath: string,\n prUrl: string,\n nextStatus: 'Review' | 'Approved',\n lang: Lang\n): { changed: boolean; path: string } {\n if (!fs.existsSync(tasksPath)) {\n throw createCliError('DOCS_NOT_FOUND', tg(lang, 'tasksNotFound', { path: tasksPath }));\n }\n\n const original = fs.readFileSync(tasksPath, 'utf-8');\n let next = original;\n let changed = false;\n\n const prReplaced = replaceListField(next, ['PR', 'Pull Request'], prUrl);\n next = prReplaced.content;\n changed = changed || prReplaced.changed;\n if (!prReplaced.found) {\n const inserted = insertFieldInGithubIssueSection(next, 'PR', prUrl);\n next = inserted.content;\n changed = changed || inserted.changed;\n }\n\n const statusReplaced = replaceListField(\n next,\n ['PR Status', 'PR 상태'],\n nextStatus\n );\n next = statusReplaced.content;\n changed = changed || statusReplaced.changed;\n if (!statusReplaced.found) {\n const inserted = insertFieldInGithubIssueSection(next, 'PR Status', nextStatus);\n next = inserted.content;\n changed = changed || inserted.changed;\n }\n\n if (changed) {\n fs.writeFileSync(tasksPath, next, 'utf-8');\n }\n return { changed, path: tasksPath };\n}\n\nfunction gitCurrentBranch(cwd: string, lang: Lang): string {\n const result = runProcessOrThrow(\n 'git',\n ['rev-parse', '--abbrev-ref', 'HEAD'],\n cwd,\n tg(lang, 'detectBranchFailed')\n );\n return result.stdout.trim();\n}\n\nfunction ensureCleanWorktree(cwd: string, lang: Lang): void {\n const result = runProcessOrThrow(\n 'git',\n ['status', '--porcelain=v1'],\n cwd,\n tg(lang, 'inspectWorktreeFailed')\n );\n if (result.stdout.trim().length > 0) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'worktreeNotClean')\n );\n }\n}\n\nfunction commitAndPushPath(\n cwd: string,\n absPath: string,\n message: string,\n lang: Lang,\n options?: { pushToOrigin?: boolean }\n): void {\n const relativePath = path.relative(cwd, absPath) || absPath;\n const status = runProcessOrThrow(\n 'git',\n ['status', '--porcelain=v1', '--', relativePath],\n cwd,\n tg(lang, 'inspectFileStatusFailed')\n );\n if (status.stdout.trim().length === 0) return;\n\n runProcessOrThrow('git', ['add', '--', relativePath], cwd, tg(lang, 'stageFileFailed'));\n runProcessOrThrow('git', ['commit', '-m', message], cwd, tg(lang, 'commitSyncFailed'));\n\n if (options?.pushToOrigin === false) return;\n\n const branch = gitCurrentBranch(cwd, lang);\n runProcessOrThrow(\n 'git',\n ['push', '-u', 'origin', branch],\n cwd,\n tg(lang, 'pushSyncFailed')\n );\n}\n\nfunction shouldRefreshHeadBranch(stderr: string, stdout: string): boolean {\n const text = `${stderr}\\n${stdout}`;\n return /out of date|not possible to fast-forward|must be up to date|not up to date/i.test(\n text\n );\n}\n\nfunction refreshPrHeadBranch(prRef: string, cwd: string, lang: Lang): void {\n ensureCleanWorktree(cwd, lang);\n\n const meta = runGhJson<PrViewMeta>(\n ['pr', 'view', prRef, '--json', 'url,headRefName,baseRefName'],\n cwd,\n lang\n );\n const originalBranch = gitCurrentBranch(cwd, lang);\n\n runProcessOrThrow(\n 'git',\n ['fetch', 'origin', meta.baseRefName, meta.headRefName],\n cwd,\n tg(lang, 'fetchPrBranchesFailed')\n );\n\n const hasLocalHead = runProcess(\n 'git',\n ['show-ref', '--verify', '--quiet', `refs/heads/${meta.headRefName}`],\n cwd\n ).code === 0;\n\n if (hasLocalHead) {\n runProcessOrThrow(\n 'git',\n ['checkout', meta.headRefName],\n cwd,\n tg(lang, 'checkoutHeadFailed')\n );\n } else {\n runProcessOrThrow(\n 'git',\n ['checkout', '-B', meta.headRefName, `origin/${meta.headRefName}`],\n cwd,\n tg(lang, 'createLocalHeadFailed')\n );\n }\n\n runProcessOrThrow(\n 'git',\n ['rebase', `origin/${meta.baseRefName}`],\n cwd,\n tg(lang, 'rebaseHeadFailed')\n );\n runProcessOrThrow(\n 'git',\n ['push', '--force-with-lease', 'origin', meta.headRefName],\n cwd,\n tg(lang, 'pushRebasedHeadFailed')\n );\n\n if (originalBranch !== meta.headRefName) {\n runProcessOrThrow(\n 'git',\n ['checkout', originalBranch],\n cwd,\n tg(lang, 'restoreBranchFailed')\n );\n }\n}\n\nfunction mergePrWithRetry(\n prRef: string,\n cwd: string,\n retryCount: number,\n lang: Lang\n): {\n merged: true;\n attempts: number;\n alreadyMerged: boolean;\n baseRefName?: string;\n} {\n const tryReadPrMergeState = (): PrMergeStateMeta | null => {\n const viewed = runProcess(\n 'gh',\n ['pr', 'view', prRef, '--json', 'state,mergedAt,baseRefName'],\n cwd\n );\n if (viewed.code !== 0) return null;\n const text = viewed.stdout.trim();\n if (!text) return null;\n try {\n return JSON.parse(text) as PrMergeStateMeta;\n } catch {\n return null;\n }\n };\n\n const isMergedState = (meta: PrMergeStateMeta | null): boolean => {\n if (!meta) return false;\n if (meta.state?.toUpperCase() === 'MERGED') return true;\n return !!meta.mergedAt;\n };\n\n const attempts = Number.isFinite(retryCount) ? Math.max(1, retryCount) : 3;\n let lastError = '';\n for (let attempt = 1; attempt <= attempts; attempt++) {\n const merged = runProcess(\n 'gh',\n ['pr', 'merge', prRef, '--squash', '--delete-branch'],\n cwd\n );\n if (merged.code === 0) {\n const meta = tryReadPrMergeState();\n return {\n merged: true,\n attempts: attempt,\n alreadyMerged: false,\n baseRefName: meta?.baseRefName,\n };\n }\n\n lastError = (merged.stderr || merged.stdout || '').trim();\n const mergeState = tryReadPrMergeState();\n if (isMergedState(mergeState)) {\n return {\n merged: true,\n attempts: attempt,\n alreadyMerged: true,\n baseRefName: mergeState?.baseRefName,\n };\n }\n if (shouldRefreshHeadBranch(merged.stderr, merged.stdout)) {\n refreshPrHeadBranch(prRef, cwd, lang);\n continue;\n }\n }\n\n throw createCliError(\n 'EXECUTION_FAILED',\n tg(lang, 'mergeRetryFailed', {\n lastError: lastError ? ` ${lastError}` : '',\n })\n );\n}\n\nfunction toRetryCount(raw: string | undefined, lang: Lang): number {\n if (!raw) return 3;\n const parsed = Number.parseInt(raw, 10);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw createCliError('INVALID_ARGUMENT', tg(lang, 'retryInvalid'));\n }\n return parsed;\n}\n\nexport function githubCommand(program: Command): void {\n const commandLang = detectGithubCliLangSync(process.cwd());\n const github = program\n .command('github')\n .description(tg(commandLang, 'cmdGithubDescription'));\n\n github\n .command('issue [feature-name]')\n .description(tg(commandLang, 'cmdIssueDescription'))\n .option('--json', tg(commandLang, 'optJson'))\n .option('--component <component>', tg(commandLang, 'optComponent'))\n .option('--title <title>', tg(commandLang, 'optIssueTitle'))\n .option('--labels <labels>', tg(commandLang, 'optLabels'))\n .option('--body-file <path>', tg(commandLang, 'optIssueBodyFile'))\n .option('--assignee <assignee>', tg(commandLang, 'optIssueAssignee'))\n .option('--create', tg(commandLang, 'optIssueCreate'))\n .option(\n '--confirm <reply>',\n tg(commandLang, 'optIssueConfirm')\n )\n .action(async (featureName: string | undefined, options: GithubIssueOptions) => {\n try {\n const selectedComponent = resolveComponentOption(options.component);\n const { config, feature } = await resolveFeatureOrThrow(featureName, {\n component: selectedComponent,\n }, commandLang);\n\n const optionLabels = (options.labels || '').trim();\n const generatedLabels = parseLabels(optionLabels || undefined, config.lang);\n const paths = getFeatureDocPaths(feature);\n ensureDocsExist(\n config.docsDir,\n [paths.specPath, paths.planPath, paths.tasksPath],\n config.lang\n );\n const specContent = await fs.readFile(path.join(config.docsDir, paths.specPath), 'utf-8');\n const planContent = await fs.readFile(path.join(config.docsDir, paths.planPath), 'utf-8');\n const tasksContent = await fs.readFile(path.join(config.docsDir, paths.tasksPath), 'utf-8');\n const overview = resolveOverviewFromSpec(specContent, feature, config.lang);\n\n const defaultTitle = tg(config.lang, 'issueDefaultTitle', {\n slug: feature.slug,\n summary: resolveIssueTitleSummary(overview, feature, config.lang),\n });\n const generatedBody = buildIssueBody(\n specContent,\n planContent,\n tasksContent,\n overview,\n generatedLabels,\n paths,\n config.lang\n );\n ensureSections(\n generatedBody,\n getRequiredIssueSections(config.lang),\n tg(config.lang, 'kindIssue'),\n config.lang\n );\n\n const defaultBodyFile = toBodyFilePath(\n options.bodyFile,\n 'issue',\n config.docsDir,\n feature.type,\n config.lang\n );\n const explicitBodyFile = (options.bodyFile || '').trim();\n const preparedBody = await prepareGithubBody({\n create: options.create,\n explicitBodyFile,\n defaultBodyFile,\n workflowDraftPath: path.join(config.docsDir, paths.issuePath),\n generatedBody,\n requiredSections: getRequiredIssueSections(config.lang),\n kindLabel: tg(config.lang, 'kindIssue'),\n lang: config.lang,\n });\n const body = preparedBody.body;\n const bodyFile = preparedBody.bodyFile;\n const title =\n options.title?.trim() ||\n (preparedBody.source === 'workflow-ready'\n ? preparedBody.draftMetadata?.title\n : undefined) ||\n defaultTitle;\n const labels = parseLabels(\n optionLabels ||\n (preparedBody.source === 'workflow-ready'\n ? preparedBody.draftMetadata?.labels\n : undefined),\n config.lang\n );\n\n let issueUrl: string | undefined;\n if (options.create) {\n const projectGitCwd = resolveGithubProjectCwd(config, feature);\n ensureNoTodoPlaceholders(body, tg(config.lang, 'kindIssue'), config.lang);\n assertRemoteApproval(\n options.confirm,\n tg(config.lang, 'operationIssueCreate'),\n config.lang\n );\n const args = [\n 'issue',\n 'create',\n '--title',\n title,\n '--body-file',\n bodyFile,\n '--assignee',\n options.assignee?.trim() || '@me',\n ];\n for (const label of labels) {\n args.push('--label', label);\n }\n const created = runProcessOrThrow(\n 'gh',\n args,\n projectGitCwd,\n tg(config.lang, 'createIssueFailed')\n );\n issueUrl = created.stdout.trim() || undefined;\n }\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'ok',\n reasonCode: options.create ? 'ISSUE_CREATED' : 'ISSUE_TEMPLATE_GENERATED',\n feature: feature.folderName,\n component: feature.type,\n title,\n labels,\n body,\n bodyFile,\n issueUrl,\n },\n null,\n 2\n )\n );\n return;\n }\n\n console.log();\n console.log(chalk.bold(tg(config.lang, 'issueHeader')));\n console.log(chalk.gray(`- ${tg(config.lang, 'labelFeature')}: ${feature.folderName}`));\n console.log(chalk.gray(`- ${tg(config.lang, 'labelBodyFile')}: ${bodyFile}`));\n console.log(chalk.gray(`- ${tg(config.lang, 'labelLabels')}: ${labels.join(', ')}`));\n if (issueUrl) {\n console.log(chalk.green(tg(config.lang, 'issueCreated', { url: issueUrl })));\n } else {\n console.log(chalk.blue(tg(config.lang, 'issueTemplateGenerated')));\n }\n console.log();\n } catch (error) {\n const lang = detectGithubCliLangSync(process.cwd());\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'error',\n reasonCode: cliError.code,\n error: cliError.message,\n suggestions,\n })\n );\n } else {\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n }\n process.exitCode = 1;\n return;\n }\n });\n\n github\n .command('pr [feature-name]')\n .description(tg(commandLang, 'cmdPrDescription'))\n .option('--json', tg(commandLang, 'optJson'))\n .option('--component <component>', tg(commandLang, 'optComponent'))\n .option('--title <title>', tg(commandLang, 'optPrTitle'))\n .option('--labels <labels>', tg(commandLang, 'optLabels'))\n .option('--body-file <path>', tg(commandLang, 'optPrBodyFile'))\n .option('--assignee <assignee>', tg(commandLang, 'optPrAssignee'))\n .option('--base <branch>', tg(commandLang, 'optPrBase'), 'main')\n .option('--create', tg(commandLang, 'optPrCreate'))\n .option('--pr <ref>', tg(commandLang, 'optPrRef'))\n .option('--merge', tg(commandLang, 'optPrMerge'))\n .option(\n '--confirm <reply>',\n tg(commandLang, 'optPrConfirm')\n )\n .option('--retry <count>', tg(commandLang, 'optPrRetry'))\n .option('--screenshots <mode>', tg(commandLang, 'optPrScreenshots'), 'auto')\n .option('--mermaid <mode>', tg(commandLang, 'optPrMermaid'), 'auto')\n .option('--no-sync-tasks', tg(commandLang, 'optPrNoSyncTasks'))\n .option('--commit-sync', tg(commandLang, 'optPrCommitSync'))\n .action(async (featureName: string | undefined, options: GithubPrOptions) => {\n try {\n const selectedComponent = resolveComponentOption(options.component);\n const { config, feature } = await resolveFeatureOrThrow(featureName, {\n component: selectedComponent,\n }, commandLang);\n\n const optionLabels = (options.labels || '').trim();\n const generatedLabels = parseLabels(optionLabels || undefined, config.lang);\n const paths = getFeatureDocPaths(feature);\n ensureDocsExist(config.docsDir, [paths.specPath, paths.tasksPath], config.lang);\n const specContent = await fs.readFile(path.join(config.docsDir, paths.specPath), 'utf-8');\n const planPath = path.join(config.docsDir, paths.planPath);\n const planContent = (await fs.pathExists(planPath))\n ? await fs.readFile(planPath, 'utf-8')\n : '';\n const tasksContent = await fs.readFile(path.join(config.docsDir, paths.tasksPath), 'utf-8');\n const overview = resolveOverviewFromSpec(specContent, feature, config.lang);\n\n const defaultTitle = feature.issueNumber\n ? tg(config.lang, 'prDefaultTitleWithIssue', {\n issue: feature.issueNumber,\n slug: feature.slug,\n })\n : tg(config.lang, 'prDefaultTitleNoIssue', {\n slug: feature.slug,\n });\n const artifactPolicy = resolvePrArtifactPolicy(config, options);\n const generatedBody = buildPrBody(\n feature,\n specContent,\n planContent,\n tasksContent,\n overview,\n paths,\n artifactPolicy,\n config.lang\n );\n ensureSections(\n generatedBody,\n getRequiredPrSections(config.lang),\n tg(config.lang, 'kindPr'),\n config.lang\n );\n\n const defaultBodyFile = toBodyFilePath(\n options.bodyFile,\n 'pr',\n config.docsDir,\n feature.type,\n config.lang\n );\n const explicitBodyFile = (options.bodyFile || '').trim();\n const preparedBody = await prepareGithubBody({\n create: options.create,\n explicitBodyFile,\n defaultBodyFile,\n workflowDraftPath: path.join(config.docsDir, paths.prPath),\n generatedBody,\n requiredSections: getRequiredPrSections(config.lang),\n kindLabel: tg(config.lang, 'kindPr'),\n lang: config.lang,\n });\n const body = preparedBody.body;\n const bodyFile = preparedBody.bodyFile;\n const title =\n options.title?.trim() ||\n (preparedBody.source === 'workflow-ready'\n ? preparedBody.draftMetadata?.title\n : undefined) ||\n defaultTitle;\n const labels = parseLabels(\n optionLabels ||\n (preparedBody.source === 'workflow-ready'\n ? preparedBody.draftMetadata?.labels\n : undefined),\n config.lang\n );\n const baseBranch = options.base || 'main';\n\n const retryCount = toRetryCount(options.retry, config.lang);\n let prUrl = options.pr?.trim() || '';\n let mergedAttempts: number | undefined;\n let mergeAlreadyMerged: boolean | undefined;\n const postMergeWarnings: string[] = [];\n let syncChanged = false;\n const pushDocsSync = shouldPushDocsSync(config);\n\n if (options.create) {\n const projectGitCwd = resolveGithubProjectCwd(config, feature);\n ensureNoTodoPlaceholders(body, tg(config.lang, 'kindPr'), config.lang);\n ensurePrArtifacts(body, artifactPolicy, config.lang);\n assertRemoteApproval(\n options.confirm,\n tg(config.lang, 'operationPrCreate'),\n config.lang\n );\n const args = [\n 'pr',\n 'create',\n '--title',\n title,\n '--body-file',\n bodyFile,\n '--base',\n baseBranch,\n '--assignee',\n options.assignee?.trim() || '@me',\n ];\n for (const label of labels) {\n args.push('--label', label);\n }\n const created = runProcessOrThrow(\n 'gh',\n args,\n projectGitCwd,\n tg(config.lang, 'createPrFailed')\n );\n prUrl = created.stdout.trim();\n }\n\n if (!prUrl && options.merge) {\n prUrl = (feature.pr.link || '').trim();\n }\n\n if (!prUrl && options.merge) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n tg(config.lang, 'mergeRequiresPr')\n );\n }\n\n if (options.merge) {\n assertRemoteApproval(\n options.confirm,\n tg(config.lang, 'operationPrMerge'),\n config.lang\n );\n }\n\n if (prUrl && options.syncTasks !== false) {\n const synced = syncTasksPrMetadata(\n path.join(config.docsDir, paths.tasksPath),\n prUrl,\n 'Review',\n config.lang\n );\n syncChanged = synced.changed;\n const shouldCommitSync = !!options.commitSync || !!options.merge;\n if (syncChanged && shouldCommitSync) {\n const docsGitCwd = resolveGithubDocsCwd(config, feature);\n const message = feature.issueNumber\n ? tg(config.lang, 'syncCommitWithIssue', {\n issue: feature.issueNumber,\n folder: feature.folderName,\n })\n : tg(config.lang, 'syncCommitNoIssue', {\n folder: feature.folderName,\n });\n commitAndPushPath(\n docsGitCwd,\n synced.path,\n message,\n config.lang,\n { pushToOrigin: pushDocsSync }\n );\n }\n }\n\n if (options.merge) {\n const projectGitCwd = resolveGithubProjectCwd(config, feature);\n const merged = mergePrWithRetry(\n prUrl,\n projectGitCwd,\n retryCount,\n config.lang\n );\n mergedAttempts = merged.attempts;\n mergeAlreadyMerged = merged.alreadyMerged;\n\n if (prUrl && options.syncTasks !== false) {\n const mergedSync = syncTasksPrMetadata(\n path.join(config.docsDir, paths.tasksPath),\n prUrl,\n 'Approved',\n config.lang\n );\n syncChanged = syncChanged || mergedSync.changed;\n if (mergedSync.changed) {\n const docsGitCwd = resolveGithubDocsCwd(config, feature);\n const message = feature.issueNumber\n ? tg(config.lang, 'syncCommitWithIssue', {\n issue: feature.issueNumber,\n folder: feature.folderName,\n })\n : tg(config.lang, 'syncCommitNoIssue', {\n folder: feature.folderName,\n });\n commitAndPushPath(\n docsGitCwd,\n mergedSync.path,\n message,\n config.lang,\n { pushToOrigin: pushDocsSync }\n );\n }\n }\n\n const mergeBaseBranch = (merged.baseRefName || baseBranch || 'main').trim();\n const checkoutResult = runProcess(\n 'git',\n ['checkout', mergeBaseBranch],\n projectGitCwd\n );\n if (checkoutResult.code !== 0) {\n postMergeWarnings.push(\n tg(config.lang, 'postMergeCheckoutWarning', {\n base: mergeBaseBranch,\n detail: (checkoutResult.stderr || checkoutResult.stdout || '').trim(),\n })\n );\n } else {\n const pullResult = runProcess(\n 'git',\n ['pull', '--rebase', 'origin', mergeBaseBranch],\n projectGitCwd\n );\n if (pullResult.code !== 0) {\n postMergeWarnings.push(\n tg(config.lang, 'postMergePullWarning', {\n base: mergeBaseBranch,\n detail: (pullResult.stderr || pullResult.stdout || '').trim(),\n })\n );\n }\n }\n }\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'ok',\n reasonCode: options.merge\n ? 'PR_CREATED_SYNCED_MERGED'\n : options.create\n ? 'PR_CREATED_SYNCED'\n : 'PR_TEMPLATE_GENERATED',\n feature: feature.folderName,\n component: feature.type,\n title,\n labels,\n body,\n bodyFile,\n artifactPolicy: {\n screenshots: artifactPolicy.includeScreenshots,\n mermaid: artifactPolicy.includeMermaid,\n },\n prUrl: prUrl || undefined,\n syncChanged,\n merged: !!options.merge,\n mergeAttempts: mergedAttempts,\n mergeAlreadyMerged,\n postMergeWarnings:\n postMergeWarnings.length > 0 ? postMergeWarnings : undefined,\n },\n null,\n 2\n )\n );\n return;\n }\n\n console.log();\n console.log(chalk.bold(tg(config.lang, 'prHeader')));\n console.log(chalk.gray(`- ${tg(config.lang, 'labelFeature')}: ${feature.folderName}`));\n console.log(chalk.gray(`- ${tg(config.lang, 'labelBodyFile')}: ${bodyFile}`));\n console.log(chalk.gray(`- ${tg(config.lang, 'labelLabels')}: ${labels.join(', ')}`));\n if (prUrl) {\n console.log(chalk.gray(`- ${tg(config.lang, 'labelPr')}: ${prUrl}`));\n }\n if (syncChanged) {\n console.log(chalk.green(tg(config.lang, 'prTasksSynced')));\n }\n if (options.merge) {\n console.log(\n chalk.green(tg(config.lang, 'prMerged', { attempts: mergedAttempts ?? 1 }))\n );\n if (mergeAlreadyMerged) {\n console.log(chalk.yellow(tg(config.lang, 'prAlreadyMergedNotice')));\n }\n for (const warning of postMergeWarnings) {\n console.log(chalk.yellow(`⚠️ ${warning}`));\n }\n } else if (!options.create) {\n console.log(chalk.blue(tg(config.lang, 'prTemplateGenerated')));\n }\n console.log();\n } catch (error) {\n const lang = detectGithubCliLangSync(process.cwd());\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'error',\n reasonCode: cliError.code,\n error: cliError.message,\n suggestions,\n })\n );\n } else {\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n }\n process.exitCode = 1;\n return;\n }\n });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport path from 'path';\nimport { getConfig } from '../utils/config.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport {\n BuiltinDocId,\n getBuiltinDoc,\n getBuiltinDocIds,\n listBuiltinDocs,\n normalizeBuiltinDocId,\n toBuiltinDocCommand,\n} from '../utils/builtin-docs.js';\nimport { getGithubDraftContractForBuiltinDoc } from '../utils/github-draft-contract.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\n\ninterface DocsBaseOptions {\n json?: boolean;\n}\n\ninterface DocsGetOptions extends DocsBaseOptions {\n id?: string;\n}\n\nfunction ensureDocConfig(config: Awaited<ReturnType<typeof getConfig>>) {\n if (config) return config;\n throw createCliError(\n 'CONFIG_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.configNotFound')\n );\n}\n\nfunction toDocIdOrThrow(raw: string, lang: 'ko' | 'en'): BuiltinDocId {\n const docId = normalizeBuiltinDocId(raw);\n if (docId) return docId;\n const available = getBuiltinDocIds().join(', ');\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'docs.invalidDocId', {\n docId: raw,\n available,\n })\n );\n}\n\nexport function docsCommand(program: Command): void {\n const defaultLang = DEFAULT_LANG;\n const docs = program\n .command('docs')\n .description(tr(defaultLang, 'cli', 'docs.cmdDocsDescription'));\n\n docs\n .command('list')\n .description(tr(defaultLang, 'cli', 'docs.cmdListDescription'))\n .option('--json', tr(defaultLang, 'cli', 'docs.optJson'))\n .action(async (options: DocsBaseOptions) => {\n try {\n const config = ensureDocConfig(await getConfig(process.cwd()));\n const docsList = listBuiltinDocs(config.projectType, config.lang).map((doc) => ({\n id: doc.id,\n title: doc.title,\n command: toBuiltinDocCommand(doc.id),\n source: `builtin://${doc.relativePath}`,\n }));\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'ok',\n reasonCode: 'DOCS_LISTED',\n lang: config.lang,\n projectType: config.projectType,\n docs: docsList,\n },\n null,\n 2\n )\n );\n return;\n }\n\n console.log();\n console.log(chalk.bold(tr(config.lang, 'cli', 'docs.listHeader')));\n for (const doc of docsList) {\n console.log(`- ${doc.id}: ${doc.title}`);\n console.log(chalk.gray(` ${doc.command}`));\n }\n console.log();\n } catch (error) {\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'error',\n reasonCode: cliError.code,\n error: cliError.message,\n suggestions,\n })\n );\n } else {\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n }\n process.exitCode = 1;\n return;\n }\n });\n\n docs\n .command('get <doc-id>')\n .description(tr(defaultLang, 'cli', 'docs.cmdGetDescription'))\n .option('--json', tr(defaultLang, 'cli', 'docs.optJson'))\n .action(async (docRaw: string, options: DocsGetOptions) => {\n try {\n const config = ensureDocConfig(await getConfig(process.cwd()));\n const docId = toDocIdOrThrow(docRaw, config.lang);\n const loaded = await getBuiltinDoc(docId, config.projectType, config.lang);\n const followups = loaded.followups.map((id) => ({\n id,\n command: toBuiltinDocCommand(id),\n }));\n const contract = getGithubDraftContractForBuiltinDoc(docId, config.lang);\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'ok',\n reasonCode: 'DOC_FETCHED',\n lang: config.lang,\n projectType: config.projectType,\n doc: {\n id: loaded.entry.id,\n title: loaded.entry.title,\n source: `builtin://${loaded.entry.relativePath}`,\n hash: loaded.hash,\n content: loaded.content,\n },\n requiredDocs: followups,\n contract: contract || undefined,\n },\n null,\n 2\n )\n );\n return;\n }\n\n const relativeFromCwd = path.relative(process.cwd(), loaded.entry.absolutePath);\n console.log();\n console.log(chalk.bold(`📄 ${loaded.entry.id}: ${loaded.entry.title}`));\n console.log(\n chalk.gray(\n `${tr(config.lang, 'cli', 'docs.sourceLabel')}: ${\n relativeFromCwd || loaded.entry.absolutePath\n }`\n )\n );\n console.log(\n chalk.gray(`${tr(config.lang, 'cli', 'docs.hashLabel')}: ${loaded.hash}`)\n );\n console.log();\n process.stdout.write(loaded.content.endsWith('\\n') ? loaded.content : `${loaded.content}\\n`);\n if (followups.length > 0) {\n console.log();\n console.log(chalk.blue(`${tr(config.lang, 'cli', 'docs.nextDocs')}:`));\n for (const followup of followups) {\n console.log(chalk.gray(`- ${followup.command}`));\n }\n console.log();\n }\n } catch (error) {\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'error',\n reasonCode: cliError.code,\n error: cliError.message,\n suggestions,\n })\n );\n } else {\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n }\n process.exitCode = 1;\n return;\n }\n });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { getConfig } from '../utils/config.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport {\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\n\ninterface DetectOptions {\n dir?: string;\n json?: boolean;\n}\n\ntype DetectionReasonCode = 'PROJECT_DETECTED' | 'PROJECT_NOT_DETECTED';\ntype DetectionSource = 'config' | 'heuristic';\n\nexport function detectCommand(program: Command): void {\n program\n .command('detect')\n .description(tr(DEFAULT_LANG, 'cli', 'detect.cmdDescription'))\n .option('--dir <dir>', tr(DEFAULT_LANG, 'cli', 'detect.optDir'))\n .option('--json', tr(DEFAULT_LANG, 'cli', 'detect.optJson'))\n .action(async (options: DetectOptions) => {\n try {\n await runDetect(options);\n } catch (error) {\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'error',\n reasonCode: cliError.code,\n error: cliError.message,\n suggestions,\n })\n );\n } else {\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n }\n process.exitCode = 1;\n return;\n }\n });\n}\n\nasync function runDetect(options: DetectOptions): Promise<void> {\n const cwd = process.cwd();\n const targetCwd = options.dir ? path.resolve(cwd, options.dir) : cwd;\n const config = await getConfig(targetCwd);\n\n const detected = !!config;\n const reasonCode: DetectionReasonCode = detected\n ? 'PROJECT_DETECTED'\n : 'PROJECT_NOT_DETECTED';\n\n if (options.json) {\n if (!config) {\n console.log(\n JSON.stringify(\n {\n status: 'ok',\n reasonCode,\n isLeeSpecKitProject: false,\n targetCwd,\n docsDir: null,\n configPath: null,\n configFilePresent: false,\n detectionSource: null,\n projectType: null,\n lang: null,\n projectName: null,\n },\n null,\n 2\n )\n );\n return;\n }\n\n const configPath = path.join(config.docsDir, '.lee-spec-kit.json');\n const configFilePresent = await fs.pathExists(configPath);\n const detectionSource: DetectionSource = configFilePresent\n ? 'config'\n : 'heuristic';\n\n console.log(\n JSON.stringify(\n {\n status: 'ok',\n reasonCode,\n isLeeSpecKitProject: true,\n targetCwd,\n docsDir: config.docsDir,\n configPath: configFilePresent ? configPath : null,\n configFilePresent,\n detectionSource,\n projectType: config.projectType,\n lang: config.lang,\n projectName: config.projectName ?? null,\n },\n null,\n 2\n )\n );\n return;\n }\n\n const lang = config?.lang ?? DEFAULT_LANG;\n console.log();\n console.log(chalk.blue(tr(lang, 'cli', 'detect.header')));\n console.log(chalk.gray(`- ${tr(lang, 'cli', 'detect.labelTarget')}: ${targetCwd}`));\n\n if (!config) {\n console.log(chalk.yellow(`- ${tr(lang, 'cli', 'detect.resultNotDetected')}`));\n console.log(chalk.gray(`- ${tr(lang, 'cli', 'detect.notDetectedHint')}`));\n console.log();\n return;\n }\n\n const configPath = path.join(config.docsDir, '.lee-spec-kit.json');\n const configFilePresent = await fs.pathExists(configPath);\n const detectionSource: DetectionSource = configFilePresent\n ? 'config'\n : 'heuristic';\n\n console.log(chalk.green(`- ${tr(lang, 'cli', 'detect.resultDetected')}`));\n console.log(chalk.gray(`- ${tr(lang, 'cli', 'detect.labelDocsDir')}: ${config.docsDir}`));\n console.log(\n chalk.gray(\n `- ${tr(lang, 'cli', 'detect.labelConfigPath')}: ${\n configFilePresent ? configPath : '-'\n }`\n )\n );\n console.log(\n chalk.gray(\n `- ${tr(lang, 'cli', 'detect.labelSource')}: ${tr(\n lang,\n 'cli',\n detectionSource === 'config'\n ? 'detect.sourceConfig'\n : 'detect.sourceHeuristic'\n )}`\n )\n );\n console.log(\n chalk.gray(\n `- ${tr(lang, 'cli', 'detect.labelProjectType')}: ${config.projectType}`\n )\n );\n console.log(chalk.gray(`- ${tr(lang, 'cli', 'detect.labelLang')}: ${config.lang}`));\n if (config.projectName) {\n console.log(\n chalk.gray(\n `- ${tr(lang, 'cli', 'detect.labelProjectName')}: ${config.projectName}`\n )\n );\n }\n console.log();\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport { getConfig } from '../utils/config.js';\nimport { resolveProjectComponents } from '../utils/components.js';\nimport { resolveProjectGitCwd } from '../utils/context/git.js';\nimport { listSubdirectories, walkFiles } from '../utils/fs-walk.js';\nimport { runGitCapture } from '../utils/git-run.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport { resolveWorkflowPolicy } from '../utils/workflow.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\n\ninterface OnboardOptions {\n json?: boolean;\n strict?: boolean;\n}\n\ntype CheckStatus = 'ok' | 'warn' | 'block';\n\ninterface OnboardCheck {\n id: string;\n status: CheckStatus;\n title: string;\n message: string;\n path?: string;\n suggestedCommand?: string;\n}\n\ninterface OnboardResult {\n checks: OnboardCheck[];\n summary: {\n ok: number;\n warn: number;\n block: number;\n };\n status: 'ready' | 'needs_action' | 'blocked';\n}\n\nfunction t(lang: 'ko' | 'en', ko: string, en: string): string {\n return lang === 'ko' ? ko : en;\n}\n\nfunction quotePath(value: string): string {\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\n}\n\nfunction toSlug(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '') || 'project';\n}\n\nfunction isGitRepo(cwd: string): boolean {\n return runGitCapture(['rev-parse', '--is-inside-work-tree'], cwd) === 'true';\n}\n\nfunction hasHeadCommit(cwd: string): boolean {\n return !!runGitCapture(['rev-parse', '--verify', 'HEAD'], cwd);\n}\n\nfunction getOriginUrl(cwd: string): string | undefined {\n const out = runGitCapture(['remote', 'get-url', 'origin'], cwd);\n return out || undefined;\n}\n\nfunction hasTemplateMarkers(content: string): boolean {\n const patterns = [\n /\\{\\{projectName\\}\\}/,\n /\\{\\{date\\}\\}/,\n /\\(Write your project mission here\\)/,\n /\\(Write project-specific architecture principles here/i,\n /\\(Write project code quality standards here/i,\n /\\(Write project security principles here/i,\n /\\(Write your project-specific rules here\\)/,\n /\\(Override default rules or add additional rules here\\)/,\n /\\(Write project-specific workflows here\\)/,\n /\\(Write other rules here\\)/,\n /\\(프로젝트의 미션을 작성하세요\\)/,\n /\\(프로젝트별 아키텍처 원칙을 작성하세요/,\n /\\(프로젝트의 코드 품질 기준을 작성하세요/,\n /\\(프로젝트의 보안 원칙을 작성하세요/,\n /\\(여기에 프로젝트만의 규칙을 작성하세요\\)/,\n /\\(기본 규칙을 오버라이드하거나 추가 규칙을 작성하세요\\)/,\n /\\(프로젝트만의 워크플로우가 있다면 작성하세요\\)/,\n /\\(기타 규칙을 작성하세요\\)/,\n ];\n return patterns.some((pattern) => pattern.test(content));\n}\n\nasync function countFeatureDirs(\n docsDir: string,\n projectType: 'single' | 'multi'\n): Promise<number> {\n const featuresRoot = path.join(docsDir, 'features');\n if (projectType === 'single') {\n const dirs = await listSubdirectories(featuresRoot);\n return dirs.filter((value) => path.basename(value) !== 'feature-base').length;\n }\n\n const components = await listSubdirectories(featuresRoot);\n let total = 0;\n for (const componentDir of components) {\n const componentName = path.basename(componentDir).trim().toLowerCase();\n if (!componentName || componentName === 'feature-base') continue;\n const dirs = await listSubdirectories(componentDir);\n total += dirs.filter((value) => path.basename(value) !== 'feature-base').length;\n }\n return total;\n}\n\nasync function hasUserPrdFile(prdDir: string): Promise<boolean> {\n if (!(await fs.pathExists(prdDir))) return false;\n const files = await walkFiles(prdDir, {\n extensions: ['.md'],\n ignoreDirs: ['node_modules'],\n });\n return files.some((absolutePath) => path.basename(absolutePath).toLowerCase() !== 'readme.md');\n}\n\nfunction finalizeChecks(checks: OnboardCheck[]): OnboardResult {\n const summary = checks.reduce(\n (acc, check) => {\n acc[check.status] += 1;\n return acc;\n },\n { ok: 0, warn: 0, block: 0 }\n );\n const status =\n summary.block > 0\n ? 'blocked'\n : summary.warn > 0\n ? 'needs_action'\n : 'ready';\n\n return { checks, summary, status };\n}\n\nfunction printOnboardResult(lang: 'ko' | 'en', result: OnboardResult): void {\n console.log();\n console.log(chalk.bold(t(lang, '🧭 Onboarding 점검', '🧭 Onboarding Checks')));\n for (const check of result.checks) {\n const mark =\n check.status === 'ok'\n ? chalk.green('✅')\n : check.status === 'warn'\n ? chalk.yellow('⚠️')\n : chalk.red('❌');\n const level =\n check.status === 'ok'\n ? chalk.green('OK')\n : check.status === 'warn'\n ? chalk.yellow('WARN')\n : chalk.red('BLOCK');\n console.log(`${mark} [${level}] ${check.title}`);\n console.log(` ${check.message}`);\n if (check.path) console.log(chalk.gray(` path: ${check.path}`));\n if (check.suggestedCommand) {\n console.log(chalk.gray(` ${t(lang, '다음 명령', 'next')}: ${check.suggestedCommand}`));\n }\n }\n console.log();\n console.log(\n chalk.bold(\n t(\n lang,\n `요약: OK ${result.summary.ok}, WARN ${result.summary.warn}, BLOCK ${result.summary.block}`,\n `Summary: OK ${result.summary.ok}, WARN ${result.summary.warn}, BLOCK ${result.summary.block}`\n )\n )\n );\n if (result.status === 'ready') {\n console.log(chalk.green(t(lang, '온보딩 준비가 완료되었습니다.', 'Onboarding checks passed.')));\n } else if (result.status === 'needs_action') {\n console.log(chalk.yellow(t(lang, '추가 정리가 필요합니다.', 'Some onboarding actions are required.')));\n } else {\n console.log(chalk.red(t(lang, '온보딩 선행 작업이 필요합니다.', 'Onboarding is blocked by required setup.')));\n }\n console.log();\n}\n\nasync function runOnboardChecks(config: NonNullable<Awaited<ReturnType<typeof getConfig>>>): Promise<OnboardResult> {\n const lang = config.lang;\n const checks: OnboardCheck[] = [];\n const docsDir = config.docsDir;\n\n const docsGitReady = isGitRepo(docsDir);\n if (!docsGitReady) {\n checks.push({\n id: 'docs_git_repo',\n status: 'block',\n title: t(lang, 'docs Git 레포 초기화', 'Docs git repository initialized'),\n message: t(\n lang,\n 'docs 경로가 Git 레포지토리가 아닙니다.',\n 'Docs directory is not a git repository.'\n ),\n path: docsDir,\n suggestedCommand: `git -C ${quotePath(docsDir)} init`,\n });\n } else {\n checks.push({\n id: 'docs_git_repo',\n status: 'ok',\n title: t(lang, 'docs Git 레포 초기화', 'Docs git repository initialized'),\n message: t(lang, 'docs Git 레포가 확인되었습니다.', 'Docs git repository is available.'),\n path: docsDir,\n });\n\n if (!hasHeadCommit(docsDir)) {\n checks.push({\n id: 'docs_initial_commit',\n status: 'warn',\n title: t(lang, 'docs 초기 커밋', 'Docs initial commit'),\n message: t(\n lang,\n 'docs 첫 커밋이 없습니다. 초기 설정 커밋을 먼저 생성하세요.',\n 'No initial commit found in docs repo. Create an initial setup commit first.'\n ),\n path: docsDir,\n suggestedCommand:\n `git -C ${quotePath(docsDir)} add . && ` +\n `git -C ${quotePath(docsDir)} commit -m \"docs: onboard setup\"`,\n });\n } else {\n checks.push({\n id: 'docs_initial_commit',\n status: 'ok',\n title: t(lang, 'docs 초기 커밋', 'Docs initial commit'),\n message: t(lang, 'docs 초기 커밋이 존재합니다.', 'Initial commit exists in docs repo.'),\n path: docsDir,\n });\n }\n\n const docsDirty = runGitCapture(['status', '--porcelain=v1'], docsDir);\n if (docsDirty === undefined) {\n checks.push({\n id: 'docs_worktree',\n status: 'warn',\n title: t(lang, 'docs 작업 트리 상태', 'Docs worktree status'),\n message: t(\n lang,\n 'docs 변경 상태를 확인할 수 없습니다.',\n 'Unable to read docs worktree status.'\n ),\n path: docsDir,\n });\n } else if (docsDirty.trim().length > 0) {\n checks.push({\n id: 'docs_worktree',\n status: 'warn',\n title: t(lang, 'docs 작업 트리 상태', 'Docs worktree status'),\n message: t(\n lang,\n '커밋되지 않은 docs 변경사항이 있습니다.',\n 'Uncommitted docs changes were found.'\n ),\n path: docsDir,\n suggestedCommand:\n `git -C ${quotePath(docsDir)} add . && ` +\n `git -C ${quotePath(docsDir)} commit -m \"docs: onboard updates\"`,\n });\n } else {\n checks.push({\n id: 'docs_worktree',\n status: 'ok',\n title: t(lang, 'docs 작업 트리 상태', 'Docs worktree status'),\n message: t(lang, 'docs 작업 트리가 깨끗합니다.', 'Docs worktree is clean.'),\n path: docsDir,\n });\n }\n }\n\n const constitutionPath = path.join(docsDir, 'agents', 'constitution.md');\n if (!(await fs.pathExists(constitutionPath))) {\n checks.push({\n id: 'constitution_exists',\n status: 'block',\n title: t(lang, 'Constitution 작성', 'Constitution setup'),\n message: t(\n lang,\n '`agents/constitution.md` 파일이 없습니다.',\n '`agents/constitution.md` is missing.'\n ),\n path: constitutionPath,\n suggestedCommand: `npx lee-spec-kit update --agents`,\n });\n } else {\n const content = await fs.readFile(constitutionPath, 'utf-8');\n if (hasTemplateMarkers(content)) {\n checks.push({\n id: 'constitution_filled',\n status: 'block',\n title: t(lang, 'Constitution 작성', 'Constitution setup'),\n message: t(\n lang,\n 'Constitution에 템플릿 placeholder가 남아 있습니다. 프로젝트 기준으로 먼저 작성하세요.',\n 'Constitution still contains template placeholders. Fill project-specific content first.'\n ),\n path: constitutionPath,\n });\n } else {\n checks.push({\n id: 'constitution_filled',\n status: 'ok',\n title: t(lang, 'Constitution 작성', 'Constitution setup'),\n message: t(lang, 'Constitution이 작성되었습니다.', 'Constitution looks filled.'),\n path: constitutionPath,\n });\n }\n }\n\n const customPath = path.join(docsDir, 'agents', 'custom.md');\n if (await fs.pathExists(customPath)) {\n const content = await fs.readFile(customPath, 'utf-8');\n if (hasTemplateMarkers(content)) {\n checks.push({\n id: 'custom_optional',\n status: 'warn',\n title: t(lang, 'Custom 규칙 문서', 'Custom rules doc'),\n message: t(\n lang,\n '`agents/custom.md`는 선택 항목이지만, 현재 템플릿 상태입니다. 필요하면 규칙을 작성하세요.',\n '`agents/custom.md` is optional, but it still looks like template content. Fill it if your project needs custom rules.'\n ),\n path: customPath,\n });\n } else {\n checks.push({\n id: 'custom_optional',\n status: 'ok',\n title: t(lang, 'Custom 규칙 문서', 'Custom rules doc'),\n message: t(lang, 'Custom 규칙 문서가 구성되었습니다.', 'Custom rules doc looks configured.'),\n path: customPath,\n });\n }\n }\n\n const prdDir = path.join(docsDir, 'prd');\n const featureCount = await countFeatureDirs(docsDir, config.projectType);\n const prdReady = await hasUserPrdFile(prdDir);\n if (!prdReady) {\n checks.push({\n id: 'prd_ready',\n status: featureCount === 0 ? 'block' : 'warn',\n title: t(lang, 'PRD 준비 상태', 'PRD readiness'),\n message:\n featureCount === 0\n ? t(\n lang,\n 'PRD 문서가 비어 있습니다. Feature 생성 전에 PRD부터 작성하세요.',\n 'PRD is empty. Write PRD first before creating features.'\n )\n : t(\n lang,\n 'PRD 문서가 비어 있습니다. 이미 Feature가 있다면 PRD를 보강하세요.',\n 'PRD is empty. If features already exist, fill PRD as soon as possible.'\n ),\n path: prdDir,\n suggestedCommand: `touch ${quotePath(path.join(prdDir, `${toSlug(config.projectName || 'project')}-prd.md`))}`,\n });\n } else {\n checks.push({\n id: 'prd_ready',\n status: 'ok',\n title: t(lang, 'PRD 준비 상태', 'PRD readiness'),\n message: t(lang, 'PRD 문서가 확인되었습니다.', 'PRD document is present.'),\n path: prdDir,\n });\n }\n\n const workflowPolicy = resolveWorkflowPolicy(config.workflow);\n if (workflowPolicy.mode === 'github') {\n const projectKeys =\n config.projectType === 'multi'\n ? resolveProjectComponents(config.projectType, config.components)\n : ['single'];\n\n for (const key of projectKeys) {\n const resolved = resolveProjectGitCwd(config, key, lang);\n const title = t(\n lang,\n config.projectType === 'multi'\n ? `프로젝트 Git 연결 (${key})`\n : '프로젝트 Git 연결',\n config.projectType === 'multi'\n ? `Project git connectivity (${key})`\n : 'Project git connectivity'\n );\n if (resolved.warning || !resolved.cwd) {\n checks.push({\n id: `project_git_${key}`,\n status: 'block',\n title,\n message:\n resolved.warning ||\n t(\n lang,\n '프로젝트 레포 경로를 확인할 수 없습니다.',\n 'Project repository path could not be resolved.'\n ),\n });\n continue;\n }\n\n if (!isGitRepo(resolved.cwd)) {\n checks.push({\n id: `project_git_${key}`,\n status: 'block',\n title,\n message: t(\n lang,\n '프로젝트 경로가 Git 레포지토리가 아닙니다.',\n 'Project path is not a git repository.'\n ),\n path: resolved.cwd,\n suggestedCommand: `git -C ${quotePath(resolved.cwd)} init`,\n });\n continue;\n }\n\n const origin = getOriginUrl(resolved.cwd);\n if (!origin) {\n checks.push({\n id: `project_origin_${key}`,\n status: 'block',\n title: t(\n lang,\n config.projectType === 'multi'\n ? `프로젝트 origin 설정 (${key})`\n : '프로젝트 origin 설정',\n config.projectType === 'multi'\n ? `Project origin configured (${key})`\n : 'Project origin configured'\n ),\n message: t(\n lang,\n 'GitHub 워크플로우를 위해 프로젝트 레포의 origin remote가 필요합니다.',\n 'Project repo origin remote is required for github workflow.'\n ),\n path: resolved.cwd,\n suggestedCommand: `git -C ${quotePath(resolved.cwd)} remote add origin <git-url>`,\n });\n } else {\n checks.push({\n id: `project_origin_${key}`,\n status: 'ok',\n title: t(\n lang,\n config.projectType === 'multi'\n ? `프로젝트 origin 설정 (${key})`\n : '프로젝트 origin 설정',\n config.projectType === 'multi'\n ? `Project origin configured (${key})`\n : 'Project origin configured'\n ),\n message: t(\n lang,\n `origin이 설정되어 있습니다: ${origin}`,\n `origin is configured: ${origin}`\n ),\n path: resolved.cwd,\n });\n }\n }\n }\n\n if (config.docsRepo === 'standalone' && config.pushDocs) {\n const origin = getOriginUrl(docsDir);\n if (!origin) {\n checks.push({\n id: 'docs_origin',\n status: 'block',\n title: t(lang, 'docs origin 설정', 'Docs origin configured'),\n message: t(\n lang,\n 'standalone + pushDocs=true 설정에서는 docs origin remote가 필요합니다.',\n 'docs origin remote is required when standalone + pushDocs=true.'\n ),\n path: docsDir,\n suggestedCommand: `git -C ${quotePath(docsDir)} remote add origin <docs-git-url>`,\n });\n } else {\n checks.push({\n id: 'docs_origin',\n status: 'ok',\n title: t(lang, 'docs origin 설정', 'Docs origin configured'),\n message: t(lang, `origin이 설정되어 있습니다: ${origin}`, `origin is configured: ${origin}`),\n path: docsDir,\n });\n }\n }\n\n return finalizeChecks(checks);\n}\n\nexport function onboardCommand(program: Command): void {\n program\n .command('onboard')\n .description('Run onboarding checks for initial setup')\n .option('--json', 'Output in JSON format for agents')\n .option('--strict', 'Exit with code 1 when WARN/BLOCK exists')\n .action(async (options: OnboardOptions) => {\n try {\n await runOnboard(options);\n } catch (error) {\n const config = await getConfig(process.cwd());\n const lang = config?.lang ?? DEFAULT_LANG;\n const cliError = toCliError(error);\n const suggestions = getCliErrorSuggestions(cliError.code, lang);\n if (options.json) {\n console.log(\n JSON.stringify({\n status: 'error',\n reasonCode: cliError.code,\n error: cliError.message,\n suggestions,\n })\n );\n } else {\n console.error(\n chalk.red(tr(lang, 'cli', 'common.errorLabel')),\n chalk.red(`[${cliError.code}] ${cliError.message}`)\n );\n printCliErrorSuggestions(suggestions, lang);\n }\n process.exitCode = 1;\n return;\n }\n });\n}\n\nasync function runOnboard(options: OnboardOptions): Promise<void> {\n const config = await getConfig(process.cwd());\n if (!config) {\n throw createCliError(\n 'CONFIG_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.configNotFound')\n );\n }\n const lang = config.lang;\n const result = await runOnboardChecks(config);\n\n if (options.json) {\n const payload = {\n status: 'ok',\n reasonCode:\n result.status === 'ready'\n ? 'ONBOARD_READY'\n : result.status === 'needs_action'\n ? 'ONBOARD_NEEDS_ACTION'\n : 'ONBOARD_BLOCKED',\n docsDir: config.docsDir,\n docsRepo: config.docsRepo || 'embedded',\n workflow: resolveWorkflowPolicy(config.workflow),\n summary: result.summary,\n checks: result.checks,\n };\n console.log(JSON.stringify(payload, null, 2));\n } else {\n printOnboardResult(lang, result);\n }\n\n if (options.strict && (result.summary.warn > 0 || result.summary.block > 0)) {\n process.exitCode = 1;\n }\n}\n","import chalk from 'chalk';\n\nfunction isBannerDisabled(): boolean {\n const v = (\n process.env.LEE_SPEC_KIT_NO_BANNER ||\n ''\n ).trim();\n return v === '1';\n}\n\nexport function getBanner(opts?: { version?: string }): string {\n if (isBannerDisabled()) return '';\n\n // Keep the original glyph design, but split into 3 blocks (LEE / SPEC / KIT)\n // to avoid an overly wide single-line banner in typical terminals.\n const lee = `\n░██ ░██████████ ░██████████ \n░██ ░██ ░██ \n░██ ░██ ░██ \n░██ ░█████████ ░█████████ \n░██ ░██ ░██ \n░██ ░██ ░██ \n░██████████ ░██████████ ░██████████ \n `;\n\n const spec = `\n ░██████ ░█████████ ░██████████ ░██████ \n ░██ ░██ ░██ ░██ ░██ ░██ ░██ \n░██ ░██ ░██ ░██ ░██ \n ░████████ ░█████████ ░█████████ ░██ \n ░██ ░██ ░██ ░██ \n ░██ ░██ ░██ ░██ ░██ ░██ \n ░██████ ░██ ░██████████ ░██████ \n `;\n\n const kit = `\n░██ ░██ ░██████░██████████\n░██ ░██ ░██ ░██ \n░██ ░██ ░██ ░██ \n░███████ ░██ ░██ \n░██ ░██ ░██ ░██ \n░██ ░██ ░██ ░██ \n░██ ░██ ░██████ ░██ \n `;\n\n const ascii = `${lee}${spec}${kit}`;\n\n const version = opts?.version ? `v${opts.version}` : '';\n const footer = version ? `\\n${version}\\n` : '\\n';\n\n if (process.stdout.isTTY) {\n return `${chalk.cyan(ascii)}${chalk.gray(footer)}`;\n }\n return `${ascii}${footer}`;\n}\n","import fs from 'fs-extra';\nimport path from 'path';\nimport os from 'os';\nimport chalk from 'chalk';\nimport { spawn } from 'child_process';\nimport { DEFAULT_LANG, Lang, tr } from './i18n.js';\n\ninterface VersionCache {\n lastCheck: number;\n latestVersion: string | null;\n}\n\nconst CACHE_FILE = path.join(os.homedir(), '.lee-spec-kit-version-cache.json');\nconst CHECK_INTERVAL = 24 * 60 * 60 * 1000; // 24시간\n\n// 현재 패키지 버전 가져오기\nfunction getCurrentVersion(): string {\n try {\n // dist에서 실행될 때 상대 경로로 package.json 찾기\n const packageJsonPath = path.join(__dirname, '..', 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n const pkg = fs.readJsonSync(packageJsonPath);\n return pkg.version;\n }\n } catch {\n // 무시\n }\n return '0.0.0';\n}\n\n// 캐시 읽기\nfunction readCache(): VersionCache | null {\n try {\n if (fs.existsSync(CACHE_FILE)) {\n return fs.readJsonSync(CACHE_FILE);\n }\n } catch {\n // 무시\n }\n return null;\n}\n\n// 버전 비교 (semver 간단 구현)\nfunction isNewerVersion(current: string, latest: string): boolean {\n const currentParts = current.split('.').map(Number);\n const latestParts = latest.split('.').map(Number);\n\n for (let i = 0; i < 3; i++) {\n if ((latestParts[i] || 0) > (currentParts[i] || 0)) return true;\n if ((latestParts[i] || 0) < (currentParts[i] || 0)) return false;\n }\n return false;\n}\n\nfunction resolveUpdateNoticeLang(): Lang {\n const envLang = (process.env.LANG || '').toLowerCase();\n if (envLang.includes('ko')) return 'ko';\n return DEFAULT_LANG;\n}\n\nfunction printUpdateNotice(current: string, latest: string, lang: Lang): void {\n console.log();\n console.log(chalk.yellow(tr(lang, 'cli', 'versionCheck.noticeAvailable', { latest, current })));\n console.log(chalk.gray(tr(lang, 'cli', 'versionCheck.updateCommand')));\n console.log();\n}\n\n// 백그라운드에서 버전 체크 실행 (detached)\nfunction spawnBackgroundVersionCheck(): void {\n const script = `\n const fs = require('fs');\n const path = require('path');\n const os = require('os');\n \n const CACHE_FILE = path.join(os.homedir(), '.lee-spec-kit-version-cache.json');\n \n fetch('https://registry.npmjs.org/lee-spec-kit/latest')\n .then(res => res.json())\n .then(data => {\n const cache = { lastCheck: Date.now(), latestVersion: data.version };\n fs.writeFileSync(CACHE_FILE, JSON.stringify(cache));\n })\n .catch(() => {});\n `;\n\n const child = spawn('node', ['-e', script], {\n detached: true,\n stdio: 'ignore',\n });\n child.unref();\n}\n\n// 새 버전 확인 및 알림\nexport function checkForUpdates(): void {\n try {\n const lang = resolveUpdateNoticeLang();\n const cache = readCache();\n const now = Date.now();\n\n // 24시간 내에 이미 체크했으면 캐시 사용\n if (cache && now - cache.lastCheck < CHECK_INTERVAL) {\n if (cache.latestVersion) {\n const currentVersion = getCurrentVersion();\n if (isNewerVersion(currentVersion, cache.latestVersion)) {\n printUpdateNotice(currentVersion, cache.latestVersion, lang);\n }\n }\n return;\n }\n\n // 백그라운드에서 버전 체크 (메인 프로세스 차단 안 함)\n spawnBackgroundVersionCheck();\n } catch {\n // 오류 무시 - 업데이트 체크 실패해도 CLI는 정상 동작\n }\n}\n","import { program } from 'commander';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport { initCommand } from './commands/init.js';\nimport { featureCommand } from './commands/feature.js';\nimport { statusCommand } from './commands/status.js';\nimport { updateCommand } from './commands/update.js';\nimport { configCommand } from './commands/config.js';\nimport { contextCommand } from './commands/context.js';\nimport { doctorCommand } from './commands/doctor.js';\nimport { viewCommand } from './commands/view.js';\nimport { flowCommand } from './commands/flow.js';\nimport { githubCommand } from './commands/github.js';\nimport { docsCommand } from './commands/docs.js';\nimport { detectCommand } from './commands/detect.js';\nimport { onboardCommand } from './commands/onboard.js';\nimport { getBanner } from './utils/banner.js';\nimport { checkForUpdates } from './utils/version-check.js';\n\nfunction shouldShowBanner(): boolean {\n const argv = process.argv.slice(2);\n const disabledByEnv = (process.env.LEE_SPEC_KIT_NO_BANNER || '').trim() === '1';\n const disabledByFlag = argv.includes('--no-banner');\n const hasJsonFlag = argv.includes('--json');\n const isNonTtyOutput = !process.stdout.isTTY;\n if (disabledByEnv || disabledByFlag) return false;\n // Keep machine output lean: suppress banner for JSON/non-TTY executions.\n if (hasJsonFlag || isNonTtyOutput) return false;\n return true;\n}\n\nfunction shouldCheckForUpdates(): boolean {\n const argv = process.argv.slice(2);\n const hasJsonFlag = argv.includes('--json');\n const isHelpOrVersion =\n argv.includes('--help') ||\n argv.includes('-h') ||\n argv.includes('--version') ||\n argv.includes('-V');\n\n const disabledByEnv =\n (process.env.LEE_SPEC_KIT_NO_UPDATE_CHECK || '').trim() === '1';\n\n // 머신 출력(JSON) / 파이프 환경에서는 stdout 오염 방지\n if (hasJsonFlag) return false;\n if (!process.stdout.isTTY) return false;\n if (isHelpOrVersion) return false;\n if (disabledByEnv) return false;\n\n return true;\n}\n\n// 비동기로 새 버전 확인 (CLI 실행 차단하지 않음)\nif (shouldCheckForUpdates()) checkForUpdates();\n\nfunction getCliVersion(): string {\n try {\n const packageJsonPath = path.join(__dirname, '..', 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n const pkg = fs.readJsonSync(packageJsonPath);\n if (pkg?.version) return String(pkg.version);\n }\n } catch {\n // ignore\n }\n return '0.0.0';\n}\n\nconst cliVersion = getCliVersion();\n\nprogram\n .name('lee-spec-kit')\n .description(\n 'Project documentation structure generator for AI-assisted development'\n )\n .version(cliVersion)\n .option('--no-banner', 'Hide banner in help output');\n\nif (shouldShowBanner()) {\n program.addHelpText('beforeAll', getBanner({ version: cliVersion }));\n}\n\ninitCommand(program);\nfeatureCommand(program);\nstatusCommand(program);\nupdateCommand(program);\nconfigCommand(program);\ncontextCommand(program);\ndoctorCommand(program);\nviewCommand(program);\nflowCommand(program);\ngithubCommand(program);\ndocsCommand(program);\ndetectCommand(program);\nonboardCommand(program);\n\nawait program.parseAsync();\n"]}
|