standup-mr 1.0.0 → 1.0.1

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
@@ -4,6 +4,22 @@ All notable changes to standup-mr are recorded here. The format follows
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project uses
5
5
  [semantic versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [1.0.1] - 2026-10-12
8
+
9
+ ### Fixed
10
+
11
+ - GitLab merge requests take their pipeline from `head_pipeline`, the one
12
+ GitLab shows on the MR. The `/pipelines` list is not ordered newest first,
13
+ so a merge request could be reported blocked by a stale red pipeline from an
14
+ earlier commit, and the current failure's log was never read.
15
+ - Error lines from GitLab's timestamped job logs no longer start with the
16
+ stream marker (`01O`, `00E+`) that follows each timestamp.
17
+
18
+ ### Added
19
+
20
+ - Every MCP tool declares a human-readable `title`, which clients show in
21
+ their tool lists and permission prompts.
22
+
7
23
  ## [1.0.0] - 2026-10-12
8
24
 
9
25
  First stable release. From here on the CLI commands and flags, the JSON that
@@ -383,7 +383,7 @@ var SECTION = /section_(start|end):\d+:\S*/g;
383
383
  var SIGNAL = /(\berror\b|Error:|fatal:|npm ERR!|\bfailed\b)/i;
384
384
  var NOISE = /^(Cleaning up|Job failed: exit status|ERROR: Job failed|Uploading artifacts|Job succeeded)/i;
385
385
  var MAX_LINE = 200;
386
- var TIMESTAMP = /^\d{4}-\d{2}-\d{2}T[\d:.]+Z\s+/;
386
+ var TIMESTAMP = /^\d{4}-\d{2}-\d{2}T[\d:.]+Z\s+(?:[0-9a-f]{2}[OE]\+?\s)?/;
387
387
  var ERROR_MARKER = /^##\[error\]\s*/;
388
388
  var GROUP_START = /^##\[group\]/;
389
389
  var GROUP_END = /^##\[endgroup\]/;
@@ -904,14 +904,11 @@ var GitLabProvider = class {
904
904
  async shapeMr(mr) {
905
905
  const projectId = mr.project_id;
906
906
  const iid = mr.iid;
907
- const [pipelines, unresolved] = await Promise.all([
908
- this.getJson(
909
- `projects/${projectId}/merge_requests/${iid}/pipelines`,
910
- { per_page: 1 }
911
- ),
907
+ const [detail, unresolved] = await Promise.all([
908
+ this.getJson(`projects/${projectId}/merge_requests/${iid}`),
912
909
  this.countUnresolved(projectId, iid)
913
910
  ]);
914
- const latest = pipelines?.[0];
911
+ const latest = detail?.head_pipeline ?? void 0;
915
912
  return {
916
913
  provider: "gitlab",
917
914
  project: String(mr.references.full).split("!")[0],
package/dist/cli.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  postWebhook,
9
9
  readStandupSkillBody,
10
10
  toMarkdown
11
- } from "./chunk-S7DAKN36.js";
11
+ } from "./chunk-3C3PBI3T.js";
12
12
 
13
13
  // src/cli/cli.ts
14
14
  import { realpathSync } from "fs";
package/dist/index.js CHANGED
@@ -45,7 +45,7 @@ import {
45
45
  toMarkdown,
46
46
  undiagnosed,
47
47
  unreachable
48
- } from "./chunk-S7DAKN36.js";
48
+ } from "./chunk-3C3PBI3T.js";
49
49
  export {
50
50
  ApiError,
51
51
  ConfigError,
@@ -306,7 +306,7 @@ var SECTION = /section_(start|end):\d+:\S*/g;
306
306
  var SIGNAL = /(\berror\b|Error:|fatal:|npm ERR!|\bfailed\b)/i;
307
307
  var NOISE = /^(Cleaning up|Job failed: exit status|ERROR: Job failed|Uploading artifacts|Job succeeded)/i;
308
308
  var MAX_LINE = 200;
309
- var TIMESTAMP = /^\d{4}-\d{2}-\d{2}T[\d:.]+Z\s+/;
309
+ var TIMESTAMP = /^\d{4}-\d{2}-\d{2}T[\d:.]+Z\s+(?:[0-9a-f]{2}[OE]\+?\s)?/;
310
310
  var ERROR_MARKER = /^##\[error\]\s*/;
311
311
  var GROUP_START = /^##\[group\]/;
312
312
  var GROUP_END = /^##\[endgroup\]/;
@@ -936,14 +936,11 @@ var GitLabProvider = class {
936
936
  async shapeMr(mr) {
937
937
  const projectId = mr.project_id;
938
938
  const iid = mr.iid;
939
- const [pipelines, unresolved] = await Promise.all([
940
- this.getJson(
941
- `projects/${projectId}/merge_requests/${iid}/pipelines`,
942
- { per_page: 1 }
943
- ),
939
+ const [detail, unresolved] = await Promise.all([
940
+ this.getJson(`projects/${projectId}/merge_requests/${iid}`),
944
941
  this.countUnresolved(projectId, iid)
945
942
  ]);
946
- const latest = pipelines?.[0];
943
+ const latest = detail?.head_pipeline ?? void 0;
947
944
  return {
948
945
  provider: "gitlab",
949
946
  project: String(mr.references.full).split("!")[0],
@@ -1280,6 +1277,9 @@ async function runPostTool(args, deps = {}) {
1280
1277
  async function runInstructionsTool() {
1281
1278
  return text(readStandupSkillBody());
1282
1279
  }
1280
+ var STANDUP_TOOL_TITLE = "Get standup data";
1281
+ var POST_TOOL_TITLE = "Post standup note";
1282
+ var INSTRUCTIONS_TOOL_TITLE = "Get note instructions";
1283
1283
  var STANDUP_TOOL_ANNOTATIONS = {
1284
1284
  readOnlyHint: true,
1285
1285
  destructiveHint: false,
@@ -1319,6 +1319,7 @@ function createServer() {
1319
1319
  server.registerTool(
1320
1320
  "get_standup_data",
1321
1321
  {
1322
+ title: STANDUP_TOOL_TITLE,
1322
1323
  description: STANDUP_TOOL_DESCRIPTION,
1323
1324
  inputSchema: STANDUP_TOOL_SCHEMA,
1324
1325
  annotations: STANDUP_TOOL_ANNOTATIONS
@@ -1328,6 +1329,7 @@ function createServer() {
1328
1329
  server.registerTool(
1329
1330
  "post_standup_note",
1330
1331
  {
1332
+ title: POST_TOOL_TITLE,
1331
1333
  description: POST_TOOL_DESCRIPTION,
1332
1334
  inputSchema: POST_TOOL_SCHEMA,
1333
1335
  annotations: POST_TOOL_ANNOTATIONS
@@ -1337,6 +1339,7 @@ function createServer() {
1337
1339
  server.registerTool(
1338
1340
  "get_note_instructions",
1339
1341
  {
1342
+ title: INSTRUCTIONS_TOOL_TITLE,
1340
1343
  description: INSTRUCTIONS_TOOL_DESCRIPTION,
1341
1344
  annotations: INSTRUCTIONS_TOOL_ANNOTATIONS
1342
1345
  },
@@ -1366,13 +1369,16 @@ if (entryUrl && import.meta.url === entryUrl) {
1366
1369
  export {
1367
1370
  INSTRUCTIONS_TOOL_ANNOTATIONS,
1368
1371
  INSTRUCTIONS_TOOL_DESCRIPTION,
1372
+ INSTRUCTIONS_TOOL_TITLE,
1369
1373
  POST_TOOL_ANNOTATIONS,
1370
1374
  POST_TOOL_DESCRIPTION,
1371
1375
  POST_TOOL_SCHEMA,
1376
+ POST_TOOL_TITLE,
1372
1377
  SERVER_ICONS,
1373
1378
  STANDUP_TOOL_ANNOTATIONS,
1374
1379
  STANDUP_TOOL_DESCRIPTION,
1375
1380
  STANDUP_TOOL_SCHEMA,
1381
+ STANDUP_TOOL_TITLE,
1376
1382
  WEBHOOK_URL_ENV,
1377
1383
  collect,
1378
1384
  createServer,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "standup-mr",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "mcpName": "io.github.Jubstaaa/standup-mr",
5
5
  "description": "Standup notes from merge request state, not commit logs.",
6
6
  "keywords": [