2025-07-29 12:49:01 -04:00
/ * *
* @license
* Copyright 2025 Google LLC
* SPDX - License - Identifier : Apache - 2.0
* /
2025-08-25 22:11:27 +02:00
import * as fs from 'node:fs' ;
import * as path from 'node:path' ;
2025-07-29 12:49:01 -04:00
import {
CommandContext ,
SlashCommand ,
SlashCommandActionReturn ,
CommandKind ,
} from './types.js' ;
export const initCommand : SlashCommand = {
name : 'init' ,
description : 'Analyzes the project and creates a tailored GEMINI.md file.' ,
kind : CommandKind.BUILT_IN ,
action : async (
context : CommandContext ,
_args : string ,
) : Promise < SlashCommandActionReturn > = > {
if ( ! context . services . config ) {
return {
type : 'message' ,
messageType : 'error' ,
content : 'Configuration not available.' ,
} ;
}
const targetDir = context . services . config . getTargetDir ( ) ;
const geminiMdPath = path . join ( targetDir , 'GEMINI.md' ) ;
if ( fs . existsSync ( geminiMdPath ) ) {
return {
type : 'message' ,
messageType : 'info' ,
content :
'A GEMINI.md file already exists in this directory. No changes were made.' ,
} ;
}
// Create an empty GEMINI.md file
fs . writeFileSync ( geminiMdPath , '' , 'utf8' ) ;
context . ui . addItem (
{
type : 'info' ,
text : 'Empty GEMINI.md created. Now analyzing the project to populate it.' ,
} ,
Date . now ( ) ,
) ;
return {
type : 'submit_prompt' ,
content : `
You are an AI agent that brings the power of Gemini directly into the terminal . Your task is to analyze the current directory and generate a comprehensive GEMINI . md file to be used as instructional context for future interactions .
* * Analysis Process : * *
1 . * * Initial Exploration : * *
* Start by listing the files and directories to get a high - level overview of the structure .
* Read the README file ( e . g . , \ ` README.md \` , \` README.txt \` ) if it exists. This is often the best place to start.
2 . * * Iterative Deep Dive ( up to 10 files ) : * *
* Based on your initial findings , select a few files that seem most important ( e . g . , configuration files , main source files , documentation ) .
* Read them . As you learn more , refine your understanding and decide which files to read next . You don ' t need to decide all 10 files at once . Let your discoveries guide your exploration .
3 . * * Identify Project Type : * *
* * * Code Project : * * Look for clues like \ ` package.json \` , \` requirements.txt \` , \` pom.xml \` , \` go.mod \` , \` Cargo.toml \` , \` build.gradle \` , or a \` src \` directory. If you find them, this is likely a software project.
* * * Non - Code Project : * * If you don ' t find code - related files , this might be a directory for documentation , research papers , notes , or something else .
* * GEMINI . md Content Generation : * *
* * For a Code Project : * *
* * * Project Overview : * * Write a clear and concise summary of the project ' s purpose , main technologies , and architecture .
* * * Building and Running : * * Document the key commands for building , running , and testing the project . Infer these from the files you 've read (e.g., \`scripts\` in \`package.json\`, \`Makefile\`, etc.). If you can' t find explicit commands , provide a placeholder with a TODO .
* * * Development Conventions : * * Describe any coding styles , testing practices , or contribution guidelines you can infer from the codebase .
* * For a Non - Code Project : * *
* * * Directory Overview : * * Describe the purpose and contents of the directory . What is it for ? What kind of information does it hold ?
* * * Key Files : * * List the most important files and briefly explain what they contain .
* * * Usage : * * Explain how the contents of this directory are intended to be used .
* * Final Output : * *
Write the complete content to the \ ` GEMINI.md \` file. The output must be well-formatted Markdown.
` ,
} ;
} ,
} ;