pipebrain-mcp 0.28.0 → 0.30.0

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.
Files changed (2) hide show
  1. package/dist/main.js +27 -11
  2. package/package.json +1 -1
package/dist/main.js CHANGED
@@ -15098,6 +15098,13 @@ var DisplayIdError = class extends Error {
15098
15098
  };
15099
15099
  var PROJECT_KEY = /^[A-Z]{2,5}$/;
15100
15100
  var DELIVERABLE_RE = /^([A-Z]{2,5})-C([1-9][0-9]*)\/([a-z0-9]+)$/;
15101
+ var INT4_MAX = 2147483647;
15102
+ function matchDisplayId(re, value, numberGroup) {
15103
+ const match = re.exec(value);
15104
+ if (match === null)
15105
+ return null;
15106
+ return Number(match[numberGroup]) > INT4_MAX ? null : match;
15107
+ }
15101
15108
  function assertKey(key) {
15102
15109
  if (!PROJECT_KEY.test(key)) {
15103
15110
  throw new DisplayIdError("project key must be 2\u20135 uppercase letters (A\u2013Z)", key);
@@ -15114,7 +15121,7 @@ function formatContentDisplayId(key, number4) {
15114
15121
  return `${key}-C${number4}`;
15115
15122
  }
15116
15123
  function parseDeliverableDisplayId(value) {
15117
- const match = DELIVERABLE_RE.exec(value);
15124
+ const match = matchDisplayId(DELIVERABLE_RE, value, 2);
15118
15125
  if (match === null) {
15119
15126
  throw new DisplayIdError("not a valid deliverable display id (expected `KEY-C{N}/{platform}`)", value);
15120
15127
  }
@@ -15585,6 +15592,9 @@ var orgInstructionSchema = external_exports.object({
15585
15592
  });
15586
15593
 
15587
15594
  // ../../libs/domain/dist/inputs.js
15595
+ var int4Schema = positiveIntSchema.max(2147483647, {
15596
+ message: "must be no greater than 2147483647"
15597
+ });
15588
15598
  var criterionInputSchema = external_exports.strictObject({
15589
15599
  text: markdownSchema.min(1, { message: "criterion text must not be empty" }),
15590
15600
  verification: verificationSchema.optional(),
@@ -15699,7 +15709,7 @@ var setCriteriaInputSchema = external_exports.strictObject({
15699
15709
  var setCriterionStateInputSchema = external_exports.strictObject({
15700
15710
  criterionId: uuidSchema.optional(),
15701
15711
  issue: issueRefSchema.optional(),
15702
- criterionNumber: positiveIntSchema.optional(),
15712
+ criterionNumber: int4Schema.optional(),
15703
15713
  state: criterionStateSchema,
15704
15714
  evidence: markdownSchema.optional()
15705
15715
  }).refine((v) => {
@@ -15718,9 +15728,7 @@ var askQuestionsInputSchema = external_exports.strictObject({
15718
15728
  issue: issueRefSchema,
15719
15729
  questions: external_exports.array(questionInputSchema).min(1, { message: "ask at least one question" })
15720
15730
  });
15721
- var questionNumberSchema = positiveIntSchema.max(2147483647, {
15722
- message: "question number is out of range"
15723
- });
15731
+ var questionNumberSchema = int4Schema;
15724
15732
  var withdrawQuestionInputSchema = external_exports.strictObject({
15725
15733
  issue: issueRefSchema,
15726
15734
  number: questionNumberSchema
@@ -15755,7 +15763,8 @@ var updateRequirementInputSchema = external_exports.strictObject({
15755
15763
  });
15756
15764
  var approveRequirementInputSchema = external_exports.strictObject({
15757
15765
  requirement: requirementRefSchema,
15758
- revision: positiveIntSchema.optional()
15766
+ // → requirement_revisions.revision_number, an `integer` column (PIPE-149).
15767
+ revision: int4Schema.optional()
15759
15768
  });
15760
15769
  var createDecisionInputSchema = external_exports.strictObject({
15761
15770
  project: projectRefSchema,
@@ -15879,7 +15888,8 @@ var updateSecretDescriptionInputSchema = external_exports.strictObject({
15879
15888
  });
15880
15889
  var rollbackSecretInputSchema = external_exports.strictObject({
15881
15890
  env: external_exports.string().min(1, { message: "environment must not be empty" }),
15882
- version: positiveIntSchema
15891
+ // → secret_versions.version, an `integer` column (PIPE-149).
15892
+ version: int4Schema
15883
15893
  });
15884
15894
  var secretRefSchema = external_exports.strictObject({
15885
15895
  project: projectKeySchema,
@@ -15999,7 +16009,8 @@ var listAssetsFilterSchema = external_exports.strictObject({
15999
16009
  var createChatMessageReferenceInputSchema = external_exports.strictObject({
16000
16010
  entityType: chatEntityTypeSchema,
16001
16011
  entityId: uuidSchema,
16002
- revision: positiveIntSchema.optional()
16012
+ // → requirement_revisions.revision_number, an `integer` column (PIPE-149).
16013
+ revision: int4Schema.optional()
16003
16014
  });
16004
16015
  var createChatMessageInputSchema = external_exports.strictObject({
16005
16016
  body: external_exports.string().min(1, { message: "message body must not be empty" }).max(8e3, { message: "message body must be at most 8000 characters" }),
@@ -17148,7 +17159,7 @@ Every loose end has one destination, and none of them is prose. Anything you not
17148
17159
  inputSchema: updateIssueInputSchema.shape
17149
17160
  }, ({ issue: issue2, ...fields }) => run(() => client2.updateIssue(issue2, fields)));
17150
17161
  registerTool("set_status", {
17151
- description: "Set an issue\u2019s status; the \xA76 guards apply and a guard failure returns the specific reason, naming the rows it refused on (\xA77). The criteria gates read whatever criteria the issue carries, whatever its type: verify needs every auto criterion passed, done needs every criterion passed. Two guards remain EPIC-ONLY, and the asymmetry is the rule rather than an oversight \u2014 an epic that has stated NO criteria is refused at both gates, because an empty list would clear them having committed to nothing, while a task or a bug carrying none moves through both untouched (most work is stated adequately by its body); and `done` on an epic additionally requires every child to be terminal, read from each child\u2019s STATUS and never from its criteria. A BLOCKED issue \u2014 one carrying an explicit mark or waiting on a blocker that is not yet `done`/`killed` \u2014 cannot move to `ready` or `in_progress`, and the refusal names the reason and every unresolved blocker, so clear the mark (`clear_blocked`) or finish, kill or `unlink_blocker` each blocker first; every other target still moves while blocked. An issue with NO milestone cannot move to any status but `triage` and `killed` (PIPE-R10 rule 9) \u2014 set one with `update_issue` first; `killed` is exempt, so work nobody scheduled can still be abandoned.",
17162
+ description: "Set an issue\u2019s status; the \xA76 guards apply and a guard failure returns the specific reason, naming the rows it refused on (\xA77). The criteria gates read whatever criteria the issue carries, whatever its type: verify needs every auto criterion passed, done needs every criterion passed. ONE guard remains EPIC-ONLY, and the asymmetry is the rule rather than an oversight \u2014 an epic that has stated NO criteria is refused at both gates, because an empty list would clear them having committed to nothing, while a task or a bug carrying none moves through both untouched (most work is stated adequately by its body). `done` additionally requires every child of the issue being closed to be terminal \u2014 an epic, a task and a bug alike \u2014 read from each child\u2019s STATUS and never from its criteria. A BLOCKED issue \u2014 one carrying an explicit mark or waiting on a blocker that is not yet `done`/`killed` \u2014 cannot move to `ready` or `in_progress`, and the refusal names the reason and every unresolved blocker, so clear the mark (`clear_blocked`) or finish, kill or `unlink_blocker` each blocker first; every other target still moves while blocked. An issue with NO milestone cannot move to any status but `triage` and `killed` (PIPE-R10 rule 9) \u2014 set one with `update_issue` first; `killed` is exempt, so work nobody scheduled can still be abandoned.",
17152
17163
  inputSchema: setStatusInputSchema.shape
17153
17164
  }, (args) => run(() => client2.setStatus(args.issue, args.status)));
17154
17165
  registerTool("claim_issue", {
@@ -17188,10 +17199,15 @@ Every loose end has one destination, and none of them is prose. Anything you not
17188
17199
  // `issue` is OPTIONAL: the criterionId-only form needs no issue ref. The
17189
17200
  // exactly-one-of rule can't be expressed in a raw shape, so the handler
17190
17201
  // enforces it via the shared `@pipeline/domain` refine (mirror of §7).
17202
+ //
17203
+ // `criterionNumber` takes `int4Schema` so the ADVERTISED JSON Schema carries
17204
+ // the real ceiling (PIPE-149) — hand-rolling it from `positiveIntSchema` told
17205
+ // clients the maximum was 2^53-1 while the column and the API both stop at
17206
+ // 2,147,483,647, so a client refusal that should happen never did.
17191
17207
  inputSchema: {
17192
17208
  issue: issueRefSchema.optional(),
17193
17209
  criterionId: uuidSchema.optional(),
17194
- criterionNumber: positiveIntSchema.optional(),
17210
+ criterionNumber: int4Schema.optional(),
17195
17211
  state: criterionStateSchema,
17196
17212
  evidence: markdownSchema.optional()
17197
17213
  }
@@ -17459,7 +17475,7 @@ function loadMcpConfig() {
17459
17475
  }
17460
17476
 
17461
17477
  // src/version.ts
17462
- var VERSION = "0.28.0";
17478
+ var VERSION = "0.30.0";
17463
17479
 
17464
17480
  // src/main.ts
17465
17481
  var config2 = loadMcpConfig();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pipebrain-mcp",
3
- "version": "0.28.0",
3
+ "version": "0.30.0",
4
4
  "description": "Pipebrain MCP server for Claude Code and Claude Desktop — issues, requirements, content, assets, and metadata-only secrets over the Pipebrain API.",
5
5
  "type": "module",
6
6
  "license": "MIT",