From 22a4c4078a2ddba85dbe9c47330371fa83548d80 Mon Sep 17 00:00:00 2001 From: Jira Coding Agent Date: Tue, 30 Jun 2026 04:22:13 +0000 Subject: [PATCH] fix: include premium models in agent model selection list The model selection in the atlascode extension was missing premium models (e.g. Claude Sonnet, Claude Opus) that were visible in the Jira web UI. Added include_premium=true query parameter to the /v3/agent-models API call so the extension fetches the full model list including premium models. Fixes: FLOW-2410 Co-authored-by: Evan Cook --- CHANGELOG.md | 6 + package-lock.json | 117 ++++++++++++------- src/rovo-dev/client/rovoDevApiClient.test.ts | 37 +++++- src/rovo-dev/client/rovoDevApiClient.ts | 8 +- 4 files changed, 121 insertions(+), 47 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69337d08a..f24ded674 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ ### [Report an Issue](https://github.com/atlassian/atlascode/issues) +## What's new in 4.0.32 + +### Bug Fixes + +- **RovoDev**: Fixed model selection to include premium models (e.g. Claude Sonnet, Claude Opus) by passing `include_premium=true` to the `/v3/agent-models` API, matching the model list shown in Jira. + ## What's new in 4.0.31 ### Bug Fixes diff --git a/package-lock.json b/package-lock.json index 46338c002..0f0d0e41e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -460,6 +460,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@atlaskit/analytics-next/-/analytics-next-11.1.2.tgz", "integrity": "sha512-ftoPtfgLFsW4O7DxhqDP3oAdZ/PjHtd68iYRUNaiAHo04IinMLR3kdJWZ41kd4KWgZTKtcoipFA0heFAJLDVxQ==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@atlaskit/analytics-next-stable-react-context": "1.0.1", "@atlaskit/platform-feature-flags": "^1.1.0", @@ -1644,6 +1645,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@atlaskit/editor-common/-/editor-common-110.8.0.tgz", "integrity": "sha512-TaotK31hkcDQp0BMRauMlQfn0gYuIwU6byDfmwhNxL8HXTEQJKPu99HMJUYhl3FEew8KGMRVdM7GA2Syob9cwA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@atlaskit/activity-provider": "^2.5.0", "@atlaskit/adf-schema": "^51.2.0", @@ -10020,6 +10022,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@atlaskit/icon/-/icon-28.5.0.tgz", "integrity": "sha512-TYaOzVHVIDUwqWsOo45NCTZ1OUTxzj1gFW2MNihUImQZgUt/IOqFM9fgM29GzWKVL3FkG7jQqWHiR7VyhFjfTg==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@atlaskit/platform-feature-flags": "^1.1.0", "@atlaskit/tile": "^0.1.0", @@ -10046,41 +10049,6 @@ "react": "^18.2.0" } }, - "node_modules/@atlaskit/editor-plugin-loom/node_modules/@atlaskit/icon-lab/node_modules/@atlaskit/icon": { - "version": "26.4.1", - "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@atlaskit/icon/-/icon-26.4.1.tgz", - "integrity": "sha512-JyLx9LYF8rYNzcyXUCMDvLqRXtjlzHoIUV7tjFA38TTBR39KFCfqnyes5fMs+u75mBbHnXAnZV+G8cArmbVotQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@atlaskit/platform-feature-flags": "^1.1.0", - "@atlaskit/tokens": "^5.0.0", - "@babel/register": "^7.25.9", - "@babel/runtime": "^7.0.0", - "@compiled/react": "^0.18.3" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/@atlaskit/editor-plugin-loom/node_modules/@atlaskit/icon-lab/node_modules/@atlaskit/tokens": { - "version": "5.6.3", - "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@atlaskit/tokens/-/tokens-5.6.3.tgz", - "integrity": "sha512-oRYrJtzWFzA7ExUHXhFI2h5pM70eXKkOZVj29Ase1ZSCSqN54Ii2KrE69U43pkQzVT05KTq0kV3Uoq3MM6HP3Q==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@atlaskit/ds-lib": "^5.0.0", - "@atlaskit/platform-feature-flags": "^1.1.0", - "@babel/runtime": "^7.0.0", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.20.0", - "bind-event-listener": "^3.0.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, "node_modules/@atlaskit/editor-plugin-loom/node_modules/@atlaskit/react-ufo": { "version": "3.14.15", "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@atlaskit/react-ufo/-/react-ufo-3.14.15.tgz", @@ -10301,6 +10269,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/redux/-/redux-4.2.1.tgz", "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.9.2" } @@ -10319,7 +10288,6 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" } @@ -10330,7 +10298,6 @@ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "license": "MIT", - "peer": true, "bin": { "uuid": "bin/uuid" } @@ -18327,6 +18294,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@atlaskit/link-provider/-/link-provider-4.0.2.tgz", "integrity": "sha512-3MJtvLpu+qoPzELSmcOmJMpDVM5jbQe76r0Kik1KU+TiPuFVQm4TXJr0uV45mAtXLd+Tj4+AbwP0hoL9MtRwCw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@atlaskit/json-ld-types": "^1.4.0", "@atlaskit/link-extractors": "^2.4.0", @@ -19077,7 +19045,6 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@atlaskit/media-core/-/media-core-37.0.0.tgz", "integrity": "sha512-f5SDTglEDeIHMhydg8uQAwHmjMdunaUq3SpIQ0y/cgOP1xOSlCE6p5xry5gjp9+E3n1szxQrbX6MS5uqNuopkQ==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@babel/runtime": "^7.0.0", "eventemitter2": "^4.1.0", @@ -19324,6 +19291,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@atlaskit/media-state/-/media-state-1.8.0.tgz", "integrity": "sha512-5x5Dh8rN4s9OTevOktns5zL5ZOkbrmJpD38NFbTAfizXU907gFVvq6jadgkDXqht32HCJjXWZZjWaO6xMnRxGg==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@atlaskit/media-common": "^12.3.0", "@babel/runtime": "^7.0.0", @@ -20790,6 +20758,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.21.0" }, @@ -23035,6 +23004,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@atlaskit/tokens/-/tokens-6.4.2.tgz", "integrity": "sha512-WaYa+t6eszjMIrXNWhDUy85nTWQWpUeoGxFZnCeCmc0BR3qiKkM+9b04+BgyoNxp1yDj/+pKdAQlOlFkLmiVTw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@atlaskit/ds-lib": "^5.1.0", "@atlaskit/platform-feature-flags": "^1.1.0", @@ -24489,6 +24459,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@babel/core/-/core-7.28.4.tgz", "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -25622,6 +25593,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -25645,6 +25617,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -25759,6 +25732,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -26196,6 +26170,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -26858,6 +26833,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@emotion/cache/-/cache-11.14.0.tgz", "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", "license": "MIT", + "peer": true, "dependencies": { "@emotion/memoize": "^0.9.0", "@emotion/sheet": "^1.4.0", @@ -26892,6 +26868,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@emotion/react/-/react-11.14.0.tgz", "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -26935,6 +26912,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@emotion/styled/-/styled-11.14.1.tgz", "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -29094,6 +29072,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@mui/icons-material/-/icons-material-5.18.0.tgz", "integrity": "sha512-1s0vEZj5XFXDMmz3Arl/R7IncFqJ+WQ95LDp1roHWGDE2oCO3IS4/hmiOv1/8SD9r6B7tv9GLiqVZYHo+6PkTg==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.23.9" }, @@ -29120,6 +29099,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@mui/lab/-/lab-5.0.0-alpha.173.tgz", "integrity": "sha512-Gt5zopIWwxDgGy/MXcp6GueD84xFFugFai4hYiXY0zowJpTVnIrTQCQXV004Q7rejJ7aaCntX9hpPJqCrioshA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.23.9", "@mui/base": "5.0.0-beta.40", @@ -29161,6 +29141,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@mui/material/-/material-5.18.0.tgz", "integrity": "sha512-bbH/HaJZpFtXGvWg3TsBWG4eyt3gah3E7nCNU8GLyRjVoWcA91Vm/T+sjHfUcwgJSw9iLtucfHBoq+qW/T30aA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.23.9", "@mui/core-downloads-tracker": "^5.18.0", @@ -29280,6 +29261,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@mui/styles/-/styles-5.18.0.tgz", "integrity": "sha512-GDgFUfl2MMN8iGrYTuhJ0hHRoja2kVOlXnHb5d3BBQCHFxOBaAPDKQxaNkoAwRf/vBhhwXWDsJA2XlkNHUPBgA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.23.9", "@emotion/hash": "^0.9.1", @@ -29769,6 +29751,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=8.0.0" } @@ -29790,6 +29773,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz", "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=14" }, @@ -29802,6 +29786,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@opentelemetry/core/-/core-1.30.1.tgz", "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, @@ -29826,6 +29811,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz", "integrity": "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", @@ -30231,6 +30217,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@opentelemetry/resources/-/resources-1.30.1.tgz", "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" @@ -30256,6 +30243,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz", "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/resources": "1.30.1", @@ -30282,6 +30270,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@opentelemetry/semantic-conventions/-/semantic-conventions-1.38.0.tgz", "integrity": "sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=14" } @@ -30345,6 +30334,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -30366,7 +30356,8 @@ "version": "1.2.0", "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@react-loosely-lazy/manifest/-/manifest-1.2.0.tgz", "integrity": "sha512-MbDl+1p0eAQK0FbqSXeleFwiv8UQn534frgNAZ2hRfi7Cp+pZe50AwouPy5NNzRbPyLlu5FD7use0+qOaBQYPQ==", - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/@reduxjs/toolkit": { "version": "1.9.7", @@ -30397,6 +30388,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/redux/-/redux-4.2.1.tgz", "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.9.2" } @@ -30982,6 +30974,7 @@ "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -31266,6 +31259,7 @@ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -31539,6 +31533,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@types/node/-/node-22.18.8.tgz", "integrity": "sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -31617,6 +31612,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@types/react/-/react-18.3.25.tgz", "integrity": "sha512-oSVZmGtDPmRZtVDqvdKUi/qgCsWp5IDY29wp8na8Bj4B3cc99hfNzvNhlMkVVxctkAOGUA3Km7MMpBHAnWfcIA==", "license": "MIT", + "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -31819,7 +31815,8 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/@types/vscode/-/vscode-1.96.0.tgz", "integrity": "sha512-qvZbSZo+K4ZYmmDuaodMbAa67Pl6VDQzLKFka6rq+3WUTY4Kro7Bwoi0CuZLO/wema0ygcmpwow7zZfPJTs5jg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/webpack": { "version": "4.41.40", @@ -31936,6 +31933,7 @@ "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.56.1", "@typescript-eslint/types": "8.56.1", @@ -32961,6 +32959,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -33052,6 +33051,7 @@ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -33526,6 +33526,7 @@ "version": "1.16.0", "resolved": "https://packages.atlassian.com/api/npm/npm-remote/axios/-/axios-1.16.0.tgz", "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==", + "peer": true, "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", @@ -33959,6 +33960,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -35158,6 +35160,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -36475,6 +36478,7 @@ "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -36645,6 +36649,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -37519,6 +37524,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/final-form/-/final-form-4.20.10.tgz", "integrity": "sha512-TL48Pi1oNHeMOHrKv1bCJUrWZDcD3DIG6AGYVNOnyZPr7Bd/pStN0pL+lfzF5BNoj/FclaoiaLenk4XUIFVYng==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.10.0" }, @@ -37769,6 +37775,7 @@ "integrity": "sha512-mpafl89VFPJmhnJ1ssH+8wmM2b50n+Rew5x42NeI2U78aRWgtkEtGmctp7iT16UjquJTjorEmIfESj3DxdW84Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.16.7", "chalk": "^4.1.2", @@ -37797,6 +37804,7 @@ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -37906,6 +37914,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/form-data/-/form-data-2.5.5.tgz", "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", "license": "MIT", + "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -38390,6 +38399,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/graphql/-/graphql-16.11.0.tgz", "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", "license": "MIT", + "peer": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -40193,6 +40203,7 @@ "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "30.2.0", "@jest/types": "30.2.0", @@ -41585,6 +41596,7 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -42625,6 +42637,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "license": "MIT", + "peer": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -44200,6 +44213,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -45181,6 +45195,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -45802,6 +45817,7 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -45891,6 +45907,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -46039,10 +46056,11 @@ } }, "node_modules/prosemirror-model": { - "version": "1.25.3", - "resolved": "https://packages.atlassian.com/api/npm/npm-remote/prosemirror-model/-/prosemirror-model-1.25.3.tgz", - "integrity": "sha512-dY2HdaNXlARknJbrManZ1WyUtos+AP97AmvqdOQtWtrrC5g4mohVX5DTi9rXNFSk09eczLq9GuNTtq3EfMeMGA==", + "version": "1.25.9", + "resolved": "https://packages.atlassian.com/api/npm/npm-remote/prosemirror-model/-/prosemirror-model-1.25.9.tgz", + "integrity": "sha512-pRTklkDDMMRopyoAcrr9wV/8g/RYgrLHBuJAb5hlEuYZRdm5yqmPjWId83fpBwPpSFqEdja0H7Dfd7z1X/npcA==", "license": "MIT", + "peer": true, "dependencies": { "orderedmap": "^2.0.0" } @@ -46063,6 +46081,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/prosemirror-state/-/prosemirror-state-1.4.3.tgz", "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-transform": "^1.0.0", @@ -46093,6 +46112,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/prosemirror-view/-/prosemirror-view-1.41.2.tgz", "integrity": "sha512-PGS/jETmh+Qjmre/6vcG7SNHAKiGc4vKOJmHMPRmvcUl7ISuVtrtHmH06UDUwaim4NDJfZfVMl7U7JkMMETa6g==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", @@ -46348,6 +46368,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -46395,6 +46416,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -46569,6 +46591,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/react-intl/-/react-intl-5.25.1.tgz", "integrity": "sha512-pkjdQDvpJROoXLMltkP/5mZb0/XqrqLoPGKUCfbdkP8m6U9xbK40K51Wu+a4aQqTEvEK5lHBk0fWzUV72SJ3Hg==", "license": "BSD-3-Clause", + "peer": true, "dependencies": { "@formatjs/ecma402-abstract": "1.11.4", "@formatjs/icu-messageformat-parser": "2.1.0", @@ -46778,6 +46801,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/react-redux/-/react-redux-7.2.9.tgz", "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.15.4", "@types/react-redux": "^7.1.20", @@ -47589,6 +47613,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/scheduler/-/scheduler-0.19.1.tgz", "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -49276,6 +49301,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, + "peer": true, "engines": { "node": ">=12" }, @@ -49488,6 +49514,7 @@ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -49825,6 +49852,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -49982,6 +50010,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "napi-postinstall": "^0.3.0" }, @@ -50401,6 +50430,7 @@ "resolved": "https://packages.atlassian.com/api/npm/npm-remote/webpack/-/webpack-5.105.0.tgz", "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==", "dev": true, + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -50450,6 +50480,7 @@ "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.6.1", "@webpack-cli/configtest": "^3.0.1", diff --git a/src/rovo-dev/client/rovoDevApiClient.test.ts b/src/rovo-dev/client/rovoDevApiClient.test.ts index eaccac293..3ec0d8614 100644 --- a/src/rovo-dev/client/rovoDevApiClient.test.ts +++ b/src/rovo-dev/client/rovoDevApiClient.test.ts @@ -2041,7 +2041,7 @@ describe('RovoDevApiClient', () => { const result = await client.getAvailableAgentModels(); - expect(mockFetch).toHaveBeenCalledWith('http://localhost:8080/v3/agent-models', { + expect(mockFetch).toHaveBeenCalledWith('http://localhost:8080/v3/agent-models?include_premium=true', { method: 'GET', headers: { accept: 'text/event-stream', @@ -2057,6 +2057,39 @@ describe('RovoDevApiClient', () => { expect(result.models[0].credit_multiplier).toBe('1.5'); }); + it('should pass include_premium=false when includePremium is false', async () => { + const mockAvailableModelsResponse = { + models: [ + { + name: 'GPT-4', + model_id: 'gpt-4', + description: 'Most capable model', + credit_multiplier: '1.5', + }, + ], + }; + const mockResponse = { + status: 200, + json: jest.fn().mockResolvedValue(mockAvailableModelsResponse), + headers: mockStandardResponseHeaders(), + } as unknown as Response; + + mockFetch.mockResolvedValue(mockResponse); + + const result = await client.getAvailableAgentModels(false); + + expect(mockFetch).toHaveBeenCalledWith('http://localhost:8080/v3/agent-models?include_premium=false', { + method: 'GET', + headers: { + accept: 'text/event-stream', + 'Content-Type': 'application/json', + Authorization: 'Bearer sessionToken', + }, + body: undefined, + }); + expect(result).toEqual(mockAvailableModelsResponse); + }); + it('should handle empty models list', async () => { const mockAvailableModelsResponse = { models: [], @@ -2084,7 +2117,7 @@ describe('RovoDevApiClient', () => { mockFetch.mockResolvedValue(mockResponse); await expect(client.getAvailableAgentModels()).rejects.toThrow( - "Failed to fetch '/v3/agent-models API: HTTP 500", + "Failed to fetch '/v3/agent-models?include_premium=true API: HTTP 500", ); }); }); diff --git a/src/rovo-dev/client/rovoDevApiClient.ts b/src/rovo-dev/client/rovoDevApiClient.ts index 745f08b32..e19a1604d 100644 --- a/src/rovo-dev/client/rovoDevApiClient.ts +++ b/src/rovo-dev/client/rovoDevApiClient.ts @@ -359,10 +359,14 @@ export class RovoDevApiClient { } /** Invokes the GET `/v3/agent-models` API. + * @param {boolean} includePremium Whether to include premium models in the response. Defaults to true. * @returns {Promise} An object representing all available agent models. */ - public async getAvailableAgentModels(): Promise { - const response = await this.fetchApi('/v3/agent-models', 'GET'); + public async getAvailableAgentModels( + includePremium: boolean = true, + ): Promise { + const qs = `include_premium=${includePremium ? 'true' : 'false'}`; + const response = await this.fetchApi(`/v3/agent-models?${qs}`, 'GET'); return await response.json(); }