{"_id":"opencode-gitlab-plugin","_rev":"22-f004a16d884bfd5cad630397a802f383","name":"opencode-gitlab-plugin","dist-tags":{"latest":"3.2.2"},"versions":{"2.0.0":{"name":"opencode-gitlab-plugin","version":"2.0.0","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.0.0","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"dist":{"shasum":"636bdab7e5bbb99d433711085bedca52c8ac0b2c","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.0.0.tgz","fileCount":7,"integrity":"sha512-oMgU4d1BwYu87wT7kL2d49i6Ae2mpEeNIhRtNm72+7nPCXc0F2Fq4OIl9AF6ITONYd99ocuubdxmacJk9fawDQ==","signatures":[{"sig":"MEUCIQCjIfqKH7+PZTfY2IdIqpSn4/EBWPVYVxjEGzDwRxQ66wIgIoSI1xyotCAT8uo147YpbDbxGrAD2g7LoJHOPh7GwJA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256078},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"16d13ce4d923fa298326b1551bceacc09622e198","scripts":{"dev":"tsup src/index.ts --format esm --dts --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup src/index.ts --format esm --dts","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"vglafirov","email":"vglafirov@gmail.com"},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"10.9.4","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.0.0_1772464818434_0.5682943100417013","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"opencode-gitlab-plugin","version":"2.0.1","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.0.1","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"dist":{"shasum":"685550c1eead9d8058ba6d6f915dbc89ea198c64","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.0.1.tgz","fileCount":8,"integrity":"sha512-ZQ4WbovHssAp9tnqDa8jySf4/xyd3EXxCWuPRBO8Yo0uZkrwpB0DJpB4QYj8KLwnWvQ/ORi3kWttKZWuNGPNvg==","signatures":[{"sig":"MEYCIQCwaSpX9I6fLCQMdcEDoD3IsMQnhR2MDw+vcXZezoCa4wIhAMM0zKxKKpaoItX4H1WMxFgIihIh2z0g2xcEPk/5s4tg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":316176},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c7c2fa20be381def11d39855d8d5f47bc2286546","scripts":{"dev":"tsup src/index.ts --format esm --dts --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup src/index.ts --format esm --dts","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.0.1_1774186017143_0.26369573412127445","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"opencode-gitlab-plugin","version":"2.0.2","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.0.2","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"dist":{"shasum":"7573d7e9bb178cdba0df40be9451647f3a0d2027","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.0.2.tgz","fileCount":8,"integrity":"sha512-VuIDWyJmSt1twTYzn/XxF7q3VY4awJ9BMlZ1fop26mrfFlhkLSZABmVIasAFdqJFUOMIfVA1CYD/PywDrHOycw==","signatures":[{"sig":"MEUCIFf6kVixrqK60FXveJ7dRLPI1mSTU+3uz0ZS3pSV2HbVAiEAsOpJHYw2RI54wsYJf+ZvAMlmV/3mJDnJt/H/1MkFigM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":316934},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ee3af67c01685af8b5fc7883ec955f0e82b94417","scripts":{"dev":"tsup src/index.ts --format esm --dts --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup src/index.ts --format esm --dts","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.0.2_1774187377069_0.47361019704073315","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"opencode-gitlab-plugin","version":"2.0.3","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.0.3","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"dist":{"shasum":"1abfa727253dd09f913cd3424f62a4163311e4b3","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.0.3.tgz","fileCount":8,"integrity":"sha512-uT2i5kJXisUA1uafzaO9njcocEJP3i/0CttBY15wMHBPjwqaVHfNqCgNbuPHHxtXjvuNzeXqVtYJA8CagaotwA==","signatures":[{"sig":"MEYCIQDFFv/iU7gS2oqgrXcokjv/px5Hm7sT++ggTlegdhpB3wIhAK0OxHGa3Ia3spSTl68iC8HwTOeF/K2B7aTJOq4IzZM1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":317779},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"a23dbfade058d5d4cd825d0e203fa377bbf16ed8","scripts":{"dev":"tsup src/index.ts --format esm --dts --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup src/index.ts --format esm --dts","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.0.3_1774188353100_0.30283294443501996","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"opencode-gitlab-plugin","version":"2.0.4","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.0.4","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"dist":{"shasum":"375190e55b64781d8734113b115fc6142aae2fad","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.0.4.tgz","fileCount":8,"integrity":"sha512-V5Jqpfsh89lY9c09+m5xroRyb5ha1KXYyzVOIT7sZKIFRMb6wTupQV4Wd52OjWZSvbTDVXHJhEIsP5MdOu3kAw==","signatures":[{"sig":"MEQCICnSpdfAiCSrGovEVclqo32LbUKI6QXo58z3moyAof9EAiAsUsTFp0EvvS8cwnRKSlhPowtYhzGLBP/fnzDiyRQ71g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":318473},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ed5fb4e1a67d8d456238c38f68bf014fd40b8f87","scripts":{"dev":"tsup src/index.ts --format esm --dts --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup src/index.ts --format esm --dts","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.0.4_1775085186073_0.4881770575144402","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"opencode-gitlab-plugin","version":"2.1.0","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.1.0","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"407b87e1a48d23e0c6a33e47363727bbf2444041","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.1.0.tgz","fileCount":10,"integrity":"sha512-2mCSbD8fhEWktvs+gdtWsXppwgQc2jZEGKmcX488mnUWQNGgrBwyHvOOt5NuUeHlQabHd69NNcv4lpgQJzf7WQ==","signatures":[{"sig":"MEYCIQC0giJe3wCCqeTRQeMYJPKPLDPsldNFxHPyZu2CjTcNGQIhAMzWu1JPS3Q7q4ZcZxmQl7knBCwWWHXOC3v73kynv+5B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3776342},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"fa9fa259fa530514987735ad147b42de19fe8cfe","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.1.0_1775576262909_0.41422951982904","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"opencode-gitlab-plugin","version":"2.2.0","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.2.0","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"1fbb2f8b12a44a6fa39c36f93c8adeaaa3e8ad39","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.2.0.tgz","fileCount":10,"integrity":"sha512-uTE9NHJkpoIK6NyBRU8/FqUGRwUxP6qpnHi3qWrpWwqzdnpNIaD9lSFUeKirQoDfasesXQFVSu9GALfcFCUprw==","signatures":[{"sig":"MEUCIHXZpyj7AwffBjDGCf8ke5BqDCp9Au1MYhf3g605amhSAiEAo25xccvuLiSijNGISlweSRmJSwQeoejW4KfCfcfqA30=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3777875},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d9d8f015a128e934d5e963aebfea9e5920f78130","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.2.0_1775577321579_0.31371086138844806","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"opencode-gitlab-plugin","version":"2.3.0","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.3.0","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"be601c46ad5b2ecbe89dc1860c9de320a1ed994e","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.3.0.tgz","fileCount":10,"integrity":"sha512-vY5OcEMgPA/zh7FCl6HWXY3J0cPu+kd7mmCvzSIBqg/RtmpmmzbZRLJMXphKZD+uQWj8NEm6Rrz8F/ktpJOeoA==","signatures":[{"sig":"MEUCIQCTrx8qGOfDWOjDvsRgjqS78lWpkxOyXXEiVxzrs+NIlgIgbTu/1oGFDikfmDbGNPnaW7XVdqm4iF8pLovmsnsE49Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3814526},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9fa92c2426f1244f425b8a48e02da6ebdcd03378","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.3.0_1779113787144_0.4475783379047855","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"opencode-gitlab-plugin","version":"2.4.0","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.4.0","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"05908fe3d11b5be4edac80196c224a2868299b55","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.4.0.tgz","fileCount":10,"integrity":"sha512-w7DCHBG/jg00VDhrv7t0V32pNrRQSmmEGhXGmS8omMFU7t3++7wRI0KWfdMyFFeG9tov2T3qeqS5pP98gkNwZA==","signatures":[{"sig":"MEUCIQCSFMTEat1iAedb9rNU0NHfLUQl352Vn/LS4jG3JMCY5AIgWBpQZgGvoLCySa5aPUezl/22NEq4Jt0AD9eekwkOb78=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3846282},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"392dfdff704da9e654fd9915f76d61e2dbe9ea0a","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.4.0_1779207634572_0.5417767410617327","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"opencode-gitlab-plugin","version":"2.5.0","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.5.0","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"4a09b7ef83a47e2c93b73ce1c43e76ddf7a70ff3","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.5.0.tgz","fileCount":10,"integrity":"sha512-5YzKZ4b8bRbsoyfO8HbjQTM6mo/xi8r+6VN51sTip0QoOo/SHG8IbAEOinBaQBZvImZ2F4N7G3Hmbxscsh7XGg==","signatures":[{"sig":"MEYCIQDpUBJYagAwsiXZR8Ej3EyOAPtb84P+LraRwqrTARw1vQIhAPXu+g9/hu/L+tibPf4kbK11S71zlG2RCVODdLTb8vNE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3865851},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"12dac69909cf8f51b68e80bc405c5b2d289e85f0","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.5.0_1779272903509_0.035568821406924744","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"opencode-gitlab-plugin","version":"2.6.0","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.6.0","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"f2d71a2f06571ae85350cb8ee9ccef5906ab493c","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.6.0.tgz","fileCount":10,"integrity":"sha512-92FBvOp/cw+7ZyRZ9p+nwVaS/LpDW5IYernEcJsDlMFBFvnQr/JhyFAr/4jWSUQCO8XdT/RZPy6Bje2uCQu4UQ==","signatures":[{"sig":"MEQCIBkAueDDl/QjLNNN8w77RQmAlrKp14PtfHWp98/MXw/rAiAHT5NjX4n/QsFmJ9O96VNoMPY7dHWnTx6kC955VxoOyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3881482},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"7df9be09aca0afa76009681c32f6bfe0ee05da98","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.6.0_1779273526098_0.27100193822011986","host":"s3://npm-registry-packages-npm-production"}},"2.6.1":{"name":"opencode-gitlab-plugin","version":"2.6.1","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.6.1","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"988448185250a14c35b23b77d31fd9959e4a3f07","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.6.1.tgz","fileCount":10,"integrity":"sha512-5YxKAa21hPPOV04+XjbS51NAfFKl6Hz1GmjspCfNYcR3XnLJoYhd9fEtTq2SewcmsVgJVivo87aOAXgWA333XA==","signatures":[{"sig":"MEYCIQDszRMDHyTw+4IdppwxAJZ/BgE3KbdWNXO6X+tNQUPpfQIhAPdXYNAJJ/EWMNrb2Q3t4k8+GCKUxx9lJczbocgRaUvr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3893124},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f7f4c0d53fe6968f9121ee5b5e41b4dd0a8fb377","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.6.1_1786958840306_0.21578547655112312","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"opencode-gitlab-plugin","version":"2.7.0","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.7.0","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"6fd2a03c8e541fb8421f066a7c746301b2c45351","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.7.0.tgz","fileCount":10,"integrity":"sha512-gs35hSAUuij1vSmrb9lx1Vuemk3ql9rJjR0hjyCdkhQMhLeAJm4lW3g4ZW+BgwHhYvejK0tCrSEhPzXlxoV0iA==","signatures":[{"sig":"MEQCIH4w36hMa32i2zGnMro9Ev8JGY87W208Sk0wWjgkyKSiAiAzL8JQhrKhv5vURbUlWaF9dtWV4t7dlE8I8kH2p3rZJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3910897},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"944671f25835559dc595bb8c8d86354977090001","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.7.0_1786959276601_0.3562661549005539","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"opencode-gitlab-plugin","version":"2.8.0","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.8.0","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"83f8922205ff6f510bbf16b26748b96a757fa55e","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.8.0.tgz","fileCount":10,"integrity":"sha512-vLJvWn0WAZPDpwuBRg/y36QHcjXiNiMU/2/a3Yui+JtVOSLZVvwkr+P1wsIoycHVwz+cMYDCRKNS4QFGMMwbSA==","signatures":[{"sig":"MEQCIDnm1ThVJ6emmiLp9SVhrJpdxDjFCRphHPNoND9+sqkvAiBp82Q27CZo1WncGtR7LmzQhDkMAKyWLnA5ZLXOgX0eDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3912610},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d2f5ce1fe8056f41f414cff2240aba97fedf44fc","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.8.0_1788691594645_0.6227969480380953","host":"s3://npm-registry-packages-npm-production"}},"2.8.1":{"name":"opencode-gitlab-plugin","version":"2.8.1","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.8.1","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"9d648de38af5592423c8e5a6e0f4eb5f90b2b9d7","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.8.1.tgz","fileCount":10,"integrity":"sha512-QNAb6X1agszZ1lhGpOOtm0u72nc04Klsg42WZtD4eJgI8+XkH4ZuNMeMYO1GUY9NyRdHV9Vfb+hRhQbqWwFh3A==","signatures":[{"sig":"MEUCIA5mFsKcKodaLvyCHTCI0Lv4950GyNIcRiZOzomyAvWEAiEA6KNMgG2aPFtFyZqZAOuatcsZ4U56cQzE4b7KkJBdt3o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3924241},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"acd235e6d8698c3c4f85f6b4823a3075b39f3c0c","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.8.1_1788691973403_0.02949964398880045","host":"s3://npm-registry-packages-npm-production"}},"2.8.2":{"name":"opencode-gitlab-plugin","version":"2.8.2","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@2.8.2","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"84e4ac63d5fcc51d0d505d3be6c9cdbc32ab1426","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-2.8.2.tgz","fileCount":10,"integrity":"sha512-kvsZg8fxEBB0rlis2TturnY6V2tAZfLjQsr/afDy5MqkOtE09bT20CjO1oe5Je5UfvNDFYTsDYy5FkJ5gnqY5w==","signatures":[{"sig":"MEUCIBFOe1Byh9tmzD/ZAQGuq6xY1ITRZV4mmD2FAd/6kD5lAiEA4DTtko1aiJw9YQMaw+QCRG328bFq65AvU3A/73wRABQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAx8XbFHFalW43+62Nm9Kj46pOUSJ0GOUoWyNgNDTBsFAiBhFKtYk4+x1eQEZcRYn6YtVcnosgWdh/8NacZlqlZh3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3930299},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c73b2cd10139fcc5f7b3bfdff3d20b86b4838105","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_2.8.2_1789735910207_0.3198381391411427","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"opencode-gitlab-plugin","version":"3.0.0","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@3.0.0","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"b17c082d73739a1a8c460e1becc390c7dc7ed8c1","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-3.0.0.tgz","fileCount":10,"integrity":"sha512-5f1b2h2N3SeWsqJ3leIVrRYxZB58ZteDnn7HshIZ/45cYs7bdmu9sh+JssFBr3DSBVXi+bGaf0WkNvHG5vG8/Q==","signatures":[{"sig":"MEQCIBUbon6q4fua0fjPVQNw7H/GoKGbH85fnCmCwKETzd9LAiAwLs0FNEXnINhG/fa9Owf+6alXr4m387PWl3KYXTTBDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDTrB4CxfPxyzSvLTmzsT9t6+2Fiz8V5nf7JMYeCBHLfwIgZsD2uvDbMr+YpmP5QPYM9+ktSaMZ99CnF/zrhAvF4dU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3975355},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"df9f1a3e627c870c6c74aaac77a315a01a48a3a6","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"oidc:014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode/plugin":"^2.0.12","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_3.0.0_1789995251872_0.07811040007539716","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"opencode-gitlab-plugin","version":"3.0.1","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@3.0.1","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"b402abcfc36ddd71956bea06ffc3f21824f6483d","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-3.0.1.tgz","fileCount":10,"integrity":"sha512-cZSKieLY4rtZYesLRcdK1Yb2J9vP5YkvqQ1++s0HsNbtLTBAXswYcmxeJYOYPPFShthrjQ8BYA07b1bJ7qA3jw==","signatures":[{"sig":"MEYCIQCboXoK2JgLmRw44hfo6whXed2w4RirQuPNWI2GI7rVMgIhAOQlsadgLjFx0FHm5sYbNNNpdXe+ETDDqcMA6H+WsH+q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCzBAi8dTfgPIqbfmKWhhhUVeHOE0/F2A0C2+OPqtbRSAIgUqpjndAmCf3Vz4qYW8mlzR0p3cmA9WtiJmeWRS8F9ks=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3996015},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b27cec6269d3e1622f637fb13fda80a1ad6b4593","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode/plugin":"^2.0.12","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_3.0.1_1791283261518_0.005894034318546293","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"opencode-gitlab-plugin","version":"3.1.0","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@3.1.0","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"128e854e63dbd6c3efd29c05a79b3f2883a05a6d","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-3.1.0.tgz","fileCount":10,"integrity":"sha512-ZUmm1Vmg8fM+HS75R6ABPGWjaeouT+vfQnieid9o9C8V0YFB8Irno5eNm0bAeAowqkfVvPDQDjrpM/RRnlMhTg==","signatures":[{"sig":"MEQCIFogTuUTe3xjbSnBqfRk6QGIDpnFSSLAsGHaZOwBYS+jAiA0gMXlO/QNPNYwX1tyO1iKeDziM/WwZTfnBVm3kU5rhw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCBRKtOSoNngBZ4khq3CupmlSqz3s1/CgaiEU6GWckbHgIgMPVAdgkgUDU1lCPGlhDX9aNriQFScRH8ZpChlGdS/OE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4011776},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8c8765b0cd7918a208d3d34b7d6591f8aeb6202c","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode/plugin":"^2.0.12","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_3.1.0_1791889827660_0.853357869428405","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"opencode-gitlab-plugin","version":"3.2.0","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@3.2.0","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"00c0a9fce554c0bb922e29a098dec434fd3e454e","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-3.2.0.tgz","fileCount":10,"integrity":"sha512-//XVyVh2VKkLBc3xgbJ34YFZbH1dR5NFhZpCLi145Srs3bcWBoK5wwxfSoCE1x/yhRmwKtAytuszMLKDEoN93Q==","signatures":[{"sig":"MEYCIQDUKhvdvHqS9mZpy5pr0yFHxCew3RCgNQE8y0qa4o1eUwIhAKuS7tGN0FtfSDqYDrDOJ6sIxhETzZJoWcCBn6ptoeSx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBXba3ZrrHsHC3RADH7a84YevraJdRHr7+WFl8gSKn0/AiAllgNUK26y2dO6nyECuGQbql6a+g5BQvFDqMUWqrU8Eg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4029516},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"3b74d08b515794439e33a215cbec23cfd4a19380","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode/plugin":"^2.0.12","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_3.2.0_1792923011169_0.7211665688786499","host":"s3://npm-registry-packages-npm-production"}},"3.2.1":{"name":"opencode-gitlab-plugin","version":"3.2.1","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","_id":"opencode-gitlab-plugin@3.2.1","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"dist":{"shasum":"80dce760fbc08c9649d597b152ec24b731fced34","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-3.2.1.tgz","fileCount":10,"integrity":"sha512-GqHeMU7pg/xruVQFvRow1WKC1bZG2PH7qaKXG2ayJZqZUZI4jboDlZABJeRNGGcGn1sOAZzqTfo0Y6L+RV5uSw==","signatures":[{"sig":"MEUCIQCySyzpqiDAcFQ7PhQYrpI0cHMNOGyiBxa+19Omi+XYRwIgTtDLBlfSdAx7yLva2HMuu8a9SwEPWvIZECd8+DSlT3s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICVTaMN5eHBukkoYuB+ESaipiQbav9juUXmwLP7V7FjwAiEAkS0eQys9vGPqqJH33HSOxLdYmzsJwSEHKsLzt9r+/rc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4039911},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"bdfd79d539c2181b3e6b56553b86ee70275d398c","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode/plugin":"^2.0.12","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-gitlab-plugin_3.2.1_1792925957732_0.6134189227430296","host":"s3://npm-registry-packages-npm-production"}},"3.2.2":{"_id":"opencode-gitlab-plugin@3.2.2","bin":{"opencode-gitlab-plugin":"dist/mcp-server.cjs"},"bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"dist":{"shasum":"f10f12089dc58e2db3facba6abb603c192d50636","tarball":"https://registry.npmjs.org/opencode-gitlab-plugin/-/opencode-gitlab-plugin-3.2.2.tgz","fileCount":10,"integrity":"sha512-aYFTkg4HJEMra9YbSJmfCbTPiBQAyJYmfnNXXWLuMH0qVNJ98Bz2XGx0VdGFmJIB5B7CbZzO/DnMZwaCKl3gIA==","signatures":[{"sig":"MEUCIHZXKhENXokDurmQGcELwEdw7e7rrqy/xewXtB8pKxhCAiEAn1XCaKiMgpOeWA5DqKwp/fhoMcEbkRx2ChiLnUy0Hx0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD4KYwtmySbHrbl5frUZPyagBALbMH8+tCHb1U2a3i+MQIgHV0XYlg1JFZ41NiejWXmpHpJpRVTbjAM87N2DXNAaJQ="}],"unpackedSize":4074838},"main":"dist/index.js","name":"opencode-gitlab-plugin","type":"module","types":"dist/index.d.ts","author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f8d2e91a80bd3a09c49986c05f26cff65d1ced7b","license":"MIT","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\"","prepare":"husky install","test:ui":"vitest --ui","lint:fix":"eslint src --ext .ts --fix","test:watch":"vitest","type-check":"tsc --noEmit","lint-staged":"lint-staged","postinstall":"node scripts/postinstall.mjs","format:check":"prettier --check \"src/**/*.ts\"","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"version":"3.2.2","_npmUser":{"name":"GitLab CI/CD","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"gitlab","oidcConfigId":"014939c8-3d4d-4ace-b40f-1c2ac9df3c45"}},"homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"_npmVersion":"11.6.2","description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","directories":{},"maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"_nodeVersion":"25.2.1","dependencies":{"zod":"4.1.8","@opencode/plugin":"^2.0.12","@opencode-ai/plugin":"^1.0.127","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","husky":"^8.0.3","eslint":"^8.56.0","vitest":"^4.0.15","prettier":"^3.1.1","@vitest/ui":"^4.0.15","typescript":"^5.0.0","@types/node":"^25.0.0","lint-staged":"^15.2.0","@commitlint/cli":"^18.4.3","semantic-release":"^22.0.12","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^11.0.2","eslint-config-prettier":"^9.1.0","@semantic-release/gitlab":"^13.0.3","@typescript-eslint/parser":"^6.15.0","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/opencode-gitlab-plugin_3.2.2_1793010443725_0.07406077242928055"}}},"time":{"created":"2026-03-02T15:20:18.353Z","modified":"2026-10-26T10:27:24.174Z","2.0.0":"2026-03-02T15:20:18.590Z","2.0.1":"2026-03-22T13:26:57.302Z","2.0.2":"2026-03-22T13:49:37.239Z","2.0.3":"2026-03-22T14:05:53.252Z","2.0.4":"2026-04-01T23:13:06.257Z","2.1.0":"2026-04-07T15:37:43.145Z","2.2.0":"2026-04-07T15:55:21.837Z","2.3.0":"2026-05-18T14:16:27.343Z","2.4.0":"2026-05-19T16:20:34.807Z","2.5.0":"2026-05-20T10:28:23.652Z","2.6.0":"2026-05-20T10:38:46.326Z","2.6.1":"2026-08-17T09:27:20.465Z","2.7.0":"2026-08-17T09:34:36.745Z","2.8.0":"2026-09-06T10:46:34.812Z","2.8.1":"2026-09-06T10:52:53.573Z","2.8.2":"2026-09-18T12:51:50.345Z","3.0.0":"2026-09-21T12:54:11.985Z","3.0.1":"2026-10-06T10:41:01.671Z","3.1.0":"2026-10-13T11:10:27.772Z","3.2.0":"2026-10-25T10:10:11.285Z","3.2.1":"2026-10-25T10:59:17.839Z","3.2.2":"2026-10-26T10:27:23.838Z"},"bugs":{"url":"https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues"},"author":{"url":"https://gitlab.com/vglafirov","name":"Vladimir Glafirov","email":"vglafirov@gitlab.com"},"license":"MIT","homepage":"https://gitlab.com/vglafirov/opencode-gitlab-plugin#readme","keywords":["opencode","opencode-plugin","gitlab","gitlab-api","gitlab-duo","ai","ai-assistant","developer-tools","devops","ci-cd","merge-requests","issues","pipelines","code-review","rest-api","graphql","typescript","automation","workflow","mcp-server"],"repository":{"url":"git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git","type":"git"},"description":"GitLab tools plugin for OpenCode - provides GitLab API access for merge requests, issues, pipelines, and more","maintainers":[{"name":"vglafirov","email":"vglafirov@gmail.com"}],"readme":"# OpenCode GitLab Plugin\n\n[![GitLab CI](https://gitlab.com/vglafirov/opencode-gitlab-plugin/badges/main/pipeline.svg)](https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/pipelines)\n[![npm version](https://img.shields.io/npm/v/opencode-gitlab-plugin.svg)](https://www.npmjs.com/package/opencode-gitlab-plugin)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA comprehensive GitLab API plugin for OpenCode that provides AI-powered access to GitLab's REST and GraphQL APIs. This plugin enables seamless interaction with merge requests, issues, pipelines, repositories, epics, snippets, audit events, and more through natural language commands.\n\n## 📋 Table of Contents\n\n- [Features](#-features)\n- [Architecture](#-architecture)\n- [Installation](#-installation)\n- [Configuration](#-configuration)\n- [Available Tools](#-available-tools)\n- [Usage Examples](#-usage-examples)\n- [Development](#-development)\n- [CI/CD Pipeline](#-cicd-pipeline)\n- [API Reference](#-api-reference)\n- [Contributing](#-contributing)\n- [License](#-license)\n\n## ✨ Features\n\n### Core Capabilities\n\n- **🔀 Merge Requests**: Full CRUD operations, discussions, notes, changes, commits, and pipelines\n- **📝 Issues**: Create, read, update, and comment on issues with advanced filtering\n- **🎯 Work Items**: Unified interface for issues, epics, tasks, and other work tracking items\n- **🚀 CI/CD Pipelines**: Monitor, analyze, retry pipeline jobs, and validate CI/CD configurations\n- **📦 Repository Operations**: File management, commits, branches, tree navigation, and commit discussions\n- **🔍 Advanced Search**: Multi-scope search across projects, code, issues, merge requests, commits, users, milestones, and documentation\n- **📊 Epics**: Enterprise-level epic management with issue associations\n- **💬 Snippets**: Snippet discussions, notes, and comments management\n- **🔗 Universal Discussions**: Unified interface for discussions across all GitLab resources\n- **✅ TODOs**: Personal task management and notifications\n- **🔒 Security**: Vulnerability scanning and security report access\n- **📚 Wiki**: Wiki page content retrieval\n- **🔍 Audit Events**: Track project, group, and instance-level security events\n- **🔧 Git Commands**: Execute safe, read-only git operations\n- **👥 Project Management**: Member management and project details\n\n### Companion Plugin: DAP (Duo Agent Platform)\n\nFor GitLab AI Catalog agent/flow management, flow execution, and `@` menu integration,\nsee [opencode-gitlab-dap](https://gitlab.com/vglafirov/opencode-gitlab-dap).\n\n### Technical Features\n\n- **TypeScript**: Full type safety with comprehensive type definitions\n- **ESM Support**: Modern ES modules for optimal tree-shaking\n- **Zod Validation**: Runtime schema validation for all API inputs\n- **GraphQL Support**: Native GraphQL API support with type-safe mutations and queries for TODOs, Notes, Discussions, Auto-merge, and Security tools\n- **Cursor-Based Pagination**: GraphQL-powered pagination with `first`/`after` and `last`/`before` cursors for efficient data fetching\n- **GID Validation**: Automatic validation of GitLab Global IDs with descriptive error messages\n- **Error Handling**: Robust error handling with detailed error messages\n- **Authentication**: Multiple authentication methods (OAuth, API tokens)\n- **Rate Limiting**: Built-in handling for GitLab API rate limits\n- **Caching**: Efficient API response handling\n- **Modular Architecture**: Clean separation of concerns with client and tool modules\n- **Comprehensive Testing**: 225 tests with full coverage of all features\n\n### GraphQL-Powered Tools\n\nThe following tools use GitLab's GraphQL API for enhanced functionality:\n\n| Category        | Tools                                                                                                       | Benefits                                                                                 |\n| --------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |\n| **TODOs**       | `gitlab_list_todos`, `gitlab_get_todo_count`                                                                | Cursor-based pagination, rich filtering                                                  |\n| **Notes**       | `gitlab_list_notes`, `gitlab_get_note`, `gitlab_create_note`                                                | Unified interface for all resource types, efficient pagination                           |\n| **Discussions** | `gitlab_list_discussions`, `gitlab_get_discussion`, `gitlab_create_discussion`, `gitlab_resolve_discussion` | Unified interface for all resource types, cursor-based pagination, code position support |\n| **Auto-merge**  | `gitlab_set_mr_auto_merge`                                                                                  | MWPS (Merge When Pipeline Succeeds), merge train support                                 |\n| **Security**    | All vulnerability management tools                                                                          | Type-safe GID validation, mutation support                                               |\n\n## 🏗️ Architecture\n\n### System Architecture\n\n```mermaid\ngraph TB\n    subgraph \"OpenCode Environment\"\n        AI[AI Assistant]\n        Plugin[GitLab Plugin]\n    end\n\n    subgraph \"Plugin Components\"\n        Tools[Tool Definitions]\n        Client[GitLab API Client]\n        Auth[Authentication Manager]\n        Validator[Zod Schema Validator]\n    end\n\n    subgraph \"GitLab API\"\n        REST[REST API v4]\n        GraphQL[GraphQL API]\n        MR[Merge Requests]\n        Issues[Issues]\n        Pipelines[Pipelines]\n        Repos[Repositories]\n        Epics[Epics]\n        Security[Security]\n    end\n\n    AI -->|Natural Language| Plugin\n    Plugin --> Tools\n    Tools --> Validator\n    Validator --> Client\n    Client --> Auth\n    Auth --> REST\n    Auth --> GraphQL\n    REST --> MR\n    REST --> Issues\n    REST --> Pipelines\n    REST --> Repos\n    REST --> Epics\n    GraphQL --> Security\n    GraphQL --> MR\n```\n\n### Plugin Structure\n\n```mermaid\ngraph LR\n    subgraph \"src/index.ts\"\n        A[GitLabApiClient Class]\n        B[Authentication Functions]\n        C[Tool Definitions]\n        D[Plugin Export]\n    end\n\n    A --> A1[HTTP Methods]\n    A --> A2[Merge Request APIs]\n    A --> A3[Issue APIs]\n    A --> A4[Pipeline APIs]\n    A --> A5[Repository APIs]\n    A --> A6[Epic APIs]\n    A --> A7[Search APIs]\n\n    B --> B1[readTokenFromAuthStorage]\n    B --> B2[getGitLabClient]\n\n    C --> C1[69 Tool Definitions]\n\n    D --> A\n    D --> B\n    D --> C\n```\n\n### Authentication Flow\n\n```mermaid\nsequenceDiagram\n    participant User\n    participant Plugin\n    participant AuthManager\n    participant Storage\n    participant GitLab\n\n    User->>Plugin: Initialize Plugin\n    Plugin->>AuthManager: getGitLabClient()\n    AuthManager->>AuthManager: Check GITLAB_TOKEN env\n    alt Token in Environment\n        AuthManager->>GitLab: Use env token\n    else No env token\n        AuthManager->>Storage: Read ~/.local/share/opencode/auth.json\n        Storage->>AuthManager: Return token\n        AuthManager->>GitLab: Use stored token\n    end\n    GitLab->>Plugin: API Response\n    Plugin->>User: Tool Result\n```\n\n## 📦 Installation\n\n### Prerequisites\n\n- Node.js >= 18.0.0\n- npm >= 9.0.0 or Bun\n- GitLab account with API access\n- GitLab Personal Access Token or OAuth token\n\n### Install from npm\n\n```bash\n# Install the package\nnpm install opencode-gitlab-plugin\n\n# Or with Bun\nbun add opencode-gitlab-plugin\n\n# Or with yarn\nyarn add opencode-gitlab-plugin\n```\n\n### Install from GitLab Repository (Development)\n\n```bash\n# Using npm\nnpm install git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git\n\n# Using Bun\nbun add git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git\n```\n\n### Install Specific Version\n\n```bash\n# Install specific version from npm\nnpm install opencode-gitlab-plugin@1.0.0\n\n# Install from specific git tag\nnpm install git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git#v1.0.0\n\n# Install from specific branch\nnpm install git+https://gitlab.com/vglafirov/opencode-gitlab-plugin.git#main\n```\n\n### Using package.json\n\nAdd to your `package.json`:\n\n```json\n{\n  \"dependencies\": {\n    \"opencode-gitlab-plugin\": \"^1.0.0\"\n  }\n}\n```\n\nThen run:\n\n```bash\nnpm install\n```\n\n## MCP Server Mode\n\nYou can also run opencode-gitlab-plugin as a standalone [MCP](https://modelcontextprotocol.io/) server over stdio. This is useful with [lazy-mcp](https://gitlab.com/gitlab-org/ai/lazy-mcp) to reduce input token context — instead of 74 tool schemas in every message, tools are lazy-loaded on demand.\n\n```bash\nnpx opencode-gitlab-plugin\n```\n\n### lazy-mcp Configuration\n\n[lazy-mcp](https://gitlab.com/gitlab-org/ai/lazy-mcp) is a lightweight MCP proxy that lazy-loads tools from multiple MCP servers. Add the following to the `servers` array in `~/.config/lazy-mcp/servers.json`:\n\n```json\n{\n  \"name\": \"gitlab\",\n  \"description\": \"GitLab API: MRs, issues, pipelines, security, search, and more\",\n  \"type\": \"local\",\n  \"command\": [\"npx\", \"-y\", \"opencode-gitlab-plugin\"],\n  \"tags\": [\"gitlab\", \"merge-requests\", \"issues\", \"pipelines\", \"security\"]\n}\n```\n\nFull example with lazy-mcp configured in opencode (`~/.config/opencode/opencode.json`):\n\n```json\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"mcp\": {\n    \"lazy-mcp\": {\n      \"type\": \"local\",\n      \"command\": [\"npx\", \"-y\", \"lazy-mcp@latest\", \"--config\", \"~/.config/lazy-mcp/servers.json\"]\n    }\n  },\n  \"plugins\": [{ \"package\": \"opencode-gitlab-plugin\", \"options\": { \"tools\": false } }]\n}\n```\n\nOn OpenCode v1, use the legacy tuple form instead:\n\n```json\n{\n  \"plugin\": [[\"opencode-gitlab-plugin\", { \"tools\": false }]]\n}\n```\n\nSetting `\"tools\": false` disables tool registration from the plugin. The tools are then served exclusively through the MCP server via lazy-mcp.\n\n| Mode                | Tools in context          | Token cost |\n| ------------------- | ------------------------- | ---------- |\n| Plugin only         | 74 schemas always loaded  | High       |\n| MCP only (lazy-mcp) | 0 (lazy-loaded on demand) | Low        |\n\n### Requirements for MCP Mode\n\n- GitLab connected in OpenCode, with this plugin enabled so it can share the credential through the\n  token bridge (see [Token Priority](#token-priority)); or a `GITLAB_TOKEN` env var / legacy\n  `~/.local/share/opencode/auth.json` as fallbacks\n- Optionally set `GITLAB_INSTANCE_URL` for self-hosted GitLab (defaults to `https://gitlab.com`)\n\n## ⚙️ Configuration\n\n### Environment Variables\n\n```bash\n# Required: GitLab API Token\nexport GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx\n\n# Optional: Custom GitLab Instance (defaults to https://gitlab.com)\nexport GITLAB_INSTANCE_URL=https://gitlab.example.com\n```\n\n### OpenCode Configuration\n\nAdd the following plugin to your opencode configuration `~/.config/opencode/opencode.json`:\n\n```json\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"plugins\": [\"opencode-gitlab-plugin\"]\n}\n```\n\nThe package ships both plugin SDK entrypoints, so it also works on OpenCode v1 with the\nlegacy `plugin` key:\n\n```json\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"plugin\": [\"opencode-gitlab-plugin\"]\n}\n```\n\n### Authentication Storage\n\nThe plugin supports reading tokens from OpenCode's auth storage:\n\n**Location**: `~/.local/share/opencode/auth.json`\n\n**Format**:\n\n```json\n{\n  \"gitlab\": {\n    \"type\": \"oauth\",\n    \"access\": \"your-oauth-token\"\n  }\n}\n```\n\nOr for API tokens:\n\n```json\n{\n  \"gitlab\": {\n    \"type\": \"api\",\n    \"key\": \"glpat-xxxxxxxxxxxxxxxxxxxx\"\n  }\n}\n```\n\n### Token Priority\n\n1. The active GitLab credential in the OpenCode v2 credential store (highest priority)\n2. `GITLAB_TOKEN` environment variable\n3. Legacy OpenCode auth storage (`~/.local/share/opencode/auth.json`)\n4. Error if no token found\n\nA store credential is only used for its own GitLab instance: when `GITLAB_INSTANCE_URL`\npoints to a different instance (for example an `ops.gitlab.net` MCP server), the fallbacks\napply instead.\n\n#### Using the store credential from the MCP server (lazy-mcp)\n\nThe stdio MCP server (`npx opencode-gitlab-plugin`) runs outside OpenCode and cannot reach\nthe credential store directly. While OpenCode runs, the plugin mirrors the active access\ntoken into a private token bridge file (mode `0600`), and the MCP server reads it on every\ntool call. Keep the plugin enabled for this, even when its tools are served through\nlazy-mcp (`\"tools\": false`):\n\n```json\n{\n  \"plugins\": [{ \"package\": \"opencode-gitlab-plugin@latest\", \"options\": { \"tools\": false } }]\n}\n```\n\n- Location: `$OPENCODE_GITLAB_TOKEN_FILE`, else `$XDG_DATA_HOME/opencode-gitlab-plugin/credential.json`,\n  else `~/.local/share/opencode-gitlab-plugin/credential.json`.\n- Only the short-lived access token is shared; the refresh token stays in the store.\n- The plugin re-syncs shortly before the token expires (so OpenCode refreshes it), every\n  10 minutes, and whenever a credential is updated or switched.\n- Disable it with `{ \"options\": { \"tokenBridge\": false } }`.\n\n## 🛠️ Available Tools\n\nThe plugin provides **64 tools** organized into the following categories:\n\n### Merge Request Tools (9 tools)\n\n| Tool                                | Description                                                                                                                  |\n| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |\n| `gitlab_get_merge_request`          | Get details of a specific merge request with title, description, state, author, assignees, reviewers, labels, and diff stats |\n| `gitlab_list_merge_requests`        | List merge requests with filtering by state, scope, and labels                                                               |\n| `gitlab_create_merge_request`       | Create a new merge request (supports target_project_id for fork-to-upstream MRs)                                             |\n| `gitlab_update_merge_request`       | Update merge request title, description, state, assignees, reviewers, and labels                                             |\n| `gitlab_get_mr_changes`             | Get file changes/diffs for a merge request                                                                                   |\n| `gitlab_get_mr_details`             | Get additional MR details (commits or pipelines) with detail_type parameter                                                  |\n| `gitlab_list_merge_request_diffs`   | List file diffs with pagination support for large changesets                                                                 |\n| `gitlab_set_mr_auto_merge`          | Enable auto-merge (MWPS) using GraphQL API when pipeline succeeds                                                            |\n| `gitlab_override_requested_changes` | Bypass a \"requested changes\" merge block (the widget's Bypass button) by setting the override_requested_changes flag         |\n\n### Issue Tools (3 tools)\n\n| Tool                  | Description                                                                  |\n| --------------------- | ---------------------------------------------------------------------------- |\n| `gitlab_create_issue` | Create a new issue with title, description, labels, assignees, and milestone |\n| `gitlab_get_issue`    | Get issue details including state, author, assignees, labels, and comments   |\n| `gitlab_list_issues`  | List issues with filtering by state, labels, assignee, and milestone         |\n\n### Epic Tools (5 tools)\n\n| Tool                        | Description                                                                   |\n| --------------------------- | ----------------------------------------------------------------------------- |\n| `gitlab_get_epic`           | Get epic details with title, description, state, dates, and associated issues |\n| `gitlab_list_epics`         | List epics with filtering by state, author, and labels                        |\n| `gitlab_create_epic`        | Create a new epic in a group                                                  |\n| `gitlab_update_epic`        | Update epic title, description, labels, dates, and state                      |\n| `gitlab_manage_epic_issues` | Manage issues linked to an epic (list, add, remove) with action parameter     |\n\n### Pipeline Tools (7 tools)\n\n| Tool                               | Description                                                                     |\n| ---------------------------------- | ------------------------------------------------------------------------------- |\n| `gitlab_list_pipelines`            | List pipelines with filtering by status, ref, and username                      |\n| `gitlab_get_pipeline`              | Get pipeline details with jobs and status                                       |\n| `gitlab_list_pipeline_jobs`        | List all jobs in a pipeline with optional scope filtering                       |\n| `gitlab_get_job_log`               | Get the log output of a specific CI job                                         |\n| `gitlab_retry_job`                 | Retry a failed or canceled job                                                  |\n| `gitlab_get_pipeline_failing_jobs` | Get only failed jobs for easier debugging                                       |\n| `gitlab_lint_ci_config`            | Validate CI/CD YAML config with mode parameter (content or existing repository) |\n\n### Repository Tools (7 tools)\n\n| Tool                          | Description                                                   |\n| ----------------------------- | ------------------------------------------------------------- |\n| `gitlab_get_file`             | Get file contents from an explicit branch, tag, or commit ref |\n| `gitlab_get_commit`           | Get commit details with metadata, author, and stats           |\n| `gitlab_list_commits`         | List commits with filtering by branch, path, and dates        |\n| `gitlab_get_commit_diff`      | Get diff for a specific commit                                |\n| `gitlab_list_repository_tree` | List files and directories at a given path                    |\n| `gitlab_list_branches`        | List all branches in a repository                             |\n| `gitlab_get_commit_comments`  | Get all commit comments in flat structure                     |\n\n### Search Tools (2 tools)\n\n| Tool                          | Description                                                                                                                                                                     |\n| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `gitlab_search`               | Unified search across all GitLab resources with scope-specific options (projects, issues, merge_requests, milestones, users, blobs, commits, notes, wiki_blobs, group_projects) |\n| `gitlab_documentation_search` | Search GitLab official documentation at docs.gitlab.com                                                                                                                         |\n\n### Work Item Tools (6 tools)\n\n| Tool                           | Description                                              |\n| ------------------------------ | -------------------------------------------------------- |\n| `gitlab_get_work_item`         | Get a work item (unified model for issues, epics, tasks) |\n| `gitlab_list_work_items`       | List work items in a project or group                    |\n| `gitlab_get_work_item_notes`   | Get all comments for a work item                         |\n| `gitlab_create_work_item`      | Create a new work item                                   |\n| `gitlab_update_work_item`      | Update work item title, description, state, and labels   |\n| `gitlab_create_work_item_note` | Add a comment to a work item                             |\n\n### Security Tools (8 tools)\n\n| Tool                                      | Description                                                               |\n| ----------------------------------------- | ------------------------------------------------------------------------- |\n| `gitlab_list_vulnerabilities`             | List security vulnerabilities with filtering by state, severity, and type |\n| `gitlab_get_vulnerability_details`        | Get detailed vulnerability information with remediation                   |\n| `gitlab_create_vulnerability_issue`       | Create an issue linked to vulnerabilities (GraphQL)                       |\n| `gitlab_dismiss_vulnerability`            | Dismiss vulnerability with reason (GraphQL)                               |\n| `gitlab_confirm_vulnerability`            | Confirm a vulnerability as valid (GraphQL)                                |\n| `gitlab_revert_vulnerability_to_detected` | Revert vulnerability state (GraphQL)                                      |\n| `gitlab_update_vulnerability_severity`    | Update vulnerability severity level (GraphQL)                             |\n| `gitlab_link_vulnerability_to_issue`      | Link vulnerabilities to existing issue (GraphQL)                          |\n\n**Note**: All GraphQL-based security tools include automatic GID (Global ID) format validation.\n\n### TODO Tools (3 tools)\n\n| Tool                    | Description                                            |\n| ----------------------- | ------------------------------------------------------ |\n| `gitlab_list_todos`     | List TODO items with cursor-based pagination (GraphQL) |\n| `gitlab_mark_todo_done` | Mark TODOs as done with action parameter (one or all)  |\n| `gitlab_get_todo_count` | Get count of pending TODOs (GraphQL)                   |\n\n### Project & User Tools (3 tools)\n\n| Tool                          | Description                        |\n| ----------------------------- | ---------------------------------- |\n| `gitlab_get_project`          | Get project details and metadata   |\n| `gitlab_list_project_members` | List all members of a project      |\n| `gitlab_get_current_user`     | Get authenticated user information |\n\n### Discussion Tools (4 tools)\n\n| Tool                        | Description                                                                                                              |\n| --------------------------- | ------------------------------------------------------------------------------------------------------------------------ |\n| `gitlab_list_discussions`   | List discussions (comment threads) on any GitLab resource (MRs, issues, epics, commits, snippets) with cursor pagination |\n| `gitlab_get_discussion`     | Get a specific discussion thread with all replies from any resource type                                                 |\n| `gitlab_create_discussion`  | Create a new discussion thread OR reply to an existing one (supports code-position comments for MRs and commits)         |\n| `gitlab_resolve_discussion` | Mark a discussion thread as resolved or unresolve it (MRs and issues only)                                               |\n\n### Notes Tools (3 tools)\n\n| Tool                 | Description                                                                                                                                                                                |\n| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| `gitlab_list_notes`  | List all notes/comments on any resource (MRs, issues, epics, snippets) with cursor-based pagination                                                                                        |\n| `gitlab_get_note`    | Get a single note by ID (issues and epics only)                                                                                                                                            |\n| `gitlab_create_note` | Add a simple comment to any resource (for thread replies, use `gitlab_create_discussion`). Pass `internal: true` to post a confidential/internal note on merge requests, issues, and epics |\n\n### Audit Event Tools (3 tools)\n\n| Tool                                | Description                                              |\n| ----------------------------------- | -------------------------------------------------------- |\n| `gitlab_list_project_audit_events`  | List audit events for a project (requires owner role)    |\n| `gitlab_list_group_audit_events`    | List audit events for a group (requires owner role)      |\n| `gitlab_list_instance_audit_events` | List instance-level audit events (requires admin access) |\n\n### Git Command Tool (1 tool)\n\n| Tool              | Description                                                                                            |\n| ----------------- | ------------------------------------------------------------------------------------------------------ |\n| `run_git_command` | Execute safe, read-only git commands (status, log, show, diff, blame, etc.) with security restrictions |\n\n### Wiki Tools (1 tool)\n\n| Tool                   | Description                        |\n| ---------------------- | ---------------------------------- |\n| `gitlab_get_wiki_page` | Get wiki page content and metadata |\n\n## 💡 Usage Examples\n\n### Example 1: Create and Manage Issues\n\n```javascript\nimport { allTools } from 'opencode-gitlab-plugin';\n\nconst plugin = { tool: allTools };\n\n// Create a new issue\nconst issue = await plugin.tool.gitlab_create_issue.execute({\n  project_id: 'my-group/my-project',\n  title: 'Fix authentication bug',\n  description:\n    '## Problem\\n\\nUsers cannot login with OAuth.\\n\\n## Steps to Reproduce\\n1. Go to login page\\n2. Click OAuth button\\n3. Error occurs',\n  labels: 'bug,authentication,priority::high',\n  assignee_ids: [42],\n  milestone_id: 10,\n  due_date: '2025-12-31',\n});\n\nconsole.log(`Issue created: ${issue.web_url}`);\n\n// Add a comment to the issue (using unified notes tool)\nawait plugin.tool.gitlab_create_note.execute({\n  resource_type: 'issue',\n  project_id: 'my-group/my-project',\n  iid: issue.iid,\n  body: 'I will start working on this today.',\n});\n\n// Add a confidential/internal note (visible only to project members; merge requests, issues, and epics)\nawait plugin.tool.gitlab_create_note.execute({\n  resource_type: 'issue',\n  project_id: 'my-group/my-project',\n  iid: issue.iid,\n  body: 'Internal triage note - not visible to the reporter.',\n  internal: true,\n});\n\n// List all issues with specific labels\nconst issues = await plugin.tool.gitlab_list_issues.execute({\n  project_id: 'my-group/my-project',\n  labels: 'bug',\n  state: 'opened',\n});\n```\n\n### Example 2: Review Merge Request\n\n```javascript\n// Get merge request details\nconst mr = await plugin.tool.gitlab_get_merge_request.execute({\n  project_id: 'gitlab-org/gitlab',\n  mr_iid: 12345,\n  include_changes: true,\n});\n\n// Get discussions (unified tool supports all resource types)\nconst discussions = await plugin.tool.gitlab_list_discussions.execute({\n  resource_type: 'merge_request',\n  project_id: 'gitlab-org/gitlab',\n  iid: 12345,\n});\n\n// Add a review comment (creates a new discussion)\nawait plugin.tool.gitlab_create_discussion.execute({\n  resource_type: 'merge_request',\n  project_id: 'gitlab-org/gitlab',\n  iid: 12345,\n  body: 'LGTM! Great work on this feature.',\n});\n\n// Reply to an existing discussion thread\nawait plugin.tool.gitlab_create_discussion.execute({\n  resource_type: 'merge_request',\n  project_id: 'gitlab-org/gitlab',\n  iid: 12345,\n  discussion_id: discussions.discussions.nodes[0].id,\n  body: 'Thanks for addressing the feedback!',\n});\n```\n\n### Example 3: Debug Failed Pipeline\n\n```javascript\n// List recent pipelines\nconst pipelines = await plugin.tool.gitlab_list_pipelines.execute({\n  project_id: 'my-group/my-project',\n  status: 'failed',\n  limit: 5,\n});\n\n// Get failed jobs\nconst failedJobs = await plugin.tool.gitlab_get_pipeline_failing_jobs.execute({\n  project_id: 'my-group/my-project',\n  pipeline_id: pipelines[0].id,\n});\n\n// Get job logs\nfor (const job of failedJobs) {\n  const log = await plugin.tool.gitlab_get_job_log.execute({\n    project_id: 'my-group/my-project',\n    job_id: job.id,\n  });\n  console.log(`Job ${job.name} failed with:\\n${log}`);\n}\n\n// Retry failed jobs\nawait plugin.tool.gitlab_retry_job.execute({\n  project_id: 'my-group/my-project',\n  job_id: failedJobs[0].id,\n});\n```\n\n### Example 4: Create and Manage Epic\n\n```javascript\n// Create an epic\nconst epic = await plugin.tool.gitlab_create_epic.execute({\n  group_id: 'my-group',\n  title: 'Q1 2025 Features',\n  description: 'All features planned for Q1 2025',\n  start_date: '2025-01-01',\n  end_date: '2025-03-31',\n  labels: 'Q1,planning',\n});\n\n// Add issues to epic\nawait plugin.tool.gitlab_add_issue_to_epic.execute({\n  group_id: 'my-group',\n  epic_iid: epic.iid,\n  issue_id: 123,\n});\n\n// List all issues in epic\nconst epicIssues = await plugin.tool.gitlab_list_epic_issues.execute({\n  group_id: 'my-group',\n  epic_iid: epic.iid,\n});\n\n// Add a comment (creates a new discussion)\nawait plugin.tool.gitlab_create_discussion.execute({\n  resource_type: 'epic',\n  group_id: 'my-group',\n  iid: epic.iid,\n  body: 'Epic created and issues linked successfully!',\n});\n```\n\n### Example 5: Search and Analyze Code\n\n```javascript\n// Search for code containing specific patterns\nconst codeResults = await plugin.tool.gitlab_blob_search.execute({\n  search: 'async function processPayment',\n  project_id: 'my-group/my-project',\n  limit: 10,\n});\n\n// Search for related issues\nconst issues = await plugin.tool.gitlab_issue_search.execute({\n  search: 'payment processing bug',\n  project_id: 'my-group/my-project',\n  state: 'opened',\n});\n\n// Get file content\nconst fileContent = await plugin.tool.gitlab_get_file.execute({\n  project_id: 'my-group/my-project',\n  file_path: 'src/payment/processor.ts',\n  ref: 'main',\n});\n```\n\n### Example 6: Manage TODOs (GraphQL with Pagination)\n\n```javascript\n// Get TODO count (uses GraphQL)\nconst todoCount = await plugin.tool.gitlab_get_todo_count.execute({});\n\n// List pending TODOs with cursor-based pagination\nconst firstPage = await plugin.tool.gitlab_list_todos.execute({\n  state: 'pending',\n  type: 'MergeRequest',\n  first: 20,\n});\n\n// Get next page using cursor\nif (firstPage.todos.pageInfo.hasNextPage) {\n  const nextPage = await plugin.tool.gitlab_list_todos.execute({\n    state: 'pending',\n    type: 'MergeRequest',\n    first: 20,\n    after: firstPage.todos.pageInfo.endCursor,\n  });\n}\n\n// Mark specific TODO as done\nawait plugin.tool.gitlab_mark_todo_done.execute({\n  todo_id: firstPage.todos.nodes[0].id,\n});\n\n// Mark all TODOs as done\nawait plugin.tool.gitlab_mark_all_todos_done.execute({});\n```\n\n### Example 7: Create Commit with Multiple Files\n\n```javascript\n// Create a commit with multiple file operations\nconst commit = await plugin.tool.gitlab_create_commit.execute({\n  project_id: 'my-group/my-project',\n  branch: 'feature/new-api',\n  commit_message: 'feat: add new API endpoints',\n  actions: [\n    {\n      action: 'create',\n      file_path: 'src/api/v2/users.ts',\n      content: 'export const getUsers = async () => { ... }',\n    },\n    {\n      action: 'update',\n      file_path: 'src/api/index.ts',\n      content: 'export * from \"./v2/users\";',\n    },\n    {\n      action: 'delete',\n      file_path: 'src/api/deprecated.ts',\n    },\n  ],\n  author_name: 'John Doe',\n  author_email: 'john@example.com',\n});\n```\n\n### Example 8: Enable Auto-Merge (MWPS)\n\n```javascript\n// Get merge request to retrieve current HEAD SHA\nconst mr = await plugin.tool.gitlab_get_merge_request.execute({\n  project_id: 'my-group/my-project',\n  mr_iid: 123,\n});\n\n// Enable auto-merge when pipeline succeeds (GraphQL)\nconst result = await plugin.tool.gitlab_set_mr_auto_merge.execute({\n  project_id: 'my-group/my-project',\n  mr_iid: 123,\n  sha: mr.sha, // Required to prevent race conditions\n  strategy: 'MERGE_WHEN_CHECKS_PASS', // or 'ADD_TO_MERGE_TRAIN_WHEN_CHECKS_PASS'\n});\n\nconsole.log(`Auto-merge enabled: ${result.mergeRequest.autoMergeEnabled}`);\n```\n\n### Example 9: Manage Security Vulnerabilities\n\n```javascript\n// List vulnerabilities in a project\nconst vulnerabilities = await plugin.tool.gitlab_list_vulnerabilities.execute({\n  project_id: 'my-group/my-project',\n  state: 'detected',\n  severity: 'high',\n  report_type: 'sast',\n});\n\n// Create an issue for critical vulnerabilities\nconst issue = await plugin.tool.gitlab_create_vulnerability_issue.execute({\n  project_path: 'my-group/my-project',\n  vulnerability_ids: ['gid://gitlab/Vulnerability/123', 'gid://gitlab/Vulnerability/124'],\n});\n\n// Dismiss a false positive\nawait plugin.tool.gitlab_dismiss_vulnerability.execute({\n  vulnerability_id: 'gid://gitlab/Vulnerability/125',\n  reason: 'FALSE_POSITIVE',\n  comment: 'This is a test file and not part of production code',\n});\n\n// Confirm a real vulnerability\nawait plugin.tool.gitlab_confirm_vulnerability.execute({\n  vulnerability_id: 'gid://gitlab/Vulnerability/126',\n  comment: 'Confirmed - needs immediate attention',\n});\n\n// Update severity based on assessment\nawait plugin.tool.gitlab_update_vulnerability_severity.execute({\n  vulnerability_ids: ['gid://gitlab/Vulnerability/127'],\n  severity: 'CRITICAL',\n  comment: 'Upgrading to critical - affects production authentication',\n});\n\n// Link vulnerabilities to existing issue\nawait plugin.tool.gitlab_link_vulnerability_to_issue.execute({\n  issue_id: 'gid://gitlab/Issue/42',\n  vulnerability_ids: ['gid://gitlab/Vulnerability/128', 'gid://gitlab/Vulnerability/129'],\n});\n```\n\n## 🔧 Development\n\n### Project Structure\n\n```\nopencode-gitlab-plugin/\n├── index.ts                # Package-root entrypoint for local v2 plugin loading\n├── src/\n│   ├── client/              # API client modules\n│   │   ├── base.ts         # Base client with HTTP & GraphQL methods\n│   │   ├── security.ts     # Security/vulnerability management\n│   │   ├── issues.ts       # Issue management\n│   │   ├── merge-requests.ts # Merge request operations\n│   │   ├── pipelines.ts    # CI/CD pipeline operations\n│   │   ├── repository.ts   # Repository operations\n│   │   ├── epics.ts        # Epic management\n│   │   ├── search.ts       # Search operations\n│   │   ├── todos.ts        # TODO management\n│   │   ├── wikis.ts        # Wiki operations\n│   │   ├── work-items.ts   # Work item operations\n│   │   ├── audit.ts        # Audit events\n│   │   ├── git.ts          # Git operations\n│   │   └── index.ts        # Client exports\n│   ├── tools/              # Tool definitions\n│   │   ├── security.ts     # Security tool definitions\n│   │   ├── issues.ts       # Issue tool definitions\n│   │   ├── merge-requests.ts # MR tool definitions\n│   │   ├── pipelines.ts    # Pipeline tool definitions\n│   │   ├── repository.ts   # Repository tool definitions\n│   │   ├── discussions-unified.ts # Unified discussion tools (4 tools)\n│   │   ├── notes-unified.ts # Unified notes tools (3 tools)\n│   │   ├── index.ts        # Aggregated tool registries\n│   │   └── ...             # Other tool definitions\n│   ├── v2/                 # Plugin SDK v2 entry point\n│   │   ├── plugin.ts       # Plugin.define({ id, setup })\n│   │   └── tool-adapter.ts # v1 tool definitions -> v2 tool registrations\n│   ├── index.ts            # Main plugin entry point (v2 setup + v1 server)\n│   ├── utils.ts            # Utility functions\n│   └── validation.ts       # GID validation utilities\n├── tests/                  # Test suite (225 tests)\n│   ├── client/             # Client tests\n│   ├── tools/              # Tool tests\n│   ├── validation.test.ts  # Validation tests\n│   └── utils.test.ts       # Utility tests\n├── dist/                   # Compiled output (generated)\n│   ├── index.js           # ESM bundle\n│   └── index.d.ts         # TypeScript definitions\n├── .husky/                 # Git hooks\n│   ├── commit-msg         # Commitlint hook\n│   └── pre-commit         # Lint-staged hook\n├── .gitlab-ci.yml         # CI/CD pipeline configuration\n├── package.json           # Package metadata\n├── tsconfig.json          # TypeScript configuration\n├── vitest.config.ts       # Vitest test configuration\n├── .eslintrc.json         # ESLint configuration\n├── .prettierrc.json       # Prettier configuration\n├── .commitlintrc.json     # Commitlint configuration\n├── .releaserc.json        # Semantic-release configuration\n├── CHANGELOG.md           # Auto-generated changelog\n├── INSTALLATION.md        # Installation guide\n└── README.md              # This file\n```\n\n### Setup Development Environment\n\n```bash\n# Clone the repository\ngit clone https://gitlab.com/vglafirov/opencode-gitlab-plugin.git\ncd opencode-gitlab-plugin\n\n# Install dependencies\nnpm install\n\n# Build the plugin\nnpm run build\n\n# Watch mode for development\nnpm run dev\n\n# Run linting\nnpm run lint\n\n# Fix linting issues\nnpm run lint:fix\n\n# Format code\nnpm run format\n\n# Check formatting\nnpm run format:check\n```\n\n### Loading a Local Checkout\n\nOpenCode v2 resolves a plugin configured by absolute path by probing\n`<directory>/server` and `<directory>/index` — it does **not** read the package's\n`main`/`exports`. The repository root ships an `index.ts` for exactly this, so point\nthe config at the checkout root:\n\n```json\n{\n  \"plugins\": [{ \"package\": \"/abs/path/to/opencode-gitlab-plugin\" }]\n}\n```\n\nThis loads `src/` directly, so OpenCode's watcher picks up edits without a rebuild.\nConfirm it loaded with `opencode plugin list` — the `gitlab` plugin should be listed.\n\nA path to a _file_ (for example `.../dist/index.js`) is rejected with\n`configured plugin path must be a directory`.\n\n### Git Hooks\n\nThe project uses Husky for Git hooks:\n\n- **pre-commit**: Runs lint-staged to lint and format staged files\n- **commit-msg**: Validates commit messages using commitlint\n\n### Commit Message Convention\n\nThis project follows [Conventional Commits](https://www.conventionalcommits.org/):\n\n```\n<type>(<scope>): <subject>\n\n<body>\n\n<footer>\n```\n\n**Types:**\n\n- `feat`: New feature\n- `fix`: Bug fix\n- `docs`: Documentation changes\n- `style`: Code style changes (formatting, etc.)\n- `refactor`: Code refactoring\n- `perf`: Performance improvements\n- `test`: Adding or updating tests\n- `build`: Build system changes\n- `ci`: CI/CD changes\n- `chore`: Other changes (dependencies, etc.)\n- `revert`: Revert a previous commit\n\n**Examples:**\n\n```bash\ngit commit -m \"feat: add support for GitLab wiki pages\"\ngit commit -m \"fix: handle empty API responses correctly\"\ngit commit -m \"docs: update installation instructions\"\ngit commit -m \"ci: add automated release workflow\"\n```\n\n### Building\n\n```bash\n# Build for production\nnpm run build\n\n# The build process:\n# 1. Compiles TypeScript to ESM\n# 2. Generates type definitions\n# 3. Outputs to dist/ directory\n```\n\n### Testing\n\n```bash\n# Run tests\nnpm test\n\n# Run tests in watch mode\nnpm run test:watch\n\n# Run tests with coverage\nnpm run test:coverage\n```\n\n**Test Coverage:**\n\n- **225 tests** across 25 test files\n- Client tests for all API methods (REST and GraphQL)\n- Tool tests for all tool definitions\n- Validation tests for GID utilities\n- GraphQL method tests for Notes, Discussions, TODOs\n- All tests passing ✅\n\n## 🚀 CI/CD Pipeline\n\n### Pipeline Stages\n\n```mermaid\ngraph LR\n    A[Test] --> B[Build]\n    B --> C[Release]\n\n    A --> A1[Lint]\n    A --> A2[Format Check]\n    A --> A3[Unit Tests]\n\n    B --> B1[TypeScript Build]\n    B --> B2[Generate Types]\n\n    C --> C1[Semantic Release]\n    C --> C2[Publish to Registry]\n    C --> C3[Create Git Tag]\n    C --> C4[Update Changelog]\n```\n\n### Pipeline Configuration\n\nThe `.gitlab-ci.yml` defines the following stages:\n\n#### 1. Test Stage\n\n- **test:lint**: Runs ESLint on source code\n- **test:format**: Checks code formatting with Prettier\n- **test:unit**: Runs unit tests (placeholder)\n\n#### 2. Build Stage\n\n- **build**: Compiles TypeScript and generates artifacts\n  - Uses tsup for bundling\n  - Generates ESM output\n  - Creates TypeScript definitions\n  - Artifacts expire in 1 week\n\n#### 3. Release Stage\n\n- **release**: Automated versioning and publishing\n  - Only runs on main branch\n  - Uses semantic-release\n  - Publishes to GitLab Package Registry\n  - Creates Git tags\n  - Updates CHANGELOG.md\n  - Artifacts never expire\n\n### Semantic Release Workflow\n\n```mermaid\nsequenceDiagram\n    participant Dev as Developer\n    participant Git as Git Repository\n    participant CI as GitLab CI\n    participant SR as Semantic Release\n    participant Reg as Package Registry\n\n    Dev->>Git: Push to main branch\n    Git->>CI: Trigger pipeline\n    CI->>CI: Run tests\n    CI->>CI: Build package\n    CI->>SR: Run semantic-release\n    SR->>SR: Analyze commits\n    SR->>SR: Determine version\n    SR->>SR: Generate changelog\n    SR->>Git: Create tag & commit\n    SR->>Reg: Publish package\n    SR->>Git: Create GitLab release\n```\n\n### Release Process\n\nThe release process is fully automated using semantic-release:\n\n1. **Commit Analysis**: Analyzes commit messages since last release\n2. **Version Calculation**: Determines next version based on commit types\n   - `fix:` → Patch version (1.0.x)\n   - `feat:` → Minor version (1.x.0)\n   - `BREAKING CHANGE:` → Major version (x.0.0)\n3. **Changelog Generation**: Updates CHANGELOG.md\n4. **Package Publishing**: Publishes to GitLab Package Registry\n5. **Git Tagging**: Creates and pushes version tag\n6. **GitLab Release**: Creates release notes on GitLab\n\n### Environment Variables\n\nThe CI/CD pipeline uses the following variables:\n\n- `CI_JOB_TOKEN`: GitLab CI token (automatic)\n- `CI_PROJECT_ID`: Project ID (automatic)\n- `CI_API_V4_URL`: GitLab API URL (automatic)\n- `HUSKY`: Set to `0` to disable hooks in CI\n\n## 📚 API Reference\n\n### GitLabApiClient Class\n\nThe core API client that handles all GitLab REST API interactions.\n\n#### Constructor\n\n```typescript\nconstructor(instanceUrl: string, token: string)\n```\n\n#### HTTP Methods\n\n```typescript\nasync fetch<T>(method: string, path: string, body?: unknown): Promise<T>\nasync fetchText(method: string, path: string): Promise<string>\n```\n\n#### GraphQL Methods\n\n```typescript\n/**\n * Execute a GraphQL query or mutation\n * @template T - The expected type of the data field in the GraphQL response\n * @param query - The GraphQL query or mutation string\n * @param variables - Optional variables for the query\n * @returns The data from the GraphQL response\n */\nasync fetchGraphQL<T>(query: string, variables?: Record<string, unknown>): Promise<T>\n```\n\n**Features:**\n\n- Full TypeScript type safety with generic return types\n- Automatic error handling for both HTTP and GraphQL errors\n- Support for query variables\n- Cursor-based pagination support for large result sets\n- Used by TODOs, Notes, Discussions, Auto-merge, and Security tools\n\n**Example:**\n\n```typescript\nconst result = await client.fetchGraphQL<{ vulnerability: { id: string } }>(\n  `mutation($id: VulnerabilityID!) {\n    vulnerabilityConfirm(input: { id: $id }) {\n      vulnerability { id state }\n      errors\n    }\n  }`,\n  { id: 'gid://gitlab/Vulnerability/123' }\n);\n```\n\n**Pagination Example:**\n\n```typescript\n// First page\nconst page1 = await plugin.tool.gitlab_list_todos.execute({ first: 20 });\n// Navigate with cursor\nconst page2 = await plugin.tool.gitlab_list_todos.execute({\n  first: 20,\n  after: page1.todos.pageInfo.endCursor,\n});\n```\n\n#### Project ID Encoding\n\n```typescript\nprivate encodeProjectId(projectId: string): string\n```\n\nHandles URL encoding for project paths (e.g., `gitlab-org/gitlab` → `gitlab-org%2Fgitlab`)\n\n### Authentication Functions\n\n#### readTokenFromAuthStorage\n\n```typescript\nfunction readTokenFromAuthStorage(): string | undefined;\n```\n\nReads GitLab token from OpenCode auth storage (`~/.local/share/opencode/auth.json`).\n\nSupports:\n\n- OAuth tokens: `{ type: \"oauth\", access: \"token\" }`\n- API tokens: `{ type: \"api\", key: \"token\" }`\n\n#### getGitLabClient\n\n```typescript\nfunction getGitLabClient(): GitLabApiClient;\n```\n\nCreates and returns a configured GitLab API client.\n\nPriority:\n\n1. `GITLAB_TOKEN` environment variable\n2. OpenCode auth storage\n3. Throws error if no token found\n\n### Validation Functions\n\n#### isValidGid\n\n```typescript\nfunction isValidGid(gid: string, expectedType?: string): boolean;\n```\n\nValidates GitLab Global ID (GID) format.\n\n**Parameters:**\n\n- `gid` - The GID to validate (e.g., `gid://gitlab/Vulnerability/123`)\n- `expectedType` - Optional expected resource type (e.g., `'Vulnerability'`, `'Issue'`)\n\n**Returns:** `true` if valid, `false` otherwise\n\n**Example:**\n\n```typescript\nisValidGid('gid://gitlab/Vulnerability/123'); // true\nisValidGid('gid://gitlab/Issue/456', 'Issue'); // true\nisValidGid('gid://gitlab/Vulnerability/123', 'Issue'); // false (wrong type)\nisValidGid('invalid-gid'); // false\n```\n\n#### validateGid\n\n```typescript\nfunction validateGid(gid: string, expectedType?: string): void;\n```\n\nValidates GID format and throws descriptive error if invalid.\n\n**Parameters:**\n\n- `gid` - The GID to validate\n- `expectedType` - Optional expected resource type\n\n**Throws:** `Error` with descriptive message if GID format is invalid\n\n**Example:**\n\n```typescript\nvalidateGid('gid://gitlab/Vulnerability/123'); // No error\nvalidateGid('invalid-gid'); // Throws: \"Invalid GitLab Global ID: 'invalid-gid'. Expected format: gid://gitlab/ResourceType/{id}\"\nvalidateGid('gid://gitlab/Issue/123', 'Vulnerability'); // Throws: \"Invalid GitLab Global ID of type 'Vulnerability'...\"\n```\n\n**Usage in Security Tools:**\n\nAll GraphQL-based security tools automatically validate GID parameters:\n\n- `createVulnerabilityIssue()` - validates vulnerability IDs\n- `dismissVulnerability()` - validates vulnerability ID\n- `confirmVulnerability()` - validates vulnerability ID\n- `revertVulnerability()` - validates vulnerability ID\n- `updateVulnerabilitySeverity()` - validates vulnerability IDs\n- `linkVulnerabilityToIssue()` - validates both issue ID and vulnerability IDs\n\n### Tool Schema Validation\n\nAll tools use Zod for runtime validation:\n\n```typescript\nimport { tool } from '@opencode-ai/plugin';\nconst z = tool.schema; // Zod v4 compatible\n\n// Example tool definition\ngitlab_get_merge_request: tool({\n  description: 'Get details of a specific merge request',\n  args: {\n    project_id: z.string().describe('The project ID or URL-encoded path'),\n    mr_iid: z.number().describe('The internal ID of the merge request'),\n    include_changes: z.boolean().optional().describe('Include file changes'),\n  },\n  execute: async (args, ctx) => {\n    // Implementation\n  },\n});\n```\n\n### Error Handling\n\nAll API calls include comprehensive error handling:\n\n```typescript\nif (!response.ok) {\n  const errorText = await response.text();\n  throw new Error(`GitLab API error ${response.status}: ${errorText}`);\n}\n```\n\n### Response Formatting\n\nAll tool responses are JSON-formatted:\n\n```typescript\nreturn JSON.stringify(result, null, 2);\n```\n\n## 🔐 Security Considerations\n\n### Token Storage\n\n- **Environment Variables**: Recommended for CI/CD and production\n- **Auth Storage**: Convenient for local development\n- **Never commit tokens**: Use `.gitignore` for sensitive files\n\n### API Permissions\n\nThe plugin requires a GitLab token with appropriate scopes:\n\n- `api`: Full API access (recommended)\n- `read_api`: Read-only access (limited functionality)\n- `read_repository`: Repository read access\n- `write_repository`: Repository write access (for commits)\n\n### Rate Limiting\n\nGitLab API has rate limits:\n\n- **Authenticated requests**: 2,000 requests per minute\n- **Unauthenticated requests**: 10 requests per minute\n\nThe plugin does not implement rate limiting logic. Consider implementing retry logic in your application.\n\n### HTTPS Only\n\nThe plugin enforces HTTPS for all API calls. HTTP URLs are not supported.\n\n## 🤝 Contributing\n\nContributions are welcome! Please see our [Contributing Guide](https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/blob/main/CONTRIBUTING.md) for detailed guidelines on:\n\n- Code style and conventions\n- Development workflow\n- Testing requirements\n- Submitting merge requests\n- Developer Certificate of Origin and License\n\n**Quick Start for Contributors**:\n\n1. **Commit Messages**: Use conventional commits format\n\n   ```\n   feat(scope): add new feature\n   fix(scope): fix bug\n   docs(scope): update documentation\n   ```\n\n2. **Code Quality**: Ensure all checks pass\n\n   ```bash\n   npm run lint\n   npm test\n   ```\n\n3. **Testing**: Add tests for new features\n\n## 🔗 Links\n\n- [GitLab Repository](https://gitlab.com/vglafirov/opencode-gitlab-plugin)\n- [npm Package](https://www.npmjs.com/package/opencode-gitlab-plugin)\n- [Issue Tracker](https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues)\n- [Merge Requests](https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/merge_requests)\n- [Contributing Guide](https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/blob/main/CONTRIBUTING.md)\n- [Changelog](https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/blob/main/CHANGELOG.md)\n- [CI/CD Pipelines](https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/pipelines)\n- [GitLab API Documentation](https://docs.gitlab.com/ee/api/)\n- [OpenCode Plugin SDK](https://github.com/opencode-ai/plugin)\n\n## 🙏 Acknowledgments\n\n- **OpenCode Team**: For the plugin SDK and framework\n- **GitLab**: For the comprehensive REST API\n- **Contributors**: All contributors to this project\n\n## 📞 Support\n\nFor questions, issues, or feature requests:\n\n1. **Check existing issues**: <https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/issues>\n2. **Create new issue**: Use issue templates for bugs or features\n3. **Discussions**: Use GitLab discussions for questions\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](https://gitlab.com/vglafirov/opencode-gitlab-plugin/-/blob/main/LICENSE) file for details.\n\n---\n\n**Made with ❤️ for the OpenCode community**\n\n---\n","readmeFilename":"README.md"}