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.
Files changed (2) hide show
  1. package/dist/main.js +63 -2
  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.0";
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.0",
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",