Skip to content

Commit ff981c6

Browse files
committed
feat: pass workspace directory to OpencodeAI for project-level config discovery
- Add workspaceDir parameter to selectModel and importOpencodeAI functions - Pass workingDirectory from Janitor to model selector - Enables OpencodeAI to find project-level configuration and plugins - Add .opencode/ to gitignore and npmignore
1 parent 41480e8 commit ff981c6

File tree

4 files changed

+14
-6
lines changed

4 files changed

+14
-6
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,6 @@ Thumbs.db
2424
*.swp
2525
*.swo
2626
*~
27+
28+
# OpenCode
29+
.opencode/

.npmignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,6 @@ lib/
1818
# Git
1919
.git/
2020
.gitignore
21+
22+
# OpenCode
23+
.opencode/

lib/janitor.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ export class Janitor {
261261
})
262262
}
263263

264-
const modelSelection = await selectModel(currentModelInfo, this.logger, this.configModel)
264+
const modelSelection = await selectModel(currentModelInfo, this.logger, this.configModel, this.workingDirectory)
265265

266266
this.logger.info("janitor", "Model selected for analysis", {
267267
sessionID,

lib/model-selector.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,13 @@ function shouldSkipProvider(providerID: string): boolean {
6969
* Attempts to import OpencodeAI with retry logic to handle plugin initialization timing issues.
7070
* Some providers (like openai via @openhax/codex) may not be fully initialized on first attempt.
7171
*/
72-
async function importOpencodeAI(logger?: Logger, maxRetries: number = 3, delayMs: number = 100): Promise<any> {
72+
async function importOpencodeAI(logger?: Logger, maxRetries: number = 3, delayMs: number = 100, workspaceDir?: string): Promise<any> {
7373
let lastError: Error | undefined;
7474

7575
for (let attempt = 1; attempt <= maxRetries; attempt++) {
7676
try {
7777
const { OpencodeAI } = await import('@tarquinen/opencode-auth-provider');
78-
return new OpencodeAI();
78+
return new OpencodeAI({ workspaceDir });
7979
} catch (error: any) {
8080
lastError = error;
8181

@@ -117,13 +117,15 @@ async function importOpencodeAI(logger?: Logger, maxRetries: number = 3, delayMs
117117
export async function selectModel(
118118
currentModel?: ModelInfo,
119119
logger?: Logger,
120-
configModel?: string
120+
configModel?: string,
121+
workspaceDir?: string
121122
): Promise<ModelSelectionResult> {
122-
logger?.info('model-selector', 'Model selection started', { currentModel, configModel });
123+
logger?.info('model-selector', 'Model selection started', { currentModel, configModel, workspaceDir });
123124

124125
// Lazy import with retry logic - handles plugin initialization timing issues
125126
// Some providers (like openai via @openhax/codex) may not be ready on first attempt
126-
const opencodeAI = await importOpencodeAI(logger);
127+
// Pass workspaceDir so OpencodeAI can find project-level config and plugins
128+
const opencodeAI = await importOpencodeAI(logger, 3, 100, workspaceDir);
127129

128130
let failedModelInfo: ModelInfo | undefined;
129131

0 commit comments

Comments
 (0)