SYMBOL INDEX (245 symbols across 45 files) FILE: cloud_function/index.js constant CLIENT_ID (line 17) | const CLIENT_ID = process.env.CLIENT_ID; constant SECRET_NAME (line 18) | const SECRET_NAME = process.env.SECRET_NAME; constant REDIRECT_URI (line 19) | const REDIRECT_URI = process.env.REDIRECT_URI; constant KEYCHAIN_SERVICE_NAME (line 22) | const KEYCHAIN_SERVICE_NAME = 'gemini-cli-workspace-oauth'; constant KEYCHAIN_ACCOUNT_NAME (line 23) | const KEYCHAIN_ACCOUNT_NAME = 'main-account'; function getClientSecret (line 32) | async function getClientSecret() { function handleCallback (line 51) | async function handleCallback(req, res) { function handleRefreshToken (line 284) | async function handleRefreshToken(req, res) { FILE: scripts/auth-utils.js function clearAuth (line 11) | async function clearAuth() { function expireToken (line 21) | async function expireToken() { function showStatus (line 40) | async function showStatus() { function login (line 77) | async function login() { function showHelp (line 89) | function showHelp() { function main (line 110) | async function main() { FILE: scripts/clean.js constant RMRF (line 11) | const RMRF = { recursive: true, force: true }; function rmrfSyncVerbose (line 13) | function rmrfSyncVerbose(path) { FILE: scripts/start.js function runCommand (line 10) | function runCommand(command, args, options) { function main (line 42) | async function main() { FILE: scripts/utils/dependencies.js function getDependencies (line 16) | function getDependencies(rootDir, pkgName) { function getTransitiveDependencies (line 31) | function getTransitiveDependencies(rootDir, startPkgs) { FILE: workspace-server/esbuild.auth-utils.js function buildAuthUtils (line 10) | async function buildAuthUtils() { FILE: workspace-server/esbuild.config.js function build (line 11) | async function build() { FILE: workspace-server/esbuild.headless-login.js function buildHeadlessLogin (line 9) | async function buildHeadlessLogin() { FILE: workspace-server/src/__tests__/auth/token-storage/base-token-storage.test.ts class TestTokenStorage (line 14) | class TestTokenStorage extends BaseTokenStorage { method getCredentials (line 17) | async getCredentials(serverName: string): Promise { method deleteCredentials (line 26) | async deleteCredentials(serverName: string): Promise { method listServers (line 30) | async listServers(): Promise { method getAllCredentials (line 34) | async getAllCredentials(): Promise> { method clearAll (line 38) | async clearAll(): Promise { method validateCredentials (line 42) | override validateCredentials(credentials: OAuthCredentials): void { method sanitizeServerName (line 46) | override sanitizeServerName(serverName: string): string { FILE: workspace-server/src/__tests__/auth/token-storage/hybrid-token-storage.test.ts constant KEYCHAIN_TOKEN_STORAGE_PATH (line 21) | const KEYCHAIN_TOKEN_STORAGE_PATH = constant FILE_TOKEN_STORAGE_PATH (line 23) | const FILE_TOKEN_STORAGE_PATH = constant HYBRID_TOKEN_STORAGE_PATH (line 25) | const HYBRID_TOKEN_STORAGE_PATH = type MockStorage (line 28) | interface MockStorage { FILE: workspace-server/src/__tests__/services/CalendarValidation.test.ts function getZodIssueMessages (line 14) | function getZodIssueMessages(fn: () => void): string[] { FILE: workspace-server/src/__tests__/utils/logger.test.ts function setupLogger (line 26) | async function setupLogger(appendFileMock?: any) { FILE: workspace-server/src/__tests__/utils/secure-browser-launcher.test.ts function simulateSuccess (line 38) | function simulateSuccess() { function simulateFailure (line 44) | function simulateFailure(error = new Error('Command failed')) { FILE: workspace-server/src/auth/AuthManager.ts constant CLIENT_ID (line 19) | const CLIENT_ID = config.clientId; constant CLOUD_FUNCTION_URL (line 20) | const CLOUD_FUNCTION_URL = config.cloudFunctionUrl; constant TOKEN_EXPIRY_BUFFER_MS (line 21) | const TOKEN_EXPIRY_BUFFER_MS = 5 * 60 * 1000; type OauthWebLogin (line 28) | interface OauthWebLogin { class AuthManager (line 33) | class AuthManager { method constructor (line 38) | constructor(scopes: string[]) { method setOnStatusUpdate (line 42) | public setOnStatusUpdate(callback: (message: string) => void) { method isTokenExpiringSoon (line 46) | private isTokenExpiringSoon(credentials: Auth.Credentials): boolean { method loadCachedCredentials (line 53) | private async loadCachedCredentials( method getAuthenticatedClient (line 84) | public async getAuthenticatedClient(): Promise { method clearAuth (line 214) | public async clearAuth(): Promise { method refreshToken (line 221) | public async refreshToken(): Promise { method getAvailablePort (line 273) | private async getAvailablePort(): Promise { method authWithWeb (line 304) | private async authWithWeb(client: Auth.OAuth2Client): Promise { method loadMasterKey (line 36) | private static async loadMasterKey(): Promise { method deriveEncryptionKey (line 51) | private deriveEncryptionKey(): Buffer { method encrypt (line 58) | private encrypt(text: string): string { method decrypt (line 70) | private decrypt(encryptedData: string): string { method ensureDirectoryExists (line 93) | private async ensureDirectoryExists(): Promise { method loadTokens (line 98) | private async loadTokens(): Promise> { method saveTokens (line 123) | private async saveTokens( method getCredentials (line 135) | async getCredentials(serverName: string): Promise { method deleteCredentials (line 159) | async deleteCredentials(serverName: string): Promise { method listServers (line 182) | async listServers(): Promise { method getAllCredentials (line 187) | async getAllCredentials(): Promise> { method clearAll (line 203) | async clearAll(): Promise { FILE: workspace-server/src/auth/token-storage/hybrid-token-storage.ts constant FORCE_FILE_STORAGE_ENV_VAR (line 12) | const FORCE_FILE_STORAGE_ENV_VAR = 'GEMINI_CLI_WORKSPACE_FORCE_FILE_STOR... class HybridTokenStorage (line 14) | class HybridTokenStorage extends BaseTokenStorage { method constructor (line 19) | constructor(serviceName: string) { method initializeStorage (line 23) | private async initializeStorage(): Promise { method getStorage (line 52) | private async getStorage(): Promise { method getCredentials (line 66) | async getCredentials(serverName: string): Promise { method deleteCredentials (line 76) | async deleteCredentials(serverName: string): Promise { method listServers (line 81) | async listServers(): Promise { method getAllCredentials (line 86) | async getAllCredentials(): Promise> { method clearAll (line 91) | async clearAll(): Promise { method getStorageType (line 96) | async getStorageType(): Promise { FILE: workspace-server/src/auth/token-storage/keychain-token-storage.ts type Keytar (line 11) | interface Keytar { constant KEYCHAIN_TEST_PREFIX (line 24) | const KEYCHAIN_TEST_PREFIX = '__keychain_test__'; class KeychainTokenStorage (line 26) | class KeychainTokenStorage extends BaseTokenStorage { method getKeytar (line 31) | async getKeytar(): Promise { method getCredentials (line 50) | async getCredentials(serverName: string): Promise { method deleteCredentials (line 101) | async deleteCredentials(serverName: string): Promise { method listServers (line 122) | async listServers(): Promise { method getAllCredentials (line 143) | async getAllCredentials(): Promise> { method clearAll (line 178) | async clearAll(): Promise { method checkKeychainAvailability (line 212) | async checkKeychainAvailability(): Promise { method isAvailable (line 243) | async isAvailable(): Promise { FILE: workspace-server/src/auth/token-storage/oauth-credential-storage.ts constant KEYCHAIN_SERVICE_NAME (line 11) | const KEYCHAIN_SERVICE_NAME = 'gemini-cli-workspace-oauth'; constant MAIN_ACCOUNT_KEY (line 12) | const MAIN_ACCOUNT_KEY = 'main-account'; class OAuthCredentialStorage (line 14) | class OAuthCredentialStorage { method loadCredentials (line 22) | static async loadCredentials(): Promise { method saveCredentials (line 53) | static async saveCredentials(credentials: Credentials): Promise { method clearCredentials (line 73) | static async clearCredentials(): Promise { FILE: workspace-server/src/auth/token-storage/types.ts type OAuthToken (line 10) | interface OAuthToken { type OAuthCredentials (line 21) | interface OAuthCredentials { type TokenStorageType (line 30) | enum TokenStorageType { type TokenStorage (line 35) | interface TokenStorage { FILE: workspace-server/src/cli/headless-login.ts constant CLIENT_ID (line 32) | const CLIENT_ID = config.clientId; constant CLOUD_FUNCTION_URL (line 33) | const CLOUD_FUNCTION_URL = config.cloudFunctionUrl; type CredentialsJson (line 35) | interface CredentialsJson { constant TTY_PATH (line 43) | const TTY_PATH = os.platform() === 'win32' ? '\\\\.\\CON' : '/dev/tty'; function openTtyRead (line 50) | function openTtyRead(): fs.ReadStream { function openTtyWrite (line 57) | function openTtyWrite(): fs.WriteStream { function readCredentialsFromTty (line 65) | function readCredentialsFromTty(): Promise { function validateCredentials (line 129) | function validateCredentials( function generateOAuthUrl (line 147) | function generateOAuthUrl(): string { function main (line 167) | async function main() { FILE: workspace-server/src/features/feature-config.ts constant SCOPE_PREFIX (line 20) | const SCOPE_PREFIX = 'https://www.googleapis.com/auth/'; function scopes (line 22) | function scopes(...names: string[]): string[] { type ServiceName (line 26) | type ServiceName = type FeatureGroup (line 38) | interface FeatureGroup { function featureGroupKey (line 54) | function featureGroupKey(fg: FeatureGroup): string { constant FEATURE_GROUPS (line 58) | const FEATURE_GROUPS: readonly FeatureGroup[] = [ function getAllPossibleScopes (line 270) | function getAllPossibleScopes(): string[] { FILE: workspace-server/src/features/feature-resolver.ts type ResolvedFeatures (line 32) | interface ResolvedFeatures { type Override (line 39) | interface Override { function parseOverrides (line 50) | function parseOverrides(raw: string): Override[] { constant GROUP_INDEX (line 83) | const GROUP_INDEX: ReadonlyMap = new Map( constant TOOL_INDEX (line 88) | const TOOL_INDEX: ReadonlyMap = new Map( function resolveFeatures (line 101) | function resolveFeatures( FILE: workspace-server/src/index.ts function main (line 104) | async function main() { FILE: workspace-server/src/services/CalendarService.ts type EventAttachment (line 22) | interface EventAttachment { type CalendarEventType (line 28) | type CalendarEventType = type ListEventsEventType (line 34) | type ListEventsEventType = CalendarEventType | 'birthday' | 'fromGmail'; type CreateEventInput (line 36) | interface CreateEventInput { type ListEventsInput (line 69) | interface ListEventsInput { type GetEventInput (line 77) | interface GetEventInput { type DeleteEventInput (line 82) | interface DeleteEventInput { type UpdateEventInput (line 87) | interface UpdateEventInput { type RespondToEventInput (line 99) | interface RespondToEventInput { type FindFreeTimeInput (line 107) | interface FindFreeTimeInput { class CalendarService (line 114) | class CalendarService { method constructor (line 117) | constructor(private authManager: any) {} method applyMeetAndAttachments (line 125) | private applyMeetAndAttachments( method createValidationErrorResponse (line 154) | private createValidationErrorResponse(error: unknown) { method extractErrorMessage (line 194) | private extractErrorMessage(error: unknown): string { method getCalendar (line 249) | private async getCalendar(): Promise { method getPrimaryCalendarId (line 257) | private async getPrimaryCalendarId(): Promise { FILE: workspace-server/src/services/CalendarValidation.ts type EventDateInput (line 15) | type EventDateInput = { type WorkingLocationValidationInput (line 20) | type WorkingLocationValidationInput = { type CompleteEventValidationInput (line 26) | type CompleteEventValidationInput = { function createIssue (line 47) | function createIssue(path: (string | number)[], message: string): z.ZodE... function validateExclusiveDateField (line 57) | function validateExclusiveDateField( function validateOptionalExclusiveDateField (line 72) | function validateOptionalExclusiveDateField( function validateDateFieldFormats (line 91) | function validateDateFieldFormats( function validateWorkingLocationProperties (line 103) | function validateWorkingLocationProperties( function addDays (line 134) | function addDays(date: string, days: number): string { function validateWorkingLocationDuration (line 140) | function validateWorkingLocationDuration( function validateCompleteEventInput (line 163) | function validateCompleteEventInput(input: CompleteEventValidationInput)... function validateCreateEventInput (line 193) | function validateCreateEventInput(input: CreateEventInput): void { function validateUpdateEventInput (line 204) | function validateUpdateEventInput(input: UpdateEventInput): void { FILE: workspace-server/src/services/ChatService.ts type GetMessagesParams (line 12) | interface GetMessagesParams { class ChatService (line 21) | class ChatService { method constructor (line 22) | constructor(private authManager: AuthManager) {} method getChatClient (line 24) | private async getChatClient(): Promise { method getPeopleClient (line 30) | private async getPeopleClient(): Promise { method _setupDmSpace (line 36) | private async _setupDmSpace(email: string): Promise { method _extractSuggestions (line 125) | private _extractSuggestions( method _getParagraphText (line 204) | private _getParagraphText( method _readStructuralElement (line 670) | private _readStructuralElement( method _renderPersonChip (line 702) | private _renderPersonChip(props: docs_v1.Schema$PersonProperties): str... method _renderRichLinkChip (line 710) | private _renderRichLinkChip( method _renderDateChip (line 720) | private _renderDateChip(props: docs_v1.Schema$DateElementProperties): ... method _generateReplacementRequests (line 816) | private _generateReplacementRequests( method _getFullDocumentText (line 865) | private _getFullDocumentText( FILE: workspace-server/src/services/DriveService.ts constant MIN_DRIVE_ID_LENGTH (line 17) | const MIN_DRIVE_ID_LENGTH = 25; constant URL_PATTERNS (line 19) | const URL_PATTERNS = [ class DriveService (line 29) | class DriveService { method constructor (line 30) | constructor(private authManager: AuthManager) {} method getDriveClient (line 32) | private async getDriveClient(): Promise { method handleError (line 38) | private handleError( FILE: workspace-server/src/services/GmailService.ts type SendEmailParams (line 22) | type SendEmailParams = { type CreateDraftParams (line 31) | type CreateDraftParams = SendEmailParams & { type GmailAttachment (line 35) | interface GmailAttachment { class GmailService (line 42) | class GmailService { method constructor (line 43) | constructor(private authManager: AuthManager) {} method getGmailClient (line 45) | private async getGmailClient(): Promise { method handleError (line 54) | private handleError(error: unknown, context: string) { method extractAttachmentsAndBody (line 710) | private extractAttachmentsAndBody( FILE: workspace-server/src/services/PeopleService.ts class PeopleService (line 12) | class PeopleService { method constructor (line 13) | constructor(private authManager: AuthManager) {} method getPeopleClient (line 15) | private async getPeopleClient(): Promise { FILE: workspace-server/src/services/SheetsService.ts class SheetsService (line 13) | class SheetsService { method constructor (line 14) | constructor(private authManager: AuthManager) {} method getSheetsClient (line 16) | private async getSheetsClient(): Promise { FILE: workspace-server/src/services/SlidesService.ts class SlidesService (line 16) | class SlidesService { method constructor (line 17) | constructor(private authManager: AuthManager) {} method getSlidesClient (line 19) | private async getSlidesClient(): Promise { method extractTextFromTextContent (line 111) | private extractTextFromTextContent( method downloadToLocal (line 184) | private async downloadToLocal(url: string, localPath: string) { FILE: workspace-server/src/services/TimeService.ts class TimeService (line 9) | class TimeService { method constructor (line 10) | constructor() { method handleErrors (line 14) | private async handleErrors( method getTimeContext (line 42) | private getTimeContext() { FILE: workspace-server/src/utils/DriveQueryBuilder.ts function escapeQueryString (line 16) | function escapeQueryString(str: string): string { FILE: workspace-server/src/utils/IdUtils.ts constant DOC_ID_REGEX (line 9) | const DOC_ID_REGEX = /\/d\/([a-zA-Z0-9-_]+)/; function extractDocId (line 17) | function extractDocId(url: string): string | undefined { FILE: workspace-server/src/utils/MimeHelper.ts class MimeHelper (line 10) | class MimeHelper { method createMimeMessage (line 14) | public static createMimeMessage({ method createMimeMessageWithAttachments (line 98) | public static createMimeMessageWithAttachments({ method decodeBase64Url (line 205) | public static decodeBase64Url(encoded: string): string { FILE: workspace-server/src/utils/config.ts type WorkspaceConfig (line 9) | interface WorkspaceConfig { constant DEFAULT_CONFIG (line 14) | const DEFAULT_CONFIG: WorkspaceConfig = { function loadConfig (line 24) | function loadConfig(): WorkspaceConfig { FILE: workspace-server/src/utils/constants.ts constant GMAIL_SEARCH_MAX_RESULTS (line 7) | const GMAIL_SEARCH_MAX_RESULTS = 100; constant GMAIL_BATCH_MODIFY_MAX_IDS (line 8) | const GMAIL_BATCH_MODIFY_MAX_IDS = 1000; constant GMAIL_NO_LABEL_CHANGES_MESSAGE (line 9) | const GMAIL_NO_LABEL_CHANGES_MESSAGE = FILE: workspace-server/src/utils/logger.ts function ensureLogDirectoryExists (line 13) | async function ensureLogDirectoryExists() { function setLoggingEnabled (line 27) | function setLoggingEnabled(enabled: boolean) { function logToFile (line 31) | function logToFile(message: string) { FILE: workspace-server/src/utils/paths.ts function findProjectRoot (line 10) | function findProjectRoot(): string { constant PROJECT_ROOT (line 24) | const PROJECT_ROOT = findProjectRoot(); constant ENCRYPTED_TOKEN_PATH (line 25) | const ENCRYPTED_TOKEN_PATH = path.join( constant ENCRYPTION_MASTER_KEY_PATH (line 29) | const ENCRYPTION_MASTER_KEY_PATH = path.join( FILE: workspace-server/src/utils/secure-browser-launcher.ts function withTimeout (line 11) | function withTimeout(promise: Promise, ms: number): Promise { function validateUrl (line 28) | function validateUrl(url: string): void { function openBrowserSecurely (line 61) | async function openBrowserSecurely( function shouldLaunchBrowser (line 195) | function shouldLaunchBrowser(): boolean { FILE: workspace-server/src/utils/tool-normalization.ts function applyToolNameNormalization (line 18) | function applyToolNameNormalization( FILE: workspace-server/src/utils/validation.ts function createValidator (line 110) | function createValidator( function extractDocumentId (line 154) | function extractDocumentId(urlOrId: string): string { class ValidationError (line 172) | class ValidationError extends Error { method constructor (line 173) | constructor(