pipebrain-mcp 0.22.0 → 0.24.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 +21 -3
  2. package/package.json +1 -1
package/dist/main.js CHANGED
@@ -15252,6 +15252,13 @@ var issueSchema = external_exports.object({
15252
15252
  statusChangedAt: external_exports.iso.datetime({ offset: true }),
15253
15253
  deletedAt: external_exports.iso.datetime({ offset: true }).nullable()
15254
15254
  });
15255
+ var criterionFiledBugSchema = external_exports.object({
15256
+ id: uuidSchema,
15257
+ projectKey: projectKeySchema,
15258
+ displayId: external_exports.string().min(1),
15259
+ title: external_exports.string().min(1),
15260
+ status: issueStatusSchema
15261
+ });
15255
15262
  var criterionSchema = external_exports.object({
15256
15263
  id: uuidSchema,
15257
15264
  displayId: external_exports.string().min(1),
@@ -15272,6 +15279,12 @@ var criterionSchema = external_exports.object({
15272
15279
  stateSetBy: uuidSchema.nullable(),
15273
15280
  stateSetAt: external_exports.iso.datetime({ offset: true }).nullable(),
15274
15281
  stateViaTokenId: uuidSchema.nullable(),
15282
+ // Every bug ever filed against this criterion (PIPE-272), oldest first. ALWAYS
15283
+ // present, `[]` when none — a client must never have to tell "no bug was filed"
15284
+ // from "a payload that omits the key". Terminal bugs stay listed: a bug's own
15285
+ // lifecycle says nothing about whether it was FILED, and a row that stopped naming
15286
+ // its bug the moment the bug was finished would start inviting a duplicate.
15287
+ filedBugs: external_exports.array(criterionFiledBugSchema),
15275
15288
  createdAt: external_exports.iso.datetime({ offset: true }),
15276
15289
  updatedAt: external_exports.iso.datetime({ offset: true }),
15277
15290
  deletedAt: external_exports.iso.datetime({ offset: true }).nullable()
@@ -15598,7 +15611,12 @@ var createIssueInputSchema = external_exports.strictObject({
15598
15611
  // Content-deliverable links (Content module) — mirrors requirementLinks; pins
15599
15612
  // each at the deliverable's CURRENT (latest) revision. Promotion sets this.
15600
15613
  deliverableLinks: external_exports.array(deliverableRefSchema).optional(),
15601
- criteria: external_exports.array(criterionInputSchema).optional()
15614
+ criteria: external_exports.array(criterionInputSchema).optional(),
15615
+ // The acceptance criterion this bug was filed against (PIPE-272). Records on the
15616
+ // BUG which row sent someone to file it, so that row can name the bug instead of
15617
+ // offering to file another. Server-refused on any type but `bug`
15618
+ // (`criterion_requires_bug`) and on a criterion outside the caller's org.
15619
+ criterionId: uuidSchema.optional()
15602
15620
  });
15603
15621
  var promoteFeedbackInputSchema = external_exports.strictObject({
15604
15622
  type: external_exports.enum(["epic", "task"]),
@@ -17081,7 +17099,7 @@ Every loose end has one destination, and none of them is prose. Anything you not
17081
17099
  inputSchema: { issue: issueRefSchema }
17082
17100
  }, (args) => run(() => client2.getIssue(args.issue)));
17083
17101
  registerTool("create_issue", {
17084
- description: 'Create an issue (epic/task/bug/feedback). Omitted status defaults to triage (still subject to \xA76 guards); omitted environment resolves explicit \u2192 parent\u2019s environment \u2192 project default (prod). Optional parent (self/cycle rejected), priority, milestone, requirement_links (pins each at its approved revision; a target with no approved revision is rejected), deliverable_links (content deliverables like DWB-C3/bsky \u2014 pins each at its current revision; the promotion path), and ordered {text, verification, howTo} criteria (\xA77). A `status` other than `triage` or `killed` REQUIRES `milestone` (PIPE-R10 rule 9): work past triage belongs to a release, and the create is refused (`milestone_required`) without one. Search before you create: `list_issues` takes a `text` filter \u2014 run it on the distinctive nouns first. Sessions do not see each other, so a duplicate is invisible until someone finds both; on a near match, comment or amend the existing record rather than filing again. The bar for filing a bug: file `type: bug` only when the observed behavior breaks an approved requirement or a defined acceptance criterion, and name which one before you file. If you cannot name one, this is not a bug \u2014 code you find unclear, an edge case nobody specified, a performance number nobody set, and anything you would phrase as "this could be better" are opinions about the product, so file each as `type: feedback`, or not at all. The bar exists because a queue holding both real defects and unshared taste has to be read entirely before any of it can be trusted. Link another record by key plus title on first mention; never paste its text into a body \u2014 the source changes, the copy does not, and a stale copy gets built. A decision you need from the operator is filed as a question via `ask_questions`, never written as an "Open questions" heading inside a body \u2014 a heading prompts nobody and records no answer, so a later session cannot tell whether the decision was made. Before assigning any verification mode, establish what this project can drive end to end \u2014 an end-to-end test harness and the command that runs it. A criterion is `auto` when an evaluator can drive the input and read the result against the running system, which includes behavior shown in the interface wherever such a harness exists; the mode follows from what can be driven, not from where the behavior appears. What qualifies a criterion as `auto` is the evaluator\u2019s own run, never the existence of a test the implementer wrote. Mark `manual` only when the verdict needs a person\u2019s judgment; a criterion you cannot describe as drivable is usually worded too vaguely, so reword it against the observable rather than fall back to a person. A `manual` criterion must also carry `howTo` \u2014 one or two sentences, not an essay, saying where to look, what to do, and what counts as passing for whoever checks it by hand. Writing or changing one without it is refused (`how_to_required`); so is supplying it on an `auto` criterion, which a machine checks. Criteria live on epics only: a task cannot carry a criteria list and instead states in its own body what would count as done. Cross-cutting requirements bind every epic automatically and arrive with `get_issue` \u2014 never restate them in a body and never add them to `requirement_links`; an explicit link pins the linked document\u2019s approved revision.',
17102
+ description: 'Create an issue (epic/task/bug/feedback). Omitted status defaults to triage (still subject to \xA76 guards); omitted environment resolves explicit \u2192 parent\u2019s environment \u2192 project default (prod). Optional parent (self/cycle rejected), priority, milestone, requirement_links (pins each at its approved revision; a target with no approved revision is rejected), deliverable_links (content deliverables like DWB-C3/bsky \u2014 pins each at its current revision; the promotion path), and ordered {text, verification, howTo} criteria (\xA77). A `status` other than `triage` or `killed` REQUIRES `milestone` (PIPE-R10 rule 9): work past triage belongs to a release, and the create is refused (`milestone_required`) without one. Search before you create: `list_issues` takes a `text` filter \u2014 run it on the distinctive nouns first. Sessions do not see each other, so a duplicate is invisible until someone finds both; on a near match, comment or amend the existing record rather than filing again. The bar for filing a bug: file `type: bug` only when the observed behavior breaks an approved requirement or a defined acceptance criterion, and name which one before you file. If you cannot name one, this is not a bug \u2014 code you find unclear, an edge case nobody specified, a performance number nobody set, and anything you would phrase as "this could be better" are opinions about the product, so file each as `type: feedback`, or not at all. The bar exists because a queue holding both real defects and unshared taste has to be read entirely before any of it can be trusted. When the criterion you named is an acceptance criterion, pass its uuid as `criterionId` and the bug records which criterion it was filed against \u2014 the criterion then names the bug (it arrives as `filedBugs` on every criteria read) instead of inviting the next reader to file it again. Bugs only: any other type naming a criterion is refused (`criterion_requires_bug`). Link another record by key plus title on first mention; never paste its text into a body \u2014 the source changes, the copy does not, and a stale copy gets built. A decision you need from the operator is filed as a question via `ask_questions`, never written as an "Open questions" heading inside a body \u2014 a heading prompts nobody and records no answer, so a later session cannot tell whether the decision was made. Before assigning any verification mode, establish what this project can drive end to end \u2014 an end-to-end test harness and the command that runs it. A criterion is `auto` when an evaluator can drive the input and read the result against the running system, which includes behavior shown in the interface wherever such a harness exists; the mode follows from what can be driven, not from where the behavior appears. What qualifies a criterion as `auto` is the evaluator\u2019s own run, never the existence of a test the implementer wrote. Mark `manual` only when the verdict needs a person\u2019s judgment; a criterion you cannot describe as drivable is usually worded too vaguely, so reword it against the observable rather than fall back to a person. A `manual` criterion must also carry `howTo` \u2014 one or two sentences, not an essay, saying where to look, what to do, and what counts as passing for whoever checks it by hand. Writing or changing one without it is refused (`how_to_required`); so is supplying it on an `auto` criterion, which a machine checks. Criteria live on epics only: a task cannot carry a criteria list and instead states in its own body what would count as done. Cross-cutting requirements bind every epic automatically and arrive with `get_issue` \u2014 never restate them in a body and never add them to `requirement_links`; an explicit link pins the linked document\u2019s approved revision.',
17085
17103
  inputSchema: createIssueInputSchema.shape
17086
17104
  }, (args) => run(() => client2.createIssue(args)));
17087
17105
  registerTool("promote_feedback", {
@@ -17407,7 +17425,7 @@ function loadMcpConfig() {
17407
17425
  }
17408
17426
 
17409
17427
  // src/version.ts
17410
- var VERSION = "0.22.0";
17428
+ var VERSION = "0.24.0";
17411
17429
 
17412
17430
  // src/main.ts
17413
17431
  var config2 = loadMcpConfig();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pipebrain-mcp",
3
- "version": "0.22.0",
3
+ "version": "0.24.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",