diff --git a/.cspell-repo-terms.txt b/.cspell-repo-terms.txt index 3c4ea0fda..fd000c890 100644 --- a/.cspell-repo-terms.txt +++ b/.cspell-repo-terms.txt @@ -1009,6 +1009,10 @@ hostnames dataprotection # dorny/paths-filter — GitHub Actions dependency used in policy-validation.yml dorny +# GitHub handle, credited in docs/dependency-audits/2026-08-12-agent-governance-sdk-5-cli-packages.md +prayagupa +# YAML ordered-map tag (!!omap), cited in dependency audits +omap writerow wslc x86 diff --git a/.cspell.json b/.cspell.json index 0448fe0de..41fe55c96 100644 --- a/.cspell.json +++ b/.cspell.json @@ -2,7 +2,9 @@ "version": "0.2", "language": "en", "useGitignore": true, - "dictionaries": ["repo-terms"], + "dictionaries": [ + "repo-terms" + ], "dictionaryDefinitions": [ { "name": "repo-terms", @@ -10,6 +12,10 @@ "addWords": true } ], + "ignoreRegExpList": [ + "/GHSA(-[0-9a-z]{4}){3}/g", + "/CVE-[0-9]{4}-[0-9]{4,}/g" + ], "words": [ "dorny", "subn", diff --git a/agent-governance-antigravity-cli/package-lock.json b/agent-governance-antigravity-cli/package-lock.json index b948a9df8..0c0d8ad4c 100644 --- a/agent-governance-antigravity-cli/package-lock.json +++ b/agent-governance-antigravity-cli/package-lock.json @@ -1,15 +1,15 @@ { "name": "@microsoft/agent-governance-antigravity-cli", - "version": "4.0.0", + "version": "5.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@microsoft/agent-governance-antigravity-cli", - "version": "4.0.0", + "version": "5.0.0", "license": "MIT", "dependencies": { - "@microsoft/agent-governance-sdk": "4.0.0" + "@microsoft/agent-governance-sdk": "5.0.0" }, "bin": { "agt-antigravity": "bin/agt-antigravity.mjs" @@ -22,16 +22,16 @@ } }, "node_modules/@microsoft/agent-governance-sdk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@microsoft/agent-governance-sdk/-/agent-governance-sdk-4.0.0.tgz", - "integrity": "sha512-d6d2MIz3YbNI/7zrfCP9Kwzs1TFtqLka1eIb+n171+7crA/+KC0a2mbJnC5RmJPUKJ2RR+8ts+41/IGDvUFhMg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@microsoft/agent-governance-sdk/-/agent-governance-sdk-5.0.0.tgz", + "integrity": "sha512-6wh1g1GzEBy5Gq2dUEx5lampUoZaKRtqarQUt7skU63e4/uHi17RpmMm7brLd61iFWXf3N20hE0yZrRNjC439w==", "license": "MIT", "dependencies": { "@noble/ciphers": "2.2.0", "@noble/curves": "2.2.0", "@noble/ed25519": "3.1.0", "@noble/hashes": "2.2.0", - "js-yaml": "4.1.1" + "js-yaml": "5.2.1" }, "engines": { "node": ">=18.0.0" diff --git a/agent-governance-antigravity-cli/package.json b/agent-governance-antigravity-cli/package.json index c0b85f2f3..25212228b 100644 --- a/agent-governance-antigravity-cli/package.json +++ b/agent-governance-antigravity-cli/package.json @@ -33,7 +33,7 @@ "directory": "agent-governance-antigravity-cli" }, "dependencies": { - "@microsoft/agent-governance-sdk": "4.0.0" + "@microsoft/agent-governance-sdk": "5.0.0" }, "overrides": { "js-yaml": "4.2.0" diff --git a/agent-governance-claude-code/package-lock.json b/agent-governance-claude-code/package-lock.json index afc454c84..833e59cdd 100644 --- a/agent-governance-claude-code/package-lock.json +++ b/agent-governance-claude-code/package-lock.json @@ -1,15 +1,15 @@ { "name": "@microsoft/agent-governance-claude-code", - "version": "4.0.0", + "version": "5.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@microsoft/agent-governance-claude-code", - "version": "4.0.0", + "version": "5.0.0", "license": "MIT", "dependencies": { - "@microsoft/agent-governance-sdk": "4.0.0" + "@microsoft/agent-governance-sdk": "5.0.0" }, "engines": { "node": ">=22.0.0" @@ -19,16 +19,16 @@ } }, "node_modules/@microsoft/agent-governance-sdk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@microsoft/agent-governance-sdk/-/agent-governance-sdk-4.0.0.tgz", - "integrity": "sha512-d6d2MIz3YbNI/7zrfCP9Kwzs1TFtqLka1eIb+n171+7crA/+KC0a2mbJnC5RmJPUKJ2RR+8ts+41/IGDvUFhMg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@microsoft/agent-governance-sdk/-/agent-governance-sdk-5.0.0.tgz", + "integrity": "sha512-6wh1g1GzEBy5Gq2dUEx5lampUoZaKRtqarQUt7skU63e4/uHi17RpmMm7brLd61iFWXf3N20hE0yZrRNjC439w==", "license": "MIT", "dependencies": { "@noble/ciphers": "2.2.0", "@noble/curves": "2.2.0", "@noble/ed25519": "3.1.0", "@noble/hashes": "2.2.0", - "js-yaml": "4.1.1" + "js-yaml": "5.2.1" }, "engines": { "node": ">=18.0.0" diff --git a/agent-governance-claude-code/package.json b/agent-governance-claude-code/package.json index 2a422c7db..d1d6d1a9a 100644 --- a/agent-governance-claude-code/package.json +++ b/agent-governance-claude-code/package.json @@ -39,7 +39,7 @@ }, "homepage": "https://github.com/microsoft/agent-governance-toolkit/tree/main/agent-governance-claude-code", "dependencies": { - "@microsoft/agent-governance-sdk": "4.0.0" + "@microsoft/agent-governance-sdk": "5.0.0" }, "overrides": { "js-yaml": "4.2.0" diff --git a/agent-governance-copilot-cli/package-lock.json b/agent-governance-copilot-cli/package-lock.json index e04cf2786..a69239493 100644 --- a/agent-governance-copilot-cli/package-lock.json +++ b/agent-governance-copilot-cli/package-lock.json @@ -1,15 +1,15 @@ { "name": "@microsoft/agent-governance-copilot-cli", - "version": "4.0.0", + "version": "5.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@microsoft/agent-governance-copilot-cli", - "version": "4.0.0", + "version": "5.0.0", "license": "MIT", "dependencies": { - "@microsoft/agent-governance-sdk": "4.0.0" + "@microsoft/agent-governance-sdk": "5.0.0" }, "bin": { "agt-copilot": "bin/agt-copilot.mjs" @@ -22,16 +22,16 @@ } }, "node_modules/@microsoft/agent-governance-sdk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@microsoft/agent-governance-sdk/-/agent-governance-sdk-4.0.0.tgz", - "integrity": "sha512-d6d2MIz3YbNI/7zrfCP9Kwzs1TFtqLka1eIb+n171+7crA/+KC0a2mbJnC5RmJPUKJ2RR+8ts+41/IGDvUFhMg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@microsoft/agent-governance-sdk/-/agent-governance-sdk-5.0.0.tgz", + "integrity": "sha512-6wh1g1GzEBy5Gq2dUEx5lampUoZaKRtqarQUt7skU63e4/uHi17RpmMm7brLd61iFWXf3N20hE0yZrRNjC439w==", "license": "MIT", "dependencies": { "@noble/ciphers": "2.2.0", "@noble/curves": "2.2.0", "@noble/ed25519": "3.1.0", "@noble/hashes": "2.2.0", - "js-yaml": "4.1.1" + "js-yaml": "5.2.1" }, "engines": { "node": ">=18.0.0" diff --git a/agent-governance-copilot-cli/package.json b/agent-governance-copilot-cli/package.json index 4990ae684..1c8435a2e 100644 --- a/agent-governance-copilot-cli/package.json +++ b/agent-governance-copilot-cli/package.json @@ -33,7 +33,7 @@ "directory": "agent-governance-copilot-cli" }, "dependencies": { - "@microsoft/agent-governance-sdk": "4.0.0" + "@microsoft/agent-governance-sdk": "5.0.0" }, "overrides": { "js-yaml": "4.2.0" diff --git a/docs/dependency-audits/2026-08-12-agent-governance-sdk-5-cli-packages.md b/docs/dependency-audits/2026-08-12-agent-governance-sdk-5-cli-packages.md new file mode 100644 index 000000000..a5dd6a037 --- /dev/null +++ b/docs/dependency-audits/2026-08-12-agent-governance-sdk-5-cli-packages.md @@ -0,0 +1,105 @@ +--- +title: agent-governance-sdk 4.0.0 to 5.0.0 in the three CLI packages +last_reviewed: 2026-09-03 +owner: imran-siddique +--- + +# agent-governance-sdk 4.0.0 to 5.0.0 in the three CLI packages + +Covers the lockfile changes in #3686, #3683 and #3681, which bump +`@microsoft/agent-governance-sdk` from `4.0.0` to `5.0.0` in +`agent-governance-claude-code`, `agent-governance-antigravity-cli` and +`agent-governance-copilot-cli` respectively. One document because the three are +the same change to three copies of the same dependency. + +## Which Dependencies Changed And Why + +One first-party direct dependency, and one third-party transitive dependency +underneath it. + +- `@microsoft/agent-governance-sdk` `4.0.0` to `5.0.0` in all three packages. + This closes a version-line inconsistency rather than adopting new + functionality: each of the three CLI packages is already published at + `5.0.0` itself while pinning the `4.0.0` SDK. The `[5.0.0]` CHANGELOG entry + describes the monorepo-wide alignment that moved every first-party Python, + TypeScript, .NET and Rust package from `4.1.0` to `5.0.0` so the released + version line matches the documentation, which already describes Agent Control + Specification as the AGT 5.0 policy layer. +- `js-yaml`'s *declared* version moves `4.1.1` to `5.2.1`, as the SDK's own pin. + **The installed version does not move.** All three packages declare + `"overrides": { "js-yaml": "4.2.0" }` in `package.json`, on `main` and here, so + each lockfile resolves `node_modules/js-yaml` to `4.2.0` before and after this + bump. Verified with `npm ci` followed by `npm ls js-yaml`, which reports + `js-yaml@4.2.0 overridden` under `@microsoft/agent-governance-sdk@5.0.0`. + Comparing the two published manifests, `@noble/ciphers` `2.2.0`, + `@noble/curves` `2.2.0`, `@noble/ed25519` `3.1.0`, `@noble/hashes` `2.2.0`, + `engines.node >=18.0.0` and the MIT license are all identical between `4.0.0` + and `5.0.0`. So the SDK is the only dependency this bump actually changes. + +Each CLI package declares exactly one dependency, the SDK, so there is no other +surface to consider. + +## Security Advisory Relevance + +**This bump changes nothing about the `js-yaml` these packages install, and so +clears no advisory.** The override holds the parser at `4.2.0` regardless of +what the SDK declares, which means the two HIGH advisories in range before the +bump are still in range after it. + +`npm audit` against this branch's own tree reports both, and no others: + +- `GHSA-5p4m-2wfm-xmqj`, HIGH, quadratic CPU consumption in `!!omap` + resolution, affecting `>= 4.0.0, < 4.3.1`, first patched in `4.3.1`. +- `GHSA-52cp-r559-cp3m`, HIGH, YAML merge-key chains forcing quadratic CPU + consumption, affecting `>= 4.0.0, < 4.3.0`, first patched in `4.3.0`. + +`GHSA-pm4m-ph32-ghv5` (HIGH, `>= 5.0.0, <= 5.2.1`, first patched in `5.2.2`) +does **not** apply here, because `5.2.1` is never installed. Neither do +`GHSA-724g-mxrg-4qvm` or `GHSA-g796-fgmg-93mv`, both scoped to the `5.x` line. + +All of these are the same class: algorithmic-complexity denial of service +reachable only through parsing attacker-influenced YAML. + +**The residual exposure is closed elsewhere, not by this PR.** #3843, #3844 and +#3875 move the override from `4.2.0` to `4.3.1` in the antigravity, Claude Code +and Copilot CLI packages respectively, which clears both advisories above. +Those PRs touch the same `package.json` and `package-lock.json` files as this +one, so they and this PR conflict with each other and should be sequenced +rather than merged in parallel. + +**The source fix already landed, the published artifact has not.** +`agent-governance-typescript/package.json` on `main` pins `js-yaml` `5.2.3`, +via #3623 on 2026-08-12, so the SDK source is clear. What these three packages +resolve is the *published* `@microsoft/agent-governance-sdk` `5.0.0`, released +to npm on 2026-08-03, whose manifest pins `js-yaml` `5.2.1`. That artifact is +immutable. It is also moot while the override is in place, which is the point: +these packages have not been exposed to the `5.x` advisory at any time. + +Recording it here so the gap between what the SDK declares and what consumers +install is visible rather than assumed. An earlier revision of this document +read the declared version and concluded the bump exchanged two HIGH advisories +for one. That was wrong, and @prayagupa caught it in review. + +## Breaking Change Risk Assessment + +Low, and lower than the version numbers suggest. + +The SDK major is a version-line alignment, not an API break. The CHANGELOG +entry for `[5.0.0]` records a coordinated renumbering across all first-party +packages plus widening internal cross-package caps from `<5.0` to `<6.0`. It +does not describe a removed or changed API, and the published `4.0.0` and +`5.0.0` manifests agree on runtime requirements, so no consumer is being asked +to move Node versions. + +The genuine major underneath, `js-yaml` `4.x` to `5.x`, **is not reached**. +The override holds the installed parser at `4.2.0`, so the SDK's move to a +`5.x` pin has no runtime effect in these three packages. None of the three +depends on `js-yaml` directly, none imports it, and each declares the SDK as +its only dependency, so the parser is reached solely through whatever the SDK +already does with it, at the version the override selects. + +Residual risk worth stating plainly: the three packages have been shipping at +`5.0.0` while pinned to the `4.0.0` SDK, so this is the first time the +published CLI version and its published SDK agree. If anything in the v5 +alignment did change behaviour, these are the packages where it shows up first. +That argues for landing the three together rather than one at a time.