mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-20 08:47:44 +00:00
Initial commit of Gemini Code CLI
This commit introduces the initial codebase for the Gemini Code CLI, a command-line interface designed to facilitate interaction with the Gemini API for software engineering tasks.
The code was migrated from a previous git repository as a single squashed commit.
Core Features & Components:
* **Gemini Integration:** Leverages the `@google/genai` SDK to interact with the Gemini models, supporting chat history, streaming responses, and function calling (tools).
* **Terminal UI:** Built with Ink (React for CLIs) providing an interactive chat interface within the terminal, including input prompts, message display, loading indicators, and tool interaction elements.
* **Tooling Framework:** Implements a robust tool system allowing Gemini to interact with the local environment. Includes tools for:
* File system listing (`ls`)
* File reading (`read-file`)
* Content searching (`grep`)
* File globbing (`glob`)
* File editing (`edit`)
* File writing (`write-file`)
* Executing bash commands (`terminal`)
* **State Management:** Handles the streaming state of Gemini responses and manages the conversation history.
* **Configuration:** Parses command-line arguments (`yargs`) and loads environment variables (`dotenv`) for setup.
* **Project Structure:** Organized into `core`, `ui`, `tools`, `config`, and `utils` directories using TypeScript. Includes basic build (`tsc`) and start scripts.
This initial version establishes the foundation for a powerful CLI tool enabling developers to use Gemini for coding assistance directly in their terminal environment.
---
Created by yours truly: __Gemini Code__
This commit is contained in:
57
packages/cli/src/gemini.ts
Normal file
57
packages/cli/src/gemini.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import React from 'react';
|
||||
import { render } from 'ink';
|
||||
import App from './ui/App.js';
|
||||
import { parseArguments } from './config/args.js';
|
||||
import { loadEnvironment } from './config/env.js';
|
||||
import { getTargetDirectory } from './utils/paths.js';
|
||||
import { toolRegistry } from './tools/tool-registry.js';
|
||||
import { LSTool } from './tools/ls.tool.js';
|
||||
import { ReadFileTool } from './tools/read-file.tool.js';
|
||||
import { GrepTool } from './tools/grep.tool.js';
|
||||
import { GlobTool } from './tools/glob.tool.js';
|
||||
import { EditTool } from './tools/edit.tool.js';
|
||||
import { TerminalTool } from './tools/terminal.tool.js';
|
||||
import { WriteFileTool } from './tools/write-file.tool.js';
|
||||
|
||||
async function main() {
|
||||
// 1. Configuration
|
||||
loadEnvironment();
|
||||
const argv = await parseArguments(); // Ensure args.ts imports printWarning from ui/display
|
||||
const targetDir = getTargetDirectory(argv.target_dir);
|
||||
|
||||
// 2. Configure tools
|
||||
registerTools(targetDir);
|
||||
|
||||
// 3. Render UI
|
||||
render(React.createElement(App, { directory: targetDir }));
|
||||
}
|
||||
|
||||
// --- Global Entry Point ---
|
||||
main().catch((error) => {
|
||||
console.error('An unexpected critical error occurred:');
|
||||
if (error instanceof Error) {
|
||||
console.error(error.message);
|
||||
} else {
|
||||
console.error(String(error));
|
||||
}
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
function registerTools(targetDir: string) {
|
||||
const lsTool = new LSTool(targetDir);
|
||||
const readFileTool = new ReadFileTool(targetDir);
|
||||
const grepTool = new GrepTool(targetDir);
|
||||
const globTool = new GlobTool(targetDir);
|
||||
const editTool = new EditTool(targetDir);
|
||||
const terminalTool = new TerminalTool(targetDir);
|
||||
const writeFileTool = new WriteFileTool(targetDir);
|
||||
|
||||
toolRegistry.registerTool(lsTool);
|
||||
toolRegistry.registerTool(readFileTool);
|
||||
toolRegistry.registerTool(grepTool);
|
||||
toolRegistry.registerTool(globTool);
|
||||
toolRegistry.registerTool(editTool);
|
||||
toolRegistry.registerTool(terminalTool);
|
||||
toolRegistry.registerTool(writeFileTool);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user