summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/hooks/passthroughCommandProcessor.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/ui/hooks/passthroughCommandProcessor.ts')
-rw-r--r--packages/cli/src/ui/hooks/passthroughCommandProcessor.ts108
1 files changed, 0 insertions, 108 deletions
diff --git a/packages/cli/src/ui/hooks/passthroughCommandProcessor.ts b/packages/cli/src/ui/hooks/passthroughCommandProcessor.ts
deleted file mode 100644
index 97244e8c..00000000
--- a/packages/cli/src/ui/hooks/passthroughCommandProcessor.ts
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * @license
- * Copyright 2025 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-import { exec as _exec } from 'child_process';
-import { useCallback } from 'react';
-import { Config } from '@gemini-code/server';
-import { type PartListUnion } from '@google/genai';
-import { HistoryItem, StreamingState } from '../types.js';
-import { getCommandFromQuery } from '../utils/commandUtils.js';
-
-// Helper function (consider moving to a shared util if used elsewhere)
-const addHistoryItem = (
- setHistory: React.Dispatch<React.SetStateAction<HistoryItem[]>>,
- itemData: Omit<HistoryItem, 'id'>,
- id: number,
-) => {
- setHistory((prevHistory) => [
- ...prevHistory,
- { ...itemData, id } as HistoryItem,
- ]);
-};
-
-export const usePassthroughProcessor = (
- setHistory: React.Dispatch<React.SetStateAction<HistoryItem[]>>,
- setStreamingState: React.Dispatch<React.SetStateAction<StreamingState>>,
- setDebugMessage: React.Dispatch<React.SetStateAction<string>>,
- getNextMessageId: (baseTimestamp: number) => number,
- config: Config,
-) => {
- const handlePassthroughCommand = useCallback(
- (rawQuery: PartListUnion): boolean => {
- if (typeof rawQuery !== 'string') {
- return false; // Passthrough only works with string commands
- }
-
- const trimmedQuery = rawQuery.trim();
- if (!trimmedQuery) {
- return false;
- }
-
- const [symbol, command] = getCommandFromQuery(trimmedQuery);
-
- // Passthrough commands don't start with symbol
- if (symbol !== undefined) {
- return false;
- }
-
- if (config.getPassthroughCommands().includes(command)) {
- // Add user message *before* execution starts
- const userMessageTimestamp = Date.now();
- addHistoryItem(
- setHistory,
- { type: 'user', text: trimmedQuery },
- userMessageTimestamp,
- );
-
- // Execute and capture output
- const targetDir = config.getTargetDir();
- setDebugMessage(
- `Executing pass through command in ${targetDir}: ${trimmedQuery}`,
- );
- const execOptions = {
- cwd: targetDir,
- };
-
- // Set state to Responding while the command runs
- setStreamingState(StreamingState.Responding);
-
- _exec(trimmedQuery, execOptions, (error, stdout, stderr) => {
- const timestamp = getNextMessageId(userMessageTimestamp); // Use user message time as base
- if (error) {
- addHistoryItem(
- setHistory,
- { type: 'error', text: error.message },
- timestamp,
- );
- } else if (stderr) {
- // Treat stderr as info for passthrough, as some tools use it for non-error output
- addHistoryItem(
- setHistory,
- { type: 'info', text: stderr },
- timestamp,
- );
- } else {
- // Add stdout as an info message
- addHistoryItem(
- setHistory,
- { type: 'info', text: stdout || '(Command produced no output)' },
- timestamp,
- );
- }
- // Set state back to Idle *after* command finishes and output is added
- setStreamingState(StreamingState.Idle);
- });
-
- return true; // Command was handled
- }
-
- return false; // Not a passthrough command
- },
- [config, setDebugMessage, setHistory, setStreamingState, getNextMessageId],
- );
-
- return { handlePassthroughCommand };
-};