opencode icon indicating copy to clipboard operation
opencode copied to clipboard

feat: Add GitLab Duo Agentic Chat Provider Support

Open vglafirov opened this issue 2 weeks ago • 17 comments

Add GitLab Duo Provider Support

Problem

In-line with GitLab's open-core strategy, we want to officially integrate GitLab Duo with OpenCode as a supported provider, operable with both GitLab.com and self-hosted GitLab instances. To streamline our users' journey across tools and enable access to GitLab's AI capabilities including agentic chat with native tool calling, GitLab is upstreaming the required provider packages to this repository.

Solution

This PR adds GitLab as a supported provider with three agentic chat model variants (Haiku, Sonnet, Opus), enabling seamless integration with GitLab.com and self-hosted instances.

Changes

Dependencies Added

Provider Implementation

  • Added GitLab to bundled providers in provider.ts
  • Implemented custom loader with multi-source auth (env, config, OAuth, PAT)
  • Registered three Claude-based models: haiku-4-5, sonnet-4-5, opus-4-5
  • OAuth token refresh support
  • Self-hosted GitLab instance support via GITLAB_INSTANCE_URL

Plugin Auto-Loading

  • GitLab auth/tools plugins load automatically when GitLab is configured
  • Checks environment variables, config, and auth.json
  • Respects OPENCODE_DISABLE_DEFAULT_PLUGINS flag

Tests

  • Added 8 provider-specific tests covering auth methods, config options, and model availability
  • All 619 existing tests pass

Files Changed

  • packages/opencode/package.json - Added 3 GitLab dependencies
  • packages/opencode/src/provider/provider.ts - GitLab provider implementation
  • packages/opencode/src/plugin/index.ts - Auto-loading logic
  • packages/opencode/test/provider/gitlab-duo.test.ts - New tests (8 tests)
  • packages/docs/essentials/gitlab-duo.mdx - Documentation

Usage

Basic setup with environment variable:

export GITLAB_TOKEN="glpat-xxxxxxxxxxxx"

Then use in config:

{
  "model": "gitlab/duo-chat-sonnet-4-5"
}

Self-hosted GitLab:

export GITLAB_INSTANCE_URL="https://gitlab.company.internal"
export GITLAB_TOKEN="glpat-xxxxxxxxxxxx"

Testing

  • All 619 existing tests pass
  • Added 8 provider-specific tests
  • Tested with GitLab.com and environment variable auth

Closes #7455

vglafirov avatar Jan 08 '26 12:01 vglafirov

The following comment was made by an LLM, it may be inaccurate:

No duplicate PRs found

github-actions[bot] avatar Jan 08 '26 12:01 github-actions[bot]

Related PR to models.dev registry: https://github.com/anomalyco/models.dev/pull/616

vglafirov avatar Jan 08 '26 13:01 vglafirov

/review

rekram1-node avatar Jan 09 '26 06:01 rekram1-node

/review

vglafirov avatar Jan 09 '26 09:01 vglafirov

Closes #7455

vglafirov avatar Jan 09 '26 10:01 vglafirov

I am not sure why PR Standards check is failing. I've created an issue and linked it to this PR.

vglafirov avatar Jan 09 '26 16:01 vglafirov

@vglafirov apologies for delay I had this open on my computer but forgot to look at it

rekram1-node avatar Jan 12 '26 18:01 rekram1-node

@rekram1-node You recently merged Gitlab Duo PR on models.dev, but deployment pipeline is failing. If we get models deployed on models.dev, I can remove models from https://github.com/anomalyco/opencode/pull/7333/changes#diff-b0155a9e5561043f50ba86bc54d5fd59aa528c7af7c92b2f37585d80e792cd9aR740

PR to fix deployment issues: https://github.com/anomalyco/models.dev/pull/631

vglafirov avatar Jan 12 '26 18:01 vglafirov

@vglafirov I merged pr thx for callout

rekram1-node avatar Jan 12 '26 23:01 rekram1-node

Can you link me to these packages you are adding? for some reason they aren't popping up when I try to search for them but that is likely me being an idiot

rekram1-node avatar Jan 13 '26 05:01 rekram1-node

Just address these and I will merge tmr morn! Once again sorry for delays our issue and pr volume has exploded

Feel free to DM or email me if needed

rekram1-node avatar Jan 13 '26 05:01 rekram1-node

Can you link me to these packages you are adding? for some reason they aren't popping up when I try to search for them but that is likely me being an idiot

You are not an idiot. I have no idea why, but they are not popping up in a search, for some reason 😞 Here they are:

  1. Gitlab AI Provider
  2. Gitlab Auth Plugin
  3. Gitlab Plugin for OpenCode

vglafirov avatar Jan 13 '26 07:01 vglafirov

@vglafirov this is awesome — thanks for building it! I have a self-hosted GitLab in my organization and would love to test the integration. Is there any doc I should follow, or a quick minimal setup guide (env vars + callback URL/redirect URI + required scopes) to get it working?

kamilchm avatar Jan 13 '26 08:01 kamilchm

@vglafirov this is awesome — thanks for building it! I have a self-hosted GitLab in my organization and would love to test the integration. Is there any doc I should follow, or a quick minimal setup guide (env vars + callback URL/redirect URI + required scopes) to get it working?

@kamilchm This PR contains documentation update: https://github.com/anomalyco/opencode/pull/7333/changes#diff-b5d5affc6941bf7bb19805cc8f556cd1b9ae73ffd99e520120700536b166f8c0

Also check published npm packages in comment above. They providing extensive documentation how to use this integration. Feel free to provide a feedback here or on repositories behind these npm packages. We haven't tested this on self-hosted instances yet, I am highly interesting to see if it works as expected. Thanks

vglafirov avatar Jan 13 '26 09:01 vglafirov

Great, one more question: do I need snything special on the GitLab Server side? Version, features?

kamilchm avatar Jan 13 '26 09:01 kamilchm

Great, one more question: do I need snything special on the GitLab Server side? Version, features?

If you have self-hosted Duo, then I guess nothing special is needed, if not: https://docs.gitlab.com/administration/gitlab_duo_self_hosted/

vglafirov avatar Jan 13 '26 09:01 vglafirov

Can you link me to these packages you are adding? for some reason they aren't popping up when I try to search for them but that is likely me being an idiot

@rekram1-node I've fixed npmjs search problems. It was due to poor metadata. Packages are searcheble now :)

vglafirov avatar Jan 13 '26 09:01 vglafirov

Nice! let me review these packages and then I think this is basically good to go

rekram1-node avatar Jan 13 '26 16:01 rekram1-node

@rekram1-node Refactored plugins loading. Please take a look again 🙏

vglafirov avatar Jan 13 '26 19:01 vglafirov

lookin

rekram1-node avatar Jan 13 '26 19:01 rekram1-node