pipebrain-mcp 0.26.0 → 0.27.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.
- package/dist/main.js +34 -2
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -15666,6 +15666,17 @@ var getWorkContextInputSchema = external_exports.strictObject({
|
|
|
15666
15666
|
}).refine((v) => v.issue === void 0 !== (v.project === void 0), {
|
|
15667
15667
|
message: "pass exactly one of `issue` or `project` \u2014 an issue names its own project, and passing neither names nothing to read"
|
|
15668
15668
|
});
|
|
15669
|
+
var openReviewInputSchema = external_exports.strictObject({
|
|
15670
|
+
epic: issueRefSchema.optional(),
|
|
15671
|
+
project: projectRefSchema.optional(),
|
|
15672
|
+
milestone: external_exports.string().min(1, { message: "milestone must not be empty \u2014 name the token the review reads" }).optional()
|
|
15673
|
+
}).refine((v) => {
|
|
15674
|
+
const epicForm = v.epic !== void 0 && v.project === void 0 && v.milestone === void 0;
|
|
15675
|
+
const milestoneForm = v.epic === void 0 && v.project !== void 0 && v.milestone !== void 0;
|
|
15676
|
+
return epicForm !== milestoneForm;
|
|
15677
|
+
}, {
|
|
15678
|
+
message: "pass exactly one of `epic` or `project` + `milestone` \u2014 an epic names its own project and milestone, and passing neither names nothing to review"
|
|
15679
|
+
});
|
|
15669
15680
|
var claimInputSchema = external_exports.strictObject({
|
|
15670
15681
|
issue: issueRefSchema
|
|
15671
15682
|
});
|
|
@@ -16019,7 +16030,12 @@ var deleteOrgInstructionInputSchema = external_exports.strictObject({
|
|
|
16019
16030
|
});
|
|
16020
16031
|
|
|
16021
16032
|
// ../../libs/domain/dist/instructions.js
|
|
16022
|
-
var ISSUE_WRITE_TOOLS = [
|
|
16033
|
+
var ISSUE_WRITE_TOOLS = [
|
|
16034
|
+
"create_issue",
|
|
16035
|
+
"update_issue",
|
|
16036
|
+
"promote_feedback",
|
|
16037
|
+
"open_review"
|
|
16038
|
+
];
|
|
16023
16039
|
var INSTRUCTION_SCOPE_TARGETS = {
|
|
16024
16040
|
general: { kind: "server" },
|
|
16025
16041
|
requirements: { kind: "tools", tools: ["create_requirement", "update_requirement"] },
|
|
@@ -16220,6 +16236,14 @@ var ApiClient = class _ApiClient {
|
|
|
16220
16236
|
createIssue(input) {
|
|
16221
16237
|
return this.request("POST", "/api/v1/issues", { body: input });
|
|
16222
16238
|
}
|
|
16239
|
+
/**
|
|
16240
|
+
* Opens a completion review (PIPE-217) — `{epic}` or `{project, milestone}`,
|
|
16241
|
+
* exactly one. Returns the created task: a review is an ordinary issue, so this
|
|
16242
|
+
* is the same detail payload the create path returns.
|
|
16243
|
+
*/
|
|
16244
|
+
openReview(input) {
|
|
16245
|
+
return this.request("POST", "/api/v1/reviews", { body: input });
|
|
16246
|
+
}
|
|
16223
16247
|
/** Promotes a feedback issue into a new epic or task (PIPE-143). */
|
|
16224
16248
|
promoteFeedback(ref, input) {
|
|
16225
16249
|
return this.request("POST", `/api/v1/issues/${enc(ref)}/promote`, { body: input });
|
|
@@ -17111,6 +17135,14 @@ Every loose end has one destination, and none of them is prose. Anything you not
|
|
|
17111
17135
|
...promoteFeedbackInputSchema.shape
|
|
17112
17136
|
}
|
|
17113
17137
|
}, ({ issue: issue2, ...fields }) => run(() => client2.promoteFeedback(issue2, fields)));
|
|
17138
|
+
registerTool("open_review", {
|
|
17139
|
+
description: "Open the COMPLETION REVIEW \u2014 the reading of an epic\u2019s WHOLE accumulated change as one body of work, by a third fresh session that neither built it nor evaluated it. It runs at one moment: once the epic\u2019s contract is green and nothing is left to check, and before anyone sets it `done`. It creates one ORDINARY `task` at `ready` carrying the review checklist as its body \u2014 no new record type. The epic form (`epic`) titles it `Completion review \u2014 <KEY-n> <epic title>`, files it as a CHILD of the epic and inherits the epic\u2019s milestone; the milestone form (`project` + `milestone`) titles it `Completion review \u2014 milestone <token>`, carries that token and has no parent \u2014 nothing here models a milestone as complete. Pass EXACTLY ONE of `epic` or `project` + `milestone`: both, or neither, is refused. One review at a time per scope \u2014 a second is refused (`review_already_open`) NAMING the standing one, so read, finish or kill that task instead \u2014 and a review opens only on an epic (`review_target_not_epic`). NO NEW GATE was added to `done`, and the whole mechanism depends on that: file each finding as ordinary work \u2014 a CHILD OF THE EPIC, a sibling of this review \u2014 and the children clause already on `done` holds the epic open until every finding is done or killed. A finding filed UNDER the review gates nothing, because that gate reads one level deep. Killing the review, or any finding, is the recorded waiver: deliberately ungated, and written to the status history with who did it and through which token. An epic that never opened a review still closes exactly as it did before.",
|
|
17140
|
+
// The WHOLE domain schema rather than its `.shape`, for `get_work_context`'s
|
|
17141
|
+
// reason: the exactly-one-of rule is a refinement on the OBJECT, and a raw
|
|
17142
|
+
// shape drops it — the refusal naming the two forms would never reach the
|
|
17143
|
+
// caller, and both arguments (or neither) would be accepted here.
|
|
17144
|
+
inputSchema: openReviewInputSchema
|
|
17145
|
+
}, (args) => run(() => client2.openReview(args)));
|
|
17114
17146
|
registerTool("update_issue", {
|
|
17115
17147
|
description: 'Update any subset of an issue\u2019s title, body, type, priority, milestone, environment, parent (self/cycle rejected), requirement_links (add/remove; adding a link to an unapproved requirement is rejected), deliverable_links (add/remove content-deliverable links, add pins at the current revision), or decision_links (add/remove decision records this work sits under \u2014 `KEY-D{n}`, from `list_decisions`). Changing type to `feedback` is rejected while the issue has criteria (\xA77), since feedback carries none; epic, task and bug interchange freely and the criteria ride along, keeping their AC-{n} numbers and their states. Clearing `milestone` (passing null) is rejected while the issue sits past `triage` \u2014 work already scheduled keeps a milestone (PIPE-R10 rule 9); swap it for a different one, or move the issue back to `triage` first. Cite the decision record a piece of work implements rather than restating what was decided in its body: the record is where the reasoning stays correct, and a body repeating it goes stale the moment the decision is superseded. 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. 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.',
|
|
17116
17148
|
inputSchema: updateIssueInputSchema.shape
|
|
@@ -17427,7 +17459,7 @@ function loadMcpConfig() {
|
|
|
17427
17459
|
}
|
|
17428
17460
|
|
|
17429
17461
|
// src/version.ts
|
|
17430
|
-
var VERSION = "0.
|
|
17462
|
+
var VERSION = "0.27.0";
|
|
17431
17463
|
|
|
17432
17464
|
// src/main.ts
|
|
17433
17465
|
var config2 = loadMcpConfig();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pipebrain-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.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",
|