88 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import type { AiDoc } from '../classes.aidoc.js';
 | 
						|
import * as plugins from '../plugins.js';
 | 
						|
import { ProjectContext } from './projectcontext.js';
 | 
						|
 | 
						|
interface IDescriptionInterface {
 | 
						|
  description: string;
 | 
						|
  keywords: string[];
 | 
						|
}
 | 
						|
 | 
						|
export class Description {
 | 
						|
  // INSTANCE
 | 
						|
  private aiDocsRef: AiDoc;
 | 
						|
  private projectDir: string;
 | 
						|
 | 
						|
  constructor(aiDocsRef: AiDoc, projectDirArg: string) {
 | 
						|
    this.aiDocsRef = aiDocsRef;
 | 
						|
    this.projectDir = projectDirArg;
 | 
						|
  }
 | 
						|
 | 
						|
  public async build() {
 | 
						|
    // Use the new TaskContextFactory for optimized context
 | 
						|
    const taskContextFactory = new (await import('../context/index.js')).TaskContextFactory(
 | 
						|
      this.projectDir,
 | 
						|
      this.aiDocsRef.openaiInstance
 | 
						|
    );
 | 
						|
    await taskContextFactory.initialize();
 | 
						|
    
 | 
						|
    // Generate context specifically for description task
 | 
						|
    const contextResult = await taskContextFactory.createContextForDescription();
 | 
						|
    const contextString = contextResult.context;
 | 
						|
    
 | 
						|
    // Log token usage statistics
 | 
						|
    console.log(`Token usage - Context: ${contextResult.tokenCount}, Files: ${contextResult.includedFiles.length + contextResult.trimmedFiles.length}, Savings: ${contextResult.tokenSavings}`);
 | 
						|
 | 
						|
    let result = await this.aiDocsRef.openaiInstance.chat({
 | 
						|
      systemMessage: `
 | 
						|
You create a json adhering the following interface:
 | 
						|
{
 | 
						|
  description: string; // a sensible short, one sentence description of the project
 | 
						|
  keywords: string[]; // an array of tags that describe the project
 | 
						|
}
 | 
						|
 | 
						|
The description should be based on what you understand from the project's files.
 | 
						|
The keywords should be based on use cases you see from the files.
 | 
						|
Don't be cheap about the way you think.
 | 
						|
 | 
						|
Important: Answer only in valid JSON.
 | 
						|
You answer should be parseable with JSON.parse() without modifying anything.
 | 
						|
 | 
						|
Don't wrap the JSON in three ticks json!!!
 | 
						|
    `,
 | 
						|
      messageHistory: [],
 | 
						|
      userMessage: contextString,
 | 
						|
    });
 | 
						|
 | 
						|
    console.log(result.message);
 | 
						|
    const resultObject: IDescriptionInterface = JSON.parse(
 | 
						|
      result.message.replace('```json', '').replace('```', ''),
 | 
						|
    );
 | 
						|
 | 
						|
    // Create a standard ProjectContext instance for file operations
 | 
						|
    const projectContext = new ProjectContext(this.projectDir);
 | 
						|
    const files = await projectContext.gatherFiles();
 | 
						|
    
 | 
						|
    const npmextraJson = files.smartfilesNpmextraJSON;
 | 
						|
    const npmextraJsonContent = JSON.parse(npmextraJson.contents.toString());
 | 
						|
 | 
						|
    npmextraJsonContent.gitzone.module.description = resultObject.description;
 | 
						|
    npmextraJsonContent.gitzone.module.keywords = resultObject.keywords;
 | 
						|
 | 
						|
    npmextraJson.contents = Buffer.from(JSON.stringify(npmextraJsonContent, null, 2));
 | 
						|
    await npmextraJson.write();
 | 
						|
 | 
						|
    // do the same with packageJson
 | 
						|
    const packageJson = files.smartfilePackageJSON;
 | 
						|
    const packageJsonContent = JSON.parse(packageJson.contents.toString());
 | 
						|
    packageJsonContent.description = resultObject.description;
 | 
						|
    packageJsonContent.keywords = resultObject.keywords;
 | 
						|
    packageJson.contents = Buffer.from(JSON.stringify(packageJsonContent, null, 2));
 | 
						|
    await packageJson.write();
 | 
						|
 | 
						|
    console.log(`\n======================\n`);
 | 
						|
    console.log(JSON.stringify(resultObject, null, 2));
 | 
						|
    console.log(`\n======================\n`);
 | 
						|
    return result.message;
 | 
						|
  }
 | 
						|
}
 |