lee-spec-kit 0.8.1 → 0.8.3

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/fs-walk.ts","../src/utils/template.ts","../src/adapters/DefaultFileSystemAdapter.ts","../src/utils/paths.ts","../src/utils/locales/ko/cli.ts","../src/utils/locales/ko.ts","../src/utils/locales/en/cli.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/agents-md.ts","../src/utils/standalone-workspace.ts","../src/utils/init/options.ts","../src/adapters/schema/lee-spec-kit/project.ts","../src/adapters/schema/lee-spec-kit/feature.ts","../src/adapters/schema/lee-spec-kit/index.ts","../src/adapters/schema/index.ts","../src/config/load.ts","../src/config/types.ts","../src/commands/init.ts","../src/utils/local-workflow-template.ts","../src/utils/idea-promotion.ts","../src/commands/feature.ts","../src/commands/idea.ts","../src/commands/update.ts","../src/commands/config.ts","../src/commands/github/process.ts","../src/utils/feature-resolver.ts","../src/utils/github-draft-contract.ts","../src/services/GithubWorkflowService.ts","../src/commands/github.ts","../src/utils/builtin-docs.ts","../src/commands/docs.ts","../src/commands/detect.ts","../src/commands/integrations.ts","../src/utils/workflow-stage.ts","../src/commands/workflow-stage.ts","../src/commands/workflow-audit.ts","../src/utils/unmanaged-docs.ts","../src/commands/commit-audit.ts","../src/utils/banner.ts","../src/utils/version-check.ts","../src/index.ts"],"names":["path","__filename","__dirname","fs","next","execFileSync","program","lang","response","relativePath","config","chalk","prompts","getGitTopLevelOrNull","escapeRegExp","runGhJson","createHash","os","result","key","normalizeSlashes"],"mappings":"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","file":"index.js","sourcesContent":["import path from 'path';\nimport { IFileSystemAdapter } from '../ports/FileSystemAdapter.js';\n\ninterface WalkFilesOptions {\n extensions?: string[];\n ignoreDirs?: string[];\n}\n\nexport async function walkFiles(\n fsAdapter: IFileSystemAdapter,\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 || [])\n .map((value) => value.trim().toLowerCase())\n .filter(Boolean)\n );\n\n async function visit(current: string): Promise<void> {\n const entries = await fsAdapter.readdir(current);\n for (const entryName of entries) {\n const absolute = path.join(current, entryName);\n const stat = await fsAdapter.stat(absolute);\n if (stat.isDirectory()) {\n if (ignored.has(entryName.trim().toLowerCase())) continue;\n await visit(absolute);\n continue;\n }\n if (!stat.isFile()) continue;\n if (normalizedExtensions.size > 0) {\n const ext = path.extname(entryName).toLowerCase();\n if (!normalizedExtensions.has(ext)) continue;\n }\n out.push(absolute);\n }\n }\n\n if (await fsAdapter.pathExists(rootDir)) {\n await visit(rootDir);\n }\n return out;\n}\n\nexport async function listSubdirectories(\n fsAdapter: IFileSystemAdapter,\n rootDir: string\n): Promise<string[]> {\n if (!(await fsAdapter.pathExists(rootDir))) return [];\n const entries = await fsAdapter.readdir(rootDir);\n const dirs: string[] = [];\n for (const entryName of entries) {\n const absolute = path.join(rootDir, entryName);\n const stat = await fsAdapter.stat(absolute);\n if (stat.isDirectory()) {\n dirs.push(absolute);\n }\n }\n return dirs;\n}\n","import { IFileSystemAdapter } from '../ports/FileSystemAdapter.js';\nimport { walkFiles } from './fs-walk.js';\n\nexport async function copyTemplates(\n fsImpl: IFileSystemAdapter,\n src: string,\n dest: string\n): Promise<void> {\n await fsImpl.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 fsImpl: IFileSystemAdapter,\n dir: string,\n replacements: Record<string, string>\n): Promise<void> {\n const files = await walkFiles(fsImpl, dir, { extensions: ['.md'] });\n\n for (const file of files) {\n let content = await fsImpl.readFile(file, 'utf-8');\n content = applyReplacements(content, replacements);\n\n await fsImpl.writeFile(file, content, 'utf-8');\n }\n\n // .sh 파일도 치환\n const shFiles = await walkFiles(fsImpl, dir, { extensions: ['.sh'] });\n\n for (const file of shFiles) {\n let content = await fsImpl.readFile(file, 'utf-8');\n content = applyReplacements(content, replacements);\n\n await fsImpl.writeFile(file, content, 'utf-8');\n }\n}\n","/* eslint-disable no-undef */\nimport fs from 'fs-extra';\nimport { IFileSystemAdapter } from '../ports/FileSystemAdapter.js';\n\nexport class DefaultFileSystemAdapter implements IFileSystemAdapter {\n async readFile(filePath: string, encoding?: BufferEncoding): Promise<string> {\n return encoding\n ? fs.readFile(filePath, encoding)\n : fs.readFile(filePath, 'utf-8');\n }\n\n readFileSync(filePath: string, encoding?: BufferEncoding): string {\n return encoding\n ? fs.readFileSync(filePath, encoding)\n : fs.readFileSync(filePath, 'utf-8');\n }\n\n async writeFile(\n filePath: string,\n data: string | Buffer,\n encoding?: BufferEncoding\n ): Promise<void> {\n return encoding\n ? fs.writeFile(filePath, data, encoding)\n : fs.writeFile(filePath, data);\n }\n\n writeFileSync(\n filePath: string,\n data: string | Buffer,\n encoding?: BufferEncoding\n ): void {\n return encoding\n ? fs.writeFileSync(filePath, data, encoding)\n : fs.writeFileSync(filePath, data);\n }\n\n async appendFile(\n filePath: string,\n data: string | Buffer,\n encoding?: BufferEncoding\n ): Promise<void> {\n return encoding\n ? fs.appendFile(filePath, data, encoding)\n : fs.appendFile(filePath, data);\n }\n\n appendFileSync(\n filePath: string,\n data: string | Buffer,\n encoding?: BufferEncoding\n ): void {\n return encoding\n ? fs.appendFileSync(filePath, data, encoding)\n : fs.appendFileSync(filePath, data);\n }\n\n async pathExists(filePath: string): Promise<boolean> {\n return fs.pathExists(filePath);\n }\n\n existsSync(filePath: string): boolean {\n return fs.existsSync(filePath);\n }\n\n async ensureDir(dirPath: string): Promise<void> {\n return fs.ensureDir(dirPath);\n }\n\n ensureDirSync(dirPath: string): void {\n return fs.ensureDirSync(dirPath);\n }\n\n async ensureFile(filePath: string): Promise<void> {\n return fs.ensureFile(filePath);\n }\n\n ensureFileSync(filePath: string): void {\n return fs.ensureFileSync(filePath);\n }\n\n async remove(filePath: string): Promise<void> {\n return fs.remove(filePath);\n }\n\n removeSync(filePath: string): void {\n return fs.removeSync(filePath);\n }\n\n async copy(\n src: string,\n dest: string,\n options?: fs.CopyOptions\n ): Promise<void> {\n return fs.copy(src, dest, options);\n }\n\n copySync(src: string, dest: string, options?: fs.CopyOptionsSync): void {\n return fs.copySync(src, dest, options);\n }\n\n async stat(filePath: string): Promise<fs.Stats> {\n return fs.stat(filePath);\n }\n\n statSync(filePath: string): fs.Stats {\n return fs.statSync(filePath);\n }\n\n async readdir(dirPath: string): Promise<string[]> {\n return fs.readdir(dirPath);\n }\n\n readdirSync(dirPath: string): string[] {\n return fs.readdirSync(dirPath);\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","export const koCli = {\n 'common.errorLabel': '오류:',\n 'common.canceled': '작업이 취소되었습니다.',\n 'common.configNotFound':\n '설정 파일을 찾을 수 없습니다. 먼저 init을 실행해주세요.',\n 'common.docsNotFound':\n 'docs 폴더를 찾을 수 없습니다. 먼저 init을 실행하세요.',\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 'feature.ideaNotFound': 'Idea 문서를 찾을 수 없습니다: {ref}',\n 'feature.ideaAmbiguous':\n '{ref}와 매칭되는 Idea 문서가 여러 개입니다. 정확한 경로나 전체 indexed 이름을 사용하세요.',\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.agentsUpdated': 'agents/ 업데이트 완료',\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 'init.selectLangPrompt': '문서 언어를 선택하세요:',\n 'init.currentDirectoryLabel': '📍 현재 위치',\n 'init.gitDetected': '✅ Git 레포지토리 감지됨',\n 'init.insideProjectRoot': '현재 프로젝트 루트 내에서 실행하고 계십니다.',\n 'init.modeEmbeddedDesc':\n '• embedded: 여기에 ./docs 폴더를 생성합니다. 프로젝트와 함께 관리됩니다.',\n 'init.modeStandaloneDesc':\n '• 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':\n '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':\n '{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':\n ' 3. lee-spec-kit 워크플로우용 workspace-local Codex hooks 설치: npx lee-spec-kit integrations codex-hooks',\n 'init.log.nextSteps4':\n ' 4. 필요하면 전역 Codex hooks bootstrap flag도 설치: npx lee-spec-kit integrations codex',\n 'init.log.nextSteps5':\n '',\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 ' 수동으로 변경 내용을 확인한 뒤 커밋해주세요.',\n 'init.log.gitRemoteSet': '✅ Git remote 설정 완료: {remote}',\n 'init.warn.gitRemoteExists': '⚠️ Git remote가 이미 존재합니다.',\n 'init.log.gitInitialCommitDone': '✅ Git 초기 커밋 완료!',\n 'init.warn.skipGitInit':\n '⚠️ Git 초기화를 건너뜁니다 (수동으로 커밋해주세요)',\n 'init.error.templateNotFound': '템플릿을 찾을 수 없습니다: {path}',\n\n 'idea.fileExists': '이미 존재하는 Idea 문서입니다: {path}',\n 'idea.templateNotFound': 'CLI 내장 idea 템플릿을 찾을 수 없습니다.',\n 'idea.created': '✅ Idea 문서 생성 완료: {path}',\n 'idea.nextStepsTitle': '다음 단계:',\n 'idea.nextSteps1': ' 1. 범위, PRD Refs, 승격 메모를 작성',\n 'idea.nextSteps2':\n ' 2. Feature로 승격: npx lee-spec-kit feature <name> --idea {ideaId}',\n 'idea.nextSteps3': ' 3. Feature로 만들지 않을 경우 Dropped로 표시',\n\n 'setup.codexBootstrapInstalled':\n '✅ 선택적 Codex bootstrap 설치 완료: {path}',\n 'setup.codexBootstrapAlreadyInstalled':\n '✅ 선택적 Codex bootstrap 이 이미 설치되어 있습니다: {path}',\n 'setup.codexBootstrapRemoved':\n '✅ 선택적 Codex bootstrap 제거 완료: {path}',\n 'setup.codexBootstrapAlreadyAbsent':\n '✅ 선택적 Codex bootstrap 이 이미 없습니다: {path}',\n 'setup.codexHooksInstalled': '✅ Repo-local Codex hooks 설치 완료: {path}',\n 'setup.codexHooksAlreadyInstalled':\n '✅ Repo-local Codex hooks 가 이미 설치되어 있습니다: {path}',\n 'setup.codexHooksRemoved': '✅ Repo-local Codex hooks 제거 완료: {path}',\n 'setup.codexHooksAlreadyAbsent':\n '✅ Repo-local Codex hooks 가 이미 없습니다: {path}',\n\n 'github.cmdGithubDescription':\n 'GitHub 워크플로우 도우미 (issue/pr 본문 템플릿 생성, 검증, merge 재시도)',\n 'github.cmdIssueDescription': 'feature 문서 기반 GitHub issue 본문 생성/생성',\n 'github.cmdPrDescription':\n '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':\n '원격 작업(--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':\n '원격 작업(--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':\n '최소 1개 라벨이 필요합니다. `--labels enhancement`를 사용하세요.',\n 'github.approvalRequired':\n '{operation}은(는) 사용자 명시 승인 후에만 실행할 수 있습니다. 계획 공유 후 `--confirm OK`로 다시 실행하세요.',\n 'github.ghCommandFailed': 'GitHub CLI 명령 실행에 실패했습니다',\n 'github.issueLookupFailed': 'GitHub issue 존재 여부 확인에 실패했습니다',\n 'github.ghEmptyJson': 'GitHub CLI JSON 출력이 비어 있습니다.',\n 'github.ghInvalidJson': 'GitHub CLI JSON 파싱에 실패했습니다: {snippet}',\n 'github.invalidIssueReference':\n 'Issue 필드가 올바른 GitHub issue reference 형식이 아닙니다: {value}. `#123` 같은 실제 issue 번호를 사용하세요.',\n 'github.issueNotFound':\n 'GitHub issue {issue} 를 현재 repository context에서 찾을 수 없거나 접근할 수 없습니다.',\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': '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':\n 'PR 헤드 갱신 후 이전 브랜치 복원에 실패했습니다',\n 'github.mergeRetryFailed':\n '재시도 후에도 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':\n 'merge 후 {base} 브랜치 checkout에 실패했습니다',\n 'github.pullBaseAfterMergeFailed':\n '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':\n 'feat(#{issue}): {slug} ({featureRef} 구현)',\n 'github.prDefaultTitleNoIssue': 'feat: {slug} ({featureRef} 구현)',\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\n 'docs.cmdDocsDescription': 'CLI 내장 에이전트 문서를 조회합니다',\n 'docs.cmdListDescription': '조회 가능한 내장 문서 목록을 출력합니다',\n 'docs.cmdGetDescription': '내장 문서 1개를 출력합니다',\n 'docs.optJson': '에이전트용 JSON 형식으로 출력',\n 'docs.invalidDocId':\n '알 수 없는 문서 ID입니다: {docId}. 사용 가능: {available}',\n 'docs.listHeader': '📚 내장 문서',\n 'docs.nextDocs': '다음 문서',\n 'docs.sourceLabel': 'source',\n 'docs.hashLabel': 'hash',\n\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':\n '현재 워크스페이스에서 docs를 초기화하세요.',\n 'cliError.configOrDocs.verifyDocsLocation': 'docs 위치와 설정을 점검하세요.',\n 'cliError.configOrDocs.runFromDocsDir':\n 'docs/가 있는 디렉터리에서 명령을 실행하세요.',\n 'cliError.lock.retryLater': '잠시 기다린 뒤 같은 명령을 다시 실행하세요.',\n 'cliError.lock.checkOtherProcess':\n '다른 lee-spec-kit 프로세스가 실행 중인지 확인하세요.',\n 'cliError.lock.inspectLockFiles':\n '런타임 lock 파일(프로젝트 `.git/lee-spec-kit.runtime/locks` 또는 OS temp)을 확인하세요.',\n 'cliError.invalidArg.reviewUsage':\n '명령 사용법과 유효한 플래그를 확인하세요.',\n 'cliError.invalidArg.fixValues': '잘못된 값을 수정한 뒤 다시 실행하세요.',\n 'cliError.invalidArg.validateBeforeAutomation':\n '자동화 환경이라면 CLI 호출 전에 인자를 검증하세요.',\n 'cliError.precondition.satisfyPreconditions':\n '실행 전제조건을 만족하도록 환경/작업트리를 먼저 정리하세요.',\n 'cliError.precondition.inspectDocsAndConfig':\n '재시도 전에 docs 정책과 현재 설정을 확인하세요.',\n 'cliError.precondition.considerForce':\n '의도한 덮어쓰기라면 강제 옵션 사용을 검토하세요.',\n 'cliError.duplicateId.resolveDuplicates':\n '중복된 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':\n 'spec/tasks 문서의 Feature ID도 함께 정리하세요.',\n 'cliError.missingId.inspectJson': '누락 항목을 JSON 진단으로 확인하세요.',\n 'cliError.approvalRequired.githubConfirmOk':\n 'github 원격 생성/머지면 --confirm OK를 함께 전달하세요.',\n 'cliError.approvalRequired.shareAndGetApproval':\n '실행 전에 제목/본문/라벨(또는 머지 계획)을 사용자에게 공유하고 명시적 승인을 받으세요.',\n 'cliError.contextSelection.specifySelector':\n '단일 Feature selector를 명시하세요.',\n 'cliError.contextSelection.narrowByComponent':\n 'multi 모드에서는 --component로 범위를 좁히세요.',\n 'cliError.contextSelection.inspectAllCandidates':\n '먼저 전체 후보를 확인하세요.',\n 'cliError.execution.failed': '실패한 명령의 출력과 선행 조건을 확인하세요.',\n 'cliError.execution.retryAfterFixingInputs':\n '실패 원인이나 입력을 정리한 뒤 다시 실행하세요.',\n 'cliError.execution.runManually':\n '환경 문제 분리를 위해 명령을 수동 실행해보세요.',\n 'cliError.unknown.rerunAndCaptureLogs':\n '같은 입력으로 재실행하고 전체 오류 로그를 수집하세요.',\n 'cliError.unknown.inspectWorkspaceState':\n '워크스페이스 감지 결과와 설정 상태를 확인하세요.',\n 'cliError.unknown.reportReasonCode':\n 'reasonCode와 로그를 유지보수자에게 전달하세요.',\n\n 'validation.nameEmpty': '이름은 비어있을 수 없습니다.',\n 'validation.nameTooLong': '이름은 100자를 초과할 수 없습니다.',\n 'validation.nameTraversal':\n \"이름에 '..' 또는 경로 구분자를 사용할 수 없습니다.\",\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':\n \"Feature ID는 'F' + 숫자 형식이어야 합니다 (예: F001).\",\n 'validation.ideaIdEmpty': 'Idea ID는 비어있을 수 없습니다.',\n 'validation.ideaIdFormat':\n \"Idea ID는 'I' + 숫자 형식이어야 합니다 (예: I001).\",\n 'validation.pathEmpty': '경로는 비어있을 수 없습니다.',\n 'validation.pathNullByte': '경로에 null 문자를 사용할 수 없습니다.',\n 'validation.genericFailed': '검증 실패',\n 'validation.context.featureName': '기능 이름',\n 'validation.context.featureId': 'Feature ID',\n 'validation.context.ideaName': 'Idea 이름',\n 'validation.context.ideaId': 'Idea ID',\n 'validation.context.projectName': '프로젝트 이름',\n 'validation.context.projectType': '프로젝트 타입',\n 'validation.context.language': '언어',\n 'validation.context.workflowMode': '워크플로우 모드',\n\n 'versionCheck.noticeAvailable':\n '📦 lee-spec-kit v{latest} 사용 가능 (현재: v{current})',\n 'versionCheck.updateCommand': ' 업데이트: npm update -g lee-spec-kit',\n} as const;\n","import { koCli } from './ko/cli.js';\n\nconst ko = {\n cli: koCli,\n} as const;\n\nexport default ko;\n","export const enCli = {\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 '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 'feature.ideaNotFound': 'Idea document not found: {ref}',\n 'feature.ideaAmbiguous':\n 'Multiple idea documents matched {ref}. Use an exact path or full indexed name.',\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.agentsUpdated': 'agents/ updated',\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 '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':\n 'Manage with a single features/ folder',\n 'init.choice.projectType.fullstack.title': 'Multi - multi-component project',\n 'init.choice.projectType.fullstack.desc':\n 'Default structure uses features/{component}/',\n 'init.prompt.docsMode': 'Select docs mode:',\n 'init.choice.docsRepo.embedded.title':\n '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':\n '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':\n ' 2. Add a feature with: npx lee-spec-kit feature <name>',\n 'init.log.nextSteps3':\n ' 3. Install workspace-local Codex hooks for the lee-spec-kit workflow: npx lee-spec-kit integrations codex-hooks',\n 'init.log.nextSteps4':\n ' 4. If you need the optional global Codex hooks bootstrap flag too: npx lee-spec-kit integrations codex',\n 'init.log.nextSteps5':\n '',\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':\n '⚠️ Skipping Git initialization (please commit manually)',\n 'init.error.templateNotFound': 'Template not found: {path}',\n\n 'idea.fileExists': 'Idea document already exists: {path}',\n 'idea.templateNotFound': 'Built-in idea template not found.',\n 'idea.created': '✅ Idea document created: {path}',\n 'idea.nextStepsTitle': 'Next steps:',\n 'idea.nextSteps1': ' 1. Fill scope, PRD refs, and promotion notes',\n 'idea.nextSteps2': ' 2. Promote it with: npx lee-spec-kit feature <name> --idea {ideaId}',\n 'idea.nextSteps3': ' 3. Mark it dropped if it should not become a feature',\n\n 'setup.codexBootstrapInstalled':\n '✅ Optional Codex bootstrap installed: {path}',\n 'setup.codexBootstrapAlreadyInstalled':\n '✅ Optional Codex bootstrap already installed: {path}',\n 'setup.codexBootstrapRemoved':\n '✅ Optional Codex bootstrap removed: {path}',\n 'setup.codexBootstrapAlreadyAbsent':\n '✅ Optional Codex bootstrap is already absent: {path}',\n 'setup.codexHooksInstalled':\n '✅ Repo-local Codex hooks installed: {path}',\n 'setup.codexHooksAlreadyInstalled':\n '✅ Repo-local Codex hooks already installed: {path}',\n 'setup.codexHooksRemoved':\n '✅ Repo-local Codex hooks removed: {path}',\n 'setup.codexHooksAlreadyAbsent':\n '✅ Repo-local Codex hooks are already absent: {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':\n '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':\n 'Commit and push tasks.md metadata sync automatically',\n 'github.labelsRequired':\n '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.issueLookupFailed': 'Failed to verify GitHub issue',\n 'github.ghEmptyJson': 'GitHub CLI returned empty JSON output.',\n 'github.ghInvalidJson': 'GitHub CLI returned invalid JSON: {snippet}',\n 'github.invalidIssueReference':\n 'Issue field is not a valid GitHub issue reference: {value}. Use a real issue number such as `#123`.',\n 'github.issueNotFound':\n 'GitHub issue {issue} was not found or is not accessible from the current repository context.',\n 'github.sectionsMissing':\n '{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':\n 'Failed to restore previous branch after PR refresh',\n 'github.mergeRetryFailed':\n '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':\n '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':\n 'feat(#{issue}): {slug} ({featureRef} implementation)',\n 'github.prDefaultTitleNoIssue': 'feat: {slug} ({featureRef} implementation)',\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':\n '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\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\n 'detect.cmdDescription':\n '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':\n '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.inspectDocsAndConfig':\n 'Inspect docs policy and current configuration before retrying.',\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': 'Inspect missing IDs via JSON diagnostics.',\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.execution.failed':\n 'Review the failed command output and fix prerequisites.',\n 'cliError.execution.retryAfterFixingInputs':\n 'Fix the failing prerequisite or input, then retry the command.',\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.inspectWorkspaceState':\n 'Inspect workspace detection and configuration state.',\n 'cliError.unknown.reportReasonCode':\n 'Report the reasonCode and logs to maintainers.',\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.ideaIdEmpty': 'Idea ID cannot be empty.',\n 'validation.ideaIdFormat': \"Idea ID must be 'I' + digits (e.g., I001).\",\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.ideaName': 'Idea name',\n 'validation.context.ideaId': 'Idea 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} as const;\n","import { enCli } from './en/cli.js';\n\nconst en = {\n cli: enCli,\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';\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;\n/* eslint-disable no-redeclare */\nexport function tr(\n lang: Lang,\n category: I18nCategory,\n key: string,\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 safeCategory = I18N[safeLang]?.[category] as\n | Record<string, string>\n | undefined;\n const defaultCategory = I18N[DEFAULT_LANG]?.[category] as\n | Record<string, string>\n | undefined;\n const koCategory = I18N.ko?.[category] as Record<string, string> | undefined;\n const template =\n safeCategory?.[key] ??\n defaultCategory?.[key] ??\n koCategory?.[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 | 'APPROVAL_REQUIRED'\n | 'CONTEXT_SELECTION_REQUIRED'\n | 'EXECUTION_FAILED'\n | 'VALIDATION_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(\n message,\n options?.cause === undefined ? undefined : { cause: options.cause }\n );\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 detect --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 detect --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.inspectDocsAndConfig',\n command: 'npx lee-spec-kit docs get agents --json',\n },\n { titleKey: 'precondition.considerForce' },\n ],\n APPROVAL_REQUIRED: [\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 github issue <slug|F001|F001-slug> --json',\n },\n {\n titleKey: 'contextSelection.narrowByComponent',\n command:\n 'npx lee-spec-kit github issue <slug|F001|F001-slug> --component <component> --json',\n },\n ],\n VALIDATION_FAILED: [\n {\n titleKey: 'invalidArg.reviewUsage',\n command: 'npx lee-spec-kit <command> --help',\n },\n { titleKey: 'invalidArg.fixValues' },\n ],\n UNKNOWN_ERROR: [\n { titleKey: 'unknown.rerunAndCaptureLogs' },\n { titleKey: 'unknown.inspectWorkspaceState', command: 'npx lee-spec-kit detect --json' },\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') {\n return withLabels(\n [\n {\n titleKey: 'execution.failed',\n },\n { titleKey: 'execution.retryAfterFixingInputs' },\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(\n tr(normalizeLang(lang), 'cli', 'cliError.headerNextOptionsError')\n );\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 * Idea ID 검증 (I001, I002 형식)\n */\nexport function validateIdeaId(id: string): ValidationResult {\n return validateIdeaIdWithLang(id, DEFAULT_LANG);\n}\n\nexport function validateIdeaIdWithLang(id: string, lang: Lang): ValidationResult {\n if (!id || id.trim().length === 0) {\n return { valid: false, error: tr(lang, 'cli', 'validation.ideaIdEmpty') };\n }\n\n const ideaIdPattern = /^I\\d{3,}$/;\n if (!ideaIdPattern.test(id)) {\n return {\n valid: false,\n error: tr(lang, 'cli', 'validation.ideaIdFormat'),\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 fs from 'fs-extra';\n\nexport const LEE_SPEC_KIT_AGENTS_BEGIN = '<!-- lee-spec-kit:begin -->';\nexport const LEE_SPEC_KIT_AGENTS_END = '<!-- lee-spec-kit:end -->';\n\ntype DocsRepoMode = 'embedded' | 'standalone';\n\n// Canonical lee-spec-kit project-scoped agent workflow instructions.\nconst CANONICAL_LEE_SPEC_KIT_AGENTS_TEXT = `Use lee-spec-kit docs and workflow policy only when explicitly detected.\n\nDetection gate:\n\n1. Run \\`npx lee-spec-kit detect --json\\`\n2. Apply lee-spec-kit rules only when \\`status === \"ok\"\\` and \\`isLeeSpecKitProject === true\\`\n3. If detection fails or returns false, skip these instructions and continue with the normal non-lee-spec-kit workflow\n\nDefault runtime path:\n\n- Prefer Codex native execution with workspace-scoped AGENTS.md plus official hooks for the default runtime path.\n- Treat lee-spec-kit as the docs schema, workflow policy, and validation toolkit.\n- If the user gives a generic request such as continuing the next feature according to the rules, interpret it through this workflow automatically.\n- Infer the workflow automatically even for generic rule-following requests.\n\nOn session start or after context compression/reset:\n\n1. Run \\`npx lee-spec-kit detect --json\\`\n2. If detected, run \\`npx lee-spec-kit docs get agents --json\\` once\n3. Read any unread \\`requiredDocs[*].command\\` from that output\n4. Cache built-in docs per session and only re-read them when the user explicitly asks for a policy refresh, \\`npx lee-spec-kit update\\` changed the policy, or the session restarted\n\nBefore taking the next workflow step:\n\n1. Confirm the active feature from the request, docs tree, issue/PR context, or the most recently active feature folder\n2. Read the active feature docs as the SSOT: \\`spec.md\\`, \\`plan.md\\`, \\`tasks.md\\`, and \\`decisions.md\\`\n3. When relevant, also read \\`issue.md\\` and \\`pr.md\\`\n4. Run \\`npx lee-spec-kit workflow-stage <feature-ref> --json\\` and follow only the returned \\`nextAction\\`\n5. Do not start implementation unless \\`stage === \"implementation\"\\` and \\`implementationAllowed === true\\`\n6. Treat stages before implementation as hard gates:\n - spec / plan / tasks approvals\n - issue preparation / issue creation\n - branch creation\n7. Keep docs and code synchronized; if code changes materially, update the active feature docs in the same turn before stopping\n8. When docs are synced to code, refresh an explicit marker like \\`<!-- lee-spec-kit:workflow-sync 2026-04-16T12:34:56.789Z -->\\` in the active feature docs (prefer \\`tasks.md\\` or \\`decisions.md\\`) so \\`workflow-audit\\` can prove the sync happened after the latest code change\n\nApproval and remote actions:\n\n- Ask the user for approval only at documented workflow approval boundaries or before remote/destructive actions\n- If \\`workflow-stage --json\\` reports \\`approvalRequired === true\\`, stop at that boundary and ask the user before proceeding\n- Before \\`git commit\\`, prefer \\`npx lee-spec-kit commit-audit --json\\` when hooks or manual checks need commit-time docs path enforcement\n- Before remote GitHub actions, share the plan or artifact being sent\n- Respect repo policy from docs and config first; hooks only enforce guardrails and continuation checks\n\nValidation:\n\n- Prefer \\`npx lee-spec-kit commit-audit --json\\` for commit-time staged docs path validation\n- Prefer \\`npx lee-spec-kit workflow-audit --json\\` as the default docs-sync validator for Codex hooks and end-of-turn checks; it expects the active feature docs to carry a fresh \\`lee-spec-kit:workflow-sync\\` marker after meaningful code/doc sync\n`;\n\nfunction renderManagedSegment(\n lang: 'ko' | 'en',\n docsRepo: DocsRepoMode\n): string {\n // Intentionally do not localize: this block must stay aligned with the\n // project-scoped canonical agent instructions to avoid behavioral drift.\n void lang;\n void docsRepo;\n return `${LEE_SPEC_KIT_AGENTS_BEGIN}\\n${CANONICAL_LEE_SPEC_KIT_AGENTS_TEXT}\\n${LEE_SPEC_KIT_AGENTS_END}`;\n}\n\nfunction renderManagedBlock(lang: 'ko' | 'en', docsRepo: DocsRepoMode): string {\n return `${renderManagedSegment(lang, docsRepo)}\\n\\n`;\n}\n\nexport async function upsertLeeSpecKitAgentsMd(\n filePath: string,\n options: { lang: 'ko' | 'en'; docsRepo: DocsRepoMode }\n): Promise<{\n changed: boolean;\n action: 'created' | 'appended' | 'updated' | 'noop';\n}> {\n const block = renderManagedBlock(options.lang, options.docsRepo);\n const segment = renderManagedSegment(options.lang, options.docsRepo);\n\n const exists = await fs.pathExists(filePath);\n if (!exists) {\n await fs.writeFile(filePath, block, 'utf-8');\n return { changed: true, action: 'created' };\n }\n\n const current = await fs.readFile(filePath, 'utf-8');\n const beginIndex = current.indexOf(LEE_SPEC_KIT_AGENTS_BEGIN);\n const endIndex = current.indexOf(LEE_SPEC_KIT_AGENTS_END);\n\n if (beginIndex !== -1 && endIndex !== -1 && beginIndex <= endIndex) {\n const replaceEnd = endIndex + LEE_SPEC_KIT_AGENTS_END.length;\n const next = `${current.slice(0, beginIndex)}${segment}${current.slice(replaceEnd)}`;\n if (next === current) {\n return { changed: false, action: 'noop' };\n }\n await fs.writeFile(filePath, next, 'utf-8');\n return { changed: true, action: 'updated' };\n }\n\n let next = current;\n if (next.length > 0 && !next.endsWith('\\n')) next += '\\n';\n if (next.trim().length > 0 && !next.endsWith('\\n\\n')) next += '\\n';\n next += block;\n\n await fs.writeFile(filePath, next, 'utf-8');\n return { changed: true, action: 'appended' };\n}\n","import path from 'path';\nimport type { ProjectConfig } from '../config/types.js';\nimport { runGitCapture } from './git-run.js';\n\nfunction normalizeSlashes(value: string): string {\n return value.replace(/\\\\/g, '/');\n}\n\nfunction isSameOrWithin(parentDir: string, candidateDir: string): boolean {\n const resolvedParent = path.resolve(parentDir);\n const resolvedCandidate = path.resolve(candidateDir);\n return (\n resolvedParent === resolvedCandidate ||\n resolvedCandidate.startsWith(`${resolvedParent}${path.sep}`)\n );\n}\n\nexport function resolveStandaloneWorkspaceRoot(\n cwd: string,\n docsDir: string\n): string {\n const resolvedCwd = path.resolve(cwd);\n const resolvedDocsDir = path.resolve(docsDir);\n\n if (resolvedCwd === resolvedDocsDir) {\n return resolvedCwd;\n }\n\n if (resolvedDocsDir.startsWith(`${resolvedCwd}${path.sep}`)) {\n return resolvedCwd;\n }\n\n return path.dirname(resolvedDocsDir);\n}\n\nexport function serializeStandaloneWorkspaceRoot(\n docsDir: string,\n workspaceRoot: string\n): string {\n const relative = normalizeSlashes(\n path.relative(path.resolve(docsDir), path.resolve(workspaceRoot))\n );\n return relative || '.';\n}\n\nfunction collectStandaloneProjectRoots(\n config: Pick<ProjectConfig, 'projectRoot'>,\n workspaceRoot: string,\n component?: string\n): string[] {\n if (!config.projectRoot) {\n return [];\n }\n\n const rawRoots =\n typeof config.projectRoot === 'string'\n ? [config.projectRoot]\n : component\n ? [config.projectRoot[component]].filter(Boolean)\n : Object.values(config.projectRoot);\n\n const deduped = new Set<string>();\n for (const rawRoot of rawRoots) {\n const value = String(rawRoot || '').trim();\n if (!value) continue;\n deduped.add(path.resolve(workspaceRoot, value));\n }\n\n return [...deduped];\n}\n\nfunction isValidStandaloneWorkspaceRoot(\n config: Pick<ProjectConfig, 'docsRepo' | 'docsDir' | 'projectRoot'>,\n workspaceRoot: string\n): boolean {\n if (config.docsRepo !== 'standalone') return false;\n\n const resolvedWorkspaceRoot = path.resolve(workspaceRoot);\n const resolvedDocsDir = path.resolve(config.docsDir);\n if (\n resolvedWorkspaceRoot === resolvedDocsDir ||\n !isSameOrWithin(resolvedWorkspaceRoot, resolvedDocsDir)\n ) {\n return false;\n }\n\n const projectRoots = collectStandaloneProjectRoots(config, resolvedWorkspaceRoot);\n for (const projectRoot of projectRoots) {\n const resolvedProjectRoot = path.resolve(projectRoot);\n if (resolvedProjectRoot === resolvedWorkspaceRoot) {\n return false;\n }\n if (isSameOrWithin(resolvedProjectRoot, resolvedWorkspaceRoot)) {\n return false;\n }\n if (isSameOrWithin(resolvedProjectRoot, resolvedDocsDir)) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function resolveConfiguredStandaloneWorkspaceRoot(\n config: Pick<ProjectConfig, 'docsRepo' | 'docsDir' | 'workspaceRoot' | 'projectRoot'>\n): string | null {\n if (config.docsRepo !== 'standalone' || !config.projectRoot) return null;\n const raw = String(config.workspaceRoot || '').trim();\n if (!raw) return null;\n const resolvedWorkspaceRoot = path.resolve(config.docsDir, raw);\n return isValidStandaloneWorkspaceRoot(config, resolvedWorkspaceRoot)\n ? resolvedWorkspaceRoot\n : null;\n}\n\nexport function canBackfillStandaloneWorkspaceRoot(\n cwd: string,\n docsDir: string\n): boolean {\n const resolvedCwd = path.resolve(cwd);\n const resolvedDocsDir = path.resolve(docsDir);\n return (\n resolvedCwd !== resolvedDocsDir &&\n isSameOrWithin(resolvedCwd, resolvedDocsDir)\n );\n}\n\nexport function resolveStandaloneProjectRoots(\n config: ProjectConfig,\n component?: string\n): string[] {\n if (config.docsRepo !== 'standalone' || !config.projectRoot) {\n return [];\n }\n\n const workspaceRoot = resolveConfiguredStandaloneWorkspaceRoot(config);\n if (!workspaceRoot) {\n return [];\n }\n\n return collectStandaloneProjectRoots(config, workspaceRoot, component);\n}\n\nexport function resolveGitTopLevelOrNull(cwd: string): string | null {\n return runGitCapture(['rev-parse', '--show-toplevel'], cwd) || null;\n}\n\nexport function resolveGitTopLevelOrSelf(cwd: string): string {\n return resolveGitTopLevelOrNull(cwd) || path.resolve(cwd);\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 docs get agents --json\\`\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- Read the docs workflow: \\`npx lee-spec-kit docs get agents --json\\`\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 fs from 'fs-extra';\nimport path from 'path';\nimport { resolveProjectComponents } from '../../../utils/components.js';\nimport {\n normalizeProjectType,\n type ProjectType,\n type RawProjectType,\n} from '../../../utils/project-type.js';\nimport type { ProjectConfig } from '../../../config/types.js';\n\ninterface ConfigFile {\n projectName: string;\n projectType: RawProjectType;\n components?: string[];\n lang: 'ko' | 'en';\n createdAt: string;\n docsRepo?: 'embedded' | 'standalone';\n workspaceRoot?: string;\n pushDocs?: boolean;\n docsRemote?: string;\n projectRoot?: string | Record<string, string>;\n allowedDocsEntries?: ProjectConfig['allowedDocsEntries'];\n pr?: ProjectConfig['pr'];\n workflow?: ProjectConfig['workflow'];\n approval?: ProjectConfig['approval'];\n}\n\nexport type LeeSpecDetectionSource = 'config' | 'heuristic';\n\nexport interface LeeSpecProjectDetectionResult {\n detected: boolean;\n schemaId: 'lee-spec';\n detectionSource: LeeSpecDetectionSource | null;\n docsDir: string | null;\n configPath: string | null;\n configFilePresent: boolean;\n config: ProjectConfig | null;\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) return [ancestors[0]];\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\nfunction toProjectConfig(\n docsDir: string,\n configFile: ConfigFile,\n projectType: ProjectType,\n components: string[]\n): ProjectConfig {\n return {\n schemaId: 'lee-spec',\n docsDir,\n projectName: configFile.projectName,\n projectType,\n components: projectType === 'multi' ? components : undefined,\n lang: configFile.lang,\n docsRepo: configFile.docsRepo,\n workspaceRoot: configFile.workspaceRoot,\n pushDocs: configFile.pushDocs,\n docsRemote: configFile.docsRemote,\n projectRoot: configFile.projectRoot,\n allowedDocsEntries: configFile.allowedDocsEntries,\n pr: configFile.pr,\n workflow: configFile.workflow,\n approval: configFile.approval,\n };\n}\n\nexport async function detectLeeSpecProject(\n cwd: string\n): Promise<LeeSpecProjectDetectionResult> {\n const explicitDocsDir = (process.env.LEE_SPEC_KIT_DOCS_DIR || '').trim();\n const baseDirs = [\n ...(explicitDocsDir ? [path.resolve(explicitDocsDir)] : []),\n ...getSearchBaseDirs(cwd),\n ];\n const visitedBaseDirs = new Set<string>();\n const visitedDocsDirs = new Set<string>();\n\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 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 detected: true,\n schemaId: 'lee-spec',\n detectionSource: 'config',\n docsDir: resolvedDocsDir,\n configPath,\n configFilePresent: true,\n config: toProjectConfig(\n resolvedDocsDir,\n configFile,\n projectType,\n components\n ),\n };\n } catch {\n // fall through to heuristic detection\n }\n }\n\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 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 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 if (/[가-힣]/.test(content)) {\n lang = 'ko';\n break;\n }\n }\n\n return {\n detected: true,\n schemaId: 'lee-spec',\n detectionSource: 'heuristic',\n docsDir: resolvedDocsDir,\n configPath: null,\n configFilePresent: false,\n config: {\n schemaId: 'lee-spec',\n docsDir: resolvedDocsDir,\n projectType,\n components,\n lang,\n },\n };\n }\n }\n }\n\n return {\n detected: false,\n schemaId: 'lee-spec',\n detectionSource: null,\n docsDir: null,\n configPath: null,\n configFilePresent: false,\n config: null,\n };\n}\n","import path from 'path';\nimport fs from 'fs-extra';\nimport type { ProjectType } from '../../../utils/project-type.js';\nimport type { SchemaFeatureRef } from '../contracts.js';\nimport { detectLeeSpecProject } from './project.js';\n\nexport interface ResolveLeeSpecFeaturePathsInput {\n docsDir: string;\n projectType: ProjectType;\n featureId: string;\n featureName: string;\n component?: string;\n}\n\nexport interface LeeSpecFeaturePaths {\n featureFolderName: string;\n featuresDir: string;\n featureDir: string;\n featurePathFromDocs: string;\n}\n\nexport function resolveLeeSpecFeaturePaths(\n input: ResolveLeeSpecFeaturePathsInput\n): LeeSpecFeaturePaths {\n const featureFolderName = `${input.featureId}-${input.featureName}`;\n const featuresDir =\n input.projectType === 'multi'\n ? path.join(input.docsDir, 'features', input.component || '')\n : path.join(input.docsDir, 'features');\n const featureDir = path.join(featuresDir, featureFolderName);\n return {\n featureFolderName,\n featuresDir,\n featureDir,\n featurePathFromDocs: path.relative(input.docsDir, featureDir),\n };\n}\n\nexport async function getNextLeeSpecFeatureId(\n docsDir: string,\n projectType: ProjectType,\n components: string[]\n): Promise<string> {\n const featuresDir = path.join(docsDir, 'features');\n let max = 0;\n const scanDirs: string[] = [];\n\n if (projectType === 'multi') {\n scanDirs.push(\n ...components.map((component) => path.join(featuresDir, component))\n );\n } else {\n scanDirs.push(featuresDir);\n }\n\n for (const dir of scanDirs) {\n if (!(await fs.pathExists(dir))) continue;\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) continue;\n const num = parseInt(match[1], 10);\n if (num > max) max = num;\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\nfunction parseFeatureFolderName(\n folderName: string,\n component?: string\n): SchemaFeatureRef | null {\n const match = folderName.match(/^(F\\d+)-(.+)$/);\n if (!match) return null;\n const featureRef: SchemaFeatureRef = {\n id: match[1],\n slug: match[2],\n folderName,\n };\n if (component) {\n featureRef.component = component;\n }\n return featureRef;\n}\n\nexport async function listLeeSpecFeatures(\n cwd: string\n): Promise<SchemaFeatureRef[]> {\n const detected = await detectLeeSpecProject(cwd);\n const docsDir = detected.docsDir;\n if (!docsDir) return [];\n\n const featuresRoot = path.join(docsDir, 'features');\n if (!(await fs.pathExists(featuresRoot))) return [];\n\n const refs: SchemaFeatureRef[] = [];\n const topLevelEntries = await fs.readdir(featuresRoot, { withFileTypes: true });\n\n for (const entry of topLevelEntries) {\n if (!entry.isDirectory()) continue;\n\n const singleProjectFeature = parseFeatureFolderName(entry.name);\n if (singleProjectFeature) {\n refs.push(singleProjectFeature);\n continue;\n }\n\n const component = entry.name.trim().toLowerCase();\n if (!component) continue;\n const componentDir = path.join(featuresRoot, entry.name);\n const componentEntries = await fs.readdir(componentDir, { withFileTypes: true });\n for (const child of componentEntries) {\n if (!child.isDirectory()) continue;\n const featureRef = parseFeatureFolderName(child.name, component);\n if (featureRef) refs.push(featureRef);\n }\n }\n\n refs.sort((left, right) => {\n const leftKey = `${left.id || ''}:${left.component || ''}:${left.folderName}`;\n const rightKey = `${right.id || ''}:${right.component || ''}:${right.folderName}`;\n return leftKey.localeCompare(rightKey);\n });\n\n return refs;\n}\n","import type { SchemaAdapter } from '../contracts.js';\nexport {\n detectLeeSpecProject,\n type LeeSpecDetectionSource,\n type LeeSpecProjectDetectionResult,\n} from './project.js';\nexport {\n getNextLeeSpecFeatureId,\n listLeeSpecFeatures,\n resolveLeeSpecFeaturePaths,\n} from './feature.js';\nimport { detectLeeSpecProject } from './project.js';\nimport {\n getNextLeeSpecFeatureId,\n listLeeSpecFeatures,\n resolveLeeSpecFeaturePaths,\n} from './feature.js';\n\nexport const leeSpecSchemaAdapter: SchemaAdapter = {\n schemaId: 'lee-spec',\n async detect(cwd) {\n const detection = await detectLeeSpecProject(cwd);\n return {\n detected: detection.detected,\n docsDir: detection.docsDir,\n schemaId: detection.schemaId,\n detectionSource: detection.detectionSource,\n config: detection.config,\n configPath: detection.configPath,\n configFilePresent: detection.configFilePresent,\n };\n },\n async listFeatures(cwd) {\n return listLeeSpecFeatures(cwd);\n },\n async getNextFeatureId(input) {\n return getNextLeeSpecFeatureId(\n input.docsDir,\n input.projectType,\n input.components\n );\n },\n resolveFeaturePaths(input) {\n return resolveLeeSpecFeaturePaths(input);\n },\n};\n","import type { ProjectConfig } from '../../config/types.js';\nimport type { SchemaAdapter, SchemaProjectDetection } from './contracts.js';\nimport { leeSpecSchemaAdapter } from './lee-spec-kit/index.js';\n\nconst SCHEMA_ADAPTERS: SchemaAdapter[] = [leeSpecSchemaAdapter];\n\nfunction createEmptyDetection(): SchemaProjectDetection & { adapter: SchemaAdapter | null } {\n return {\n detected: false,\n docsDir: null,\n schemaId: null,\n detectionSource: null,\n config: null,\n configPath: null,\n configFilePresent: false,\n adapter: null,\n };\n}\n\nexport function listSchemaAdapters(): SchemaAdapter[] {\n return [...SCHEMA_ADAPTERS];\n}\n\nexport function getSchemaAdapterById(schemaId: string | null | undefined): SchemaAdapter | null {\n if (!schemaId) return null;\n return SCHEMA_ADAPTERS.find((adapter) => adapter.schemaId === schemaId) ?? null;\n}\n\nexport function getSchemaAdapterForConfig(\n config: Pick<ProjectConfig, 'schemaId'> | null | undefined\n): SchemaAdapter | null {\n return getSchemaAdapterById(config?.schemaId ?? null);\n}\n\nexport async function detectSchemaProject(\n cwd: string\n): Promise<SchemaProjectDetection & { adapter: SchemaAdapter | null }> {\n for (const adapter of SCHEMA_ADAPTERS) {\n const detection = await adapter.detect(cwd);\n if (detection.detected) {\n return {\n ...detection,\n adapter,\n };\n }\n }\n\n return createEmptyDetection();\n}\n","import type { ProjectConfig } from './types.js';\nimport { detectSchemaProject } from '../adapters/schema/index.js';\n\nexport async function getConfig(cwd: string): Promise<ProjectConfig | null> {\n const detected = await detectSchemaProject(cwd);\n return detected.config;\n}\n","import { ProjectType } from '../utils/project-type.js';\nimport { AllowedDocsEntriesConfig } from '../utils/unmanaged-docs.js';\n\nexport const DEFAULT_APPROVAL_REQUIRE_CHECK_CATEGORIES = [\n 'spec_approve',\n 'implementation_approve',\n] as const;\n\nexport interface ProjectConfig {\n schemaId?: string;\n docsDir: string;\n projectName?: string;\n projectType: ProjectType;\n components?: string[];\n lang: 'ko' | 'en';\n docsRepo?: 'embedded' | 'standalone';\n workspaceRoot?: string;\n pushDocs?: boolean;\n docsRemote?: string;\n projectRoot?: string | Record<string, string>;\n allowedDocsEntries?: AllowedDocsEntriesConfig;\n pr?: {\n screenshots?: {\n upload?: boolean;\n };\n };\n workflow?: {\n preset?: 'github' | 'local' | 'strict';\n mode?: 'github' | 'local';\n requireIssue?: boolean;\n requireBranch?: boolean;\n requireWorktree?: boolean;\n requirePr?: boolean;\n requireReview?: boolean;\n requireMerge?: boolean;\n codeDirtyScope?: 'repo' | 'component' | 'auto';\n componentPaths?: Record<string, string[]>;\n taskCommitGate?: 'off' | 'warn' | 'strict';\n prePrReview?: {\n enabled?: boolean;\n skills?: string[];\n fallback?: 'builtin-checklist';\n evidenceMode?: 'any' | 'path_required';\n decisionEnum?: Array<'approve' | 'changes_requested' | 'blocked'>;\n enforceExecutionEvidence?: boolean;\n executionCommandPrefixes?: string[];\n };\n auto?: {\n defaultPreset?: string;\n defaultUntilCategories?: string[];\n presets?: Record<string, string[]>;\n };\n };\n approval?: {\n mode?: 'steps' | 'category';\n requireCheckSteps?: number[];\n default?: 'keep' | 'require' | 'skip';\n requireCheckCategories?: string[];\n skipCheckCategories?: string[];\n taskExecuteCheck?: 'both' | 'start_only';\n };\n}\n\nexport function createDefaultApprovalConfig(): NonNullable<ProjectConfig['approval']> {\n return {\n mode: 'category',\n default: 'skip',\n requireCheckCategories: [...DEFAULT_APPROVAL_REQUIRE_CHECK_CATEGORIES],\n };\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 { DefaultFileSystemAdapter } from '../adapters/DefaultFileSystemAdapter.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 { upsertLeeSpecKitAgentsMd } from '../utils/agents-md.js';\nimport { hasLeeSpecKitCodexBootstrap } from '../integrations/codex/bootstrap.js';\nimport {\n resolveStandaloneWorkspaceRoot,\n serializeStandaloneWorkspaceRoot,\n} from '../utils/standalone-workspace.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';\nimport { createDefaultApprovalConfig } from '../utils/config.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\nfunction getGitTopLevelOrNull(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 });\n const value = String(out || '').trim();\n return value ? value : null;\n } catch {\n return null;\n }\n}\n\nfunction isSameOrWithinDir(parentDir: string, candidateDir: string): boolean {\n const resolvedParent = path.resolve(parentDir);\n const resolvedCandidate = path.resolve(candidateDir);\n return (\n resolvedParent === resolvedCandidate ||\n resolvedCandidate.startsWith(`${resolvedParent}${path.sep}`)\n );\n}\n\nfunction getContainingGitRoot(targetDir: string): string | null {\n let current = path.resolve(targetDir);\n\n while (true) {\n if (fs.existsSync(current)) {\n return getGitTopLevelOrNull(current);\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return null;\n }\n current = parent;\n }\n}\n\nfunction resolveStandaloneInitProjectRoots(\n projectRoot: string | Record<string, string> | undefined,\n cwd: string\n): string[] {\n if (!projectRoot) return [];\n const rawRoots =\n typeof projectRoot === 'string' ? [projectRoot] : Object.values(projectRoot);\n const deduped = new Set<string>();\n for (const rawRoot of rawRoots) {\n const value = String(rawRoot || '').trim();\n if (!value) continue;\n deduped.add(path.resolve(cwd, value));\n }\n return [...deduped];\n}\n\nfunction hasStandaloneProjectRepoOutsideWorkspaceGitRoot(\n workspaceGitRoot: string,\n projectRoots: string[]\n): boolean {\n return projectRoots.some((projectRoot) => {\n const resolvedProjectRoot = path.resolve(projectRoot);\n if (!isSameOrWithinDir(workspaceGitRoot, resolvedProjectRoot)) {\n return true;\n }\n const projectGitRoot = getContainingGitRoot(resolvedProjectRoot);\n return !!projectGitRoot && path.resolve(projectGitRoot) !== path.resolve(workspaceGitRoot);\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(\n '-t, --type <type>',\n 'Project type: single | multi (fullstack alias)'\n )\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(chalk.yellow(`\\n${tr(lang, 'cli', 'common.canceled')}`));\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 let standaloneWorkspaceRoot: string | null = null;\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 (\n options.docsRepo &&\n !['embedded', 'standalone'].includes(options.docsRepo)\n ) {\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(chalk.gray(tr(lang, 'cli', 'init.insideProjectRoot')));\n console.log(chalk.gray(tr(lang, 'cli', 'init.modeEmbeddedDesc')));\n console.log(chalk.gray(tr(lang, 'cli', 'init.modeStandaloneDesc')));\n console.log(chalk.gray(tr(lang, 'cli', 'init.modeStandaloneMove')));\n } else {\n console.log(chalk.yellow(tr(lang, 'cli', 'init.gitNotDetected')));\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(\n lang,\n 'cli',\n 'init.choice.projectType.single.desc'\n ),\n },\n {\n title: tr(lang, 'cli', 'init.choice.projectType.fullstack.title'),\n value: 'multi',\n description: tr(\n lang,\n 'cli',\n 'init.choice.projectType.fullstack.desc'\n ),\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(\n lang,\n 'cli',\n 'init.choice.docsRepo.embedded.desc'\n ),\n },\n {\n title: tr(lang, 'cli', 'init.choice.docsRepo.standalone.title'),\n value: 'standalone',\n description: tr(\n lang,\n 'cli',\n 'init.choice.docsRepo.standalone.desc'\n ),\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(\n rootMap,\n parseStandaloneMultiProjectRootJson(projectRoot)\n );\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) =>\n 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(\n multiRoot,\n parseStandaloneMultiProjectRootJson(projectRoot)\n );\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 =\n 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 const cwdGitRoot = getGitTopLevelOrNull(cwd);\n const standaloneProjectRoots = resolveStandaloneInitProjectRoots(projectRoot, cwd);\n standaloneWorkspaceRoot = resolveStandaloneWorkspaceRoot(cwd, targetDir);\n const targetMatchesProjectRoot = standaloneProjectRoots.some(\n (projectRootPath) => path.resolve(projectRootPath) === path.resolve(targetDir)\n );\n const allowWorkspaceGitRoot =\n !!cwdGitRoot &&\n path.resolve(cwdGitRoot) === path.resolve(cwd) &&\n hasStandaloneProjectRepoOutsideWorkspaceGitRoot(\n cwdGitRoot,\n standaloneProjectRoots\n );\n\n if (cwdGitRoot && isSameOrWithinDir(cwdGitRoot, targetDir) && !allowWorkspaceGitRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone init must be started from the shared workspace root, not from inside an existing project git repository. Choose a docs directory outside the current git repo.'\n );\n }\n\n if (targetMatchesProjectRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone init cannot place docs at the project repo root. Choose a dedicated docs directory outside the project repo.'\n );\n }\n\n if (path.resolve(standaloneWorkspaceRoot) === path.resolve(targetDir)) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone init must be started from the shared workspace root above the docs directory, not from the docs repo root.'\n );\n }\n\n const targetGitRoot = getContainingGitRoot(targetDir);\n const targetIsGitRoot =\n !!targetGitRoot && path.resolve(targetGitRoot) === path.resolve(targetDir);\n const targetIsVerifiedWorkspaceRoot =\n !!targetGitRoot &&\n !!cwdGitRoot &&\n allowWorkspaceGitRoot &&\n path.resolve(targetGitRoot) === path.resolve(cwdGitRoot) &&\n path.resolve(targetDir) === path.resolve(cwd);\n if (targetIsGitRoot && !targetIsVerifiedWorkspaceRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone init cannot place docs at an existing git repo root unless that root is the verified shared workspace root. Choose a dedicated docs directory instead.'\n );\n }\n if (\n targetGitRoot &&\n isSameOrWithinDir(targetGitRoot, targetDir) &&\n !targetIsGitRoot &&\n !(\n allowWorkspaceGitRoot &&\n cwdGitRoot &&\n path.resolve(targetGitRoot) === path.resolve(cwdGitRoot)\n )\n ) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone init cannot place docs inside an existing project git repository. Choose the shared workspace root and a docs directory outside any project repo.'\n );\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', {\n dir: targetDir,\n }),\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(\n ` ${tr(lang, 'cli', 'init.log.projectLabel')}: ${projectName}`\n )\n );\n console.log(\n chalk.gray(` ${tr(lang, 'cli', 'init.log.typeLabel')}: ${projectType}`)\n );\n console.log(\n chalk.gray(` ${tr(lang, 'cli', 'init.log.langLabel')}: ${lang}`)\n );\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 const fsAdapter = new DefaultFileSystemAdapter();\n await copyTemplates(fsAdapter, 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' ? 'docs/features/{component}' : '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(fsAdapter, 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 preset: workflowMode,\n mode: workflowMode,\n requireWorktree: false,\n codeDirtyScope: 'auto',\n taskCommitGate: 'warn',\n auto: {\n defaultPreset: 'pr-handoff',\n },\n prePrReview: {\n skills: ['code-review-excellence'],\n fallback: 'builtin-checklist',\n evidenceMode: 'path_required',\n decisionEnum: ['approve', 'changes_requested', 'blocked'],\n enforceExecutionEvidence: false,\n executionCommandPrefixes: [],\n },\n },\n pr: {\n screenshots: { upload: false },\n },\n // Default to spec-first execution: stop at spec approval, then run\n // through implementation until the final checklist review gate.\n approval: createDefaultApprovalConfig(),\n };\n\n // standalone일 때만 pushDocs, projectRoot 추가\n if (docsRepo === 'standalone') {\n if (!standaloneWorkspaceRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone workspace root could not be resolved. Re-run init from the shared workspace root above the docs directory.'\n );\n }\n config.workspaceRoot = serializeStandaloneWorkspaceRoot(\n targetDir,\n standaloneWorkspaceRoot\n );\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 // Ensure agent entrypoint exists (idempotent managed block).\n // - embedded: write to repo root (git toplevel when available) so it can be committed.\n // - standalone: write to shared workspace root only, without touching project repos.\n const extraCommitPathsAbs: string[] = [];\n try {\n if (docsRepo === 'embedded') {\n const repoRoot = getGitTopLevelOrNull(cwd) || cwd;\n const agentsMdPath = path.join(repoRoot, 'AGENTS.md');\n const result = await upsertLeeSpecKitAgentsMd(agentsMdPath, {\n lang,\n docsRepo,\n });\n if (result.changed) extraCommitPathsAbs.push(agentsMdPath);\n } else {\n if (!standaloneWorkspaceRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone workspace root could not be resolved. Re-run init from the shared workspace root above the docs directory.'\n );\n }\n await upsertLeeSpecKitAgentsMd(path.join(standaloneWorkspaceRoot, 'AGENTS.md'), {\n lang,\n docsRepo,\n });\n }\n } catch {\n // Best-effort: do not fail init due to agent docs.\n }\n\n console.log(chalk.green(tr(lang, 'cli', 'init.log.docsCreated')));\n console.log();\n\n // Git 초기화\n await initGit(\n cwd,\n targetDir,\n docsRepo,\n lang,\n pushDocs,\n docsRemote,\n extraCommitPathsAbs\n );\n\n console.log(chalk.blue(tr(lang, 'cli', 'init.log.nextStepsTitle')));\n console.log(\n chalk.gray(\n tr(lang, 'cli', 'init.log.nextSteps1', { docsDir: targetDir })\n )\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(chalk.gray(tr(lang, 'cli', 'init.log.nextSteps4')));\n if (!(await hasLeeSpecKitCodexBootstrap())) {\n console.log(chalk.gray(tr(lang, 'cli', 'init.log.nextSteps5')));\n }\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 extraCommitPathsAbs: string[] = []\n): Promise<void> {\n try {\n // embedded: manage git at repo root (if available)\n // standalone: manage git in docs directory itself\n const embeddedRoot = getGitTopLevelOrNull(cwd) || cwd;\n const gitWorkdir = docsRepo === 'standalone' ? targetDir : embeddedRoot;\n\n const getCachedStagedFiles = (workdir: string): string[] | null => {\n try {\n const out = runGitOrThrow(\n ['diff', '--cached', '--name-only'],\n workdir,\n {\n stdio: ['ignore', 'pipe', 'ignore'],\n }\n );\n if (!out) return [];\n return out\n .split('\\n')\n .map((s) => s.trim())\n .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 = (\n workdir: string,\n relativePath: string\n ): 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\n ? `${normalizedPrefix}/${normalizedPath}`\n : 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(\n chalk.blue(tr(lang, 'cli', 'init.log.gitRepoDetectedCommit'))\n );\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(gitWorkdir, targetDir);\n const stagedBeforeAdd = getCachedStagedFiles(gitWorkdir);\n if (relativePath === '.' && stagedBeforeAdd && stagedBeforeAdd.length > 0) {\n console.log(chalk.yellow(tr(lang, 'cli', 'init.warn.stagedChangesSkip')));\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 const extraRelativePaths = extraCommitPathsAbs\n .map((absPath) => path.relative(gitWorkdir, absPath))\n .map((p) => p.replace(/\\\\/g, '/').trim())\n .filter((p) => !!p && p !== '.' && !p.startsWith('../'));\n\n const pathsToStage = [relativePath, ...extraRelativePaths];\n for (const p of pathsToStage) {\n runGitOrThrow(['add', p], gitWorkdir);\n }\n\n // Commit only the docs scaffold + explicitly allowed extra files\n // (pathspec prevents unrelated staged changes from being included).\n runGitOrThrow(\n [\n 'commit',\n '-m',\n 'init: docs 구조 초기화 (lee-spec-kit)',\n '--',\n ...pathsToStage,\n ],\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(\n tr(lang, 'cli', 'init.log.gitRemoteSet', { remote: docsRemote })\n )\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(chalk.yellow(tr(lang, 'cli', 'init.warn.skipGitInit')));\n console.log();\n }\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 Evidence|PR 전 리뷰 Evidence)\\*\\*\\s*:/.test(\n line\n )\n ) {\n continue;\n }\n if (\n /^\\s*-\\s*\\*\\*(Pre-PR Decision|PR Review Decision|PR 전 리뷰 Decision|PR 리뷰 Decision)\\*\\*\\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*Record your key review decision/i.test(line)) continue;\n if (/^\\s*-\\s*사전 리뷰 주요 판단 근거를/.test(line)) 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\nexport function applyLocalWorkflowTemplateToContent(\n fileName: string,\n content: string,\n lang: Lang\n): string | null {\n if (fileName === 'issue.md' || fileName === 'pr.md') {\n return null;\n }\n if (fileName === 'spec.md') {\n return sanitizeSpecForLocal(content);\n }\n if (fileName === 'tasks.md') {\n return sanitizeTasksForLocal(content, lang);\n }\n return content;\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 path from 'path';\nimport fs from 'fs-extra';\nimport type { Lang } from './i18n.js';\nimport { tr } from './i18n.js';\nimport { createCliError } from './cli-error.js';\n\nconst IDEA_REF_PATTERN = /\\b(I\\d{3,}(?:-[A-Za-z0-9._-]+)?)\\b/;\nconst IDEA_PATH_PATTERN = /\\b(?:\\.\\/)?docs\\/ideas\\/[^\\s]+\\.md\\b/;\n\nexport function extractExplicitIdeaRef(requestText: string): string | null {\n const pathMatch = requestText.match(IDEA_PATH_PATTERN);\n if (pathMatch) return pathMatch[0];\n\n const refMatch = requestText.match(IDEA_REF_PATTERN);\n if (refMatch) return refMatch[1];\n\n return null;\n}\n\nexport async function resolveIdeaReference(\n docsDir: string,\n ref: string,\n lang: Lang\n): Promise<{ path: string }> {\n const ideasDir = path.join(docsDir, 'ideas');\n const trimmedRef = ref.trim();\n if (!trimmedRef) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'feature.ideaNotFound', { ref })\n );\n }\n\n if (trimmedRef.includes('/') || trimmedRef.endsWith('.md')) {\n const candidate = path.resolve(process.cwd(), trimmedRef);\n if (await fs.pathExists(candidate)) {\n return { path: candidate };\n }\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'feature.ideaNotFound', { ref: trimmedRef })\n );\n }\n\n if (!(await fs.pathExists(ideasDir))) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'feature.ideaNotFound', { ref: trimmedRef })\n );\n }\n\n const entries = await fs.readdir(ideasDir, { withFileTypes: true });\n const files = entries\n .filter((entry) => entry.isFile() && entry.name.toLowerCase().endsWith('.md'))\n .map((entry) => entry.name);\n\n const exactName = `${trimmedRef}.md`;\n if (files.includes(exactName)) {\n return { path: path.join(ideasDir, exactName) };\n }\n\n const byId = /^I\\d{3,}$/.test(trimmedRef)\n ? files.filter((name) => name.startsWith(`${trimmedRef}-`))\n : [];\n if (byId.length === 1) {\n return { path: path.join(ideasDir, byId[0]) };\n }\n if (byId.length > 1) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'feature.ideaAmbiguous', { ref: trimmedRef })\n );\n }\n\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'feature.ideaNotFound', { ref: trimmedRef })\n );\n}\n\nexport async function readIdeaMetadataValue(\n ideaPath: string,\n label: string\n): Promise<string | null> {\n const content = await fs.readFile(ideaPath, 'utf-8');\n const pattern = new RegExp(`^- \\\\*\\\\*${escapeRegExp(label)}\\\\*\\\\*:\\\\s*(.+)$`, 'm');\n const match = content.match(pattern);\n if (!match) return null;\n const value = match[1].trim();\n return value.length > 0 ? value : null;\n}\n\nexport async function deriveFeatureNameFromIdea(ideaPath: string): Promise<string> {\n const ideaName = await readIdeaMetadataValue(ideaPath, 'Idea Name');\n if (ideaName && ideaName !== '-') return ideaName;\n\n const basename = path.basename(ideaPath, '.md');\n return basename.replace(/^I\\d{3,}-/, '');\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\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 { DefaultFileSystemAdapter } from '../adapters/DefaultFileSystemAdapter.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport type { Lang } 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';\nimport { resolveIdeaReference } from '../utils/idea-promotion.js';\nimport {\n getSchemaAdapterForConfig,\n} from '../adapters/schema/index.js';\n\nexport interface FeatureOptions {\n component?: string;\n id?: string;\n desc?: string;\n idea?: string;\n nonInteractive?: boolean;\n json?: boolean;\n}\n\nexport interface 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('--idea <ref>', 'Idea reference to promote (I001 | I001-slug | docs/ideas/...)')\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\nexport async 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 schemaAdapter = getSchemaAdapterForConfig(config);\n const configuredComponents = resolveProjectComponents(\n projectType,\n config.components\n );\n const linkedIdea = options.idea\n ? await resolveIdeaReference(docsDir, options.idea, lang)\n : null;\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 if (!schemaAdapter?.getNextFeatureId) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n `Schema \"${config.schemaId || 'unknown'}\" does not support feature ID allocation.`\n );\n }\n featureId = await schemaAdapter.getNextFeatureId({\n docsDir,\n projectType,\n components: configuredComponents,\n });\n }\n\n if (!schemaAdapter?.resolveFeaturePaths) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n `Schema \"${config.schemaId || 'unknown'}\" does not support feature path resolution.`\n );\n }\n\n const { featureFolderName, featureDir, featurePathFromDocs } =\n schemaAdapter.resolveFeaturePaths({\n docsDir,\n projectType,\n component: projectType === 'multi' ? component : undefined,\n featureId,\n featureName: name,\n });\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(\n 'DOCS_NOT_FOUND',\n tr(lang, 'cli', 'feature.baseNotFound')\n );\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 const fsAdapter = new DefaultFileSystemAdapter();\n await replaceInFiles(fsAdapter, featureDir, replacements);\n\n if (linkedIdea) {\n await stampIdeaReferenceInSpec(\n path.join(featureDir, 'spec.md'),\n path.relative(featureDir, linkedIdea.path)\n );\n await markIdeaAsFeatureized(linkedIdea.path, featureFolderName);\n }\n\n if (config.workflow?.mode === 'local') {\n await applyLocalWorkflowTemplateToFeatureDir(featureDir, lang);\n }\n\n if (!options.json) {\n console.log();\n console.log(\n chalk.green(tr(lang, 'cli', 'feature.created', { path: featureDir }))\n );\n console.log();\n console.log(chalk.blue(tr(lang, 'cli', 'feature.nextStepsTitle')));\n console.log(\n chalk.gray(\n tr(lang, 'cli', 'feature.nextSteps1', { path: featureDir })\n )\n );\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,\n };\n },\n { owner: 'feature' }\n );\n}\n\nasync function stampIdeaReferenceInSpec(\n specPath: string,\n relativeIdeaPath: string\n): Promise<void> {\n const normalizedPath = relativeIdeaPath.replace(/\\\\/g, '/');\n const ideaLine = `- Idea: \\`${normalizedPath}\\``;\n let content = await fs.readFile(specPath, 'utf-8');\n\n if (content.includes(ideaLine)) {\n return;\n }\n\n if (content.includes('## Related Documents')) {\n content = content.replace(\n '## Related Documents\\n\\n',\n `## Related Documents\\n\\n${ideaLine}\\n`\n );\n } else {\n content = `${content.trimEnd()}\\n\\n${ideaLine}\\n`;\n }\n\n await fs.writeFile(specPath, content, 'utf-8');\n}\n\nasync function markIdeaAsFeatureized(\n ideaPath: string,\n featureFolderName: string\n): Promise<void> {\n let content = await fs.readFile(ideaPath, 'utf-8');\n content = replaceOrAppendIdeaMetadata(content, 'Status', 'Featureized');\n content = replaceOrAppendIdeaMetadata(content, 'Feature', featureFolderName);\n await fs.writeFile(ideaPath, content, 'utf-8');\n}\n\nfunction replaceOrAppendIdeaMetadata(\n content: string,\n label: string,\n value: string\n): string {\n const pattern = new RegExp(`^- \\\\*\\\\*${escapeRegExp(label)}\\\\*\\\\*:.*$`, 'm');\n const line = `- **${label}**: ${value}`;\n if (pattern.test(content)) {\n return content.replace(pattern, line);\n }\n\n const heading = '## Promotion Tracking';\n if (content.includes(heading)) {\n return content.replace(heading, `${heading}\\n\\n${line}`);\n }\n\n return `${content.trimEnd()}\\n\\n${heading}\\n\\n${line}\\n`;\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\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","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { getConfig } from '../utils/config.js';\nimport type { Lang } from '../utils/i18n.js';\nimport {\n assertAllowedComponent,\n resolveProjectComponents,\n} from '../utils/components.js';\nimport {\n assertValid,\n validateIdeaIdWithLang,\n validateSafeNameWithLang,\n} from '../utils/validation.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport { getDocsLockPath, withFileLock } from '../utils/lock.js';\nimport { getTemplatesDir } from '../utils/paths.js';\nimport { getLocalDateString } from '../utils/date.js';\n\ninterface IdeaOptions {\n component?: string;\n id?: string;\n desc?: string;\n nonInteractive?: boolean;\n json?: boolean;\n}\n\ninterface IdeaRunResult {\n ideaId: string;\n ideaName: string;\n component?: string;\n ideaPath: string;\n ideaPathFromDocs: string;\n}\n\nexport function ideaCommand(program: Command): void {\n program\n .command('idea <name>')\n .description('Create a new indexed idea document')\n .option('--component <component>', 'Component name (optional)')\n .option('--id <id>', 'Idea ID (default: auto)')\n .option('-d, --desc <description>', 'Idea description for the document')\n .option('--non-interactive', 'Reserved for parity with other generators')\n .option('--json', 'Output in JSON format for agents')\n .action(async (name: string, options: IdeaOptions) => {\n try {\n const result = await runIdea(name, options);\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'ok',\n reasonCode: 'IDEA_CREATED',\n ideaId: result.ideaId,\n ideaName: result.ideaName,\n component: result.component,\n ideaPath: result.ideaPath,\n ideaPathFromDocs: result.ideaPathFromDocs,\n },\n null,\n 2\n )\n );\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 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 }\n });\n}\n\nasync function runIdea(name: string, options: IdeaOptions): Promise<IdeaRunResult> {\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 const configuredComponents = resolveProjectComponents(\n projectType,\n config.components\n );\n\n assertValid(\n validateSafeNameWithLang(name, lang),\n tr(lang, 'cli', 'validation.context.ideaName'),\n lang\n );\n\n let component = (options.component || '').trim().toLowerCase();\n if (component && projectType === 'single') {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--component` can only be used in multi mode.'\n );\n }\n if (projectType === 'multi' && component) {\n assertAllowedComponent(component, configuredComponents);\n }\n\n return withFileLock(\n getDocsLockPath(docsDir),\n async () => {\n const ideaId = options.id\n ? validateProvidedIdeaId(options.id, lang)\n : await getNextIdeaId(docsDir);\n const ideasDir = path.join(docsDir, 'ideas');\n const ideaFileName = `${ideaId}-${name}.md`;\n const ideaPath = path.join(ideasDir, ideaFileName);\n\n if (await fs.pathExists(ideaPath)) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'idea.fileExists', { path: ideaPath })\n );\n }\n\n const templatePath = path.join(\n getTemplatesDir(),\n lang,\n 'common',\n 'ideas',\n 'idea.md'\n );\n if (!(await fs.pathExists(templatePath))) {\n throw createCliError(\n 'DOCS_NOT_FOUND',\n tr(lang, 'cli', 'idea.templateNotFound')\n );\n }\n\n await fs.mkdir(ideasDir, { recursive: true });\n const template = await fs.readFile(templatePath, 'utf-8');\n const content = applyIdeaTemplate(template, {\n ideaId,\n name,\n description: options.desc || '',\n component: component || '-',\n created: getLocalDateString(),\n });\n await fs.writeFile(ideaPath, content, 'utf-8');\n\n if (!options.json) {\n console.log();\n console.log(chalk.green(tr(lang, 'cli', 'idea.created', { path: ideaPath })));\n console.log();\n console.log(chalk.blue(tr(lang, 'cli', 'idea.nextStepsTitle')));\n console.log(chalk.gray(tr(lang, 'cli', 'idea.nextSteps1')));\n console.log(chalk.gray(tr(lang, 'cli', 'idea.nextSteps2', { ideaId })));\n console.log(chalk.gray(tr(lang, 'cli', 'idea.nextSteps3')));\n console.log();\n }\n\n return {\n ideaId,\n ideaName: name,\n component: component || undefined,\n ideaPath,\n ideaPathFromDocs: path.relative(docsDir, ideaPath),\n };\n },\n { owner: 'idea' }\n );\n}\n\nfunction validateProvidedIdeaId(id: string, lang: Lang): string {\n assertValid(\n validateIdeaIdWithLang(id, lang),\n tr(lang, 'cli', 'validation.context.ideaId'),\n lang\n );\n return id;\n}\n\nfunction applyIdeaTemplate(\n template: string,\n values: {\n ideaId: string;\n name: string;\n description: string;\n component: string;\n created: string;\n }\n): string {\n return template\n .replaceAll('{idea-id}', values.ideaId)\n .replaceAll('{idea-name}', values.name)\n .replaceAll('{YYYY-MM-DD}', values.created)\n .replaceAll('{{description}}', values.description)\n .replaceAll('{component}', values.component);\n}\n\nasync function getNextIdeaId(docsDir: string): Promise<string> {\n const ideasDir = path.join(docsDir, 'ideas');\n let max = 0;\n\n if (await fs.pathExists(ideasDir)) {\n const entries = await fs.readdir(ideasDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isFile()) continue;\n const match = entry.name.match(/^I(\\d+)-/);\n if (!match) continue;\n const num = parseInt(match[1], 10);\n if (num > max) max = num;\n }\n }\n\n const next = max + 1;\n const width = Math.max(3, String(next).length);\n return `I${String(next).padStart(width, '0')}`;\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 { createDefaultApprovalConfig, 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';\nimport { upsertLeeSpecKitAgentsMd } from '../utils/agents-md.js';\nimport {\n canBackfillStandaloneWorkspaceRoot,\n resolveConfiguredStandaloneWorkspaceRoot,\n resolveStandaloneWorkspaceRoot,\n serializeStandaloneWorkspaceRoot,\n} from '../utils/standalone-workspace.js';\n\ninterface UpdateOptions {\n agents?: boolean;\n agentsMd?: boolean;\n force?: boolean;\n}\n\ninterface ConfigBackfillResult {\n changed: boolean;\n changedPaths: string[];\n}\n\nfunction hasOwnKey(value: Record<string, unknown>, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction isLegacyGeneratedApprovalConfig(\n approval: Record<string, unknown>\n): boolean {\n const mode = typeof approval.mode === 'string' ? approval.mode : '';\n if (mode && mode !== 'category' && mode !== 'steps') return false;\n\n const overrideKeys = [\n 'default',\n 'requireCheckSteps',\n 'requireCheckCategories',\n 'skipCheckCategories',\n 'taskExecuteCheck',\n ];\n return !overrideKeys.some((key) => hasOwnKey(approval, key));\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('--agents-md', 'Sync project-scoped AGENTS.md entrypoint')\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 let currentConfig: Awaited<ReturnType<typeof getConfig>> = config;\n const { docsDir } = currentConfig;\n await withFileLock(\n getDocsLockPath(docsDir),\n async () => {\n if (!currentConfig) {\n throw createCliError(\n 'DOCS_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.docsNotFound')\n );\n }\n const { projectType, lang } = currentConfig;\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(cwd, docsDir);\n if (configBackfill.changed) {\n currentConfig = await getConfig(cwd);\n }\n if (!currentConfig) {\n throw createCliError(\n 'DOCS_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.docsNotFound')\n );\n }\n\n // 업데이트 대상 결정\n const hasExplicitSelection = !!(options.agents || options.agentsMd);\n const updateAgents = options.agents || !hasExplicitSelection;\n const updateAgentsMd = options.agentsMd || !hasExplicitSelection;\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 // Update project-scoped agent docs while keeping CLI-managed runtime copies out of docs.\n if (updateAgents) {\n console.log(chalk.blue(tr(lang, 'cli', 'update.updatingAgents')));\n\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 = currentConfig.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 if (updateAgentsMd) {\n const agentsMdTargets = await collectAgentsMdTargets(cwd, currentConfig);\n for (const target of agentsMdTargets) {\n const result = await upsertLeeSpecKitAgentsMd(target, {\n lang,\n docsRepo: currentConfig.docsRepo ?? 'embedded',\n });\n if (result.changed) {\n updatedCount += 1;\n }\n }\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 getGitTopLevelOrNull(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 });\n const value = String(out || '').trim();\n return value ? value : null;\n } catch {\n return null;\n }\n}\n\nasync function collectAgentsMdTargets(\n cwd: string,\n config: Awaited<ReturnType<typeof getConfig>>\n): Promise<string[]> {\n if (!config) return [];\n\n const targets = new Set<string>();\n const docsRepo = config.docsRepo ?? 'embedded';\n\n if (docsRepo === 'embedded') {\n const repoRoot =\n getGitTopLevelOrNull(cwd) ||\n getGitTopLevelOrNull(config.docsDir) ||\n path.resolve(config.docsDir, '..');\n targets.add(path.join(repoRoot, 'AGENTS.md'));\n return [...targets];\n }\n\n const workspaceRoot = resolveConfiguredStandaloneWorkspaceRoot(config);\n if (!workspaceRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone workspaceRoot is missing or invalid. Run `npx lee-spec-kit update --agents-md` from the shared workspace root to migrate this project.'\n );\n }\n targets.add(path.join(workspaceRoot, 'AGENTS.md'));\n\n return [...targets];\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\nfunction normalizeStringList(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\nfunction normalizeDecisionEnumList(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().toLowerCase();\n if (!value) continue;\n if (\n value === 'approve' ||\n value === 'changes_requested' ||\n value === 'blocked'\n ) {\n deduped.add(value);\n }\n }\n return [...deduped];\n}\n\nasync function backfillMissingConfigDefaults(\n cwd: string,\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 if (\n raw.docsRepo === 'standalone' &&\n typeof raw.workspaceRoot !== 'string' &&\n canBackfillStandaloneWorkspaceRoot(cwd, docsDir)\n ) {\n raw.workspaceRoot = serializeStandaloneWorkspaceRoot(\n docsDir,\n resolveStandaloneWorkspaceRoot(cwd, docsDir)\n );\n changedPaths.push('workspaceRoot');\n }\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 const inferredPreset = workflow.mode === 'local' ? 'local' : 'github';\n setIfMissing(workflow, 'preset', inferredPreset, 'workflow.preset');\n setIfMissing(workflow, 'mode', 'github', 'workflow.mode');\n setIfMissing(workflow, 'requireWorktree', false, 'workflow.requireWorktree');\n setIfMissing(workflow, 'codeDirtyScope', 'auto', 'workflow.codeDirtyScope');\n setIfMissing(workflow, 'taskCommitGate', 'warn', 'workflow.taskCommitGate');\n if (!isPlainObject(workflow.auto)) {\n workflow.auto = {};\n changedPaths.push('workflow.auto');\n }\n const workflowAuto = workflow.auto as Record<string, unknown>;\n setIfMissing(workflowAuto, 'defaultPreset', 'pr-handoff', 'workflow.auto.defaultPreset');\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(\n prePrReview,\n 'evidenceMode',\n 'path_required',\n 'workflow.prePrReview.evidenceMode'\n );\n if (\n prePrReview.evidenceMode !== undefined &&\n prePrReview.evidenceMode !== 'path_required' &&\n prePrReview.evidenceMode !== 'any'\n ) {\n prePrReview.evidenceMode = 'path_required';\n changedPaths.push('workflow.prePrReview.evidenceMode');\n }\n if ('findings' in prePrReview) {\n delete prePrReview.findings;\n changedPaths.push('workflow.prePrReview.findings');\n }\n if (prePrReview.decisionEnum === undefined) {\n prePrReview.decisionEnum = ['approve', 'changes_requested', 'blocked'];\n changedPaths.push('workflow.prePrReview.decisionEnum');\n } else {\n const normalizedDecisionEnum = normalizeDecisionEnumList(prePrReview.decisionEnum);\n if (normalizedDecisionEnum.length === 0) {\n prePrReview.decisionEnum = ['approve', 'changes_requested', 'blocked'];\n changedPaths.push('workflow.prePrReview.decisionEnum');\n } else if (\n JSON.stringify(normalizedDecisionEnum) !==\n JSON.stringify(prePrReview.decisionEnum)\n ) {\n prePrReview.decisionEnum = normalizedDecisionEnum;\n changedPaths.push('workflow.prePrReview.decisionEnum');\n }\n }\n setIfMissing(\n prePrReview,\n 'enforceExecutionEvidence',\n false,\n 'workflow.prePrReview.enforceExecutionEvidence'\n );\n if (prePrReview.executionCommandPrefixes === undefined) {\n prePrReview.executionCommandPrefixes = [];\n changedPaths.push('workflow.prePrReview.executionCommandPrefixes');\n } else {\n const normalizedExecutionCommandPrefixes = normalizeStringList(\n prePrReview.executionCommandPrefixes\n );\n if (\n JSON.stringify(normalizedExecutionCommandPrefixes) !==\n JSON.stringify(prePrReview.executionCommandPrefixes)\n ) {\n prePrReview.executionCommandPrefixes = normalizedExecutionCommandPrefixes;\n changedPaths.push('workflow.prePrReview.executionCommandPrefixes');\n }\n }\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 = createDefaultApprovalConfig();\n changedPaths.push('approval');\n } else {\n const approval = raw.approval as Record<string, unknown>;\n if (isLegacyGeneratedApprovalConfig(approval)) {\n raw.approval = createDefaultApprovalConfig();\n changedPaths.push('approval');\n }\n }\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","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 path from 'node:path';\nimport fs from 'fs-extra';\nimport { listLeeSpecFeatures } from '../adapters/schema/lee-spec-kit/feature.js';\nimport type { ProjectConfig } from '../config/types.js';\nimport { getConfig } from './config.js';\nimport { createCliError } from './cli-error.js';\nimport { runGitCapture } from './git-run.js';\nimport {\n resolveConfiguredStandaloneWorkspaceRoot,\n resolveGitTopLevelOrNull,\n resolveStandaloneProjectRoots,\n} from './standalone-workspace.js';\n\nexport interface ResolvedFeature {\n id: string;\n slug: string;\n folderName: string;\n type: string;\n path: string;\n docs: {\n featurePathFromDocs: string;\n };\n git: {\n docsGitCwd: string;\n projectGitCwd: string;\n };\n issueNumber?: number;\n}\n\nexport type FeatureSelectionStatus =\n | 'selected'\n | 'no_features'\n | 'no_match'\n | 'multiple_matches';\n\nexport interface FeatureSelectionState {\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>;\n features: ResolvedFeature[];\n matchedFeature: ResolvedFeature | null;\n status: FeatureSelectionStatus;\n}\n\nfunction normalizeComponent(value: string | undefined): string | undefined {\n const component = (value || '').trim().toLowerCase();\n return component || undefined;\n}\n\nfunction matchesFeatureSelector(\n feature: ResolvedFeature,\n selector: string\n): boolean {\n const normalized = selector.trim().toLowerCase();\n if (!normalized) return false;\n return (\n feature.folderName.toLowerCase() === normalized ||\n feature.slug.toLowerCase() === normalized ||\n feature.id.toLowerCase() === normalized\n );\n}\n\nfunction parseFeatureBranchTarget(branchName: string): string | null {\n const trimmed = branchName.trim();\n if (!trimmed) return null;\n const match = trimmed.match(/^feat\\/(?:\\d+-)?(.+)$/i);\n return match?.[1]?.trim().toLowerCase() || null;\n}\n\nfunction resolveProjectGitCwd(\n cwd: string,\n config: Pick<ProjectConfig, 'docsRepo' | 'docsDir' | 'projectRoot' | 'workspaceRoot'>,\n component: string\n): string {\n if (config.docsRepo === 'standalone') {\n const projectRoots = resolveStandaloneProjectRoots(\n config as ProjectConfig,\n component === 'single' ? undefined : component\n );\n const projectRoot = projectRoots[0];\n if (!projectRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone project root could not be resolved for the selected feature.'\n );\n }\n return projectRoot;\n }\n\n return resolveGitTopLevelOrNull(cwd) || resolveGitTopLevelOrNull(config.docsDir) || cwd;\n}\n\nfunction toFeaturePathFromDocs(\n projectType: 'single' | 'multi',\n component: string,\n folderName: string\n): string {\n return projectType === 'multi' && component !== 'single'\n ? path.join('features', component, folderName)\n : path.join('features', folderName);\n}\n\nasync function extractIssueNumber(featureDir: string): Promise<number | undefined> {\n const tasksPath = path.join(featureDir, 'tasks.md');\n if (!(await fs.pathExists(tasksPath))) return undefined;\n const content = await fs.readFile(tasksPath, 'utf-8');\n const match = content.match(/^\\s*-\\s+\\*\\*Issue\\*\\*:\\s*#(\\d+)\\s*$/mi);\n if (!match) return undefined;\n const parsed = Number(match[1]);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nasync function listResolvedFeatures(\n cwd: string,\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n component?: string\n): Promise<ResolvedFeature[]> {\n const refs = await listLeeSpecFeatures(cwd);\n const normalizedComponent = normalizeComponent(component);\n const filteredRefs = normalizedComponent\n ? refs.filter((ref) => (ref.component || 'single') === normalizedComponent)\n : refs;\n\n const features = await Promise.all(\n filteredRefs.map(async (ref) => {\n const type = ref.component || 'single';\n const featurePathFromDocs = toFeaturePathFromDocs(\n config.projectType,\n type,\n ref.folderName\n );\n const featureDir = path.join(config.docsDir, featurePathFromDocs);\n return {\n id: ref.id || ref.folderName.split('-')[0] || '',\n slug: ref.slug,\n folderName: ref.folderName,\n type,\n path: featureDir,\n docs: {\n featurePathFromDocs: featurePathFromDocs.replace(/\\\\/g, '/'),\n },\n git: {\n docsGitCwd: config.docsDir,\n projectGitCwd: resolveProjectGitCwd(cwd, config, type),\n },\n issueNumber: await extractIssueNumber(featureDir),\n } satisfies ResolvedFeature;\n })\n );\n\n return features.sort((left, right) =>\n `${left.id}:${left.type}:${left.folderName}`.localeCompare(\n `${right.id}:${right.type}:${right.folderName}`\n )\n );\n}\n\nfunction getBranchMatchRoots(\n cwd: string,\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n component?: string\n): string[] {\n if (config.docsRepo === 'standalone') {\n if (!resolveConfiguredStandaloneWorkspaceRoot(config)) return [];\n return resolveStandaloneProjectRoots(config, component);\n }\n\n return [\n resolveGitTopLevelOrNull(cwd),\n resolveGitTopLevelOrNull(config.docsDir),\n ].filter((value): value is string => !!value);\n}\n\nfunction matchFeaturesFromBranches(\n cwd: string,\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n features: ResolvedFeature[],\n component?: string\n): ResolvedFeature[] {\n const matched = new Map<string, ResolvedFeature>();\n const roots = getBranchMatchRoots(cwd, config, component);\n\n for (const root of roots) {\n const branchName =\n runGitCapture(['branch', '--show-current'], root) ||\n runGitCapture(['rev-parse', '--abbrev-ref', 'HEAD'], root) ||\n '';\n const target = parseFeatureBranchTarget(branchName);\n if (!target) continue;\n\n for (const feature of features) {\n if (\n feature.slug.toLowerCase() === target ||\n feature.folderName.toLowerCase() === target\n ) {\n matched.set(feature.folderName, feature);\n }\n }\n }\n\n return [...matched.values()];\n}\n\nexport async function resolveFeatureSelection(\n cwd: string,\n selector?: string,\n component?: string\n): Promise<FeatureSelectionState> {\n const config = await getConfig(cwd);\n if (!config) {\n throw createCliError('CONFIG_NOT_FOUND', 'Config file not found. Run `init` first.');\n }\n\n const normalizedComponent = normalizeComponent(component);\n const features = await listResolvedFeatures(cwd, config, normalizedComponent);\n if (features.length === 0) {\n return {\n config,\n features,\n matchedFeature: null,\n status: 'no_features',\n };\n }\n\n let matches: ResolvedFeature[] = [];\n if ((selector || '').trim()) {\n matches = features.filter((feature) =>\n matchesFeatureSelector(feature, selector as string)\n );\n } else {\n matches = matchFeaturesFromBranches(cwd, config, features, normalizedComponent);\n if (matches.length === 0 && features.length === 1) {\n matches = features;\n }\n }\n\n if (matches.length === 1) {\n return {\n config,\n features,\n matchedFeature: matches[0],\n status: 'selected',\n };\n }\n\n return {\n config,\n features,\n matchedFeature: null,\n status: matches.length > 1 ? 'multiple_matches' : 'no_match',\n };\n}\n\nexport function getFeatureDocPaths(feature: ResolvedFeature): {\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","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 { createHash } from 'crypto';\nimport os from 'os';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { DEFAULT_LANG, I18nKey, Lang, tr } from '../utils/i18n.js';\nimport { getConfig } from '../utils/config.js';\nimport { createCliError } from '../utils/cli-error.js';\nimport {\n getFeatureDocPaths,\n type ResolvedFeature,\n resolveFeatureSelection,\n} from '../utils/feature-resolver.js';\nimport { assertValid, validatePathWithLang } from '../utils/validation.js';\nimport {\n getGithubDraftArtifactHeading,\n getGithubDraftRequiredSections,\n} from '../utils/github-draft-contract.js';\nimport {\n runGhJson as runGhJsonProcess,\n runProcess,\n runProcessOrThrow,\n} from '../commands/github/process.js';\n\nexport interface GithubBaseOptions {\n json?: boolean;\n component?: string;\n}\n\nexport interface GithubIssueOptions extends GithubBaseOptions {\n create?: boolean;\n confirm?: string;\n title?: string;\n labels?: string;\n bodyFile?: string;\n assignee?: string;\n}\n\nexport interface 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\nexport type PrArtifactMode = 'auto' | 'on' | 'off';\n\nexport interface PrArtifactPolicy {\n includeScreenshots: boolean;\n includeMermaid: boolean;\n}\n\nexport interface PrViewMeta {\n url: string;\n headRefName: string;\n baseRefName: string;\n}\n\nexport interface PrMergeStateMeta {\n state?: string;\n mergedAt?: string | null;\n baseRefName?: string;\n}\n\nexport interface IssueViewMeta {\n number: number;\n state?: string;\n}\n\nexport { getFeatureDocPaths };\n\nexport type GithubTextKey =\n Extract<I18nKey<'cli'>, `github.${string}`> extends `github.${infer Key}`\n ? Key\n : never;\n\nexport function 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\nexport function detectGithubCliLangSync(cwd: string): Lang {\n const explicitDocsDir = (process.env.LEE_SPEC_KIT_DOCS_DIR || '').trim();\n const startDirs = [\n explicitDocsDir ? path.resolve(explicitDocsDir) : '',\n 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')\n 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\nexport function 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('INVALID_ARGUMENT', tg(lang, 'labelsRequired'));\n }\n return [...new Set(labels)];\n}\n\nexport function escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport function extractDraftMetadataValue(\n content: string,\n keys: string[]\n): 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\nexport function sanitizeDraftMetadataValue(\n raw: string | undefined\n): 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\nexport function sanitizeDraftTitleValue(\n raw: string | undefined\n): string | undefined {\n const value = sanitizeDraftMetadataValue(raw);\n if (!value) return undefined;\n const normalized = value\n .replace(/`/g, '')\n .replace(/\\*\\*(.*?)\\*\\*/g, '$1')\n .replace(/\\[(.*?)\\]\\((.*?)\\)/g, '$1')\n .replace(/\\s+/g, ' ')\n .trim();\n return normalized || undefined;\n}\n\nexport function parseWorkflowDraftStatus(\n raw: string | undefined\n): '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\nexport interface WorkflowDraftMetadata {\n status?: 'draft' | 'ready';\n title?: string;\n labels?: string;\n}\n\nexport function parseWorkflowDraftMetadata(\n content: string\n): WorkflowDraftMetadata {\n const status = parseWorkflowDraftStatus(\n extractDraftMetadataValue(content, ['Status', '상태'])\n );\n const title = sanitizeDraftTitleValue(\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\nexport interface PreparedGithubBody {\n body: string;\n bodyFile: string;\n source: 'generated' | 'explicit' | 'workflow-ready';\n draftMetadata?: WorkflowDraftMetadata;\n}\n\nexport async function prepareGithubBody(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}): 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\nexport function hasExplicitRemoteApproval(raw: string | undefined): boolean {\n return (raw || '').trim().toUpperCase() === 'OK';\n}\n\nexport function assertRemoteApproval(\n raw: string | undefined,\n operation: string,\n lang: Lang\n): void {\n if (hasExplicitRemoteApproval(raw)) return;\n throw createCliError(\n 'APPROVAL_REQUIRED',\n tg(lang, 'approvalRequired', { operation })\n );\n}\n\nexport function 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: string) =>\n tg(lang, 'ghInvalidJson', {\n snippet,\n }),\n });\n}\n\nexport function ensureSections(\n body: string,\n sections: string[],\n kind: string,\n lang: Lang\n): void {\n const hasHeading = (sectionHeading: string): boolean => {\n const target = normalizeHeading(sectionHeading);\n const lines = body.split('\\n');\n for (const line of lines) {\n const match = line.match(/^\\s*##\\s+(.+?)\\s*$/);\n if (!match) continue;\n if (normalizeHeading(match[1]) === target) return true;\n }\n return false;\n };\n const hasMetadataField = (field: string): boolean => {\n const re = new RegExp(\n `^\\\\s*-\\\\s*\\\\*\\\\*${escapeRegExp(field)}\\\\*\\\\*\\\\s*:`,\n 'm'\n );\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\nexport function ensureDocsExist(\n docsDir: string,\n relativePaths: string[],\n lang: Lang\n): 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport const TODO_PLACEHOLDER_PATTERN = /(^|\\n)\\s*-\\s*\\[[ xX]\\]\\s*TODO:/m;\n\nexport function ensureNoTodoPlaceholders(\n body: string,\n kind: string,\n lang: Lang\n): void {\n if (!TODO_PLACEHOLDER_PATTERN.test(body)) return;\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'todoPlaceholdersRemain', { kind })\n );\n}\n\nexport function 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\nexport function 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' ? true : mermaidMode === 'off' ? false : true;\n\n return {\n includeScreenshots,\n includeMermaid,\n };\n}\n\nexport async function resolveFeatureOrThrow(\n featureName: string | undefined,\n options: { component?: string },\n lang: Lang\n): Promise<{\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>;\n feature: ResolvedFeature;\n}> {\n const state = await resolveFeatureSelection(\n process.cwd(),\n featureName,\n options.component\n );\n if (!state.matchedFeature) {\n if (state.status === 'no_features') {\n throw createCliError('PRECONDITION_FAILED', tg(lang, 'noFeatures'));\n }\n if (state.status === 'multiple_matches') {\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: state.config, feature: state.matchedFeature };\n}\n\nexport function resolveGithubProjectCwd(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n feature: ResolvedFeature\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 'Standalone docs mode requires a configured projectRoot.'\n );\n }\n return process.cwd();\n}\n\nexport function resolveGithubDocsCwd(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n feature: ResolvedFeature\n): string {\n const docsGitCwd = (feature.git.docsGitCwd || '').trim();\n if (docsGitCwd) return docsGitCwd;\n return config.docsDir;\n}\n\nexport function shouldPushDocsSync(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>\n): boolean {\n if (config.docsRepo !== 'standalone') return true;\n return config.pushDocs === true;\n}\n\nexport function normalizeHeading(value: string): string {\n let normalized = value.trim();\n for (;;) {\n const next = normalized\n .replace(/\\s*\\([^)]*\\)\\s*$/, '')\n .replace(/\\s*([^)]*)\\s*$/, '')\n .trim();\n if (next === normalized) break;\n normalized = next;\n }\n return normalized.replace(/\\s+/g, ' ').toLowerCase();\n}\n\nexport function 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\nexport function removeMarkdownByHeadings(\n content: string,\n headings: string[],\n levels: number[]\n): string {\n const targets = new Set(headings.map((heading) => normalizeHeading(heading)));\n const lines = content.split('\\n');\n const levelSet = new Set(levels);\n let start = -1;\n let startLevel = 0;\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;\n startLevel = level;\n break;\n }\n\n if (start < 0) return content;\n\n let end = lines.length;\n for (let i = start + 1; 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 const next = [...lines.slice(0, start), ...lines.slice(end)].join('\\n');\n const hasTrailingNewline = /\\n$/.test(content);\n const normalized = next.replace(/\\n{3,}/g, '\\n\\n').trimEnd();\n if (!normalized) return '';\n return hasTrailingNewline ? `${normalized}\\n` : normalized;\n}\n\nexport function extractMarkdownSection(\n content: string,\n headings: string[]\n): string | undefined {\n return extractMarkdownByHeadings(content, headings, [2]);\n}\n\nexport function stripIssueDraftMetadataSection(content: string): string {\n return stripWorkflowDraftMetadataSection(content);\n}\n\nexport function stripWorkflowDraftMetadataSection(content: string): string {\n return removeMarkdownByHeadings(content, ['Metadata', '메타데이터'], [2]);\n}\n\nexport function 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\nexport function sanitizeOverviewSection(\n raw: string | undefined\n): 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function toChecklistLines(items: string[]): string {\n return items.map((item) => `- [ ] ${item}`).join('\\n');\n}\n\nexport function 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\nexport function 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\nexport function 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\nexport function extractScopeItemsFromPlan(\n planContent: string,\n lang: Lang\n): { include: string[]; exclude: string[] } {\n const section = extractMarkdownSection(planContent, [\n '범위(명확화)',\n '범위',\n 'Scope',\n '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'\n ? [/비포함/, /제외/]\n : [/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\nexport function 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, [\n '기능 요구사항',\n 'Functional Requirements',\n ])\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(\n uniqItems([\n ...requirementHeadings,\n ...scopeFromPlan.include,\n ...purposeLines.slice(0, 1),\n sanitizeDraftItem(overview) || '',\n ])\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\nexport function extractPlanChangeTargets(\n planContent: string,\n lang: Lang\n): string[] {\n const section = extractMarkdownSection(planContent, [\n '변경 대상(예상)',\n '변경 대상',\n 'Changed Files',\n 'Change Targets',\n 'Expected Changes',\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(lang === 'ko' ? `\\`${trimmed}\\` 변경` : `Update \\`${trimmed}\\``);\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\nexport function 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))\n 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))\n continue;\n if (/\\{[^}]*\\}/.test(trimmed)) continue;\n commands.push(trimmed);\n }\n\n return uniqItems(commands);\n}\n\nexport function 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 (\n !cmd ||\n /^명령어$/i.test(cmd) ||\n /^command$/i.test(cmd) ||\n /^-+$/.test(cmd)\n )\n continue;\n if (/\\{[^}]*\\}/.test(cmd) || /\\{[^}]*\\}/.test(result || '')) continue;\n const renderedResult =\n 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 = lines[i].match(\n /^\\s*-\\s*(?:명령어|Command)\\s*:\\s*`?([^`]+?)`?\\s*$/i\n );\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 = lines[j].match(\n /^\\s*-\\s*(?:결과|Result)\\s*:\\s*(.+?)\\s*$/i\n );\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\nexport function 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, [\n '기능 요구사항',\n 'Functional Requirements',\n ])\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\nexport function resolveOverviewFromSpec(\n specContent: string,\n feature: ResolvedFeature,\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\nexport function 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\nexport function isOverviewMetadataLine(line: string, lang: Lang): boolean {\n const cleaned = line\n .replace(/^[-*+]\\s*/, '')\n .trim()\n .toLowerCase();\n const keys =\n lang === 'ko'\n ? ['기능 id', '기능명', '대상 레포', '이슈 번호', '작성일', '상태']\n : [\n 'feature id',\n 'feature name',\n 'target repo',\n 'issue number',\n 'created',\n 'status',\n ];\n return keys.some((key) => cleaned.startsWith(`${key}:`));\n}\n\nexport function truncateIssueTitleSummary(\n input: string,\n maxLength = 72\n): string {\n if (input.length <= maxLength) return input;\n return `${input.slice(0, maxLength - 3).trimEnd()}...`;\n}\n\nexport function resolveIssueTitleSummary(\n overview: string,\n feature: ResolvedFeature,\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\nexport function getPrScreenshotsHeading(lang: Lang): string {\n return (\n getGithubDraftArtifactHeading('pr', 'screenshots', lang) ||\n (lang === 'ko' ? '스크린샷' : 'Screenshots')\n );\n}\n\nexport function getPrMermaidHeading(lang: Lang): string {\n return (\n getGithubDraftArtifactHeading('pr', 'mermaid', lang) ||\n (lang === 'ko' ? '아키텍처 다이어그램' : 'Architecture Diagram')\n );\n}\n\nexport function buildPrScreenshotsSection(lang: Lang): string {\n if (lang === 'ko') {\n return `\n## 스크린샷\n\n- [ ] 업로드한 스크린샷 URL을 포함하세요. (예: \\`![](https://...)\\`)\n`;\n }\n return `\n## Screenshots\n\n- [ ] Include uploaded screenshot URL(s). (e.g. \\`![](https://...)\\`)\n`;\n}\n\nexport function 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\nexport function 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\nexport function 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(\n specContent,\n planContent,\n tasksContent,\n overview,\n lang\n );\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\nexport function buildPrBody(\n feature: ResolvedFeature,\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\n ? `\\nCloses #${feature.issueNumber}\\n`\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\nexport function stripMarkdownCodeContexts(body: string): string {\n const lines = body.split('\\n');\n const out: string[] = [];\n let inFence = false;\n let fenceChar = '';\n let fenceLength = 0;\n\n for (const line of lines) {\n const fenceStartMatch = line.match(/^\\s*(`{3,}|~{3,})/);\n if (fenceStartMatch) {\n const marker = fenceStartMatch[1];\n const markerChar = marker[0];\n const markerLength = marker.length;\n if (!inFence) {\n inFence = true;\n fenceChar = markerChar;\n fenceLength = markerLength;\n continue;\n }\n if (markerChar === fenceChar && markerLength >= fenceLength) {\n inFence = false;\n fenceChar = '';\n fenceLength = 0;\n }\n continue;\n }\n if (inFence) continue;\n out.push(line.replace(/`[^`\\n]*`/g, ''));\n }\n\n return out.join('\\n');\n}\n\nexport function hasIssueClosingKeyword(\n body: string,\n issueNumber: string | undefined\n): boolean {\n if (!issueNumber) return false;\n const cleaned = stripMarkdownCodeContexts(body);\n const issue = escapeRegExp(issueNumber);\n const closeKeywordRegex = new RegExp(\n `\\\\b(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\\\\b\\\\s*(?:[a-zA-Z0-9_.-]+\\\\/)?#\\\\s*${issue}\\\\b`,\n 'i'\n );\n return closeKeywordRegex.test(cleaned);\n}\n\nexport function ensureIssueClosingLine(\n body: string,\n issueNumber: string | undefined\n): string {\n if (!issueNumber) return body;\n if (hasIssueClosingKeyword(body, issueNumber)) return body;\n const trimmed = body.trimEnd();\n const separator = trimmed.length > 0 ? '\\n\\n' : '';\n return `${trimmed}${separator}Closes #${issueNumber}\\n`;\n}\n\nexport function extractTasksIssueReference(\n tasksContent: string\n): string | undefined {\n return extractDraftMetadataValue(tasksContent, [\n 'Issue',\n 'Issue Number',\n '이슈',\n '이슈 번호',\n ]);\n}\n\nexport function extractTasksPrReference(tasksContent: string): string | undefined {\n return extractDraftMetadataValue(tasksContent, [\n 'PR',\n 'Pull Request',\n 'PR 링크',\n 'PR URL',\n ]);\n}\n\nexport function parseStrictIssueReference(\n raw: string | undefined\n): string | undefined {\n const value = (raw || '').trim();\n if (!value) return undefined;\n const match = value.match(/^#?\\s*(\\d+)\\s*$/);\n return match?.[1];\n}\n\nexport function resolvePrClosingIssueNumber(\n tasksContent: string,\n featureIssueNumber: string | undefined,\n lang: Lang\n): string | undefined {\n const rawIssueReference = extractTasksIssueReference(tasksContent);\n const parsedRawIssueNumber = parseStrictIssueReference(rawIssueReference);\n if (rawIssueReference && !parsedRawIssueNumber) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'invalidIssueReference', {\n value: rawIssueReference.trim(),\n })\n );\n }\n if (parsedRawIssueNumber && /^0+$/.test(parsedRawIssueNumber)) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'invalidIssueReference', {\n value: rawIssueReference?.trim() || parsedRawIssueNumber,\n })\n );\n }\n\n const issueNumber = (featureIssueNumber || parsedRawIssueNumber || '').trim();\n if (!issueNumber) return undefined;\n return issueNumber;\n}\n\nexport function assertRemoteIssueExists(\n issueNumber: string | undefined,\n cwd: string,\n lang: Lang\n): void {\n if (!issueNumber) return;\n const result = runProcess(\n 'gh',\n ['issue', 'view', issueNumber, '--json', 'number,state'],\n cwd\n );\n if (result.code !== 0) {\n const detail = (result.stderr || result.stdout || '').trim();\n if (/not found|could not resolve|404|no issue/i.test(detail)) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'issueNotFound', {\n issue: `#${issueNumber}`,\n })\n );\n }\n throw createCliError(\n 'EXECUTION_FAILED',\n `${tg(lang, 'issueLookupFailed')}${detail ? `: ${detail}` : ''}`\n );\n }\n\n let payload: IssueViewMeta;\n try {\n payload = JSON.parse((result.stdout || '').trim()) as IssueViewMeta;\n } catch {\n throw createCliError(\n 'EXECUTION_FAILED',\n tg(lang, 'ghInvalidJson', {\n snippet: (result.stdout || '').trim().slice(0, 160),\n })\n );\n }\n if (String(payload?.number || '') !== String(issueNumber)) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'issueNotFound', {\n issue: `#${issueNumber}`,\n })\n );\n }\n}\n\nexport function getRequiredIssueSections(lang: Lang): string[] {\n return getGithubDraftRequiredSections('issue', lang);\n}\n\nexport function getRequiredPrSections(lang: Lang): string[] {\n return getGithubDraftRequiredSections('pr', lang);\n}\n\nexport function 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\nexport function 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\nexport function insertFieldInMetadataSection(\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+(?:Metadata|메타데이터)\\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\nexport function extractIssueNumberFromUrl(\n issueUrl: string | undefined\n): string | undefined {\n const value = (issueUrl || '').trim();\n if (!value) return undefined;\n const match = value.match(/\\/issues\\/(\\d+)(?:[/?#]|$)/);\n return match?.[1];\n}\n\nexport function syncTasksIssueMetadata(\n tasksPath: string,\n issueNumber: string,\n lang: Lang\n): { changed: boolean; path: string } {\n if (!fs.existsSync(tasksPath)) {\n throw createCliError(\n 'DOCS_NOT_FOUND',\n tg(lang, 'tasksNotFound', { path: tasksPath })\n );\n }\n\n const original = fs.readFileSync(tasksPath, 'utf-8');\n let next = original;\n let changed = false;\n const issueValue = `#${issueNumber}`;\n\n const issueReplaced = replaceListField(\n next,\n ['Issue', 'Issue Number', '이슈', '이슈 번호'],\n issueValue\n );\n next = issueReplaced.content;\n changed = changed || issueReplaced.changed;\n if (!issueReplaced.found) {\n const inserted = insertFieldInGithubIssueSection(next, 'Issue', issueValue);\n next = inserted.content;\n changed = changed || inserted.changed;\n }\n\n if (changed) {\n fs.writeFileSync(tasksPath, next, 'utf-8');\n }\n\n return { changed, path: tasksPath };\n}\n\nexport function syncIssueDraftMetadata(\n issueDocPath: string,\n issueNumber: string\n): { changed: boolean; path: string } {\n if (!fs.existsSync(issueDocPath)) {\n return { changed: false, path: issueDocPath };\n }\n\n const original = fs.readFileSync(issueDocPath, 'utf-8');\n let next = original;\n let changed = false;\n const issueValue = `#${issueNumber}`;\n\n const issueReplaced = replaceListField(\n next,\n ['Issue', 'Issue Number', '이슈', '이슈 번호'],\n issueValue\n );\n next = issueReplaced.content;\n changed = changed || issueReplaced.changed;\n if (!issueReplaced.found) {\n const inserted = insertFieldInMetadataSection(next, 'Issue', issueValue);\n next = inserted.content;\n changed = changed || inserted.changed;\n }\n\n if (changed) {\n fs.writeFileSync(issueDocPath, next, 'utf-8');\n }\n\n return { changed, path: issueDocPath };\n}\n\nexport function 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(\n 'DOCS_NOT_FOUND',\n tg(lang, 'tasksNotFound', { path: tasksPath })\n );\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(\n next,\n 'PR Status',\n nextStatus\n );\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\nexport function syncPrDraftMetadata(\n prDocPath: string,\n prUrl: string,\n nextStatus: 'Review' | 'Approved'\n): { changed: boolean; path: string } {\n if (!fs.existsSync(prDocPath)) {\n return { changed: false, path: prDocPath };\n }\n\n const original = fs.readFileSync(prDocPath, '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 = insertFieldInMetadataSection(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 = insertFieldInMetadataSection(next, 'PR Status', nextStatus);\n next = inserted.content;\n changed = changed || inserted.changed;\n }\n\n if (changed) {\n fs.writeFileSync(prDocPath, next, 'utf-8');\n }\n\n return { changed, path: prDocPath };\n}\n\nexport function 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\nexport function 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('PRECONDITION_FAILED', tg(lang, 'worktreeNotClean'));\n }\n}\n\nexport function 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(\n 'git',\n ['add', '--', relativePath],\n cwd,\n tg(lang, 'stageFileFailed')\n );\n runProcessOrThrow(\n 'git',\n ['commit', '-m', message],\n cwd,\n tg(lang, 'commitSyncFailed')\n );\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\nexport function commitAndPushPaths(\n cwd: string,\n absPaths: string[],\n message: string,\n lang: Lang,\n options?: { pushToOrigin?: boolean }\n): void {\n const uniqueRelativePaths = [\n ...new Set(\n absPaths\n .filter((absPath) => !!absPath && fs.existsSync(absPath))\n .map((absPath) => path.relative(cwd, absPath) || absPath)\n ),\n ];\n if (uniqueRelativePaths.length === 0) return;\n\n const status = runProcessOrThrow(\n 'git',\n ['status', '--porcelain=v1', '--', ...uniqueRelativePaths],\n cwd,\n tg(lang, 'inspectFileStatusFailed')\n );\n if (status.stdout.trim().length === 0) return;\n\n runProcessOrThrow(\n 'git',\n ['add', '--', ...uniqueRelativePaths],\n cwd,\n tg(lang, 'stageFileFailed')\n );\n runProcessOrThrow(\n 'git',\n ['commit', '-m', message],\n cwd,\n tg(lang, 'commitSyncFailed')\n );\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\nexport function shouldRefreshHeadBranch(\n stderr: string,\n stdout: string\n): 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\nexport function refreshPrHeadBranch(\n prRef: string,\n cwd: string,\n lang: Lang\n): 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 =\n 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\nexport function 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\nexport function 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","import path from 'path';\nimport fs from 'fs-extra';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { tr } from '../utils/i18n.js';\nimport {\n createCliError,\n toCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n} from '../utils/cli-error.js';\nimport { runProcess, runProcessOrThrow } from './github/process.js';\nimport * as ghService from '../services/GithubWorkflowService.js';\n\nexport function githubCommand(program: Command): void {\n const commandLang = ghService.detectGithubCliLangSync(process.cwd());\n const github = program\n .command('github')\n .description(ghService.tg(commandLang, 'cmdGithubDescription'));\n\n github\n .command('issue [feature-name]')\n .description(ghService.tg(commandLang, 'cmdIssueDescription'))\n .option('--json', ghService.tg(commandLang, 'optJson'))\n .option(\n '--component <component>',\n ghService.tg(commandLang, 'optComponent')\n )\n .option('--title <title>', ghService.tg(commandLang, 'optIssueTitle'))\n .option('--labels <labels>', ghService.tg(commandLang, 'optLabels'))\n .option('--body-file <path>', ghService.tg(commandLang, 'optIssueBodyFile'))\n .option(\n '--assignee <assignee>',\n ghService.tg(commandLang, 'optIssueAssignee')\n )\n .option('--create', ghService.tg(commandLang, 'optIssueCreate'))\n .option('--confirm <reply>', ghService.tg(commandLang, 'optIssueConfirm'))\n .action(\n async (\n featureName: string | undefined,\n options: ghService.GithubIssueOptions\n ) => {\n try {\n const { config, feature } = await ghService.resolveFeatureOrThrow(\n featureName,\n {\n component: options.component,\n },\n commandLang\n );\n\n const optionLabels = (options.labels || '').trim();\n const generatedLabels = ghService.parseLabels(\n optionLabels || undefined,\n config.lang\n );\n const paths = ghService.getFeatureDocPaths(feature);\n ghService.ensureDocsExist(\n config.docsDir,\n [paths.specPath, paths.planPath, paths.tasksPath],\n config.lang\n );\n const specContent = await fs.readFile(\n path.join(config.docsDir, paths.specPath),\n 'utf-8'\n );\n const planContent = await fs.readFile(\n path.join(config.docsDir, paths.planPath),\n 'utf-8'\n );\n const tasksContent = await fs.readFile(\n path.join(config.docsDir, paths.tasksPath),\n 'utf-8'\n );\n const overview = ghService.resolveOverviewFromSpec(\n specContent,\n feature,\n config.lang\n );\n\n const defaultTitle = ghService.tg(config.lang, 'issueDefaultTitle', {\n slug: feature.slug,\n summary: ghService.resolveIssueTitleSummary(\n overview,\n feature,\n config.lang\n ),\n });\n const generatedBody = ghService.buildIssueBody(\n specContent,\n planContent,\n tasksContent,\n overview,\n generatedLabels,\n paths,\n config.lang\n );\n ghService.ensureSections(\n generatedBody,\n ghService.getRequiredIssueSections(config.lang),\n ghService.tg(config.lang, 'kindIssue'),\n config.lang\n );\n\n const defaultBodyFile = ghService.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 ghService.prepareGithubBody({\n create: options.create,\n explicitBodyFile,\n defaultBodyFile,\n workflowDraftPath: path.join(config.docsDir, paths.issuePath),\n generatedBody,\n requiredSections: ghService.getRequiredIssueSections(config.lang),\n kindLabel: ghService.tg(config.lang, 'kindIssue'),\n lang: config.lang,\n });\n const body = ghService.stripIssueDraftMetadataSection(preparedBody.body);\n let bodyFile = preparedBody.bodyFile;\n if (options.create && body !== preparedBody.body) {\n const sanitizedBodyFile = ghService.toBodyFilePath(\n undefined,\n 'issue',\n config.docsDir,\n `${feature.type}-issue-sanitized`,\n config.lang\n );\n await fs.ensureDir(path.dirname(sanitizedBodyFile));\n await fs.writeFile(sanitizedBodyFile, body, 'utf-8');\n bodyFile = sanitizedBodyFile;\n }\n const title =\n options.title?.trim() ||\n (preparedBody.source === 'workflow-ready'\n ? preparedBody.draftMetadata?.title\n : undefined) ||\n defaultTitle;\n const labels = ghService.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 let syncChanged = false;\n if (options.create) {\n const projectGitCwd = ghService.resolveGithubProjectCwd(\n config,\n feature\n );\n ghService.ensureNoTodoPlaceholders(\n body,\n ghService.tg(config.lang, 'kindIssue'),\n config.lang\n );\n ghService.assertRemoteApproval(\n options.confirm,\n ghService.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 ghService.tg(config.lang, 'createIssueFailed')\n );\n issueUrl = created.stdout.trim() || undefined;\n const syncedIssueNumber = ghService.extractIssueNumberFromUrl(issueUrl);\n if (syncedIssueNumber) {\n const synced = ghService.syncTasksIssueMetadata(\n path.join(config.docsDir, paths.tasksPath),\n syncedIssueNumber,\n config.lang\n );\n const draftSynced = ghService.syncIssueDraftMetadata(\n path.join(config.docsDir, paths.issuePath),\n syncedIssueNumber\n );\n syncChanged = synced.changed || draftSynced.changed;\n }\n }\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'ok',\n reasonCode: options.create\n ? 'ISSUE_CREATED'\n : 'ISSUE_TEMPLATE_GENERATED',\n feature: feature.folderName,\n component: feature.type,\n title,\n labels,\n body,\n bodyFile,\n issueUrl,\n syncChanged,\n },\n null,\n 2\n )\n );\n return;\n }\n\n console.log();\n console.log(chalk.bold(ghService.tg(config.lang, 'issueHeader')));\n console.log(\n chalk.gray(\n `- ${ghService.tg(config.lang, 'labelFeature')}: ${feature.folderName}`\n )\n );\n console.log(\n chalk.gray(\n `- ${ghService.tg(config.lang, 'labelBodyFile')}: ${bodyFile}`\n )\n );\n console.log(\n chalk.gray(\n `- ${ghService.tg(config.lang, 'labelLabels')}: ${labels.join(', ')}`\n )\n );\n if (issueUrl) {\n console.log(\n chalk.green(\n ghService.tg(config.lang, 'issueCreated', { url: issueUrl })\n )\n );\n } else {\n console.log(\n chalk.blue(ghService.tg(config.lang, 'issueTemplateGenerated'))\n );\n }\n console.log();\n } catch (error) {\n const lang = ghService.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\n github\n .command('pr [feature-name]')\n .description(ghService.tg(commandLang, 'cmdPrDescription'))\n .option('--json', ghService.tg(commandLang, 'optJson'))\n .option(\n '--component <component>',\n ghService.tg(commandLang, 'optComponent')\n )\n .option('--title <title>', ghService.tg(commandLang, 'optPrTitle'))\n .option('--labels <labels>', ghService.tg(commandLang, 'optLabels'))\n .option('--body-file <path>', ghService.tg(commandLang, 'optPrBodyFile'))\n .option('--assignee <assignee>', ghService.tg(commandLang, 'optPrAssignee'))\n .option('--base <branch>', ghService.tg(commandLang, 'optPrBase'), 'main')\n .option('--create', ghService.tg(commandLang, 'optPrCreate'))\n .option('--pr <ref>', ghService.tg(commandLang, 'optPrRef'))\n .option('--merge', ghService.tg(commandLang, 'optPrMerge'))\n .option('--confirm <reply>', ghService.tg(commandLang, 'optPrConfirm'))\n .option('--retry <count>', ghService.tg(commandLang, 'optPrRetry'))\n .option(\n '--screenshots <mode>',\n ghService.tg(commandLang, 'optPrScreenshots'),\n 'auto'\n )\n .option(\n '--mermaid <mode>',\n ghService.tg(commandLang, 'optPrMermaid'),\n 'auto'\n )\n .option('--no-sync-tasks', ghService.tg(commandLang, 'optPrNoSyncTasks'))\n .option('--commit-sync', ghService.tg(commandLang, 'optPrCommitSync'))\n .action(\n async (\n featureName: string | undefined,\n options: ghService.GithubPrOptions\n ) => {\n try {\n const { config, feature } = await ghService.resolveFeatureOrThrow(\n featureName,\n {\n component: options.component,\n },\n commandLang\n );\n\n const optionLabels = (options.labels || '').trim();\n const paths = ghService.getFeatureDocPaths(feature);\n ghService.ensureDocsExist(\n config.docsDir,\n [paths.specPath, paths.tasksPath],\n config.lang\n );\n const specContent = await fs.readFile(\n path.join(config.docsDir, paths.specPath),\n 'utf-8'\n );\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(\n path.join(config.docsDir, paths.tasksPath),\n 'utf-8'\n );\n const overview = ghService.resolveOverviewFromSpec(\n specContent,\n feature,\n config.lang\n );\n\n const defaultTitle = feature.issueNumber\n ? ghService.tg(config.lang, 'prDefaultTitleWithIssue', {\n issue: feature.issueNumber,\n slug: feature.slug,\n featureRef: feature.folderName,\n })\n : ghService.tg(config.lang, 'prDefaultTitleNoIssue', {\n slug: feature.slug,\n featureRef: feature.folderName,\n });\n const artifactPolicy = ghService.resolvePrArtifactPolicy(\n config,\n options\n );\n const generatedBody = ghService.buildPrBody(\n feature,\n specContent,\n planContent,\n tasksContent,\n overview,\n paths,\n artifactPolicy,\n config.lang\n );\n ghService.ensureSections(\n generatedBody,\n ghService.getRequiredPrSections(config.lang),\n ghService.tg(config.lang, 'kindPr'),\n config.lang\n );\n\n const defaultBodyFile = ghService.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 ghService.prepareGithubBody({\n create: options.create,\n explicitBodyFile,\n defaultBodyFile,\n workflowDraftPath: path.join(config.docsDir, paths.prPath),\n generatedBody,\n requiredSections: ghService.getRequiredPrSections(config.lang),\n kindLabel: ghService.tg(config.lang, 'kindPr'),\n lang: config.lang,\n });\n let body = ghService.stripWorkflowDraftMetadataSection(\n preparedBody.body\n );\n let bodyFile = preparedBody.bodyFile;\n if (options.create && body !== preparedBody.body) {\n const sanitizedBodyFile = ghService.toBodyFilePath(\n undefined,\n 'pr',\n config.docsDir,\n `${feature.type}-pr-sanitized`,\n config.lang\n );\n await fs.ensureDir(path.dirname(sanitizedBodyFile));\n await fs.writeFile(sanitizedBodyFile, body, 'utf-8');\n bodyFile = sanitizedBodyFile;\n }\n const title =\n options.title?.trim() ||\n (preparedBody.source === 'workflow-ready'\n ? preparedBody.draftMetadata?.title\n : undefined) ||\n defaultTitle;\n const labels = ghService.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 = ghService.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 = ghService.shouldPushDocsSync(config);\n\n if (options.create) {\n const projectGitCwd = ghService.resolveGithubProjectCwd(\n config,\n feature\n );\n const closingIssueNumber = ghService.resolvePrClosingIssueNumber(\n tasksContent,\n feature.issueNumber ? String(feature.issueNumber) : undefined,\n config.lang\n );\n ghService.assertRemoteIssueExists(\n closingIssueNumber,\n projectGitCwd,\n config.lang\n );\n const normalizedBody = ghService.ensureIssueClosingLine(\n body,\n closingIssueNumber\n );\n if (normalizedBody !== body) {\n body = normalizedBody;\n const fallbackBodyFile = defaultBodyFile;\n if (preparedBody.source === 'generated') {\n await fs.writeFile(bodyFile, body, 'utf-8');\n } else {\n await fs.ensureDir(path.dirname(fallbackBodyFile));\n await fs.writeFile(fallbackBodyFile, body, 'utf-8');\n bodyFile = fallbackBodyFile;\n }\n }\n\n ghService.ensureNoTodoPlaceholders(\n body,\n ghService.tg(config.lang, 'kindPr'),\n config.lang\n );\n ghService.ensurePrArtifacts(body, artifactPolicy, config.lang);\n ghService.assertRemoteApproval(\n options.confirm,\n ghService.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 ghService.tg(config.lang, 'createPrFailed')\n );\n prUrl = created.stdout.trim();\n }\n\n if (!prUrl && options.merge) {\n prUrl = (ghService.extractTasksPrReference(tasksContent) || '').trim();\n }\n\n if (!prUrl && options.merge) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n ghService.tg(config.lang, 'mergeRequiresPr')\n );\n }\n\n if (options.merge) {\n ghService.assertRemoteApproval(\n options.confirm,\n ghService.tg(config.lang, 'operationPrMerge'),\n config.lang\n );\n }\n\n if (prUrl && options.syncTasks !== false) {\n const syncedTasks = ghService.syncTasksPrMetadata(\n path.join(config.docsDir, paths.tasksPath),\n prUrl,\n 'Review',\n config.lang\n );\n const syncedDraft = ghService.syncPrDraftMetadata(\n path.join(config.docsDir, paths.prPath),\n prUrl,\n 'Review'\n );\n syncChanged = syncedTasks.changed || syncedDraft.changed;\n const shouldCommitSync = !!options.commitSync || !!options.merge;\n if (syncChanged && shouldCommitSync) {\n const docsGitCwd = ghService.resolveGithubDocsCwd(\n config,\n feature\n );\n const message = feature.issueNumber\n ? ghService.tg(config.lang, 'syncCommitWithIssue', {\n issue: feature.issueNumber,\n folder: feature.folderName,\n })\n : ghService.tg(config.lang, 'syncCommitNoIssue', {\n folder: feature.folderName,\n });\n ghService.commitAndPushPaths(\n docsGitCwd,\n [syncedTasks.path, syncedDraft.path],\n message,\n config.lang,\n { pushToOrigin: pushDocsSync }\n );\n }\n }\n\n if (options.merge) {\n const projectGitCwd = ghService.resolveGithubProjectCwd(\n config,\n feature\n );\n const merged = ghService.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 mergedTasksSync = ghService.syncTasksPrMetadata(\n path.join(config.docsDir, paths.tasksPath),\n prUrl,\n 'Approved',\n config.lang\n );\n const mergedDraftSync = ghService.syncPrDraftMetadata(\n path.join(config.docsDir, paths.prPath),\n prUrl,\n 'Approved'\n );\n syncChanged =\n syncChanged || mergedTasksSync.changed || mergedDraftSync.changed;\n if (mergedTasksSync.changed || mergedDraftSync.changed) {\n const docsGitCwd = ghService.resolveGithubDocsCwd(\n config,\n feature\n );\n const message = feature.issueNumber\n ? ghService.tg(config.lang, 'syncCommitWithIssue', {\n issue: feature.issueNumber,\n folder: feature.folderName,\n })\n : ghService.tg(config.lang, 'syncCommitNoIssue', {\n folder: feature.folderName,\n });\n ghService.commitAndPushPaths(\n docsGitCwd,\n [mergedTasksSync.path, mergedDraftSync.path],\n message,\n config.lang,\n { pushToOrigin: pushDocsSync }\n );\n }\n }\n\n const mergeBaseBranch = (\n merged.baseRefName ||\n baseBranch ||\n 'main'\n ).trim();\n const checkoutResult = runProcess(\n 'git',\n ['checkout', mergeBaseBranch],\n projectGitCwd\n );\n if (checkoutResult.code !== 0) {\n postMergeWarnings.push(\n ghService.tg(config.lang, 'postMergeCheckoutWarning', {\n base: mergeBaseBranch,\n detail: (\n checkoutResult.stderr ||\n checkoutResult.stdout ||\n ''\n ).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 ghService.tg(config.lang, 'postMergePullWarning', {\n base: mergeBaseBranch,\n detail: (\n pullResult.stderr ||\n pullResult.stdout ||\n ''\n ).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\n ? postMergeWarnings\n : undefined,\n },\n null,\n 2\n )\n );\n return;\n }\n\n console.log();\n console.log(chalk.bold(ghService.tg(config.lang, 'prHeader')));\n console.log(\n chalk.gray(\n `- ${ghService.tg(config.lang, 'labelFeature')}: ${feature.folderName}`\n )\n );\n console.log(\n chalk.gray(\n `- ${ghService.tg(config.lang, 'labelBodyFile')}: ${bodyFile}`\n )\n );\n console.log(\n chalk.gray(\n `- ${ghService.tg(config.lang, 'labelLabels')}: ${labels.join(', ')}`\n )\n );\n if (prUrl) {\n console.log(\n chalk.gray(`- ${ghService.tg(config.lang, 'labelPr')}: ${prUrl}`)\n );\n }\n if (syncChanged) {\n console.log(\n chalk.green(ghService.tg(config.lang, 'prTasksSynced'))\n );\n }\n if (options.merge) {\n console.log(\n chalk.green(\n ghService.tg(config.lang, 'prMerged', {\n attempts: mergedAttempts ?? 1,\n })\n )\n );\n if (mergeAlreadyMerged) {\n console.log(\n chalk.yellow(ghService.tg(config.lang, 'prAlreadyMergedNotice'))\n );\n }\n for (const warning of postMergeWarnings) {\n console.log(chalk.yellow(`⚠️ ${warning}`));\n }\n } else if (!options.create) {\n console.log(\n chalk.blue(ghService.tg(config.lang, 'prTemplateGenerated'))\n );\n }\n console.log();\n } catch (error) {\n const lang = ghService.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}\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 | 'split-feature';\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 id: 'split-feature',\n title: { ko: 'feature 분할 가이드', en: 'feature split guide' },\n relativePath: (_, lang) =>\n path.join(lang, 'common', 'agents', 'skills', 'split-feature.md'),\n },\n];\n\nconst DOC_FOLLOWUPS: Readonly<Record<BuiltinDocId, BuiltinDocId[]>> = {\n agents: [\n 'create-feature',\n 'execute-task',\n 'split-feature',\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', 'split-feature'],\n 'create-issue': ['issue-doc'],\n 'create-pr': ['pr-doc'],\n 'split-feature': [],\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 implementation_approve: ['execute-task'],\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_run: ['create-pr'],\n pre_pr_review_record: ['create-pr'],\n pr_create: ['create-pr', 'pr-doc', 'git-workflow'],\n pr_status_update: ['create-pr'],\n code_review_run: ['create-pr'],\n code_review: ['create-pr'],\n feature_scope_split: ['split-feature', 'execute-task'],\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') return 'issue-doc';\n if (normalized === 'pr-doc') 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 === 'split-feature') {\n return 'split-feature';\n }\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 { 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 { 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';\nimport { detectSchemaProject } from '../adapters/schema/index.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 detection = await detectSchemaProject(targetCwd);\n const config = detection.config;\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 console.log(\n JSON.stringify(\n {\n status: 'ok',\n reasonCode,\n isLeeSpecKitProject: true,\n targetCwd,\n docsDir: detection.docsDir,\n configPath: detection.configPath,\n configFilePresent: detection.configFilePresent,\n detectionSource: detection.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 console.log(chalk.green(`- ${tr(lang, 'cli', 'detect.resultDetected')}`));\n console.log(chalk.gray(`- ${tr(lang, 'cli', 'detect.labelDocsDir')}: ${detection.docsDir}`));\n console.log(\n chalk.gray(\n `- ${tr(lang, 'cli', 'detect.labelConfigPath')}: ${\n detection.configPath || '-'\n }`\n )\n );\n console.log(\n chalk.gray(\n `- ${tr(lang, 'cli', 'detect.labelSource')}: ${tr(\n lang,\n 'cli',\n detection.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 { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport { getConfig } from '../utils/config.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\nimport { resolveConfiguredStandaloneWorkspaceRoot } from '../utils/standalone-workspace.js';\n\ninterface CodexOptions {\n remove?: boolean;\n}\n\ninterface CodexHooksOptions {\n remove?: boolean;\n}\n\nfunction registerCodexIntegration(parent: Command): void {\n parent\n .command('codex')\n .alias('codex-bootstrap')\n .description(\n 'Install or remove the optional Codex bootstrap that re-reads the current workspace ./AGENTS.md'\n )\n .option(\n '--remove',\n 'Remove the lee-spec-kit managed Codex bootstrap block'\n )\n .action(async (options: CodexOptions) => {\n const lang = DEFAULT_LANG;\n try {\n const {\n getCodexConfigPath,\n removeLeeSpecKitCodexBootstrap,\n upsertLeeSpecKitCodexBootstrap,\n } = await import('../integrations/codex/bootstrap.js');\n const filePath = getCodexConfigPath();\n if (options.remove) {\n const result = await removeLeeSpecKitCodexBootstrap(filePath);\n const message = result.changed\n ? tr(lang, 'cli', 'setup.codexBootstrapRemoved', {\n path: filePath,\n })\n : tr(lang, 'cli', 'setup.codexBootstrapAlreadyAbsent', {\n path: filePath,\n });\n console.log(chalk.green(message));\n return;\n }\n\n const result = await upsertLeeSpecKitCodexBootstrap(filePath);\n const key =\n result.action === 'noop'\n ? 'setup.codexBootstrapAlreadyInstalled'\n : 'setup.codexBootstrapInstalled';\n console.log(chalk.green(tr(lang, 'cli', key, { path: filePath })));\n } catch (error) {\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 }\n });\n}\n\nfunction registerCodexHooksIntegration(parent: Command): void {\n parent\n .command('codex-hooks')\n .description(\n 'Install or remove workspace-local Codex official hooks for the lee-spec-kit docs workflow'\n )\n .option('--remove', 'Remove lee-spec-kit managed workspace-local Codex hooks')\n .action(async (options: CodexHooksOptions) => {\n const lang = DEFAULT_LANG;\n try {\n const config = await getConfig(process.cwd());\n if (!config) {\n throw createCliError(\n 'DOCS_NOT_FOUND',\n 'lee-spec-kit docs were not detected from the current directory. Run this command from the embedded repo root or the standalone workspace/docs root.'\n );\n }\n const {\n getRepoHooksConfigPath,\n removeLeeSpecKitCodexHooks,\n resolveCodexHooksRepoRoot,\n upsertLeeSpecKitCodexHooks,\n } = await import('../integrations/codex/hooks.js');\n const repoRoot =\n config.docsRepo === 'standalone'\n ? resolveConfiguredStandaloneWorkspaceRoot(config)\n : resolveCodexHooksRepoRoot(process.cwd());\n if (!repoRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone workspaceRoot is missing or invalid. Run `npx lee-spec-kit update --agents-md` from the shared workspace root to migrate this project.'\n );\n }\n const filePath = getRepoHooksConfigPath(repoRoot);\n if (options.remove) {\n const result = await removeLeeSpecKitCodexHooks(repoRoot);\n const key = result.changed\n ? 'setup.codexHooksRemoved'\n : 'setup.codexHooksAlreadyAbsent';\n console.log(chalk.green(tr(lang, 'cli', key, { path: filePath })));\n return;\n }\n\n const result = await upsertLeeSpecKitCodexHooks(repoRoot);\n const key =\n result.action === 'noop'\n ? 'setup.codexHooksAlreadyInstalled'\n : 'setup.codexHooksInstalled';\n console.log(chalk.green(tr(lang, 'cli', key, { path: filePath })));\n } catch (error) {\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 }\n });\n}\n\nexport function integrationsCommand(program: Command): void {\n const integrations = program\n .command('integrations')\n .description('Optional developer integration helpers');\n\n registerCodexIntegration(integrations);\n registerCodexHooksIntegration(integrations);\n}\n","import fs from 'fs-extra';\nimport path from 'node:path';\nimport type { ProjectConfig } from '../config/types.js';\nimport { getConfig } from './config.js';\nimport { createCliError } from './cli-error.js';\nimport {\n getFeatureDocPaths,\n resolveFeatureSelection,\n type FeatureSelectionState,\n type ResolvedFeature,\n} from './feature-resolver.js';\nimport { runGitCapture } from './git-run.js';\nimport {\n parseWorkflowDraftMetadata,\n type WorkflowDraftMetadata,\n} from '../services/GithubWorkflowService.js';\nimport { runProcess } from '../commands/github/process.js';\n\nexport type WorkflowStageId =\n | 'spec'\n | 'plan'\n | 'tasks'\n | 'issue'\n | 'branch'\n | 'implementation'\n | 'implementation_approve'\n | 'pre_pr_review'\n | 'pr'\n | 'code_review'\n | 'merge'\n | 'done';\n\nexport interface WorkflowStageAction {\n category:\n | 'spec_write'\n | 'spec_approve'\n | 'plan_write'\n | 'plan_approve'\n | 'tasks_write'\n | 'tasks_approve'\n | 'issue_prepare'\n | 'issue_create'\n | 'branch_create'\n | 'task_execute'\n | 'implementation_approve'\n | 'pre_pr_review'\n | 'pr_prepare'\n | 'pr_create'\n | 'code_review'\n | 'pr_merge';\n summary: string;\n approvalRequired: boolean;\n command: string | null;\n}\n\nexport interface WorkflowStagePayload {\n status: 'ok' | 'error';\n reasonCode:\n | 'WORKFLOW_STAGE_RESOLVED'\n | 'CONFIG_NOT_FOUND'\n | 'NO_FEATURES'\n | 'FEATURE_SELECTION_REQUIRED';\n docsDir: string | null;\n featureRef: string | null;\n stage: WorkflowStageId | null;\n nextAction: WorkflowStageAction | null;\n approvalRequired: boolean;\n implementationAllowed: boolean;\n blockedReasonCode:\n | 'SPEC_NOT_APPROVED'\n | 'PLAN_NOT_APPROVED'\n | 'TASKS_NOT_READY'\n | 'ISSUE_NOT_CREATED'\n | 'BRANCH_NOT_READY'\n | 'IMPLEMENTATION_APPROVAL_REQUIRED'\n | 'PRE_PR_REVIEW_NOT_APPROVED'\n | 'PR_NOT_CREATED'\n | 'PR_REVIEW_NOT_APPROVED'\n | null;\n}\n\ntype WorkflowRequirements = {\n requireIssue: boolean;\n requireBranch: boolean;\n requirePr: boolean;\n requireReview: boolean;\n requireMerge: boolean;\n prePrReviewEnabled: boolean;\n};\n\ntype DocApprovalStatus = 'draft' | 'review' | 'approved' | null;\ntype SimpleTaskStatus = 'TODO' | 'DOING' | 'DONE' | 'REVIEW';\n\ntype ParsedTasks = {\n docStatus: DocApprovalStatus;\n issueNumber: number | null;\n branch: string | null;\n prLink: string | null;\n prStatus: 'review' | 'approved' | null;\n prePrReviewStatus: 'pending' | 'running' | 'done' | null;\n prePrEvidence: string | null;\n prePrDecision: string | null;\n prePrDecisionOutcome: 'approve' | 'changes_requested' | 'blocked' | null;\n tasks: Array<{\n raw: string;\n status: SimpleTaskStatus;\n title: string;\n }>;\n completion: {\n allTasksChecked: boolean;\n testsChecked: boolean;\n finalOutcomeChecked: boolean;\n };\n};\n\ntype ParsedWorkflowDraft = WorkflowDraftMetadata & {\n issueRef: string | null;\n prRef: string | null;\n prStatus: 'review' | 'approved' | null;\n};\n\nconst DOC_STATUS_LABELS = ['Doc Status', '문서 상태'];\nconst ISSUE_LABELS = ['Issue', 'Issue Number', '이슈', '이슈 번호'];\nconst BRANCH_LABELS = ['Branch', '브랜치'];\nconst PR_LABELS = ['PR', 'Pull Request'];\nconst PR_STATUS_LABELS = ['PR Status', 'PR 상태'];\nconst PRE_PR_REVIEW_LABELS = ['Pre-PR Review', 'PR 전 리뷰'];\nconst PRE_PR_EVIDENCE_LABELS = ['Pre-PR Evidence', 'PR 전 리뷰 Evidence'];\nconst PRE_PR_DECISION_LABELS = ['Pre-PR Decision', 'PR 전 리뷰 Decision'];\n\nfunction resolveWorkflowRequirements(config: ProjectConfig): WorkflowRequirements {\n const workflow = config.workflow || {};\n const workflowMode = workflow.mode || workflow.preset || 'github';\n const isLocalWorkflow = workflowMode === 'local';\n return {\n requireIssue: workflow.requireIssue ?? !isLocalWorkflow,\n requireBranch: workflow.requireBranch ?? true,\n requirePr: workflow.requirePr ?? !isLocalWorkflow,\n requireReview: workflow.requireReview ?? !isLocalWorkflow,\n requireMerge: workflow.requireMerge ?? !isLocalWorkflow,\n prePrReviewEnabled: workflow.prePrReview?.enabled ?? !isLocalWorkflow,\n };\n}\n\nfunction parseApprovalStatus(raw: string | undefined): DocApprovalStatus {\n const value = (raw || '').trim().toLowerCase();\n if (value === 'draft') return 'draft';\n if (value === 'review') return 'review';\n if (value === 'approved') return 'approved';\n return null;\n}\n\nfunction extractFieldValue(\n content: string,\n labels: string | string[]\n): string | null {\n for (const label of Array.isArray(labels) ? labels : [labels]) {\n const escaped = label.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const match = content.match(\n new RegExp(`^\\\\s*-\\\\s*\\\\*\\\\*${escaped}\\\\*\\\\*:\\\\s*(.*?)\\\\s*$`, 'mi')\n );\n if (!match) continue;\n const value = match[1].trim();\n if (value) return value;\n }\n return null;\n}\n\nfunction parseMarkdownCheckbox(line: string): boolean | null {\n const match = line.match(/^\\s*-\\s*\\[([ xX])\\]\\s+/);\n if (!match) return null;\n return match[1].toLowerCase() === 'x';\n}\n\nfunction withoutFencedCodeBlocks(content: string): string[] {\n const lines: string[] = [];\n let inFence = false;\n\n for (const line of content.split('\\n')) {\n if (/^\\s*```/.test(line)) {\n inFence = !inFence;\n continue;\n }\n if (!inFence) {\n lines.push(line);\n }\n }\n\n return lines;\n}\n\nfunction parseTasksDoc(content: string): ParsedTasks {\n const issueRaw = extractFieldValue(content, ISSUE_LABELS);\n const issueNumberMatch = issueRaw?.match(/^#(\\d+)$/);\n const issueNumber = issueNumberMatch ? Number(issueNumberMatch[1]) : null;\n const branchRaw = extractFieldValue(content, BRANCH_LABELS);\n const prRaw = extractFieldValue(content, PR_LABELS);\n const prePrDecision = extractFieldValue(content, PRE_PR_DECISION_LABELS);\n const tasks: ParsedTasks['tasks'] = [];\n const nonCodeLines = withoutFencedCodeBlocks(content);\n\n for (const line of nonCodeLines) {\n const match = line.match(\n /^\\s*-\\s*\\[(TODO|DOING|DONE|REVIEW)\\](?:\\[[^\\]]+\\])*\\s+(.+?)\\s*$/i\n );\n if (!match) continue;\n tasks.push({\n raw: line,\n status: match[1].toUpperCase() as SimpleTaskStatus,\n title: match[2].trim(),\n });\n }\n\n const allTasksChecked = nonCodeLines\n .some(\n (line) =>\n /(All tasks are|모든 태스크가)/i.test(line) &&\n parseMarkdownCheckbox(line) === true\n );\n const testsChecked = nonCodeLines\n .some(\n (line) =>\n /(Tests executed and passing|테스트 실행 및 통과)/i.test(line) &&\n parseMarkdownCheckbox(line) === true\n );\n const finalOutcomeChecked = nonCodeLines\n .some(\n (line) =>\n /(Final outcome shared and any required user confirmation recorded|Final user approval|최종 결과를 공유했고, 필요한 사용자 확인을 문서화된 workflow checkpoint 기준으로 기록함)/i.test(\n line\n ) && parseMarkdownCheckbox(line) === true\n );\n\n const prStatus = (() => {\n const value = (extractFieldValue(content, PR_STATUS_LABELS) || '')\n .trim()\n .toLowerCase();\n if (value === 'review') return 'review';\n if (value === 'approved') return 'approved';\n return null;\n })();\n\n const prePrReviewStatus = (() => {\n const value = (extractFieldValue(content, PRE_PR_REVIEW_LABELS) || '')\n .trim()\n .toLowerCase();\n if (value === 'pending') return 'pending';\n if (value === 'running') return 'running';\n if (value === 'done') return 'done';\n return null;\n })();\n\n const prePrDecisionOutcome = (() => {\n const value = (prePrDecision || '').trim().toLowerCase();\n const match = value.match(/\\b(approve|changes_requested|blocked)\\b/);\n return (match?.[1] as ParsedTasks['prePrDecisionOutcome']) || null;\n })();\n\n return {\n docStatus: parseApprovalStatus(\n extractFieldValue(content, DOC_STATUS_LABELS) || undefined\n ),\n issueNumber,\n branch: sanitizeMetadataValue(branchRaw),\n prLink: sanitizeMetadataValue(prRaw),\n prStatus,\n prePrReviewStatus,\n prePrEvidence: sanitizeMetadataValue(\n extractFieldValue(content, PRE_PR_EVIDENCE_LABELS)\n ),\n prePrDecision: sanitizeMetadataValue(prePrDecision),\n prePrDecisionOutcome,\n tasks,\n completion: {\n allTasksChecked,\n testsChecked,\n finalOutcomeChecked,\n },\n };\n}\n\nfunction sanitizeMetadataValue(value: string | null): string | null {\n if (!value) return null;\n const trimmed = value.trim().replace(/^`(.+)`$/, '$1');\n if (!trimmed || trimmed === '-') return null;\n return trimmed;\n}\n\nfunction parseWorkflowDraftMetadataExtended(content: string): ParsedWorkflowDraft {\n const metadata = parseWorkflowDraftMetadata(content);\n const prStatusRaw = extractFieldValue(content, PR_STATUS_LABELS);\n const normalizedPrStatus = (prStatusRaw || '').trim().toLowerCase();\n return {\n ...metadata,\n issueRef: sanitizeMetadataValue(extractFieldValue(content, ISSUE_LABELS)),\n prRef: sanitizeMetadataValue(extractFieldValue(content, PR_LABELS)),\n prStatus:\n normalizedPrStatus === 'review'\n ? 'review'\n : normalizedPrStatus === 'approved'\n ? 'approved'\n : null,\n };\n}\n\nasync function readFileIfExists(filePath: string): Promise<string | null> {\n if (!(await fs.pathExists(filePath))) return null;\n return fs.readFile(filePath, 'utf-8');\n}\n\nfunction buildFeatureRef(feature: ResolvedFeature): string {\n return feature.folderName;\n}\n\nfunction buildFeatureArgs(feature: ResolvedFeature): string {\n return feature.type && feature.type !== 'single'\n ? `${buildFeatureRef(feature)} --component ${feature.type}`\n : buildFeatureRef(feature);\n}\n\nfunction resolveExpectedBranch(feature: ResolvedFeature, tasks: ParsedTasks): string | null {\n if (tasks.branch) return tasks.branch;\n if (!tasks.issueNumber) return null;\n return `feat/${tasks.issueNumber}-${feature.slug}`;\n}\n\nfunction getCurrentProjectBranch(feature: ResolvedFeature): string | null {\n return (\n runGitCapture(['branch', '--show-current'], feature.git.projectGitCwd) ||\n runGitCapture(['rev-parse', '--abbrev-ref', 'HEAD'], feature.git.projectGitCwd) ||\n null\n );\n}\n\nfunction nextTodoTask(tasks: ParsedTasks): ParsedTasks['tasks'][number] | null {\n return tasks.tasks.find((task) => task.status === 'DOING') ||\n tasks.tasks.find((task) => task.status === 'TODO') ||\n null;\n}\n\nfunction allTasksDone(tasks: ParsedTasks): boolean {\n return tasks.tasks.length > 0 && tasks.tasks.every((task) => task.status === 'DONE');\n}\n\nfunction prePrSatisfied(tasks: ParsedTasks): boolean {\n return (\n tasks.prePrReviewStatus === 'done' &&\n !!tasks.prePrEvidence &&\n !!tasks.prePrDecision &&\n tasks.prePrDecisionOutcome === 'approve'\n );\n}\n\nfunction issueExistsRemotely(\n issueNumber: number | null,\n feature: ResolvedFeature\n): boolean {\n if (!issueNumber) return false;\n const result = runProcess(\n 'gh',\n ['issue', 'view', String(issueNumber), '--json', 'number'],\n feature.git.projectGitCwd\n );\n return result.code === 0;\n}\n\nfunction prExistsRemotely(prRef: string | null, feature: ResolvedFeature): boolean {\n if (!prRef) return false;\n const result = runProcess(\n 'gh',\n ['pr', 'view', prRef, '--json', 'url'],\n feature.git.projectGitCwd\n );\n return result.code === 0;\n}\n\nfunction buildAction(\n category: WorkflowStageAction['category'],\n summary: string,\n approvalRequired: boolean,\n command: string | null = null\n): WorkflowStageAction {\n return {\n category,\n summary,\n approvalRequired,\n command,\n };\n}\n\nfunction resolveFeatureSelectionError(\n selection: FeatureSelectionState\n): WorkflowStagePayload {\n const reasonCode =\n selection.status === 'no_features'\n ? 'NO_FEATURES'\n : 'FEATURE_SELECTION_REQUIRED';\n return {\n status: 'error',\n reasonCode,\n docsDir: selection.config.docsDir,\n featureRef: null,\n stage: null,\n nextAction: null,\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: null,\n };\n}\n\nexport async function collectWorkflowStage(\n cwd: string,\n selector?: string,\n component?: string\n): Promise<WorkflowStagePayload> {\n const config = await getConfig(cwd);\n if (!config) {\n return {\n status: 'error',\n reasonCode: 'CONFIG_NOT_FOUND',\n docsDir: null,\n featureRef: null,\n stage: null,\n nextAction: null,\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: null,\n };\n }\n\n const selection = await resolveFeatureSelection(cwd, selector, component);\n if (selection.status !== 'selected' || !selection.matchedFeature) {\n return resolveFeatureSelectionError(selection);\n }\n\n const feature = selection.matchedFeature;\n const requirements = resolveWorkflowRequirements(config);\n const paths = getFeatureDocPaths(feature);\n const specContent = await readFileIfExists(path.join(config.docsDir, paths.specPath));\n const planContent = await readFileIfExists(path.join(config.docsDir, paths.planPath));\n const tasksContent = await readFileIfExists(path.join(config.docsDir, paths.tasksPath));\n const issueContent = await readFileIfExists(path.join(config.docsDir, paths.issuePath));\n const prContent = await readFileIfExists(path.join(config.docsDir, paths.prPath));\n\n const specStatus = parseApprovalStatus(\n extractFieldValue(specContent || '', ['Status', '상태']) || undefined\n );\n const planStatus = parseApprovalStatus(\n extractFieldValue(planContent || '', ['Status', '상태']) || undefined\n );\n const tasks = parseTasksDoc(tasksContent || '');\n const issueDraft = parseWorkflowDraftMetadataExtended(issueContent || '');\n const prDraft = parseWorkflowDraftMetadataExtended(prContent || '');\n\n if (specStatus !== 'approved') {\n const approvalRequired = specStatus === 'review';\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'spec',\n nextAction: buildAction(\n approvalRequired ? 'spec_approve' : 'spec_write',\n approvalRequired\n ? 'Get user approval and update spec.md status to Approved.'\n : 'Write or refine spec.md until it is ready for approval.',\n approvalRequired\n ),\n approvalRequired,\n implementationAllowed: false,\n blockedReasonCode: 'SPEC_NOT_APPROVED',\n };\n }\n\n if (planStatus !== 'approved') {\n const approvalRequired = planStatus === 'review';\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'plan',\n nextAction: buildAction(\n approvalRequired ? 'plan_approve' : 'plan_write',\n approvalRequired\n ? 'Get user approval and update plan.md status to Approved.'\n : 'Write or refine plan.md until it is ready for approval.',\n approvalRequired\n ),\n approvalRequired,\n implementationAllowed: false,\n blockedReasonCode: 'PLAN_NOT_APPROVED',\n };\n }\n\n if (tasks.tasks.length === 0 || tasks.docStatus !== 'approved') {\n const approvalRequired = tasks.docStatus === 'review';\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'tasks',\n nextAction: buildAction(\n approvalRequired ? 'tasks_approve' : 'tasks_write',\n approvalRequired\n ? 'Get user approval and update tasks.md Doc Status to Approved.'\n : 'Add and refine tasks until tasks.md is execution-ready and Approved.',\n approvalRequired\n ),\n approvalRequired,\n implementationAllowed: false,\n blockedReasonCode: 'TASKS_NOT_READY',\n };\n }\n\n if (requirements.requireIssue) {\n const issueReady = issueDraft.status === 'ready';\n const issueCreated =\n tasks.issueNumber !== null &&\n issueExistsRemotely(tasks.issueNumber, feature);\n if (!issueCreated || !issueReady) {\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'issue',\n nextAction: issueReady && !issueCreated\n ? buildAction(\n 'issue_create',\n 'Create the GitHub issue from issue.md and sync the issue number into tasks.md.',\n true,\n `npx lee-spec-kit github issue ${buildFeatureArgs(feature)} --create --confirm OK`\n )\n : buildAction(\n 'issue_prepare',\n 'Prepare issue.md and set its Status to Ready before issue creation.',\n false\n ),\n approvalRequired: issueReady && !issueCreated,\n implementationAllowed: false,\n blockedReasonCode: 'ISSUE_NOT_CREATED',\n };\n }\n }\n\n if (requirements.requireBranch && !allTasksDone(tasks)) {\n const expectedBranch = resolveExpectedBranch(feature, tasks);\n const currentBranch = getCurrentProjectBranch(feature);\n if (expectedBranch && currentBranch !== expectedBranch) {\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'branch',\n nextAction: buildAction(\n 'branch_create',\n `Switch the project repo to ${expectedBranch} before implementation starts.`,\n false,\n `git checkout -b ${expectedBranch}`\n ),\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: 'BRANCH_NOT_READY',\n };\n }\n }\n\n if (!allTasksDone(tasks)) {\n const currentTask = nextTodoTask(tasks);\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'implementation',\n nextAction: buildAction(\n 'task_execute',\n currentTask\n ? `Continue the next implementation task: ${currentTask.title}`\n : 'Continue the active implementation task.',\n false\n ),\n approvalRequired: false,\n implementationAllowed: true,\n blockedReasonCode: null,\n };\n }\n\n if (\n !tasks.completion.allTasksChecked ||\n !tasks.completion.testsChecked ||\n !tasks.completion.finalOutcomeChecked\n ) {\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'implementation_approve',\n nextAction: buildAction(\n 'implementation_approve',\n 'Share the completed implementation, get user approval, and record the completion checkpoint in tasks.md.',\n true\n ),\n approvalRequired: true,\n implementationAllowed: false,\n blockedReasonCode: 'IMPLEMENTATION_APPROVAL_REQUIRED',\n };\n }\n\n if (requirements.prePrReviewEnabled && !prePrSatisfied(tasks)) {\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'pre_pr_review',\n nextAction: buildAction(\n 'pre_pr_review',\n 'Run and record the Pre-PR review until tasks.md shows an approve decision with evidence.',\n false\n ),\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: 'PRE_PR_REVIEW_NOT_APPROVED',\n };\n }\n\n if (requirements.requirePr) {\n const prReady = prDraft.status === 'ready';\n const prCreated =\n !!tasks.prLink &&\n prExistsRemotely(tasks.prLink, feature);\n if (!prCreated || !prReady) {\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'pr',\n nextAction: prReady && !prCreated\n ? buildAction(\n 'pr_create',\n 'Create the GitHub PR from pr.md and sync the PR metadata into tasks.md.',\n true,\n `npx lee-spec-kit github pr ${buildFeatureArgs(feature)} --create --confirm OK`\n )\n : buildAction(\n 'pr_prepare',\n 'Prepare pr.md and set its Status to Ready before PR creation.',\n false\n ),\n approvalRequired: prReady && !prCreated,\n implementationAllowed: false,\n blockedReasonCode: 'PR_NOT_CREATED',\n };\n }\n }\n\n if (requirements.requireReview && (tasks.prStatus !== 'approved' || prDraft.prStatus !== 'approved')) {\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'code_review',\n nextAction: buildAction(\n 'code_review',\n 'Complete PR review and record the final approved review state in tasks.md.',\n false\n ),\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: 'PR_REVIEW_NOT_APPROVED',\n };\n }\n\n if (requirements.requireMerge) {\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'merge',\n nextAction: buildAction(\n 'pr_merge',\n 'Merge the PR and sync the merged state back into tasks.md.',\n true,\n `npx lee-spec-kit github pr ${buildFeatureArgs(feature)} --merge --confirm OK`\n ),\n approvalRequired: true,\n implementationAllowed: false,\n blockedReasonCode: null,\n };\n }\n\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'done',\n nextAction: null,\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: null,\n };\n}\n","import { Command } from 'commander';\nimport { toCliError } from '../utils/cli-error.js';\nimport { collectWorkflowStage } from '../utils/workflow-stage.js';\n\ninterface WorkflowStageOptions {\n json?: boolean;\n component?: string;\n}\n\nexport function workflowStageCommand(program: Command): void {\n program\n .command('workflow-stage [feature-name]')\n .description('Resolve the current high-level workflow stage for the active feature')\n .option('--json', 'Output JSON for agents and hooks')\n .option('--component <component>', 'Component name for multi projects')\n .action(async (featureName: string | undefined, options: WorkflowStageOptions) => {\n try {\n const payload = await collectWorkflowStage(\n process.cwd(),\n featureName,\n options.component\n );\n if (options.json) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n if (payload.status !== 'ok') {\n console.log(`${payload.status}: ${payload.reasonCode}`);\n process.exitCode = 1;\n return;\n }\n console.log(`stage: ${payload.stage}`);\n if (payload.nextAction) {\n console.log(`next: ${payload.nextAction.category}`);\n }\n } catch (error) {\n const cliError = toCliError(error);\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'error',\n reasonCode: cliError.code,\n error: cliError.message,\n },\n null,\n 2\n )\n );\n process.exitCode = 1;\n return;\n }\n process.stderr.write(`[${cliError.code}] ${cliError.message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import { Command } from 'commander';\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport { getConfig } from '../utils/config.js';\nimport { runGitCapture } from '../utils/git-run.js';\nimport { createCliError, toCliError } from '../utils/cli-error.js';\nimport {\n type ResolvedFeature,\n resolveFeatureSelection,\n} from '../utils/feature-resolver.js';\nimport {\n resolveConfiguredStandaloneWorkspaceRoot,\n resolveGitTopLevelOrNull,\n resolveStandaloneProjectRoots,\n} from '../utils/standalone-workspace.js';\nimport { getTemplatesDir } from '../utils/paths.js';\nimport { applyLocalWorkflowTemplateToContent } from '../utils/local-workflow-template.js';\nimport { applyReplacements } from '../utils/template.js';\nimport type { ProjectConfig } from '../config/types.js';\n\ninterface WorkflowAuditOptions {\n json?: boolean;\n}\n\ninterface ChangedPathRecord {\n repoRoot: string;\n absolutePath: string;\n relativeToRepo: string;\n relativeToDocs: string | null;\n}\n\ninterface CodeRootResolution {\n codeRoots: string[];\n errorReasonCode?:\n | 'STANDALONE_WORKSPACE_ROOT_REQUIRED'\n | 'STANDALONE_PROJECT_ROOT_UNRESOLVED';\n}\n\ninterface WorkflowAuditPayload {\n status: 'ok' | 'needs_sync' | 'skipped' | 'error';\n reasonCode:\n | 'WORKFLOW_IN_SYNC'\n | 'CODE_WITHOUT_DOCS_SYNC'\n | 'ACTIVE_FEATURE_SCOPE_UNCLEAR'\n | 'STANDALONE_WORKSPACE_ROOT_REQUIRED'\n | 'STANDALONE_PROJECT_ROOT_UNRESOLVED'\n | 'NO_GIT_REPOSITORY'\n | 'CONFIG_NOT_FOUND'\n | 'UNEXPECTED_ERROR';\n docsDir: string | null;\n activeFeatureRef: string | null;\n changedCodePaths: string[];\n changedFeatureDocPaths: string[];\n latestCodeChangeAt: string | null;\n latestFeatureDocSyncAt: string | null;\n}\n\nconst FEATURE_DOC_FILE_PATTERN =\n /^features\\/(?:[^/]+\\/)?F\\d{3,}[^/]*\\/(spec|plan|tasks|decisions|issue|pr)\\.md$/i;\nconst CODE_FILE_PATTERN =\n /(^|\\/)(Dockerfile|Makefile)$|\\.(c|cc|cjs|cpp|cs|css|cts|go|h|hpp|html|java|js|json|jsx|kt|mjs|mts|php|py|rb|rs|scss|sh|sql|swift|ts|tsx|vue|yaml|yml|zsh)$/i;\nconst WORKFLOW_SYNC_MARKER_PATTERN =\n /<!--\\s*lee-spec-kit:workflow-sync\\s+([0-9]{4}-[0-9]{2}-[0-9]{2}T[^ ]+?)\\s*-->/gi;\n\nexport function workflowAuditCommand(program: Command): void {\n program\n .command('workflow-audit')\n .description('Validate whether code changes have been synchronized back into feature docs')\n .option('--json', 'Output JSON for hooks and agents')\n .action(async (options: WorkflowAuditOptions) => {\n try {\n const payload = await collectWorkflowAudit(process.cwd());\n if (options.json) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n console.log(`${payload.status}: ${payload.reasonCode}`);\n } catch (error) {\n const cliError = toCliError(error);\n const payload: WorkflowAuditPayload = {\n status: 'error',\n reasonCode: 'UNEXPECTED_ERROR',\n docsDir: null,\n activeFeatureRef: null,\n changedCodePaths: [],\n changedFeatureDocPaths: [],\n latestCodeChangeAt: null,\n latestFeatureDocSyncAt: null,\n };\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n ...payload,\n error: cliError.message,\n },\n null,\n 2\n )\n );\n return;\n }\n process.stderr.write(`[${cliError.code}] ${cliError.message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n\nasync function collectWorkflowAudit(cwd: string): Promise<WorkflowAuditPayload> {\n const config = await getConfig(cwd);\n if (!config) {\n throw createCliError('CONFIG_NOT_FOUND', 'Config file not found. Run `init` first.');\n }\n\n const activeFeature = await resolveActiveFeature(cwd);\n const activeFeatureRef = activeFeature?.folderName ?? null;\n const codeRootResolution = resolveCodeRepoRoots(cwd, config, activeFeature);\n const codeRoots = codeRootResolution.codeRoots;\n\n if (codeRootResolution.errorReasonCode) {\n return {\n status: 'error',\n reasonCode: codeRootResolution.errorReasonCode,\n docsDir: config.docsDir,\n activeFeatureRef,\n changedCodePaths: [],\n changedFeatureDocPaths: [],\n latestCodeChangeAt: null,\n latestFeatureDocSyncAt: null,\n };\n }\n\n if (codeRoots.length === 0) {\n return {\n status: 'skipped',\n reasonCode: 'NO_GIT_REPOSITORY',\n docsDir: config.docsDir,\n activeFeatureRef,\n changedCodePaths: [],\n changedFeatureDocPaths: [],\n latestCodeChangeAt: null,\n latestFeatureDocSyncAt: null,\n };\n }\n\n const changedCodePaths = collectChangedRecords(codeRoots, config.docsDir).filter(\n isCodeChange\n );\n const outOfScopeStandaloneCodePaths = collectOutOfScopeStandaloneCodeChanges(\n config,\n activeFeature,\n codeRoots\n );\n const combinedChangedCodePaths = [\n ...changedCodePaths,\n ...outOfScopeStandaloneCodePaths,\n ];\n const docsRepoRoot = resolveDocsRepoRoot(config.docsDir);\n const changedFeatureDocPaths = docsRepoRoot\n ? collectChangedRecords([docsRepoRoot], config.docsDir).filter(isFeatureDocChange)\n : [];\n const meaningfulChangedFeatureDocPaths = await filterMeaningfulFeatureDocRecords(\n config,\n activeFeature,\n changedFeatureDocPaths\n );\n const scopedFeatureDocPaths = activeFeatureRef\n ? meaningfulChangedFeatureDocPaths.filter(\n (record) => featureRefFromDocPath(record.relativeToDocs) === activeFeatureRef\n )\n : [];\n const allMeaningfulFeatureDocPaths = meaningfulChangedFeatureDocPaths;\n\n const latestCodeChangeAt = await getLatestMtimeIso(combinedChangedCodePaths);\n const latestFeatureDocSyncAt = await getLatestWorkflowSyncMarkerAt(activeFeature);\n\n if (combinedChangedCodePaths.length === 0) {\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_IN_SYNC',\n docsDir: config.docsDir,\n activeFeatureRef,\n changedCodePaths: [],\n changedFeatureDocPaths: allMeaningfulFeatureDocPaths.map((item) => item.relativeToRepo),\n latestCodeChangeAt: null,\n latestFeatureDocSyncAt,\n };\n }\n\n if (!activeFeatureRef) {\n return {\n status: 'needs_sync',\n reasonCode: 'ACTIVE_FEATURE_SCOPE_UNCLEAR',\n docsDir: config.docsDir,\n activeFeatureRef: null,\n changedCodePaths: combinedChangedCodePaths.map((item) => item.relativeToRepo),\n changedFeatureDocPaths: allMeaningfulFeatureDocPaths.map((item) => item.relativeToRepo),\n latestCodeChangeAt,\n latestFeatureDocSyncAt,\n };\n }\n\n if (outOfScopeStandaloneCodePaths.length > 0) {\n return {\n status: 'needs_sync',\n reasonCode: 'ACTIVE_FEATURE_SCOPE_UNCLEAR',\n docsDir: config.docsDir,\n activeFeatureRef,\n changedCodePaths: combinedChangedCodePaths.map((item) => item.relativeToRepo),\n changedFeatureDocPaths: allMeaningfulFeatureDocPaths.map((item) => item.relativeToRepo),\n latestCodeChangeAt,\n latestFeatureDocSyncAt,\n };\n }\n\n const needsSync =\n scopedFeatureDocPaths.length === 0 ||\n !latestFeatureDocSyncAt ||\n !latestCodeChangeAt ||\n latestCodeChangeAt > latestFeatureDocSyncAt;\n\n return {\n status: needsSync ? 'needs_sync' : 'ok',\n reasonCode: needsSync ? 'CODE_WITHOUT_DOCS_SYNC' : 'WORKFLOW_IN_SYNC',\n docsDir: config.docsDir,\n activeFeatureRef,\n changedCodePaths: combinedChangedCodePaths.map((item) => item.relativeToRepo),\n changedFeatureDocPaths: scopedFeatureDocPaths.map((item) => item.relativeToRepo),\n latestCodeChangeAt,\n latestFeatureDocSyncAt,\n };\n}\n\nfunction parsePorcelainPaths(porcelain: string): string[] {\n if (!porcelain.trim()) return [];\n const deduped = new Set<string>();\n\n for (const rawLine of porcelain.split('\\n')) {\n const line = rawLine.trimEnd();\n if (!line) continue;\n const payload = line.length > 3 ? line.slice(3) : '';\n if (!payload) continue;\n\n if (payload.includes(' -> ')) {\n const [fromPath, toPath] = payload.split(' -> ');\n if (fromPath) deduped.add(fromPath.trim());\n if (toPath) deduped.add(toPath.trim());\n continue;\n }\n\n deduped.add(payload.trim());\n }\n\n return [...deduped];\n}\n\nfunction toChangedPathRecord(\n repoRoot: string,\n docsDir: string,\n relativeToRepo: string\n): ChangedPathRecord {\n const absolutePath = path.resolve(repoRoot, relativeToRepo);\n const relativeToDocsCandidate = normalizeSlashes(\n path.relative(docsDir, absolutePath)\n );\n const relativeToDocs =\n relativeToDocsCandidate === '' ||\n relativeToDocsCandidate.startsWith('..')\n ? null\n : relativeToDocsCandidate;\n\n return {\n repoRoot,\n absolutePath,\n relativeToRepo: normalizeSlashes(relativeToRepo),\n relativeToDocs,\n };\n}\n\nfunction collectChangedRecords(\n repoRoots: string[],\n docsDir: string\n): ChangedPathRecord[] {\n const records: ChangedPathRecord[] = [];\n for (const repoRoot of repoRoots) {\n const porcelain =\n runGitCapture(['status', '--porcelain=v1', '--untracked-files=all'], repoRoot) || '';\n const changedRelativePaths = parsePorcelainPaths(porcelain);\n for (const relativeToRepo of changedRelativePaths) {\n records.push(toChangedPathRecord(repoRoot, docsDir, relativeToRepo));\n }\n }\n return records;\n}\n\nfunction isFeatureDocChange(record: ChangedPathRecord): boolean {\n return !!record.relativeToDocs && FEATURE_DOC_FILE_PATTERN.test(record.relativeToDocs);\n}\n\nfunction featureRefFromDocPath(relativeToDocs: string | null): string | null {\n if (!relativeToDocs) return null;\n const match = relativeToDocs.match(/^features\\/(?:[^/]+\\/)?(F\\d{3,}[^/]+)\\//i);\n return match?.[1] ?? null;\n}\n\nfunction isCodeChange(record: ChangedPathRecord): boolean {\n if (record.relativeToDocs) return false;\n const normalized = record.relativeToRepo;\n if (\n normalized.startsWith('.git/') ||\n normalized.startsWith('.codex/') ||\n normalized === 'AGENTS.md'\n ) {\n return false;\n }\n return CODE_FILE_PATTERN.test(path.basename(normalized)) || CODE_FILE_PATTERN.test(normalized);\n}\n\nasync function getLatestMtimeIso(\n records: ChangedPathRecord[]\n): Promise<string | null> {\n let latest = 0;\n\n for (const record of records) {\n if (!(await fs.pathExists(record.absolutePath))) continue;\n const stat = await fs.stat(record.absolutePath);\n const value = stat.mtimeMs;\n if (value > latest) latest = value;\n }\n\n return latest > 0 ? new Date(latest).toISOString() : null;\n}\n\nasync function getLatestWorkflowSyncMarkerAt(\n activeFeature: ResolvedFeature | null\n): Promise<string | null> {\n if (!activeFeature) return null;\n const canonicalFiles = ['spec.md', 'plan.md', 'tasks.md', 'decisions.md', 'issue.md', 'pr.md'];\n let latest = 0;\n const nowMs = Date.now();\n\n for (const fileName of canonicalFiles) {\n const absolutePath = path.join(activeFeature.path, fileName);\n if (!(await fs.pathExists(absolutePath))) continue;\n const stat = await fs.stat(absolutePath);\n const content = await fs.readFile(absolutePath, 'utf-8');\n const matchedTimes = extractWorkflowSyncMarkerTimes(\n content,\n nowMs,\n stat.mtimeMs\n );\n for (const value of matchedTimes) {\n if (value > latest) latest = value;\n }\n }\n\n return latest > 0 ? new Date(latest).toISOString() : null;\n}\n\nfunction extractWorkflowSyncMarkerTimes(\n content: string,\n nowMs: number,\n fileMtimeMs: number\n): number[] {\n const values: number[] = [];\n for (const match of content.matchAll(WORKFLOW_SYNC_MARKER_PATTERN)) {\n const rawTimestamp = String(match[1] || '').trim();\n if (!rawTimestamp) continue;\n const parsed = Date.parse(rawTimestamp);\n if (\n Number.isFinite(parsed) &&\n parsed <= nowMs &&\n parsed <= fileMtimeMs\n ) {\n values.push(parsed);\n }\n }\n return values;\n}\n\nasync function filterMeaningfulFeatureDocRecords(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n activeFeature: ResolvedFeature | null,\n records: ChangedPathRecord[]\n): Promise<ChangedPathRecord[]> {\n const filtered: ChangedPathRecord[] = [];\n for (const record of records) {\n if (await isMeaningfulFeatureDocRecord(config, activeFeature, record)) {\n filtered.push(record);\n }\n }\n return filtered;\n}\n\nasync function isMeaningfulFeatureDocRecord(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n activeFeature: ResolvedFeature | null,\n record: ChangedPathRecord\n): Promise<boolean> {\n if (!activeFeature) return true;\n if (isTrackedGitPath(record)) return true;\n\n const fileName = path.basename(record.absolutePath);\n const expectedContent = await renderExpectedInitialFeatureDocContent(\n config,\n activeFeature,\n fileName\n );\n if (expectedContent === null) {\n return true;\n }\n\n if (!(await fs.pathExists(record.absolutePath))) {\n return true;\n }\n const actualContent = await fs.readFile(record.absolutePath, 'utf-8');\n return normalizeFeatureDocContent(actualContent) !== normalizeFeatureDocContent(expectedContent);\n}\n\nfunction isTrackedGitPath(record: ChangedPathRecord): boolean {\n return !!runGitCapture(\n ['ls-files', '--error-unmatch', '--', record.relativeToRepo],\n record.repoRoot\n );\n}\n\nasync function renderExpectedInitialFeatureDocContent(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n activeFeature: ResolvedFeature,\n fileName: string\n): Promise<string | null> {\n const templatePath = path.join(\n getTemplatesDir(),\n config.lang,\n 'common',\n 'features',\n 'feature-base',\n fileName\n );\n if (!(await fs.pathExists(templatePath))) {\n return null;\n }\n\n const rawTemplate = await fs.readFile(templatePath, 'utf-8');\n const rendered = renderFeatureDocTemplate(config, activeFeature, rawTemplate);\n if (config.workflow?.mode === 'local') {\n return applyLocalWorkflowTemplateToContent(fileName, rendered, config.lang);\n }\n return rendered;\n}\n\nfunction renderFeatureDocTemplate(\n config: Pick<ProjectConfig, 'projectName' | 'projectType' | 'lang'>,\n activeFeature: ResolvedFeature,\n template: string\n): string {\n const featureName = activeFeature.slug;\n const featureId = activeFeature.id || activeFeature.folderName.split('-')[0] || '';\n const idNumber = featureId.replace(/^F/i, '');\n const component = config.projectType === 'multi' ? activeFeature.type : '';\n const repoName =\n config.projectType === 'multi'\n ? `${config.projectName || '{{projectName}}'}-${component}`\n : (config.projectName || '{{projectName}}');\n\n const replacements: Record<string, string> = {\n '{{projectName}}': config.projectName || '{{projectName}}',\n '{기능명}': featureName,\n '{번호}': idNumber,\n '{결정 제목}': `${featureName} 결정`,\n '{YYYY-MM-DD}': '__DATE__',\n '{component}': component || '',\n '{{projectName}}-{component}': repoName,\n '{be|fe}': component || '',\n '{이슈번호}': '',\n '{{description}}': '',\n '{feature-name}': featureName,\n '{number}': idNumber,\n '{Decision Title}': `${featureName} design decision`,\n '{issue-number}': '',\n '{{projectName}}-{be|fe}': repoName,\n };\n\n let rendered = applyReplacements(template, replacements);\n\n if (config.lang === 'en') {\n rendered = applyReplacements(rendered, {\n '기능 ID': 'Feature ID',\n '기능명': 'Feature Name',\n '대상 레포': 'Target Repo',\n '이슈 번호': 'Issue Number',\n '작성일': 'Created',\n '상태': 'Status',\n });\n }\n\n return rendered;\n}\n\nfunction normalizeFeatureDocContent(content: string): string {\n return content.replace(/\\r\\n/g, '\\n').replace(/\\b\\d{4}-\\d{2}-\\d{2}\\b/g, '__DATE__');\n}\n\nfunction resolveDocsRepoRoot(docsDir: string): string | null {\n return runGitCapture(['rev-parse', '--show-toplevel'], docsDir) || null;\n}\n\nfunction resolveCodeRepoRoots(\n cwd: string,\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n activeFeature: ResolvedFeature | null\n): CodeRootResolution {\n if (config.docsRepo !== 'standalone') {\n const repoRoot = runGitCapture(['rev-parse', '--show-toplevel'], cwd) || null;\n return { codeRoots: repoRoot ? [repoRoot] : [] };\n }\n\n if (!resolveConfiguredStandaloneWorkspaceRoot(config)) {\n return {\n codeRoots: [],\n errorReasonCode: 'STANDALONE_WORKSPACE_ROOT_REQUIRED',\n };\n }\n\n const featureGitCwd = activeFeature?.git.projectGitCwd;\n if (featureGitCwd) {\n const repoRoot = resolveGitTopLevelOrNull(featureGitCwd);\n return repoRoot\n ? { codeRoots: [repoRoot] }\n : {\n codeRoots: [],\n errorReasonCode: 'STANDALONE_PROJECT_ROOT_UNRESOLVED',\n };\n }\n\n const component =\n activeFeature?.type && activeFeature.type !== 'single'\n ? activeFeature.type\n : undefined;\n const resolvedRoots = resolveStandaloneProjectRoots(config, component);\n if (resolvedRoots.length === 0) {\n return {\n codeRoots: [],\n errorReasonCode: 'STANDALONE_PROJECT_ROOT_UNRESOLVED',\n };\n }\n\n const gitRoots = resolvedRoots\n .map((root) => resolveGitTopLevelOrNull(root))\n if (gitRoots.some((root) => !root)) {\n return {\n codeRoots: [],\n errorReasonCode: 'STANDALONE_PROJECT_ROOT_UNRESOLVED',\n };\n }\n\n return { codeRoots: [...new Set(gitRoots)] as string[] };\n}\n\nfunction collectOutOfScopeStandaloneCodeChanges(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n activeFeature: ResolvedFeature | null,\n scopedCodeRoots: string[]\n): ChangedPathRecord[] {\n if (config.docsRepo !== 'standalone' || !activeFeature) {\n return [];\n }\n\n const normalizedScopedRoots = new Set(scopedCodeRoots.map((root) => path.resolve(root)));\n const extraRoots = resolveStandaloneProjectRoots(config)\n .map((root) => resolveGitTopLevelOrNull(root))\n .filter((root): root is string => !!root)\n .map((root) => path.resolve(root))\n .filter((root) => !normalizedScopedRoots.has(root));\n\n if (extraRoots.length === 0) {\n return [];\n }\n\n return collectChangedRecords([...new Set(extraRoots)], config.docsDir).filter(\n isCodeChange\n );\n}\n\nasync function resolveActiveFeature(cwd: string): Promise<ResolvedFeature | null> {\n const selection = await resolveFeatureSelection(cwd);\n return selection.matchedFeature;\n}\n\nfunction normalizeSlashes(value: string): string {\n return value.replace(/\\\\/g, '/');\n}\n","import path from 'path';\nimport fs from 'fs-extra';\n\nexport interface AllowedDocsEntriesConfig {\n dirs?: string[];\n files?: string[];\n}\n\nexport interface UnmanagedDocsEntry {\n name: string;\n kind: 'dir' | 'file';\n absPath: string;\n relPath: string;\n}\n\nexport const DEFAULT_MANAGED_DOC_DIRS = [\n 'agents',\n 'designs',\n 'features',\n 'ideas',\n 'prd',\n 'scripts',\n] as const;\n\nexport const DEFAULT_MANAGED_DOC_FILES = [\n 'AGENTS.md',\n 'README.md',\n '.lee-spec-kit.json',\n '.gitignore',\n] as const;\n\nconst DOC_LIKE_FILE_EXTENSIONS = new Set([\n '.md',\n '.mdx',\n '.txt',\n '.rst',\n '.adoc',\n]);\n\nfunction normalizeEntryName(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction toAllowedSet(values: readonly string[], extras?: string[]): Set<string> {\n return new Set(\n [...values, ...(extras || [])]\n .map((entry) => normalizeEntryName(entry))\n .filter(Boolean)\n );\n}\n\nfunction isDocLikeFile(name: string): boolean {\n return DOC_LIKE_FILE_EXTENSIONS.has(path.extname(name).toLowerCase());\n}\n\nexport async function collectUnmanagedDocsEntries(\n docsDir: string,\n allowed?: AllowedDocsEntriesConfig\n): Promise<UnmanagedDocsEntry[]> {\n const allowedDirs = toAllowedSet(DEFAULT_MANAGED_DOC_DIRS, allowed?.dirs);\n const allowedFiles = toAllowedSet(DEFAULT_MANAGED_DOC_FILES, allowed?.files);\n const entries = await fs.readdir(docsDir, { withFileTypes: true });\n const unmanaged: UnmanagedDocsEntry[] = [];\n\n for (const entry of entries) {\n const name = entry.name || '';\n if (!name) continue;\n\n if (entry.isDirectory()) {\n if (name.startsWith('.')) continue;\n if (allowedDirs.has(normalizeEntryName(name))) continue;\n unmanaged.push({\n name,\n kind: 'dir',\n absPath: path.join(docsDir, name),\n relPath: `docs/${name}`,\n });\n continue;\n }\n\n if (!entry.isFile()) continue;\n if (allowedFiles.has(normalizeEntryName(name))) continue;\n if (!isDocLikeFile(name)) continue;\n unmanaged.push({\n name,\n kind: 'file',\n absPath: path.join(docsDir, name),\n relPath: `docs/${name}`,\n });\n }\n\n return unmanaged.sort((a, b) => a.relPath.localeCompare(b.relPath));\n}\n","import { Command } from 'commander';\nimport path from 'node:path';\nimport { getConfig } from '../utils/config.js';\nimport { runGitCapture } from '../utils/git-run.js';\nimport { createCliError, toCliError } from '../utils/cli-error.js';\nimport { resolveStandaloneProjectRoots } from '../utils/standalone-workspace.js';\nimport {\n DEFAULT_MANAGED_DOC_DIRS,\n DEFAULT_MANAGED_DOC_FILES,\n type AllowedDocsEntriesConfig,\n} from '../utils/unmanaged-docs.js';\n\ninterface CommitAuditOptions {\n json?: boolean;\n gitRoot?: string;\n}\n\ntype CommitAuditReasonCode =\n | 'COMMIT_ALLOWED'\n | 'UNSUPPORTED_GIT_TARGET'\n | 'UNMANAGED_DOCS_COMMIT'\n | 'NON_CANONICAL_FEATURE_DOC_COMMIT'\n | 'CANONICAL_FEATURE_DOC_DELETION'\n | 'DOCS_COMMIT_POLICY_VIOLATION'\n | 'NO_GIT_REPOSITORY'\n | 'CONFIG_NOT_FOUND'\n | 'UNEXPECTED_ERROR';\n\ninterface CommitAuditViolation {\n path: string;\n kind:\n | 'unmanaged_docs_entry'\n | 'non_canonical_feature_doc'\n | 'canonical_feature_doc_deletion'\n | 'unsupported_git_target';\n detail: string;\n}\n\ninterface StagedPathEntry {\n path: string;\n status: string;\n role: 'path' | 'source' | 'target';\n}\n\ninterface CommitAuditPayload {\n status: 'ok' | 'blocked' | 'skipped' | 'error';\n reasonCode: CommitAuditReasonCode;\n docsDir: string | null;\n stagedPaths: string[];\n blockedPaths: string[];\n violations: CommitAuditViolation[];\n}\n\nconst CANONICAL_FEATURE_DOC_PATTERN =\n /^features\\/(?:[^/]+\\/)?F\\d{3,}[^/]*\\/(spec|plan|tasks|decisions|issue|pr)\\.md$/i;\nconst FEATURE_DOC_CANDIDATE_PATTERN =\n /^features\\/(?:[^/]+\\/)?F\\d{3,}[^/]*\\/(.+)$/i;\n\nexport function commitAuditCommand(program: Command): void {\n program\n .command('commit-audit')\n .description('Validate staged docs paths before commit')\n .option('--json', 'Output JSON for hooks and agents')\n .option('--git-root <path>', 'Override the git root used for staged-path inspection')\n .action(async (options: CommitAuditOptions) => {\n try {\n const payload = await collectCommitAudit(process.cwd(), options.gitRoot);\n if (options.json) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n console.log(`${payload.status}: ${payload.reasonCode}`);\n } catch (error) {\n const cliError = toCliError(error);\n const payload: CommitAuditPayload = {\n status: 'error',\n reasonCode: cliError.code === 'CONFIG_NOT_FOUND'\n ? 'CONFIG_NOT_FOUND'\n : 'UNEXPECTED_ERROR',\n docsDir: null,\n stagedPaths: [],\n blockedPaths: [],\n violations: [],\n };\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n ...payload,\n error: cliError.message,\n },\n null,\n 2\n )\n );\n return;\n }\n process.stderr.write(`[${cliError.code}] ${cliError.message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n\nasync function collectCommitAudit(\n cwd: string,\n gitRootOverride?: string\n): Promise<CommitAuditPayload> {\n const config = await getConfig(cwd);\n if (!config) {\n throw createCliError('CONFIG_NOT_FOUND', 'Config file not found. Run `init` first.');\n }\n\n const overrideRoot = gitRootOverride\n ? path.resolve(cwd, gitRootOverride)\n : null;\n const repoRoot =\n (overrideRoot\n ? runGitCapture(['rev-parse', '--show-toplevel'], overrideRoot)\n : runGitCapture(['rev-parse', '--show-toplevel'], cwd)) || null;\n if (!repoRoot) {\n return {\n status: 'skipped',\n reasonCode: 'NO_GIT_REPOSITORY',\n docsDir: config.docsDir,\n stagedPaths: [],\n blockedPaths: [],\n violations: [],\n };\n }\n\n const stagedOutput =\n runGitCapture(['diff', '--cached', '--name-status', '--diff-filter=ACMRD'], repoRoot) || '';\n const stagedEntries = parseStagedPaths(stagedOutput);\n const stagedPaths = [...new Set(stagedEntries.map((entry) => entry.path))];\n const targetRepoViolation = collectUnsupportedTargetRepoViolation(\n config,\n cwd,\n repoRoot\n );\n if (targetRepoViolation) {\n return {\n status: 'blocked',\n reasonCode: 'UNSUPPORTED_GIT_TARGET',\n docsDir: config.docsDir,\n stagedPaths,\n blockedPaths: [targetRepoViolation.path],\n violations: [targetRepoViolation],\n };\n }\n const violations = collectCommitViolations(\n repoRoot,\n config.docsDir,\n stagedEntries,\n config.allowedDocsEntries\n );\n\n if (violations.length === 0) {\n return {\n status: 'ok',\n reasonCode: 'COMMIT_ALLOWED',\n docsDir: config.docsDir,\n stagedPaths,\n blockedPaths: [],\n violations: [],\n };\n }\n\n return {\n status: 'blocked',\n reasonCode: resolveReasonCode(violations),\n docsDir: config.docsDir,\n stagedPaths,\n blockedPaths: [...new Set(violations.map((entry) => entry.path))].sort(),\n violations,\n };\n}\n\nfunction collectUnsupportedTargetRepoViolation(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n cwd: string,\n repoRoot: string\n): CommitAuditViolation | null {\n const allowedRepoRoots = collectAllowedCommitRepoRoots(config, cwd);\n const normalizedRepoRoot = path.resolve(repoRoot);\n if (allowedRepoRoots.has(normalizedRepoRoot)) {\n return null;\n }\n return {\n path: normalizeSlashes(normalizedRepoRoot),\n kind: 'unsupported_git_target',\n detail:\n 'Commit target repo is outside the current lee-spec-kit project topology. Re-run the commit from the active workspace or target repo root instead.',\n };\n}\n\nfunction collectAllowedCommitRepoRoots(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n cwd: string\n): Set<string> {\n const allowed = new Set<string>();\n const docsRepoRoot = runGitCapture(['rev-parse', '--show-toplevel'], config.docsDir);\n if (docsRepoRoot) {\n allowed.add(path.resolve(docsRepoRoot));\n }\n\n if (config.docsRepo === 'standalone') {\n const scopedProjectRoots = resolveStandaloneProjectRoots(config);\n for (const projectRoot of scopedProjectRoots) {\n const projectRepoRoot = runGitCapture(['rev-parse', '--show-toplevel'], projectRoot);\n if (projectRepoRoot) {\n allowed.add(path.resolve(projectRepoRoot));\n }\n }\n return allowed;\n }\n\n const cwdRepoRoot = runGitCapture(['rev-parse', '--show-toplevel'], cwd);\n if (cwdRepoRoot) {\n allowed.add(path.resolve(cwdRepoRoot));\n }\n return allowed;\n}\n\nfunction parseStagedPaths(output: string): StagedPathEntry[] {\n const staged = new Map<string, string>();\n\n for (const rawLine of output.split('\\n')) {\n const line = rawLine.trim();\n if (!line) continue;\n const parts = line.split('\\t').map((entry) => entry.trim()).filter(Boolean);\n if (parts.length < 2) continue;\n\n const status = parts[0];\n if (/^[RC]/i.test(status) && parts.length >= 3) {\n staged.set(`source:${normalizeSlashes(parts[1])}`, `${status}:source`);\n staged.set(`target:${normalizeSlashes(parts[2])}`, `${status}:target`);\n continue;\n }\n\n staged.set(`path:${normalizeSlashes(parts[1])}`, `${status}:path`);\n }\n\n return [...staged.entries()].map(([encodedPath, encodedStatus]) => {\n const [role, path] = encodedPath.split(':', 2);\n const [status, entryRole] = encodedStatus.split(':', 2);\n return {\n path,\n status,\n role: (entryRole || role || 'path') as StagedPathEntry['role'],\n };\n });\n}\n\nfunction collectCommitViolations(\n repoRoot: string,\n docsDir: string,\n stagedEntries: StagedPathEntry[],\n allowed?: AllowedDocsEntriesConfig\n): CommitAuditViolation[] {\n const allowedDirs = toAllowedSet(DEFAULT_MANAGED_DOC_DIRS, allowed?.dirs);\n const allowedFiles = toAllowedSet(DEFAULT_MANAGED_DOC_FILES, allowed?.files);\n const violations = new Map<string, CommitAuditViolation>();\n\n for (const stagedEntry of stagedEntries) {\n const stagedPath = stagedEntry.path;\n const absolutePath = path.resolve(repoRoot, stagedPath);\n const relativeToDocs = normalizeSlashes(path.relative(docsDir, absolutePath));\n if (\n !relativeToDocs ||\n relativeToDocs === '' ||\n relativeToDocs.startsWith('..')\n ) {\n continue;\n }\n\n const segments = relativeToDocs.split('/');\n const topLevel = segments[0]?.trim();\n if (!topLevel) continue;\n\n if (\n (/^D/i.test(stagedEntry.status) ||\n (/^R/i.test(stagedEntry.status) && stagedEntry.role === 'source')) &&\n CANONICAL_FEATURE_DOC_PATTERN.test(relativeToDocs)\n ) {\n violations.set(stagedPath, {\n path: stagedPath,\n kind: 'canonical_feature_doc_deletion',\n detail:\n 'Deleting canonical feature docs requires restoring the file or moving the change into canonical replacements first.',\n });\n continue;\n }\n\n if (segments.length === 1) {\n if (!allowedFiles.has(normalizeEntryName(topLevel))) {\n violations.set(stagedPath, {\n path: stagedPath,\n kind: 'unmanaged_docs_entry',\n detail: `Top-level docs file is outside the canonical surface: docs/${topLevel}`,\n });\n }\n continue;\n }\n\n if (!allowedDirs.has(normalizeEntryName(topLevel))) {\n violations.set(stagedPath, {\n path: stagedPath,\n kind: 'unmanaged_docs_entry',\n detail: `Top-level docs directory is outside the canonical surface: docs/${topLevel}`,\n });\n continue;\n }\n\n if (\n topLevel === 'features' &&\n FEATURE_DOC_CANDIDATE_PATTERN.test(relativeToDocs) &&\n !CANONICAL_FEATURE_DOC_PATTERN.test(relativeToDocs)\n ) {\n violations.set(stagedPath, {\n path: stagedPath,\n kind: 'non_canonical_feature_doc',\n detail:\n 'Feature-local files must use the canonical file names only: spec.md, plan.md, tasks.md, decisions.md, issue.md, pr.md',\n });\n }\n }\n\n return [...violations.values()].sort((a, b) => a.path.localeCompare(b.path));\n}\n\nfunction resolveReasonCode(violations: CommitAuditViolation[]): CommitAuditReasonCode {\n const kinds = new Set(violations.map((entry) => entry.kind));\n if (kinds.size > 1) return 'DOCS_COMMIT_POLICY_VIOLATION';\n if (kinds.has('unsupported_git_target')) return 'UNSUPPORTED_GIT_TARGET';\n if (kinds.has('unmanaged_docs_entry')) return 'UNMANAGED_DOCS_COMMIT';\n if (kinds.has('canonical_feature_doc_deletion')) {\n return 'CANONICAL_FEATURE_DOC_DELETION';\n }\n return 'NON_CANONICAL_FEATURE_DOC_COMMIT';\n}\n\nfunction normalizeEntryName(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction toAllowedSet(values: readonly string[], extras?: string[]): Set<string> {\n return new Set(\n [...values, ...(extras || [])]\n .map((entry) => normalizeEntryName(entry))\n .filter(Boolean)\n );\n}\n\nfunction normalizeSlashes(value: string): string {\n return value.replace(/\\\\/g, '/');\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, type Command } from 'commander';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport { initCommand } from './commands/init.js';\nimport { featureCommand } from './commands/feature.js';\nimport { ideaCommand } from './commands/idea.js';\nimport { updateCommand } from './commands/update.js';\nimport { configCommand } from './commands/config.js';\nimport { githubCommand } from './commands/github.js';\nimport { docsCommand } from './commands/docs.js';\nimport { detectCommand } from './commands/detect.js';\nimport { integrationsCommand } from './commands/integrations.js';\nimport { workflowStageCommand } from './commands/workflow-stage.js';\nimport { workflowAuditCommand } from './commands/workflow-audit.js';\nimport { commitAuditCommand } from './commands/commit-audit.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\nfunction configureRootCommandSurface(): void {\n const groupedCommands = new Map<string, string>([\n ['init', 'Docs Schema Commands:'],\n ['idea', 'Docs Schema Commands:'],\n ['feature', 'Docs Schema Commands:'],\n ['docs', 'Workflow Policy Commands:'],\n ['detect', 'Workflow Policy Commands:'],\n ['github', 'Workflow Policy Commands:'],\n ['workflow-stage', 'Workflow Policy Commands:'],\n ['integrations', 'Codex Integration Commands:'],\n ['commit-audit', 'Codex Integration Commands:'],\n ['workflow-audit', 'Codex Integration Commands:'],\n ]);\n\n for (const command of program.commands) {\n const helpGroup = groupedCommands.get(command.name());\n if (helpGroup) {\n command.helpGroup(helpGroup);\n continue;\n }\n (command as Command & { _hidden?: boolean })._hidden = true;\n }\n}\n\nconst cliVersion = getCliVersion();\n\nprogram\n .name('lee-spec-kit')\n .description('Document-centered harness engineering toolkit for AI agent development')\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);\nideaCommand(program);\nfeatureCommand(program);\nupdateCommand(program);\nconfigCommand(program);\ngithubCommand(program);\ndocsCommand(program);\ndetectCommand(program);\nworkflowStageCommand(program);\nintegrationsCommand(program);\nworkflowAuditCommand(program);\ncommitAuditCommand(program);\n\nconfigureRootCommandSurface();\n\nawait program.parseAsync();\n"]}
1
+ {"version":3,"sources":["../src/utils/fs-walk.ts","../src/utils/template.ts","../src/adapters/DefaultFileSystemAdapter.ts","../src/utils/paths.ts","../src/utils/locales/ko/cli.ts","../src/utils/locales/ko.ts","../src/utils/locales/en/cli.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/agents-md.ts","../src/utils/standalone-workspace.ts","../src/utils/init/options.ts","../src/adapters/schema/lee-spec-kit/project.ts","../src/adapters/schema/lee-spec-kit/feature.ts","../src/adapters/schema/lee-spec-kit/index.ts","../src/adapters/schema/index.ts","../src/config/load.ts","../src/config/types.ts","../src/commands/init.ts","../src/utils/local-workflow-template.ts","../src/utils/idea-promotion.ts","../src/commands/feature.ts","../src/commands/idea.ts","../src/commands/update.ts","../src/commands/config.ts","../src/commands/github/process.ts","../src/utils/feature-resolver.ts","../src/utils/github-draft-contract.ts","../src/services/GithubWorkflowService.ts","../src/commands/github.ts","../src/utils/builtin-docs.ts","../src/commands/docs.ts","../src/commands/detect.ts","../src/commands/integrations.ts","../src/utils/workflow-stage.ts","../src/commands/workflow-stage.ts","../src/commands/workflow-audit.ts","../src/utils/unmanaged-docs.ts","../src/utils/commit-conventions.ts","../src/commands/commit-audit.ts","../src/utils/banner.ts","../src/utils/version-check.ts","../src/index.ts"],"names":["path","__filename","__dirname","fs","next","execFileSync","program","lang","response","relativePath","toRepoRelativePath","config","chalk","prompts","getGitTopLevelOrNull","escapeRegExp","runGhJson","createHash","os","seen","result","key","BRANCH_LABELS","extractFieldValue","sanitizeMetadataValue","resolveProjectRootFromGitCwd","normalizeSlashes","isSameOrWithin"],"mappings":"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","file":"index.js","sourcesContent":["import path from 'path';\nimport { IFileSystemAdapter } from '../ports/FileSystemAdapter.js';\n\ninterface WalkFilesOptions {\n extensions?: string[];\n ignoreDirs?: string[];\n}\n\nexport async function walkFiles(\n fsAdapter: IFileSystemAdapter,\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 || [])\n .map((value) => value.trim().toLowerCase())\n .filter(Boolean)\n );\n\n async function visit(current: string): Promise<void> {\n const entries = await fsAdapter.readdir(current);\n for (const entryName of entries) {\n const absolute = path.join(current, entryName);\n const stat = await fsAdapter.stat(absolute);\n if (stat.isDirectory()) {\n if (ignored.has(entryName.trim().toLowerCase())) continue;\n await visit(absolute);\n continue;\n }\n if (!stat.isFile()) continue;\n if (normalizedExtensions.size > 0) {\n const ext = path.extname(entryName).toLowerCase();\n if (!normalizedExtensions.has(ext)) continue;\n }\n out.push(absolute);\n }\n }\n\n if (await fsAdapter.pathExists(rootDir)) {\n await visit(rootDir);\n }\n return out;\n}\n\nexport async function listSubdirectories(\n fsAdapter: IFileSystemAdapter,\n rootDir: string\n): Promise<string[]> {\n if (!(await fsAdapter.pathExists(rootDir))) return [];\n const entries = await fsAdapter.readdir(rootDir);\n const dirs: string[] = [];\n for (const entryName of entries) {\n const absolute = path.join(rootDir, entryName);\n const stat = await fsAdapter.stat(absolute);\n if (stat.isDirectory()) {\n dirs.push(absolute);\n }\n }\n return dirs;\n}\n","import { IFileSystemAdapter } from '../ports/FileSystemAdapter.js';\nimport { walkFiles } from './fs-walk.js';\n\nexport async function copyTemplates(\n fsImpl: IFileSystemAdapter,\n src: string,\n dest: string\n): Promise<void> {\n await fsImpl.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 fsImpl: IFileSystemAdapter,\n dir: string,\n replacements: Record<string, string>\n): Promise<void> {\n const files = await walkFiles(fsImpl, dir, { extensions: ['.md'] });\n\n for (const file of files) {\n let content = await fsImpl.readFile(file, 'utf-8');\n content = applyReplacements(content, replacements);\n\n await fsImpl.writeFile(file, content, 'utf-8');\n }\n\n // .sh 파일도 치환\n const shFiles = await walkFiles(fsImpl, dir, { extensions: ['.sh'] });\n\n for (const file of shFiles) {\n let content = await fsImpl.readFile(file, 'utf-8');\n content = applyReplacements(content, replacements);\n\n await fsImpl.writeFile(file, content, 'utf-8');\n }\n}\n","/* eslint-disable no-undef */\nimport fs from 'fs-extra';\nimport { IFileSystemAdapter } from '../ports/FileSystemAdapter.js';\n\nexport class DefaultFileSystemAdapter implements IFileSystemAdapter {\n async readFile(filePath: string, encoding?: BufferEncoding): Promise<string> {\n return encoding\n ? fs.readFile(filePath, encoding)\n : fs.readFile(filePath, 'utf-8');\n }\n\n readFileSync(filePath: string, encoding?: BufferEncoding): string {\n return encoding\n ? fs.readFileSync(filePath, encoding)\n : fs.readFileSync(filePath, 'utf-8');\n }\n\n async writeFile(\n filePath: string,\n data: string | Buffer,\n encoding?: BufferEncoding\n ): Promise<void> {\n return encoding\n ? fs.writeFile(filePath, data, encoding)\n : fs.writeFile(filePath, data);\n }\n\n writeFileSync(\n filePath: string,\n data: string | Buffer,\n encoding?: BufferEncoding\n ): void {\n return encoding\n ? fs.writeFileSync(filePath, data, encoding)\n : fs.writeFileSync(filePath, data);\n }\n\n async appendFile(\n filePath: string,\n data: string | Buffer,\n encoding?: BufferEncoding\n ): Promise<void> {\n return encoding\n ? fs.appendFile(filePath, data, encoding)\n : fs.appendFile(filePath, data);\n }\n\n appendFileSync(\n filePath: string,\n data: string | Buffer,\n encoding?: BufferEncoding\n ): void {\n return encoding\n ? fs.appendFileSync(filePath, data, encoding)\n : fs.appendFileSync(filePath, data);\n }\n\n async pathExists(filePath: string): Promise<boolean> {\n return fs.pathExists(filePath);\n }\n\n existsSync(filePath: string): boolean {\n return fs.existsSync(filePath);\n }\n\n async ensureDir(dirPath: string): Promise<void> {\n return fs.ensureDir(dirPath);\n }\n\n ensureDirSync(dirPath: string): void {\n return fs.ensureDirSync(dirPath);\n }\n\n async ensureFile(filePath: string): Promise<void> {\n return fs.ensureFile(filePath);\n }\n\n ensureFileSync(filePath: string): void {\n return fs.ensureFileSync(filePath);\n }\n\n async remove(filePath: string): Promise<void> {\n return fs.remove(filePath);\n }\n\n removeSync(filePath: string): void {\n return fs.removeSync(filePath);\n }\n\n async copy(\n src: string,\n dest: string,\n options?: fs.CopyOptions\n ): Promise<void> {\n return fs.copy(src, dest, options);\n }\n\n copySync(src: string, dest: string, options?: fs.CopyOptionsSync): void {\n return fs.copySync(src, dest, options);\n }\n\n async stat(filePath: string): Promise<fs.Stats> {\n return fs.stat(filePath);\n }\n\n statSync(filePath: string): fs.Stats {\n return fs.statSync(filePath);\n }\n\n async readdir(dirPath: string): Promise<string[]> {\n return fs.readdir(dirPath);\n }\n\n readdirSync(dirPath: string): string[] {\n return fs.readdirSync(dirPath);\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","export const koCli = {\n 'common.errorLabel': '오류:',\n 'common.canceled': '작업이 취소되었습니다.',\n 'common.configNotFound':\n '설정 파일을 찾을 수 없습니다. 먼저 init을 실행해주세요.',\n 'common.docsNotFound':\n 'docs 폴더를 찾을 수 없습니다. 먼저 init을 실행하세요.',\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 'feature.ideaNotFound': 'Idea 문서를 찾을 수 없습니다: {ref}',\n 'feature.ideaAmbiguous':\n '{ref}와 매칭되는 Idea 문서가 여러 개입니다. 정확한 경로나 전체 indexed 이름을 사용하세요.',\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.agentsUpdated': 'agents/ 업데이트 완료',\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 'init.selectLangPrompt': '문서 언어를 선택하세요:',\n 'init.currentDirectoryLabel': '📍 현재 위치',\n 'init.gitDetected': '✅ Git 레포지토리 감지됨',\n 'init.insideProjectRoot': '현재 프로젝트 루트 내에서 실행하고 계십니다.',\n 'init.modeEmbeddedDesc':\n '• embedded: 여기에 ./docs 폴더를 생성합니다. 프로젝트와 함께 관리됩니다.',\n 'init.modeStandaloneDesc':\n '• 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':\n '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':\n '{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':\n ' 3. lee-spec-kit 워크플로우용 workspace-local Codex hooks 설치: npx lee-spec-kit integrations codex-hooks',\n 'init.log.nextSteps4':\n ' 4. 필요하면 전역 Codex hooks bootstrap flag도 설치: npx lee-spec-kit integrations codex',\n 'init.log.nextSteps5':\n '',\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 ' 수동으로 변경 내용을 확인한 뒤 커밋해주세요.',\n 'init.log.gitRemoteSet': '✅ Git remote 설정 완료: {remote}',\n 'init.warn.gitRemoteExists': '⚠️ Git remote가 이미 존재합니다.',\n 'init.log.gitInitialCommitDone': '✅ Git 초기 커밋 완료!',\n 'init.warn.skipGitInit':\n '⚠️ Git 초기화를 건너뜁니다 (수동으로 커밋해주세요)',\n 'init.error.templateNotFound': '템플릿을 찾을 수 없습니다: {path}',\n\n 'idea.fileExists': '이미 존재하는 Idea 문서입니다: {path}',\n 'idea.templateNotFound': 'CLI 내장 idea 템플릿을 찾을 수 없습니다.',\n 'idea.created': '✅ Idea 문서 생성 완료: {path}',\n 'idea.nextStepsTitle': '다음 단계:',\n 'idea.nextSteps1': ' 1. 범위, PRD Refs, 승격 메모를 작성',\n 'idea.nextSteps2':\n ' 2. Feature로 승격: npx lee-spec-kit feature <name> --idea {ideaId}',\n 'idea.nextSteps3': ' 3. Feature로 만들지 않을 경우 Dropped로 표시',\n\n 'setup.codexBootstrapInstalled':\n '✅ 선택적 Codex bootstrap 설치 완료: {path}',\n 'setup.codexBootstrapAlreadyInstalled':\n '✅ 선택적 Codex bootstrap 이 이미 설치되어 있습니다: {path}',\n 'setup.codexBootstrapRemoved':\n '✅ 선택적 Codex bootstrap 제거 완료: {path}',\n 'setup.codexBootstrapAlreadyAbsent':\n '✅ 선택적 Codex bootstrap 이 이미 없습니다: {path}',\n 'setup.codexHooksInstalled': '✅ Repo-local Codex hooks 설치 완료: {path}',\n 'setup.codexHooksAlreadyInstalled':\n '✅ Repo-local Codex hooks 가 이미 설치되어 있습니다: {path}',\n 'setup.codexHooksRemoved': '✅ Repo-local Codex hooks 제거 완료: {path}',\n 'setup.codexHooksAlreadyAbsent':\n '✅ Repo-local Codex hooks 가 이미 없습니다: {path}',\n\n 'github.cmdGithubDescription':\n 'GitHub 워크플로우 도우미 (issue/pr 본문 템플릿 생성, 검증, merge 재시도)',\n 'github.cmdIssueDescription': 'feature 문서 기반 GitHub issue 본문 생성/생성',\n 'github.cmdPrDescription':\n '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':\n '원격 작업(--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':\n '원격 작업(--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':\n '최소 1개 라벨이 필요합니다. `--labels enhancement`를 사용하세요.',\n 'github.approvalRequired':\n '{operation}은(는) 사용자 명시 승인 후에만 실행할 수 있습니다. 계획 공유 후 `--confirm OK`로 다시 실행하세요.',\n 'github.ghCommandFailed': 'GitHub CLI 명령 실행에 실패했습니다',\n 'github.issueLookupFailed': 'GitHub issue 존재 여부 확인에 실패했습니다',\n 'github.ghEmptyJson': 'GitHub CLI JSON 출력이 비어 있습니다.',\n 'github.ghInvalidJson': 'GitHub CLI JSON 파싱에 실패했습니다: {snippet}',\n 'github.invalidIssueReference':\n 'Issue 필드가 올바른 GitHub issue reference 형식이 아닙니다: {value}. `#123` 같은 실제 issue 번호를 사용하세요.',\n 'github.issueNotFound':\n 'GitHub issue {issue} 를 현재 repository context에서 찾을 수 없거나 접근할 수 없습니다.',\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': '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':\n 'PR 헤드 갱신 후 이전 브랜치 복원에 실패했습니다',\n 'github.mergeRetryFailed':\n '재시도 후에도 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':\n 'merge 후 {base} 브랜치 checkout에 실패했습니다',\n 'github.pullBaseAfterMergeFailed':\n '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':\n 'feat(#{issue}): {slug} ({featureRef} 구현)',\n 'github.prDefaultTitleNoIssue': 'feat: {slug} ({featureRef} 구현)',\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\n 'docs.cmdDocsDescription': 'CLI 내장 에이전트 문서를 조회합니다',\n 'docs.cmdListDescription': '조회 가능한 내장 문서 목록을 출력합니다',\n 'docs.cmdGetDescription': '내장 문서 1개를 출력합니다',\n 'docs.optJson': '에이전트용 JSON 형식으로 출력',\n 'docs.invalidDocId':\n '알 수 없는 문서 ID입니다: {docId}. 사용 가능: {available}',\n 'docs.listHeader': '📚 내장 문서',\n 'docs.nextDocs': '다음 문서',\n 'docs.sourceLabel': 'source',\n 'docs.hashLabel': 'hash',\n\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':\n '현재 워크스페이스에서 docs를 초기화하세요.',\n 'cliError.configOrDocs.verifyDocsLocation': 'docs 위치와 설정을 점검하세요.',\n 'cliError.configOrDocs.runFromDocsDir':\n 'docs/가 있는 디렉터리에서 명령을 실행하세요.',\n 'cliError.lock.retryLater': '잠시 기다린 뒤 같은 명령을 다시 실행하세요.',\n 'cliError.lock.checkOtherProcess':\n '다른 lee-spec-kit 프로세스가 실행 중인지 확인하세요.',\n 'cliError.lock.inspectLockFiles':\n '런타임 lock 파일(프로젝트 `.git/lee-spec-kit.runtime/locks` 또는 OS temp)을 확인하세요.',\n 'cliError.invalidArg.reviewUsage':\n '명령 사용법과 유효한 플래그를 확인하세요.',\n 'cliError.invalidArg.fixValues': '잘못된 값을 수정한 뒤 다시 실행하세요.',\n 'cliError.invalidArg.validateBeforeAutomation':\n '자동화 환경이라면 CLI 호출 전에 인자를 검증하세요.',\n 'cliError.precondition.satisfyPreconditions':\n '실행 전제조건을 만족하도록 환경/작업트리를 먼저 정리하세요.',\n 'cliError.precondition.inspectDocsAndConfig':\n '재시도 전에 docs 정책과 현재 설정을 확인하세요.',\n 'cliError.precondition.considerForce':\n '의도한 덮어쓰기라면 강제 옵션 사용을 검토하세요.',\n 'cliError.duplicateId.resolveDuplicates':\n '중복된 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':\n 'spec/tasks 문서의 Feature ID도 함께 정리하세요.',\n 'cliError.missingId.inspectJson': '누락 항목을 JSON 진단으로 확인하세요.',\n 'cliError.approvalRequired.githubConfirmOk':\n 'github 원격 생성/머지면 --confirm OK를 함께 전달하세요.',\n 'cliError.approvalRequired.shareAndGetApproval':\n '실행 전에 제목/본문/라벨(또는 머지 계획)을 사용자에게 공유하고 명시적 승인을 받으세요.',\n 'cliError.contextSelection.specifySelector':\n '단일 Feature selector를 명시하세요.',\n 'cliError.contextSelection.narrowByComponent':\n 'multi 모드에서는 --component로 범위를 좁히세요.',\n 'cliError.contextSelection.inspectAllCandidates':\n '먼저 전체 후보를 확인하세요.',\n 'cliError.execution.failed': '실패한 명령의 출력과 선행 조건을 확인하세요.',\n 'cliError.execution.retryAfterFixingInputs':\n '실패 원인이나 입력을 정리한 뒤 다시 실행하세요.',\n 'cliError.execution.runManually':\n '환경 문제 분리를 위해 명령을 수동 실행해보세요.',\n 'cliError.unknown.rerunAndCaptureLogs':\n '같은 입력으로 재실행하고 전체 오류 로그를 수집하세요.',\n 'cliError.unknown.inspectWorkspaceState':\n '워크스페이스 감지 결과와 설정 상태를 확인하세요.',\n 'cliError.unknown.reportReasonCode':\n 'reasonCode와 로그를 유지보수자에게 전달하세요.',\n\n 'validation.nameEmpty': '이름은 비어있을 수 없습니다.',\n 'validation.nameTooLong': '이름은 100자를 초과할 수 없습니다.',\n 'validation.nameTraversal':\n \"이름에 '..' 또는 경로 구분자를 사용할 수 없습니다.\",\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':\n \"Feature ID는 'F' + 숫자 형식이어야 합니다 (예: F001).\",\n 'validation.ideaIdEmpty': 'Idea ID는 비어있을 수 없습니다.',\n 'validation.ideaIdFormat':\n \"Idea ID는 'I' + 숫자 형식이어야 합니다 (예: I001).\",\n 'validation.pathEmpty': '경로는 비어있을 수 없습니다.',\n 'validation.pathNullByte': '경로에 null 문자를 사용할 수 없습니다.',\n 'validation.genericFailed': '검증 실패',\n 'validation.context.featureName': '기능 이름',\n 'validation.context.featureId': 'Feature ID',\n 'validation.context.ideaName': 'Idea 이름',\n 'validation.context.ideaId': 'Idea ID',\n 'validation.context.projectName': '프로젝트 이름',\n 'validation.context.projectType': '프로젝트 타입',\n 'validation.context.language': '언어',\n 'validation.context.workflowMode': '워크플로우 모드',\n\n 'versionCheck.noticeAvailable':\n '📦 lee-spec-kit v{latest} 사용 가능 (현재: v{current})',\n 'versionCheck.updateCommand': ' 업데이트: npm update -g lee-spec-kit',\n} as const;\n","import { koCli } from './ko/cli.js';\n\nconst ko = {\n cli: koCli,\n} as const;\n\nexport default ko;\n","export const enCli = {\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 '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 'feature.ideaNotFound': 'Idea document not found: {ref}',\n 'feature.ideaAmbiguous':\n 'Multiple idea documents matched {ref}. Use an exact path or full indexed name.',\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.agentsUpdated': 'agents/ updated',\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 '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':\n 'Manage with a single features/ folder',\n 'init.choice.projectType.fullstack.title': 'Multi - multi-component project',\n 'init.choice.projectType.fullstack.desc':\n 'Default structure uses features/{component}/',\n 'init.prompt.docsMode': 'Select docs mode:',\n 'init.choice.docsRepo.embedded.title':\n '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':\n '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':\n ' 2. Add a feature with: npx lee-spec-kit feature <name>',\n 'init.log.nextSteps3':\n ' 3. Install workspace-local Codex hooks for the lee-spec-kit workflow: npx lee-spec-kit integrations codex-hooks',\n 'init.log.nextSteps4':\n ' 4. If you need the optional global Codex hooks bootstrap flag too: npx lee-spec-kit integrations codex',\n 'init.log.nextSteps5':\n '',\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':\n '⚠️ Skipping Git initialization (please commit manually)',\n 'init.error.templateNotFound': 'Template not found: {path}',\n\n 'idea.fileExists': 'Idea document already exists: {path}',\n 'idea.templateNotFound': 'Built-in idea template not found.',\n 'idea.created': '✅ Idea document created: {path}',\n 'idea.nextStepsTitle': 'Next steps:',\n 'idea.nextSteps1': ' 1. Fill scope, PRD refs, and promotion notes',\n 'idea.nextSteps2': ' 2. Promote it with: npx lee-spec-kit feature <name> --idea {ideaId}',\n 'idea.nextSteps3': ' 3. Mark it dropped if it should not become a feature',\n\n 'setup.codexBootstrapInstalled':\n '✅ Optional Codex bootstrap installed: {path}',\n 'setup.codexBootstrapAlreadyInstalled':\n '✅ Optional Codex bootstrap already installed: {path}',\n 'setup.codexBootstrapRemoved':\n '✅ Optional Codex bootstrap removed: {path}',\n 'setup.codexBootstrapAlreadyAbsent':\n '✅ Optional Codex bootstrap is already absent: {path}',\n 'setup.codexHooksInstalled':\n '✅ Repo-local Codex hooks installed: {path}',\n 'setup.codexHooksAlreadyInstalled':\n '✅ Repo-local Codex hooks already installed: {path}',\n 'setup.codexHooksRemoved':\n '✅ Repo-local Codex hooks removed: {path}',\n 'setup.codexHooksAlreadyAbsent':\n '✅ Repo-local Codex hooks are already absent: {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':\n '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':\n 'Commit and push tasks.md metadata sync automatically',\n 'github.labelsRequired':\n '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.issueLookupFailed': 'Failed to verify GitHub issue',\n 'github.ghEmptyJson': 'GitHub CLI returned empty JSON output.',\n 'github.ghInvalidJson': 'GitHub CLI returned invalid JSON: {snippet}',\n 'github.invalidIssueReference':\n 'Issue field is not a valid GitHub issue reference: {value}. Use a real issue number such as `#123`.',\n 'github.issueNotFound':\n 'GitHub issue {issue} was not found or is not accessible from the current repository context.',\n 'github.sectionsMissing':\n '{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':\n 'Failed to restore previous branch after PR refresh',\n 'github.mergeRetryFailed':\n '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':\n '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':\n 'feat(#{issue}): {slug} ({featureRef} implementation)',\n 'github.prDefaultTitleNoIssue': 'feat: {slug} ({featureRef} implementation)',\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':\n '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\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\n 'detect.cmdDescription':\n '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':\n '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.inspectDocsAndConfig':\n 'Inspect docs policy and current configuration before retrying.',\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': 'Inspect missing IDs via JSON diagnostics.',\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.execution.failed':\n 'Review the failed command output and fix prerequisites.',\n 'cliError.execution.retryAfterFixingInputs':\n 'Fix the failing prerequisite or input, then retry the command.',\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.inspectWorkspaceState':\n 'Inspect workspace detection and configuration state.',\n 'cliError.unknown.reportReasonCode':\n 'Report the reasonCode and logs to maintainers.',\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.ideaIdEmpty': 'Idea ID cannot be empty.',\n 'validation.ideaIdFormat': \"Idea ID must be 'I' + digits (e.g., I001).\",\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.ideaName': 'Idea name',\n 'validation.context.ideaId': 'Idea 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} as const;\n","import { enCli } from './en/cli.js';\n\nconst en = {\n cli: enCli,\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';\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;\n/* eslint-disable no-redeclare */\nexport function tr(\n lang: Lang,\n category: I18nCategory,\n key: string,\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 safeCategory = I18N[safeLang]?.[category] as\n | Record<string, string>\n | undefined;\n const defaultCategory = I18N[DEFAULT_LANG]?.[category] as\n | Record<string, string>\n | undefined;\n const koCategory = I18N.ko?.[category] as Record<string, string> | undefined;\n const template =\n safeCategory?.[key] ??\n defaultCategory?.[key] ??\n koCategory?.[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 | 'APPROVAL_REQUIRED'\n | 'CONTEXT_SELECTION_REQUIRED'\n | 'EXECUTION_FAILED'\n | 'VALIDATION_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(\n message,\n options?.cause === undefined ? undefined : { cause: options.cause }\n );\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 detect --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 detect --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.inspectDocsAndConfig',\n command: 'npx lee-spec-kit docs get agents --json',\n },\n { titleKey: 'precondition.considerForce' },\n ],\n APPROVAL_REQUIRED: [\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 github issue <slug|F001|F001-slug> --json',\n },\n {\n titleKey: 'contextSelection.narrowByComponent',\n command:\n 'npx lee-spec-kit github issue <slug|F001|F001-slug> --component <component> --json',\n },\n ],\n VALIDATION_FAILED: [\n {\n titleKey: 'invalidArg.reviewUsage',\n command: 'npx lee-spec-kit <command> --help',\n },\n { titleKey: 'invalidArg.fixValues' },\n ],\n UNKNOWN_ERROR: [\n { titleKey: 'unknown.rerunAndCaptureLogs' },\n { titleKey: 'unknown.inspectWorkspaceState', command: 'npx lee-spec-kit detect --json' },\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') {\n return withLabels(\n [\n {\n titleKey: 'execution.failed',\n },\n { titleKey: 'execution.retryAfterFixingInputs' },\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(\n tr(normalizeLang(lang), 'cli', 'cliError.headerNextOptionsError')\n );\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 * Idea ID 검증 (I001, I002 형식)\n */\nexport function validateIdeaId(id: string): ValidationResult {\n return validateIdeaIdWithLang(id, DEFAULT_LANG);\n}\n\nexport function validateIdeaIdWithLang(id: string, lang: Lang): ValidationResult {\n if (!id || id.trim().length === 0) {\n return { valid: false, error: tr(lang, 'cli', 'validation.ideaIdEmpty') };\n }\n\n const ideaIdPattern = /^I\\d{3,}$/;\n if (!ideaIdPattern.test(id)) {\n return {\n valid: false,\n error: tr(lang, 'cli', 'validation.ideaIdFormat'),\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 fs from 'fs-extra';\n\nexport const LEE_SPEC_KIT_AGENTS_BEGIN = '<!-- lee-spec-kit:begin -->';\nexport const LEE_SPEC_KIT_AGENTS_END = '<!-- lee-spec-kit:end -->';\n\ntype DocsRepoMode = 'embedded' | 'standalone';\n\n// Canonical lee-spec-kit project-scoped agent workflow instructions.\nconst CANONICAL_LEE_SPEC_KIT_AGENTS_TEXT = `Use lee-spec-kit docs and workflow policy only when explicitly detected.\n\nDetection gate:\n\n1. Run \\`npx lee-spec-kit detect --json\\`\n2. Apply lee-spec-kit rules only when \\`status === \"ok\"\\` and \\`isLeeSpecKitProject === true\\`\n3. If detection fails or returns false, skip these instructions and continue with the normal non-lee-spec-kit workflow\n\nDefault runtime path:\n\n- Prefer Codex native execution with workspace-scoped AGENTS.md plus official hooks for the default runtime path.\n- Treat lee-spec-kit as the docs schema, workflow policy, and validation toolkit.\n- If the user gives a generic request such as continuing the next feature according to the rules, interpret it through this workflow automatically.\n- Infer the workflow automatically even for generic rule-following requests.\n\nOn session start or after context compression/reset:\n\n1. Run \\`npx lee-spec-kit detect --json\\`\n2. If detected, run \\`npx lee-spec-kit docs get agents --json\\` once\n3. Read any unread \\`requiredDocs[*].command\\` from that output\n4. Cache built-in docs per session and only re-read them when the user explicitly asks for a policy refresh, \\`npx lee-spec-kit update\\` changed the policy, or the session restarted\n\nBefore taking the next workflow step:\n\n1. Confirm the active feature from the request, docs tree, issue/PR context, or the most recently active feature folder\n2. Read the active feature docs as the SSOT: \\`spec.md\\`, \\`plan.md\\`, \\`tasks.md\\`, and \\`decisions.md\\`\n3. When relevant, also read \\`issue.md\\` and \\`pr.md\\`\n4. Run \\`npx lee-spec-kit workflow-stage <feature-ref> --json\\` and follow only the returned \\`nextAction\\`\n5. If \\`workflow-stage --json\\` returns \\`primaryActionLabel\\` and \\`actionOptions\\`, treat \\`primaryActionLabel\\` as the default option label and present the exact \\`actionOptions[*].reply\\` tokens to the user before continuing\n6. Do not start implementation unless \\`stage === \"implementation\"\\` and \\`implementationAllowed === true\\`\n7. Treat stages before implementation as hard gates:\n - spec approval plus plan / tasks readiness\n - issue preparation / issue creation\n - branch creation\n - task commit checkpoints after each completed task\n8. In standalone mode, keep the docs repo on its docs branch and do not create feature branches or worktrees there\n9. In standalone mode, use the project repo through its managed feature worktree under the shared workspace \\`.worktrees/\\` root instead of checking the feature branch out in the main project repo\n10. Keep docs and code synchronized; if code changes materially, update the active feature docs in the same turn before stopping\n11. When docs are synced to code, refresh an explicit marker like \\`<!-- lee-spec-kit:workflow-sync 2026-04-16T12:34:56.789Z -->\\` in the active feature docs (prefer \\`tasks.md\\` or \\`decisions.md\\`) so \\`workflow-audit\\` can prove the sync happened after the latest code change\n\nApproval and remote actions:\n\n- Ask the user for approval only at documented workflow approval boundaries or before remote/destructive actions\n- If \\`workflow-stage --json\\` reports \\`approvalRequired === true\\`, stop at that boundary and ask the user before proceeding\n- If \\`workflow-stage --json\\` returns labeled \\`actionOptions\\` at any approval boundary, keep the same option labels and exact \\`reply\\` tokens in the user prompt and do not improvise different reply formats\n- If \\`workflow-stage --json\\` reports \\`nextAction.category === \"task_commit\"\\`, make the docs commit and project commit for the just-finished task before starting the next task or moving to the next stage\n- Before \\`git commit\\`, prefer \\`npx lee-spec-kit commit-audit --json\\` when hooks or manual checks need commit-time docs path enforcement\n- Before remote GitHub actions, share the plan or artifact being sent\n- Respect repo policy from docs and config first; hooks only enforce guardrails and continuation checks\n\nValidation:\n\n- Prefer \\`npx lee-spec-kit commit-audit --json\\` for commit-time staged docs path validation\n- Prefer \\`npx lee-spec-kit workflow-audit --json\\` as the default docs-sync validator for Codex hooks and end-of-turn checks; it expects the active feature docs to carry a fresh \\`lee-spec-kit:workflow-sync\\` marker after meaningful code/doc sync\n`;\n\nfunction renderManagedSegment(\n lang: 'ko' | 'en',\n docsRepo: DocsRepoMode\n): string {\n // Intentionally do not localize: this block must stay aligned with the\n // project-scoped canonical agent instructions to avoid behavioral drift.\n void lang;\n void docsRepo;\n return `${LEE_SPEC_KIT_AGENTS_BEGIN}\\n${CANONICAL_LEE_SPEC_KIT_AGENTS_TEXT}\\n${LEE_SPEC_KIT_AGENTS_END}`;\n}\n\nfunction renderManagedBlock(lang: 'ko' | 'en', docsRepo: DocsRepoMode): string {\n return `${renderManagedSegment(lang, docsRepo)}\\n\\n`;\n}\n\nexport async function upsertLeeSpecKitAgentsMd(\n filePath: string,\n options: { lang: 'ko' | 'en'; docsRepo: DocsRepoMode }\n): Promise<{\n changed: boolean;\n action: 'created' | 'appended' | 'updated' | 'noop';\n}> {\n const block = renderManagedBlock(options.lang, options.docsRepo);\n const segment = renderManagedSegment(options.lang, options.docsRepo);\n\n const exists = await fs.pathExists(filePath);\n if (!exists) {\n await fs.writeFile(filePath, block, 'utf-8');\n return { changed: true, action: 'created' };\n }\n\n const current = await fs.readFile(filePath, 'utf-8');\n const beginIndex = current.indexOf(LEE_SPEC_KIT_AGENTS_BEGIN);\n const endIndex = current.indexOf(LEE_SPEC_KIT_AGENTS_END);\n\n if (beginIndex !== -1 && endIndex !== -1 && beginIndex <= endIndex) {\n const replaceEnd = endIndex + LEE_SPEC_KIT_AGENTS_END.length;\n const next = `${current.slice(0, beginIndex)}${segment}${current.slice(replaceEnd)}`;\n if (next === current) {\n return { changed: false, action: 'noop' };\n }\n await fs.writeFile(filePath, next, 'utf-8');\n return { changed: true, action: 'updated' };\n }\n\n let next = current;\n if (next.length > 0 && !next.endsWith('\\n')) next += '\\n';\n if (next.trim().length > 0 && !next.endsWith('\\n\\n')) next += '\\n';\n next += block;\n\n await fs.writeFile(filePath, next, 'utf-8');\n return { changed: true, action: 'appended' };\n}\n","import path from 'path';\nimport type { ProjectConfig } from '../config/types.js';\nimport { runGitCapture } from './git-run.js';\n\nfunction normalizeSlashes(value: string): string {\n return value.replace(/\\\\/g, '/');\n}\n\nfunction isSameOrWithin(parentDir: string, candidateDir: string): boolean {\n const resolvedParent = path.resolve(parentDir);\n const resolvedCandidate = path.resolve(candidateDir);\n return (\n resolvedParent === resolvedCandidate ||\n resolvedCandidate.startsWith(`${resolvedParent}${path.sep}`)\n );\n}\n\nexport function resolveStandaloneWorkspaceRoot(\n cwd: string,\n docsDir: string\n): string {\n const resolvedCwd = path.resolve(cwd);\n const resolvedDocsDir = path.resolve(docsDir);\n\n if (resolvedCwd === resolvedDocsDir) {\n return resolvedCwd;\n }\n\n if (resolvedDocsDir.startsWith(`${resolvedCwd}${path.sep}`)) {\n return resolvedCwd;\n }\n\n return path.dirname(resolvedDocsDir);\n}\n\nexport function serializeStandaloneWorkspaceRoot(\n docsDir: string,\n workspaceRoot: string\n): string {\n const relative = normalizeSlashes(\n path.relative(path.resolve(docsDir), path.resolve(workspaceRoot))\n );\n return relative || '.';\n}\n\nfunction collectStandaloneProjectRoots(\n config: Pick<ProjectConfig, 'projectRoot'>,\n workspaceRoot: string,\n component?: string\n): string[] {\n if (!config.projectRoot) {\n return [];\n }\n\n const rawRoots =\n typeof config.projectRoot === 'string'\n ? [config.projectRoot]\n : component\n ? [config.projectRoot[component]].filter(Boolean)\n : Object.values(config.projectRoot);\n\n const deduped = new Set<string>();\n for (const rawRoot of rawRoots) {\n const value = String(rawRoot || '').trim();\n if (!value) continue;\n deduped.add(path.resolve(workspaceRoot, value));\n }\n\n return [...deduped];\n}\n\nfunction isValidStandaloneWorkspaceRoot(\n config: Pick<ProjectConfig, 'docsRepo' | 'docsDir' | 'projectRoot'>,\n workspaceRoot: string\n): boolean {\n if (config.docsRepo !== 'standalone') return false;\n\n const resolvedWorkspaceRoot = path.resolve(workspaceRoot);\n const resolvedDocsDir = path.resolve(config.docsDir);\n if (\n resolvedWorkspaceRoot === resolvedDocsDir ||\n !isSameOrWithin(resolvedWorkspaceRoot, resolvedDocsDir)\n ) {\n return false;\n }\n\n const projectRoots = collectStandaloneProjectRoots(config, resolvedWorkspaceRoot);\n for (const projectRoot of projectRoots) {\n const resolvedProjectRoot = path.resolve(projectRoot);\n if (resolvedProjectRoot === resolvedWorkspaceRoot) {\n return false;\n }\n if (isSameOrWithin(resolvedProjectRoot, resolvedWorkspaceRoot)) {\n return false;\n }\n if (isSameOrWithin(resolvedProjectRoot, resolvedDocsDir)) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function resolveConfiguredStandaloneWorkspaceRoot(\n config: Pick<ProjectConfig, 'docsRepo' | 'docsDir' | 'workspaceRoot' | 'projectRoot'>\n): string | null {\n if (config.docsRepo !== 'standalone' || !config.projectRoot) return null;\n const raw = String(config.workspaceRoot || '').trim();\n if (!raw) return null;\n const resolvedWorkspaceRoot = path.resolve(config.docsDir, raw);\n return isValidStandaloneWorkspaceRoot(config, resolvedWorkspaceRoot)\n ? resolvedWorkspaceRoot\n : null;\n}\n\nexport function canBackfillStandaloneWorkspaceRoot(\n cwd: string,\n docsDir: string\n): boolean {\n const resolvedCwd = path.resolve(cwd);\n const resolvedDocsDir = path.resolve(docsDir);\n return (\n resolvedCwd !== resolvedDocsDir &&\n isSameOrWithin(resolvedCwd, resolvedDocsDir)\n );\n}\n\nexport function resolveStandaloneProjectRoots(\n config: ProjectConfig,\n component?: string\n): string[] {\n if (config.docsRepo !== 'standalone' || !config.projectRoot) {\n return [];\n }\n\n const workspaceRoot = resolveConfiguredStandaloneWorkspaceRoot(config);\n if (!workspaceRoot) {\n return [];\n }\n\n return collectStandaloneProjectRoots(config, workspaceRoot, component);\n}\n\nexport function resolveGitTopLevelOrNull(cwd: string): string | null {\n return runGitCapture(['rev-parse', '--show-toplevel'], cwd) || null;\n}\n\nexport function resolveGitTopLevelOrSelf(cwd: string): string {\n return resolveGitTopLevelOrNull(cwd) || path.resolve(cwd);\n}\n\nexport function normalizeBranchNameForWorktree(branchName: string): string {\n return branchName.trim().replace(/[\\\\/]/g, '-');\n}\n\nexport function resolveStandaloneManagedWorktreeRoot(\n config: Pick<ProjectConfig, 'docsRepo' | 'docsDir' | 'workspaceRoot' | 'projectRoot'>,\n projectRoot: string\n): string | null {\n if (config.docsRepo !== 'standalone') return null;\n const workspaceRoot = resolveConfiguredStandaloneWorkspaceRoot(config);\n if (!workspaceRoot) return null;\n return path.resolve(\n workspaceRoot,\n '.worktrees',\n path.basename(path.resolve(projectRoot))\n );\n}\n\nexport function resolveManagedWorktreePath(\n config: Pick<ProjectConfig, 'docsRepo' | 'docsDir' | 'workspaceRoot' | 'projectRoot'>,\n projectRoot: string,\n branchName: string\n): string {\n const standaloneRoot = resolveStandaloneManagedWorktreeRoot(config, projectRoot);\n if (standaloneRoot) {\n return path.resolve(\n standaloneRoot,\n normalizeBranchNameForWorktree(branchName)\n );\n }\n\n return path.resolve(\n path.resolve(projectRoot),\n '.worktrees',\n normalizeBranchNameForWorktree(branchName)\n );\n}\n\nexport function buildManagedWorktreeEnvLinkCommand(\n projectRoot: string,\n worktreePath: string\n): string {\n const sourceEnvPath = path.resolve(projectRoot, '.env');\n const targetEnvPath = path.resolve(worktreePath, '.env');\n return `if [ -f \"${sourceEnvPath}\" ] && [ ! -e \"${targetEnvPath}\" ] && [ ! -L \"${targetEnvPath}\" ]; then ln -s \"${sourceEnvPath}\" \"${targetEnvPath}\"; fi`;\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 docs get agents --json\\`\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- Read the docs workflow: \\`npx lee-spec-kit docs get agents --json\\`\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 fs from 'fs-extra';\nimport path from 'path';\nimport { resolveProjectComponents } from '../../../utils/components.js';\nimport {\n normalizeProjectType,\n type ProjectType,\n type RawProjectType,\n} from '../../../utils/project-type.js';\nimport type { ProjectConfig } from '../../../config/types.js';\n\ninterface ConfigFile {\n projectName: string;\n projectType: RawProjectType;\n components?: string[];\n lang: 'ko' | 'en';\n createdAt: string;\n docsRepo?: 'embedded' | 'standalone';\n workspaceRoot?: string;\n pushDocs?: boolean;\n docsRemote?: string;\n projectRoot?: string | Record<string, string>;\n allowedDocsEntries?: ProjectConfig['allowedDocsEntries'];\n pr?: ProjectConfig['pr'];\n workflow?: ProjectConfig['workflow'];\n approval?: ProjectConfig['approval'];\n}\n\nexport type LeeSpecDetectionSource = 'config' | 'heuristic';\n\nexport interface LeeSpecProjectDetectionResult {\n detected: boolean;\n schemaId: 'lee-spec';\n detectionSource: LeeSpecDetectionSource | null;\n docsDir: string | null;\n configPath: string | null;\n configFilePresent: boolean;\n config: ProjectConfig | null;\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) return [ancestors[0]];\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\nfunction toProjectConfig(\n docsDir: string,\n configFile: ConfigFile,\n projectType: ProjectType,\n components: string[]\n): ProjectConfig {\n return {\n schemaId: 'lee-spec',\n docsDir,\n projectName: configFile.projectName,\n projectType,\n components: projectType === 'multi' ? components : undefined,\n lang: configFile.lang,\n docsRepo: configFile.docsRepo,\n workspaceRoot: configFile.workspaceRoot,\n pushDocs: configFile.pushDocs,\n docsRemote: configFile.docsRemote,\n projectRoot: configFile.projectRoot,\n allowedDocsEntries: configFile.allowedDocsEntries,\n pr: configFile.pr,\n workflow: configFile.workflow,\n approval: configFile.approval,\n };\n}\n\nexport async function detectLeeSpecProject(\n cwd: string\n): Promise<LeeSpecProjectDetectionResult> {\n const explicitDocsDir = (process.env.LEE_SPEC_KIT_DOCS_DIR || '').trim();\n const baseDirs = [\n ...(explicitDocsDir ? [path.resolve(explicitDocsDir)] : []),\n ...getSearchBaseDirs(cwd),\n ];\n const visitedBaseDirs = new Set<string>();\n const visitedDocsDirs = new Set<string>();\n\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 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 detected: true,\n schemaId: 'lee-spec',\n detectionSource: 'config',\n docsDir: resolvedDocsDir,\n configPath,\n configFilePresent: true,\n config: toProjectConfig(\n resolvedDocsDir,\n configFile,\n projectType,\n components\n ),\n };\n } catch {\n // fall through to heuristic detection\n }\n }\n\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 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 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 if (/[가-힣]/.test(content)) {\n lang = 'ko';\n break;\n }\n }\n\n return {\n detected: true,\n schemaId: 'lee-spec',\n detectionSource: 'heuristic',\n docsDir: resolvedDocsDir,\n configPath: null,\n configFilePresent: false,\n config: {\n schemaId: 'lee-spec',\n docsDir: resolvedDocsDir,\n projectType,\n components,\n lang,\n },\n };\n }\n }\n }\n\n return {\n detected: false,\n schemaId: 'lee-spec',\n detectionSource: null,\n docsDir: null,\n configPath: null,\n configFilePresent: false,\n config: null,\n };\n}\n","import path from 'path';\nimport fs from 'fs-extra';\nimport type { ProjectType } from '../../../utils/project-type.js';\nimport type { SchemaFeatureRef } from '../contracts.js';\nimport { detectLeeSpecProject } from './project.js';\n\nexport interface ResolveLeeSpecFeaturePathsInput {\n docsDir: string;\n projectType: ProjectType;\n featureId: string;\n featureName: string;\n component?: string;\n}\n\nexport interface LeeSpecFeaturePaths {\n featureFolderName: string;\n featuresDir: string;\n featureDir: string;\n featurePathFromDocs: string;\n}\n\nexport function resolveLeeSpecFeaturePaths(\n input: ResolveLeeSpecFeaturePathsInput\n): LeeSpecFeaturePaths {\n const featureFolderName = `${input.featureId}-${input.featureName}`;\n const featuresDir =\n input.projectType === 'multi'\n ? path.join(input.docsDir, 'features', input.component || '')\n : path.join(input.docsDir, 'features');\n const featureDir = path.join(featuresDir, featureFolderName);\n return {\n featureFolderName,\n featuresDir,\n featureDir,\n featurePathFromDocs: path.relative(input.docsDir, featureDir),\n };\n}\n\nexport async function getNextLeeSpecFeatureId(\n docsDir: string,\n projectType: ProjectType,\n components: string[]\n): Promise<string> {\n const featuresDir = path.join(docsDir, 'features');\n let max = 0;\n const scanDirs: string[] = [];\n\n if (projectType === 'multi') {\n scanDirs.push(\n ...components.map((component) => path.join(featuresDir, component))\n );\n } else {\n scanDirs.push(featuresDir);\n }\n\n for (const dir of scanDirs) {\n if (!(await fs.pathExists(dir))) continue;\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) continue;\n const num = parseInt(match[1], 10);\n if (num > max) max = num;\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\nfunction parseFeatureFolderName(\n folderName: string,\n component?: string\n): SchemaFeatureRef | null {\n const match = folderName.match(/^(F\\d+)-(.+)$/);\n if (!match) return null;\n const featureRef: SchemaFeatureRef = {\n id: match[1],\n slug: match[2],\n folderName,\n };\n if (component) {\n featureRef.component = component;\n }\n return featureRef;\n}\n\nexport async function listLeeSpecFeatures(\n cwd: string\n): Promise<SchemaFeatureRef[]> {\n const detected = await detectLeeSpecProject(cwd);\n const docsDir = detected.docsDir;\n if (!docsDir) return [];\n\n const featuresRoot = path.join(docsDir, 'features');\n if (!(await fs.pathExists(featuresRoot))) return [];\n\n const refs: SchemaFeatureRef[] = [];\n const topLevelEntries = await fs.readdir(featuresRoot, { withFileTypes: true });\n\n for (const entry of topLevelEntries) {\n if (!entry.isDirectory()) continue;\n\n const singleProjectFeature = parseFeatureFolderName(entry.name);\n if (singleProjectFeature) {\n refs.push(singleProjectFeature);\n continue;\n }\n\n const component = entry.name.trim().toLowerCase();\n if (!component) continue;\n const componentDir = path.join(featuresRoot, entry.name);\n const componentEntries = await fs.readdir(componentDir, { withFileTypes: true });\n for (const child of componentEntries) {\n if (!child.isDirectory()) continue;\n const featureRef = parseFeatureFolderName(child.name, component);\n if (featureRef) refs.push(featureRef);\n }\n }\n\n refs.sort((left, right) => {\n const leftKey = `${left.id || ''}:${left.component || ''}:${left.folderName}`;\n const rightKey = `${right.id || ''}:${right.component || ''}:${right.folderName}`;\n return leftKey.localeCompare(rightKey);\n });\n\n return refs;\n}\n","import type { SchemaAdapter } from '../contracts.js';\nexport {\n detectLeeSpecProject,\n type LeeSpecDetectionSource,\n type LeeSpecProjectDetectionResult,\n} from './project.js';\nexport {\n getNextLeeSpecFeatureId,\n listLeeSpecFeatures,\n resolveLeeSpecFeaturePaths,\n} from './feature.js';\nimport { detectLeeSpecProject } from './project.js';\nimport {\n getNextLeeSpecFeatureId,\n listLeeSpecFeatures,\n resolveLeeSpecFeaturePaths,\n} from './feature.js';\n\nexport const leeSpecSchemaAdapter: SchemaAdapter = {\n schemaId: 'lee-spec',\n async detect(cwd) {\n const detection = await detectLeeSpecProject(cwd);\n return {\n detected: detection.detected,\n docsDir: detection.docsDir,\n schemaId: detection.schemaId,\n detectionSource: detection.detectionSource,\n config: detection.config,\n configPath: detection.configPath,\n configFilePresent: detection.configFilePresent,\n };\n },\n async listFeatures(cwd) {\n return listLeeSpecFeatures(cwd);\n },\n async getNextFeatureId(input) {\n return getNextLeeSpecFeatureId(\n input.docsDir,\n input.projectType,\n input.components\n );\n },\n resolveFeaturePaths(input) {\n return resolveLeeSpecFeaturePaths(input);\n },\n};\n","import type { ProjectConfig } from '../../config/types.js';\nimport type { SchemaAdapter, SchemaProjectDetection } from './contracts.js';\nimport { leeSpecSchemaAdapter } from './lee-spec-kit/index.js';\n\nconst SCHEMA_ADAPTERS: SchemaAdapter[] = [leeSpecSchemaAdapter];\n\nfunction createEmptyDetection(): SchemaProjectDetection & { adapter: SchemaAdapter | null } {\n return {\n detected: false,\n docsDir: null,\n schemaId: null,\n detectionSource: null,\n config: null,\n configPath: null,\n configFilePresent: false,\n adapter: null,\n };\n}\n\nexport function listSchemaAdapters(): SchemaAdapter[] {\n return [...SCHEMA_ADAPTERS];\n}\n\nexport function getSchemaAdapterById(schemaId: string | null | undefined): SchemaAdapter | null {\n if (!schemaId) return null;\n return SCHEMA_ADAPTERS.find((adapter) => adapter.schemaId === schemaId) ?? null;\n}\n\nexport function getSchemaAdapterForConfig(\n config: Pick<ProjectConfig, 'schemaId'> | null | undefined\n): SchemaAdapter | null {\n return getSchemaAdapterById(config?.schemaId ?? null);\n}\n\nexport async function detectSchemaProject(\n cwd: string\n): Promise<SchemaProjectDetection & { adapter: SchemaAdapter | null }> {\n for (const adapter of SCHEMA_ADAPTERS) {\n const detection = await adapter.detect(cwd);\n if (detection.detected) {\n return {\n ...detection,\n adapter,\n };\n }\n }\n\n return createEmptyDetection();\n}\n","import type { ProjectConfig } from './types.js';\nimport { detectSchemaProject } from '../adapters/schema/index.js';\n\nexport async function getConfig(cwd: string): Promise<ProjectConfig | null> {\n const detected = await detectSchemaProject(cwd);\n return detected.config;\n}\n","import { ProjectType } from '../utils/project-type.js';\nimport { AllowedDocsEntriesConfig } from '../utils/unmanaged-docs.js';\n\nexport const DEFAULT_APPROVAL_REQUIRE_CHECK_CATEGORIES = [\n 'spec_approve',\n 'implementation_approve',\n] as const;\n\nexport interface ProjectConfig {\n schemaId?: string;\n docsDir: string;\n projectName?: string;\n projectType: ProjectType;\n components?: string[];\n lang: 'ko' | 'en';\n docsRepo?: 'embedded' | 'standalone';\n workspaceRoot?: string;\n pushDocs?: boolean;\n docsRemote?: string;\n projectRoot?: string | Record<string, string>;\n allowedDocsEntries?: AllowedDocsEntriesConfig;\n pr?: {\n screenshots?: {\n upload?: boolean;\n };\n };\n workflow?: {\n preset?: 'github' | 'local' | 'strict';\n mode?: 'github' | 'local';\n requireIssue?: boolean;\n requireBranch?: boolean;\n requireWorktree?: boolean;\n requirePr?: boolean;\n requireReview?: boolean;\n requireMerge?: boolean;\n codeDirtyScope?: 'repo' | 'component' | 'auto';\n componentPaths?: Record<string, string[]>;\n taskCommitGate?: 'off' | 'warn' | 'strict';\n prePrReview?: {\n enabled?: boolean;\n skills?: string[];\n fallback?: 'builtin-checklist';\n evidenceMode?: 'any' | 'path_required';\n decisionEnum?: Array<'approve' | 'changes_requested' | 'blocked'>;\n enforceExecutionEvidence?: boolean;\n executionCommandPrefixes?: string[];\n };\n auto?: {\n defaultPreset?: string;\n defaultUntilCategories?: string[];\n presets?: Record<string, string[]>;\n };\n };\n approval?: {\n mode?: 'steps' | 'category' | 'builtin';\n requireCheckSteps?: number[];\n default?: 'keep' | 'require' | 'skip';\n requireCheckCategories?: string[];\n skipCheckCategories?: string[];\n taskExecuteCheck?: 'both' | 'start_only';\n };\n}\n\nexport function createDefaultApprovalConfig(): NonNullable<ProjectConfig['approval']> {\n return {\n mode: 'category',\n default: 'skip',\n requireCheckCategories: [...DEFAULT_APPROVAL_REQUIRE_CHECK_CATEGORIES],\n };\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 { DefaultFileSystemAdapter } from '../adapters/DefaultFileSystemAdapter.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 { upsertLeeSpecKitAgentsMd } from '../utils/agents-md.js';\nimport { hasLeeSpecKitCodexBootstrap } from '../integrations/codex/bootstrap.js';\nimport {\n resolveStandaloneWorkspaceRoot,\n serializeStandaloneWorkspaceRoot,\n} from '../utils/standalone-workspace.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';\nimport { createDefaultApprovalConfig } from '../utils/config.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\nfunction getGitTopLevelOrNull(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 });\n const value = String(out || '').trim();\n return value ? value : null;\n } catch {\n return null;\n }\n}\n\nfunction isSameOrWithinDir(parentDir: string, candidateDir: string): boolean {\n const resolvedParent = path.resolve(parentDir);\n const resolvedCandidate = path.resolve(candidateDir);\n return (\n resolvedParent === resolvedCandidate ||\n resolvedCandidate.startsWith(`${resolvedParent}${path.sep}`)\n );\n}\n\nfunction getContainingGitRoot(targetDir: string): string | null {\n let current = path.resolve(targetDir);\n\n while (true) {\n if (fs.existsSync(current)) {\n return getGitTopLevelOrNull(current);\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return null;\n }\n current = parent;\n }\n}\n\nfunction resolveStandaloneInitProjectRoots(\n projectRoot: string | Record<string, string> | undefined,\n cwd: string\n): string[] {\n if (!projectRoot) return [];\n const rawRoots =\n typeof projectRoot === 'string' ? [projectRoot] : Object.values(projectRoot);\n const deduped = new Set<string>();\n for (const rawRoot of rawRoots) {\n const value = String(rawRoot || '').trim();\n if (!value) continue;\n deduped.add(path.resolve(cwd, value));\n }\n return [...deduped];\n}\n\nfunction hasStandaloneProjectRepoOutsideWorkspaceGitRoot(\n workspaceGitRoot: string,\n projectRoots: string[]\n): boolean {\n return projectRoots.some((projectRoot) => {\n const resolvedProjectRoot = path.resolve(projectRoot);\n if (!isSameOrWithinDir(workspaceGitRoot, resolvedProjectRoot)) {\n return true;\n }\n const projectGitRoot = getContainingGitRoot(resolvedProjectRoot);\n return !!projectGitRoot && path.resolve(projectGitRoot) !== path.resolve(workspaceGitRoot);\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(\n '-t, --type <type>',\n 'Project type: single | multi (fullstack alias)'\n )\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(chalk.yellow(`\\n${tr(lang, 'cli', 'common.canceled')}`));\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 let standaloneWorkspaceRoot: string | null = null;\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 (\n options.docsRepo &&\n !['embedded', 'standalone'].includes(options.docsRepo)\n ) {\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(chalk.gray(tr(lang, 'cli', 'init.insideProjectRoot')));\n console.log(chalk.gray(tr(lang, 'cli', 'init.modeEmbeddedDesc')));\n console.log(chalk.gray(tr(lang, 'cli', 'init.modeStandaloneDesc')));\n console.log(chalk.gray(tr(lang, 'cli', 'init.modeStandaloneMove')));\n } else {\n console.log(chalk.yellow(tr(lang, 'cli', 'init.gitNotDetected')));\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(\n lang,\n 'cli',\n 'init.choice.projectType.single.desc'\n ),\n },\n {\n title: tr(lang, 'cli', 'init.choice.projectType.fullstack.title'),\n value: 'multi',\n description: tr(\n lang,\n 'cli',\n 'init.choice.projectType.fullstack.desc'\n ),\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(\n lang,\n 'cli',\n 'init.choice.docsRepo.embedded.desc'\n ),\n },\n {\n title: tr(lang, 'cli', 'init.choice.docsRepo.standalone.title'),\n value: 'standalone',\n description: tr(\n lang,\n 'cli',\n 'init.choice.docsRepo.standalone.desc'\n ),\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(\n rootMap,\n parseStandaloneMultiProjectRootJson(projectRoot)\n );\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) =>\n 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(\n multiRoot,\n parseStandaloneMultiProjectRootJson(projectRoot)\n );\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 =\n 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 const cwdGitRoot = getGitTopLevelOrNull(cwd);\n const standaloneProjectRoots = resolveStandaloneInitProjectRoots(projectRoot, cwd);\n standaloneWorkspaceRoot = resolveStandaloneWorkspaceRoot(cwd, targetDir);\n const targetMatchesProjectRoot = standaloneProjectRoots.some(\n (projectRootPath) => path.resolve(projectRootPath) === path.resolve(targetDir)\n );\n const allowWorkspaceGitRoot =\n !!cwdGitRoot &&\n path.resolve(cwdGitRoot) === path.resolve(cwd) &&\n hasStandaloneProjectRepoOutsideWorkspaceGitRoot(\n cwdGitRoot,\n standaloneProjectRoots\n );\n\n if (cwdGitRoot && isSameOrWithinDir(cwdGitRoot, targetDir) && !allowWorkspaceGitRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone init must be started from the shared workspace root, not from inside an existing project git repository. Choose a docs directory outside the current git repo.'\n );\n }\n\n if (targetMatchesProjectRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone init cannot place docs at the project repo root. Choose a dedicated docs directory outside the project repo.'\n );\n }\n\n if (path.resolve(standaloneWorkspaceRoot) === path.resolve(targetDir)) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone init must be started from the shared workspace root above the docs directory, not from the docs repo root.'\n );\n }\n\n const targetGitRoot = getContainingGitRoot(targetDir);\n const targetIsGitRoot =\n !!targetGitRoot && path.resolve(targetGitRoot) === path.resolve(targetDir);\n const targetIsVerifiedWorkspaceRoot =\n !!targetGitRoot &&\n !!cwdGitRoot &&\n allowWorkspaceGitRoot &&\n path.resolve(targetGitRoot) === path.resolve(cwdGitRoot) &&\n path.resolve(targetDir) === path.resolve(cwd);\n if (targetIsGitRoot && !targetIsVerifiedWorkspaceRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone init cannot place docs at an existing git repo root unless that root is the verified shared workspace root. Choose a dedicated docs directory instead.'\n );\n }\n if (\n targetGitRoot &&\n isSameOrWithinDir(targetGitRoot, targetDir) &&\n !targetIsGitRoot &&\n !(\n allowWorkspaceGitRoot &&\n cwdGitRoot &&\n path.resolve(targetGitRoot) === path.resolve(cwdGitRoot)\n )\n ) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone init cannot place docs inside an existing project git repository. Choose the shared workspace root and a docs directory outside any project repo.'\n );\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', {\n dir: targetDir,\n }),\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(\n ` ${tr(lang, 'cli', 'init.log.projectLabel')}: ${projectName}`\n )\n );\n console.log(\n chalk.gray(` ${tr(lang, 'cli', 'init.log.typeLabel')}: ${projectType}`)\n );\n console.log(\n chalk.gray(` ${tr(lang, 'cli', 'init.log.langLabel')}: ${lang}`)\n );\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 const fsAdapter = new DefaultFileSystemAdapter();\n await copyTemplates(fsAdapter, 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' ? 'docs/features/{component}' : '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(fsAdapter, 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 preset: workflowMode,\n mode: workflowMode,\n requireWorktree: docsRepo === 'standalone',\n codeDirtyScope: 'auto',\n taskCommitGate: 'warn',\n auto: {\n defaultPreset: 'pr-handoff',\n },\n prePrReview: {\n skills: ['code-review-excellence'],\n fallback: 'builtin-checklist',\n evidenceMode: 'path_required',\n decisionEnum: ['approve', 'changes_requested', 'blocked'],\n enforceExecutionEvidence: false,\n executionCommandPrefixes: [],\n },\n },\n pr: {\n screenshots: { upload: false },\n },\n // Default to spec-first execution: stop at spec approval, then run\n // through implementation until the final checklist review gate.\n approval: createDefaultApprovalConfig(),\n };\n\n // standalone일 때만 pushDocs, projectRoot 추가\n if (docsRepo === 'standalone') {\n if (!standaloneWorkspaceRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone workspace root could not be resolved. Re-run init from the shared workspace root above the docs directory.'\n );\n }\n config.workspaceRoot = serializeStandaloneWorkspaceRoot(\n targetDir,\n standaloneWorkspaceRoot\n );\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 // Ensure agent entrypoint exists (idempotent managed block).\n // - embedded: write to repo root (git toplevel when available) so it can be committed.\n // - standalone: write to shared workspace root only, without touching project repos.\n const extraCommitPathsAbs: string[] = [];\n try {\n if (docsRepo === 'embedded') {\n const repoRoot = getGitTopLevelOrNull(cwd) || cwd;\n const agentsMdPath = path.join(repoRoot, 'AGENTS.md');\n const result = await upsertLeeSpecKitAgentsMd(agentsMdPath, {\n lang,\n docsRepo,\n });\n if (result.changed) extraCommitPathsAbs.push(agentsMdPath);\n } else {\n if (!standaloneWorkspaceRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone workspace root could not be resolved. Re-run init from the shared workspace root above the docs directory.'\n );\n }\n await upsertLeeSpecKitAgentsMd(path.join(standaloneWorkspaceRoot, 'AGENTS.md'), {\n lang,\n docsRepo,\n });\n }\n } catch {\n // Best-effort: do not fail init due to agent docs.\n }\n\n console.log(chalk.green(tr(lang, 'cli', 'init.log.docsCreated')));\n console.log();\n\n // Git 초기화\n await initGit(\n cwd,\n targetDir,\n docsRepo,\n lang,\n pushDocs,\n docsRemote,\n extraCommitPathsAbs\n );\n\n console.log(chalk.blue(tr(lang, 'cli', 'init.log.nextStepsTitle')));\n console.log(\n chalk.gray(\n tr(lang, 'cli', 'init.log.nextSteps1', { docsDir: targetDir })\n )\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(chalk.gray(tr(lang, 'cli', 'init.log.nextSteps4')));\n if (!(await hasLeeSpecKitCodexBootstrap())) {\n console.log(chalk.gray(tr(lang, 'cli', 'init.log.nextSteps5')));\n }\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 extraCommitPathsAbs: string[] = []\n): Promise<void> {\n try {\n // embedded: manage git at repo root (if available)\n // standalone: manage git in docs directory itself\n const embeddedRoot = getGitTopLevelOrNull(cwd) || cwd;\n const gitWorkdir = docsRepo === 'standalone' ? targetDir : embeddedRoot;\n\n const getCachedStagedFiles = (workdir: string): string[] | null => {\n try {\n const out = runGitOrThrow(\n ['diff', '--cached', '--name-only'],\n workdir,\n {\n stdio: ['ignore', 'pipe', 'ignore'],\n }\n );\n if (!out) return [];\n return out\n .split('\\n')\n .map((s) => s.trim())\n .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 = (\n workdir: string,\n relativePath: string\n ): 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\n ? `${normalizedPrefix}/${normalizedPath}`\n : 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(\n chalk.blue(tr(lang, 'cli', 'init.log.gitRepoDetectedCommit'))\n );\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(gitWorkdir, targetDir);\n const stagedBeforeAdd = getCachedStagedFiles(gitWorkdir);\n if (relativePath === '.' && stagedBeforeAdd && stagedBeforeAdd.length > 0) {\n console.log(chalk.yellow(tr(lang, 'cli', 'init.warn.stagedChangesSkip')));\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 const extraRelativePaths = extraCommitPathsAbs\n .map((absPath) => path.relative(gitWorkdir, absPath))\n .map((p) => p.replace(/\\\\/g, '/').trim())\n .filter((p) => !!p && p !== '.' && !p.startsWith('../'));\n\n const pathsToStage = [relativePath, ...extraRelativePaths];\n for (const p of pathsToStage) {\n runGitOrThrow(['add', p], gitWorkdir);\n }\n\n // Commit only the docs scaffold + explicitly allowed extra files\n // (pathspec prevents unrelated staged changes from being included).\n runGitOrThrow(\n [\n 'commit',\n '-m',\n 'init: docs 구조 초기화 (lee-spec-kit)',\n '--',\n ...pathsToStage,\n ],\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(\n tr(lang, 'cli', 'init.log.gitRemoteSet', { remote: docsRemote })\n )\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(chalk.yellow(tr(lang, 'cli', 'init.warn.skipGitInit')));\n console.log();\n }\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 Evidence|PR 전 리뷰 Evidence)\\*\\*\\s*:/.test(\n line\n )\n ) {\n continue;\n }\n if (\n /^\\s*-\\s*\\*\\*(Pre-PR Decision|PR Review Decision|PR 전 리뷰 Decision|PR 리뷰 Decision)\\*\\*\\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*Record your key review decision/i.test(line)) continue;\n if (/^\\s*-\\s*사전 리뷰 주요 판단 근거를/.test(line)) 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\nexport function applyLocalWorkflowTemplateToContent(\n fileName: string,\n content: string,\n lang: Lang\n): string | null {\n if (fileName === 'issue.md' || fileName === 'pr.md') {\n return null;\n }\n if (fileName === 'spec.md') {\n return sanitizeSpecForLocal(content);\n }\n if (fileName === 'tasks.md') {\n return sanitizeTasksForLocal(content, lang);\n }\n return content;\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 path from 'path';\nimport fs from 'fs-extra';\nimport type { Lang } from './i18n.js';\nimport { tr } from './i18n.js';\nimport { createCliError } from './cli-error.js';\n\nconst IDEA_REF_PATTERN = /\\b(I\\d{3,}(?:-[A-Za-z0-9._-]+)?)\\b/;\nconst IDEA_PATH_PATTERN = /\\b(?:\\.\\/)?docs\\/ideas\\/[^\\s]+\\.md\\b/;\n\nexport function extractExplicitIdeaRef(requestText: string): string | null {\n const pathMatch = requestText.match(IDEA_PATH_PATTERN);\n if (pathMatch) return pathMatch[0];\n\n const refMatch = requestText.match(IDEA_REF_PATTERN);\n if (refMatch) return refMatch[1];\n\n return null;\n}\n\nexport async function resolveIdeaReference(\n docsDir: string,\n ref: string,\n lang: Lang\n): Promise<{ path: string }> {\n const ideasDir = path.join(docsDir, 'ideas');\n const trimmedRef = ref.trim();\n if (!trimmedRef) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'feature.ideaNotFound', { ref })\n );\n }\n\n if (trimmedRef.includes('/') || trimmedRef.endsWith('.md')) {\n const candidate = path.resolve(process.cwd(), trimmedRef);\n if (await fs.pathExists(candidate)) {\n return { path: candidate };\n }\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'feature.ideaNotFound', { ref: trimmedRef })\n );\n }\n\n if (!(await fs.pathExists(ideasDir))) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'feature.ideaNotFound', { ref: trimmedRef })\n );\n }\n\n const entries = await fs.readdir(ideasDir, { withFileTypes: true });\n const files = entries\n .filter((entry) => entry.isFile() && entry.name.toLowerCase().endsWith('.md'))\n .map((entry) => entry.name);\n\n const exactName = `${trimmedRef}.md`;\n if (files.includes(exactName)) {\n return { path: path.join(ideasDir, exactName) };\n }\n\n const byId = /^I\\d{3,}$/.test(trimmedRef)\n ? files.filter((name) => name.startsWith(`${trimmedRef}-`))\n : [];\n if (byId.length === 1) {\n return { path: path.join(ideasDir, byId[0]) };\n }\n if (byId.length > 1) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'feature.ideaAmbiguous', { ref: trimmedRef })\n );\n }\n\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'feature.ideaNotFound', { ref: trimmedRef })\n );\n}\n\nexport async function readIdeaMetadataValue(\n ideaPath: string,\n label: string\n): Promise<string | null> {\n const content = await fs.readFile(ideaPath, 'utf-8');\n const pattern = new RegExp(`^- \\\\*\\\\*${escapeRegExp(label)}\\\\*\\\\*:\\\\s*(.+)$`, 'm');\n const match = content.match(pattern);\n if (!match) return null;\n const value = match[1].trim();\n return value.length > 0 ? value : null;\n}\n\nexport async function deriveFeatureNameFromIdea(ideaPath: string): Promise<string> {\n const ideaName = await readIdeaMetadataValue(ideaPath, 'Idea Name');\n if (ideaName && ideaName !== '-') return ideaName;\n\n const basename = path.basename(ideaPath, '.md');\n return basename.replace(/^I\\d{3,}-/, '');\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\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 { DefaultFileSystemAdapter } from '../adapters/DefaultFileSystemAdapter.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';\nimport { resolveIdeaReference } from '../utils/idea-promotion.js';\nimport {\n getSchemaAdapterForConfig,\n} from '../adapters/schema/index.js';\n\nexport interface FeatureOptions {\n component?: string;\n id?: string;\n desc?: string;\n idea?: string;\n nonInteractive?: boolean;\n json?: boolean;\n}\n\nexport interface 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('--idea <ref>', 'Idea reference to promote (I001 | I001-slug | docs/ideas/...)')\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\nexport async 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 schemaAdapter = getSchemaAdapterForConfig(config);\n const configuredComponents = resolveProjectComponents(\n projectType,\n config.components\n );\n const linkedIdea = options.idea\n ? await resolveIdeaReference(docsDir, options.idea, lang)\n : null;\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 if (!schemaAdapter?.getNextFeatureId) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n `Schema \"${config.schemaId || 'unknown'}\" does not support feature ID allocation.`\n );\n }\n featureId = await schemaAdapter.getNextFeatureId({\n docsDir,\n projectType,\n components: configuredComponents,\n });\n }\n\n if (!schemaAdapter?.resolveFeaturePaths) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n `Schema \"${config.schemaId || 'unknown'}\" does not support feature path resolution.`\n );\n }\n\n const { featureFolderName, featureDir, featurePathFromDocs } =\n schemaAdapter.resolveFeaturePaths({\n docsDir,\n projectType,\n component: projectType === 'multi' ? component : undefined,\n featureId,\n featureName: name,\n });\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(\n 'DOCS_NOT_FOUND',\n tr(lang, 'cli', 'feature.baseNotFound')\n );\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 const fsAdapter = new DefaultFileSystemAdapter();\n await replaceInFiles(fsAdapter, featureDir, replacements);\n\n if (linkedIdea) {\n await stampIdeaReferenceInSpec(\n path.join(featureDir, 'spec.md'),\n path.relative(featureDir, linkedIdea.path)\n );\n await markIdeaAsFeatureized(linkedIdea.path, featureFolderName);\n }\n\n if (config.workflow?.mode === 'local') {\n await applyLocalWorkflowTemplateToFeatureDir(featureDir, lang);\n }\n\n if (!options.json) {\n console.log();\n console.log(\n chalk.green(tr(lang, 'cli', 'feature.created', { path: featureDir }))\n );\n console.log();\n console.log(chalk.blue(tr(lang, 'cli', 'feature.nextStepsTitle')));\n console.log(\n chalk.gray(\n tr(lang, 'cli', 'feature.nextSteps1', { path: featureDir })\n )\n );\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,\n };\n },\n { owner: 'feature' }\n );\n}\n\nasync function stampIdeaReferenceInSpec(\n specPath: string,\n relativeIdeaPath: string\n): Promise<void> {\n const normalizedPath = relativeIdeaPath.replace(/\\\\/g, '/');\n const ideaLine = `- Idea: \\`${normalizedPath}\\``;\n let content = await fs.readFile(specPath, 'utf-8');\n\n if (content.includes(ideaLine)) {\n return;\n }\n\n if (content.includes('## Related Documents')) {\n content = content.replace(\n '## Related Documents\\n\\n',\n `## Related Documents\\n\\n${ideaLine}\\n`\n );\n } else {\n content = `${content.trimEnd()}\\n\\n${ideaLine}\\n`;\n }\n\n await fs.writeFile(specPath, content, 'utf-8');\n}\n\nasync function markIdeaAsFeatureized(\n ideaPath: string,\n featureFolderName: string\n): Promise<void> {\n let content = await fs.readFile(ideaPath, 'utf-8');\n content = replaceOrAppendIdeaMetadata(content, 'Status', 'Featureized');\n content = replaceOrAppendIdeaMetadata(content, 'Feature', featureFolderName);\n await fs.writeFile(ideaPath, content, 'utf-8');\n}\n\nfunction replaceOrAppendIdeaMetadata(\n content: string,\n label: string,\n value: string\n): string {\n const pattern = new RegExp(`^- \\\\*\\\\*${escapeRegExp(label)}\\\\*\\\\*:.*$`, 'm');\n const line = `- **${label}**: ${value}`;\n if (pattern.test(content)) {\n return content.replace(pattern, line);\n }\n\n const heading = '## Promotion Tracking';\n if (content.includes(heading)) {\n return content.replace(heading, `${heading}\\n\\n${line}`);\n }\n\n return `${content.trimEnd()}\\n\\n${heading}\\n\\n${line}\\n`;\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\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","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { getConfig } from '../utils/config.js';\nimport type { Lang } from '../utils/i18n.js';\nimport {\n assertAllowedComponent,\n resolveProjectComponents,\n} from '../utils/components.js';\nimport {\n assertValid,\n validateIdeaIdWithLang,\n validateSafeNameWithLang,\n} from '../utils/validation.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\nimport { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport { getDocsLockPath, withFileLock } from '../utils/lock.js';\nimport { getTemplatesDir } from '../utils/paths.js';\nimport { getLocalDateString } from '../utils/date.js';\n\ninterface IdeaOptions {\n component?: string;\n id?: string;\n desc?: string;\n nonInteractive?: boolean;\n json?: boolean;\n}\n\ninterface IdeaRunResult {\n ideaId: string;\n ideaName: string;\n component?: string;\n ideaPath: string;\n ideaPathFromDocs: string;\n}\n\nexport function ideaCommand(program: Command): void {\n program\n .command('idea <name>')\n .description('Create a new indexed idea document')\n .option('--component <component>', 'Component name (optional)')\n .option('--id <id>', 'Idea ID (default: auto)')\n .option('-d, --desc <description>', 'Idea description for the document')\n .option('--non-interactive', 'Reserved for parity with other generators')\n .option('--json', 'Output in JSON format for agents')\n .action(async (name: string, options: IdeaOptions) => {\n try {\n const result = await runIdea(name, options);\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'ok',\n reasonCode: 'IDEA_CREATED',\n ideaId: result.ideaId,\n ideaName: result.ideaName,\n component: result.component,\n ideaPath: result.ideaPath,\n ideaPathFromDocs: result.ideaPathFromDocs,\n },\n null,\n 2\n )\n );\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 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 }\n });\n}\n\nasync function runIdea(name: string, options: IdeaOptions): Promise<IdeaRunResult> {\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 const configuredComponents = resolveProjectComponents(\n projectType,\n config.components\n );\n\n assertValid(\n validateSafeNameWithLang(name, lang),\n tr(lang, 'cli', 'validation.context.ideaName'),\n lang\n );\n\n let component = (options.component || '').trim().toLowerCase();\n if (component && projectType === 'single') {\n throw createCliError(\n 'INVALID_ARGUMENT',\n '`--component` can only be used in multi mode.'\n );\n }\n if (projectType === 'multi' && component) {\n assertAllowedComponent(component, configuredComponents);\n }\n\n return withFileLock(\n getDocsLockPath(docsDir),\n async () => {\n const ideaId = options.id\n ? validateProvidedIdeaId(options.id, lang)\n : await getNextIdeaId(docsDir);\n const ideasDir = path.join(docsDir, 'ideas');\n const ideaFileName = `${ideaId}-${name}.md`;\n const ideaPath = path.join(ideasDir, ideaFileName);\n\n if (await fs.pathExists(ideaPath)) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n tr(lang, 'cli', 'idea.fileExists', { path: ideaPath })\n );\n }\n\n const templatePath = path.join(\n getTemplatesDir(),\n lang,\n 'common',\n 'ideas',\n 'idea.md'\n );\n if (!(await fs.pathExists(templatePath))) {\n throw createCliError(\n 'DOCS_NOT_FOUND',\n tr(lang, 'cli', 'idea.templateNotFound')\n );\n }\n\n await fs.mkdir(ideasDir, { recursive: true });\n const template = await fs.readFile(templatePath, 'utf-8');\n const content = applyIdeaTemplate(template, {\n ideaId,\n name,\n description: options.desc || '',\n component: component || '-',\n created: getLocalDateString(),\n });\n await fs.writeFile(ideaPath, content, 'utf-8');\n\n if (!options.json) {\n console.log();\n console.log(chalk.green(tr(lang, 'cli', 'idea.created', { path: ideaPath })));\n console.log();\n console.log(chalk.blue(tr(lang, 'cli', 'idea.nextStepsTitle')));\n console.log(chalk.gray(tr(lang, 'cli', 'idea.nextSteps1')));\n console.log(chalk.gray(tr(lang, 'cli', 'idea.nextSteps2', { ideaId })));\n console.log(chalk.gray(tr(lang, 'cli', 'idea.nextSteps3')));\n console.log();\n }\n\n return {\n ideaId,\n ideaName: name,\n component: component || undefined,\n ideaPath,\n ideaPathFromDocs: path.relative(docsDir, ideaPath),\n };\n },\n { owner: 'idea' }\n );\n}\n\nfunction validateProvidedIdeaId(id: string, lang: Lang): string {\n assertValid(\n validateIdeaIdWithLang(id, lang),\n tr(lang, 'cli', 'validation.context.ideaId'),\n lang\n );\n return id;\n}\n\nfunction applyIdeaTemplate(\n template: string,\n values: {\n ideaId: string;\n name: string;\n description: string;\n component: string;\n created: string;\n }\n): string {\n return template\n .replaceAll('{idea-id}', values.ideaId)\n .replaceAll('{idea-name}', values.name)\n .replaceAll('{YYYY-MM-DD}', values.created)\n .replaceAll('{{description}}', values.description)\n .replaceAll('{component}', values.component);\n}\n\nasync function getNextIdeaId(docsDir: string): Promise<string> {\n const ideasDir = path.join(docsDir, 'ideas');\n let max = 0;\n\n if (await fs.pathExists(ideasDir)) {\n const entries = await fs.readdir(ideasDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isFile()) continue;\n const match = entry.name.match(/^I(\\d+)-/);\n if (!match) continue;\n const num = parseInt(match[1], 10);\n if (num > max) max = num;\n }\n }\n\n const next = max + 1;\n const width = Math.max(3, String(next).length);\n return `I${String(next).padStart(width, '0')}`;\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 { createDefaultApprovalConfig, 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';\nimport { upsertLeeSpecKitAgentsMd } from '../utils/agents-md.js';\nimport {\n canBackfillStandaloneWorkspaceRoot,\n resolveConfiguredStandaloneWorkspaceRoot,\n resolveStandaloneWorkspaceRoot,\n serializeStandaloneWorkspaceRoot,\n} from '../utils/standalone-workspace.js';\n\ninterface UpdateOptions {\n agents?: boolean;\n agentsMd?: boolean;\n force?: boolean;\n}\n\ninterface ConfigBackfillResult {\n changed: boolean;\n changedPaths: string[];\n}\n\nfunction hasOwnKey(value: Record<string, unknown>, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction isLegacyGeneratedApprovalConfig(\n approval: Record<string, unknown>\n): boolean {\n const mode = typeof approval.mode === 'string' ? approval.mode : '';\n if (mode && mode !== 'category' && mode !== 'steps' && mode !== 'builtin') {\n return false;\n }\n\n const overrideKeys = [\n 'default',\n 'requireCheckSteps',\n 'requireCheckCategories',\n 'skipCheckCategories',\n 'taskExecuteCheck',\n ];\n return !overrideKeys.some((key) => hasOwnKey(approval, key));\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('--agents-md', 'Sync project-scoped AGENTS.md entrypoint')\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 let currentConfig: Awaited<ReturnType<typeof getConfig>> = config;\n const { docsDir } = currentConfig;\n await withFileLock(\n getDocsLockPath(docsDir),\n async () => {\n if (!currentConfig) {\n throw createCliError(\n 'DOCS_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.docsNotFound')\n );\n }\n const { projectType, lang } = currentConfig;\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(cwd, docsDir);\n if (configBackfill.changed) {\n currentConfig = await getConfig(cwd);\n }\n if (!currentConfig) {\n throw createCliError(\n 'DOCS_NOT_FOUND',\n tr(DEFAULT_LANG, 'cli', 'common.docsNotFound')\n );\n }\n\n // 업데이트 대상 결정\n const hasExplicitSelection = !!(options.agents || options.agentsMd);\n const updateAgents = options.agents || !hasExplicitSelection;\n const updateAgentsMd = options.agentsMd || !hasExplicitSelection;\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 // Update project-scoped agent docs while keeping CLI-managed runtime copies out of docs.\n if (updateAgents) {\n console.log(chalk.blue(tr(lang, 'cli', 'update.updatingAgents')));\n\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 = currentConfig.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 if (updateAgentsMd) {\n const agentsMdTargets = await collectAgentsMdTargets(cwd, currentConfig);\n for (const target of agentsMdTargets) {\n const result = await upsertLeeSpecKitAgentsMd(target, {\n lang,\n docsRepo: currentConfig.docsRepo ?? 'embedded',\n });\n if (result.changed) {\n updatedCount += 1;\n }\n }\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 getGitTopLevelOrNull(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 });\n const value = String(out || '').trim();\n return value ? value : null;\n } catch {\n return null;\n }\n}\n\nasync function collectAgentsMdTargets(\n cwd: string,\n config: Awaited<ReturnType<typeof getConfig>>\n): Promise<string[]> {\n if (!config) return [];\n\n const targets = new Set<string>();\n const docsRepo = config.docsRepo ?? 'embedded';\n\n if (docsRepo === 'embedded') {\n const repoRoot =\n getGitTopLevelOrNull(cwd) ||\n getGitTopLevelOrNull(config.docsDir) ||\n path.resolve(config.docsDir, '..');\n targets.add(path.join(repoRoot, 'AGENTS.md'));\n return [...targets];\n }\n\n const workspaceRoot = resolveConfiguredStandaloneWorkspaceRoot(config);\n if (!workspaceRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone workspaceRoot is missing or invalid. Run `npx lee-spec-kit update --agents-md` from the shared workspace root to migrate this project.'\n );\n }\n targets.add(path.join(workspaceRoot, 'AGENTS.md'));\n\n return [...targets];\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\nfunction normalizeStringList(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\nfunction normalizeDecisionEnumList(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().toLowerCase();\n if (!value) continue;\n if (\n value === 'approve' ||\n value === 'changes_requested' ||\n value === 'blocked'\n ) {\n deduped.add(value);\n }\n }\n return [...deduped];\n}\n\nasync function backfillMissingConfigDefaults(\n cwd: string,\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 if (\n raw.docsRepo === 'standalone' &&\n typeof raw.workspaceRoot !== 'string' &&\n canBackfillStandaloneWorkspaceRoot(cwd, docsDir)\n ) {\n raw.workspaceRoot = serializeStandaloneWorkspaceRoot(\n docsDir,\n resolveStandaloneWorkspaceRoot(cwd, docsDir)\n );\n changedPaths.push('workspaceRoot');\n }\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 const inferredPreset = workflow.mode === 'local' ? 'local' : 'github';\n setIfMissing(workflow, 'preset', inferredPreset, 'workflow.preset');\n setIfMissing(workflow, 'mode', 'github', 'workflow.mode');\n setIfMissing(\n workflow,\n 'requireWorktree',\n raw.docsRepo === 'standalone',\n 'workflow.requireWorktree'\n );\n if (raw.docsRepo === 'standalone' && workflow.requireWorktree !== true) {\n workflow.requireWorktree = true;\n changedPaths.push('workflow.requireWorktree');\n }\n setIfMissing(workflow, 'codeDirtyScope', 'auto', 'workflow.codeDirtyScope');\n setIfMissing(workflow, 'taskCommitGate', 'warn', 'workflow.taskCommitGate');\n if (!isPlainObject(workflow.auto)) {\n workflow.auto = {};\n changedPaths.push('workflow.auto');\n }\n const workflowAuto = workflow.auto as Record<string, unknown>;\n setIfMissing(workflowAuto, 'defaultPreset', 'pr-handoff', 'workflow.auto.defaultPreset');\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(\n prePrReview,\n 'evidenceMode',\n 'path_required',\n 'workflow.prePrReview.evidenceMode'\n );\n if (\n prePrReview.evidenceMode !== undefined &&\n prePrReview.evidenceMode !== 'path_required' &&\n prePrReview.evidenceMode !== 'any'\n ) {\n prePrReview.evidenceMode = 'path_required';\n changedPaths.push('workflow.prePrReview.evidenceMode');\n }\n if ('findings' in prePrReview) {\n delete prePrReview.findings;\n changedPaths.push('workflow.prePrReview.findings');\n }\n if (prePrReview.decisionEnum === undefined) {\n prePrReview.decisionEnum = ['approve', 'changes_requested', 'blocked'];\n changedPaths.push('workflow.prePrReview.decisionEnum');\n } else {\n const normalizedDecisionEnum = normalizeDecisionEnumList(prePrReview.decisionEnum);\n if (normalizedDecisionEnum.length === 0) {\n prePrReview.decisionEnum = ['approve', 'changes_requested', 'blocked'];\n changedPaths.push('workflow.prePrReview.decisionEnum');\n } else if (\n JSON.stringify(normalizedDecisionEnum) !==\n JSON.stringify(prePrReview.decisionEnum)\n ) {\n prePrReview.decisionEnum = normalizedDecisionEnum;\n changedPaths.push('workflow.prePrReview.decisionEnum');\n }\n }\n setIfMissing(\n prePrReview,\n 'enforceExecutionEvidence',\n false,\n 'workflow.prePrReview.enforceExecutionEvidence'\n );\n if (prePrReview.executionCommandPrefixes === undefined) {\n prePrReview.executionCommandPrefixes = [];\n changedPaths.push('workflow.prePrReview.executionCommandPrefixes');\n } else {\n const normalizedExecutionCommandPrefixes = normalizeStringList(\n prePrReview.executionCommandPrefixes\n );\n if (\n JSON.stringify(normalizedExecutionCommandPrefixes) !==\n JSON.stringify(prePrReview.executionCommandPrefixes)\n ) {\n prePrReview.executionCommandPrefixes = normalizedExecutionCommandPrefixes;\n changedPaths.push('workflow.prePrReview.executionCommandPrefixes');\n }\n }\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 = createDefaultApprovalConfig();\n changedPaths.push('approval');\n } else {\n const approval = raw.approval as Record<string, unknown>;\n if (isLegacyGeneratedApprovalConfig(approval)) {\n raw.approval = createDefaultApprovalConfig();\n changedPaths.push('approval');\n }\n }\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","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 path from 'node:path';\nimport fs from 'fs-extra';\nimport { listLeeSpecFeatures } from '../adapters/schema/lee-spec-kit/feature.js';\nimport type { ProjectConfig } from '../config/types.js';\nimport { getConfig } from './config.js';\nimport { createCliError } from './cli-error.js';\nimport { runGitCapture } from './git-run.js';\nimport {\n resolveManagedWorktreePath,\n resolveConfiguredStandaloneWorkspaceRoot,\n resolveGitTopLevelOrNull,\n resolveStandaloneProjectRoots,\n} from './standalone-workspace.js';\n\nexport interface ResolvedFeature {\n id: string;\n slug: string;\n folderName: string;\n type: string;\n path: string;\n docs: {\n featurePathFromDocs: string;\n };\n git: {\n docsGitCwd: string;\n projectGitCwd: string;\n };\n issueNumber?: number;\n}\n\nexport type FeatureSelectionStatus =\n | 'selected'\n | 'no_features'\n | 'no_match'\n | 'multiple_matches';\n\nexport interface FeatureSelectionState {\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>;\n features: ResolvedFeature[];\n matchedFeature: ResolvedFeature | null;\n status: FeatureSelectionStatus;\n}\n\nconst BRANCH_LABELS = ['Branch', '브랜치'];\n\nfunction normalizeComponent(value: string | undefined): string | undefined {\n const component = (value || '').trim().toLowerCase();\n return component || undefined;\n}\n\nfunction matchesFeatureSelector(\n feature: ResolvedFeature,\n selector: string\n): boolean {\n const normalized = selector.trim().toLowerCase();\n if (!normalized) return false;\n return (\n feature.folderName.toLowerCase() === normalized ||\n feature.slug.toLowerCase() === normalized ||\n feature.id.toLowerCase() === normalized\n );\n}\n\nfunction parseFeatureBranchTarget(branchName: string): string | null {\n const trimmed = branchName.trim();\n if (!trimmed) return null;\n const match = trimmed.match(/^feat\\/(?:\\d+-)?(.+)$/i);\n return match?.[1]?.trim().toLowerCase() || null;\n}\n\nfunction resolveProjectGitCwd(\n cwd: string,\n config: Pick<ProjectConfig, 'docsRepo' | 'docsDir' | 'projectRoot' | 'workspaceRoot'>,\n component: string\n): string {\n if (config.docsRepo === 'standalone') {\n const projectRoots = resolveStandaloneProjectRoots(\n config as ProjectConfig,\n component === 'single' ? undefined : component\n );\n const projectRoot = projectRoots[0];\n if (!projectRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone project root could not be resolved for the selected feature.'\n );\n }\n return projectRoot;\n }\n\n return resolveGitTopLevelOrNull(cwd) || resolveGitTopLevelOrNull(config.docsDir) || cwd;\n}\n\nfunction resolveProjectRootFromGitCwd(projectGitCwd: string): string {\n return resolveGitTopLevelOrNull(projectGitCwd) || path.resolve(projectGitCwd);\n}\n\nasync function resolveExistingManagedWorktreePath(\n config: ProjectConfig,\n projectGitCwd: string,\n slug: string,\n folderName: string,\n issueNumber?: number,\n branchName?: string | null\n): Promise<string | null> {\n const projectRoot = resolveProjectRootFromGitCwd(projectGitCwd);\n const branchCandidates = [\n branchName,\n issueNumber ? `feat/${issueNumber}-${slug}` : null,\n issueNumber ? `feat/${issueNumber}-${folderName}` : null,\n ].filter((candidate): candidate is string => !!candidate);\n const candidates = [...new Set(branchCandidates)].map((candidate) =>\n resolveManagedWorktreePath(config, projectRoot, candidate)\n );\n\n for (const candidate of candidates) {\n if (await fs.pathExists(candidate)) {\n return candidate;\n }\n }\n\n return null;\n}\n\nfunction extractFieldValue(content: string, labels: string | string[]): string | null {\n for (const label of Array.isArray(labels) ? labels : [labels]) {\n const escaped = label.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const match = content.match(\n new RegExp(`^\\\\s*-\\\\s*\\\\*\\\\*${escaped}\\\\*\\\\*:\\\\s*(.*?)\\\\s*$`, 'mi')\n );\n if (!match) continue;\n const value = match[1].trim();\n if (value) return value;\n }\n return null;\n}\n\nfunction sanitizeMetadataValue(value: string | null): string | null {\n if (!value) return null;\n const trimmed = value.trim().replace(/^`(.+)`$/, '$1');\n if (!trimmed || trimmed === '-') return null;\n return trimmed;\n}\n\nfunction toFeaturePathFromDocs(\n projectType: 'single' | 'multi',\n component: string,\n folderName: string\n): string {\n return projectType === 'multi' && component !== 'single'\n ? path.join('features', component, folderName)\n : path.join('features', folderName);\n}\n\nasync function extractIssueNumber(featureDir: string): Promise<number | undefined> {\n const tasksPath = path.join(featureDir, 'tasks.md');\n if (!(await fs.pathExists(tasksPath))) return undefined;\n const content = await fs.readFile(tasksPath, 'utf-8');\n const match = content.match(/^\\s*-\\s+\\*\\*Issue\\*\\*:\\s*#(\\d+)\\s*$/mi);\n if (!match) return undefined;\n const parsed = Number(match[1]);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nasync function extractBranchName(featureDir: string): Promise<string | null> {\n const tasksPath = path.join(featureDir, 'tasks.md');\n if (!(await fs.pathExists(tasksPath))) return null;\n const content = await fs.readFile(tasksPath, 'utf-8');\n return sanitizeMetadataValue(extractFieldValue(content, BRANCH_LABELS));\n}\n\nasync function listResolvedFeatures(\n cwd: string,\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n component?: string\n): Promise<ResolvedFeature[]> {\n const refs = await listLeeSpecFeatures(cwd);\n const normalizedComponent = normalizeComponent(component);\n const filteredRefs = normalizedComponent\n ? refs.filter((ref) => (ref.component || 'single') === normalizedComponent)\n : refs;\n\n const features = await Promise.all(\n filteredRefs.map(async (ref) => {\n const type = ref.component || 'single';\n const featurePathFromDocs = toFeaturePathFromDocs(\n config.projectType,\n type,\n ref.folderName\n );\n const featureDir = path.join(config.docsDir, featurePathFromDocs);\n const issueNumber = await extractIssueNumber(featureDir);\n const branchName = await extractBranchName(featureDir);\n const projectGitCwdBase = resolveProjectGitCwd(cwd, config, type);\n const worktreeProjectGitCwd =\n config.docsRepo === 'standalone' && (issueNumber || branchName)\n ? await resolveExistingManagedWorktreePath(\n config,\n projectGitCwdBase,\n ref.slug,\n ref.folderName,\n issueNumber,\n branchName\n )\n : null;\n return {\n id: ref.id || ref.folderName.split('-')[0] || '',\n slug: ref.slug,\n folderName: ref.folderName,\n type,\n path: featureDir,\n docs: {\n featurePathFromDocs: featurePathFromDocs.replace(/\\\\/g, '/'),\n },\n git: {\n docsGitCwd: config.docsDir,\n projectGitCwd: worktreeProjectGitCwd || projectGitCwdBase,\n },\n issueNumber,\n } satisfies ResolvedFeature;\n })\n );\n\n return features.sort((left, right) =>\n `${left.id}:${left.type}:${left.folderName}`.localeCompare(\n `${right.id}:${right.type}:${right.folderName}`\n )\n );\n}\n\nfunction getBranchMatchRoots(\n cwd: string,\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n component?: string\n): string[] {\n if (config.docsRepo === 'standalone') {\n if (!resolveConfiguredStandaloneWorkspaceRoot(config)) return [];\n return resolveStandaloneProjectRoots(config, component);\n }\n\n return [\n resolveGitTopLevelOrNull(cwd),\n resolveGitTopLevelOrNull(config.docsDir),\n ].filter((value): value is string => !!value);\n}\n\nfunction matchFeaturesFromBranches(\n cwd: string,\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n features: ResolvedFeature[],\n component?: string\n): ResolvedFeature[] {\n const matched = new Map<string, ResolvedFeature>();\n const roots = getBranchMatchRoots(cwd, config, component);\n\n for (const root of roots) {\n const branchName =\n runGitCapture(['branch', '--show-current'], root) ||\n runGitCapture(['rev-parse', '--abbrev-ref', 'HEAD'], root) ||\n '';\n const target = parseFeatureBranchTarget(branchName);\n if (!target) continue;\n\n for (const feature of features) {\n if (\n feature.slug.toLowerCase() === target ||\n feature.folderName.toLowerCase() === target\n ) {\n matched.set(feature.folderName, feature);\n }\n }\n }\n\n return [...matched.values()];\n}\n\nexport async function resolveFeatureSelection(\n cwd: string,\n selector?: string,\n component?: string\n): Promise<FeatureSelectionState> {\n const config = await getConfig(cwd);\n if (!config) {\n throw createCliError('CONFIG_NOT_FOUND', 'Config file not found. Run `init` first.');\n }\n\n const normalizedComponent = normalizeComponent(component);\n const features = await listResolvedFeatures(cwd, config, normalizedComponent);\n if (features.length === 0) {\n return {\n config,\n features,\n matchedFeature: null,\n status: 'no_features',\n };\n }\n\n let matches: ResolvedFeature[] = [];\n if ((selector || '').trim()) {\n matches = features.filter((feature) =>\n matchesFeatureSelector(feature, selector as string)\n );\n } else {\n matches = matchFeaturesFromBranches(cwd, config, features, normalizedComponent);\n if (matches.length === 0 && features.length === 1) {\n matches = features;\n }\n }\n\n if (matches.length === 1) {\n return {\n config,\n features,\n matchedFeature: matches[0],\n status: 'selected',\n };\n }\n\n return {\n config,\n features,\n matchedFeature: null,\n status: matches.length > 1 ? 'multiple_matches' : 'no_match',\n };\n}\n\nexport function getFeatureDocPaths(feature: ResolvedFeature): {\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","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 { createHash } from 'crypto';\nimport os from 'os';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { DEFAULT_LANG, I18nKey, Lang, tr } from '../utils/i18n.js';\nimport { getConfig } from '../utils/config.js';\nimport { createCliError } from '../utils/cli-error.js';\nimport {\n getFeatureDocPaths,\n type ResolvedFeature,\n resolveFeatureSelection,\n} from '../utils/feature-resolver.js';\nimport { assertValid, validatePathWithLang } from '../utils/validation.js';\nimport {\n getGithubDraftArtifactHeading,\n getGithubDraftRequiredSections,\n} from '../utils/github-draft-contract.js';\nimport {\n runGhJson as runGhJsonProcess,\n runProcess,\n runProcessOrThrow,\n} from '../commands/github/process.js';\n\nexport interface GithubBaseOptions {\n json?: boolean;\n component?: string;\n}\n\nexport interface GithubIssueOptions extends GithubBaseOptions {\n create?: boolean;\n confirm?: string;\n title?: string;\n labels?: string;\n bodyFile?: string;\n assignee?: string;\n}\n\nexport interface 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\nexport type PrArtifactMode = 'auto' | 'on' | 'off';\n\nexport interface PrArtifactPolicy {\n includeScreenshots: boolean;\n includeMermaid: boolean;\n}\n\nexport interface PrViewMeta {\n url: string;\n headRefName: string;\n baseRefName: string;\n}\n\nexport interface PrMergeStateMeta {\n state?: string;\n mergedAt?: string | null;\n baseRefName?: string;\n}\n\nexport interface IssueViewMeta {\n number: number;\n state?: string;\n}\n\nexport { getFeatureDocPaths };\n\nexport type GithubTextKey =\n Extract<I18nKey<'cli'>, `github.${string}`> extends `github.${infer Key}`\n ? Key\n : never;\n\nexport function 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\nexport function detectGithubCliLangSync(cwd: string): Lang {\n const explicitDocsDir = (process.env.LEE_SPEC_KIT_DOCS_DIR || '').trim();\n const startDirs = [\n explicitDocsDir ? path.resolve(explicitDocsDir) : '',\n 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')\n 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\nexport function 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('INVALID_ARGUMENT', tg(lang, 'labelsRequired'));\n }\n return [...new Set(labels)];\n}\n\nexport function escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport function extractDraftMetadataValue(\n content: string,\n keys: string[]\n): 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\nexport function sanitizeDraftMetadataValue(\n raw: string | undefined\n): 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\nexport function sanitizeDraftTitleValue(\n raw: string | undefined\n): string | undefined {\n const value = sanitizeDraftMetadataValue(raw);\n if (!value) return undefined;\n const normalized = value\n .replace(/`/g, '')\n .replace(/\\*\\*(.*?)\\*\\*/g, '$1')\n .replace(/\\[(.*?)\\]\\((.*?)\\)/g, '$1')\n .replace(/\\s+/g, ' ')\n .trim();\n return normalized || undefined;\n}\n\nexport function isPlaceholderWorkflowDraftTitle(\n raw: string | undefined,\n feature: { slug: string; folderName?: string }\n): boolean {\n const normalized = sanitizeDraftTitleValue(raw);\n if (!normalized) return true;\n const lowered = normalized.trim().toLowerCase();\n const placeholders = new Set(\n [feature.slug, feature.folderName]\n .map((value) => (value || '').trim().toLowerCase())\n .filter(Boolean)\n );\n return placeholders.has(lowered);\n}\n\nexport function parseWorkflowDraftStatus(\n raw: string | undefined\n): '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\nexport interface WorkflowDraftMetadata {\n status?: 'draft' | 'ready';\n title?: string;\n labels?: string;\n}\n\nexport function parseWorkflowDraftMetadata(\n content: string\n): WorkflowDraftMetadata {\n const status = parseWorkflowDraftStatus(\n extractDraftMetadataValue(content, ['Status', '상태'])\n );\n const title = sanitizeDraftTitleValue(\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\nexport interface PreparedGithubBody {\n body: string;\n bodyFile: string;\n source: 'generated' | 'explicit' | 'workflow-ready';\n draftMetadata?: WorkflowDraftMetadata;\n}\n\nexport async function prepareGithubBody(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}): 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\nexport function hasExplicitRemoteApproval(raw: string | undefined): boolean {\n return (raw || '').trim().toUpperCase() === 'OK';\n}\n\nexport function assertRemoteApproval(\n raw: string | undefined,\n operation: string,\n lang: Lang\n): void {\n if (hasExplicitRemoteApproval(raw)) return;\n throw createCliError(\n 'APPROVAL_REQUIRED',\n tg(lang, 'approvalRequired', { operation })\n );\n}\n\nexport function 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: string) =>\n tg(lang, 'ghInvalidJson', {\n snippet,\n }),\n });\n}\n\nexport function ensureSections(\n body: string,\n sections: string[],\n kind: string,\n lang: Lang\n): void {\n const hasHeading = (sectionHeading: string): boolean => {\n const target = normalizeHeading(sectionHeading);\n const lines = body.split('\\n');\n for (const line of lines) {\n const match = line.match(/^\\s*##\\s+(.+?)\\s*$/);\n if (!match) continue;\n if (normalizeHeading(match[1]) === target) return true;\n }\n return false;\n };\n const hasMetadataField = (field: string): boolean => {\n const re = new RegExp(\n `^\\\\s*-\\\\s*\\\\*\\\\*${escapeRegExp(field)}\\\\*\\\\*\\\\s*:`,\n 'm'\n );\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\nexport function ensureDocsExist(\n docsDir: string,\n relativePaths: string[],\n lang: Lang\n): 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport const TODO_PLACEHOLDER_PATTERN = /(^|\\n)\\s*-\\s*\\[[ xX]\\]\\s*TODO:/m;\n\nexport function ensureNoTodoPlaceholders(\n body: string,\n kind: string,\n lang: Lang\n): void {\n if (!TODO_PLACEHOLDER_PATTERN.test(body)) return;\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'todoPlaceholdersRemain', { kind })\n );\n}\n\nexport function 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\nexport function 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' ? true : mermaidMode === 'off' ? false : true;\n\n return {\n includeScreenshots,\n includeMermaid,\n };\n}\n\nexport async function resolveFeatureOrThrow(\n featureName: string | undefined,\n options: { component?: string },\n lang: Lang\n): Promise<{\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>;\n feature: ResolvedFeature;\n}> {\n const state = await resolveFeatureSelection(\n process.cwd(),\n featureName,\n options.component\n );\n if (!state.matchedFeature) {\n if (state.status === 'no_features') {\n throw createCliError('PRECONDITION_FAILED', tg(lang, 'noFeatures'));\n }\n if (state.status === 'multiple_matches') {\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: state.config, feature: state.matchedFeature };\n}\n\nexport function resolveGithubProjectCwd(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n feature: ResolvedFeature\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 'Standalone docs mode requires a configured projectRoot.'\n );\n }\n return process.cwd();\n}\n\nexport function resolveGithubDocsCwd(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n feature: ResolvedFeature\n): string {\n const docsGitCwd = (feature.git.docsGitCwd || '').trim();\n if (docsGitCwd) return docsGitCwd;\n return config.docsDir;\n}\n\nexport function shouldPushDocsSync(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>\n): boolean {\n if (config.docsRepo !== 'standalone') return true;\n return config.pushDocs === true;\n}\n\nexport function normalizeHeading(value: string): string {\n let normalized = value.trim();\n for (;;) {\n const next = normalized\n .replace(/\\s*\\([^)]*\\)\\s*$/, '')\n .replace(/\\s*([^)]*)\\s*$/, '')\n .trim();\n if (next === normalized) break;\n normalized = next;\n }\n return normalized.replace(/\\s+/g, ' ').toLowerCase();\n}\n\nexport function 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\nexport function removeMarkdownByHeadings(\n content: string,\n headings: string[],\n levels: number[]\n): string {\n const targets = new Set(headings.map((heading) => normalizeHeading(heading)));\n const lines = content.split('\\n');\n const levelSet = new Set(levels);\n let start = -1;\n let startLevel = 0;\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;\n startLevel = level;\n break;\n }\n\n if (start < 0) return content;\n\n let end = lines.length;\n for (let i = start + 1; 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 const next = [...lines.slice(0, start), ...lines.slice(end)].join('\\n');\n const hasTrailingNewline = /\\n$/.test(content);\n const normalized = next.replace(/\\n{3,}/g, '\\n\\n').trimEnd();\n if (!normalized) return '';\n return hasTrailingNewline ? `${normalized}\\n` : normalized;\n}\n\nexport function extractMarkdownSection(\n content: string,\n headings: string[]\n): string | undefined {\n return extractMarkdownByHeadings(content, headings, [2]);\n}\n\nexport function stripIssueDraftMetadataSection(content: string): string {\n return stripWorkflowDraftMetadataSection(content);\n}\n\nexport function stripWorkflowDraftMetadataSection(content: string): string {\n return removeMarkdownByHeadings(content, ['Metadata', '메타데이터'], [2]);\n}\n\nexport function 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\nexport function sanitizeOverviewSection(\n raw: string | undefined\n): 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function toChecklistLines(items: string[]): string {\n return items.map((item) => `- [ ] ${item}`).join('\\n');\n}\n\nexport function 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\nexport function 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\nexport function 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\nexport function extractScopeItemsFromPlan(\n planContent: string,\n lang: Lang\n): { include: string[]; exclude: string[] } {\n const section = extractMarkdownSection(planContent, [\n '범위(명확화)',\n '범위',\n 'Scope',\n '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'\n ? [/비포함/, /제외/]\n : [/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\nexport function 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, [\n '기능 요구사항',\n 'Functional Requirements',\n ])\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(\n uniqItems([\n ...requirementHeadings,\n ...scopeFromPlan.include,\n ...purposeLines.slice(0, 1),\n sanitizeDraftItem(overview) || '',\n ])\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\nexport function extractPlanChangeTargets(\n planContent: string,\n lang: Lang\n): string[] {\n const section = extractMarkdownSection(planContent, [\n '변경 대상(예상)',\n '변경 대상',\n 'Changed Files',\n 'Change Targets',\n 'Expected Changes',\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(lang === 'ko' ? `\\`${trimmed}\\` 변경` : `Update \\`${trimmed}\\``);\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\nexport function 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))\n 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))\n continue;\n if (/\\{[^}]*\\}/.test(trimmed)) continue;\n commands.push(trimmed);\n }\n\n return uniqItems(commands);\n}\n\nexport function 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 (\n !cmd ||\n /^명령어$/i.test(cmd) ||\n /^command$/i.test(cmd) ||\n /^-+$/.test(cmd)\n )\n continue;\n if (/\\{[^}]*\\}/.test(cmd) || /\\{[^}]*\\}/.test(result || '')) continue;\n const renderedResult =\n 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 = lines[i].match(\n /^\\s*-\\s*(?:명령어|Command)\\s*:\\s*`?([^`]+?)`?\\s*$/i\n );\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 = lines[j].match(\n /^\\s*-\\s*(?:결과|Result)\\s*:\\s*(.+?)\\s*$/i\n );\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\nexport function 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, [\n '기능 요구사항',\n 'Functional Requirements',\n ])\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\nexport function resolveOverviewFromSpec(\n specContent: string,\n feature: ResolvedFeature,\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\nexport function 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\nexport function isOverviewMetadataLine(line: string, lang: Lang): boolean {\n const cleaned = line\n .replace(/^[-*+]\\s*/, '')\n .trim()\n .toLowerCase();\n const keys =\n lang === 'ko'\n ? ['기능 id', '기능명', '대상 레포', '이슈 번호', '작성일', '상태']\n : [\n 'feature id',\n 'feature name',\n 'target repo',\n 'issue number',\n 'created',\n 'status',\n ];\n return keys.some((key) => cleaned.startsWith(`${key}:`));\n}\n\nexport function truncateIssueTitleSummary(\n input: string,\n maxLength = 72\n): string {\n const normalized = input.trim().replace(/\\s+/g, ' ');\n if (normalized.length <= maxLength) return normalized;\n\n const stripTrailingPunctuation = (value: string): string =>\n value.trim().replace(/[.!?。]+$/u, '').trim();\n const rewriteVerboseEnding = (value: string): string =>\n stripTrailingPunctuation(value)\n .replace(/공통화하고/gu, '공통화와')\n .replace(/줄인다$/u, '감소')\n .replace(/강화한다$/u, '강화')\n .replace(/개선한다$/u, '개선')\n .replace(/복구한다$/u, '복구')\n .replace(/정리한다$/u, '정리')\n .replace(/도입한다$/u, '도입')\n .replace(/구현한다$/u, '구현');\n const addCandidate = (bucket: string[], seen: Set<string>, value: string) => {\n const cleaned = stripTrailingPunctuation(value);\n if (!cleaned || seen.has(cleaned)) return;\n seen.add(cleaned);\n bucket.push(cleaned);\n };\n\n const candidates: string[] = [];\n const seen = new Set<string>();\n addCandidate(candidates, seen, normalized);\n\n const commaStripped = normalized.replace(/^[^,,]+[,,]\\s*/u, '');\n addCandidate(candidates, seen, commaStripped);\n\n const purposeLeadStripped = normalized.replace(/^.+?(?:하도록|하기 위해),\\s*/u, '');\n addCandidate(candidates, seen, purposeLeadStripped);\n\n for (const base of [...candidates]) {\n addCandidate(candidates, seen, rewriteVerboseEnding(base));\n }\n\n for (const base of [...candidates]) {\n for (const part of base.split(/[,:;,;]/u)) {\n addCandidate(candidates, seen, part);\n }\n }\n\n const fitting = candidates.filter((candidate) => candidate.length <= maxLength);\n if (fitting.length > 0) {\n return fitting.sort((left, right) => right.length - left.length)[0];\n }\n\n return stripTrailingPunctuation(normalized.slice(0, maxLength));\n}\n\nexport function resolveIssueTitleSummary(\n overview: string,\n feature: ResolvedFeature,\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\nexport function getPrScreenshotsHeading(lang: Lang): string {\n return (\n getGithubDraftArtifactHeading('pr', 'screenshots', lang) ||\n (lang === 'ko' ? '스크린샷' : 'Screenshots')\n );\n}\n\nexport function getPrMermaidHeading(lang: Lang): string {\n return (\n getGithubDraftArtifactHeading('pr', 'mermaid', lang) ||\n (lang === 'ko' ? '아키텍처 다이어그램' : 'Architecture Diagram')\n );\n}\n\nexport function buildPrScreenshotsSection(lang: Lang): string {\n if (lang === 'ko') {\n return `\n## 스크린샷\n\n- [ ] 업로드한 스크린샷 URL을 포함하세요. (예: \\`![](https://...)\\`)\n`;\n }\n return `\n## Screenshots\n\n- [ ] Include uploaded screenshot URL(s). (e.g. \\`![](https://...)\\`)\n`;\n}\n\nexport function 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\nexport function 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\nexport function 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(\n specContent,\n planContent,\n tasksContent,\n overview,\n lang\n );\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\nexport function buildPrBody(\n feature: ResolvedFeature,\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\n ? `\\nCloses #${feature.issueNumber}\\n`\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\nexport function stripMarkdownCodeContexts(body: string): string {\n const lines = body.split('\\n');\n const out: string[] = [];\n let inFence = false;\n let fenceChar = '';\n let fenceLength = 0;\n\n for (const line of lines) {\n const fenceStartMatch = line.match(/^\\s*(`{3,}|~{3,})/);\n if (fenceStartMatch) {\n const marker = fenceStartMatch[1];\n const markerChar = marker[0];\n const markerLength = marker.length;\n if (!inFence) {\n inFence = true;\n fenceChar = markerChar;\n fenceLength = markerLength;\n continue;\n }\n if (markerChar === fenceChar && markerLength >= fenceLength) {\n inFence = false;\n fenceChar = '';\n fenceLength = 0;\n }\n continue;\n }\n if (inFence) continue;\n out.push(line.replace(/`[^`\\n]*`/g, ''));\n }\n\n return out.join('\\n');\n}\n\nexport function hasIssueClosingKeyword(\n body: string,\n issueNumber: string | undefined\n): boolean {\n if (!issueNumber) return false;\n const cleaned = stripMarkdownCodeContexts(body);\n const issue = escapeRegExp(issueNumber);\n const closeKeywordRegex = new RegExp(\n `\\\\b(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\\\\b\\\\s*(?:[a-zA-Z0-9_.-]+\\\\/)?#\\\\s*${issue}\\\\b`,\n 'i'\n );\n return closeKeywordRegex.test(cleaned);\n}\n\nexport function ensureIssueClosingLine(\n body: string,\n issueNumber: string | undefined\n): string {\n if (!issueNumber) return body;\n if (hasIssueClosingKeyword(body, issueNumber)) return body;\n const trimmed = body.trimEnd();\n const separator = trimmed.length > 0 ? '\\n\\n' : '';\n return `${trimmed}${separator}Closes #${issueNumber}\\n`;\n}\n\nexport function extractTasksIssueReference(\n tasksContent: string\n): string | undefined {\n return extractDraftMetadataValue(tasksContent, [\n 'Issue',\n 'Issue Number',\n '이슈',\n '이슈 번호',\n ]);\n}\n\nexport function extractTasksPrReference(tasksContent: string): string | undefined {\n return extractDraftMetadataValue(tasksContent, [\n 'PR',\n 'Pull Request',\n 'PR 링크',\n 'PR URL',\n ]);\n}\n\nexport function parseStrictIssueReference(\n raw: string | undefined\n): string | undefined {\n const value = (raw || '').trim();\n if (!value) return undefined;\n const match = value.match(/^#?\\s*(\\d+)\\s*$/);\n return match?.[1];\n}\n\nexport function resolvePrClosingIssueNumber(\n tasksContent: string,\n featureIssueNumber: string | undefined,\n lang: Lang\n): string | undefined {\n const rawIssueReference = extractTasksIssueReference(tasksContent);\n const parsedRawIssueNumber = parseStrictIssueReference(rawIssueReference);\n if (rawIssueReference && !parsedRawIssueNumber) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'invalidIssueReference', {\n value: rawIssueReference.trim(),\n })\n );\n }\n if (parsedRawIssueNumber && /^0+$/.test(parsedRawIssueNumber)) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'invalidIssueReference', {\n value: rawIssueReference?.trim() || parsedRawIssueNumber,\n })\n );\n }\n\n const issueNumber = (featureIssueNumber || parsedRawIssueNumber || '').trim();\n if (!issueNumber) return undefined;\n return issueNumber;\n}\n\nexport function assertRemoteIssueExists(\n issueNumber: string | undefined,\n cwd: string,\n lang: Lang\n): void {\n if (!issueNumber) return;\n const result = runProcess(\n 'gh',\n ['issue', 'view', issueNumber, '--json', 'number,state'],\n cwd\n );\n if (result.code !== 0) {\n const detail = (result.stderr || result.stdout || '').trim();\n if (/not found|could not resolve|404|no issue/i.test(detail)) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'issueNotFound', {\n issue: `#${issueNumber}`,\n })\n );\n }\n throw createCliError(\n 'EXECUTION_FAILED',\n `${tg(lang, 'issueLookupFailed')}${detail ? `: ${detail}` : ''}`\n );\n }\n\n let payload: IssueViewMeta;\n try {\n payload = JSON.parse((result.stdout || '').trim()) as IssueViewMeta;\n } catch {\n throw createCliError(\n 'EXECUTION_FAILED',\n tg(lang, 'ghInvalidJson', {\n snippet: (result.stdout || '').trim().slice(0, 160),\n })\n );\n }\n if (String(payload?.number || '') !== String(issueNumber)) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n tg(lang, 'issueNotFound', {\n issue: `#${issueNumber}`,\n })\n );\n }\n}\n\nexport function getRequiredIssueSections(lang: Lang): string[] {\n return getGithubDraftRequiredSections('issue', lang);\n}\n\nexport function getRequiredPrSections(lang: Lang): string[] {\n return getGithubDraftRequiredSections('pr', lang);\n}\n\nexport function 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\nexport function 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\nexport function insertFieldInMetadataSection(\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+(?:Metadata|메타데이터)\\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\nexport function extractIssueNumberFromUrl(\n issueUrl: string | undefined\n): string | undefined {\n const value = (issueUrl || '').trim();\n if (!value) return undefined;\n const match = value.match(/\\/issues\\/(\\d+)(?:[/?#]|$)/);\n return match?.[1];\n}\n\nexport function syncTasksIssueMetadata(\n tasksPath: string,\n issueNumber: string,\n lang: Lang\n): { changed: boolean; path: string } {\n if (!fs.existsSync(tasksPath)) {\n throw createCliError(\n 'DOCS_NOT_FOUND',\n tg(lang, 'tasksNotFound', { path: tasksPath })\n );\n }\n\n const original = fs.readFileSync(tasksPath, 'utf-8');\n let next = original;\n let changed = false;\n const issueValue = `#${issueNumber}`;\n\n const issueReplaced = replaceListField(\n next,\n ['Issue', 'Issue Number', '이슈', '이슈 번호'],\n issueValue\n );\n next = issueReplaced.content;\n changed = changed || issueReplaced.changed;\n if (!issueReplaced.found) {\n const inserted = insertFieldInGithubIssueSection(next, 'Issue', issueValue);\n next = inserted.content;\n changed = changed || inserted.changed;\n }\n\n if (changed) {\n fs.writeFileSync(tasksPath, next, 'utf-8');\n }\n\n return { changed, path: tasksPath };\n}\n\nexport function syncIssueDraftMetadata(\n issueDocPath: string,\n issueNumber: string,\n title?: string\n): { changed: boolean; path: string } {\n if (!fs.existsSync(issueDocPath)) {\n return { changed: false, path: issueDocPath };\n }\n\n const original = fs.readFileSync(issueDocPath, 'utf-8');\n let next = original;\n let changed = false;\n const issueValue = `#${issueNumber}`;\n\n const issueReplaced = replaceListField(\n next,\n ['Issue', 'Issue Number', '이슈', '이슈 번호'],\n issueValue\n );\n next = issueReplaced.content;\n changed = changed || issueReplaced.changed;\n if (!issueReplaced.found) {\n const inserted = insertFieldInMetadataSection(next, 'Issue', issueValue);\n next = inserted.content;\n changed = changed || inserted.changed;\n }\n\n const normalizedTitle = sanitizeDraftTitleValue(title);\n if (normalizedTitle) {\n const titleReplaced = replaceListField(\n next,\n ['Title', '제목'],\n normalizedTitle\n );\n next = titleReplaced.content;\n changed = changed || titleReplaced.changed;\n }\n\n if (changed) {\n fs.writeFileSync(issueDocPath, next, 'utf-8');\n }\n\n return { changed, path: issueDocPath };\n}\n\nexport function 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(\n 'DOCS_NOT_FOUND',\n tg(lang, 'tasksNotFound', { path: tasksPath })\n );\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(\n next,\n 'PR Status',\n nextStatus\n );\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\nexport function syncPrDraftMetadata(\n prDocPath: string,\n prUrl: string,\n nextStatus: 'Review' | 'Approved',\n title?: string\n): { changed: boolean; path: string } {\n if (!fs.existsSync(prDocPath)) {\n return { changed: false, path: prDocPath };\n }\n\n const original = fs.readFileSync(prDocPath, '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 = insertFieldInMetadataSection(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 = insertFieldInMetadataSection(next, 'PR Status', nextStatus);\n next = inserted.content;\n changed = changed || inserted.changed;\n }\n\n const normalizedTitle = sanitizeDraftTitleValue(title);\n if (normalizedTitle) {\n const titleReplaced = replaceListField(next, ['Title', '제목'], normalizedTitle);\n next = titleReplaced.content;\n changed = changed || titleReplaced.changed;\n if (!titleReplaced.found) {\n const inserted = insertFieldInMetadataSection(next, 'Title', normalizedTitle);\n next = inserted.content;\n changed = changed || inserted.changed;\n }\n }\n\n if (changed) {\n fs.writeFileSync(prDocPath, next, 'utf-8');\n }\n\n return { changed, path: prDocPath };\n}\n\nexport function 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\nexport function 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('PRECONDITION_FAILED', tg(lang, 'worktreeNotClean'));\n }\n}\n\nexport function 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(\n 'git',\n ['add', '--', relativePath],\n cwd,\n tg(lang, 'stageFileFailed')\n );\n runProcessOrThrow(\n 'git',\n ['commit', '-m', message],\n cwd,\n tg(lang, 'commitSyncFailed')\n );\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\nexport function commitAndPushPaths(\n cwd: string,\n absPaths: string[],\n message: string,\n lang: Lang,\n options?: { pushToOrigin?: boolean }\n): void {\n const uniqueRelativePaths = [\n ...new Set(\n absPaths\n .filter((absPath) => !!absPath && fs.existsSync(absPath))\n .map((absPath) => path.relative(cwd, absPath) || absPath)\n ),\n ];\n if (uniqueRelativePaths.length === 0) return;\n\n const status = runProcessOrThrow(\n 'git',\n ['status', '--porcelain=v1', '--', ...uniqueRelativePaths],\n cwd,\n tg(lang, 'inspectFileStatusFailed')\n );\n if (status.stdout.trim().length === 0) return;\n\n runProcessOrThrow(\n 'git',\n ['add', '--', ...uniqueRelativePaths],\n cwd,\n tg(lang, 'stageFileFailed')\n );\n runProcessOrThrow(\n 'git',\n ['commit', '-m', message],\n cwd,\n tg(lang, 'commitSyncFailed')\n );\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\nexport function shouldRefreshHeadBranch(\n stderr: string,\n stdout: string\n): 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\nexport function refreshPrHeadBranch(\n prRef: string,\n cwd: string,\n lang: Lang\n): 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 =\n 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\nexport function 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\nexport function 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","import path from 'path';\nimport fs from 'fs-extra';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { tr } from '../utils/i18n.js';\nimport {\n createCliError,\n toCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n} from '../utils/cli-error.js';\nimport { runProcessOrThrow } from './github/process.js';\nimport * as ghService from '../services/GithubWorkflowService.js';\n\nexport function githubCommand(program: Command): void {\n const commandLang = ghService.detectGithubCliLangSync(process.cwd());\n const github = program\n .command('github')\n .description(ghService.tg(commandLang, 'cmdGithubDescription'));\n\n github\n .command('issue [feature-name]')\n .description(ghService.tg(commandLang, 'cmdIssueDescription'))\n .option('--json', ghService.tg(commandLang, 'optJson'))\n .option(\n '--component <component>',\n ghService.tg(commandLang, 'optComponent')\n )\n .option('--title <title>', ghService.tg(commandLang, 'optIssueTitle'))\n .option('--labels <labels>', ghService.tg(commandLang, 'optLabels'))\n .option('--body-file <path>', ghService.tg(commandLang, 'optIssueBodyFile'))\n .option(\n '--assignee <assignee>',\n ghService.tg(commandLang, 'optIssueAssignee')\n )\n .option('--create', ghService.tg(commandLang, 'optIssueCreate'))\n .option('--confirm <reply>', ghService.tg(commandLang, 'optIssueConfirm'))\n .action(\n async (\n featureName: string | undefined,\n options: ghService.GithubIssueOptions\n ) => {\n try {\n const { config, feature } = await ghService.resolveFeatureOrThrow(\n featureName,\n {\n component: options.component,\n },\n commandLang\n );\n\n const optionLabels = (options.labels || '').trim();\n const generatedLabels = ghService.parseLabels(\n optionLabels || undefined,\n config.lang\n );\n const paths = ghService.getFeatureDocPaths(feature);\n ghService.ensureDocsExist(\n config.docsDir,\n [paths.specPath, paths.planPath, paths.tasksPath],\n config.lang\n );\n const specContent = await fs.readFile(\n path.join(config.docsDir, paths.specPath),\n 'utf-8'\n );\n const planContent = await fs.readFile(\n path.join(config.docsDir, paths.planPath),\n 'utf-8'\n );\n const tasksContent = await fs.readFile(\n path.join(config.docsDir, paths.tasksPath),\n 'utf-8'\n );\n const overview = ghService.resolveOverviewFromSpec(\n specContent,\n feature,\n config.lang\n );\n\n const defaultTitle = ghService.tg(config.lang, 'issueDefaultTitle', {\n slug: feature.slug,\n summary: ghService.resolveIssueTitleSummary(\n overview,\n feature,\n config.lang\n ),\n });\n const generatedBody = ghService.buildIssueBody(\n specContent,\n planContent,\n tasksContent,\n overview,\n generatedLabels,\n paths,\n config.lang\n );\n ghService.ensureSections(\n generatedBody,\n ghService.getRequiredIssueSections(config.lang),\n ghService.tg(config.lang, 'kindIssue'),\n config.lang\n );\n\n const defaultBodyFile = ghService.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 ghService.prepareGithubBody({\n create: options.create,\n explicitBodyFile,\n defaultBodyFile,\n workflowDraftPath: path.join(config.docsDir, paths.issuePath),\n generatedBody,\n requiredSections: ghService.getRequiredIssueSections(config.lang),\n kindLabel: ghService.tg(config.lang, 'kindIssue'),\n lang: config.lang,\n });\n const body = ghService.stripIssueDraftMetadataSection(preparedBody.body);\n let bodyFile = preparedBody.bodyFile;\n if (options.create && body !== preparedBody.body) {\n const sanitizedBodyFile = ghService.toBodyFilePath(\n undefined,\n 'issue',\n config.docsDir,\n `${feature.type}-issue-sanitized`,\n config.lang\n );\n await fs.ensureDir(path.dirname(sanitizedBodyFile));\n await fs.writeFile(sanitizedBodyFile, body, 'utf-8');\n bodyFile = sanitizedBodyFile;\n }\n const title =\n options.title?.trim() ||\n (preparedBody.source === 'workflow-ready' &&\n !ghService.isPlaceholderWorkflowDraftTitle(\n preparedBody.draftMetadata?.title,\n feature\n )\n ? preparedBody.draftMetadata?.title\n : undefined) ||\n defaultTitle;\n const labels = ghService.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 let syncChanged = false;\n if (options.create) {\n const projectGitCwd = ghService.resolveGithubProjectCwd(\n config,\n feature\n );\n ghService.ensureNoTodoPlaceholders(\n body,\n ghService.tg(config.lang, 'kindIssue'),\n config.lang\n );\n ghService.assertRemoteApproval(\n options.confirm,\n ghService.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 ghService.tg(config.lang, 'createIssueFailed')\n );\n issueUrl = created.stdout.trim() || undefined;\n const syncedIssueNumber = ghService.extractIssueNumberFromUrl(issueUrl);\n if (syncedIssueNumber) {\n const synced = ghService.syncTasksIssueMetadata(\n path.join(config.docsDir, paths.tasksPath),\n syncedIssueNumber,\n config.lang\n );\n const draftSynced = ghService.syncIssueDraftMetadata(\n path.join(config.docsDir, paths.issuePath),\n syncedIssueNumber,\n title\n );\n syncChanged = synced.changed || draftSynced.changed;\n }\n }\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'ok',\n reasonCode: options.create\n ? 'ISSUE_CREATED'\n : 'ISSUE_TEMPLATE_GENERATED',\n feature: feature.folderName,\n component: feature.type,\n title,\n labels,\n body,\n bodyFile,\n issueUrl,\n syncChanged,\n },\n null,\n 2\n )\n );\n return;\n }\n\n console.log();\n console.log(chalk.bold(ghService.tg(config.lang, 'issueHeader')));\n console.log(\n chalk.gray(\n `- ${ghService.tg(config.lang, 'labelFeature')}: ${feature.folderName}`\n )\n );\n console.log(\n chalk.gray(\n `- ${ghService.tg(config.lang, 'labelBodyFile')}: ${bodyFile}`\n )\n );\n console.log(\n chalk.gray(\n `- ${ghService.tg(config.lang, 'labelLabels')}: ${labels.join(', ')}`\n )\n );\n if (issueUrl) {\n console.log(\n chalk.green(\n ghService.tg(config.lang, 'issueCreated', { url: issueUrl })\n )\n );\n } else {\n console.log(\n chalk.blue(ghService.tg(config.lang, 'issueTemplateGenerated'))\n );\n }\n console.log();\n } catch (error) {\n const lang = ghService.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\n github\n .command('pr [feature-name]')\n .description(ghService.tg(commandLang, 'cmdPrDescription'))\n .option('--json', ghService.tg(commandLang, 'optJson'))\n .option(\n '--component <component>',\n ghService.tg(commandLang, 'optComponent')\n )\n .option('--title <title>', ghService.tg(commandLang, 'optPrTitle'))\n .option('--labels <labels>', ghService.tg(commandLang, 'optLabels'))\n .option('--body-file <path>', ghService.tg(commandLang, 'optPrBodyFile'))\n .option('--assignee <assignee>', ghService.tg(commandLang, 'optPrAssignee'))\n .option('--base <branch>', ghService.tg(commandLang, 'optPrBase'), 'main')\n .option('--create', ghService.tg(commandLang, 'optPrCreate'))\n .option('--pr <ref>', ghService.tg(commandLang, 'optPrRef'))\n .option('--merge', ghService.tg(commandLang, 'optPrMerge'))\n .option('--confirm <reply>', ghService.tg(commandLang, 'optPrConfirm'))\n .option('--retry <count>', ghService.tg(commandLang, 'optPrRetry'))\n .option(\n '--screenshots <mode>',\n ghService.tg(commandLang, 'optPrScreenshots'),\n 'auto'\n )\n .option(\n '--mermaid <mode>',\n ghService.tg(commandLang, 'optPrMermaid'),\n 'auto'\n )\n .option('--no-sync-tasks', ghService.tg(commandLang, 'optPrNoSyncTasks'))\n .option('--commit-sync', ghService.tg(commandLang, 'optPrCommitSync'))\n .action(\n async (\n featureName: string | undefined,\n options: ghService.GithubPrOptions\n ) => {\n try {\n const { config, feature } = await ghService.resolveFeatureOrThrow(\n featureName,\n {\n component: options.component,\n },\n commandLang\n );\n\n const optionLabels = (options.labels || '').trim();\n const paths = ghService.getFeatureDocPaths(feature);\n ghService.ensureDocsExist(\n config.docsDir,\n [paths.specPath, paths.tasksPath],\n config.lang\n );\n const specContent = await fs.readFile(\n path.join(config.docsDir, paths.specPath),\n 'utf-8'\n );\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(\n path.join(config.docsDir, paths.tasksPath),\n 'utf-8'\n );\n const overview = ghService.resolveOverviewFromSpec(\n specContent,\n feature,\n config.lang\n );\n\n const defaultTitle = feature.issueNumber\n ? ghService.tg(config.lang, 'prDefaultTitleWithIssue', {\n issue: feature.issueNumber,\n slug: feature.slug,\n featureRef: feature.folderName,\n })\n : ghService.tg(config.lang, 'prDefaultTitleNoIssue', {\n slug: feature.slug,\n featureRef: feature.folderName,\n });\n const artifactPolicy = ghService.resolvePrArtifactPolicy(\n config,\n options\n );\n const generatedBody = ghService.buildPrBody(\n feature,\n specContent,\n planContent,\n tasksContent,\n overview,\n paths,\n artifactPolicy,\n config.lang\n );\n ghService.ensureSections(\n generatedBody,\n ghService.getRequiredPrSections(config.lang),\n ghService.tg(config.lang, 'kindPr'),\n config.lang\n );\n\n const defaultBodyFile = ghService.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 ghService.prepareGithubBody({\n create: options.create,\n explicitBodyFile,\n defaultBodyFile,\n workflowDraftPath: path.join(config.docsDir, paths.prPath),\n generatedBody,\n requiredSections: ghService.getRequiredPrSections(config.lang),\n kindLabel: ghService.tg(config.lang, 'kindPr'),\n lang: config.lang,\n });\n let body = ghService.stripWorkflowDraftMetadataSection(\n preparedBody.body\n );\n let bodyFile = preparedBody.bodyFile;\n if (options.create && body !== preparedBody.body) {\n const sanitizedBodyFile = ghService.toBodyFilePath(\n undefined,\n 'pr',\n config.docsDir,\n `${feature.type}-pr-sanitized`,\n config.lang\n );\n await fs.ensureDir(path.dirname(sanitizedBodyFile));\n await fs.writeFile(sanitizedBodyFile, body, 'utf-8');\n bodyFile = sanitizedBodyFile;\n }\n const requestedTitle =\n options.title?.trim() ||\n (preparedBody.source === 'workflow-ready'\n ? preparedBody.draftMetadata?.title\n : undefined) ||\n '';\n let title = requestedTitle || defaultTitle;\n const labels = ghService.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 = ghService.toRetryCount(options.retry, config.lang);\n let prUrl = options.pr?.trim() || '';\n let mergedAttempts: number | undefined;\n let mergeAlreadyMerged: boolean | undefined;\n let syncChanged = false;\n const pushDocsSync = ghService.shouldPushDocsSync(config);\n\n if (options.create) {\n const projectGitCwd = ghService.resolveGithubProjectCwd(\n config,\n feature\n );\n const closingIssueNumber = ghService.resolvePrClosingIssueNumber(\n tasksContent,\n feature.issueNumber ? String(feature.issueNumber) : undefined,\n config.lang\n );\n title =\n closingIssueNumber && closingIssueNumber.trim()\n ? defaultTitle\n : requestedTitle || defaultTitle;\n ghService.assertRemoteIssueExists(\n closingIssueNumber,\n projectGitCwd,\n config.lang\n );\n if (\n closingIssueNumber &&\n options.title?.trim() &&\n options.title.trim() !== defaultTitle\n ) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n `PR title must follow the existing convention: \"${defaultTitle}\".`\n );\n }\n const normalizedBody = ghService.ensureIssueClosingLine(\n body,\n closingIssueNumber\n );\n if (normalizedBody !== body) {\n body = normalizedBody;\n const fallbackBodyFile = defaultBodyFile;\n if (preparedBody.source === 'generated') {\n await fs.writeFile(bodyFile, body, 'utf-8');\n } else {\n await fs.ensureDir(path.dirname(fallbackBodyFile));\n await fs.writeFile(fallbackBodyFile, body, 'utf-8');\n bodyFile = fallbackBodyFile;\n }\n }\n\n ghService.ensureNoTodoPlaceholders(\n body,\n ghService.tg(config.lang, 'kindPr'),\n config.lang\n );\n ghService.ensurePrArtifacts(body, artifactPolicy, config.lang);\n ghService.assertRemoteApproval(\n options.confirm,\n ghService.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 ghService.tg(config.lang, 'createPrFailed')\n );\n prUrl = created.stdout.trim();\n }\n\n if (!prUrl && options.merge) {\n prUrl = (ghService.extractTasksPrReference(tasksContent) || '').trim();\n }\n\n if (!prUrl && options.merge) {\n throw createCliError(\n 'INVALID_ARGUMENT',\n ghService.tg(config.lang, 'mergeRequiresPr')\n );\n }\n\n if (options.merge) {\n ghService.assertRemoteApproval(\n options.confirm,\n ghService.tg(config.lang, 'operationPrMerge'),\n config.lang\n );\n }\n\n if (prUrl && options.syncTasks !== false) {\n const syncedTasks = ghService.syncTasksPrMetadata(\n path.join(config.docsDir, paths.tasksPath),\n prUrl,\n 'Review',\n config.lang\n );\n const syncedDraft = ghService.syncPrDraftMetadata(\n path.join(config.docsDir, paths.prPath),\n prUrl,\n 'Review',\n title\n );\n syncChanged = syncedTasks.changed || syncedDraft.changed;\n const shouldCommitSync = !!options.commitSync || !!options.merge;\n if (syncChanged && shouldCommitSync) {\n const docsGitCwd = ghService.resolveGithubDocsCwd(\n config,\n feature\n );\n const message = feature.issueNumber\n ? ghService.tg(config.lang, 'syncCommitWithIssue', {\n issue: feature.issueNumber,\n folder: feature.folderName,\n })\n : ghService.tg(config.lang, 'syncCommitNoIssue', {\n folder: feature.folderName,\n });\n ghService.commitAndPushPaths(\n docsGitCwd,\n [syncedTasks.path, syncedDraft.path],\n message,\n config.lang,\n { pushToOrigin: pushDocsSync }\n );\n }\n }\n\n if (options.merge) {\n const projectGitCwd = ghService.resolveGithubProjectCwd(\n config,\n feature\n );\n const merged = ghService.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 mergedTasksSync = ghService.syncTasksPrMetadata(\n path.join(config.docsDir, paths.tasksPath),\n prUrl,\n 'Approved',\n config.lang\n );\n const mergedDraftSync = ghService.syncPrDraftMetadata(\n path.join(config.docsDir, paths.prPath),\n prUrl,\n 'Approved'\n );\n syncChanged =\n syncChanged || mergedTasksSync.changed || mergedDraftSync.changed;\n if (mergedTasksSync.changed || mergedDraftSync.changed) {\n const docsGitCwd = ghService.resolveGithubDocsCwd(\n config,\n feature\n );\n const message = feature.issueNumber\n ? ghService.tg(config.lang, 'syncCommitWithIssue', {\n issue: feature.issueNumber,\n folder: feature.folderName,\n })\n : ghService.tg(config.lang, 'syncCommitNoIssue', {\n folder: feature.folderName,\n });\n ghService.commitAndPushPaths(\n docsGitCwd,\n [mergedTasksSync.path, mergedDraftSync.path],\n message,\n config.lang,\n { pushToOrigin: pushDocsSync }\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 },\n null,\n 2\n )\n );\n return;\n }\n\n console.log();\n console.log(chalk.bold(ghService.tg(config.lang, 'prHeader')));\n console.log(\n chalk.gray(\n `- ${ghService.tg(config.lang, 'labelFeature')}: ${feature.folderName}`\n )\n );\n console.log(\n chalk.gray(\n `- ${ghService.tg(config.lang, 'labelBodyFile')}: ${bodyFile}`\n )\n );\n console.log(\n chalk.gray(\n `- ${ghService.tg(config.lang, 'labelLabels')}: ${labels.join(', ')}`\n )\n );\n if (prUrl) {\n console.log(\n chalk.gray(`- ${ghService.tg(config.lang, 'labelPr')}: ${prUrl}`)\n );\n }\n if (syncChanged) {\n console.log(\n chalk.green(ghService.tg(config.lang, 'prTasksSynced'))\n );\n }\n if (options.merge) {\n console.log(\n chalk.green(\n ghService.tg(config.lang, 'prMerged', {\n attempts: mergedAttempts ?? 1,\n })\n )\n );\n if (mergeAlreadyMerged) {\n console.log(\n chalk.yellow(ghService.tg(config.lang, 'prAlreadyMergedNotice'))\n );\n }\n } else if (!options.create) {\n console.log(\n chalk.blue(ghService.tg(config.lang, 'prTemplateGenerated'))\n );\n }\n console.log();\n } catch (error) {\n const lang = ghService.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}\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 | 'split-feature';\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 id: 'split-feature',\n title: { ko: 'feature 분할 가이드', en: 'feature split guide' },\n relativePath: (_, lang) =>\n path.join(lang, 'common', 'agents', 'skills', 'split-feature.md'),\n },\n];\n\nconst DOC_FOLLOWUPS: Readonly<Record<BuiltinDocId, BuiltinDocId[]>> = {\n agents: [\n 'create-feature',\n 'execute-task',\n 'split-feature',\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', 'split-feature'],\n 'create-issue': ['issue-doc'],\n 'create-pr': ['pr-doc'],\n 'split-feature': [],\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 implementation_approve: ['execute-task'],\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_run: ['create-pr'],\n pre_pr_review_record: ['create-pr'],\n pr_create: ['create-pr', 'pr-doc', 'git-workflow'],\n pr_status_update: ['create-pr'],\n code_review_run: ['create-pr'],\n code_review: ['create-pr'],\n feature_scope_split: ['split-feature', 'execute-task'],\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') return 'issue-doc';\n if (normalized === 'pr-doc') 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 === 'split-feature') {\n return 'split-feature';\n }\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 { 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 { 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';\nimport { detectSchemaProject } from '../adapters/schema/index.js';\n\ninterface DetectOptions {\n dir?: string;\n json?: boolean;\n}\n\ntype DetectionReasonCode = 'PROJECT_DETECTED' | 'PROJECT_NOT_DETECTED';\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 detection = await detectSchemaProject(targetCwd);\n const config = detection.config;\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 console.log(\n JSON.stringify(\n {\n status: 'ok',\n reasonCode,\n isLeeSpecKitProject: true,\n targetCwd,\n docsDir: detection.docsDir,\n configPath: detection.configPath,\n configFilePresent: detection.configFilePresent,\n detectionSource: detection.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 console.log(chalk.green(`- ${tr(lang, 'cli', 'detect.resultDetected')}`));\n console.log(chalk.gray(`- ${tr(lang, 'cli', 'detect.labelDocsDir')}: ${detection.docsDir}`));\n console.log(\n chalk.gray(\n `- ${tr(lang, 'cli', 'detect.labelConfigPath')}: ${\n detection.configPath || '-'\n }`\n )\n );\n console.log(\n chalk.gray(\n `- ${tr(lang, 'cli', 'detect.labelSource')}: ${tr(\n lang,\n 'cli',\n detection.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 { DEFAULT_LANG, tr } from '../utils/i18n.js';\nimport { getConfig } from '../utils/config.js';\nimport {\n createCliError,\n getCliErrorSuggestions,\n printCliErrorSuggestions,\n toCliError,\n} from '../utils/cli-error.js';\nimport { resolveConfiguredStandaloneWorkspaceRoot } from '../utils/standalone-workspace.js';\n\ninterface CodexOptions {\n remove?: boolean;\n}\n\ninterface CodexHooksOptions {\n remove?: boolean;\n}\n\nfunction registerCodexIntegration(parent: Command): void {\n parent\n .command('codex')\n .alias('codex-bootstrap')\n .description(\n 'Install or remove the optional Codex bootstrap that re-reads the current workspace ./AGENTS.md'\n )\n .option(\n '--remove',\n 'Remove the lee-spec-kit managed Codex bootstrap block'\n )\n .action(async (options: CodexOptions) => {\n const lang = DEFAULT_LANG;\n try {\n const {\n getCodexConfigPath,\n removeLeeSpecKitCodexBootstrap,\n upsertLeeSpecKitCodexBootstrap,\n } = await import('../integrations/codex/bootstrap.js');\n const filePath = getCodexConfigPath();\n if (options.remove) {\n const result = await removeLeeSpecKitCodexBootstrap(filePath);\n const message = result.changed\n ? tr(lang, 'cli', 'setup.codexBootstrapRemoved', {\n path: filePath,\n })\n : tr(lang, 'cli', 'setup.codexBootstrapAlreadyAbsent', {\n path: filePath,\n });\n console.log(chalk.green(message));\n return;\n }\n\n const result = await upsertLeeSpecKitCodexBootstrap(filePath);\n const key =\n result.action === 'noop'\n ? 'setup.codexBootstrapAlreadyInstalled'\n : 'setup.codexBootstrapInstalled';\n console.log(chalk.green(tr(lang, 'cli', key, { path: filePath })));\n } catch (error) {\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 }\n });\n}\n\nfunction registerCodexHooksIntegration(parent: Command): void {\n parent\n .command('codex-hooks')\n .description(\n 'Install or remove workspace-local Codex official hooks for the lee-spec-kit docs workflow'\n )\n .option('--remove', 'Remove lee-spec-kit managed workspace-local Codex hooks')\n .action(async (options: CodexHooksOptions) => {\n const lang = DEFAULT_LANG;\n try {\n const config = await getConfig(process.cwd());\n if (!config) {\n throw createCliError(\n 'DOCS_NOT_FOUND',\n 'lee-spec-kit docs were not detected from the current directory. Run this command from the embedded repo root or the standalone workspace/docs root.'\n );\n }\n const {\n getRepoHooksConfigPath,\n removeLeeSpecKitCodexHooks,\n resolveCodexHooksRepoRoot,\n upsertLeeSpecKitCodexHooks,\n } = await import('../integrations/codex/hooks.js');\n const repoRoot =\n config.docsRepo === 'standalone'\n ? resolveConfiguredStandaloneWorkspaceRoot(config)\n : resolveCodexHooksRepoRoot(process.cwd());\n if (!repoRoot) {\n throw createCliError(\n 'PRECONDITION_FAILED',\n 'Standalone workspaceRoot is missing or invalid. Run `npx lee-spec-kit update --agents-md` from the shared workspace root to migrate this project.'\n );\n }\n const filePath = getRepoHooksConfigPath(repoRoot);\n if (options.remove) {\n const result = await removeLeeSpecKitCodexHooks(repoRoot);\n const key = result.changed\n ? 'setup.codexHooksRemoved'\n : 'setup.codexHooksAlreadyAbsent';\n console.log(chalk.green(tr(lang, 'cli', key, { path: filePath })));\n return;\n }\n\n const result = await upsertLeeSpecKitCodexHooks(repoRoot);\n const key =\n result.action === 'noop'\n ? 'setup.codexHooksAlreadyInstalled'\n : 'setup.codexHooksInstalled';\n console.log(chalk.green(tr(lang, 'cli', key, { path: filePath })));\n } catch (error) {\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 }\n });\n}\n\nexport function integrationsCommand(program: Command): void {\n const integrations = program\n .command('integrations')\n .description('Optional developer integration helpers');\n\n registerCodexIntegration(integrations);\n registerCodexHooksIntegration(integrations);\n}\n","import fs from 'fs-extra';\nimport path from 'node:path';\nimport type { ProjectConfig } from '../config/types.js';\nimport { createDefaultApprovalConfig, getConfig } from './config.js';\nimport {\n getFeatureDocPaths,\n resolveFeatureSelection,\n type FeatureSelectionState,\n type ResolvedFeature,\n} from './feature-resolver.js';\nimport { runGitCapture } from './git-run.js';\nimport {\n buildManagedWorktreeEnvLinkCommand,\n resolveManagedWorktreePath,\n resolveStandaloneProjectRoots,\n} from './standalone-workspace.js';\nimport {\n parseWorkflowDraftMetadata,\n type WorkflowDraftMetadata,\n} from '../services/GithubWorkflowService.js';\nimport { runProcess } from '../commands/github/process.js';\n\nexport type WorkflowStageId =\n | 'spec'\n | 'plan'\n | 'tasks'\n | 'issue'\n | 'branch'\n | 'implementation'\n | 'task_commit'\n | 'implementation_approve'\n | 'pre_pr_review'\n | 'pr'\n | 'code_review'\n | 'merge'\n | 'cleanup'\n | 'done';\n\nexport interface WorkflowStageAction {\n category:\n | 'spec_write'\n | 'spec_approve'\n | 'plan_write'\n | 'plan_approve'\n | 'tasks_write'\n | 'tasks_approve'\n | 'issue_prepare'\n | 'issue_create'\n | 'branch_create'\n | 'task_execute'\n | 'task_commit'\n | 'implementation_approve'\n | 'pre_pr_review'\n | 'pr_prepare'\n | 'pr_create'\n | 'code_review'\n | 'pr_merge'\n | 'merge_cleanup';\n summary: string;\n approvalRequired: boolean;\n command: string | null;\n}\n\nexport type WorkflowReviewState =\n | 'waiting_review'\n | 'review_pending_latest_commit'\n | 'review_rate_limited'\n | 'changes_requested'\n | 'approved'\n | 'draft'\n | 'merged'\n | 'merge_blocked'\n | 'unknown';\n\nexport interface WorkflowStageOption {\n label: string;\n reply: string;\n category:\n | 'approve_continue'\n | 'request_changes'\n | 'remote_execute'\n | 'review_wait'\n | 'review_fix'\n | 'review_sync_approved'\n | 'pr_merge'\n | 'hold';\n summary: string;\n command: string | null;\n}\n\nexport interface WorkflowStagePayload {\n status: 'ok' | 'error';\n reasonCode:\n | 'WORKFLOW_STAGE_RESOLVED'\n | 'CONFIG_NOT_FOUND'\n | 'NO_FEATURES'\n | 'FEATURE_SELECTION_REQUIRED';\n docsDir: string | null;\n featureRef: string | null;\n stage: WorkflowStageId | null;\n nextAction: WorkflowStageAction | null;\n approvalRequired: boolean;\n implementationAllowed: boolean;\n reviewState?: WorkflowReviewState;\n primaryActionLabel?: string | null;\n actionOptions?: WorkflowStageOption[];\n blockedReasonCode:\n | 'SPEC_NOT_APPROVED'\n | 'PLAN_NOT_APPROVED'\n | 'TASKS_NOT_READY'\n | 'ISSUE_NOT_CREATED'\n | 'BRANCH_NOT_READY'\n | 'TASK_COMMIT_REQUIRED'\n | 'IMPLEMENTATION_APPROVAL_REQUIRED'\n | 'PRE_PR_REVIEW_NOT_APPROVED'\n | 'PR_NOT_CREATED'\n | 'PR_REVIEW_NOT_APPROVED'\n | 'POST_MERGE_CLEANUP_REQUIRED'\n | null;\n}\n\ntype WorkflowRequirements = {\n requireIssue: boolean;\n requireBranch: boolean;\n requireWorktree: boolean;\n requirePr: boolean;\n requireReview: boolean;\n requireMerge: boolean;\n prePrReviewEnabled: boolean;\n};\n\ntype DocApprovalStatus = 'draft' | 'review' | 'approved' | null;\ntype SimpleTaskStatus = 'TODO' | 'DOING' | 'DONE' | 'REVIEW';\n\ntype ParsedTasks = {\n docStatus: DocApprovalStatus;\n issueNumber: number | null;\n branch: string | null;\n prLink: string | null;\n prStatus: 'review' | 'approved' | null;\n prePrReviewStatus: 'pending' | 'running' | 'done' | null;\n prePrEvidence: string | null;\n prePrDecision: string | null;\n prePrDecisionOutcome: 'approve' | 'changes_requested' | 'blocked' | null;\n tasks: Array<{\n raw: string;\n status: SimpleTaskStatus;\n title: string;\n }>;\n completion: {\n allTasksChecked: boolean;\n testsChecked: boolean;\n finalOutcomeChecked: boolean;\n };\n};\n\ntype ParsedWorkflowDraft = WorkflowDraftMetadata & {\n issueRef: string | null;\n prRef: string | null;\n prStatus: 'review' | 'approved' | null;\n};\n\ntype TaskCommitGatePolicy = 'off' | 'warn' | 'strict';\n\ntype 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\ntype PostMergeCleanupState = {\n complete: boolean;\n projectRootGitCwd: string;\n baseBranch: string;\n headBranch: string | null;\n worktreePath: string | null;\n hasOriginRemote: boolean;\n localBaseCheckedOut: boolean;\n baseSyncedWithOrigin: boolean;\n localFeatureBranchExists: boolean;\n remoteFeatureBranchExists: boolean;\n managedWorktreeExists: boolean;\n};\n\ntype CodeRabbitReviewThreadsState = 'unknown' | 'none' | 'open' | 'resolved';\n\nconst LEGACY_STEP_BY_ACTION: Partial<Record<WorkflowStageAction['category'], number>> = {\n spec_write: 2,\n spec_approve: 3,\n plan_write: 4,\n plan_approve: 5,\n tasks_write: 6,\n tasks_approve: 6,\n issue_prepare: 8,\n issue_create: 8,\n branch_create: 9,\n task_execute: 10,\n implementation_approve: 10,\n pre_pr_review: 12,\n pr_prepare: 13,\n pr_create: 13,\n code_review: 14,\n pr_merge: 14,\n};\n\nconst DOC_STATUS_LABELS = ['Doc Status', '문서 상태'];\nconst ISSUE_LABELS = ['Issue', 'Issue Number', '이슈', '이슈 번호'];\nconst BRANCH_LABELS = ['Branch', '브랜치'];\nconst PR_LABELS = ['PR', 'Pull Request'];\nconst PR_STATUS_LABELS = ['PR Status', 'PR 상태'];\nconst PRE_PR_REVIEW_LABELS = ['Pre-PR Review', 'PR 전 리뷰'];\nconst PRE_PR_EVIDENCE_LABELS = ['Pre-PR Evidence', 'PR 전 리뷰 Evidence'];\nconst PRE_PR_DECISION_LABELS = ['Pre-PR Decision', 'PR 전 리뷰 Decision'];\n\nfunction resolveWorkflowRequirements(config: ProjectConfig): WorkflowRequirements {\n const workflow = config.workflow || {};\n const workflowMode = workflow.mode || workflow.preset || 'github';\n const isLocalWorkflow = workflowMode === 'local';\n return {\n requireIssue: workflow.requireIssue ?? !isLocalWorkflow,\n requireBranch: workflow.requireBranch ?? true,\n requireWorktree: config.docsRepo === 'standalone'\n ? true\n : workflow.requireWorktree ?? false,\n requirePr: workflow.requirePr ?? !isLocalWorkflow,\n requireReview: workflow.requireReview ?? !isLocalWorkflow,\n requireMerge: workflow.requireMerge ?? !isLocalWorkflow,\n prePrReviewEnabled: workflow.prePrReview?.enabled ?? !isLocalWorkflow,\n };\n}\n\nfunction parseApprovalStatus(raw: string | undefined): DocApprovalStatus {\n const value = (raw || '').trim().toLowerCase();\n if (value === 'draft') return 'draft';\n if (value === 'review') return 'review';\n if (value === 'approved') return 'approved';\n return null;\n}\n\nfunction extractFieldValue(\n content: string,\n labels: string | string[]\n): string | null {\n for (const label of Array.isArray(labels) ? labels : [labels]) {\n const escaped = label.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const match = content.match(\n new RegExp(`^\\\\s*-\\\\s*\\\\*\\\\*${escaped}\\\\*\\\\*:\\\\s*(.*?)\\\\s*$`, 'mi')\n );\n if (!match) continue;\n const value = match[1].trim();\n if (value) return value;\n }\n return null;\n}\n\nfunction parseMarkdownCheckbox(line: string): boolean | null {\n const match = line.match(/^\\s*-\\s*\\[([ xX])\\]\\s+/);\n if (!match) return null;\n return match[1].toLowerCase() === 'x';\n}\n\nfunction withoutFencedCodeBlocks(content: string): string[] {\n const lines: string[] = [];\n let inFence = false;\n\n for (const line of content.split('\\n')) {\n if (/^\\s*```/.test(line)) {\n inFence = !inFence;\n continue;\n }\n if (!inFence) {\n lines.push(line);\n }\n }\n\n return lines;\n}\n\nfunction parseTasksDoc(content: string): ParsedTasks {\n const issueRaw = extractFieldValue(content, ISSUE_LABELS);\n const issueNumberMatch = issueRaw?.match(/^#(\\d+)$/);\n const issueNumber = issueNumberMatch ? Number(issueNumberMatch[1]) : null;\n const branchRaw = extractFieldValue(content, BRANCH_LABELS);\n const prRaw = extractFieldValue(content, PR_LABELS);\n const prePrDecision = extractFieldValue(content, PRE_PR_DECISION_LABELS);\n const tasks: ParsedTasks['tasks'] = [];\n const nonCodeLines = withoutFencedCodeBlocks(content);\n\n for (const line of nonCodeLines) {\n const match = line.match(\n /^\\s*-\\s*\\[(TODO|DOING|DONE|REVIEW)\\](?:\\[[^\\]]+\\])*\\s+(.+?)\\s*$/i\n );\n if (!match) continue;\n tasks.push({\n raw: line,\n status: match[1].toUpperCase() as SimpleTaskStatus,\n title: match[2].trim(),\n });\n }\n\n const allTasksChecked = nonCodeLines\n .some(\n (line) =>\n /(All tasks are|모든 태스크가)/i.test(line) &&\n parseMarkdownCheckbox(line) === true\n );\n const testsChecked = nonCodeLines\n .some(\n (line) =>\n /(Tests executed and passing|테스트 실행 및 통과)/i.test(line) &&\n parseMarkdownCheckbox(line) === true\n );\n const finalOutcomeChecked = nonCodeLines\n .some(\n (line) =>\n /(Final outcome shared and any required user confirmation recorded|Final user approval|최종 결과를 공유했고, 필요한 사용자 확인을 문서화된 workflow checkpoint 기준으로 기록함)/i.test(\n line\n ) && parseMarkdownCheckbox(line) === true\n );\n\n const prStatus = (() => {\n const value = (extractFieldValue(content, PR_STATUS_LABELS) || '')\n .trim()\n .toLowerCase();\n if (value === 'review') return 'review';\n if (value === 'approved') return 'approved';\n return null;\n })();\n\n const prePrReviewStatus = (() => {\n const value = (extractFieldValue(content, PRE_PR_REVIEW_LABELS) || '')\n .trim()\n .toLowerCase();\n if (value === 'pending') return 'pending';\n if (value === 'running') return 'running';\n if (value === 'done') return 'done';\n return null;\n })();\n\n const prePrDecisionOutcome = (() => {\n const value = (prePrDecision || '').trim().toLowerCase();\n const match = value.match(/\\b(approve|changes_requested|blocked)\\b/);\n return (match?.[1] as ParsedTasks['prePrDecisionOutcome']) || null;\n })();\n\n return {\n docStatus: parseApprovalStatus(\n extractFieldValue(content, DOC_STATUS_LABELS) || undefined\n ),\n issueNumber,\n branch: sanitizeMetadataValue(branchRaw),\n prLink: sanitizeMetadataValue(prRaw),\n prStatus,\n prePrReviewStatus,\n prePrEvidence: sanitizeMetadataValue(\n extractFieldValue(content, PRE_PR_EVIDENCE_LABELS)\n ),\n prePrDecision: sanitizeMetadataValue(prePrDecision),\n prePrDecisionOutcome,\n tasks,\n completion: {\n allTasksChecked,\n testsChecked,\n finalOutcomeChecked,\n },\n };\n}\n\nfunction sanitizeMetadataValue(value: string | null): string | null {\n if (!value) return null;\n const trimmed = value.trim().replace(/^`(.+)`$/, '$1');\n if (!trimmed || trimmed === '-') return null;\n return trimmed;\n}\n\nfunction normalizeCommitTopicText(value: string): string {\n return value.replace(/\\s+/g, ' ').trim();\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 normalizeGitRelativePath(value: string): string {\n return value\n .replace(/\\\\/g, '/')\n .replace(/^\\.\\/+/, '')\n .replace(/\\/+$/, '');\n}\n\nfunction toRepoRelativePath(cwd: string, relativePathFromCwd: string): string {\n const prefix = (runGitCapture(['rev-parse', '--show-prefix'], cwd) || '')\n .trim()\n .replace(/\\/+$/, '');\n if (!prefix) return normalizeGitRelativePath(relativePathFromCwd);\n return normalizeGitRelativePath(`${prefix}/${relativePathFromCwd}`);\n}\n\nfunction parseDoneTransitionsFromDiff(diff: string): number {\n const removedByTask = new Map<\n string,\n Set<'TODO' | 'DOING' | 'DONE' | 'REVIEW'>\n >();\n const addedByTask = new Map<\n string,\n Set<'TODO' | 'DOING' | 'DONE' | 'REVIEW'>\n >();\n\n const parseTaskDiffLine = (\n line: string\n ): { key: string; status: 'TODO' | 'DOING' | 'DONE' | 'REVIEW' } | null => {\n const match = line.match(\n /^\\s*-\\s*\\[(TODO|DOING|DONE|REVIEW)\\](?:\\[[^\\]]+\\])*\\s+(.+?)\\s*$/i\n );\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 = parseTaskDiffLine(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 = parseTaskDiffLine(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 if (\n removedStatuses.has('TODO') ||\n removedStatuses.has('DOING') ||\n removedStatuses.has('REVIEW')\n ) {\n doneTransitions += 1;\n }\n }\n\n return doneTransitions;\n}\n\nfunction parseDoneTaskTopicCounts(content: string): Map<string, number> {\n const counts = new Map<string, number>();\n for (const line of withoutFencedCodeBlocks(content)) {\n const match = line.match(\n /^\\s*-\\s*\\[(DONE)\\](?:\\[[^\\]]+\\])*\\s+(.+?)\\s*$/i\n );\n if (!match) continue;\n const topic = normalizeTaskTopic(match[2] || '');\n if (!topic) continue;\n counts.set(topic, (counts.get(topic) || 0) + 1);\n }\n return counts;\n}\n\nfunction countDoneTransitionsInLatestTasksCommit(\n feature: ResolvedFeature\n): number | undefined {\n const docsGitCwd = feature.git.docsGitCwd;\n const tasksRelativePathFromDocs = normalizeGitRelativePath(\n path.join(feature.docs.featurePathFromDocs, 'tasks.md')\n );\n const latestTasksCommit = (\n runGitCapture(\n ['rev-list', '-n', '1', 'HEAD', '--', tasksRelativePathFromDocs],\n docsGitCwd\n ) || ''\n ).trim();\n if (!latestTasksCommit) return undefined;\n\n const repoTasksPath = toRepoRelativePath(docsGitCwd, tasksRelativePathFromDocs);\n const currentContent = runGitCapture(\n ['show', `${latestTasksCommit}:${repoTasksPath}`],\n docsGitCwd\n );\n if (currentContent === undefined) return undefined;\n const previousContent =\n runGitCapture(['show', `${latestTasksCommit}^:${repoTasksPath}`], docsGitCwd) || '';\n const currentDone = parseDoneTaskTopicCounts(currentContent);\n const previousDone = parseDoneTaskTopicCounts(previousContent);\n\n let doneTransitions = 0;\n for (const [topic, currentCount] of currentDone.entries()) {\n const previousCount = previousDone.get(topic) || 0;\n if (currentCount > previousCount) {\n doneTransitions += currentCount - previousCount;\n }\n }\n\n return doneTransitions;\n}\n\nfunction countPendingDoneTransitions(\n feature: ResolvedFeature\n): number | undefined {\n const docsGitCwd = feature.git.docsGitCwd;\n const tasksRelativePath = normalizeGitRelativePath(\n path.join(feature.docs.featurePathFromDocs, 'tasks.md')\n );\n const diff =\n runGitCapture(\n ['diff', '--unified=0', '--no-color', 'HEAD', '--', tasksRelativePath],\n docsGitCwd\n ) || '';\n if (!diff.trim()) return 0;\n return parseDoneTransitionsFromDiff(diff);\n}\n\nfunction getLastDoneTask(tasks: ParsedTasks): ParsedTasks['tasks'][number] | null {\n for (let index = tasks.tasks.length - 1; index >= 0; index -= 1) {\n if (tasks.tasks[index].status === 'DONE') return tasks.tasks[index];\n }\n return null;\n}\n\nfunction hasOpenTask(tasks: ParsedTasks): boolean {\n return tasks.tasks.some(\n (task) => task.status === 'DOING' || task.status === 'REVIEW'\n );\n}\n\nfunction hasUncommittedChanges(gitCwd: string | null | undefined): boolean {\n if (!gitCwd) return false;\n const status =\n runGitCapture(\n ['status', '--porcelain', '--untracked-files=no'],\n gitCwd\n ) || '';\n return status.trim().length > 0;\n}\n\nfunction resolveTaskCommitGatePolicy(config: ProjectConfig): TaskCommitGatePolicy {\n const raw = config.workflow?.taskCommitGate;\n return raw === 'off' || raw === 'strict' ? raw : 'warn';\n}\n\nfunction checkTaskCommitGate(\n feature: ResolvedFeature,\n effectiveProjectGitCwd: string,\n lastDoneTask: ParsedTasks['tasks'][number] | null\n): TaskCommitGateCheck {\n const doneTransitions = countDoneTransitionsInLatestTasksCommit(feature);\n if (doneTransitions === 0) {\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 lastDoneTopic = normalizeTaskTopic(lastDoneTask?.title || '');\n if (!effectiveProjectGitCwd || !lastDoneTopic) {\n return { pass: true };\n }\n\n const args = ['log', '-n', '1', '--pretty=%s', '--', '.'];\n const relativeDocsDir = path.relative(\n effectiveProjectGitCwd,\n feature.git.docsGitCwd\n );\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 = runGitCapture(args, effectiveProjectGitCwd);\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 if (!normalizedSubject.includes(normalizeTaskTopic(lastDoneTopic).toLowerCase())) {\n return { pass: false, reason: 'MISMATCH_LAST_DONE' };\n }\n\n return { pass: true };\n}\n\nfunction describeTaskCommitGateFailure(\n check: TaskCommitGateCheck\n): string {\n switch (check.reason) {\n case 'DONE_TRANSITIONS_COUNT':\n return `latest tasks.md commit includes ${check.doneTransitions || 0} DONE transitions`;\n case 'NO_PROJECT_COMMIT':\n return 'no recent project code commit was found for the just-finished task';\n case 'PROJECT_LOG_UNAVAILABLE':\n return 'the latest project commit subject could not be inspected';\n case 'MISMATCH_LAST_DONE':\n default:\n return 'the latest project commit subject does not match the just-finished task';\n }\n}\n\nfunction resolveProjectCommitTopic(\n feature: ResolvedFeature,\n tasks: ParsedTasks\n): string {\n const activeTask = tasks.tasks.find(\n (task) => task.status === 'DOING' || task.status === 'REVIEW'\n );\n const raw =\n activeTask?.title ||\n getLastDoneTask(tasks)?.title ||\n nextTodoTask(tasks)?.title ||\n feature.folderName;\n const withoutTaskId = normalizeCommitTopicText(raw || '').replace(\n /^T-[A-Za-z0-9-]+\\s+/,\n ''\n );\n return withoutTaskId || feature.folderName;\n}\n\nfunction buildTaskCommitSummary(input: {\n feature: ResolvedFeature;\n tasks: ParsedTasks;\n effectiveProjectGitCwd: string;\n docsDirty: boolean;\n projectDirty: boolean;\n gateFailureReason?: string | null;\n}): string {\n const { feature, tasks, effectiveProjectGitCwd, docsDirty, projectDirty, gateFailureReason } = input;\n const docsMessage = tasks.issueNumber\n ? `git -C \"${feature.git.docsGitCwd}\" add \"${feature.docs.featurePathFromDocs}\" && git -C \"${feature.git.docsGitCwd}\" commit -m \"docs(#${tasks.issueNumber}): ${feature.folderName} 문서 업데이트\"`\n : `git -C \"${feature.git.docsGitCwd}\" add \"${feature.docs.featurePathFromDocs}\" && git -C \"${feature.git.docsGitCwd}\" commit -m \"docs: ${feature.folderName} 문서 업데이트\"`;\n const projectMessage = tasks.issueNumber\n ? `Stage only the files touched by the just-finished task in \"${effectiveProjectGitCwd}\", then commit with: git -C \"${effectiveProjectGitCwd}\" commit -m \"feat(#${tasks.issueNumber}): ${resolveProjectCommitTopic(feature, tasks)}\"`\n : `Stage only the files touched by the just-finished task in \"${effectiveProjectGitCwd}\", then commit with: git -C \"${effectiveProjectGitCwd}\" commit -m \"feat(${feature.folderName}): ${resolveProjectCommitTopic(feature, tasks)}\"`;\n\n const lines = ['Finish the task-level commit checkpoint before continuing.'];\n if (gateFailureReason) {\n lines.push(`Current gate failure: ${gateFailureReason}`);\n }\n if (docsDirty) {\n lines.push(`Docs commit: ${docsMessage}`);\n }\n if (projectDirty) {\n lines.push(`Project commit: ${projectMessage}`);\n }\n if (!docsDirty && !projectDirty) {\n lines.push(`Re-check the last task commits. Docs commit should contain exactly one DONE transition, and the latest project commit should match \"${normalizeTaskTopic(getLastDoneTask(tasks)?.title || '')}\".`);\n }\n return lines.join('\\n');\n}\n\nfunction parseWorkflowDraftMetadataExtended(content: string): ParsedWorkflowDraft {\n const metadata = parseWorkflowDraftMetadata(content);\n const prStatusRaw = extractFieldValue(content, PR_STATUS_LABELS);\n const normalizedPrStatus = (prStatusRaw || '').trim().toLowerCase();\n return {\n ...metadata,\n issueRef: sanitizeMetadataValue(extractFieldValue(content, ISSUE_LABELS)),\n prRef: sanitizeMetadataValue(extractFieldValue(content, PR_LABELS)),\n prStatus:\n normalizedPrStatus === 'review'\n ? 'review'\n : normalizedPrStatus === 'approved'\n ? 'approved'\n : null,\n };\n}\n\nasync function readFileIfExists(filePath: string): Promise<string | null> {\n if (!(await fs.pathExists(filePath))) return null;\n return fs.readFile(filePath, 'utf-8');\n}\n\nfunction buildFeatureRef(feature: ResolvedFeature): string {\n return feature.folderName;\n}\n\nfunction buildFeatureArgs(feature: ResolvedFeature): string {\n return feature.type && feature.type !== 'single'\n ? `${buildFeatureRef(feature)} --component ${feature.type}`\n : buildFeatureRef(feature);\n}\n\nfunction resolveExpectedBranch(feature: ResolvedFeature, tasks: ParsedTasks): string | null {\n if (tasks.branch) return tasks.branch;\n if (!tasks.issueNumber) return null;\n return `feat/${tasks.issueNumber}-${feature.slug}`;\n}\n\nfunction resolveProjectRootFromGitCwd(projectGitCwd: string): string {\n return runGitCapture(['rev-parse', '--show-toplevel'], projectGitCwd) || path.resolve(projectGitCwd);\n}\n\nfunction resolveProjectRootGitCwd(\n config: ProjectConfig,\n feature: ResolvedFeature\n): string {\n if (config.docsRepo === 'standalone') {\n const roots = resolveStandaloneProjectRoots(\n config,\n feature.type === 'single' ? undefined : feature.type\n );\n if (roots.length > 0) {\n return roots[0];\n }\n }\n\n return resolveProjectRootFromGitCwd(feature.git.projectGitCwd);\n}\n\nfunction getExpectedWorktreePath(\n config: ProjectConfig,\n projectGitCwd: string,\n branchName: string\n): string {\n const projectRoot = resolveProjectRootFromGitCwd(projectGitCwd);\n return resolveManagedWorktreePath(config, projectRoot, branchName);\n}\n\nasync function resolveExistingExpectedWorktreePath(\n config: ProjectConfig,\n projectGitCwd: string,\n branchName: string\n): Promise<string | null> {\n const candidate = getExpectedWorktreePath(config, projectGitCwd, branchName);\n return (await fs.pathExists(candidate)) ? candidate : null;\n}\n\nfunction buildManagedWorktreeCreateCommand(\n config: ProjectConfig,\n projectGitCwd: string,\n branchName: string\n): string {\n const projectRoot = resolveProjectRootFromGitCwd(projectGitCwd);\n const worktreePath = getExpectedWorktreePath(config, projectGitCwd, branchName);\n const worktreeParent = path.dirname(worktreePath);\n const envLinkCommand = buildManagedWorktreeEnvLinkCommand(projectRoot, worktreePath);\n return `mkdir -p \"${worktreeParent}\" && (git -C \"${projectRoot}\" worktree add \"${worktreePath}\" \"${branchName}\" || git -C \"${projectRoot}\" worktree add -b \"${branchName}\" \"${worktreePath}\") && ${envLinkCommand}`;\n}\n\nfunction resolveRemotePrMergeMeta(\n prRef: string | null,\n projectGitCwd: string\n): { headRefName: string | null; baseRefName: string | null } | null {\n if (!prRef) return null;\n const result = runProcess(\n 'gh',\n ['pr', 'view', prRef, '--json', 'headRefName,baseRefName'],\n projectGitCwd\n );\n if (result.code !== 0) {\n return null;\n }\n\n try {\n const parsed = JSON.parse(String(result.stdout || '{}')) as Record<string, unknown>;\n return {\n headRefName: sanitizeMetadataValue(String(parsed.headRefName || '')),\n baseRefName: sanitizeMetadataValue(String(parsed.baseRefName || '')),\n };\n } catch {\n return null;\n }\n}\n\nfunction localBranchExists(cwd: string, branchName: string | null): boolean {\n if (!branchName) return false;\n return runProcess(\n 'git',\n ['show-ref', '--verify', '--quiet', `refs/heads/${branchName}`],\n cwd\n ).code === 0;\n}\n\nfunction remoteBranchExists(cwd: string, branchName: string | null): boolean {\n if (!branchName) return false;\n return runProcess(\n 'git',\n ['show-ref', '--verify', '--quiet', `refs/remotes/origin/${branchName}`],\n cwd\n ).code === 0;\n}\n\nfunction resolvePostMergeCleanupState(\n config: ProjectConfig,\n feature: ResolvedFeature,\n tasks: ParsedTasks\n): PostMergeCleanupState {\n const projectRootGitCwd = resolveProjectRootGitCwd(config, feature);\n const prMeta = resolveRemotePrMergeMeta(tasks.prLink, projectRootGitCwd);\n const baseBranch = (prMeta?.baseRefName || 'main').trim() || 'main';\n const headBranch = (\n prMeta?.headRefName ||\n resolveExpectedBranch(feature, tasks)\n )?.trim() || null;\n const hasOriginRemote = runProcess(\n 'git',\n ['remote', 'get-url', 'origin'],\n projectRootGitCwd\n ).code === 0;\n if (hasOriginRemote) {\n runProcess('git', ['fetch', '--prune', 'origin'], projectRootGitCwd);\n }\n\n const currentBranch =\n runGitCapture(['branch', '--show-current'], projectRootGitCwd) ||\n runGitCapture(['rev-parse', '--abbrev-ref', 'HEAD'], projectRootGitCwd) ||\n '';\n const localBaseSha = runGitCapture(['rev-parse', baseBranch], projectRootGitCwd) || '';\n const remoteBaseSha =\n hasOriginRemote\n ? runGitCapture(['rev-parse', `origin/${baseBranch}`], projectRootGitCwd) || ''\n : '';\n const worktreePath =\n config.docsRepo === 'standalone' && headBranch\n ? resolveManagedWorktreePath(config, projectRootGitCwd, headBranch)\n : null;\n const managedWorktreeExists = !!worktreePath && fs.existsSync(worktreePath);\n const localFeatureBranchExists = localBranchExists(projectRootGitCwd, headBranch);\n const remoteFeatureBranchExists =\n hasOriginRemote && remoteBranchExists(projectRootGitCwd, headBranch);\n const localBaseCheckedOut = currentBranch === baseBranch;\n const baseSyncedWithOrigin =\n !hasOriginRemote ||\n (localBaseSha.length > 0 &&\n remoteBaseSha.length > 0 &&\n localBaseSha === remoteBaseSha);\n\n return {\n complete:\n localBaseCheckedOut &&\n baseSyncedWithOrigin &&\n !localFeatureBranchExists &&\n !remoteFeatureBranchExists &&\n !managedWorktreeExists,\n projectRootGitCwd,\n baseBranch,\n headBranch,\n worktreePath,\n hasOriginRemote,\n localBaseCheckedOut,\n baseSyncedWithOrigin,\n localFeatureBranchExists,\n remoteFeatureBranchExists,\n managedWorktreeExists,\n };\n}\n\nfunction buildPostMergeCleanupCommand(state: PostMergeCleanupState): string {\n const commandParts: string[] = [];\n if (state.hasOriginRemote) {\n commandParts.push(\n `git -C \"${state.projectRootGitCwd}\" fetch --prune origin`\n );\n }\n commandParts.push(\n `git -C \"${state.projectRootGitCwd}\" checkout \"${state.baseBranch}\"`\n );\n if (state.hasOriginRemote) {\n commandParts.push(\n `git -C \"${state.projectRootGitCwd}\" pull --ff-only origin \"${state.baseBranch}\"`\n );\n }\n if (state.worktreePath) {\n commandParts.push(\n `if [ -d \"${state.worktreePath}\" ]; then git -C \"${state.projectRootGitCwd}\" worktree remove \"${state.worktreePath}\"; fi`\n );\n }\n if (state.headBranch) {\n commandParts.push(\n `if git -C \"${state.projectRootGitCwd}\" show-ref --verify --quiet \"refs/heads/${state.headBranch}\"; then git -C \"${state.projectRootGitCwd}\" branch -D \"${state.headBranch}\"; fi`\n );\n if (state.hasOriginRemote) {\n commandParts.push(\n `if git -C \"${state.projectRootGitCwd}\" show-ref --verify --quiet \"refs/remotes/origin/${state.headBranch}\"; then git -C \"${state.projectRootGitCwd}\" push origin --delete \"${state.headBranch}\"; fi`\n );\n commandParts.push(\n `git -C \"${state.projectRootGitCwd}\" fetch --prune origin`\n );\n }\n }\n\n return commandParts.join(' && ');\n}\n\nfunction buildPostMergeCleanupSummary(state: PostMergeCleanupState): string {\n const remaining: string[] = [];\n if (!state.localBaseCheckedOut) {\n remaining.push(`check out ${state.baseBranch}`);\n }\n if (!state.baseSyncedWithOrigin) {\n remaining.push(`sync ${state.baseBranch} with origin/${state.baseBranch}`);\n }\n if (state.managedWorktreeExists) {\n remaining.push('remove the managed feature worktree');\n }\n if (state.localFeatureBranchExists) {\n remaining.push('delete the local feature branch');\n }\n if (state.remoteFeatureBranchExists) {\n remaining.push('delete the remote feature branch');\n }\n\n if (remaining.length === 0) {\n return 'Finish the post-merge cleanup before closing the feature.';\n }\n\n return `Finish the post-merge cleanup before closing the feature: ${remaining.join(', ')}.`;\n}\n\nfunction nextTodoTask(tasks: ParsedTasks): ParsedTasks['tasks'][number] | null {\n return tasks.tasks.find((task) => task.status === 'DOING') ||\n tasks.tasks.find((task) => task.status === 'TODO') ||\n null;\n}\n\nfunction allTasksDone(tasks: ParsedTasks): boolean {\n return tasks.tasks.length > 0 && tasks.tasks.every((task) => task.status === 'DONE');\n}\n\nfunction prePrSatisfied(tasks: ParsedTasks): boolean {\n return (\n tasks.prePrReviewStatus === 'done' &&\n !!tasks.prePrEvidence &&\n !!tasks.prePrDecision &&\n tasks.prePrDecisionOutcome === 'approve'\n );\n}\n\nfunction issueExistsRemotely(\n issueNumber: number | null,\n feature: ResolvedFeature\n): boolean {\n if (!issueNumber) return false;\n const result = runProcess(\n 'gh',\n ['issue', 'view', String(issueNumber), '--json', 'number'],\n feature.git.projectGitCwd\n );\n return result.code === 0;\n}\n\nfunction prExistsRemotely(prRef: string | null, feature: ResolvedFeature): boolean {\n if (!prRef) return false;\n const result = runProcess(\n 'gh',\n ['pr', 'view', prRef, '--json', 'url'],\n feature.git.projectGitCwd\n );\n return result.code === 0;\n}\n\nfunction buildAction(\n category: WorkflowStageAction['category'],\n summary: string,\n approvalRequired: boolean,\n command: string | null = null\n): WorkflowStageAction {\n return {\n category,\n summary,\n approvalRequired,\n command,\n };\n}\n\nfunction buildStageOption(\n label: string,\n reply: string,\n category: WorkflowStageOption['category'],\n summary: string,\n command: string | null = null\n): WorkflowStageOption {\n return {\n label,\n reply,\n category,\n summary,\n command,\n };\n}\n\nfunction normalizeApprovalToken(value: string | undefined): string {\n return (value ?? '').trim().toLowerCase();\n}\n\nfunction resolveActionApprovalRequired(\n config: ProjectConfig,\n category: WorkflowStageAction['category'],\n builtinRequiresUserCheck: boolean\n): boolean {\n const approval =\n config.approval?.mode === 'builtin'\n ? createDefaultApprovalConfig()\n : config.approval ?? createDefaultApprovalConfig();\n const mode = approval.mode ?? 'category';\n\n if (mode === 'steps') {\n const requiredSteps = new Set(\n (approval.requireCheckSteps ?? [])\n .map((value) => (typeof value === 'number' ? value : Number(value)))\n .filter((value) => Number.isFinite(value))\n );\n const legacyStep = LEGACY_STEP_BY_ACTION[category];\n return typeof legacyStep === 'number'\n ? requiredSteps.has(legacyStep)\n : builtinRequiresUserCheck;\n }\n\n const requiredCategories = new Set(\n (approval.requireCheckCategories ?? [])\n .map((value) => normalizeApprovalToken(value))\n .filter(Boolean)\n );\n const skippedCategories = new Set(\n (approval.skipCheckCategories ?? [])\n .map((value) => normalizeApprovalToken(value))\n .filter(Boolean)\n );\n const defaultPolicy = approval.default ?? createDefaultApprovalConfig().default ?? 'skip';\n const normalizedCategory = normalizeApprovalToken(category);\n const explicitlyRequired =\n requiredCategories.has('*') || requiredCategories.has(normalizedCategory);\n\n if (explicitlyRequired) return true;\n if (\n skippedCategories.has('*') ||\n skippedCategories.has(normalizedCategory)\n ) {\n return false;\n }\n if (defaultPolicy === 'require') return true;\n if (defaultPolicy === 'skip') return false;\n return builtinRequiresUserCheck;\n}\n\nfunction resolveRemotePrReviewState(\n prRef: string | null,\n feature: ResolvedFeature\n): WorkflowReviewState {\n if (!prRef) return 'unknown';\n const result = runProcess(\n 'gh',\n [\n 'pr',\n 'view',\n prRef,\n '--json',\n 'reviewDecision,state,mergedAt,mergeStateStatus,isDraft,headRefOid,latestReviews,comments,statusCheckRollup',\n ],\n feature.git.projectGitCwd\n );\n\n if (result.code !== 0) {\n return 'unknown';\n }\n\n try {\n const parsed = JSON.parse(String(result.stdout || '{}')) as Record<string, unknown>;\n const reviewDecision = String(parsed.reviewDecision || '')\n .trim()\n .toUpperCase();\n const state = String(parsed.state || '')\n .trim()\n .toUpperCase();\n const mergeStateStatus = String(parsed.mergeStateStatus || '')\n .trim()\n .toUpperCase();\n const isDraft = parsed.isDraft === true;\n const headRefOid = String(parsed.headRefOid || '').trim().toLowerCase();\n const mergedAt = typeof parsed.mergedAt === 'string'\n ? parsed.mergedAt.trim()\n : '';\n const codeRabbitThreadState = reviewDecision.length === 0\n ? resolveCodeRabbitReviewThreadsState(prRef, feature)\n : 'unknown';\n const codeRabbitCheckSucceeded = hasSuccessfulCodeRabbitStatusCheck(\n parsed.statusCheckRollup\n );\n\n if (state === 'MERGED' || mergedAt.length > 0) {\n return 'merged';\n }\n if (isDraft) {\n return 'draft';\n }\n if (reviewDecision === 'CHANGES_REQUESTED') {\n return 'changes_requested';\n }\n if (reviewDecision === 'APPROVED') {\n return mergeStateStatus === 'CLEAN' || mergeStateStatus === 'HAS_HOOKS'\n ? 'approved'\n : 'merge_blocked';\n }\n if (reviewDecision.length === 0 && codeRabbitThreadState === 'open') {\n return 'changes_requested';\n }\n if (reviewDecision.length === 0 && hasLatestHeadRateLimitSignal(parsed, headRefOid)) {\n return 'review_rate_limited';\n }\n if (\n reviewDecision.length === 0 &&\n hasStaleLatestCommitReviewSignal(parsed, headRefOid) &&\n !(codeRabbitThreadState === 'resolved' && codeRabbitCheckSucceeded)\n ) {\n return 'review_pending_latest_commit';\n }\n if (reviewDecision.length === 0 && hasCodeRabbitActionableReview(parsed.latestReviews)) {\n if (codeRabbitThreadState === 'resolved' && codeRabbitCheckSucceeded) {\n return mergeStateStatus === 'CLEAN' || mergeStateStatus === 'HAS_HOOKS'\n ? 'approved'\n : 'merge_blocked';\n }\n return 'changes_requested';\n }\n if (\n reviewDecision.length === 0 &&\n codeRabbitThreadState === 'resolved' &&\n codeRabbitCheckSucceeded\n ) {\n return mergeStateStatus === 'CLEAN' || mergeStateStatus === 'HAS_HOOKS'\n ? 'approved'\n : 'merge_blocked';\n }\n if (reviewDecision === 'REVIEW_REQUIRED' || reviewDecision.length === 0) {\n return 'waiting_review';\n }\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\nfunction resolveCurrentReviewState(\n tasks: ParsedTasks,\n prDraft: ParsedWorkflowDraft,\n remoteReviewState: WorkflowReviewState\n): WorkflowReviewState {\n if (remoteReviewState === 'merged') {\n return 'merged';\n }\n if (remoteReviewState === 'draft') {\n return 'draft';\n }\n if (remoteReviewState === 'merge_blocked') {\n return 'merge_blocked';\n }\n if (remoteReviewState === 'changes_requested') {\n return 'changes_requested';\n }\n if (remoteReviewState === 'review_rate_limited') {\n return 'review_rate_limited';\n }\n if (remoteReviewState === 'review_pending_latest_commit') {\n return 'review_pending_latest_commit';\n }\n if (remoteReviewState === 'waiting_review') {\n return 'waiting_review';\n }\n if (remoteReviewState === 'approved') {\n return 'approved';\n }\n if (remoteReviewState === 'unknown') {\n return 'unknown';\n }\n if (tasks.prStatus === 'approved' || prDraft.prStatus === 'approved') {\n return 'approved';\n }\n return 'unknown';\n}\n\nfunction buildCodeReviewActionOptions(\n reviewState: WorkflowReviewState\n): WorkflowStageOption[] {\n if (reviewState === 'merged') {\n return [\n buildStageOption(\n 'A',\n 'A',\n 'review_sync_approved',\n 'Sync the already-merged PR state into tasks.md and pr.md before closing the feature.'\n ),\n buildStageOption(\n 'B',\n 'B',\n 'hold',\n 'Stop here and leave the merged-state sync for later.'\n ),\n ];\n }\n\n if (reviewState === 'approved') {\n return [\n buildStageOption(\n 'A',\n 'A',\n 'review_sync_approved',\n 'Sync the approved PR review state into tasks.md and pr.md, then continue to the merge gate.'\n ),\n buildStageOption(\n 'B',\n 'B',\n 'hold',\n 'Hold the merge boundary for now and leave the PR open.'\n ),\n ];\n }\n\n if (reviewState === 'draft' || reviewState === 'merge_blocked') {\n return [\n buildStageOption(\n 'A',\n 'A',\n 'review_wait',\n 'Inspect the current PR state, resolve the draft/merge blocker, and sync the review fields before proceeding.'\n ),\n buildStageOption(\n 'B',\n 'B',\n 'hold',\n 'Stop here and keep the PR open until the blocker is resolved.'\n ),\n ];\n }\n\n if (reviewState === 'changes_requested') {\n return [\n buildStageOption(\n 'A',\n 'A',\n 'review_fix',\n 'Address the requested review changes, update review evidence/decision, and continue the feature.'\n ),\n buildStageOption(\n 'B',\n 'B',\n 'hold',\n 'Stop here and wait before taking another review-fix pass.'\n ),\n ];\n }\n\n if (reviewState === 'review_rate_limited') {\n return [\n buildStageOption(\n 'A',\n 'A',\n 'review_wait',\n 'Re-check the PR review state after the CodeRabbit rate limit window resets, then sync tasks.md when a fresh review arrives.'\n ),\n buildStageOption(\n 'B',\n 'B',\n 'hold',\n 'Stop here and wait for the review rate limit window to clear.'\n ),\n ];\n }\n\n if (reviewState === 'review_pending_latest_commit') {\n return [\n buildStageOption(\n 'A',\n 'A',\n 'review_wait',\n 'Re-check the PR review state after a reviewer processes the latest commit, then sync tasks.md when fresh review feedback arrives.'\n ),\n buildStageOption(\n 'B',\n 'B',\n 'hold',\n 'Stop here and wait for a fresh review on the latest commit.'\n ),\n ];\n }\n\n return [\n buildStageOption(\n 'A',\n 'A',\n 'review_wait',\n 'Check the PR review state again and sync tasks.md when reviewer feedback or approval arrives.'\n ),\n buildStageOption(\n 'B',\n 'B',\n 'hold',\n 'Stop here and wait for external reviewer feedback.'\n ),\n ];\n}\n\nfunction buildMergeActionOptions(\n command: string\n): WorkflowStageOption[] {\n return [\n buildStageOption(\n 'A',\n 'A OK',\n 'pr_merge',\n 'Merge the PR now and sync the merged state back into tasks.md.',\n command\n ),\n buildStageOption(\n 'B',\n 'B',\n 'hold',\n 'Keep the PR open and do not merge yet.'\n ),\n ];\n}\n\nfunction buildApprovalActionOptions(params: {\n approveSummary: string;\n holdSummary: string;\n remoteCommand?: string | null;\n}): WorkflowStageOption[] {\n const remoteCommand = params.remoteCommand?.trim() || null;\n if (remoteCommand && remoteCommand.includes('--confirm OK')) {\n return [\n buildStageOption(\n 'A',\n 'A OK',\n 'remote_execute',\n params.approveSummary,\n remoteCommand\n ),\n buildStageOption('B', 'B', 'hold', params.holdSummary),\n ];\n }\n\n return [\n buildStageOption('A', 'A', 'approve_continue', params.approveSummary),\n buildStageOption('B', 'B', 'request_changes', params.holdSummary),\n ];\n}\n\nfunction resolveFeatureSelectionError(\n selection: FeatureSelectionState\n): WorkflowStagePayload {\n const reasonCode =\n selection.status === 'no_features'\n ? 'NO_FEATURES'\n : 'FEATURE_SELECTION_REQUIRED';\n return {\n status: 'error',\n reasonCode,\n docsDir: selection.config.docsDir,\n featureRef: null,\n stage: null,\n nextAction: null,\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: null,\n };\n}\n\nexport async function collectWorkflowStage(\n cwd: string,\n selector?: string,\n component?: string\n): Promise<WorkflowStagePayload> {\n const config = await getConfig(cwd);\n if (!config) {\n return {\n status: 'error',\n reasonCode: 'CONFIG_NOT_FOUND',\n docsDir: null,\n featureRef: null,\n stage: null,\n nextAction: null,\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: null,\n };\n }\n\n const selection = await resolveFeatureSelection(cwd, selector, component);\n if (selection.status !== 'selected' || !selection.matchedFeature) {\n return resolveFeatureSelectionError(selection);\n }\n\n const feature = selection.matchedFeature;\n const requirements = resolveWorkflowRequirements(config);\n const taskCommitGatePolicy = resolveTaskCommitGatePolicy(config);\n const paths = getFeatureDocPaths(feature);\n const specContent = await readFileIfExists(path.join(config.docsDir, paths.specPath));\n const planContent = await readFileIfExists(path.join(config.docsDir, paths.planPath));\n const tasksContent = await readFileIfExists(path.join(config.docsDir, paths.tasksPath));\n const issueContent = await readFileIfExists(path.join(config.docsDir, paths.issuePath));\n const prContent = await readFileIfExists(path.join(config.docsDir, paths.prPath));\n\n const specStatus = parseApprovalStatus(\n extractFieldValue(specContent || '', ['Status', '상태']) || undefined\n );\n const planStatus = parseApprovalStatus(\n extractFieldValue(planContent || '', ['Status', '상태']) || undefined\n );\n const tasks = parseTasksDoc(tasksContent || '');\n const issueDraft = parseWorkflowDraftMetadataExtended(issueContent || '');\n const prDraft = parseWorkflowDraftMetadataExtended(prContent || '');\n const remoteReviewState = requirements.requireReview && tasks.prLink\n ? resolveRemotePrReviewState(tasks.prLink, feature)\n : 'unknown';\n const currentReviewState = resolveCurrentReviewState(\n tasks,\n prDraft,\n remoteReviewState\n );\n\n if (specStatus !== 'approved') {\n const isReviewStage = specStatus === 'review';\n const approvalRequired = isReviewStage\n ? resolveActionApprovalRequired(config, 'spec_approve', true)\n : false;\n const actionOptions = approvalRequired\n ? buildApprovalActionOptions({\n approveSummary: 'Approve spec.md and continue to the plan stage.',\n holdSummary: 'Request spec changes before continuing.',\n })\n : undefined;\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'spec',\n nextAction: buildAction(\n isReviewStage ? 'spec_approve' : 'spec_write',\n isReviewStage\n ? approvalRequired\n ? 'Get user approval and update spec.md status to Approved.'\n : 'Promote spec.md from Review to Approved and continue automatically.'\n : 'Write or refine spec.md until it is ready for approval.',\n approvalRequired\n ),\n approvalRequired,\n implementationAllowed: false,\n primaryActionLabel: actionOptions ? 'A' : undefined,\n actionOptions,\n blockedReasonCode: 'SPEC_NOT_APPROVED',\n };\n }\n\n if (planStatus !== 'approved') {\n const isReviewStage = planStatus === 'review';\n const approvalRequired = isReviewStage\n ? resolveActionApprovalRequired(config, 'plan_approve', true)\n : false;\n const actionOptions = approvalRequired\n ? buildApprovalActionOptions({\n approveSummary: 'Approve plan.md and continue to the tasks stage.',\n holdSummary: 'Request plan changes before continuing.',\n })\n : undefined;\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'plan',\n nextAction: buildAction(\n isReviewStage ? 'plan_approve' : 'plan_write',\n isReviewStage\n ? approvalRequired\n ? 'Get user approval and update plan.md status to Approved.'\n : 'Promote plan.md from Review to Approved and continue automatically.'\n : 'Write or refine plan.md until it is ready for approval.',\n approvalRequired\n ),\n approvalRequired,\n implementationAllowed: false,\n primaryActionLabel: actionOptions ? 'A' : undefined,\n actionOptions,\n blockedReasonCode: 'PLAN_NOT_APPROVED',\n };\n }\n\n if (tasks.tasks.length === 0 || tasks.docStatus !== 'approved') {\n const isReviewStage = tasks.docStatus === 'review';\n const approvalRequired = isReviewStage\n ? resolveActionApprovalRequired(config, 'tasks_approve', true)\n : false;\n const actionOptions = approvalRequired\n ? buildApprovalActionOptions({\n approveSummary: 'Approve tasks.md and continue to issue preparation.',\n holdSummary: 'Request task-list changes before continuing.',\n })\n : undefined;\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'tasks',\n nextAction: buildAction(\n isReviewStage ? 'tasks_approve' : 'tasks_write',\n isReviewStage\n ? approvalRequired\n ? 'Get user approval and update tasks.md Doc Status to Approved.'\n : 'Promote tasks.md Doc Status from Review to Approved and continue automatically.'\n : 'Add and refine tasks until tasks.md is execution-ready and Approved.',\n approvalRequired\n ),\n approvalRequired,\n implementationAllowed: false,\n primaryActionLabel: actionOptions ? 'A' : undefined,\n actionOptions,\n blockedReasonCode: 'TASKS_NOT_READY',\n };\n }\n\n if (requirements.requireIssue) {\n const issueReady = issueDraft.status === 'ready';\n const issueCreated =\n tasks.issueNumber !== null &&\n issueExistsRemotely(tasks.issueNumber, feature);\n if (!issueCreated || !issueReady) {\n const issueCreateApprovalRequired =\n issueReady && !issueCreated;\n const issueCreateCommand = `npx lee-spec-kit github issue ${buildFeatureArgs(feature)} --create --confirm OK`;\n const issueCreateOptions = issueCreateApprovalRequired\n ? buildApprovalActionOptions({\n approveSummary:\n 'Create the GitHub issue now and sync the issue number back into tasks.md.',\n holdSummary:\n 'Keep the issue in Ready state but do not create it yet.',\n remoteCommand: issueCreateCommand,\n })\n : undefined;\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'issue',\n nextAction: issueReady && !issueCreated\n ? buildAction(\n 'issue_create',\n 'Create the GitHub issue from issue.md and sync the issue number into tasks.md.',\n issueCreateApprovalRequired,\n issueCreateCommand\n )\n : buildAction(\n 'issue_prepare',\n 'Prepare issue.md and set its Status to Ready before issue creation.',\n false\n ),\n approvalRequired: issueCreateApprovalRequired,\n implementationAllowed: false,\n primaryActionLabel: issueCreateOptions ? 'A' : undefined,\n actionOptions: issueCreateOptions,\n blockedReasonCode: 'ISSUE_NOT_CREATED',\n };\n }\n }\n\n let effectiveProjectGitCwd = feature.git.projectGitCwd;\n if (requirements.requireWorktree) {\n const expectedBranch = resolveExpectedBranch(feature, tasks);\n if (expectedBranch) {\n const existingWorktreePath = await resolveExistingExpectedWorktreePath(\n config,\n feature.git.projectGitCwd,\n expectedBranch\n );\n if (existingWorktreePath) {\n effectiveProjectGitCwd = existingWorktreePath;\n }\n }\n }\n\n if (requirements.requireBranch && !allTasksDone(tasks)) {\n const expectedBranch = resolveExpectedBranch(feature, tasks);\n const currentBranch =\n runGitCapture(['branch', '--show-current'], effectiveProjectGitCwd) ||\n runGitCapture(['rev-parse', '--abbrev-ref', 'HEAD'], effectiveProjectGitCwd) ||\n null;\n if (expectedBranch && currentBranch !== expectedBranch) {\n const branchCommand = requirements.requireWorktree\n ? buildManagedWorktreeCreateCommand(config, feature.git.projectGitCwd, expectedBranch)\n : `git checkout -b ${expectedBranch}`;\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'branch',\n nextAction: buildAction(\n 'branch_create',\n requirements.requireWorktree\n ? `Create or reuse the managed worktree for ${expectedBranch} before implementation starts.`\n : `Switch the project repo to ${expectedBranch} before implementation starts.`,\n false,\n branchCommand\n ),\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: 'BRANCH_NOT_READY',\n };\n }\n }\n\n const activeTaskOpen = hasOpenTask(tasks);\n const lastDoneTask = getLastDoneTask(tasks);\n const docsDirty = hasUncommittedChanges(feature.git.docsGitCwd);\n const projectDirty = hasUncommittedChanges(effectiveProjectGitCwd);\n const pendingDoneTransitions = countPendingDoneTransitions(feature) || 0;\n const taskCommitCheckpointRequired =\n !activeTaskOpen &&\n !!lastDoneTask &&\n (projectDirty || pendingDoneTransitions > 0);\n\n if (taskCommitCheckpointRequired) {\n const pendingReason =\n pendingDoneTransitions > 1\n ? `working tree currently contains ${pendingDoneTransitions} uncommitted DONE transitions`\n : null;\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'task_commit',\n nextAction: buildAction(\n 'task_commit',\n buildTaskCommitSummary({\n feature,\n tasks,\n effectiveProjectGitCwd,\n docsDirty,\n projectDirty,\n gateFailureReason: pendingReason,\n }),\n false\n ),\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: 'TASK_COMMIT_REQUIRED',\n };\n }\n\n const committedTaskGate =\n taskCommitGatePolicy !== 'off' && lastDoneTask\n ? checkTaskCommitGate(feature, effectiveProjectGitCwd, lastDoneTask)\n : { pass: true };\n\n if (!allTasksDone(tasks)) {\n const currentTask = nextTodoTask(tasks);\n if (taskCommitGatePolicy === 'strict' && !committedTaskGate.pass) {\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'task_commit',\n nextAction: buildAction(\n 'task_commit',\n buildTaskCommitSummary({\n feature,\n tasks,\n effectiveProjectGitCwd,\n docsDirty,\n projectDirty,\n gateFailureReason: describeTaskCommitGateFailure(committedTaskGate),\n }),\n false\n ),\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: 'TASK_COMMIT_REQUIRED',\n };\n }\n\n const commitWarning =\n taskCommitGatePolicy === 'warn' && !committedTaskGate.pass\n ? `\\nTask commit boundary warning: ${describeTaskCommitGateFailure(committedTaskGate)}`\n : '';\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'implementation',\n nextAction: buildAction(\n 'task_execute',\n currentTask\n ? `Continue the next implementation task: ${currentTask.title}${commitWarning}`\n : 'Continue the active implementation task.',\n false\n ),\n approvalRequired: false,\n implementationAllowed: true,\n blockedReasonCode: null,\n };\n }\n\n if (\n !tasks.completion.allTasksChecked ||\n !tasks.completion.testsChecked ||\n !tasks.completion.finalOutcomeChecked\n ) {\n if (taskCommitGatePolicy === 'strict' && !committedTaskGate.pass) {\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'task_commit',\n nextAction: buildAction(\n 'task_commit',\n buildTaskCommitSummary({\n feature,\n tasks,\n effectiveProjectGitCwd,\n docsDirty,\n projectDirty,\n gateFailureReason: describeTaskCommitGateFailure(committedTaskGate),\n }),\n false\n ),\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: 'TASK_COMMIT_REQUIRED',\n };\n }\n\n const approvalRequired = resolveActionApprovalRequired(\n config,\n 'implementation_approve',\n true\n );\n const actionOptions = approvalRequired\n ? buildApprovalActionOptions({\n approveSummary:\n 'Approve the completed implementation and continue to the pre-PR or PR preparation stage.',\n holdSummary:\n 'Request implementation changes before the workflow continues.',\n })\n : undefined;\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'implementation_approve',\n nextAction: buildAction(\n 'implementation_approve',\n 'Share the completed implementation, get user approval, and record the completion checkpoint in tasks.md.',\n approvalRequired\n ),\n approvalRequired,\n implementationAllowed: false,\n primaryActionLabel: actionOptions ? 'A' : undefined,\n actionOptions,\n blockedReasonCode: 'IMPLEMENTATION_APPROVAL_REQUIRED',\n };\n }\n\n if (requirements.prePrReviewEnabled && !prePrSatisfied(tasks)) {\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'pre_pr_review',\n nextAction: buildAction(\n 'pre_pr_review',\n 'Run and record the Pre-PR review until tasks.md shows an approve decision with evidence.',\n false\n ),\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: 'PRE_PR_REVIEW_NOT_APPROVED',\n };\n }\n\n if (requirements.requirePr) {\n const prReady = prDraft.status === 'ready';\n const prCreated =\n !!tasks.prLink &&\n prExistsRemotely(tasks.prLink, feature);\n if (!prCreated || !prReady) {\n const prCreateApprovalRequired =\n prReady && !prCreated;\n const prCreateCommand = `npx lee-spec-kit github pr ${buildFeatureArgs(feature)} --create --confirm OK`;\n const prCreateOptions = prCreateApprovalRequired\n ? buildApprovalActionOptions({\n approveSummary:\n 'Create the GitHub PR now and sync the PR metadata back into tasks.md.',\n holdSummary:\n 'Keep the PR in Ready state but do not create it yet.',\n remoteCommand: prCreateCommand,\n })\n : undefined;\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'pr',\n nextAction: prReady && !prCreated\n ? buildAction(\n 'pr_create',\n 'Create the GitHub PR from pr.md and sync the PR metadata into tasks.md.',\n prCreateApprovalRequired,\n prCreateCommand\n )\n : buildAction(\n 'pr_prepare',\n 'Prepare pr.md and set its Status to Ready before PR creation.',\n false\n ),\n approvalRequired: prCreateApprovalRequired,\n implementationAllowed: false,\n primaryActionLabel: prCreateOptions ? 'A' : undefined,\n actionOptions: prCreateOptions,\n blockedReasonCode: 'PR_NOT_CREATED',\n };\n }\n }\n\n const reviewApprovedInDocs =\n tasks.prStatus === 'approved' && prDraft.prStatus === 'approved';\n\n if (requirements.requireReview && currentReviewState === 'merged' && reviewApprovedInDocs) {\n const cleanupState = resolvePostMergeCleanupState(config, feature, tasks);\n if (!cleanupState.complete) {\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'cleanup',\n nextAction: buildAction(\n 'merge_cleanup',\n buildPostMergeCleanupSummary(cleanupState),\n false,\n buildPostMergeCleanupCommand(cleanupState)\n ),\n approvalRequired: false,\n implementationAllowed: false,\n reviewState: 'merged',\n blockedReasonCode: 'POST_MERGE_CLEANUP_REQUIRED',\n };\n }\n\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'done',\n nextAction: null,\n approvalRequired: false,\n implementationAllowed: false,\n reviewState: 'merged',\n primaryActionLabel: null,\n actionOptions: [],\n blockedReasonCode: null,\n };\n }\n\n if (requirements.requireReview && (!reviewApprovedInDocs || currentReviewState !== 'approved')) {\n const reviewFixAllowed = currentReviewState === 'changes_requested';\n const reviewApprovalRequired = !reviewFixAllowed;\n const reviewActionOptions = reviewApprovalRequired\n ? buildCodeReviewActionOptions(currentReviewState)\n : undefined;\n const reviewSummary =\n currentReviewState === 'approved'\n ? 'Record the approved PR review state in tasks.md and pr.md before proceeding to merge.'\n : currentReviewState === 'merged'\n ? 'Sync the already-merged PR state into tasks.md and pr.md before marking the workflow as complete.'\n : currentReviewState === 'changes_requested'\n ? 'Address the requested review changes and update the PR review evidence/decision before continuing.'\n : currentReviewState === 'review_pending_latest_commit'\n ? 'Wait for a fresh review on the latest PR commit before taking the next review action.'\n : currentReviewState === 'review_rate_limited'\n ? 'Wait for the current CodeRabbit review rate limit to clear, then re-check the latest PR review state before continuing.'\n : currentReviewState === 'draft'\n ? 'Resolve the draft PR state before continuing to the merge boundary.'\n : currentReviewState === 'merge_blocked'\n ? 'Resolve the current PR merge blocker before continuing to merge.'\n : 'Wait for PR review or inspect the current review state before taking the next review action.';\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'code_review',\n nextAction: buildAction(\n 'code_review',\n reviewSummary,\n reviewApprovalRequired\n ),\n approvalRequired: reviewApprovalRequired,\n implementationAllowed: reviewFixAllowed,\n reviewState: currentReviewState,\n primaryActionLabel: reviewActionOptions ? 'A' : undefined,\n actionOptions: reviewActionOptions,\n blockedReasonCode: 'PR_REVIEW_NOT_APPROVED',\n };\n }\n\n if (requirements.requireMerge) {\n const mergeCommand =\n `npx lee-spec-kit github pr ${buildFeatureArgs(feature)} --merge --confirm OK`;\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'merge',\n nextAction: buildAction(\n 'pr_merge',\n 'Merge the PR and sync the merged state back into tasks.md.',\n true,\n mergeCommand\n ),\n approvalRequired: true,\n implementationAllowed: false,\n reviewState: 'approved',\n primaryActionLabel: 'A',\n actionOptions: buildMergeActionOptions(mergeCommand),\n blockedReasonCode: null,\n };\n }\n\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_STAGE_RESOLVED',\n docsDir: config.docsDir,\n featureRef: buildFeatureRef(feature),\n stage: 'done',\n nextAction: null,\n approvalRequired: false,\n implementationAllowed: false,\n blockedReasonCode: null,\n };\n}\n\nfunction hasLatestHeadRateLimitSignal(\n parsed: Record<string, unknown>,\n headRefOid: string\n): boolean {\n const latestRateLimitCommentAt = findLatestCodeRabbitRateLimitCommentAt(\n parsed.comments,\n headRefOid\n );\n if (!latestRateLimitCommentAt) {\n return false;\n }\n\n const latestReviewAt = findLatestCodeRabbitReviewAt(parsed.latestReviews);\n return !latestReviewAt || latestReviewAt <= latestRateLimitCommentAt;\n}\n\nfunction hasStaleLatestCommitReviewSignal(\n parsed: Record<string, unknown>,\n headRefOid: string\n): boolean {\n if (!headRefOid) {\n return false;\n }\n\n const latestReviewHead = findLatestCodeRabbitReviewedHead(parsed.latestReviews);\n if (!latestReviewHead) {\n return false;\n }\n\n return !matchesCommitReference(headRefOid, latestReviewHead);\n}\n\nfunction resolveCodeRabbitReviewThreadsState(\n prRef: string,\n feature: ResolvedFeature\n): CodeRabbitReviewThreadsState {\n const coordinates = parseGithubPullRequestRef(prRef);\n if (!coordinates) {\n return 'unknown';\n }\n\n const result = runProcess(\n 'gh',\n [\n 'api',\n 'graphql',\n '-f',\n `owner=${coordinates.owner}`,\n '-f',\n `name=${coordinates.name}`,\n '-F',\n `number=${coordinates.number}`,\n '-f',\n 'query=query($owner:String!, $name:String!, $number:Int!) { repository(owner:$owner, name:$name) { pullRequest(number:$number) { headRefOid reviewThreads(first:100) { nodes { isResolved isOutdated comments(first:20) { nodes { author { login } body } } } } } } }',\n ],\n feature.git.projectGitCwd\n );\n\n if (result.code !== 0) {\n return 'unknown';\n }\n\n try {\n const parsed = JSON.parse(String(result.stdout || '{}')) as Record<string, unknown>;\n const nodes = extractNestedArray(parsed, [\n 'data',\n 'repository',\n 'pullRequest',\n 'reviewThreads',\n 'nodes',\n ]);\n if (!nodes) {\n return 'unknown';\n }\n\n const codeRabbitThreads = nodes.filter(isCodeRabbitReviewThread);\n if (codeRabbitThreads.length === 0) {\n return 'none';\n }\n\n return codeRabbitThreads.some((thread) => !isReviewThreadResolved(thread))\n ? 'open'\n : 'resolved';\n } catch {\n return 'unknown';\n }\n}\n\nfunction parseGithubPullRequestRef(\n prRef: string | null\n): { owner: string; name: string; number: number } | null {\n const value = prRef?.trim();\n if (!value) {\n return null;\n }\n\n const urlMatch = value.match(\n /^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+)\\/pull\\/(\\d+)(?:[/?#].*)?$/i\n );\n if (!urlMatch?.[1] || !urlMatch[2] || !urlMatch[3]) {\n return null;\n }\n\n return {\n owner: urlMatch[1],\n name: urlMatch[2],\n number: Number(urlMatch[3]),\n };\n}\n\nfunction hasSuccessfulCodeRabbitStatusCheck(statusChecksValue: unknown): boolean {\n if (!Array.isArray(statusChecksValue)) {\n return false;\n }\n\n return statusChecksValue.some((entry) => {\n if (!entry || typeof entry !== 'object') return false;\n const record = entry as Record<string, unknown>;\n const label = [\n record.context,\n record.name,\n extractNestedString(record, ['app', 'name']),\n extractNestedString(record, ['checkSuite', 'app', 'name']),\n ]\n .filter((value) => typeof value === 'string' && value.trim().length > 0)\n .join(' ')\n .toLowerCase();\n if (!label.includes('coderabbit')) return false;\n\n const state = String(record.state || record.conclusion || '')\n .trim()\n .toUpperCase();\n return state === 'SUCCESS';\n });\n}\n\nfunction isCodeRabbitReviewThread(threadValue: unknown): boolean {\n const comments = extractNestedArray(threadValue, ['comments', 'nodes']);\n if (!comments) {\n return false;\n }\n\n return comments.some((comment) =>\n extractNestedString(comment, ['author', 'login'])\n .toLowerCase()\n .startsWith('coderabbitai')\n );\n}\n\nfunction isReviewThreadResolved(threadValue: unknown): boolean {\n if (!threadValue || typeof threadValue !== 'object') {\n return false;\n }\n const record = threadValue as Record<string, unknown>;\n return record.isResolved === true || record.isOutdated === true;\n}\n\nfunction hasCodeRabbitActionableReview(reviewsValue: unknown): boolean {\n if (!Array.isArray(reviewsValue)) {\n return false;\n }\n\n return reviewsValue.some((entry) => {\n if (!entry || typeof entry !== 'object') return false;\n const authorLogin = extractNestedString(entry, ['author', 'login']).toLowerCase();\n if (authorLogin !== 'coderabbitai') return false;\n\n const state = String((entry as Record<string, unknown>).state || '')\n .trim()\n .toUpperCase();\n if (state === 'CHANGES_REQUESTED') return true;\n if (state !== 'COMMENTED') return false;\n\n const body = String((entry as Record<string, unknown>).body || '');\n const actionableMatch = body.match(/Actionable comments posted:\\s*(\\d+)/i);\n return actionableMatch ? Number(actionableMatch[1]) > 0 : false;\n });\n}\n\nfunction extractNestedArray(\n value: unknown,\n pathSegments: string[]\n): unknown[] | null {\n let current: unknown = value;\n for (const segment of pathSegments) {\n if (!current || typeof current !== 'object') {\n return null;\n }\n current = (current as Record<string, unknown>)[segment];\n }\n return Array.isArray(current) ? current : null;\n}\n\nfunction findLatestCodeRabbitRateLimitCommentAt(\n commentsValue: unknown,\n headRefOid: string\n): string | null {\n if (!Array.isArray(commentsValue)) {\n return null;\n }\n\n let latest: string | null = null;\n for (const entry of commentsValue) {\n if (!entry || typeof entry !== 'object') continue;\n const authorLogin = extractNestedString(entry, ['author', 'login']).toLowerCase();\n if (authorLogin !== 'coderabbitai') continue;\n const body = String((entry as Record<string, unknown>).body || '');\n if (!isCodeRabbitRateLimitBody(body, headRefOid)) continue;\n const createdAt = String((entry as Record<string, unknown>).createdAt || '').trim();\n if (!createdAt) continue;\n if (!latest || createdAt > latest) {\n latest = createdAt;\n }\n }\n\n return latest;\n}\n\nfunction findLatestCodeRabbitReviewAt(reviewsValue: unknown): string | null {\n if (!Array.isArray(reviewsValue)) {\n return null;\n }\n\n let latest: string | null = null;\n for (const entry of reviewsValue) {\n if (!entry || typeof entry !== 'object') continue;\n const authorLogin = extractNestedString(entry, ['author', 'login']).toLowerCase();\n if (authorLogin !== 'coderabbitai') continue;\n const submittedAt = String((entry as Record<string, unknown>).submittedAt || '').trim();\n if (!submittedAt) continue;\n if (!latest || submittedAt > latest) {\n latest = submittedAt;\n }\n }\n\n return latest;\n}\n\nfunction findLatestCodeRabbitReviewedHead(reviewsValue: unknown): string | null {\n if (!Array.isArray(reviewsValue)) {\n return null;\n }\n\n let latestReview: { submittedAt: string; reviewedHead: string | null } | null = null;\n for (const entry of reviewsValue) {\n if (!entry || typeof entry !== 'object') continue;\n const authorLogin = extractNestedString(entry, ['author', 'login']).toLowerCase();\n if (authorLogin !== 'coderabbitai') continue;\n const submittedAt = String((entry as Record<string, unknown>).submittedAt || '').trim();\n if (!submittedAt) continue;\n const body = String((entry as Record<string, unknown>).body || '');\n const reviewedHead = extractReviewedHeadFromReviewBody(body);\n if (!latestReview || submittedAt > latestReview.submittedAt) {\n latestReview = { submittedAt, reviewedHead };\n }\n }\n\n return latestReview?.reviewedHead ?? null;\n}\n\nfunction isCodeRabbitRateLimitBody(body: string, headRefOid: string): boolean {\n const normalized = body.toLowerCase();\n if (\n !normalized.includes('rate limited by coderabbit.ai') &&\n !normalized.includes('rate limit exceeded')\n ) {\n return false;\n }\n\n if (!headRefOid) {\n return true;\n }\n\n const shortHead = headRefOid.slice(0, 7);\n return normalized.includes(headRefOid) || normalized.includes(shortHead);\n}\n\nfunction extractReviewedHeadFromReviewBody(body: string): string | null {\n const match = body.match(/between\\s+[0-9a-f]{7,40}\\s+and\\s+([0-9a-f]{7,40})/i);\n if (!match) {\n return null;\n }\n return match[1].trim().toLowerCase();\n}\n\nfunction matchesCommitReference(headRefOid: string, reviewedHead: string): boolean {\n const normalizedHead = headRefOid.trim().toLowerCase();\n const normalizedReviewedHead = reviewedHead.trim().toLowerCase();\n return (\n normalizedHead === normalizedReviewedHead ||\n normalizedHead.startsWith(normalizedReviewedHead) ||\n normalizedReviewedHead.startsWith(normalizedHead)\n );\n}\n\nfunction extractNestedString(\n value: unknown,\n pathSegments: string[]\n): string {\n let current: unknown = value;\n for (const segment of pathSegments) {\n if (!current || typeof current !== 'object') {\n return '';\n }\n current = (current as Record<string, unknown>)[segment];\n }\n return typeof current === 'string' ? current.trim() : '';\n}\n","import { Command } from 'commander';\nimport { toCliError } from '../utils/cli-error.js';\nimport { collectWorkflowStage } from '../utils/workflow-stage.js';\n\ninterface WorkflowStageOptions {\n json?: boolean;\n component?: string;\n}\n\nexport function workflowStageCommand(program: Command): void {\n program\n .command('workflow-stage [feature-name]')\n .description('Resolve the current high-level workflow stage for the active feature')\n .option('--json', 'Output JSON for agents and hooks')\n .option('--component <component>', 'Component name for multi projects')\n .action(async (featureName: string | undefined, options: WorkflowStageOptions) => {\n try {\n const payload = await collectWorkflowStage(\n process.cwd(),\n featureName,\n options.component\n );\n if (options.json) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n if (payload.status !== 'ok') {\n console.log(`${payload.status}: ${payload.reasonCode}`);\n process.exitCode = 1;\n return;\n }\n console.log(`stage: ${payload.stage}`);\n if (payload.nextAction) {\n console.log(`next: ${payload.nextAction.category}`);\n }\n } catch (error) {\n const cliError = toCliError(error);\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n status: 'error',\n reasonCode: cliError.code,\n error: cliError.message,\n },\n null,\n 2\n )\n );\n process.exitCode = 1;\n return;\n }\n process.stderr.write(`[${cliError.code}] ${cliError.message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import { Command } from 'commander';\nimport fs from 'fs-extra';\nimport path from 'node:path';\nimport { getConfig } from '../utils/config.js';\nimport { runGitCapture } from '../utils/git-run.js';\nimport { createCliError, toCliError } from '../utils/cli-error.js';\nimport {\n type ResolvedFeature,\n resolveFeatureSelection,\n} from '../utils/feature-resolver.js';\nimport {\n resolveConfiguredStandaloneWorkspaceRoot,\n resolveGitTopLevelOrNull,\n resolveStandaloneProjectRoots,\n} from '../utils/standalone-workspace.js';\nimport { getTemplatesDir } from '../utils/paths.js';\nimport { applyLocalWorkflowTemplateToContent } from '../utils/local-workflow-template.js';\nimport { applyReplacements } from '../utils/template.js';\nimport type { ProjectConfig } from '../config/types.js';\n\ninterface WorkflowAuditOptions {\n json?: boolean;\n}\n\ninterface ChangedPathRecord {\n repoRoot: string;\n absolutePath: string;\n relativeToRepo: string;\n relativeToDocs: string | null;\n}\n\ninterface CodeRootResolution {\n codeRoots: string[];\n errorReasonCode?:\n | 'STANDALONE_WORKSPACE_ROOT_REQUIRED'\n | 'STANDALONE_PROJECT_ROOT_UNRESOLVED';\n}\n\ninterface WorkflowAuditPayload {\n status: 'ok' | 'needs_sync' | 'skipped' | 'error';\n reasonCode:\n | 'WORKFLOW_IN_SYNC'\n | 'CODE_WITHOUT_DOCS_SYNC'\n | 'ACTIVE_FEATURE_SCOPE_UNCLEAR'\n | 'STANDALONE_WORKSPACE_ROOT_REQUIRED'\n | 'STANDALONE_PROJECT_ROOT_UNRESOLVED'\n | 'NO_GIT_REPOSITORY'\n | 'CONFIG_NOT_FOUND'\n | 'UNEXPECTED_ERROR';\n docsDir: string | null;\n activeFeatureRef: string | null;\n changedCodePaths: string[];\n changedFeatureDocPaths: string[];\n latestCodeChangeAt: string | null;\n latestFeatureDocSyncAt: string | null;\n}\n\nconst FEATURE_DOC_FILE_PATTERN =\n /^features\\/(?:[^/]+\\/)?F\\d{3,}[^/]*\\/(spec|plan|tasks|decisions|issue|pr)\\.md$/i;\nconst CODE_FILE_PATTERN =\n /(^|\\/)(Dockerfile|Makefile)$|\\.(c|cc|cjs|cpp|cs|css|cts|go|h|hpp|html|java|js|json|jsx|kt|mjs|mts|php|py|rb|rs|scss|sh|sql|swift|ts|tsx|vue|yaml|yml|zsh)$/i;\nconst WORKFLOW_SYNC_MARKER_PATTERN =\n /<!--\\s*lee-spec-kit:workflow-sync\\s+([0-9]{4}-[0-9]{2}-[0-9]{2}T[^ ]+?)\\s*-->/gi;\n\nexport function workflowAuditCommand(program: Command): void {\n program\n .command('workflow-audit')\n .description('Validate whether code changes have been synchronized back into feature docs')\n .option('--json', 'Output JSON for hooks and agents')\n .action(async (options: WorkflowAuditOptions) => {\n try {\n const payload = await collectWorkflowAudit(process.cwd());\n if (options.json) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n console.log(`${payload.status}: ${payload.reasonCode}`);\n } catch (error) {\n const cliError = toCliError(error);\n const payload: WorkflowAuditPayload = {\n status: 'error',\n reasonCode: 'UNEXPECTED_ERROR',\n docsDir: null,\n activeFeatureRef: null,\n changedCodePaths: [],\n changedFeatureDocPaths: [],\n latestCodeChangeAt: null,\n latestFeatureDocSyncAt: null,\n };\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n ...payload,\n error: cliError.message,\n },\n null,\n 2\n )\n );\n return;\n }\n process.stderr.write(`[${cliError.code}] ${cliError.message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n\nasync function collectWorkflowAudit(cwd: string): Promise<WorkflowAuditPayload> {\n const config = await getConfig(cwd);\n if (!config) {\n throw createCliError('CONFIG_NOT_FOUND', 'Config file not found. Run `init` first.');\n }\n\n const activeFeature = await resolveActiveFeature(cwd);\n const activeFeatureRef = activeFeature?.folderName ?? null;\n const codeRootResolution = resolveCodeRepoRoots(cwd, config, activeFeature);\n const codeRoots = codeRootResolution.codeRoots;\n\n if (codeRootResolution.errorReasonCode) {\n return {\n status: 'error',\n reasonCode: codeRootResolution.errorReasonCode,\n docsDir: config.docsDir,\n activeFeatureRef,\n changedCodePaths: [],\n changedFeatureDocPaths: [],\n latestCodeChangeAt: null,\n latestFeatureDocSyncAt: null,\n };\n }\n\n if (codeRoots.length === 0) {\n return {\n status: 'skipped',\n reasonCode: 'NO_GIT_REPOSITORY',\n docsDir: config.docsDir,\n activeFeatureRef,\n changedCodePaths: [],\n changedFeatureDocPaths: [],\n latestCodeChangeAt: null,\n latestFeatureDocSyncAt: null,\n };\n }\n\n const changedCodePaths = collectChangedRecords(codeRoots, config.docsDir).filter(\n isCodeChange\n );\n const outOfScopeStandaloneCodePaths = collectOutOfScopeStandaloneCodeChanges(\n config,\n activeFeature,\n codeRoots\n );\n const combinedChangedCodePaths = [\n ...changedCodePaths,\n ...outOfScopeStandaloneCodePaths,\n ];\n const docsRepoRoot = resolveDocsRepoRoot(config.docsDir);\n const changedFeatureDocPaths = docsRepoRoot\n ? collectChangedRecords([docsRepoRoot], config.docsDir).filter(isFeatureDocChange)\n : [];\n const meaningfulChangedFeatureDocPaths = await filterMeaningfulFeatureDocRecords(\n config,\n activeFeature,\n changedFeatureDocPaths\n );\n const scopedFeatureDocPaths = activeFeatureRef\n ? meaningfulChangedFeatureDocPaths.filter(\n (record) => featureRefFromDocPath(record.relativeToDocs) === activeFeatureRef\n )\n : [];\n const allMeaningfulFeatureDocPaths = meaningfulChangedFeatureDocPaths;\n\n const latestCodeChangeAt = await getLatestMtimeIso(combinedChangedCodePaths);\n const latestFeatureDocSyncAt = await getLatestWorkflowSyncMarkerAt(activeFeature);\n\n if (combinedChangedCodePaths.length === 0) {\n return {\n status: 'ok',\n reasonCode: 'WORKFLOW_IN_SYNC',\n docsDir: config.docsDir,\n activeFeatureRef,\n changedCodePaths: [],\n changedFeatureDocPaths: allMeaningfulFeatureDocPaths.map((item) => item.relativeToRepo),\n latestCodeChangeAt: null,\n latestFeatureDocSyncAt,\n };\n }\n\n if (!activeFeatureRef) {\n return {\n status: 'needs_sync',\n reasonCode: 'ACTIVE_FEATURE_SCOPE_UNCLEAR',\n docsDir: config.docsDir,\n activeFeatureRef: null,\n changedCodePaths: combinedChangedCodePaths.map((item) => item.relativeToRepo),\n changedFeatureDocPaths: allMeaningfulFeatureDocPaths.map((item) => item.relativeToRepo),\n latestCodeChangeAt,\n latestFeatureDocSyncAt,\n };\n }\n\n if (outOfScopeStandaloneCodePaths.length > 0) {\n return {\n status: 'needs_sync',\n reasonCode: 'ACTIVE_FEATURE_SCOPE_UNCLEAR',\n docsDir: config.docsDir,\n activeFeatureRef,\n changedCodePaths: combinedChangedCodePaths.map((item) => item.relativeToRepo),\n changedFeatureDocPaths: allMeaningfulFeatureDocPaths.map((item) => item.relativeToRepo),\n latestCodeChangeAt,\n latestFeatureDocSyncAt,\n };\n }\n\n const needsSync =\n scopedFeatureDocPaths.length === 0 ||\n !latestFeatureDocSyncAt ||\n !latestCodeChangeAt ||\n latestCodeChangeAt > latestFeatureDocSyncAt;\n\n return {\n status: needsSync ? 'needs_sync' : 'ok',\n reasonCode: needsSync ? 'CODE_WITHOUT_DOCS_SYNC' : 'WORKFLOW_IN_SYNC',\n docsDir: config.docsDir,\n activeFeatureRef,\n changedCodePaths: combinedChangedCodePaths.map((item) => item.relativeToRepo),\n changedFeatureDocPaths: scopedFeatureDocPaths.map((item) => item.relativeToRepo),\n latestCodeChangeAt,\n latestFeatureDocSyncAt,\n };\n}\n\nfunction parsePorcelainPaths(porcelain: string): string[] {\n if (!porcelain.trim()) return [];\n const deduped = new Set<string>();\n\n for (const rawLine of porcelain.split('\\n')) {\n const line = rawLine.trimEnd();\n if (!line) continue;\n const payload = line.length > 3 ? line.slice(3) : '';\n if (!payload) continue;\n\n if (payload.includes(' -> ')) {\n const [fromPath, toPath] = payload.split(' -> ');\n if (fromPath) deduped.add(fromPath.trim());\n if (toPath) deduped.add(toPath.trim());\n continue;\n }\n\n deduped.add(payload.trim());\n }\n\n return [...deduped];\n}\n\nfunction toChangedPathRecord(\n repoRoot: string,\n docsDir: string,\n relativeToRepo: string\n): ChangedPathRecord {\n const absolutePath = path.resolve(repoRoot, relativeToRepo);\n const relativeToDocsCandidate = normalizeSlashes(\n path.relative(docsDir, absolutePath)\n );\n const relativeToDocs =\n relativeToDocsCandidate === '' ||\n relativeToDocsCandidate.startsWith('..')\n ? null\n : relativeToDocsCandidate;\n\n return {\n repoRoot,\n absolutePath,\n relativeToRepo: normalizeSlashes(relativeToRepo),\n relativeToDocs,\n };\n}\n\nfunction collectChangedRecords(\n repoRoots: string[],\n docsDir: string\n): ChangedPathRecord[] {\n const records: ChangedPathRecord[] = [];\n for (const repoRoot of repoRoots) {\n const porcelain =\n runGitCapture(['status', '--porcelain=v1', '--untracked-files=all'], repoRoot) || '';\n const changedRelativePaths = parsePorcelainPaths(porcelain);\n for (const relativeToRepo of changedRelativePaths) {\n records.push(toChangedPathRecord(repoRoot, docsDir, relativeToRepo));\n }\n }\n return records;\n}\n\nfunction isFeatureDocChange(record: ChangedPathRecord): boolean {\n return !!record.relativeToDocs && FEATURE_DOC_FILE_PATTERN.test(record.relativeToDocs);\n}\n\nfunction featureRefFromDocPath(relativeToDocs: string | null): string | null {\n if (!relativeToDocs) return null;\n const match = relativeToDocs.match(/^features\\/(?:[^/]+\\/)?(F\\d{3,}[^/]+)\\//i);\n return match?.[1] ?? null;\n}\n\nfunction isCodeChange(record: ChangedPathRecord): boolean {\n if (record.relativeToDocs) return false;\n const normalized = record.relativeToRepo;\n if (\n normalized.startsWith('.git/') ||\n normalized.startsWith('.codex/') ||\n normalized === 'AGENTS.md'\n ) {\n return false;\n }\n return CODE_FILE_PATTERN.test(path.basename(normalized)) || CODE_FILE_PATTERN.test(normalized);\n}\n\nasync function getLatestMtimeIso(\n records: ChangedPathRecord[]\n): Promise<string | null> {\n let latest = 0;\n\n for (const record of records) {\n if (!(await fs.pathExists(record.absolutePath))) continue;\n const stat = await fs.stat(record.absolutePath);\n const value = stat.mtimeMs;\n if (value > latest) latest = value;\n }\n\n return latest > 0 ? new Date(latest).toISOString() : null;\n}\n\nasync function getLatestWorkflowSyncMarkerAt(\n activeFeature: ResolvedFeature | null\n): Promise<string | null> {\n if (!activeFeature) return null;\n const canonicalFiles = ['spec.md', 'plan.md', 'tasks.md', 'decisions.md', 'issue.md', 'pr.md'];\n let latest = 0;\n const nowMs = Date.now();\n\n for (const fileName of canonicalFiles) {\n const absolutePath = path.join(activeFeature.path, fileName);\n if (!(await fs.pathExists(absolutePath))) continue;\n const stat = await fs.stat(absolutePath);\n const content = await fs.readFile(absolutePath, 'utf-8');\n const matchedTimes = extractWorkflowSyncMarkerTimes(\n content,\n nowMs,\n stat.mtimeMs\n );\n for (const value of matchedTimes) {\n if (value > latest) latest = value;\n }\n }\n\n return latest > 0 ? new Date(latest).toISOString() : null;\n}\n\nfunction extractWorkflowSyncMarkerTimes(\n content: string,\n nowMs: number,\n fileMtimeMs: number\n): number[] {\n const values: number[] = [];\n for (const match of content.matchAll(WORKFLOW_SYNC_MARKER_PATTERN)) {\n const rawTimestamp = String(match[1] || '').trim();\n if (!rawTimestamp) continue;\n const parsed = Date.parse(rawTimestamp);\n if (\n Number.isFinite(parsed) &&\n parsed <= nowMs &&\n parsed <= fileMtimeMs\n ) {\n values.push(parsed);\n }\n }\n return values;\n}\n\nasync function filterMeaningfulFeatureDocRecords(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n activeFeature: ResolvedFeature | null,\n records: ChangedPathRecord[]\n): Promise<ChangedPathRecord[]> {\n const filtered: ChangedPathRecord[] = [];\n for (const record of records) {\n if (await isMeaningfulFeatureDocRecord(config, activeFeature, record)) {\n filtered.push(record);\n }\n }\n return filtered;\n}\n\nasync function isMeaningfulFeatureDocRecord(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n activeFeature: ResolvedFeature | null,\n record: ChangedPathRecord\n): Promise<boolean> {\n if (!activeFeature) return true;\n if (isTrackedGitPath(record)) return true;\n\n const fileName = path.basename(record.absolutePath);\n const expectedContent = await renderExpectedInitialFeatureDocContent(\n config,\n activeFeature,\n fileName\n );\n if (expectedContent === null) {\n return true;\n }\n\n if (!(await fs.pathExists(record.absolutePath))) {\n return true;\n }\n const actualContent = await fs.readFile(record.absolutePath, 'utf-8');\n return normalizeFeatureDocContent(actualContent) !== normalizeFeatureDocContent(expectedContent);\n}\n\nfunction isTrackedGitPath(record: ChangedPathRecord): boolean {\n return !!runGitCapture(\n ['ls-files', '--error-unmatch', '--', record.relativeToRepo],\n record.repoRoot\n );\n}\n\nasync function renderExpectedInitialFeatureDocContent(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n activeFeature: ResolvedFeature,\n fileName: string\n): Promise<string | null> {\n const templatePath = path.join(\n getTemplatesDir(),\n config.lang,\n 'common',\n 'features',\n 'feature-base',\n fileName\n );\n if (!(await fs.pathExists(templatePath))) {\n return null;\n }\n\n const rawTemplate = await fs.readFile(templatePath, 'utf-8');\n const rendered = renderFeatureDocTemplate(config, activeFeature, rawTemplate);\n if (config.workflow?.mode === 'local') {\n return applyLocalWorkflowTemplateToContent(fileName, rendered, config.lang);\n }\n return rendered;\n}\n\nfunction renderFeatureDocTemplate(\n config: Pick<ProjectConfig, 'projectName' | 'projectType' | 'lang'>,\n activeFeature: ResolvedFeature,\n template: string\n): string {\n const featureName = activeFeature.slug;\n const featureId = activeFeature.id || activeFeature.folderName.split('-')[0] || '';\n const idNumber = featureId.replace(/^F/i, '');\n const component = config.projectType === 'multi' ? activeFeature.type : '';\n const repoName =\n config.projectType === 'multi'\n ? `${config.projectName || '{{projectName}}'}-${component}`\n : (config.projectName || '{{projectName}}');\n\n const replacements: Record<string, string> = {\n '{{projectName}}': config.projectName || '{{projectName}}',\n '{기능명}': featureName,\n '{번호}': idNumber,\n '{결정 제목}': `${featureName} 결정`,\n '{YYYY-MM-DD}': '__DATE__',\n '{component}': component || '',\n '{{projectName}}-{component}': repoName,\n '{be|fe}': component || '',\n '{이슈번호}': '',\n '{{description}}': '',\n '{feature-name}': featureName,\n '{number}': idNumber,\n '{Decision Title}': `${featureName} design decision`,\n '{issue-number}': '',\n '{{projectName}}-{be|fe}': repoName,\n };\n\n let rendered = applyReplacements(template, replacements);\n\n if (config.lang === 'en') {\n rendered = applyReplacements(rendered, {\n '기능 ID': 'Feature ID',\n '기능명': 'Feature Name',\n '대상 레포': 'Target Repo',\n '이슈 번호': 'Issue Number',\n '작성일': 'Created',\n '상태': 'Status',\n });\n }\n\n return rendered;\n}\n\nfunction normalizeFeatureDocContent(content: string): string {\n return content.replace(/\\r\\n/g, '\\n').replace(/\\b\\d{4}-\\d{2}-\\d{2}\\b/g, '__DATE__');\n}\n\nfunction resolveDocsRepoRoot(docsDir: string): string | null {\n return runGitCapture(['rev-parse', '--show-toplevel'], docsDir) || null;\n}\n\nfunction resolveCodeRepoRoots(\n cwd: string,\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n activeFeature: ResolvedFeature | null\n): CodeRootResolution {\n if (config.docsRepo !== 'standalone') {\n const repoRoot = runGitCapture(['rev-parse', '--show-toplevel'], cwd) || null;\n return { codeRoots: repoRoot ? [repoRoot] : [] };\n }\n\n if (!resolveConfiguredStandaloneWorkspaceRoot(config)) {\n return {\n codeRoots: [],\n errorReasonCode: 'STANDALONE_WORKSPACE_ROOT_REQUIRED',\n };\n }\n\n const featureGitCwd = activeFeature?.git.projectGitCwd;\n if (featureGitCwd) {\n const repoRoot = resolveGitTopLevelOrNull(featureGitCwd);\n return repoRoot\n ? { codeRoots: [repoRoot] }\n : {\n codeRoots: [],\n errorReasonCode: 'STANDALONE_PROJECT_ROOT_UNRESOLVED',\n };\n }\n\n const component =\n activeFeature?.type && activeFeature.type !== 'single'\n ? activeFeature.type\n : undefined;\n const resolvedRoots = resolveStandaloneProjectRoots(config, component);\n if (resolvedRoots.length === 0) {\n return {\n codeRoots: [],\n errorReasonCode: 'STANDALONE_PROJECT_ROOT_UNRESOLVED',\n };\n }\n\n const gitRoots = resolvedRoots\n .map((root) => resolveGitTopLevelOrNull(root))\n if (gitRoots.some((root) => !root)) {\n return {\n codeRoots: [],\n errorReasonCode: 'STANDALONE_PROJECT_ROOT_UNRESOLVED',\n };\n }\n\n return { codeRoots: [...new Set(gitRoots)] as string[] };\n}\n\nfunction collectOutOfScopeStandaloneCodeChanges(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n activeFeature: ResolvedFeature | null,\n scopedCodeRoots: string[]\n): ChangedPathRecord[] {\n if (config.docsRepo !== 'standalone' || !activeFeature) {\n return [];\n }\n\n const normalizedScopedRoots = new Set(scopedCodeRoots.map((root) => path.resolve(root)));\n const extraRoots = resolveStandaloneProjectRoots(config)\n .map((root) => resolveGitTopLevelOrNull(root))\n .filter((root): root is string => !!root)\n .map((root) => path.resolve(root))\n .filter((root) => !normalizedScopedRoots.has(root));\n\n if (extraRoots.length === 0) {\n return [];\n }\n\n return collectChangedRecords([...new Set(extraRoots)], config.docsDir).filter(\n isCodeChange\n );\n}\n\nasync function resolveActiveFeature(cwd: string): Promise<ResolvedFeature | null> {\n const selection = await resolveFeatureSelection(cwd);\n return selection.matchedFeature;\n}\n\nfunction normalizeSlashes(value: string): string {\n return value.replace(/\\\\/g, '/');\n}\n","import path from 'path';\nimport fs from 'fs-extra';\n\nexport interface AllowedDocsEntriesConfig {\n dirs?: string[];\n files?: string[];\n}\n\nexport interface UnmanagedDocsEntry {\n name: string;\n kind: 'dir' | 'file';\n absPath: string;\n relPath: string;\n}\n\nexport const DEFAULT_MANAGED_DOC_DIRS = [\n 'agents',\n 'designs',\n 'features',\n 'ideas',\n 'prd',\n 'scripts',\n] as const;\n\nexport const DEFAULT_MANAGED_DOC_FILES = [\n 'AGENTS.md',\n 'README.md',\n '.lee-spec-kit.json',\n '.gitignore',\n] as const;\n\nconst DOC_LIKE_FILE_EXTENSIONS = new Set([\n '.md',\n '.mdx',\n '.txt',\n '.rst',\n '.adoc',\n]);\n\nfunction normalizeEntryName(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction toAllowedSet(values: readonly string[], extras?: string[]): Set<string> {\n return new Set(\n [...values, ...(extras || [])]\n .map((entry) => normalizeEntryName(entry))\n .filter(Boolean)\n );\n}\n\nfunction isDocLikeFile(name: string): boolean {\n return DOC_LIKE_FILE_EXTENSIONS.has(path.extname(name).toLowerCase());\n}\n\nexport async function collectUnmanagedDocsEntries(\n docsDir: string,\n allowed?: AllowedDocsEntriesConfig\n): Promise<UnmanagedDocsEntry[]> {\n const allowedDirs = toAllowedSet(DEFAULT_MANAGED_DOC_DIRS, allowed?.dirs);\n const allowedFiles = toAllowedSet(DEFAULT_MANAGED_DOC_FILES, allowed?.files);\n const entries = await fs.readdir(docsDir, { withFileTypes: true });\n const unmanaged: UnmanagedDocsEntry[] = [];\n\n for (const entry of entries) {\n const name = entry.name || '';\n if (!name) continue;\n\n if (entry.isDirectory()) {\n if (name.startsWith('.')) continue;\n if (allowedDirs.has(normalizeEntryName(name))) continue;\n unmanaged.push({\n name,\n kind: 'dir',\n absPath: path.join(docsDir, name),\n relPath: `docs/${name}`,\n });\n continue;\n }\n\n if (!entry.isFile()) continue;\n if (allowedFiles.has(normalizeEntryName(name))) continue;\n if (!isDocLikeFile(name)) continue;\n unmanaged.push({\n name,\n kind: 'file',\n absPath: path.join(docsDir, name),\n relPath: `docs/${name}`,\n });\n }\n\n return unmanaged.sort((a, b) => a.relPath.localeCompare(b.relPath));\n}\n","const PROJECT_COMMIT_PREFIX_PATTERN =\n /^(feat|fix|refactor|test|chore)\\(#(\\d+)\\):\\s+\\S.+$/i;\nconst DOCS_COMMIT_PREFIX_PATTERN = /^docs\\(#(\\d+)\\):\\s+\\S.+$/i;\n\nexport function matchesProjectCommitConvention(\n message: string | undefined,\n issueNumber: number\n): boolean {\n const normalized = String(message || '').trim();\n if (!normalized) return false;\n const match = normalized.match(PROJECT_COMMIT_PREFIX_PATTERN);\n if (!match) return false;\n return Number(match[2]) === issueNumber;\n}\n\nexport function matchesDocsCommitConvention(\n message: string | undefined,\n issueNumber: number\n): boolean {\n const normalized = String(message || '').trim();\n if (!normalized) return false;\n const match = normalized.match(DOCS_COMMIT_PREFIX_PATTERN);\n if (!match) return false;\n return Number(match[1]) === issueNumber;\n}\n","import { Command } from 'commander';\nimport path from 'node:path';\nimport { getConfig } from '../utils/config.js';\nimport { runGitCapture } from '../utils/git-run.js';\nimport { createCliError, toCliError } from '../utils/cli-error.js';\nimport {\n resolveStandaloneManagedWorktreeRoot,\n resolveStandaloneProjectRoots,\n} from '../utils/standalone-workspace.js';\nimport { resolveFeatureSelection } from '../utils/feature-resolver.js';\nimport {\n DEFAULT_MANAGED_DOC_DIRS,\n DEFAULT_MANAGED_DOC_FILES,\n type AllowedDocsEntriesConfig,\n} from '../utils/unmanaged-docs.js';\nimport {\n matchesDocsCommitConvention,\n matchesProjectCommitConvention,\n} from '../utils/commit-conventions.js';\n\ninterface CommitAuditOptions {\n json?: boolean;\n gitRoot?: string;\n message?: string;\n}\n\ntype CommitAuditReasonCode =\n | 'COMMIT_ALLOWED'\n | 'UNSUPPORTED_GIT_TARGET'\n | 'UNMANAGED_DOCS_COMMIT'\n | 'NON_CANONICAL_FEATURE_DOC_COMMIT'\n | 'CANONICAL_FEATURE_DOC_DELETION'\n | 'DOCS_COMMIT_POLICY_VIOLATION'\n | 'COMMIT_MESSAGE_POLICY_VIOLATION'\n | 'NO_GIT_REPOSITORY'\n | 'CONFIG_NOT_FOUND'\n | 'UNEXPECTED_ERROR';\n\ninterface CommitAuditViolation {\n path: string;\n kind:\n | 'unmanaged_docs_entry'\n | 'non_canonical_feature_doc'\n | 'canonical_feature_doc_deletion'\n | 'unsupported_git_target'\n | 'commit_message_policy';\n detail: string;\n}\n\ninterface StagedPathEntry {\n path: string;\n status: string;\n role: 'path' | 'source' | 'target';\n}\n\ninterface CommitAuditPayload {\n status: 'ok' | 'blocked' | 'skipped' | 'error';\n reasonCode: CommitAuditReasonCode;\n docsDir: string | null;\n stagedPaths: string[];\n blockedPaths: string[];\n violations: CommitAuditViolation[];\n}\n\nconst CANONICAL_FEATURE_DOC_PATTERN =\n /^features\\/(?:[^/]+\\/)?F\\d{3,}[^/]*\\/(spec|plan|tasks|decisions|issue|pr)\\.md$/i;\nconst FEATURE_DOC_CANDIDATE_PATTERN =\n /^features\\/(?:[^/]+\\/)?F\\d{3,}[^/]*\\/(.+)$/i;\n\nexport function commitAuditCommand(program: Command): void {\n program\n .command('commit-audit')\n .description('Validate staged docs paths before commit')\n .option('--json', 'Output JSON for hooks and agents')\n .option('--git-root <path>', 'Override the git root used for staged-path inspection')\n .option('--message <message>', 'Validate a commit subject against the current workflow convention')\n .action(async (options: CommitAuditOptions) => {\n try {\n const payload = await collectCommitAudit(\n process.cwd(),\n options.gitRoot,\n options.message\n );\n if (options.json) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n console.log(`${payload.status}: ${payload.reasonCode}`);\n } catch (error) {\n const cliError = toCliError(error);\n const payload: CommitAuditPayload = {\n status: 'error',\n reasonCode: cliError.code === 'CONFIG_NOT_FOUND'\n ? 'CONFIG_NOT_FOUND'\n : 'UNEXPECTED_ERROR',\n docsDir: null,\n stagedPaths: [],\n blockedPaths: [],\n violations: [],\n };\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n ...payload,\n error: cliError.message,\n },\n null,\n 2\n )\n );\n return;\n }\n process.stderr.write(`[${cliError.code}] ${cliError.message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n\nasync function collectCommitAudit(\n cwd: string,\n gitRootOverride?: string,\n commitMessage?: string\n): Promise<CommitAuditPayload> {\n const config = await getConfig(cwd);\n if (!config) {\n throw createCliError('CONFIG_NOT_FOUND', 'Config file not found. Run `init` first.');\n }\n\n const overrideRoot = gitRootOverride\n ? path.resolve(cwd, gitRootOverride)\n : null;\n const repoRoot =\n (overrideRoot\n ? runGitCapture(['rev-parse', '--show-toplevel'], overrideRoot)\n : runGitCapture(['rev-parse', '--show-toplevel'], cwd)) || null;\n if (!repoRoot) {\n return {\n status: 'skipped',\n reasonCode: 'NO_GIT_REPOSITORY',\n docsDir: config.docsDir,\n stagedPaths: [],\n blockedPaths: [],\n violations: [],\n };\n }\n\n const stagedOutput =\n runGitCapture(['diff', '--cached', '--name-status', '--diff-filter=ACMRD'], repoRoot) || '';\n const stagedEntries = parseStagedPaths(stagedOutput);\n const stagedPaths = [...new Set(stagedEntries.map((entry) => entry.path))];\n const targetRepoViolation = collectUnsupportedTargetRepoViolation(\n config,\n cwd,\n repoRoot\n );\n if (targetRepoViolation) {\n return {\n status: 'blocked',\n reasonCode: 'UNSUPPORTED_GIT_TARGET',\n docsDir: config.docsDir,\n stagedPaths,\n blockedPaths: [targetRepoViolation.path],\n violations: [targetRepoViolation],\n };\n }\n const violations = collectCommitViolations(\n repoRoot,\n config.docsDir,\n stagedEntries,\n config.allowedDocsEntries\n );\n const commitMessageViolation = await collectCommitMessageViolation(\n cwd,\n config,\n repoRoot,\n stagedEntries,\n commitMessage\n );\n if (commitMessageViolation) {\n violations.push(commitMessageViolation);\n }\n\n if (violations.length === 0) {\n return {\n status: 'ok',\n reasonCode: 'COMMIT_ALLOWED',\n docsDir: config.docsDir,\n stagedPaths,\n blockedPaths: [],\n violations: [],\n };\n }\n\n return {\n status: 'blocked',\n reasonCode: resolveReasonCode(violations),\n docsDir: config.docsDir,\n stagedPaths,\n blockedPaths: [...new Set(violations.map((entry) => entry.path))].sort(),\n violations,\n };\n}\n\nfunction collectUnsupportedTargetRepoViolation(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n cwd: string,\n repoRoot: string\n): CommitAuditViolation | null {\n const allowedRepoRoots = collectAllowedCommitRepoRoots(config, cwd);\n const normalizedRepoRoot = path.resolve(repoRoot);\n if (allowedRepoRoots.has(normalizedRepoRoot)) {\n return null;\n }\n return {\n path: normalizeSlashes(normalizedRepoRoot),\n kind: 'unsupported_git_target',\n detail:\n 'Commit target repo is outside the current lee-spec-kit project topology. Re-run the commit from the active workspace or target repo root instead.',\n };\n}\n\nfunction collectAllowedCommitRepoRoots(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n cwd: string\n): Set<string> {\n const allowed = new Set<string>();\n const docsRepoRoot = runGitCapture(['rev-parse', '--show-toplevel'], config.docsDir);\n if (docsRepoRoot) {\n allowed.add(path.resolve(docsRepoRoot));\n }\n\n if (config.docsRepo === 'standalone') {\n const scopedProjectRoots = resolveStandaloneProjectRoots(config);\n for (const projectRoot of scopedProjectRoots) {\n const projectRepoRoot = runGitCapture(['rev-parse', '--show-toplevel'], projectRoot);\n if (projectRepoRoot) {\n allowed.add(path.resolve(projectRepoRoot));\n }\n for (const worktreeRepoRoot of collectManagedWorktreeRepoRoots(config, projectRoot)) {\n allowed.add(path.resolve(worktreeRepoRoot));\n }\n }\n return allowed;\n }\n\n const cwdRepoRoot = runGitCapture(['rev-parse', '--show-toplevel'], cwd);\n if (cwdRepoRoot) {\n allowed.add(path.resolve(cwdRepoRoot));\n }\n return allowed;\n}\n\nfunction collectManagedWorktreeRepoRoots(\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n projectRoot: string\n): string[] {\n const managedRoot = resolveStandaloneManagedWorktreeRoot(config, projectRoot);\n if (!managedRoot) {\n return [];\n }\n\n const output = runGitCapture(['worktree', 'list', '--porcelain'], projectRoot) || '';\n const roots = new Set<string>();\n\n for (const rawLine of output.split('\\n')) {\n const line = rawLine.trim();\n if (!line.startsWith('worktree ')) continue;\n const worktreePath = path.resolve(line.slice('worktree '.length).trim());\n if (isSameOrWithin(path.resolve(managedRoot), worktreePath)) {\n roots.add(worktreePath);\n }\n }\n\n return [...roots];\n}\n\nfunction isSameOrWithin(parentDir: string, candidateDir: string): boolean {\n const resolvedParent = path.resolve(parentDir);\n const resolvedCandidate = path.resolve(candidateDir);\n return (\n resolvedParent === resolvedCandidate ||\n resolvedCandidate.startsWith(`${resolvedParent}${path.sep}`)\n );\n}\n\nfunction parseStagedPaths(output: string): StagedPathEntry[] {\n const staged = new Map<string, string>();\n\n for (const rawLine of output.split('\\n')) {\n const line = rawLine.trim();\n if (!line) continue;\n const parts = line.split('\\t').map((entry) => entry.trim()).filter(Boolean);\n if (parts.length < 2) continue;\n\n const status = parts[0];\n if (/^[RC]/i.test(status) && parts.length >= 3) {\n staged.set(`source:${normalizeSlashes(parts[1])}`, `${status}:source`);\n staged.set(`target:${normalizeSlashes(parts[2])}`, `${status}:target`);\n continue;\n }\n\n staged.set(`path:${normalizeSlashes(parts[1])}`, `${status}:path`);\n }\n\n return [...staged.entries()].map(([encodedPath, encodedStatus]) => {\n const [role, path] = encodedPath.split(':', 2);\n const [status, entryRole] = encodedStatus.split(':', 2);\n return {\n path,\n status,\n role: (entryRole || role || 'path') as StagedPathEntry['role'],\n };\n });\n}\n\nfunction collectCommitViolations(\n repoRoot: string,\n docsDir: string,\n stagedEntries: StagedPathEntry[],\n allowed?: AllowedDocsEntriesConfig\n): CommitAuditViolation[] {\n const allowedDirs = toAllowedSet(DEFAULT_MANAGED_DOC_DIRS, allowed?.dirs);\n const allowedFiles = toAllowedSet(DEFAULT_MANAGED_DOC_FILES, allowed?.files);\n const violations = new Map<string, CommitAuditViolation>();\n\n for (const stagedEntry of stagedEntries) {\n const stagedPath = stagedEntry.path;\n const absolutePath = path.resolve(repoRoot, stagedPath);\n const relativeToDocs = normalizeSlashes(path.relative(docsDir, absolutePath));\n if (\n !relativeToDocs ||\n relativeToDocs === '' ||\n relativeToDocs.startsWith('..')\n ) {\n continue;\n }\n\n const segments = relativeToDocs.split('/');\n const topLevel = segments[0]?.trim();\n if (!topLevel) continue;\n\n if (\n (/^D/i.test(stagedEntry.status) ||\n (/^R/i.test(stagedEntry.status) && stagedEntry.role === 'source')) &&\n CANONICAL_FEATURE_DOC_PATTERN.test(relativeToDocs)\n ) {\n violations.set(stagedPath, {\n path: stagedPath,\n kind: 'canonical_feature_doc_deletion',\n detail:\n 'Deleting canonical feature docs requires restoring the file or moving the change into canonical replacements first.',\n });\n continue;\n }\n\n if (segments.length === 1) {\n if (!allowedFiles.has(normalizeEntryName(topLevel))) {\n violations.set(stagedPath, {\n path: stagedPath,\n kind: 'unmanaged_docs_entry',\n detail: `Top-level docs file is outside the canonical surface: docs/${topLevel}`,\n });\n }\n continue;\n }\n\n if (!allowedDirs.has(normalizeEntryName(topLevel))) {\n violations.set(stagedPath, {\n path: stagedPath,\n kind: 'unmanaged_docs_entry',\n detail: `Top-level docs directory is outside the canonical surface: docs/${topLevel}`,\n });\n continue;\n }\n\n if (\n topLevel === 'features' &&\n FEATURE_DOC_CANDIDATE_PATTERN.test(relativeToDocs) &&\n !CANONICAL_FEATURE_DOC_PATTERN.test(relativeToDocs)\n ) {\n violations.set(stagedPath, {\n path: stagedPath,\n kind: 'non_canonical_feature_doc',\n detail:\n 'Feature-local files must use the canonical file names only: spec.md, plan.md, tasks.md, decisions.md, issue.md, pr.md',\n });\n }\n }\n\n return [...violations.values()].sort((a, b) => a.path.localeCompare(b.path));\n}\n\nfunction resolveReasonCode(violations: CommitAuditViolation[]): CommitAuditReasonCode {\n const kinds = new Set(violations.map((entry) => entry.kind));\n if (kinds.size > 1) return 'DOCS_COMMIT_POLICY_VIOLATION';\n if (kinds.has('commit_message_policy')) {\n return 'COMMIT_MESSAGE_POLICY_VIOLATION';\n }\n if (kinds.has('unsupported_git_target')) return 'UNSUPPORTED_GIT_TARGET';\n if (kinds.has('unmanaged_docs_entry')) return 'UNMANAGED_DOCS_COMMIT';\n if (kinds.has('canonical_feature_doc_deletion')) {\n return 'CANONICAL_FEATURE_DOC_DELETION';\n }\n return 'NON_CANONICAL_FEATURE_DOC_COMMIT';\n}\n\nasync function collectCommitMessageViolation(\n cwd: string,\n config: NonNullable<Awaited<ReturnType<typeof getConfig>>>,\n repoRoot: string,\n stagedEntries: StagedPathEntry[],\n commitMessage?: string\n): Promise<CommitAuditViolation | null> {\n const normalizedMessage = String(commitMessage || '').trim();\n if (!normalizedMessage) {\n return null;\n }\n\n const selection = await resolveFeatureSelection(cwd);\n if (selection.status !== 'selected' || !selection.matchedFeature?.issueNumber) {\n return null;\n }\n\n const issueNumber = selection.matchedFeature.issueNumber;\n const docsRepoRoot = runGitCapture(['rev-parse', '--show-toplevel'], config.docsDir);\n const normalizedRepoRoot = path.resolve(repoRoot);\n const normalizedDocsRepoRoot = docsRepoRoot ? path.resolve(docsRepoRoot) : null;\n const docsOnlyCommit =\n stagedEntries.length > 0 &&\n stagedEntries.every((entry) => {\n const absolutePath = path.resolve(repoRoot, entry.path);\n const relativeToDocs = normalizeSlashes(path.relative(config.docsDir, absolutePath));\n return !!relativeToDocs && relativeToDocs !== '' && !relativeToDocs.startsWith('..');\n });\n const isDocsCommit =\n !!normalizedDocsRepoRoot &&\n normalizedDocsRepoRoot === normalizedRepoRoot &&\n (config.docsRepo === 'standalone' || docsOnlyCommit);\n const valid = isDocsCommit\n ? matchesDocsCommitConvention(normalizedMessage, issueNumber)\n : matchesProjectCommitConvention(normalizedMessage, issueNumber);\n if (valid) {\n return null;\n }\n\n const expected = isDocsCommit\n ? `docs(#${issueNumber}): ...`\n : `type(#${issueNumber}): ... (feat/fix/refactor/test/chore)`;\n return {\n path: '(commit message)',\n kind: 'commit_message_policy',\n detail: `Commit subject must follow the issue-scoped convention for this feature. Expected ${expected}, received \"${normalizedMessage}\".`,\n };\n}\n\nfunction normalizeEntryName(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction toAllowedSet(values: readonly string[], extras?: string[]): Set<string> {\n return new Set(\n [...values, ...(extras || [])]\n .map((entry) => normalizeEntryName(entry))\n .filter(Boolean)\n );\n}\n\nfunction normalizeSlashes(value: string): string {\n return value.replace(/\\\\/g, '/');\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, type Command } from 'commander';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport { initCommand } from './commands/init.js';\nimport { featureCommand } from './commands/feature.js';\nimport { ideaCommand } from './commands/idea.js';\nimport { updateCommand } from './commands/update.js';\nimport { configCommand } from './commands/config.js';\nimport { githubCommand } from './commands/github.js';\nimport { docsCommand } from './commands/docs.js';\nimport { detectCommand } from './commands/detect.js';\nimport { integrationsCommand } from './commands/integrations.js';\nimport { workflowStageCommand } from './commands/workflow-stage.js';\nimport { workflowAuditCommand } from './commands/workflow-audit.js';\nimport { commitAuditCommand } from './commands/commit-audit.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\nfunction configureRootCommandSurface(): void {\n const groupedCommands = new Map<string, string>([\n ['init', 'Docs Schema Commands:'],\n ['idea', 'Docs Schema Commands:'],\n ['feature', 'Docs Schema Commands:'],\n ['docs', 'Workflow Policy Commands:'],\n ['detect', 'Workflow Policy Commands:'],\n ['github', 'Workflow Policy Commands:'],\n ['workflow-stage', 'Workflow Policy Commands:'],\n ['integrations', 'Codex Integration Commands:'],\n ['commit-audit', 'Codex Integration Commands:'],\n ['workflow-audit', 'Codex Integration Commands:'],\n ]);\n\n for (const command of program.commands) {\n const helpGroup = groupedCommands.get(command.name());\n if (helpGroup) {\n command.helpGroup(helpGroup);\n continue;\n }\n (command as Command & { _hidden?: boolean })._hidden = true;\n }\n}\n\nconst cliVersion = getCliVersion();\n\nprogram\n .name('lee-spec-kit')\n .description('Document-centered harness engineering toolkit for AI agent development')\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);\nideaCommand(program);\nfeatureCommand(program);\nupdateCommand(program);\nconfigCommand(program);\ngithubCommand(program);\ndocsCommand(program);\ndetectCommand(program);\nworkflowStageCommand(program);\nintegrationsCommand(program);\nworkflowAuditCommand(program);\ncommitAuditCommand(program);\n\nconfigureRootCommandSurface();\n\nawait program.parseAsync();\n"]}