@taiga-ai/mcp-server 0.37.0-dev.974 → 0.37.0-dev.976
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 +45 -15
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -23883,6 +23883,10 @@ var TaigaClient = class {
|
|
|
23883
23883
|
async listBuildRunSteps(id) {
|
|
23884
23884
|
return this.request("GET", `/builds/${seg(id)}/steps`);
|
|
23885
23885
|
}
|
|
23886
|
+
/** The public hosts the run reached through the egress gateway (PRO-4268). */
|
|
23887
|
+
async listBuildRunEgressHosts(id) {
|
|
23888
|
+
return this.request("GET", `/builds/${seg(id)}/hosts`);
|
|
23889
|
+
}
|
|
23886
23890
|
async getMaintenanceSummary(productId) {
|
|
23887
23891
|
return this.request("GET", `/products/${seg(productId)}/maintenance/summary`);
|
|
23888
23892
|
}
|
|
@@ -27218,16 +27222,18 @@ const EXCEL_MAX_ROW = 1048576;
|
|
|
27218
27222
|
* Where an engineer build's sandbox may connect to (PRO-2793, part of
|
|
27219
27223
|
* PRO-1980).
|
|
27220
27224
|
*
|
|
27221
|
-
* The
|
|
27222
|
-
*
|
|
27223
|
-
*
|
|
27224
|
-
*
|
|
27225
|
+
* The egress gateway is the sandbox's only way out for what the other
|
|
27226
|
+
* gateways do not carry (packages, images, toolchains, scanners). Reads are
|
|
27227
|
+
* open and writes are controlled (PRO-4266): every run is held to an upload
|
|
27228
|
+
* budget, the gateway refuses private and metadata addresses, and it never
|
|
27229
|
+
* hands the sandbox a credential, whichever access a product has.
|
|
27225
27230
|
*
|
|
27226
|
-
* - `
|
|
27227
|
-
*
|
|
27228
|
-
* - `
|
|
27229
|
-
*
|
|
27230
|
-
*
|
|
27231
|
+
* - `unrestricted` (the default, also what `null` means): any public host.
|
|
27232
|
+
* A list of hosts nobody can keep complete broke builds one host at a time.
|
|
27233
|
+
* - `allowlist`: only the gateway's standard list (the public package
|
|
27234
|
+
* registries, toolchain downloads, container registries, GitHub for public
|
|
27235
|
+
* dependencies, the tenant's own registries) plus the product's own
|
|
27236
|
+
* `networkHosts`. For a product that wants to name where its builds go.
|
|
27231
27237
|
*
|
|
27232
27238
|
* A host is one exact name (`api.example.com`). There are no wildcards: a
|
|
27233
27239
|
* wildcard over a multi-label public suffix (`*.co.uk`) or a provider's
|
|
@@ -35739,7 +35745,7 @@ const PRODUCT_VIEW_FIELDS = [
|
|
|
35739
35745
|
"createdAt",
|
|
35740
35746
|
"updatedAt"
|
|
35741
35747
|
];
|
|
35742
|
-
const UNSET_MEANS = "A null setting is unset: kind reads as application; autoMerge follows the factory, then the organization; ownsInfrastructure and ownsDeployment follow the organization default (yes when it has none); ownsApplication is yes; emitDesignStandards follows how the product started; networkAccess is
|
|
35748
|
+
const UNSET_MEANS = "A null setting is unset: kind reads as application; autoMerge follows the factory, then the organization; ownsInfrastructure and ownsDeployment follow the organization default (yes when it has none); ownsApplication is yes; emitDesignStandards follows how the product started; networkAccess is unrestricted. signalAutonomy is what each kind of finding resolves to (off, notify, propose, build, merge) and what decided it: the product, the kind default or cap, or auto-merge consent. dailyFixLimit is how many fixes Taiga may raise on its own per day, set by the product or the starting value (setBy default).";
|
|
35743
35749
|
/**
|
|
35744
35750
|
* Each product's policy standing beside its row: the counts the standing read opens with. A product still in setup
|
|
35745
35751
|
* has none to read; a read the API refuses or fails says so on its row rather than failing the list.
|
|
@@ -37214,14 +37220,21 @@ function registerBuildTools(server, client) {
|
|
|
37214
37220
|
}));
|
|
37215
37221
|
server.registerTool("taiga_get_run", {
|
|
37216
37222
|
title: "Get run",
|
|
37217
|
-
description: "Read one coding agent run, and why it failed when it did: its outcome, pull request, security pass (scanCoverage names scanners that did not run) and each step with its commit, files and checks. A failed run says where it stopped (stoppedIn) and the line of the error that says why (cause). full: true adds every step's instructions and report. lastReplan says what a request for changes did to the plan the run builds now: the steps it added, edited and dropped. A failed or stopped run's nextStep says how to carry it on (taiga_resume_initiative on its initiative).",
|
|
37223
|
+
description: "Read one coding agent run, and why it failed when it did: its outcome, pull request, security pass (scanCoverage names scanners that did not run) and each step with its commit, files and checks. A failed run says where it stopped (stoppedIn) and the line of the error that says why (cause). full: true adds every step's instructions and report. lastReplan says what a request for changes did to the plan the run builds now: the steps it added, edited and dropped. A failed or stopped run's nextStep says how to carry it on (taiga_resume_initiative on its initiative). hostsReached lists the public hosts the run reached through the egress gateway, first reached first, with the bytes it sent and received there.",
|
|
37218
37224
|
inputSchema: object({
|
|
37219
37225
|
runId,
|
|
37220
37226
|
full: boolean().optional().describe("Carry each step's complete instructions and report (default false: a summary)")
|
|
37221
37227
|
}),
|
|
37222
37228
|
annotations: READ_ONLY
|
|
37223
37229
|
}, (params) => runTool(async () => {
|
|
37224
|
-
const [run, steps] = await Promise.all([
|
|
37230
|
+
const [run, steps, hosts] = await Promise.all([
|
|
37231
|
+
client.getBuildRun(params.runId),
|
|
37232
|
+
client.listBuildRunSteps(params.runId),
|
|
37233
|
+
client.listBuildRunEgressHosts(params.runId).catch((error) => {
|
|
37234
|
+
if (error instanceof TaigaApiError && error.status === 404) return { data: [] };
|
|
37235
|
+
throw error;
|
|
37236
|
+
})
|
|
37237
|
+
]);
|
|
37225
37238
|
const runRow = run.data;
|
|
37226
37239
|
const rows = steps.data.map((step) => neverStarted(step));
|
|
37227
37240
|
const where = stoppedIn(runRow, rows);
|
|
@@ -37239,7 +37252,8 @@ function registerBuildTools(server, client) {
|
|
|
37239
37252
|
...lastReplan ? { lastReplan: {
|
|
37240
37253
|
...lastReplan,
|
|
37241
37254
|
waitsForReview
|
|
37242
|
-
} } : {}
|
|
37255
|
+
} } : {},
|
|
37256
|
+
...hostsReachedOf(hosts.data)
|
|
37243
37257
|
};
|
|
37244
37258
|
const note = verificationNote(rows);
|
|
37245
37259
|
const verification = note ? { verificationNote: note } : {};
|
|
@@ -37299,6 +37313,22 @@ function steerSituation(steer) {
|
|
|
37299
37313
|
if (steer === "after_round") return "The run is answering review comments or fixing CI; the request is planned when that round ends, and no further automatic round starts while it is open.";
|
|
37300
37314
|
return "A re-plan is already running; the request joins it.";
|
|
37301
37315
|
}
|
|
37316
|
+
/** At most this many hosts in a run's read; the rest are counted. */
|
|
37317
|
+
const HOSTS_REACHED_SHOWN = 50;
|
|
37318
|
+
/** Where a run went (PRO-4268): its hosts, first reached first, or nothing for a run that reached none. */
|
|
37319
|
+
function hostsReachedOf(hosts) {
|
|
37320
|
+
if (hosts.length === 0) return {};
|
|
37321
|
+
const shown = hosts.slice(0, HOSTS_REACHED_SHOWN).map(({ host, sentBytes, receivedBytes, connections }) => ({
|
|
37322
|
+
host,
|
|
37323
|
+
sentBytes,
|
|
37324
|
+
receivedBytes,
|
|
37325
|
+
connections
|
|
37326
|
+
}));
|
|
37327
|
+
return {
|
|
37328
|
+
hostsReached: shown,
|
|
37329
|
+
...hosts.length > shown.length ? { hostsReachedNotShown: hosts.length - shown.length } : {}
|
|
37330
|
+
};
|
|
37331
|
+
}
|
|
37302
37332
|
//#endregion
|
|
37303
37333
|
//#region src/tools/queue.ts
|
|
37304
37334
|
/** How many entries the read names; past this an entry keeps its initiativeId only. */
|
|
@@ -55425,7 +55455,7 @@ function registerSetupTools(server, client) {
|
|
|
55425
55455
|
}));
|
|
55426
55456
|
server.registerTool("taiga_update_product", {
|
|
55427
55457
|
title: "Change a product's settings",
|
|
55428
|
-
description: "Change a product's name, what Taiga builds for it (application, infrastructure, pipelines), or where its builds may connect (networkAccess: allowlist, Taiga's standard list plus the product's networkHosts
|
|
55458
|
+
description: "Change a product's name, what Taiga builds for it (application, infrastructure, pipelines), or where its builds may connect (networkAccess: unrestricted, any public host, the default; or allowlist, Taiga's standard list plus the product's networkHosts; networkHosts replaces the list, each one exact DNS name, no wildcard or domain anyone can host on, 100 at most; changes apply from the next build). A new name changes its slug. Later plans follow the change; planned work is not redone.",
|
|
55429
55459
|
inputSchema: object({
|
|
55430
55460
|
productId,
|
|
55431
55461
|
name: string$2().trim().min(1).max(255).optional().describe("A new name"),
|
|
@@ -55433,7 +55463,7 @@ function registerSetupTools(server, client) {
|
|
|
55433
55463
|
...buildScope,
|
|
55434
55464
|
deploymentNotes: deploymentNotes.nullable().optional(),
|
|
55435
55465
|
emitDesignStandards: boolean().nullable().optional().describe("Inherit the organization's design standards; null follows the default"),
|
|
55436
|
-
networkAccess: _enum(PRODUCT_NETWORK_ACCESS).nullable().optional().describe("Where a build's sandbox may connect:
|
|
55466
|
+
networkAccess: _enum(PRODUCT_NETWORK_ACCESS).nullable().optional().describe("Where a build's sandbox may connect: unrestricted (the default; null returns to it) or allowlist"),
|
|
55437
55467
|
networkHosts: array(string$2().trim().toLowerCase().min(1).max(253)).max(100).optional().describe("The product's own hosts beyond the standard list, replacing the current ones: exact DNS names such as api.example.com")
|
|
55438
55468
|
}),
|
|
55439
55469
|
annotations: OPERATE_SETTING
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taiga-ai/mcp-server",
|
|
3
|
-
"version": "0.37.0-dev.
|
|
3
|
+
"version": "0.37.0-dev.976",
|
|
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
|
"license": "UNLICENSED",
|