{"version":3,"sources":["../../src/commands/init.ts"],"names":["PROMPT_FILE_NAME","getInitMessage","projectId","promptFilePath","chalk","CONFIG_FILE_NAME_JSON","updateGitignore","cwd","gitignorePath","path","GITIGNORE_FILE_NAME","entry","GITIGNORE_COMMENT","STATE_DIRECTORY_NAME","fs","content","logger","error","isEnoentError","getErrorMessage","initCommand","config","findConfig","isNewProject","getProjectId","createConfig","stateDir","getStateDirectory","promptsDir","systemPromptPath","relativePromptPath","promptFileExists","systemPrompt","getSystemPrompt"],"mappings":"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","file":"init.cjs","sourcesContent":["import { promises as fs } from 'fs';\nimport path from 'path';\nimport { findConfig, createConfig, getProjectId, getStateDirectory } from '../core/config';\nimport { logger, getErrorMessage, isEnoentError } from '../utils/logger';\nimport {\n  STATE_DIRECTORY_NAME,\n  GITIGNORE_FILE_NAME,\n  GITIGNORE_COMMENT,\n  CONFIG_FILE_NAME_JSON,\n} from '../utils/constants';\nimport chalk from 'chalk';\nimport { getSystemPrompt } from '../core/prompt-generator';\n\nconst PROMPT_FILE_NAME = 'system-prompt.md';\n\nconst getInitMessage = (projectId: string, promptFilePath: string): string => `\n${chalk.green('✅ relaycode has been initialized for this project.')}\n\nConfiguration file created: ${chalk.cyan(CONFIG_FILE_NAME_JSON)}\nDefault system prompt created: ${chalk.cyan(promptFilePath)}\n\nProject ID: ${chalk.cyan(projectId)}\n\n${chalk.bold('Next steps:')}\n${chalk.gray('1.')} (Optional) Open ${chalk.cyan(CONFIG_FILE_NAME_JSON)} to customize settings. The config is organized into sections:\n   - In ${chalk.yellow(\"'watcher'\")}, you can set ${chalk.yellow(\"'preferredStrategy'\")} to control AI patch generation ('auto', 'standard-diff', 'search-replace', etc.).\n   - In ${chalk.yellow(\"'git'\")}, you can enable ${chalk.yellow(\"'git.autoGitBranch'\")} to create a new branch for each transaction.\n   - In ${chalk.yellow(\"'patch'\")}, you can configure the linter, pre/post commands, and approval behavior.\n\n${chalk.gray('2.')} (Optional) You can customize the AI instructions by editing ${chalk.cyan(promptFilePath)}.\n\n${chalk.gray('3.')} Run ${chalk.magenta(\"'relay watch'\")} in your terminal. It will automatically copy the system prompt to your clipboard.\n\n${chalk.gray('4.')} Paste the system prompt into your AI assistant's \"System Prompt\" or \"Custom Instructions\".\n`;\n\n\nconst updateGitignore = async (cwd: string): Promise<void> => {\n  const gitignorePath = path.join(cwd, GITIGNORE_FILE_NAME);\n  const entry = `\\n${GITIGNORE_COMMENT}\\n/${STATE_DIRECTORY_NAME}/\\n`;\n\n  try {\n    const stats = await fs.stat(gitignorePath);\n    if (stats.isDirectory()) {\n      throw new Error('Path is a directory, not a file');\n    }\n    let content = await fs.readFile(gitignorePath, 'utf-8');\n    if (!content.includes(STATE_DIRECTORY_NAME)) {\n      content += entry;\n      await fs.writeFile(gitignorePath, content);\n      logger.info(`Updated ${chalk.cyan(GITIGNORE_FILE_NAME)} to ignore ${chalk.cyan(STATE_DIRECTORY_NAME)}/`);\n    }\n  } catch (error) {\n    if (isEnoentError(error)) {\n      await fs.writeFile(gitignorePath, entry.trim());\n      logger.info(`Created ${chalk.cyan(GITIGNORE_FILE_NAME)} and added ${chalk.cyan(STATE_DIRECTORY_NAME)}/`);\n    } else {\n      logger.error(`Failed to update ${chalk.cyan(GITIGNORE_FILE_NAME)}: ${getErrorMessage(error)}`);\n    }\n  }\n};\n\nexport const initCommand = async (cwd: string = process.cwd()): Promise<void> => {\n  logger.info('Initializing relaycode in this project...');\n\n  let config = await findConfig(cwd);\n  let isNewProject = false;\n\n  if (!config) {\n    isNewProject = true;\n    const projectId = await getProjectId(cwd);\n    config = await createConfig(projectId, cwd);\n    logger.success(`Created configuration file: ${chalk.cyan(CONFIG_FILE_NAME_JSON)}`);\n  } else {\n    logger.info(`Configuration file found. Verifying project setup...`);\n  }\n\n  const projectId = config.projectId;\n\n  // Explicitly create the transaction directory so `log` command doesn't fail on a fresh init\n  const stateDir = getStateDirectory(cwd);\n  await fs.mkdir(path.join(stateDir, 'transaction'), { recursive: true });\n  if (isNewProject) {\n    logger.success(`Created state directory: ${STATE_DIRECTORY_NAME}/`);\n  }\n\n  // Create system prompt file if it doesn't exist\n  const promptsDir = path.join(stateDir, 'prompts');\n  await fs.mkdir(promptsDir, { recursive: true });\n  const systemPromptPath = path.join(promptsDir, PROMPT_FILE_NAME);\n  const relativePromptPath = path.join(STATE_DIRECTORY_NAME, 'prompts', PROMPT_FILE_NAME);\n  \n  let promptFileExists = false;\n  try {\n      await fs.access(systemPromptPath);\n      promptFileExists = true;\n  } catch (e) {\n      // file doesn't exist\n  }\n\n  if (!promptFileExists) {\n    const systemPrompt = getSystemPrompt(projectId, config.watcher.preferredStrategy, config.patch);\n    await fs.writeFile(systemPromptPath, systemPrompt);\n    logger.success(`Created default system prompt: ${chalk.cyan(relativePromptPath)}`);\n  }\n\n  await updateGitignore(cwd);\n\n  if (isNewProject) {\n      logger.log(getInitMessage(projectId, relativePromptPath));\n  } else {\n      logger.success('✅ Project setup verified. Your project is ready.');\n      logger.info(`You can now run ${chalk.magenta(\"'relay watch'\")}.`);\n  }\n};\n"]}