|
1 | 1 | import path from 'node:path'; |
| 2 | +import { fileURLToPath } from 'node:url'; |
2 | 3 | import { checkbox, confirm, input } from '@inquirer/prompts'; |
3 | 4 | import { getAdapter } from './adapters/index.js'; |
4 | 5 | import { TOOL_OPTIONS } from './catalog.js'; |
5 | 6 | import type { InitAnswers, ToolId } from './types.js'; |
6 | | -import { writeTextFile } from '../utils/fs.js'; |
| 7 | +import { copyDirectory, writeTextFile } from '../utils/fs.js'; |
| 8 | + |
| 9 | +const currentDir = path.dirname(fileURLToPath(import.meta.url)); |
| 10 | +const packageRoot = path.resolve(currentDir, '../..'); |
| 11 | +const bundledContractDirectory = path.join(packageRoot, 'contract'); |
7 | 12 |
|
8 | 13 | interface InitOverrides { |
9 | 14 | projectRoot?: string; |
@@ -91,16 +96,21 @@ export async function runInit(overrides: InitOverrides = {}): Promise<void> { |
91 | 96 | } |
92 | 97 | } |
93 | 98 |
|
| 99 | + const contractTargetPath = path.join(answers.projectRoot, 'contract'); |
| 100 | + const contractCopied = await copyDirectory(bundledContractDirectory, contractTargetPath, answers.force); |
| 101 | + |
94 | 102 | const relativeRoot = path.relative(process.cwd(), answers.projectRoot) || '.'; |
95 | 103 | console.log('TML Spec 命令已初始化。'); |
96 | 104 | console.log(`项目根目录: ${relativeRoot}`); |
97 | 105 | console.log(`已选择工具: ${answers.tools.join(', ')}`); |
98 | 106 | console.log(`写入文件数: ${writtenFiles}`); |
99 | 107 | console.log(`跳过文件数: ${skippedFiles}`); |
| 108 | + console.log(`contract 模板目录: ${contractCopied ? '已写入项目根目录' : '已存在,未覆盖'}`); |
100 | 109 | console.log('下一步:'); |
101 | 110 | console.log('1. 在你的 IDE 中打开生成的命令或 prompt 文件。'); |
102 | | - console.log('2. 使用 tml-spec 命名空间下的 project 命令处理项目级文档工作。'); |
103 | | - console.log('3. 使用 tml-spec 命名空间下的 requirement 命令处理需求级工作,并路由到 openspec。'); |
| 111 | + console.log('2. 在项目根目录下查看 contract 模板目录,并按需补充团队规范。'); |
| 112 | + console.log('3. 使用 tml-spec 命名空间下的 project 命令处理项目级文档工作。'); |
| 113 | + console.log('4. 使用 tml-spec 命名空间下的 requirement 命令处理需求级工作,并路由到 openspec。'); |
104 | 114 | } |
105 | 115 |
|
106 | 116 | export function parseInitOverrides(options: { |
|
0 commit comments