relaycode
Version:
A developer assistant that automates applying code changes from LLMs.
1 lines • 6.32 kB
Source Map (JSON)
{"version":3,"sources":["../../src/commands/init.ts"],"names":["getInitMessage","projectId","chalk","CONFIG_FILE_NAME_JSON","updateGitignore","cwd","gitignorePath","path","GITIGNORE_FILE_NAME","entry","GITIGNORE_COMMENT","STATE_DIRECTORY_NAME","content","fs","logger","error","isEnoentError","getErrorMessage","initCommand","findConfig","getProjectId","createConfig","getStateDirectory"],"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 { STATE_DIRECTORY_NAME, GITIGNORE_FILE_NAME, GITIGNORE_COMMENT, CONFIG_FILE_NAME_JSON } from '../utils/constants';\nimport chalk from 'chalk';\n\nconst getInitMessage = (projectId: string): string => `\n${chalk.green('✅ relaycode has been initialized for this project.')}\n\nConfiguration file created: ${chalk.cyan(CONFIG_FILE_NAME_JSON)}\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.')} Run ${chalk.magenta(\"'relay watch'\")} in your terminal. This will start the service and display the system prompt tailored to your configuration.\n\n${chalk.gray('3.')} Copy the system prompt provided by ${chalk.magenta(\"'relay watch'\")} and paste it 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 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 const config = await findConfig(cwd);\n if (config) {\n logger.warn(`Configuration file already exists. Initialization skipped.`);\n logger.log(`\nTo use relaycode, please run ${chalk.magenta(\"'relay watch'\")}.\nIt will display a system prompt to copy into your LLM assistant.\nYou can review your configuration in your existing config file.\n`);\n return;\n }\n\n const projectId = await getProjectId(cwd);\n await createConfig(projectId, cwd);\n logger.success(`Created configuration file: ${chalk.cyan(CONFIG_FILE_NAME_JSON)}`);\n\n // Explicitly create the transaction directory so `log` command doesn't fail on a fresh init\n await fs.mkdir(path.join(getStateDirectory(cwd), 'transaction'), { recursive: true });\n logger.success(`Created state directory: ${STATE_DIRECTORY_NAME}/`);\n\n await updateGitignore(cwd);\n\n logger.log(getInitMessage(projectId));\n};\n"]}