Skip to content

Commit 1ce60f5

Browse files
hlshenpr-Mais
andauthored
Gemini in Firebase for VSCode Integration (firebase#8575)
* feat: GQL AI assistant (firebase#8116) * feat: GQL AI assistant * feat: init gemini assist controller * (wip): use custom editor * feat: view column & copy button * feat: inserting code * feat: append instead of replace * chore: update lock * fix: get back css-loader * addressing comments * feat: use data connect configs * fix: html content setting --------- Co-authored-by: Harold Shen <[email protected]> * temp initial types and service done * Fix service file * remove debugging logs * successful calls * Add new line * temp working gemini tool * working demo * change id to dataconnect * change cloudAiCompanion to prod * Add backend for CloudAICompanion calls * controller code * GCA controls implemented * Update webview and clean code * revert unecessary changes * package-lock * cleanup * more cleanup * update test to build extensionDependency * add small fix to support gca download delay * Fix error flow * fix lint * change command to pretest * fix imports * fix verison of code-server * add changelog * format changelog --------- Co-authored-by: Mais Alheraki <[email protected]>
1 parent 0ce9ffa commit 1ce60f5

23 files changed

+1336
-147
lines changed

firebase-vscode/.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ resources/dist
55
.vscode-test
66
.wdio-vscode-service
77
logs
8-
!*.tgz
8+
!*.tgz
9+
prebuilt-extensions

firebase-vscode/.vscodeignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ node_modules/
2020
dist/test/
2121
*.tgz
2222
package-lock.json
23-
.wdio-vscode-service/
23+
.wdio-vscode-service/
24+
prebuilt-extensions/

firebase-vscode/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
## NEXT
22

3+
- [Added] @data-connect tool callable from the Gemini Code Assist extension.
4+
35
## 1.3.1
46

57
- Updated internal `firebase-tools` dependency to 14.2.1

firebase-vscode/common/messaging/protocol.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ export interface WebviewToExtensionParamsMap {
109109
/** Clears data from a running data connect emulator */
110110
"fdc.clear-emulator-data": void;
111111

112+
"firebase.activate.gemini": void;
113+
112114
// Initialize "result" tab.
113115
getDataConnectResults: void;
114116

firebase-vscode/package-lock.json

Lines changed: 21 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

firebase-vscode/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
},
1111
"repository": "https://github.com/firebase/firebase-tools",
1212
"sideEffects": false,
13+
"extensionDependencies": [
14+
"google.geminicodeassist"
15+
],
1316
"categories": [
1417
"Other"
1518
],
@@ -213,6 +216,7 @@
213216
"test-compile": "npm run copyfiles && webpack --config src/test/webpack.test.js",
214217
"lint": "eslint src --ext ts",
215218
"test": "npm run test:unit && npm run test:e2e",
219+
"pretest:e2e": "curl -fsSL https://code-server.dev/install.sh | sh -s -- --edge && code-server --install-extension Google.geminicodeassist --extensions-dir ./prebuilt-extensions/",
216220
"pretest:unit": "npm run test-compile && tsc -p src/test/tsconfig.test.json",
217221
"test:unit": "node ./dist/test/firebase-vscode/src/test/runTest.js",
218222
"test:e2e": "npm run test:e2e:empty && npm run test:e2e:fishfood",

firebase-vscode/src/analytics.ts

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,13 @@ export enum DATA_CONNECT_EVENT_NAME {
3232
START_EMULATORS = "start_emulators",
3333
AUTO_COMPLETE = "auto_complete",
3434
SESSION_CHAR_COUNT = "session_char_count",
35-
EMULATOR_EXPORT ="emulator_export",
35+
EMULATOR_EXPORT = "emulator_export",
3636
SETUP_FIREBASE_BINARY = "setup_firebase_binary",
37+
GEMINI_ERROR = "gemini_error",
38+
GEMINI_OPERATION_CALL = "gemini_operation_call",
39+
GEMINI_SCHEMA_CALL = "gemini_schema_call",
40+
GEMINI_SUCCESS = "gemini_success",
41+
TRY_GEMINI_CLICKED = "try_gemini_clicked",
3742
}
3843

3944
export class AnalyticsLogger {
@@ -42,9 +47,9 @@ export class AnalyticsLogger {
4247
private sessionCharCount = 0; // Track total chars for the session
4348

4449
constructor(context: vscode.ExtensionContext) {
45-
this.logger = monospaceEnv.value.isMonospace ? new IDXLogger(new GA4TelemetrySender(pluginLogger), context) : env.createTelemetryLogger(
46-
new GA4TelemetrySender(pluginLogger),
47-
);
50+
this.logger = monospaceEnv.value.isMonospace
51+
? new IDXLogger(new GA4TelemetrySender(pluginLogger), context)
52+
: env.createTelemetryLogger(new GA4TelemetrySender(pluginLogger));
4853

4954
let subscriptions: vscode.Disposable[] = [
5055
vscode.workspace.onDidChangeTextDocument(
@@ -149,13 +154,15 @@ export class AnalyticsLogger {
149154
}
150155

151156
export class IDXLogger {
152-
constructor(private sender: GA4TelemetrySender, private context: vscode.ExtensionContext) {}
157+
constructor(
158+
private sender: GA4TelemetrySender,
159+
private context: vscode.ExtensionContext,
160+
) {}
153161
public logUsage(eventName: string, data?: any) {
154162
const packageJson = this.context.extension.packageJSON;
155163
data = {
156164
...data,
157-
extversion: packageJson.version,
158-
extname: "idx",
165+
...getAnalyticsContext(this.context),
159166
isidx: "true",
160167
};
161168
this.sender.sendEventData(eventName, data);
@@ -207,6 +214,15 @@ class GA4TelemetrySender implements TelemetrySender {
207214
}
208215
}
209216

217+
export function getAnalyticsContext(context: vscode.ExtensionContext) {
218+
const packageJson = context.extension.packageJSON;
219+
220+
return {
221+
extversion: packageJson.version,
222+
extname: monospaceEnv.value.isMonospace ? "idx" : "vscode",
223+
};
224+
}
225+
210226
function addFirebaseBinaryMetadata(data?: Record<string, any> | undefined) {
211227
const settings = getSettings();
212228
return { ...data, binary_kind: settings.firebaseBinaryKind };

0 commit comments

Comments
 (0)