UNPKG

@equinor/fusion-framework-cli

Version:

Command-line toolkit for developing, building, and publishing Fusion Framework applications and portal templates. Provides a unified developer experience from local development to production deployment.

1,035 lines (659 loc) 235 kB
# Change Log ## 15.1.0 ### Minor Changes - c0a1cd5: Bump minimum Node.js engine requirement from `>=20.0.0` to `>=22.22.2`. This change aligns the CLI with `normalize-package-data@9`, which drops support for Node 20 and 21. Node 22 LTS (22.22.2+) and Node 24+ are supported. ## 15.0.6 ### Patch Changes - @equinor/fusion-framework-dev-portal@5.1.13 - @equinor/fusion-framework-dev-server@2.0.9 ## 15.0.5 ### Patch Changes - @equinor/fusion-framework-dev-portal@5.1.12 - @equinor/fusion-framework-dev-server@2.0.8 ## 15.0.4 ### Patch Changes - @equinor/fusion-framework-dev-server@2.0.7 - @equinor/fusion-framework-dev-portal@5.1.11 ## 15.0.3 ### Patch Changes - Updated dependencies [71a7131] - @equinor/fusion-framework-dev-portal@5.1.10 ## 15.0.2 ### Patch Changes - f045ac0: Internal: upgrade `zod` from 4.3.6 to 4.4.3 to resolve validation issues; no public API changes. - @equinor/fusion-framework-dev-portal@5.1.9 - @equinor/fusion-framework-dev-server@2.0.6 ## 15.0.1 ### Patch Changes - a00ba38: Internal: bump `ora` from `9.3.0` to `9.4.0`. - 51e6e50: Internal: bump `simple-git` from `3.35.2` to `3.36.0`. - @equinor/fusion-framework-dev-portal@5.1.8 - @equinor/fusion-framework-dev-server@2.0.5 ## 15.0.0 ### Major Changes - 8d7b8a1: **BREAKING:** Replace CLI authentication backend from `@equinor/fusion-framework-module-msal-node` with `@equinor/fusion-framework-module-azure-identity`. `ffc auth login` and `ffc auth token` now use `InteractiveBrowserCredential` with OS-level token persistence — tokens survive across process restarts without re-prompting. The previous MSAL-based token cache is no longer used; users must re-authenticate with `ffc auth login` after upgrading. Ref: https://github.com/equinor/fusion-core-tasks/issues/1067 ### Patch Changes - 4711dbc: Default the `--debug` flag to `true` when the `RUNNER_DEBUG` environment variable is set. All app, portal, auth, and create commands now automatically enable debug mode in GitHub Actions debug runs without requiring `--debug` in workflow YAML. - Updated dependencies [8d7b8a1] - @equinor/fusion-framework-module-azure-identity@0.2.0 ## 14.2.7 ### Patch Changes - 3005189: Fix 401 Unauthorized responses when loading the portal-config API in the Fusion dev server. The default service worker resource list now includes `/@fusion-api/portal-config` with the CI scope so the service worker injects a Bearer token for portal-config API calls (manifest, config, and bundle fetches) during bootstrap and other direct requests. Also adds `scopes?: string[]` to the `FusionService` type so the type correctly reflects the service discovery response shape and is no longer misleading when services do include scopes. Fixes: https://github.com/equinor/fusion/issues/830 - @equinor/fusion-framework-dev-server@2.0.4 - @equinor/fusion-framework-dev-portal@5.1.7 ## 14.2.6 ### Patch Changes - Updated dependencies [ece8f42] - @equinor/fusion-framework-module-msal-node@4.1.0 ## 14.2.5 ### Patch Changes - @equinor/fusion-framework-dev-portal@5.1.6 - @equinor/fusion-framework-dev-server@2.0.3 ## 14.2.4 ### Patch Changes - 4f71408: Internal: Bump `simple-git` from 3.35.2 to 3.36.0. - ee9c669: Patched transitive security vulnerabilities in build toolchain dependencies: - `serialize-javascript` → 7.0.5 (CPU exhaustion DoS) - `minimatch` → 5.1.8 / 9.0.7 (ReDoS via repeated wildcards) - `brace-expansion` → 2.0.3 / 5.0.5 (zero-step sequence DoS) - Updated dependencies [4f71408] - Updated dependencies [1fc204f] - Updated dependencies [d14caa6] - Updated dependencies [4f71408] - @equinor/fusion-framework-dev-portal@5.1.5 - @equinor/fusion-framework-module-msal-node@4.0.2 - @equinor/fusion-framework-dev-server@2.0.2 ## 14.2.3 ### Patch Changes - b2ee9f1: Internal: republish `@equinor/fusion-framework-cli` after a failed CI publish; no consumer-facing changes are included in this release. ## 14.2.2 ### Patch Changes - 53b725f: Add `/@fusion-api/apps` as a direct service worker resource so auth tokens are injected for app bundle chunk requests in portal mode. Previously, only `/apps-proxy` was registered. When the browser resolved relative chunk imports (e.g. `lib-*.js`) against the rewritten `/@fusion-api/apps/` origin, the service worker did not match the URL and the request was sent without an Authorization header, resulting in 401 errors. - Updated dependencies [53b725f] - @equinor/fusion-framework-dev-portal@5.1.4 ## 14.2.1 ### Patch Changes - 5823e72: Add missing empty `endpoints` field in default fallback for app config - @equinor/fusion-framework-dev-portal@5.1.3 ## 14.2.0 ### Minor Changes - 8c5d77a: Add `portal serve` command for serving built portal templates in a production-like preview environment. The new command starts a dev server that serves pre-built portal files, automatically detecting the build output directory from Vite configuration. ```sh ffc portal serve ffc portal serve --port 5000 --host 0.0.0.0 ffc portal serve --dir ./dist ``` Options include `--port`, `--host`, `--dir`, `--manifest`, `--config`, and `--debug`. ### Patch Changes - Updated dependencies [b733f91] - @equinor/fusion-framework-dev-portal@5.1.2 ## 14.1.1 ### Patch Changes - 8f16c97: Update rollup (4.59.0 → 4.60.1) used to produce the published bundles for both packages. rollup 4.60.1 fixes a bug where side-effect imports could be silently dropped during bundling due to a namespace re-export caching issue ([rollup#6274](https://github.com/rollup/rollup/issues/6274)). Both packages use rollup to bundle their published output, so the fix ensures the emitted artifacts are correct. No API or behaviour changes for consumers. - fe63b78: Internal: update bundled ajv (8.17.1 → 8.18.0) in the CLI. ajv 8.18.0 includes a security fix for CVE-2025-69873 — a ReDoS vulnerability in the `$data` keyword's `pattern` validation. The CLI bundles ajv for portal schema validation, so this patch updates the bundled copy. No CLI API or behaviour changes for consumers. - Updated dependencies [6872aad] - Updated dependencies [5c836fb] - @equinor/fusion-framework-module-msal-node@4.0.1 - @equinor/fusion-framework-dev-server@2.0.1 - @equinor/fusion-framework-dev-portal@5.1.1 ## 14.1.0 ### Minor Changes - d63c376: Add branch annotations to generated manifests for local builds and GitHub Actions push events. ### Patch Changes - Updated dependencies [ffe9b06] - @equinor/fusion-framework-dev-portal@5.1.0 ## 14.0.3 ### Patch Changes - 0e29f2a: Surface clear, actionable error messages when CLI publish commands fail with 401, 403, or MSAL token errors. Previously auth failures produced terse, low-level output like `"401 - This is not allowed for your role"` or a generic `"failed to parse response"` with no guidance, and errors were rethrown causing double-logged stack traces. Now each auth-related failure maps to a structured message that: - Distinguishes **authentication** (401 — missing/expired token) from **authorization** (403 — valid token, insufficient permissions). - Detects MSAL `SilentTokenAcquisitionError` (including when wrapped as `HttpJsonResponseError`) and surfaces the underlying Azure AD error detail. - Lists concrete troubleshooting steps (check `FUSION_TOKEN`, run `ffc auth login`, verify `--scope`, confirm app registration). - Warns when `FUSION_TOKEN` is set so users understand the CLI is using the env token instead of their interactive session. - Links directly to the CLI auth and publish docs. This applies to all publish-related CLI commands: `app publish` (check, upload, tag), `portal publish` (upload, tag), `portal config publish`, and `app config publish`. Errors now log and exit cleanly instead of throwing. Fixes: https://github.com/equinor/fusion-framework/issues/4316 ## 14.0.2 ### Patch Changes - Updated dependencies [ed3786d] - @equinor/fusion-framework-dev-portal@5.0.1 ## 14.0.1 ### Patch Changes - 9fceca5: Internal: rebuild package ## 14.0.0 ### Major Changes - abffa53: Major version bump for Fusion Framework React 19 release. All packages are bumped to the next major version as part of the React 19 upgrade. This release drops support for React versions below 18 and includes breaking changes across the framework. **Breaking changes:** - Peer dependencies now require React 18 or 19 (`^18.0.0 || ^19.0.0`) - React Router upgraded from v6 to v7 - Navigation module refactored with new history API - `renderComponent` and `renderApp` now use `createRoot` API **Migration:** - Update your React version to 18.0.0 or higher before upgrading - Replace `NavigationProvider.createRouter()` with `@equinor/fusion-framework-react-router` - See individual package changelogs for package-specific migration steps ### Minor Changes - abffa53: Add automatic support for `?raw` imports in Vite builds. The CLI now automatically includes the `rawImportsPlugin` in Vite configurations, enabling `?raw` imports for markdown files (and other configured extensions) without manual plugin configuration. ```typescript import readmeContent from "../../README.md?raw"; ``` This ensures consistent behavior across all Fusion Framework CLI builds. - abffa53: Add `app serve` command to serve built applications with the dev-portal. The new `serve` command provides a production-like preview environment for testing built applications locally. It serves your built application through the dev-portal, similar to the `dev` command but using production-built files. ```sh pnpm fusion-framework-cli app serve pnpm fusion-framework-cli app serve --port 5000 pnpm fusion-framework-cli app serve --dir ./dist --host 0.0.0.0 ``` The command automatically detects the build directory from your Vite configuration and provides options for custom port, host, directory, manifest, and config files. The application must be built first using `ffc app build` before serving. - abffa53: Add route schema support to app manifests for documentation and API schema generation. **New Features:** - **module-app**: Added `RouteSchemaEntry` type and `routes` field to `AppManifest` interface - **cli**: Added `RouteSchemaEntry` type export for app manifest generation Route schemas allow applications to document their routes in app manifests, enabling automatic API documentation and schema generation. The `RouteSchemaEntry` type represents a route with its path, description, and optional parameter/search schemas. ```typescript import type { RouteSchemaEntry, AppManifest, } from "@equinor/fusion-framework-module-app"; const manifest: AppManifest = { appKey: "my-app", displayName: "My App", description: "My app description", type: "standalone", routes: [ ["/", "Home page"], ["/products", "Products listing page"], ["/products/:id", "Product detail page", { id: "Product ID" }], ], }; ``` ### Patch Changes - ae92f13: Require `simple-git` 3.32.3 or newer in published package manifests to align installs with the upstream fix for CVE-2026-28292. This does not change the CLI API. It tightens the minimum allowed dependency version so fresh installs and manifest-based scanners resolve the first safe `simple-git` release. - c123c39: chore: bump simple-git from 3.32.3 to 3.33.0 Includes security improvements: - Pathspec input sanitization for git.clone() and git.mirror() - Enhanced git -c safety checks - 3de232c: fix(cli): break turbo workspace cycle for AI plugins Upgrade turbo from 2.8.10 to 2.8.14. This version introduces stricter workspace cycle detection, requiring the AI plugin dependencies to be moved from the CLI package's devDependencies to the root package.json. The CLI plugins are now configured at the repository root (fusion-cli.config.ts) instead of in the packages/cli package, ensuring a clean workspace dependency graph for turbo's build scheduler. This change has no impact on the published CLI package's public API. Plugins continue to be wired identically; only the source of the wire definition has changed. Additional improvements from turbo 2.8.14: - Fix: Ensures turbo watch mode respects task dependencies on first run - Perf: Skip irrelevant packages for faster monorepo builds - Feature: AI agent telemetry support in turbo traces - 32bcf83: Bump `vite` from `7.3.1` to `8.0.0`. Vite 8 replaces Rollup with Rolldown and esbuild with Oxc for faster builds. No breaking API changes affect this codebase. The `dev-server` peerDependency is widened to accept both Vite 7 and Vite 8. - Updated dependencies [abffa53] - Updated dependencies [abffa53] - Updated dependencies [abffa53] - Updated dependencies [abffa53] - Updated dependencies [abffa53] - Updated dependencies [abffa53] - Updated dependencies [abffa53] - Updated dependencies [aa35c46] - Updated dependencies [abffa53] - Updated dependencies [abffa53] - Updated dependencies [32bcf83] - Updated dependencies [abffa53] - @equinor/fusion-framework-dev-portal@5.0.0 - @equinor/fusion-framework-dev-server@2.0.0 - @equinor/fusion-framework-module-msal-node@4.0.0 - @equinor/fusion-framework-vite-plugin-raw-imports@2.0.0 - @equinor/fusion-imports@2.0.0 ## 13.3.18 ### Patch Changes - [#4167](https://github.com/equinor/fusion-framework/pull/4167) [`35afdc9`](https://github.com/equinor/fusion-framework/commit/35afdc9d818818f86d2dc8f985466771cd05e7e5) Thanks [@Noggling](https://github.com/Noggling)! - Internal: update portal manifest build annotation validation to accept `null` values (`string | null | undefined`) and document the nullish handling behavior. ## 13.3.17 ### Patch Changes - [#4160](https://github.com/equinor/fusion-framework/pull/4160) [`e2fb579`](https://github.com/equinor/fusion-framework/commit/e2fb579f82bf54c3631ac736583d6766450d9d8e) Thanks [@Noggling](https://github.com/Noggling)! - Fix portal manifest validation failing due to undefined annotation values. The `annotations` schema now accepts optional string values, allowing CI/CD environment annotations with undefined fields to pass validation. Fixes: https://github.com/equinor/fusion-core-tasks/issues/502 ## 13.3.16 ### Patch Changes - [#4122](https://github.com/equinor/fusion-framework/pull/4122) [`0a3a23c`](https://github.com/equinor/fusion-framework/commit/0a3a23c230778d64c23fa3008d59d80908d44f45) Thanks [@dependabot](https://github.com/apps/dependabot)! - Internal: update simple-git to 3.32.3 to include upstream hardening for unsafe clone and protocol handling. - [#4070](https://github.com/equinor/fusion-framework/pull/4070) [`5cc81f5`](https://github.com/equinor/fusion-framework/commit/5cc81f58ad159f9308b1fe028f04629c407dac37) Thanks [@dependabot](https://github.com/apps/dependabot)! - Internal: update the CLI's bundled Ajv schema validation dependency to 8.18.0 to address a security advisory. No public API changes. - [#4100](https://github.com/equinor/fusion-framework/pull/4100) [`9d4d520`](https://github.com/equinor/fusion-framework/commit/9d4d520e9d3c3a3c4ef68a96952fbbc6f6d34720) Thanks [@dependabot](https://github.com/apps/dependabot)! - Internal: rebuild the CLI, dev portal, and SPA plugin with Rollup 4.59.0 to address a security advisory affecting packaged build output. No public API changes. - [#4098](https://github.com/equinor/fusion-framework/pull/4098) [`40328c3`](https://github.com/equinor/fusion-framework/commit/40328c3a1489ad29c7bbc03fa283e1daa9a9ee2e) Thanks [@dependabot](https://github.com/apps/dependabot)! - Internal: update inquirer to 13.3.0 to improve prompt handling and localization support without changing the CLI API. - [#4025](https://github.com/equinor/fusion-framework/pull/4025) [`0dc5e05`](https://github.com/equinor/fusion-framework/commit/0dc5e058d4adb28ee72a1aac6dbdbc4da84741e9) Thanks [@dependabot](https://github.com/apps/dependabot)! - Internal: update ora to 9.3.0 to reduce spinner flicker and improve terminal interaction behavior without changing the CLI API. - [#4157](https://github.com/equinor/fusion-framework/pull/4157) [`6aa8e1f`](https://github.com/equinor/fusion-framework/commit/6aa8e1f5c9d852b25e97aa7d98a63008c64d4581) Thanks [@Noggling](https://github.com/Noggling)! - Internal: patch release to align TypeScript types across packages for consistent type compatibility. - Updated dependencies [[`9d4d520`](https://github.com/equinor/fusion-framework/commit/9d4d520e9d3c3a3c4ef68a96952fbbc6f6d34720), [`6aa8e1f`](https://github.com/equinor/fusion-framework/commit/6aa8e1f5c9d852b25e97aa7d98a63008c64d4581)]: - @equinor/fusion-framework-dev-portal@4.0.4 - @equinor/fusion-framework-dev-server@1.1.31 - @equinor/fusion-framework-module-msal-node@3.0.1 - @equinor/fusion-imports@1.1.11 ## 13.3.15 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-portal@4.0.3 ## 13.3.14 ### Patch Changes - Updated dependencies [[`e38face`](https://github.com/equinor/fusion-framework/commit/e38facee6d29f1d93cdc08fe90aba3369335d522)]: - @equinor/fusion-framework-dev-portal@4.0.2 ## 13.3.13 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-portal@4.0.1 - @equinor/fusion-framework-dev-server@1.1.30 ## 13.3.12 ### Patch Changes - Updated dependencies [[`e8438fd`](https://github.com/equinor/fusion-framework/commit/e8438fdfe3d89b0135ef914068a75307f83ddd08)]: - @equinor/fusion-framework-dev-portal@4.0.0 ## 13.3.11 ### Patch Changes - Updated dependencies [[`f09b26f`](https://github.com/equinor/fusion-framework/commit/f09b26f100a94bf3c841be9830525aa2c734b180)]: - @equinor/fusion-framework-dev-portal@3.0.0 ## 13.3.10 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-portal@2.0.1 ## 13.3.9 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-portal@2.0.0 ## 13.3.8 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-portal@1.4.5 - @equinor/fusion-framework-dev-server@1.1.29 ## 13.3.7 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-portal@1.4.4 - @equinor/fusion-framework-dev-server@1.1.28 ## 13.3.6 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-portal@1.4.3 - @equinor/fusion-framework-dev-server@1.1.27 ## 13.3.5 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-portal@1.4.2 - @equinor/fusion-framework-dev-server@1.1.26 ## 13.3.4 ### Patch Changes - Updated dependencies [[`1b62bd9`](https://github.com/equinor/fusion-framework/commit/1b62bd99410265aff08a3f77996d456d49bfc23d)]: - @equinor/fusion-framework-dev-portal@1.4.1 ## 13.3.3 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-portal@1.4.0 - @equinor/fusion-framework-dev-server@1.1.25 ## 13.3.2 ### Patch Changes - [#3999](https://github.com/equinor/fusion-framework/pull/3999) [`5f6831f`](https://github.com/equinor/fusion-framework/commit/5f6831f0032ea5667bb1935883c85b6870133a5d) Thanks [@Noggling](https://github.com/Noggling)! - Corrected env parameter handling in CLI commands to ensure proper resolution of environment-specific configurations. - Updated dependencies []: - @equinor/fusion-framework-dev-portal@1.4.0 - @equinor/fusion-framework-dev-server@1.1.24 ## 13.3.1 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-portal@1.4.0 - @equinor/fusion-framework-dev-server@1.1.23 ## 13.3.0 ### Minor Changes - [#3990](https://github.com/equinor/fusion-framework/pull/3990) [`8719068`](https://github.com/equinor/fusion-framework/commit/8719068b723975db90a1b4bee59808734eb87e20) Thanks [@odinr](https://github.com/odinr)! - Add `--config` option to `app publish` command for uploading application configuration after publishing the bundle. ```bash # Upload default app.config.ts after publishing ffc app publish --config # Upload specific config file ffc app publish --config app.config.prod.ts --env prod ``` This streamlines the deployment workflow by combining bundle upload and config upload in a single command. **Internal changes:** - Refactored `publishAppConfig` to accept pre-resolved config and framework instance, improving modularity and reusability - Updated `generateApplicationConfig` to return both config and package metadata, with graceful fallback when package resolution fails - Simplified `app config` command flow by handling config generation and manifest loading before publishing Fixes: https://github.com/equinor/fusion-core-tasks/issues/257 ### Patch Changes - [#3990](https://github.com/equinor/fusion-framework/pull/3990) [`8719068`](https://github.com/equinor/fusion-framework/commit/8719068b723975db90a1b4bee59808734eb87e20) Thanks [@odinr](https://github.com/odinr)! - Update CLI documentation to include the new `--config` flag for the `app publish` command, showing how to upload application configuration after publishing in a single command. - Updated dependencies []: - @equinor/fusion-framework-dev-portal@1.4.0 - @equinor/fusion-framework-dev-server@1.1.22 ## 13.2.1 ### Patch Changes - [#3986](https://github.com/equinor/fusion-framework/pull/3986) [`5211e98`](https://github.com/equinor/fusion-framework/commit/5211e98f65edb5292345d45757c5af740e04fffc) Thanks [@Noggling](https://github.com/Noggling)! - Fix CLI commands outputting invalid JSON due to dotenv messages appearing in stdout. Commands like `ffc app manifest` now produce clean JSON output suitable for automated tooling and CI/CD pipelines. - [#3988](https://github.com/equinor/fusion-framework/pull/3988) [`69b658a`](https://github.com/equinor/fusion-framework/commit/69b658a7bc0741512b0a8fb56d6424405701d336) Thanks [@asbjornhaland](https://github.com/asbjornhaland)! - Fix CLI app config not passing the potential logger to `publishAppConfig`. ## 13.2.0 ### Minor Changes - [`5121c48`](https://github.com/equinor/fusion-framework/commit/5121c48020accfa0b91415ddafb61ea82b3b24b6) Thanks [@Noggling](https://github.com/Noggling)! - Add support for artifact-based app validation in publish command. The CLI publish command now supports validating applications using metadata extracted from bundle artifacts instead of requiring local package.json and manifest files. This enables publishing applications from any directory in CI/CD pipelines without maintaining the full project structure. **New capabilities:** - Extract app information from bundle's `metadata.json` - Validate app registration using artifact metadata when bundle path is provided - Maintain backward compatibility with existing package.json-based validation **Usage:** ```bash # Traditional validation (unchanged) fusion-framework-cli app publish # New artifact-based validation fusion-framework-cli app publish ./app-bundle.zip ``` This resolves the limitation where applications could only be published from directories containing the source package.json, enabling more flexible CI/CD deployment scenarios. ### Patch Changes - [#3961](https://github.com/equinor/fusion-framework/pull/3961) [`343f5f9`](https://github.com/equinor/fusion-framework/commit/343f5f9cc0acbd8e69b62cc73dda577c9015a620) Thanks [@asbjornhaland](https://github.com/asbjornhaland)! - Update docs explain the possibility to override Service Discovery urls in app-config - Updated dependencies [[`46a1c71`](https://github.com/equinor/fusion-framework/commit/46a1c710d9cd2ed20946932ceab2a5e8c0fb8a2b)]: - @equinor/fusion-framework-module-msal-node@3.0.0 - @equinor/fusion-framework-dev-portal@1.4.0 - @equinor/fusion-framework-dev-server@1.1.21 ## 13.1.1 ### Patch Changes - [#3922](https://github.com/equinor/fusion-framework/pull/3922) [`d34ebd8`](https://github.com/equinor/fusion-framework/commit/d34ebd82c93acabc88f88e44a725f084af3af5ec) Thanks [@odinr](https://github.com/odinr)! - Enable AG Grid Enterprise license injection for the dev-portal by setting a global window key produced from the SPA template environment. The portal reads `window.FUSION_AG_GRID_KEY` to configure the AG Grid module and silence license warnings when a valid key is present. CLI docs now mention the license key setup. **Usage:** - In your SPA environment file, set `FUSION_SPA_AG_GRID_KEY=your-license-key-here`. - The SPA HTML template injects `window.FUSION_AG_GRID_KEY` before bootstrap runs, and the dev-portal picks it up automatically. Closes: https://github.com/equinor/fusion-core-tasks/issues/93 Resolves: https://github.com/equinor/fusion-core-tasks/issues/92 Solves: https://github.com/equinor/fusion/issues/732 - [#3953](https://github.com/equinor/fusion-framework/pull/3953) [`37f63d5`](https://github.com/equinor/fusion-framework/commit/37f63d5b9646d0b19c98041e0897d6e1abf69dcf) Thanks [@odinr](https://github.com/odinr)! - Use semver coercion when generating snapshot versions so pre-release package versions are stripped to their base release before appending the snapshot suffix. - [#3866](https://github.com/equinor/fusion-framework/pull/3866) [`f70d66f`](https://github.com/equinor/fusion-framework/commit/f70d66f1bc826e614140adb2c6ee052f98e3b3da) Thanks [@dependabot](https://github.com/apps/dependabot)! - Internal: Dedupe zod dependency to 4.3.5 Deduplicated zod dependency to version 4.3.5 across all packages using `pnpm dedupe`. This aligns all packages (AI plugins upgraded from v3.25.76, other packages consolidated from v4.1.8/v4.1.11) to use the same latest stable version, improving consistency and reducing bundle size. All builds, tests, and linting pass successfully. - Updated dependencies [[`d34ebd8`](https://github.com/equinor/fusion-framework/commit/d34ebd82c93acabc88f88e44a725f084af3af5ec), [`5a25a5e`](https://github.com/equinor/fusion-framework/commit/5a25a5e6fefc660131b77f58e667b1a05dca0d6b)]: - @equinor/fusion-framework-dev-portal@1.4.0 - @equinor/fusion-imports@1.1.10 - @equinor/fusion-framework-dev-server@1.1.20 ## 13.1.0 ### Minor Changes - [#3923](https://github.com/equinor/fusion-framework/pull/3923) [`f382399`](https://github.com/equinor/fusion-framework/commit/f38239914070dce4f5701c09f6c28336ad5ed73a) Thanks [@asbjornhaland](https://github.com/asbjornhaland)! - Add support for custom tags when publishing apps and portals, expanding beyond the previous `latest` and `preview` options. Tags can now use any combination of alphanumeric characters, dots, and hyphens (`a–z`, `A–Z`, `0–9`, `.`, `-`), for example `latest`, `preview` or `pr-1234`. ### Patch Changes - [#3904](https://github.com/equinor/fusion-framework/pull/3904) [`4eae807`](https://github.com/equinor/fusion-framework/commit/4eae8070c1ad48eaa7d83a9aecfe5588c6aec41c) Thanks [@dependabot](https://github.com/apps/dependabot)! - Internal: bump inquirer from 13.1.0 to 13.2.0; adds new optional features for search default option and rawlist description support, no public API changes. - [#3766](https://github.com/equinor/fusion-framework/pull/3766) [`19ee28f`](https://github.com/equinor/fusion-framework/commit/19ee28fc0f6108fc59f0098b449a511221d2d860) Thanks [@dependabot](https://github.com/apps/dependabot)! - Internal: upgrade `open` from 10.2.0 to 11.0.0 (requires Node.js ≥20). New features include improved WSL/PowerShell support, better error handling with AggregateError, and Linux chromium fallback. - [#3902](https://github.com/equinor/fusion-framework/pull/3902) [`8796e99`](https://github.com/equinor/fusion-framework/commit/8796e994173ff1757b557d096a7a95915785dcc1) Thanks [@dependabot](https://github.com/apps/dependabot)! - Internal: bump vite-tsconfig-paths from 5.1.4 to 6.0.4 for improved TypeScript path resolution and Windows compatibility. - [#3744](https://github.com/equinor/fusion-framework/pull/3744) [`b8ab0b7`](https://github.com/equinor/fusion-framework/commit/b8ab0b72d422996d38fae3e6d82cecfa77686487) Thanks [@dependabot](https://github.com/apps/dependabot)! - Internal: bump read-package-up to 12.0.0 to align with upstream Node 20 requirement. - [#3899](https://github.com/equinor/fusion-framework/pull/3899) [`9fff06a`](https://github.com/equinor/fusion-framework/commit/9fff06a2327fe569a62418eb2b65a0ec9e2e69f5) Thanks [@odinr](https://github.com/odinr)! - Update recommended Node.js version from 22.x to 24.x (LTS). The CLI now recommends Node.js 24.x as the LTS version for best compatibility. This change updates the version check warning, build configuration, Dockerfile, and documentation examples to reflect Node.js 24 as the recommended version. - [#3932](https://github.com/equinor/fusion-framework/pull/3932) [`15aaa87`](https://github.com/equinor/fusion-framework/commit/15aaa87e6a8b391c0672db0dcdca4c1cac3b50a7) Thanks [@dependabot](https://github.com/apps/dependabot)! - Internal: update rollup build dependency from 4.52.5 to 4.55.2. This update includes: - Improved circular dependency handling for manual chunks - Enhanced tree-shaking for Symbol properties - Performance improvements via variable name caching - Multiple bug fixes for build edge cases No changes to CLI or plugin functionality or public APIs. - Updated dependencies [[`19ee28f`](https://github.com/equinor/fusion-framework/commit/19ee28fc0f6108fc59f0098b449a511221d2d860), [`b8ab0b7`](https://github.com/equinor/fusion-framework/commit/b8ab0b72d422996d38fae3e6d82cecfa77686487)]: - @equinor/fusion-framework-module-msal-node@2.0.3 - @equinor/fusion-imports@1.1.9 - @equinor/fusion-framework-dev-portal@1.3.0 - @equinor/fusion-framework-dev-server@1.1.19 ## 13.0.1 ### Patch Changes - [#3898](https://github.com/equinor/fusion-framework/pull/3898) [`037e2e2`](https://github.com/equinor/fusion-framework/commit/037e2e29b6696e8925f054f5a1656ece24e55878) Thanks [@odinr](https://github.com/odinr)! - Internal: Add CLI plugin packages as dev dependencies for local development. These packages are used in `fusion-cli.config.ts` for building and running the CLI from source, but do not affect the published package. - [#3880](https://github.com/equinor/fusion-framework/pull/3880) [`528c7d7`](https://github.com/equinor/fusion-framework/commit/528c7d7f4fd93a72878e38843a2efb011a976ae6) Thanks [@dependabot](https://github.com/apps/dependabot)! - Internal: bump inquirer from 13.0.1 to 13.1.0. This update includes improved TypeScript type inference for `select` prompts and adds support for `default` option in `rawlist` prompts. - Updated dependencies [[`d7a9d12`](https://github.com/equinor/fusion-framework/commit/d7a9d127db9daff7d645d55eb08f37d1c36fa825)]: - @equinor/fusion-framework-dev-portal@1.3.0 ## 13.0.0 ### Major Changes - [`e2d2a76`](https://github.com/equinor/fusion-framework/commit/e2d2a76d08b86c3a9d8783fed1606551df9d5633) Thanks [@odinr](https://github.com/odinr)! - Add plugin system for extensible CLI architecture and new framework configuration utilities. **Plugin System:** - Support for optional plugins via `fusion-cli.config.ts` configuration file - Automatic plugin discovery and loading from project root or CLI package directory - Plugin registration via package name or direct function imports - Support for `.ts`, `.js`, and `.json` config file formats - Multiple plugin resolution strategies for different installation methods **New Exports:** - `configureFramework` - Separated framework configuration from initialization for advanced use cases - `defineFusionCli` - Type-safe utility for defining CLI plugin configurations **Enhancements:** - Non-interactive mode support for `create app` command with `--git-protocol`, `--cleanup`/`--no-cleanup`, and `--no-open` options - Automatic `.env` file loading via dotenv for environment variable support - Improved error handling and plugin resolution strategies **Documentation:** - Added comprehensive AI commands documentation (internal use only) - Updated README with plugin system usage instructions **Quick Usage:** 1. Install a plugin package: ```sh pnpm add -D @equinor/fusion-framework-cli-plugin-ai-chat ``` 2. Create `fusion-cli.config.ts` in your project root: ```typescript import { defineFusionCli } from "@equinor/fusion-framework-cli"; export default defineFusionCli(() => ({ plugins: [ "@equinor/fusion-framework-cli-plugin-ai-chat", // Or use direct imports: // import aiChatPlugin from '@equinor/fusion-framework-cli-plugin-ai-chat'; // plugins: [aiChatPlugin], ], })); ``` 3. Plugins are automatically loaded when CLI starts: ```sh # Plugin commands are now available ffc ai chat ``` Plugins can be registered by package name (string) or direct function imports. The config file supports `.ts`, `.js`, or `.json` formats. If no config file exists, the CLI works normally without plugins. ### Patch Changes - Updated dependencies [[`24403fc`](https://github.com/equinor/fusion-framework/commit/24403fc96d24d942f0c9632ed900b1a0f4065c1e)]: - @equinor/fusion-framework-module-msal-node@2.0.2 ## 12.5.1 ### Patch Changes - [#3845](https://github.com/equinor/fusion-framework/pull/3845) [`5114ac4`](https://github.com/equinor/fusion-framework/commit/5114ac4f71a60935d0194b9b2766f95adff0ba1e) Thanks [@asbjornhaland](https://github.com/asbjornhaland)! - Fix tsconfig references - Updated dependencies []: - @equinor/fusion-framework-dev-portal@1.2.6 ## 12.5.0 ### Minor Changes - [#3842](https://github.com/equinor/fusion-framework/pull/3842) [`d38cd60`](https://github.com/equinor/fusion-framework/commit/d38cd60472380d60282c2a5672dc6e3bba3e7ca9) Thanks [@asbjornhaland](https://github.com/asbjornhaland)! - Add module fusion-framework-module-analytics ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-portal@1.2.6 ## 12.4.6 ### Patch Changes - [`41f8e9b`](https://github.com/equinor/fusion-framework/commit/41f8e9b7a9b2680553e089d04095a9db7821567e) Thanks [@odinr](https://github.com/odinr)! - Internal: upgrade build tooling dependency `esbuild` to 0.27.0 in `@equinor/fusion-imports`. No public API changes and no runtime impact to consumers. - Updated dependencies [[`41f8e9b`](https://github.com/equinor/fusion-framework/commit/41f8e9b7a9b2680553e089d04095a9db7821567e)]: - @equinor/fusion-imports@1.1.8 - @equinor/fusion-framework-dev-server@1.1.18 - @equinor/fusion-framework-dev-portal@1.2.6 ## 12.4.5 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-server@1.1.17 - @equinor/fusion-framework-dev-portal@1.2.6 ## 12.4.4 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-server@1.1.16 - @equinor/fusion-framework-dev-portal@1.2.6 ## 12.4.3 ### Patch Changes - [#3768](https://github.com/equinor/fusion-framework/pull/3768) [`28cffb2`](https://github.com/equinor/fusion-framework/commit/28cffb2d0a779bc190eb6d615f4bf6f86bb001c3) Thanks [@dependabot](https://github.com/apps/dependabot)! - chore: bump inquirer from 12.10.0 to 13.0.1 Updated inquirer to v13.0.1 and migrated deprecated `list` prompt type to `select` for compatibility with inquirer v13 breaking changes. - [#3779](https://github.com/equinor/fusion-framework/pull/3779) [`ee6aa77`](https://github.com/equinor/fusion-framework/commit/ee6aa7764776000edab9233ad9a4716b2d85c4eb) Thanks [@dependabot](https://github.com/apps/dependabot)! - chore: bump vite from 7.1.12 to 7.2.4 - Updated dependencies [[`a768715`](https://github.com/equinor/fusion-framework/commit/a7687155c0666655afd932887e475415a7b76b31), [`0d31799`](https://github.com/equinor/fusion-framework/commit/0d31799be8da15b7ee4ddca643d6dc684092b905), [`ee6aa77`](https://github.com/equinor/fusion-framework/commit/ee6aa7764776000edab9233ad9a4716b2d85c4eb)]: - @equinor/fusion-imports@1.1.7 - @equinor/fusion-framework-module-msal-node@2.0.1 - @equinor/fusion-framework-dev-portal@1.2.6 - @equinor/fusion-framework-dev-server@1.1.15 ## 12.4.2 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-portal@1.2.5 - @equinor/fusion-framework-dev-server@1.1.14 ## 12.4.1 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-portal@1.2.5 - @equinor/fusion-framework-dev-server@1.1.13 ## 12.4.0 ### Minor Changes - [`393f163`](https://github.com/equinor/fusion-framework/commit/393f1637ed33b84a6330b5eb122ab549805416bd) Thanks [@Noggling](https://github.com/Noggling)! - **Portal Tags Now Support Any String Value** Portal tagging functionality has been enhanced to accept any string value for tags instead of being restricted to predefined enum values. **Breaking Changes** - **Removed `AllowedPortalTags` enum**: The enum that previously restricted portal tags to only `'latest'` and `'preview'` has been removed. - **No longer exported**: `AllowedPortalTags` is no longer exported from `@equinor/fusion-framework-cli/bin`. **Migration** If you were importing and using `AllowedPortalTags`: ```typescript // Before import { AllowedPortalTags } from '@equinor/fusion-framework-cli/bin'; await tagPortal({ tag: AllowedPortalTags.Latest, ... }); // After await tagPortal({ tag: 'latest', ... }); ``` **New Flexibility** You can now use any string value for portal tags: ```bash # Common tags still work ffc portal publish --tag latest ffc portal publish --tag preview # New flexibility with custom tags ffc portal publish --tag next ffc portal publish --tag stable ffc portal publish --tag v2.0.0-beta ffc portal publish --tag release-candidate ffc portal tag custom-environment --package my-portal@1.0.0 ``` **Enhanced Documentation** - Updated CLI help text with practical examples - Added common tag examples (`latest`, `preview`, `next`, `stable`) in documentation - Maintained guidance while showing flexibility **Validation** - Tags must be non-empty strings - No other restrictions on tag format or content - Backward compatibility maintained for existing tag values This change provides much greater flexibility for deployment workflows while maintaining the same API structure and functionality. ## 12.3.10 ### Patch Changes - [#3714](https://github.com/equinor/fusion-framework/pull/3714) [`11fe961`](https://github.com/equinor/fusion-framework/commit/11fe961794e4960ccb987bc320268cc9b263f1f8) Thanks [@odinr](https://github.com/odinr)! - Update CLI auth commands to use new MSAL Node API format. Internal implementation change to adapt to MSAL Node interface updates. CLI commands continue to work the same way for end users. Why: Ensures compatibility with updated MSAL Node module API. - Updated dependencies [[`11fe961`](https://github.com/equinor/fusion-framework/commit/11fe961794e4960ccb987bc320268cc9b263f1f8)]: - @equinor/fusion-framework-module-msal-node@2.0.0 - @equinor/fusion-framework-dev-portal@1.2.5 - @equinor/fusion-framework-dev-server@1.1.12 ## 12.3.9 ### Patch Changes - Updated dependencies [[`eaa6871`](https://github.com/equinor/fusion-framework/commit/eaa6871edc07054138e88bc706a4137a3fcc261a)]: - @equinor/fusion-framework-dev-portal@1.2.5 ## 12.3.8 ### Patch Changes - Updated dependencies [[`d6465bc`](https://github.com/equinor/fusion-framework/commit/d6465bc2787a37465e22964803501e44f6b19517)]: - @equinor/fusion-framework-dev-server@1.1.11 - @equinor/fusion-framework-dev-portal@1.2.4 ## 12.3.7 ### Patch Changes - [`e48c54b`](https://github.com/equinor/fusion-framework/commit/e48c54bdbbca0068859b843f00e753974a33dd13) Thanks [@odinr](https://github.com/odinr)! - Internal: bump commander from 14.0.1 to 14.0.2 to improve negative number auto-detection test; no public API changes. - [`86d081b`](https://github.com/equinor/fusion-framework/commit/86d081bcaf17b7713fd352ea838d605ef12b9a09) Thanks [@odinr](https://github.com/odinr)! - Internal: bump @rollup/plugin-replace from 6.0.2 to 6.0.3 to fix delimiter handling for valid JS identifiers; no public API changes. - [#3637](https://github.com/equinor/fusion-framework/pull/3637) [`f5b88e7`](https://github.com/equinor/fusion-framework/commit/f5b88e7ff8e896624de67bdf29091ba44bf8a628) Thanks [@dependabot](https://github.com/apps/dependabot)! - Internal: bump rollup from 4.52.4 to 4.52.5 to fix sourcemap debugId generation; no public API changes. - [#3679](https://github.com/equinor/fusion-framework/pull/3679) [`1706e4c`](https://github.com/equinor/fusion-framework/commit/1706e4c503d8ef4db46a9572392d23e9c081c82c) Thanks [@dependabot](https://github.com/apps/dependabot)! - Update @rollup/plugin-commonjs from 28.0.6 to 29.0.0, which reverts previous Node.js builtins handling changes and adds requireNodeBuiltins option. - [#3681](https://github.com/equinor/fusion-framework/pull/3681) [`fb6ee63`](https://github.com/equinor/fusion-framework/commit/fb6ee637a1fbf90831a0a3b901520a76a440d4c9) Thanks [@dependabot](https://github.com/apps/dependabot)! - Update simple-git from 3.28.0 to 3.29.0 for improved Windows path handling and branch API enhancements. - [#3583](https://github.com/equinor/fusion-framework/pull/3583) [`af2cad4`](https://github.com/equinor/fusion-framework/commit/af2cad4417e7ba403bf7300a49c688b9b5ef3f1b) Thanks [@dependabot](https://github.com/apps/dependabot)! - Update type-fest from 5.0.1 to 5.1.0, adding new utility types (TupleOf, Xor, etc.) and fixing various type issues in development utilities. - [#3544](https://github.com/equinor/fusion-framework/pull/3544) [`443414f`](https://github.com/equinor/fusion-framework/commit/443414fe0351b529cecf0a667383640567d05e74) Thanks [@dependabot](https://github.com/apps/dependabot)! - Update zod from 4.1.11 to 4.1.12, which includes a critical bug fix for ZodError.flatten() preventing crashes on 'toString' key and improved error handling throughout the framework. - Updated dependencies [[`f5b88e7`](https://github.com/equinor/fusion-framework/commit/f5b88e7ff8e896624de67bdf29091ba44bf8a628), [`3a21f9a`](https://github.com/equinor/fusion-framework/commit/3a21f9a8b36aaa7c80209c0989627b1dcc48a6cf), [`fe667d5`](https://github.com/equinor/fusion-framework/commit/fe667d54a8b9cb030ed7c2f2a6465c80b1b6b4f2), [`d8802e5`](https://github.com/equinor/fusion-framework/commit/d8802e5cd221e302529ea7d14e3c7c13734ad2eb)]: - @equinor/fusion-framework-dev-portal@1.2.4 - @equinor/fusion-framework-dev-server@1.1.10 - @equinor/fusion-framework-module-msal-node@1.0.8 - @equinor/fusion-imports@1.1.6 ## 12.3.6 ### Patch Changes - [#3652](https://github.com/equinor/fusion-framework/pull/3652) [`8d50adc`](https://github.com/equinor/fusion-framework/commit/8d50adc17e81fc46da81795125832af8add5f678) Thanks [@dependabot](https://github.com/apps/dependabot)! - **Security:** Update Vite to v7.1.12 This update addresses a security vulnerability in Vite's development server and includes bug fixes for improved compatibility. The update ensures secure development environments and better plugin ecosystem compatibility. **Changes:** - Updated Vite from v7.1.10 to v7.1.12 - Includes security fix for development server file system checks - Includes compatibility fix for CommonJS plugin - No breaking changes or API modifications **Security Fix (v7.1.11):** - **dev**: trim trailing slash before `server.fs.deny` check ([#20968](https://github.com/vitejs/vite/issues/20968)) - Prevents potential path traversal vulnerability in development server - Only affects development environment, not production builds **Bug Fix (v7.1.12):** - **deps**: downgrade commonjs plugin to 28.0.6 to avoid rollup/plugins issues ([#20990](https://github.com/vitejs/vite/issues/20990)) - Improves compatibility with Rollup plugin ecosystem - Prevents potential build issues All packages using Vite as a development dependency are updated to the latest secure version. This is a patch-level security and bug fix update that maintains full compatibility with existing functionality. closes: https://github.com/equinor/fusion/issues/723 - Updated dependencies [[`8d50adc`](https://github.com/equinor/fusion-framework/commit/8d50adc17e81fc46da81795125832af8add5f678)]: - @equinor/fusion-framework-dev-portal@1.2.3 - @equinor/fusion-framework-dev-server@1.1.9 ## 12.3.5 ### Patch Changes - [#3593](https://github.com/equinor/fusion-framework/pull/3593) [`c5a952c`](https://github.com/equinor/fusion-framework/commit/c5a952cb223ca2c6e723186b1a5a477dbec6c95d) Thanks [@Noggling](https://github.com/Noggling)! - ## Fix app config publish parameter Fixed a bug in the `app config` command where the `config` parameter was incorrectly referenced as `options.config` when calling `publishAppConfig`. This was causing the publish functionality to fail when a custom config file path was provided. ### What Changed - Corrected parameter passing in `packages/cli/src/cli/commands/app/config.ts` - Changed `config: options.config` to `config` in the `publishAppConfig` call ### Impact - The `ffc app config --publish` command now correctly uses the provided config file argument - Fixes the issue where custom config files were not being passed to the publish function - No breaking changes to the CLI interface ### Example ```bash # This now works correctly with custom config files ffc app config my-custom.config.ts --publish --manifest app.manifest.ts --env prod ``` - [#3584](https://github.com/equinor/fusion-framework/pull/3584) [`0dd31cd`](https://github.com/equinor/fusion-framework/commit/0dd31cd1078b383ddab4a8cf1bb03d502e214715) Thanks [@dependabot](https://github.com/apps/dependabot)! - chore: bump @rollup/plugin-node-resolve from 16.0.1 to 16.0.3 Bug fixes: - fix: resolve bare targets of package "imports" using export maps; avoid fileURLToPath(null) - fix: error thrown with empty entry - Updated dependencies [[`fa12d3a`](https://github.com/equinor/fusion-framework/commit/fa12d3a2466a590a943d85c873f02bc45e8fba52)]: - @equinor/fusion-imports@1.1.5 - @equinor/fusion-framework-dev-portal@1.2.2 - @equinor/fusion-framework-dev-server@1.1.8 ## 12.3.4 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-server@1.1.7 - @equinor/fusion-framework-dev-portal@1.2.2 ## 12.3.3 ### Patch Changes - Updated dependencies []: - @equinor/fusion-framework-dev-server@1.1.6 - @equinor/fusion-framework-dev-portal@1.2.2 ## 12.3.2 ### Patch Changes - [#3574](https://github.com/equinor/fusion-framework/pull/3574) [`39e989f`](https://github.com/equinor/fusion-framework/commit/39e989f6ab477047d82740b2d96b757c90b10f74) Thanks [@Noggling](https://github.com/Noggling)! - Fix app development error by adding missing `is-mergeable-object` dependency Added `is-mergeable-object` as a direct dependency to resolve runtime errors when using the CLI's app development features. This package is required by `deepmerge` but was not explicitly declared as a dependency, causing module resolution failures during app development. **Changes:** - Added `is-mergeable-object@^1.1.1` to dependencies in `packages/cli/package.json` **Impact:** - Fixes "Cannot find module 'is-mergeable-object'" errors during app development - Ensures proper dependency resolution for CLI tools that use deepmerge functionality - No breaking changes - this is purely a dependency fix ## 12.3.1 ### Patch Changes - [#3559](https://github.com/equinor/fusion-framework/pull/3559) [`6667a4e`](https://github.com/equinor/fusion-framework/commit/6667a4ee24a5374a02ec76952f440d495d62dbc3) Thanks [@eikeland](https://github.com/eikeland)! - Added default headers to CLI REST API requests for better identification and tracking. - Created new `defaultHeaders` utility that includes CLI name, version, and user-agent - Updated app upload/tag operations to include default headers - Updated portal upload/tag operations to include default headers All HTTP requests from the CLI now include: - `X-Fusion-CLI-Name`: Identifies the CLI tool name - `X-Fusion-CLI-Version`: Specifies the CLI version making the request - `User-Agent`: Standard user agent header with CLI name and version This enhancement improves observability and helps service owners track and debug CLI interactions with backend services. Closes: #3539 - [#3552](https://github.com/equinor/fusion-framework/pull/3552) [`8694e5b`](https://github.com/equinor/fusion-framework/commit/8694e5bb9bb1249dc52853dc6a5048f81ed9ab9c) Thanks [@eikeland](https://github.com/eikeland)! - Fixed release annotations to always include CLI version and required metadata. - Added `cliVersion` property to `ReleaseAnnotations` type - Ensured annotations are always returned (removed undefined return type) - Added fallback annotations for local builds with default values - Improved type safety by making annotations consistently available Thanks to @odinr for reporting in issue #3540. - [#3567](https://github.com/equinor/fusion-framework/pull/3567) [`f343b89`](https://github.com/equinor/fusion-framework/commit/f343b89a5716cc76ed5c8c0b714612c97100cf7a) Thanks [@Noggling](https://github.com/Noggling)! - Fix CLI for portal development by ensuring correct placement of viteConfig overrides. - Updated dependencies [[`8c6f679`](https://github.com/equinor/fusion-framework/commit/8c6f6790c69cca01bde55d622418040da1c5c9fc)]: - @equinor/fusion-framework-dev-portal@1.2.2 ## 12.3.0 ### Minor Changes - [#3547](https://github.com/equinor/fusion-framework/pull/3547) [`99a3c26`](https://github.com/equinor/fusion-framework/commit/99a3c26275c2089c3708124f5819ce383d8dc3dc) Thanks [@odinr](https://github.com/odinr)! - Enhanced CLI with portal proxy support for testing apps in real portal environments ([Issue #3546](https://github.com/equinor/fusion-framework/issues/3546)). - Added `/portal-proxy` service worker resource configuration to CLI dev server - Routes portal proxy request