2025-07-29 12:49:01 -04:00
/ * *
* @license
* Copyright 2025 Google LLC
* SPDX - License - Identifier : Apache - 2.0
* /
import * as fs from 'fs' ;
import * as path from 'path' ;
import {
CommandContext ,
SlashCommand ,
SlashCommandActionReturn ,
CommandKind ,
} from './types.js' ;
export const initCommand : SlashCommand = {
name : 'init' ,
2025-08-09 10:33:02 +08:00
description : 'Analyzes the project and creates a tailored QWEN.md file.' ,
2025-07-29 12:49:01 -04:00
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 ( ) ;
2025-08-09 10:33:02 +08:00
const geminiMdPath = path . join ( targetDir , 'QWEN.md' ) ;
2025-07-29 12:49:01 -04:00
if ( fs . existsSync ( geminiMdPath ) ) {
return {
type : 'message' ,
messageType : 'info' ,
content :
2025-08-09 10:33:02 +08:00
'A QWEN.md file already exists in this directory. No changes were made.' ,
2025-07-29 12:49:01 -04:00
} ;
}
2025-08-09 10:33:02 +08:00
// Create an empty QWEN.md file
2025-07-29 12:49:01 -04:00
fs . writeFileSync ( geminiMdPath , '' , 'utf8' ) ;
context . ui . addItem (
{
type : 'info' ,
2025-08-09 10:33:02 +08:00
text : 'Empty QWEN.md created. Now analyzing the project to populate it.' ,
2025-07-29 12:49:01 -04:00
} ,
Date . now ( ) ,
) ;
return {
type : 'submit_prompt' ,
content : `
2025-08-09 10:33:02 +08:00
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 QWEN . md file to be used as instructional context for future interactions .
2025-07-29 12:49:01 -04:00
* * 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 .
2025-08-09 10:33:02 +08:00
* * QWEN . md Content Generation : * *
2025-07-29 12:49:01 -04:00
* * 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 : * *
2025-08-09 10:33:02 +08:00
Write the complete content to the \ ` QWEN.md \` file. The output must be well-formatted Markdown.
2025-07-29 12:49:01 -04:00
` ,
} ;
} ,
} ;