@taiga-ai/mcp-server 0.26.0-dev.482 → 0.26.0-dev.484
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +36 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1774,6 +1774,11 @@ const MAINTENANCE_IGNORE_REASONS = [
|
|
|
1774
1774
|
* alone is shipped, and `dev` + `optional` (devOptional) is left undecided.
|
|
1775
1775
|
* - pnpm-lock.yaml: `dev` comes from a per-package `dev: true` that lockfile
|
|
1776
1776
|
* v9 no longer writes, so an empty list says nothing; `dev` still means dev.
|
|
1777
|
+
* For a package a workspace declares under `dependencies` or
|
|
1778
|
+
* `optionalDependencies`, the sweep adds Taiga's own `prod`, so that copy
|
|
1779
|
+
* reads runtime. A `devDependencies` declaration is not turned into `dev`:
|
|
1780
|
+
* a runtime dependency's snapshot may pull the same copy in, which only the
|
|
1781
|
+
* `snapshots` graph could rule out, so it stays unknown.
|
|
1777
1782
|
* - poetry.lock: group names with `main` dropped; a non-main, non-optional
|
|
1778
1783
|
* group is not in the runtime install. Poetry 1.x lockfiles carry no groups
|
|
1779
1784
|
* at all, so an empty list says nothing.
|
|
@@ -1801,6 +1806,8 @@ function lockfileScope(path, groups) {
|
|
|
1801
1806
|
return "unknown";
|
|
1802
1807
|
}
|
|
1803
1808
|
case "pnpm-lock.yaml":
|
|
1809
|
+
if (set.has("prod")) return "runtime";
|
|
1810
|
+
return set.size === 1 && set.has("dev") ? "dev" : "unknown";
|
|
1804
1811
|
case "uv.lock": return set.size === 1 && set.has("dev") ? "dev" : "unknown";
|
|
1805
1812
|
case "poetry.lock": return set.size > 0 && !set.has("optional") && !set.has("main") ? "dev" : "unknown";
|
|
1806
1813
|
default: return "unknown";
|
|
@@ -1827,6 +1834,21 @@ function combineScopes(scopes) {
|
|
|
1827
1834
|
if (scopes.includes("unknown") || scopes.length === 0) return "unknown";
|
|
1828
1835
|
return "dev";
|
|
1829
1836
|
}
|
|
1837
|
+
/**
|
|
1838
|
+
* Whether the repository declares the package itself. Per lockfile the sweep
|
|
1839
|
+
* says direct or transitive; across lockfiles one direct declaration makes the
|
|
1840
|
+
* finding direct (that copy is the repository's to bump), transitive only when
|
|
1841
|
+
* every readable lockfile says so, unknown when the sweep could read none of
|
|
1842
|
+
* them or did not record it (older images, code kinds). Presentation only; the
|
|
1843
|
+
* remediation step already finds every resolved copy and its parent itself.
|
|
1844
|
+
*/
|
|
1845
|
+
function dependencyRelation(finding) {
|
|
1846
|
+
if (finding.kind !== "vulnerable_dependency" && finding.kind !== "outdated_dependency") return "unknown";
|
|
1847
|
+
const values = Object.values(finding.dependencyRelation ?? {});
|
|
1848
|
+
if (values.includes("direct")) return "direct";
|
|
1849
|
+
if (values.length > 0 && values.every((v) => v === "transitive")) return "transitive";
|
|
1850
|
+
return "unknown";
|
|
1851
|
+
}
|
|
1830
1852
|
new Set(CODE_REMEDIATION_KINDS);
|
|
1831
1853
|
/** A non-empty string, or null. */
|
|
1832
1854
|
const locationText = z.string().min(1).nullable().catch(null);
|
|
@@ -4961,15 +4983,24 @@ function withFixability(row) {
|
|
|
4961
4983
|
* the API carries: the groups need the lockfile name to read, which `dependencyScope` does once here.
|
|
4962
4984
|
*/
|
|
4963
4985
|
function withDependencyScope(row, { keepGroups = false } = {}) {
|
|
4964
|
-
const { dependencyGroups: _groups, ...lean } = row;
|
|
4965
|
-
const rest = keepGroups ?
|
|
4986
|
+
const { dependencyGroups: _groups, dependencyRelation: _relation, ...lean } = row;
|
|
4987
|
+
const rest = keepGroups ? {
|
|
4988
|
+
...row,
|
|
4989
|
+
dependencyRelation: void 0
|
|
4990
|
+
} : lean;
|
|
4966
4991
|
if (!(row["kind"] === "vulnerable_dependency" || row["kind"] === "outdated_dependency")) return rest;
|
|
4992
|
+
const kind = row["kind"];
|
|
4967
4993
|
return {
|
|
4968
4994
|
...rest,
|
|
4969
4995
|
dependencyScope: dependencyScope({
|
|
4970
|
-
kind
|
|
4996
|
+
kind,
|
|
4971
4997
|
dependencyGroups: row["dependencyGroups"]
|
|
4972
|
-
})
|
|
4998
|
+
}),
|
|
4999
|
+
dependencyRelation: dependencyRelation({
|
|
5000
|
+
kind,
|
|
5001
|
+
dependencyRelation: row["dependencyRelation"]
|
|
5002
|
+
}),
|
|
5003
|
+
...keepGroups ? { dependencyRelationByLockfile: row["dependencyRelation"] ?? null } : {}
|
|
4973
5004
|
};
|
|
4974
5005
|
}
|
|
4975
5006
|
/** A finding as a tool answers it: the row fields, the scope, and whether Fix would take it. */
|
|
@@ -4977,6 +5008,7 @@ function findingRows(findings, extra = []) {
|
|
|
4977
5008
|
return pickFields(findings, [
|
|
4978
5009
|
...FINDING_ROW_FIELDS,
|
|
4979
5010
|
"dependencyGroups",
|
|
5011
|
+
"dependencyRelation",
|
|
4980
5012
|
...extra
|
|
4981
5013
|
]).map((row) => withDependencyScope(row)).map(withFixability);
|
|
4982
5014
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taiga-ai/mcp-server",
|
|
3
|
-
"version": "0.26.0-dev.
|
|
3
|
+
"version": "0.26.0-dev.484",
|
|
4
4
|
"description": "Taiga for AI coding assistants: read products, policies, initiatives and runs, and operate the line, over MCP",
|
|
5
5
|
"mcpName": "ga.tai/mcp-server",
|
|
6
6
|
"type": "module",
|