mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-19 16:23:06 -07:00
63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import * as fs from 'node:fs';
|
|
import * as path from 'node:path';
|
|
import { performInit } from '@google/gemini-cli-core';
|
|
import type {
|
|
Command,
|
|
CommandContext,
|
|
CommandExecutionResponse,
|
|
} from './types.js';
|
|
|
|
export class InitCommand implements Command {
|
|
name = 'init';
|
|
description = 'Analyzes the project and creates a tailored GEMINI.md file';
|
|
requiresWorkspace = true;
|
|
|
|
async execute(
|
|
context: CommandContext,
|
|
_args: string[] = [],
|
|
): Promise<CommandExecutionResponse> {
|
|
const targetDir = context.config.getTargetDir();
|
|
if (!targetDir) {
|
|
throw new Error('Command requires a workspace.');
|
|
}
|
|
|
|
const geminiMdPath = path.join(targetDir, 'GEMINI.md');
|
|
const result = performInit(fs.existsSync(geminiMdPath));
|
|
|
|
switch (result.type) {
|
|
case 'message':
|
|
return {
|
|
name: this.name,
|
|
data: result,
|
|
};
|
|
case 'submit_prompt':
|
|
fs.writeFileSync(geminiMdPath, '', 'utf8');
|
|
|
|
if (typeof result.content !== 'string') {
|
|
throw new Error('Init command content must be a string.');
|
|
}
|
|
|
|
// Inform the user since we can't trigger the UI-based interactive agent loop here directly.
|
|
// We output the prompt text they can use to re-trigger the generation manually,
|
|
// or just seed the GEMINI.md file as we've done above.
|
|
return {
|
|
name: this.name,
|
|
data: {
|
|
type: 'message',
|
|
messageType: 'info',
|
|
content: `A template GEMINI.md has been created at ${geminiMdPath}.\n\nTo populate it with project context, you can run the following prompt in a new chat:\n\n${result.content}`,
|
|
},
|
|
};
|
|
|
|
default:
|
|
throw new Error('Unknown result type from performInit');
|
|
}
|
|
}
|
|
}
|