Skip to content

Commit f6a9d92

Browse files
committed
Revert PR #3533 and fix SQLite bundling
This commit reverts PR #3533 which disabled NewAutocompleteProvider due to SQLite bundling issues. The proper fix is to bundle SQLite native binaries following Continue's approach. Changes: - Restored NewAutocompleteProvider in GhostServiceManager.ts - Added .node loader to esbuild.mjs to handle native binary modules - Added build step to copy sqlite3 and sqlite modules to dist/node_modules/ - Updated .vscodeignore to include SQLite modules in VSIX package - Fixed sqlite3 mock in AutocompleteLruCache.spec.ts to include default export The extension will now properly load SQLite at runtime from the bundled node_modules, allowing NewAutocompleteProvider to work in production.
1 parent e4788e5 commit f6a9d92

File tree

3 files changed

+61
-14
lines changed

3 files changed

+61
-14
lines changed

src/.vscodeignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
# Include the built extension
1414
!dist
1515

16+
# Include sqlite3 and sqlite native bindings
17+
!dist/node_modules/sqlite3/**
18+
!dist/node_modules/sqlite/**
19+
1620
# Include the built webview
1721
!**/*.map
1822
!webview-ui/audio

src/esbuild.mjs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ async function main() {
2929
format: "cjs",
3030
sourcesContent: false,
3131
platform: "node",
32+
loader: {
33+
".node": "file",
34+
},
3235
}
3336

3437
const srcDir = __dirname
@@ -67,6 +70,46 @@ async function main() {
6770
// Copy tree-sitter files to dist directory
6871
copyPaths([["services/continuedev/tree-sitter", "tree-sitter"]], srcDir, distDir)
6972

73+
// Copy sqlite3 and sqlite native bindings to dist directory
74+
// This is necessary because they are marked as external in esbuild
75+
// and contain platform-specific .node binaries that must be included
76+
const sqlite3Source = path.join(
77+
srcDir,
78+
"../node_modules/.pnpm/[email protected]/node_modules/sqlite3",
79+
)
80+
const sqlite3Dest = path.join(distDir, "node_modules/sqlite3")
81+
82+
const sqliteSource = path.join(
83+
srcDir,
84+
"../node_modules/.pnpm/[email protected]/node_modules/sqlite",
85+
)
86+
const sqliteDest = path.join(distDir, "node_modules/sqlite")
87+
88+
if (fs.existsSync(sqlite3Source)) {
89+
try {
90+
// Copy the entire sqlite3 module to preserve directory structure
91+
// This includes build/Release/node_sqlite3.node and package.json
92+
fs.cpSync(sqlite3Source, sqlite3Dest, { recursive: true })
93+
console.log(`[${name}] Copied sqlite3 bindings to dist/node_modules/sqlite3`)
94+
} catch (err) {
95+
console.error(`[${name}] Failed to copy sqlite3 bindings:`, err)
96+
}
97+
} else {
98+
console.warn(`[${name}] sqlite3 source not found at: ${sqlite3Source}`)
99+
}
100+
101+
if (fs.existsSync(sqliteSource)) {
102+
try {
103+
// Copy the sqlite wrapper module
104+
fs.cpSync(sqliteSource, sqliteDest, { recursive: true })
105+
console.log(`[${name}] Copied sqlite wrapper to dist/node_modules/sqlite`)
106+
} catch (err) {
107+
console.error(`[${name}] Failed to copy sqlite wrapper:`, err)
108+
}
109+
} else {
110+
console.warn(`[${name}] sqlite source not found at: ${sqliteSource}`)
111+
}
112+
70113
// Copy JSDOM xhr-sync-worker.js to fix runtime resolution
71114
const jsdomWorkerDest = path.join(distDir, "xhr-sync-worker.js")
72115

src/services/ghost/GhostServiceManager.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { GhostModel } from "./GhostModel"
66
import { GhostStatusBar } from "./GhostStatusBar"
77
import { GhostCodeActionProvider } from "./GhostCodeActionProvider"
88
import { GhostInlineCompletionProvider } from "./classic-auto-complete/GhostInlineCompletionProvider"
9-
//import { NewAutocompleteProvider } from "./new-auto-complete/NewAutocompleteProvider"
9+
import { NewAutocompleteProvider } from "./new-auto-complete/NewAutocompleteProvider"
1010
import { GhostServiceSettings, TelemetryEventName } from "@roo-code/types"
1111
import { ContextProxy } from "../../core/config/ContextProxy"
1212
import { ProviderSettingsManager } from "../../core/config/ProviderSettingsManager"
@@ -36,7 +36,7 @@ export class GhostServiceManager {
3636
// VSCode Providers
3737
public codeActionProvider: GhostCodeActionProvider
3838
public inlineCompletionProvider: GhostInlineCompletionProvider
39-
//private newAutocompleteProvider: NewAutocompleteProvider | null = null
39+
private newAutocompleteProvider: NewAutocompleteProvider | null = null
4040
private inlineCompletionProviderDisposable: vscode.Disposable | null = null
4141

4242
private ignoreController?: Promise<RooIgnoreController>
@@ -126,18 +126,18 @@ export class GhostServiceManager {
126126
}
127127

128128
// Dispose new autocomplete provider if switching away from it
129-
//if (!useNewAutocomplete && this.newAutocompleteProvider) {
130-
// this.newAutocompleteProvider.dispose()
131-
// this.newAutocompleteProvider = null
132-
//}
129+
if (!useNewAutocomplete && this.newAutocompleteProvider) {
130+
this.newAutocompleteProvider.dispose()
131+
this.newAutocompleteProvider = null
132+
}
133133

134134
if (shouldBeRegistered) {
135135
if (useNewAutocomplete) {
136136
// Initialize new autocomplete provider if not already created
137-
//if (!this.newAutocompleteProvider) {
138-
// this.newAutocompleteProvider = new NewAutocompleteProvider(this.context, this.cline)
139-
// await this.newAutocompleteProvider.load()
140-
//}
137+
if (!this.newAutocompleteProvider) {
138+
this.newAutocompleteProvider = new NewAutocompleteProvider(this.context, this.cline)
139+
await this.newAutocompleteProvider.load()
140+
}
141141
// New autocomplete provider registers itself internally
142142
} else {
143143
// Register classic provider
@@ -458,10 +458,10 @@ export class GhostServiceManager {
458458
}
459459

460460
// Dispose new autocomplete provider if it exists
461-
//if (this.newAutocompleteProvider) {
462-
// this.newAutocompleteProvider.dispose()
463-
// this.newAutocompleteProvider = null
464-
//}
461+
if (this.newAutocompleteProvider) {
462+
this.newAutocompleteProvider.dispose()
463+
this.newAutocompleteProvider = null
464+
}
465465

466466
this.disposeIgnoreController()
467467

0 commit comments

Comments
 (0)