feat: add GitLab Duo provider extension example

- Delegates to pi-ai's built-in Anthropic/OpenAI streaming
- OAuth support with GitLab's bundled client ID
- Direct access token caching (25 min TTL)
- Models: duo-chat-opus/sonnet/haiku-4-5, duo-chat-gpt-5-1/mini/codex
- No external dependencies beyond pi-ai
This commit is contained in:
Mario Zechner 2026-01-24 23:51:05 +01:00
parent a57eb399eb
commit 3e6d8dc72a
5 changed files with 430 additions and 32 deletions

44
package-lock.json generated
View file

@ -11,7 +11,8 @@
"packages/*",
"packages/web-ui/example",
"packages/coding-agent/examples/extensions/with-deps",
"packages/coding-agent/examples/extensions/custom-provider"
"packages/coding-agent/examples/extensions/custom-provider",
"packages/coding-agent/examples/extensions/gitlab-duo"
],
"dependencies": {
"@mariozechner/jiti": "^2.6.5",
@ -51,15 +52,6 @@
"node": ">=18.0.0"
}
},
"node_modules/@anthropic-ai/sandbox-runtime/node_modules/zod": {
"version": "3.25.76",
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
"node_modules/@anthropic-ai/sdk": {
"version": "0.71.2",
"resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.71.2.tgz",
@ -1602,15 +1594,6 @@
"node": ">=8"
}
},
"node_modules/@lmstudio/sdk/node_modules/zod": {
"version": "3.25.76",
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
"node_modules/@mariozechner/clipboard": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@mariozechner/clipboard/-/clipboard-0.3.0.tgz",
@ -1864,15 +1847,6 @@
"zod-to-json-schema": "^3.24.1"
}
},
"node_modules/@mistralai/mistralai/node_modules/zod": {
"version": "3.25.76",
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
"node_modules/@napi-rs/canvas": {
"version": "0.1.88",
"resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.88.tgz",
@ -6943,6 +6917,10 @@
"resolved": "packages/coding-agent/examples/extensions/custom-provider",
"link": true
},
"node_modules/pi-extension-gitlab-duo": {
"resolved": "packages/coding-agent/examples/extensions/gitlab-duo",
"link": true
},
"node_modules/pi-extension-with-deps": {
"resolved": "packages/coding-agent/examples/extensions/with-deps",
"link": true
@ -8586,9 +8564,9 @@
}
},
"node_modules/zod": {
"version": "4.3.5",
"resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz",
"integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==",
"version": "3.25.76",
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
"license": "MIT",
"peer": true,
"funding": {
@ -8739,6 +8717,10 @@
"@types/node": "^20.11.30"
}
},
"packages/coding-agent/examples/extensions/gitlab-duo": {
"name": "pi-extension-gitlab-duo",
"version": "1.0.0"
},
"packages/coding-agent/examples/extensions/pi-dosbox": {
"version": "0.0.1",
"extraneous": true,