pipebrain-mcp 0.37.0 → 0.37.2
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 +63 -2
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -15049,6 +15049,13 @@ var instructionScopeSchema = external_exports.enum([
|
|
|
15049
15049
|
"work.bug",
|
|
15050
15050
|
"work.feedback"
|
|
15051
15051
|
]);
|
|
15052
|
+
var notificationEventKindSchema = external_exports.enum([
|
|
15053
|
+
"question_asked",
|
|
15054
|
+
"work_at_verify",
|
|
15055
|
+
"feedback_received",
|
|
15056
|
+
"chat_message"
|
|
15057
|
+
]);
|
|
15058
|
+
var NOTIFICATION_EVENT_KINDS = notificationEventKindSchema.options;
|
|
15052
15059
|
|
|
15053
15060
|
// ../../libs/domain/dist/primitives.js
|
|
15054
15061
|
var uuidSchema = external_exports.uuid();
|
|
@@ -15740,6 +15747,23 @@ var orgInstructionSchema = external_exports.object({
|
|
|
15740
15747
|
updatedAt: external_exports.iso.datetime({ offset: true }),
|
|
15741
15748
|
deletedAt: external_exports.iso.datetime({ offset: true }).nullable()
|
|
15742
15749
|
});
|
|
15750
|
+
var pushSubscriptionSchema = external_exports.object({
|
|
15751
|
+
id: uuidSchema,
|
|
15752
|
+
orgId: uuidSchema,
|
|
15753
|
+
userId: uuidSchema,
|
|
15754
|
+
endpoint: external_exports.string().min(1),
|
|
15755
|
+
p256dh: external_exports.string().min(1),
|
|
15756
|
+
auth: external_exports.string().min(1),
|
|
15757
|
+
userAgent: external_exports.string().nullable(),
|
|
15758
|
+
lastUsedAt: external_exports.iso.datetime({ offset: true }).nullable(),
|
|
15759
|
+
createdAt: external_exports.iso.datetime({ offset: true }),
|
|
15760
|
+
updatedAt: external_exports.iso.datetime({ offset: true }),
|
|
15761
|
+
deletedAt: external_exports.iso.datetime({ offset: true }).nullable()
|
|
15762
|
+
});
|
|
15763
|
+
var notificationPreferenceSchema = external_exports.object({
|
|
15764
|
+
eventKind: external_exports.string().min(1),
|
|
15765
|
+
enabled: external_exports.boolean()
|
|
15766
|
+
});
|
|
15743
15767
|
|
|
15744
15768
|
// ../../libs/domain/dist/inputs.js
|
|
15745
15769
|
var int4Schema = positiveIntSchema.max(2147483647, {
|
|
@@ -16235,6 +16259,43 @@ var setOrgInstructionInputSchema = external_exports.strictObject({
|
|
|
16235
16259
|
var deleteOrgInstructionInputSchema = external_exports.strictObject({
|
|
16236
16260
|
scope: instructionScopeSchema
|
|
16237
16261
|
});
|
|
16262
|
+
var IPV4_LITERAL_RE = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
|
|
16263
|
+
var REFUSED_IPV4_RE = /^(?:0|10|100\.(?:6[4-9]|[7-9]\d|1[01]\d|12[0-7])|127|169\.254|172\.(?:1[6-9]|2\d|3[01])|192\.0\.0|192\.168|198\.1[89]|22[4-9]|23\d)\.|^255\.255\.255\.255$/;
|
|
16264
|
+
function normalisedHost(hostname3) {
|
|
16265
|
+
const lowered = hostname3.toLowerCase();
|
|
16266
|
+
return lowered.endsWith(".") ? lowered.slice(0, -1) : lowered;
|
|
16267
|
+
}
|
|
16268
|
+
function isSendablePushEndpoint(raw) {
|
|
16269
|
+
let url2;
|
|
16270
|
+
try {
|
|
16271
|
+
url2 = new URL(raw);
|
|
16272
|
+
} catch {
|
|
16273
|
+
return false;
|
|
16274
|
+
}
|
|
16275
|
+
if (url2.protocol !== "https:")
|
|
16276
|
+
return false;
|
|
16277
|
+
const host = normalisedHost(url2.hostname);
|
|
16278
|
+
if (host === "localhost" || host.endsWith(".localhost"))
|
|
16279
|
+
return false;
|
|
16280
|
+
if (host.includes(":"))
|
|
16281
|
+
return false;
|
|
16282
|
+
if (IPV4_LITERAL_RE.test(host))
|
|
16283
|
+
return !REFUSED_IPV4_RE.test(host);
|
|
16284
|
+
return true;
|
|
16285
|
+
}
|
|
16286
|
+
var PUSH_ENDPOINT_MESSAGE = "endpoint must be the https:// URL a browser push subscription carries \u2014 a public push service address, never a loopback, private, or link-local one";
|
|
16287
|
+
var registerPushDeviceInputSchema = external_exports.strictObject({
|
|
16288
|
+
endpoint: external_exports.url({ message: PUSH_ENDPOINT_MESSAGE }).refine(isSendablePushEndpoint, { message: PUSH_ENDPOINT_MESSAGE }),
|
|
16289
|
+
p256dh: external_exports.string().min(1, { message: "p256dh is required" }),
|
|
16290
|
+
auth: external_exports.string().min(1, { message: "auth is required" }),
|
|
16291
|
+
userAgent: external_exports.string().min(1).max(500).optional()
|
|
16292
|
+
});
|
|
16293
|
+
var setNotificationPreferencesInputSchema = external_exports.strictObject({
|
|
16294
|
+
preferences: external_exports.array(external_exports.strictObject({
|
|
16295
|
+
eventKind: notificationEventKindSchema,
|
|
16296
|
+
enabled: external_exports.boolean()
|
|
16297
|
+
})).min(1, { message: "at least one preference is required" })
|
|
16298
|
+
});
|
|
16238
16299
|
|
|
16239
16300
|
// ../../libs/agent-shared/dist/token-shape.js
|
|
16240
16301
|
function isAcceptedTokenShape(value) {
|
|
@@ -17448,7 +17509,7 @@ function createMcpServer(client2, apiBaseUrl, orgInstructions2 = /* @__PURE__ */
|
|
|
17448
17509
|
inputSchema: createIssueInputSchema.shape
|
|
17449
17510
|
}, (args) => run(() => client2.createIssue(args)));
|
|
17450
17511
|
server2.registerTool("promote_feedback", {
|
|
17451
|
-
description: "Promote a FEEDBACK issue into a NEW epic or task (PIPE-143): creates the issue in the feedback\u2019s project (`title` + `type` required; omitted environment inherits the FEEDBACK\u2019s environment, not the project default; optional status/body/priority/milestone/requirement_links/criteria as in create_issue), records the feedback as its permanent source (`promotedFrom`/`promotedTo` on both details), closes the feedback as done, and comments the new key on it. The feedback\u2019s own title/body are never touched \u2014 write the new issue\u2019s body as real work. Rejected (409) for non-feedback, terminal, or already-promoted sources. Returns the created issue. A `status` other than `triage` or `killed` REQUIRES `milestone` (PIPE-R10 rule 9), exactly as in create_issue; the SOURCE feedback needs none to be closed by the promotion. A `manual` criterion must carry `howTo` \u2014 one or two sentences saying where to look, what to do, and what counts as passing; writing or changing one without it is refused (`how_to_required`), and so is supplying it on an `auto` criterion, which a machine checks. Work of any kind carries criteria \u2014 an epic, a task, a bug alike \u2014 with feedback the one exception, refused with `criteria_not_supported` because it is a report rather than agreed work; this tool is what retypes it into work before anything is built. Writing guidance for this tool lives in the product doctrine, which `get_work_context` returns \u2014 see \u201CSearch before you create\u201D and \u201CThe bar for filing a bug\u201D.",
|
|
17512
|
+
description: "Promote a FEEDBACK issue into a NEW epic or task (PIPE-143): creates the issue in the feedback\u2019s project (`title` + `type` required; omitted environment inherits the FEEDBACK\u2019s environment, not the project default; optional status/body/priority/milestone/requirement_links/criteria as in create_issue), records the feedback as its permanent source (`promotedFrom`/`promotedTo` on both details), closes the feedback as done, and comments the new key on it. The feedback\u2019s own title/body are never touched \u2014 write the new issue\u2019s body as real work. Rejected (409) for non-feedback, terminal, or already-promoted sources, and refused (422 `status_guard`, naming each offending child and its status) when the feedback carries a child issue that is not yet `done` or `killed` \u2014 closing the source would strand that child under a finished parent, so finish or kill the child first. Returns the created issue. A `status` other than `triage` or `killed` REQUIRES `milestone` (PIPE-R10 rule 9), exactly as in create_issue; the SOURCE feedback needs none to be closed by the promotion. A `manual` criterion must carry `howTo` \u2014 one or two sentences saying where to look, what to do, and what counts as passing; writing or changing one without it is refused (`how_to_required`), and so is supplying it on an `auto` criterion, which a machine checks. Work of any kind carries criteria \u2014 an epic, a task, a bug alike \u2014 with feedback the one exception, refused with `criteria_not_supported` because it is a report rather than agreed work; this tool is what retypes it into work before anything is built. Writing guidance for this tool lives in the product doctrine, which `get_work_context` returns \u2014 see \u201CSearch before you create\u201D and \u201CThe bar for filing a bug\u201D.",
|
|
17452
17513
|
inputSchema: {
|
|
17453
17514
|
issue: external_exports.string().min(1),
|
|
17454
17515
|
...promoteFeedbackInputSchema.shape
|
|
@@ -17833,7 +17894,7 @@ function loadMcpConfig() {
|
|
|
17833
17894
|
}
|
|
17834
17895
|
|
|
17835
17896
|
// src/version.ts
|
|
17836
|
-
var VERSION = "0.37.
|
|
17897
|
+
var VERSION = "0.37.2";
|
|
17837
17898
|
|
|
17838
17899
|
// src/main.ts
|
|
17839
17900
|
var config2 = loadMcpConfig();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pipebrain-mcp",
|
|
3
|
-
"version": "0.37.
|
|
3
|
+
"version": "0.37.2",
|
|
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",
|