@daghis/teamcity-mcp 2.12.6 → 2.12.7

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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.12.7](https://github.com/Daghis/teamcity-mcp/compare/teamcity-mcp-v2.12.6...teamcity-mcp-v2.12.7) (2026-10-03)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **build-log:** protect errors and bound stream snapshots ([#538](https://github.com/Daghis/teamcity-mcp/issues/538)) ([36a300c](https://github.com/Daghis/teamcity-mcp/commit/36a300c932fadeea6136effde9c93d82ad716780))
9
+
3
10
  ## [2.12.6](https://github.com/Daghis/teamcity-mcp/compare/teamcity-mcp-v2.12.5...teamcity-mcp-v2.12.6) (2026-10-03)
4
11
 
5
12
 
package/dist/index.js CHANGED
@@ -128,9 +128,10 @@ function isRetryableError(error3) {
128
128
  }
129
129
  return false;
130
130
  }
131
- var TeamCityAPIError, TeamCityAuthorizationError, TeamCityNotFoundError, TeamCityRateLimitError, TeamCityServerError, TeamCityNetworkError, TeamCityRequestError, TeamCityTimeoutError, BuildNotFoundError, BuildAccessDeniedError;
131
+ var import_node_util2, TeamCityAPIError, TeamCityAuthorizationError, TeamCityNotFoundError, TeamCityRateLimitError, TeamCityServerError, TeamCityNetworkError, TeamCityRequestError, TeamCityTimeoutError, BuildNotFoundError, BuildAccessDeniedError;
132
132
  var init_errors = __esm({
133
133
  "src/teamcity/errors.ts"() {
134
+ import_node_util2 = require("node:util");
134
135
  init_stream();
135
136
  TeamCityAPIError = class _TeamCityAPIError extends Error {
136
137
  code;
@@ -181,6 +182,9 @@ var init_errors = __esm({
181
182
  stack: this.stack
182
183
  };
183
184
  }
185
+ [import_node_util2.inspect.custom]() {
186
+ return this.toJSON();
187
+ }
184
188
  };
185
189
  TeamCityAuthorizationError = class extends TeamCityAPIError {
186
190
  constructor(message = "Authorization failed", requestId, originalError) {
@@ -1306,7 +1310,7 @@ function debug2(message, meta) {
1306
1310
  // package.json
1307
1311
  var package_default = {
1308
1312
  name: "@daghis/teamcity-mcp",
1309
- version: "2.12.6",
1313
+ version: "2.12.7",
1310
1314
  description: "Model Control Protocol server for TeamCity CI/CD integration with AI coding assistants",
1311
1315
  mcpName: "io.github.Daghis/teamcity",
1312
1316
  main: "dist/index.js",
@@ -4926,6 +4930,7 @@ axiosRetry.isRetryableError = isRetryableError2;
4926
4930
  var esm_default = axiosRetry;
4927
4931
 
4928
4932
  // src/teamcity/auth.ts
4933
+ var import_node_string_decoder = require("node:string_decoder");
4929
4934
  var import_crypto = require("crypto");
4930
4935
  init_errors();
4931
4936
  init_stream();
@@ -4977,15 +4982,23 @@ var STREAM_BODY_TIMEOUT_MS = 5e3;
4977
4982
  var streamToString = async (stream, maxBytes = 64 * 1024) => {
4978
4983
  const chunks = [];
4979
4984
  let total = 0;
4985
+ let truncated = false;
4980
4986
  for await (const chunk of stream) {
4981
4987
  const buf = toBuffer(chunk);
4982
- chunks.push(buf);
4983
- total += buf.length;
4988
+ const retained = buf.subarray(0, maxBytes - total);
4989
+ chunks.push(retained);
4990
+ total += retained.length;
4984
4991
  if (total >= maxBytes) {
4992
+ truncated = true;
4985
4993
  break;
4986
4994
  }
4987
4995
  }
4988
- return Buffer.concat(chunks).toString("utf8").slice(0, maxBytes);
4996
+ const decoder = new import_node_string_decoder.StringDecoder("utf8");
4997
+ const text = decoder.write(Buffer.concat(chunks, total)) + (truncated ? "" : decoder.end());
4998
+ if (Buffer.byteLength(text) <= maxBytes) {
4999
+ return text;
5000
+ }
5001
+ return new import_node_string_decoder.StringDecoder("utf8").write(Buffer.from(text).subarray(0, maxBytes));
4989
5002
  };
4990
5003
  var snapshotStreamBody = async (stream, timeoutMs) => {
4991
5004
  let timer;
@@ -38923,8 +38936,12 @@ var TeamCityAPI = class _TeamCityAPI {
38923
38936
  responseType,
38924
38937
  transformResponse
38925
38938
  });
38926
- } catch {
38927
- throw primaryError;
38939
+ } catch (fallbackError) {
38940
+ const fallbackStatus = fallbackError instanceof TeamCityAPIError ? fallbackError.statusCode : void 0;
38941
+ if (fallbackStatus === 404 || fallbackStatus === 405) {
38942
+ throw primaryError;
38943
+ }
38944
+ throw fallbackError;
38928
38945
  }
38929
38946
  }
38930
38947
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daghis/teamcity-mcp",
3
- "version": "2.12.6",
3
+ "version": "2.12.7",
4
4
  "description": "Model Control Protocol server for TeamCity CI/CD integration with AI coding assistants",
5
5
  "mcpName": "io.github.Daghis/teamcity",
6
6
  "main": "dist/index.js",
package/server.json CHANGED
@@ -7,13 +7,13 @@
7
7
  "source": "github"
8
8
  },
9
9
  "websiteUrl": "https://github.com/Daghis/teamcity-mcp",
10
- "version": "2.12.6",
10
+ "version": "2.12.7",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "registryBaseUrl": "https://registry.npmjs.org",
15
15
  "identifier": "@daghis/teamcity-mcp",
16
- "version": "2.12.6",
16
+ "version": "2.12.7",
17
17
  "runtimeHint": "npx",
18
18
  "runtimeArguments": [
19
19
  {