@bike4mind/cli 0.2.29 → 0.2.30-cj-GH6259.19188

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.
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CurationArtifactType
4
- } from "./chunk-TNFZP7FG.js";
4
+ } from "./chunk-TX3D6KIM.js";
5
5
 
6
6
  // ../../b4m-core/packages/services/dist/src/notebookCurationService/artifactExtractor.js
7
7
  var ARTIFACT_TAG_REGEX = /<artifact\s+(.*?)>([\s\S]*?)<\/artifact>/gi;
@@ -6,12 +6,12 @@ import {
6
6
  getSettingsByNames,
7
7
  obfuscateApiKey,
8
8
  secureParameters
9
- } from "./chunk-5J4RL57F.js";
9
+ } from "./chunk-ZBCO23NT.js";
10
10
  import {
11
11
  ApiKeyType,
12
12
  MementoTier,
13
13
  isSupportedEmbeddingModel
14
- } from "./chunk-TNFZP7FG.js";
14
+ } from "./chunk-TX3D6KIM.js";
15
15
 
16
16
  // ../../b4m-core/packages/services/dist/src/apiKeyService/get.js
17
17
  import { z } from "zod";
@@ -7,11 +7,11 @@ import {
7
7
  getSettingsMap,
8
8
  getSettingsValue,
9
9
  secureParameters
10
- } from "./chunk-5J4RL57F.js";
10
+ } from "./chunk-ZBCO23NT.js";
11
11
  import {
12
12
  KnowledgeType,
13
13
  SupportedFabFileMimeTypes
14
- } from "./chunk-TNFZP7FG.js";
14
+ } from "./chunk-TX3D6KIM.js";
15
15
 
16
16
  // ../../b4m-core/packages/services/dist/src/fabFileService/create.js
17
17
  import { z } from "zod";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  BadRequestError,
4
4
  secureParameters
5
- } from "./chunk-5J4RL57F.js";
5
+ } from "./chunk-ZBCO23NT.js";
6
6
  import {
7
7
  CompletionApiUsageTransaction,
8
8
  GenericCreditDeductTransaction,
@@ -12,7 +12,7 @@ import {
12
12
  TextGenerationUsageTransaction,
13
13
  TransferCreditTransaction,
14
14
  VideoGenerationUsageTransaction
15
- } from "./chunk-TNFZP7FG.js";
15
+ } from "./chunk-TX3D6KIM.js";
16
16
 
17
17
  // ../../b4m-core/packages/services/dist/src/creditService/subtractCredits.js
18
18
  import { z } from "zod";
@@ -1061,6 +1061,25 @@ var WebhookDeliveryStatus;
1061
1061
  WebhookDeliveryStatus2["Pending"] = "pending";
1062
1062
  })(WebhookDeliveryStatus || (WebhookDeliveryStatus = {}));
1063
1063
 
1064
+ // ../../b4m-core/packages/common/dist/src/types/entities/JiraWebhookConfigTypes.js
1065
+ var COMMON_JIRA_WEBHOOK_EVENTS = [
1066
+ "jira:issue_created",
1067
+ "jira:issue_updated",
1068
+ "comment_created",
1069
+ "comment_updated",
1070
+ "sprint_started",
1071
+ "sprint_closed"
1072
+ ];
1073
+
1074
+ // ../../b4m-core/packages/common/dist/src/types/entities/JiraWebhookDeliveryTypes.js
1075
+ var JiraWebhookDeliveryStatus;
1076
+ (function(JiraWebhookDeliveryStatus2) {
1077
+ JiraWebhookDeliveryStatus2["Success"] = "success";
1078
+ JiraWebhookDeliveryStatus2["Failed"] = "failed";
1079
+ JiraWebhookDeliveryStatus2["Filtered"] = "filtered";
1080
+ JiraWebhookDeliveryStatus2["Pending"] = "pending";
1081
+ })(JiraWebhookDeliveryStatus || (JiraWebhookDeliveryStatus = {}));
1082
+
1064
1083
  // ../../b4m-core/packages/common/dist/src/types/common.js
1065
1084
  var SupportedFabFileMimeTypes;
1066
1085
  (function(SupportedFabFileMimeTypes2) {
@@ -1105,6 +1124,24 @@ var SupportedFabFileMimeTypes;
1105
1124
  SupportedFabFileMimeTypes2["INI"] = "text/plain";
1106
1125
  SupportedFabFileMimeTypes2["CONF"] = "text/plain";
1107
1126
  })(SupportedFabFileMimeTypes || (SupportedFabFileMimeTypes = {}));
1127
+ var REASONING_EFFORT_LABELS = {
1128
+ auto: "Auto (recommended)",
1129
+ none: "None - Fastest",
1130
+ minimal: "Minimal",
1131
+ low: "Low",
1132
+ medium: "Medium",
1133
+ high: "High",
1134
+ xhigh: "Extra High - Best Quality"
1135
+ };
1136
+ var REASONING_EFFORT_DESCRIPTIONS = {
1137
+ auto: "Automatically adjusts reasoning effort based on query complexity",
1138
+ none: "No extended reasoning, fastest responses",
1139
+ minimal: "Very light reasoning for simple queries",
1140
+ low: "Light reasoning for straightforward tasks",
1141
+ medium: "Balanced reasoning for most tasks",
1142
+ high: "Deep reasoning for complex problems",
1143
+ xhigh: "Maximum reasoning depth for highest quality (GPT-5.2 Pro/Thinking only)"
1144
+ };
1108
1145
  var CODE_FILE_MIME_TYPES = [
1109
1146
  SupportedFabFileMimeTypes.TS,
1110
1147
  SupportedFabFileMimeTypes.JS,
@@ -7238,6 +7275,589 @@ var AgileApi = class {
7238
7275
  }
7239
7276
  };
7240
7277
 
7278
+ // ../../b4m-core/packages/common/dist/src/jira/webhook/format.js
7279
+ function daysUntil(dateString) {
7280
+ const expirationDate = new Date(dateString);
7281
+ const now = /* @__PURE__ */ new Date();
7282
+ const diffMs = expirationDate.getTime() - now.getTime();
7283
+ return Math.ceil(diffMs / (1e3 * 60 * 60 * 24));
7284
+ }
7285
+ function formatWebhook(webhook) {
7286
+ const daysUntilExpiry = daysUntil(webhook.expirationDate);
7287
+ return {
7288
+ id: webhook.id,
7289
+ events: webhook.events,
7290
+ jqlFilter: webhook.jqlFilter,
7291
+ expirationDate: webhook.expirationDate,
7292
+ daysUntilExpiry,
7293
+ isExpiringSoon: daysUntilExpiry < 7
7294
+ };
7295
+ }
7296
+ function formatWebhookList(response) {
7297
+ return {
7298
+ webhooks: response.values.map(formatWebhook),
7299
+ total: response.total,
7300
+ hasMore: !response.isLast
7301
+ };
7302
+ }
7303
+ function escapeSlackMrkdwn(text) {
7304
+ return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\*/g, "\u2217").replace(/_/g, "\uFF3F").replace(/~/g, "\u223C").replace(/`/g, "\u02CB");
7305
+ }
7306
+ var PRIORITY_EMOJI = {
7307
+ Highest: ":red_circle:",
7308
+ High: ":large_orange_circle:",
7309
+ Medium: ":large_yellow_circle:",
7310
+ Low: ":large_green_circle:",
7311
+ Lowest: ":white_circle:"
7312
+ };
7313
+ function getPriorityEmoji(priority) {
7314
+ if (!priority)
7315
+ return "";
7316
+ return PRIORITY_EMOJI[priority] || ":blue_circle:";
7317
+ }
7318
+ function formatIssueEventForSlack(event, siteUrl) {
7319
+ const { issue, webhookEvent, user, changelog } = event;
7320
+ const { fields } = issue;
7321
+ const priorityEmoji = getPriorityEmoji(fields.priority?.name);
7322
+ const issueUrl = `${siteUrl}/browse/${issue.key}`;
7323
+ let action;
7324
+ let emoji;
7325
+ switch (webhookEvent) {
7326
+ case "jira:issue_created":
7327
+ action = "created";
7328
+ emoji = ":new:";
7329
+ break;
7330
+ case "jira:issue_updated":
7331
+ action = "updated";
7332
+ emoji = ":pencil2:";
7333
+ break;
7334
+ case "jira:issue_deleted":
7335
+ action = "deleted";
7336
+ emoji = ":wastebasket:";
7337
+ break;
7338
+ default:
7339
+ action = "changed";
7340
+ emoji = ":bell:";
7341
+ }
7342
+ let changelogText = "";
7343
+ if (changelog?.items && changelog.items.length > 0) {
7344
+ const changes = changelog.items.slice(0, 3).map((item) => {
7345
+ const from = escapeSlackMrkdwn(item.fromString || "None");
7346
+ const to = escapeSlackMrkdwn(item.toString || "None");
7347
+ if (item.field === "status") {
7348
+ return `Status: ${from} \u2192 ${to}`;
7349
+ }
7350
+ if (item.field === "assignee") {
7351
+ return `Assignee: ${escapeSlackMrkdwn(item.fromString || "Unassigned")} \u2192 ${escapeSlackMrkdwn(item.toString || "Unassigned")}`;
7352
+ }
7353
+ if (item.field === "priority") {
7354
+ return `Priority: ${from} \u2192 ${to}`;
7355
+ }
7356
+ return `${escapeSlackMrkdwn(item.field)}: ${from} \u2192 ${to}`;
7357
+ });
7358
+ if (changes.length > 0) {
7359
+ changelogText = "\n" + changes.map((c) => `\u2022 ${c}`).join("\n");
7360
+ if (changelog.items.length > 3) {
7361
+ changelogText += `
7362
+ _...and ${changelog.items.length - 3} more changes_`;
7363
+ }
7364
+ }
7365
+ }
7366
+ const blocks = [
7367
+ {
7368
+ type: "header",
7369
+ text: {
7370
+ type: "plain_text",
7371
+ text: `${emoji} Issue ${action}: ${escapeSlackMrkdwn(issue.key)}`,
7372
+ emoji: true
7373
+ }
7374
+ },
7375
+ {
7376
+ type: "section",
7377
+ text: {
7378
+ type: "mrkdwn",
7379
+ text: `*<${issueUrl}|${escapeSlackMrkdwn(issue.key)}>* ${escapeSlackMrkdwn(fields.summary)}`
7380
+ }
7381
+ },
7382
+ {
7383
+ type: "section",
7384
+ text: {
7385
+ type: "mrkdwn",
7386
+ text: [
7387
+ `${priorityEmoji} *Priority:* ${escapeSlackMrkdwn(fields.priority?.name || "None")}`,
7388
+ `*Status:* ${escapeSlackMrkdwn(fields.status.name)}`,
7389
+ `*Type:* ${escapeSlackMrkdwn(fields.issuetype.name)}`,
7390
+ `*Assignee:* ${escapeSlackMrkdwn(fields.assignee?.displayName || "Unassigned")}`
7391
+ ].join(" | ")
7392
+ }
7393
+ }
7394
+ ];
7395
+ if (changelogText) {
7396
+ blocks.push({
7397
+ type: "section",
7398
+ text: {
7399
+ type: "mrkdwn",
7400
+ text: `*Changes:*${changelogText}`
7401
+ }
7402
+ });
7403
+ }
7404
+ blocks.push({
7405
+ type: "context",
7406
+ elements: [
7407
+ {
7408
+ type: "mrkdwn",
7409
+ text: `${escapeSlackMrkdwn(user?.displayName || "Someone")} \u2022 ${escapeSlackMrkdwn(fields.project.name)} (${escapeSlackMrkdwn(fields.project.key)})`
7410
+ }
7411
+ ]
7412
+ });
7413
+ blocks.push({
7414
+ type: "actions",
7415
+ elements: [
7416
+ {
7417
+ type: "button",
7418
+ text: {
7419
+ type: "plain_text",
7420
+ text: "View in Jira",
7421
+ emoji: true
7422
+ },
7423
+ url: issueUrl,
7424
+ style: "primary"
7425
+ }
7426
+ ]
7427
+ });
7428
+ return {
7429
+ blocks,
7430
+ text: `${emoji} ${escapeSlackMrkdwn(issue.key)} ${action}: ${escapeSlackMrkdwn(fields.summary)}`
7431
+ };
7432
+ }
7433
+ function formatCommentEventForSlack(event, siteUrl) {
7434
+ const { issue, comment, webhookEvent } = event;
7435
+ const issueUrl = `${siteUrl}/browse/${issue.key}`;
7436
+ let action;
7437
+ let emoji;
7438
+ switch (webhookEvent) {
7439
+ case "comment_created":
7440
+ action = "commented on";
7441
+ emoji = ":speech_balloon:";
7442
+ break;
7443
+ case "comment_updated":
7444
+ action = "updated comment on";
7445
+ emoji = ":pencil:";
7446
+ break;
7447
+ case "comment_deleted":
7448
+ action = "deleted comment on";
7449
+ emoji = ":x:";
7450
+ break;
7451
+ default:
7452
+ action = "commented on";
7453
+ emoji = ":speech_balloon:";
7454
+ }
7455
+ const blocks = [
7456
+ {
7457
+ type: "header",
7458
+ text: {
7459
+ type: "plain_text",
7460
+ text: `${emoji} ${escapeSlackMrkdwn(comment.author.displayName)} ${action} ${escapeSlackMrkdwn(issue.key)}`,
7461
+ emoji: true
7462
+ }
7463
+ },
7464
+ {
7465
+ type: "section",
7466
+ text: {
7467
+ type: "mrkdwn",
7468
+ text: `*<${issueUrl}|${escapeSlackMrkdwn(issue.key)}>* ${escapeSlackMrkdwn(issue.fields.summary)}`
7469
+ }
7470
+ },
7471
+ {
7472
+ type: "context",
7473
+ elements: [
7474
+ {
7475
+ type: "mrkdwn",
7476
+ text: `${escapeSlackMrkdwn(issue.fields.project.name)} \u2022 ${escapeSlackMrkdwn(issue.fields.issuetype.name)}`
7477
+ }
7478
+ ]
7479
+ },
7480
+ {
7481
+ type: "actions",
7482
+ elements: [
7483
+ {
7484
+ type: "button",
7485
+ text: {
7486
+ type: "plain_text",
7487
+ text: "View in Jira",
7488
+ emoji: true
7489
+ },
7490
+ url: issueUrl,
7491
+ style: "primary"
7492
+ }
7493
+ ]
7494
+ }
7495
+ ];
7496
+ return {
7497
+ blocks,
7498
+ text: `${emoji} ${escapeSlackMrkdwn(comment.author.displayName)} ${action} ${escapeSlackMrkdwn(issue.key)}: ${escapeSlackMrkdwn(issue.fields.summary)}`
7499
+ };
7500
+ }
7501
+ function formatSprintEventForSlack(event, siteUrl) {
7502
+ const { sprint, webhookEvent, user } = event;
7503
+ let action;
7504
+ let emoji;
7505
+ switch (webhookEvent) {
7506
+ case "sprint_created":
7507
+ action = "created";
7508
+ emoji = ":calendar:";
7509
+ break;
7510
+ case "sprint_started":
7511
+ action = "started";
7512
+ emoji = ":rocket:";
7513
+ break;
7514
+ case "sprint_closed":
7515
+ action = "completed";
7516
+ emoji = ":checkered_flag:";
7517
+ break;
7518
+ case "sprint_updated":
7519
+ action = "updated";
7520
+ emoji = ":pencil2:";
7521
+ break;
7522
+ case "sprint_deleted":
7523
+ action = "deleted";
7524
+ emoji = ":wastebasket:";
7525
+ break;
7526
+ default:
7527
+ action = "changed";
7528
+ emoji = ":bell:";
7529
+ }
7530
+ const sprintUrl = `${siteUrl}/secure/RapidBoard.jspa?rapidView=${sprint.originBoardId}`;
7531
+ const blocks = [
7532
+ {
7533
+ type: "header",
7534
+ text: {
7535
+ type: "plain_text",
7536
+ text: `${emoji} Sprint ${action}: ${escapeSlackMrkdwn(sprint.name)}`,
7537
+ emoji: true
7538
+ }
7539
+ },
7540
+ {
7541
+ type: "section",
7542
+ text: {
7543
+ type: "mrkdwn",
7544
+ text: [
7545
+ `*State:* ${escapeSlackMrkdwn(sprint.state)}`,
7546
+ sprint.startDate ? `*Start:* ${new Date(sprint.startDate).toLocaleDateString()}` : "",
7547
+ sprint.endDate ? `*End:* ${new Date(sprint.endDate).toLocaleDateString()}` : ""
7548
+ ].filter(Boolean).join(" | ")
7549
+ }
7550
+ }
7551
+ ];
7552
+ if (sprint.goal) {
7553
+ blocks.push({
7554
+ type: "section",
7555
+ text: {
7556
+ type: "mrkdwn",
7557
+ text: `*Goal:* ${escapeSlackMrkdwn(sprint.goal)}`
7558
+ }
7559
+ });
7560
+ }
7561
+ blocks.push({
7562
+ type: "context",
7563
+ elements: [
7564
+ {
7565
+ type: "mrkdwn",
7566
+ text: user?.displayName ? escapeSlackMrkdwn(user.displayName) : "System"
7567
+ }
7568
+ ]
7569
+ });
7570
+ blocks.push({
7571
+ type: "actions",
7572
+ elements: [
7573
+ {
7574
+ type: "button",
7575
+ text: {
7576
+ type: "plain_text",
7577
+ text: "View Board",
7578
+ emoji: true
7579
+ },
7580
+ url: sprintUrl,
7581
+ style: "primary"
7582
+ }
7583
+ ]
7584
+ });
7585
+ return {
7586
+ blocks,
7587
+ text: `${emoji} Sprint ${action}: ${escapeSlackMrkdwn(sprint.name)}`
7588
+ };
7589
+ }
7590
+ function formatGenericEventForSlack(eventType, payload, siteUrl) {
7591
+ const issue = payload.issue;
7592
+ const user = payload.user;
7593
+ const issueLink = payload.issueLink;
7594
+ const changelog = payload.changelog;
7595
+ const project = payload.project ?? issue?.fields?.project;
7596
+ const version = payload.version;
7597
+ const worklog = payload.worklog;
7598
+ const board = payload.board;
7599
+ const readableEvent = eventType.replace(/^jira:/, "").replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
7600
+ const blocks = [
7601
+ {
7602
+ type: "header",
7603
+ text: {
7604
+ type: "plain_text",
7605
+ text: `:bell: ${readableEvent}`,
7606
+ emoji: true
7607
+ }
7608
+ }
7609
+ ];
7610
+ const details = [];
7611
+ if (issue?.key) {
7612
+ const issueUrl = `${siteUrl}/browse/${issue.key}`;
7613
+ blocks.push({
7614
+ type: "section",
7615
+ text: {
7616
+ type: "mrkdwn",
7617
+ text: `*<${issueUrl}|${escapeSlackMrkdwn(issue.key)}>* ${escapeSlackMrkdwn(issue.fields?.summary || "")}`
7618
+ }
7619
+ });
7620
+ const meta = [];
7621
+ if (issue.fields?.status?.name)
7622
+ meta.push(`*Status:* ${escapeSlackMrkdwn(issue.fields.status.name)}`);
7623
+ if (issue.fields?.issuetype?.name)
7624
+ meta.push(`*Type:* ${escapeSlackMrkdwn(issue.fields.issuetype.name)}`);
7625
+ if (issue.fields?.priority?.name) {
7626
+ const emoji = getPriorityEmoji(issue.fields.priority.name);
7627
+ meta.push(`${emoji} *Priority:* ${escapeSlackMrkdwn(issue.fields.priority.name)}`);
7628
+ }
7629
+ if (issue.fields?.assignee?.displayName)
7630
+ meta.push(`*Assignee:* ${escapeSlackMrkdwn(issue.fields.assignee.displayName)}`);
7631
+ if (meta.length > 0)
7632
+ details.push(meta.join(" | "));
7633
+ }
7634
+ if (issueLink?.issueLinkType) {
7635
+ const linkType = issueLink.issueLinkType;
7636
+ const linkDesc = escapeSlackMrkdwn(linkType.outwardName || linkType.name || "linked");
7637
+ details.push(`*Link type:* ${linkDesc}`);
7638
+ if (issueLink.sourceIssueId)
7639
+ details.push(`*Source issue ID:* ${issueLink.sourceIssueId}`);
7640
+ if (issueLink.destinationIssueId)
7641
+ details.push(`*Destination issue ID:* ${issueLink.destinationIssueId}`);
7642
+ }
7643
+ if (version?.name) {
7644
+ const versionParts = [`*Version:* ${escapeSlackMrkdwn(version.name)}`];
7645
+ if (version.description)
7646
+ versionParts.push(escapeSlackMrkdwn(version.description));
7647
+ if (version.released !== void 0)
7648
+ versionParts.push(version.released ? ":white_check_mark: Released" : "Unreleased");
7649
+ details.push(versionParts.join(" | "));
7650
+ }
7651
+ if (worklog) {
7652
+ const wlParts = [];
7653
+ if (worklog.author?.displayName)
7654
+ wlParts.push(`*By:* ${escapeSlackMrkdwn(worklog.author.displayName)}`);
7655
+ if (worklog.timeSpent)
7656
+ wlParts.push(`*Time:* ${escapeSlackMrkdwn(worklog.timeSpent)}`);
7657
+ if (wlParts.length > 0)
7658
+ details.push(wlParts.join(" | "));
7659
+ }
7660
+ if (board?.name) {
7661
+ details.push(`*Board:* ${escapeSlackMrkdwn(board.name)}`);
7662
+ }
7663
+ if (changelog?.items && changelog.items.length > 0) {
7664
+ const changes = changelog.items.slice(0, 3).map((item) => `\u2022 ${escapeSlackMrkdwn(item.field || "")}: ${escapeSlackMrkdwn(item.fromString || "None")} \u2192 ${escapeSlackMrkdwn(item.toString || "None")}`);
7665
+ if (changelog.items.length > 3) {
7666
+ changes.push(`_...and ${changelog.items.length - 3} more_`);
7667
+ }
7668
+ details.push(`*Changes:*
7669
+ ${changes.join("\n")}`);
7670
+ }
7671
+ if (details.length > 0) {
7672
+ blocks.push({
7673
+ type: "section",
7674
+ text: {
7675
+ type: "mrkdwn",
7676
+ text: details.join("\n")
7677
+ }
7678
+ });
7679
+ }
7680
+ const contextParts = [];
7681
+ if (user?.displayName)
7682
+ contextParts.push(escapeSlackMrkdwn(user.displayName));
7683
+ if (project?.name)
7684
+ contextParts.push(`${escapeSlackMrkdwn(project.name)}${project.key ? ` (${escapeSlackMrkdwn(project.key)})` : ""}`);
7685
+ if (contextParts.length > 0) {
7686
+ blocks.push({
7687
+ type: "context",
7688
+ elements: [{ type: "mrkdwn", text: contextParts.join(" \u2022 ") }]
7689
+ });
7690
+ }
7691
+ if (issue?.key) {
7692
+ const issueUrl = `${siteUrl}/browse/${issue.key}`;
7693
+ blocks.push({
7694
+ type: "actions",
7695
+ elements: [
7696
+ {
7697
+ type: "button",
7698
+ text: { type: "plain_text", text: "View in Jira", emoji: true },
7699
+ url: issueUrl,
7700
+ style: "primary"
7701
+ }
7702
+ ]
7703
+ });
7704
+ }
7705
+ const summary = issue?.key ? `${escapeSlackMrkdwn(issue.key)}: ${escapeSlackMrkdwn(issue.fields?.summary || readableEvent)}` : readableEvent;
7706
+ return {
7707
+ blocks,
7708
+ text: `:bell: ${summary}`
7709
+ };
7710
+ }
7711
+
7712
+ // ../../b4m-core/packages/common/dist/src/jira/webhook/api.js
7713
+ var WebhookApi = class {
7714
+ config;
7715
+ constructor(config) {
7716
+ this.config = config;
7717
+ }
7718
+ /**
7719
+ * Build URL for webhook API endpoints.
7720
+ *
7721
+ * Note: Webhooks use a different base URL than other Jira APIs.
7722
+ */
7723
+ buildUrl(path, query = {}) {
7724
+ const url = new URL(`${this.config.apiBaseUrl}${path}`);
7725
+ for (const [key, value] of Object.entries(query)) {
7726
+ if (value !== void 0) {
7727
+ url.searchParams.append(key, String(value));
7728
+ }
7729
+ }
7730
+ return url.toString();
7731
+ }
7732
+ /**
7733
+ * Make an authenticated request to the Jira Webhook API.
7734
+ */
7735
+ async request(method, path, options = {}) {
7736
+ const url = this.buildUrl(path, options.query);
7737
+ const headers = {
7738
+ Authorization: this.config.authHeader,
7739
+ Accept: "application/json",
7740
+ "Content-Type": "application/json"
7741
+ };
7742
+ const response = await fetch(url, {
7743
+ method,
7744
+ headers,
7745
+ body: options.body ? JSON.stringify(options.body) : void 0
7746
+ });
7747
+ if (!response.ok) {
7748
+ const errorBody = await response.text();
7749
+ throw new Error(`Jira Webhook API error (${response.status}): ${errorBody}`);
7750
+ }
7751
+ if (response.status === 204) {
7752
+ return {};
7753
+ }
7754
+ const data = await response.json();
7755
+ return data;
7756
+ }
7757
+ // ============================================================================
7758
+ // Webhook CRUD Operations
7759
+ // ============================================================================
7760
+ /**
7761
+ * List all webhooks registered by this OAuth app.
7762
+ *
7763
+ * @param startAt - Pagination start index (default: 0)
7764
+ * @param maxResults - Max results per page (default: 50, max: 100)
7765
+ */
7766
+ async listWebhooks(params = {}) {
7767
+ const { startAt = 0, maxResults = 50 } = params;
7768
+ const response = await this.request("GET", "/webhook", {
7769
+ query: { startAt, maxResults }
7770
+ });
7771
+ return formatWebhookList(response);
7772
+ }
7773
+ /**
7774
+ * Register a new webhook.
7775
+ *
7776
+ * @param url - The URL where Jira will POST webhook events
7777
+ * @param events - Events to subscribe to
7778
+ * @param jqlFilter - Optional JQL filter (only matching issues trigger events)
7779
+ * @returns The created webhook ID
7780
+ */
7781
+ async registerWebhook(params) {
7782
+ const { url, events, jqlFilter } = params;
7783
+ const webhook = {
7784
+ // Jira webhook API requires jqlFilter but has limited operator support.
7785
+ // "IS NOT EMPTY" and empty strings are rejected. Use a universally-true expression.
7786
+ jqlFilter: jqlFilter || "project != null",
7787
+ events
7788
+ };
7789
+ const body = {
7790
+ url,
7791
+ webhooks: [webhook]
7792
+ };
7793
+ const response = await this.request("POST", "/webhook", {
7794
+ body
7795
+ });
7796
+ console.log("[JIRA-WEBHOOK-API] registerWebhook raw response:", JSON.stringify(response, null, 2));
7797
+ if (!response.webhookRegistrationResult || response.webhookRegistrationResult.length === 0) {
7798
+ throw new Error("Failed to register webhook: No registration result returned");
7799
+ }
7800
+ const result = response.webhookRegistrationResult[0];
7801
+ if (result.errors && result.errors.length > 0) {
7802
+ throw new Error(`Failed to register webhook: ${result.errors.join(", ")}`);
7803
+ }
7804
+ if (result.createdWebhookId === void 0 || result.createdWebhookId === null) {
7805
+ throw new Error(`Failed to register webhook: No webhook ID in response. Full result: ${JSON.stringify(result)}`);
7806
+ }
7807
+ return {
7808
+ webhookId: result.createdWebhookId
7809
+ };
7810
+ }
7811
+ /**
7812
+ * Refresh webhook expiration dates.
7813
+ *
7814
+ * Jira webhooks expire after 30 days. Call this to extend expiration.
7815
+ *
7816
+ * @param webhookIds - IDs of webhooks to refresh
7817
+ * @returns New expiration date
7818
+ */
7819
+ async refreshWebhooks(params) {
7820
+ const { webhookIds } = params;
7821
+ const body = {
7822
+ webhookIds
7823
+ };
7824
+ const response = await this.request("PUT", "/webhook/refresh", {
7825
+ body
7826
+ });
7827
+ return {
7828
+ expirationDate: response.expirationDate
7829
+ };
7830
+ }
7831
+ /**
7832
+ * Delete webhooks by ID.
7833
+ *
7834
+ * @param webhookIds - IDs of webhooks to delete
7835
+ */
7836
+ async deleteWebhooks(params) {
7837
+ const { webhookIds } = params;
7838
+ const body = {
7839
+ webhookIds
7840
+ };
7841
+ await this.request("DELETE", "/webhook", {
7842
+ body
7843
+ });
7844
+ }
7845
+ /**
7846
+ * Get a specific webhook by ID.
7847
+ *
7848
+ * Note: Jira API doesn't have a direct "get by ID" endpoint,
7849
+ * so we list and filter.
7850
+ */
7851
+ async getWebhook(params) {
7852
+ const { webhookId } = params;
7853
+ const response = await this.request("GET", "/webhook", {
7854
+ query: { startAt: 0, maxResults: 100 }
7855
+ });
7856
+ const webhook = response.values.find((w) => w.id === webhookId);
7857
+ return webhook || null;
7858
+ }
7859
+ };
7860
+
7241
7861
  // ../../b4m-core/packages/common/dist/src/jira/api.js
7242
7862
  var JIRA_MAX_ATTACHMENT_SIZE = 20 * 1024 * 1024;
7243
7863
  function isValidIssueKey(key) {
@@ -7989,8 +8609,71 @@ var JiraApi = class {
7989
8609
  }
7990
8610
  return this._agileApi;
7991
8611
  }
8612
+ // ============================================================================
8613
+ // Webhook API Access (Webhook Management)
8614
+ // ============================================================================
8615
+ _webhookApi = null;
8616
+ /**
8617
+ * Get the Webhook API client for webhook management operations.
8618
+ * Lazily instantiated on first access.
8619
+ */
8620
+ get webhook() {
8621
+ if (!this._webhookApi) {
8622
+ this._webhookApi = new WebhookApi(this.config);
8623
+ }
8624
+ return this._webhookApi;
8625
+ }
7992
8626
  };
7993
8627
 
8628
+ // ../../b4m-core/packages/common/dist/src/jira/webhook/types.js
8629
+ function isIssueWebhookEvent(payload) {
8630
+ const event = payload.webhookEvent;
8631
+ if (typeof event !== "string" || !event.startsWith("jira:issue_"))
8632
+ return false;
8633
+ const issue = payload.issue;
8634
+ if (!issue || typeof issue.key !== "string")
8635
+ return false;
8636
+ const fields = issue.fields;
8637
+ if (!fields || typeof fields.summary !== "string")
8638
+ return false;
8639
+ const status = fields.status;
8640
+ const issuetype = fields.issuetype;
8641
+ const project = fields.project;
8642
+ if (!status?.name || !issuetype?.name || !project?.key)
8643
+ return false;
8644
+ return true;
8645
+ }
8646
+ function isCommentWebhookEvent(payload) {
8647
+ const event = payload.webhookEvent;
8648
+ if (typeof event !== "string" || !event.startsWith("comment_"))
8649
+ return false;
8650
+ const issue = payload.issue;
8651
+ if (!issue || typeof issue.key !== "string")
8652
+ return false;
8653
+ const comment = payload.comment;
8654
+ if (!comment || typeof comment.id !== "string")
8655
+ return false;
8656
+ const author = comment.author;
8657
+ if (!author || typeof author.displayName !== "string")
8658
+ return false;
8659
+ return true;
8660
+ }
8661
+ function isSprintWebhookEvent(payload) {
8662
+ const event = payload.webhookEvent;
8663
+ if (typeof event !== "string" || !event.startsWith("sprint_"))
8664
+ return false;
8665
+ const sprint = payload.sprint;
8666
+ if (!sprint || typeof sprint.name !== "string")
8667
+ return false;
8668
+ return true;
8669
+ }
8670
+ function extractWebhookEventType(payload) {
8671
+ const event = payload.webhookEvent;
8672
+ if (typeof event !== "string" || event.length === 0)
8673
+ return null;
8674
+ return event;
8675
+ }
8676
+
7994
8677
  // ../../b4m-core/packages/common/dist/src/atlassian/config.js
7995
8678
  function getErrorMessage(error) {
7996
8679
  if (error instanceof Error) {
@@ -8683,7 +9366,11 @@ export {
8683
9366
  isPlaceholderValue,
8684
9367
  SecretAuditEvents,
8685
9368
  WebhookDeliveryStatus,
9369
+ COMMON_JIRA_WEBHOOK_EVENTS,
9370
+ JiraWebhookDeliveryStatus,
8686
9371
  SupportedFabFileMimeTypes,
9372
+ REASONING_EFFORT_LABELS,
9373
+ REASONING_EFFORT_DESCRIPTIONS,
8687
9374
  CODE_FILE_MIME_TYPES,
8688
9375
  DataSubscribeRequestAction,
8689
9376
  DataUnsubscribeRequestAction,
@@ -8918,11 +9605,23 @@ export {
8918
9605
  formatIssueLinkTypes,
8919
9606
  formatIssueLinks,
8920
9607
  AgileApi,
9608
+ formatWebhook,
9609
+ formatWebhookList,
9610
+ escapeSlackMrkdwn,
9611
+ formatIssueEventForSlack,
9612
+ formatCommentEventForSlack,
9613
+ formatSprintEventForSlack,
9614
+ formatGenericEventForSlack,
9615
+ WebhookApi,
8921
9616
  JIRA_MAX_ATTACHMENT_SIZE,
8922
9617
  isValidIssueKey,
8923
9618
  wikiMarkupToAdf,
8924
9619
  containsWikiTable,
8925
9620
  JiraApi,
9621
+ isIssueWebhookEvent,
9622
+ isCommentWebhookEvent,
9623
+ isSprintWebhookEvent,
9624
+ extractWebhookEventType,
8926
9625
  getErrorMessage,
8927
9626
  getAtlassianConfig,
8928
9627
  MCP_PROVIDER_METADATA,
@@ -15,7 +15,7 @@ import {
15
15
  dayjsConfig_default,
16
16
  extractSnippetMeta,
17
17
  settingsMap
18
- } from "./chunk-TNFZP7FG.js";
18
+ } from "./chunk-TX3D6KIM.js";
19
19
  import {
20
20
  Logger
21
21
  } from "./chunk-OCYRD7D6.js";
@@ -6567,10 +6567,18 @@ var OpenAIBackend = class {
6567
6567
  stream: true,
6568
6568
  ...options.maxTokens && { max_completion_tokens: options.maxTokens }
6569
6569
  });
6570
- if (options.complexity && effortMap[options.complexity]) {
6570
+ let reasoningEffort;
6571
+ if (options.reasoningEffort) {
6572
+ reasoningEffort = options.reasoningEffort;
6573
+ this.logger.debug(`Using explicit reasoning effort: ${reasoningEffort}`);
6574
+ } else if (options.complexity && effortMap[options.complexity]) {
6575
+ reasoningEffort = isGPT5_1Model || isGPT5_2Model ? effortMap_GPT5_1_2[options.complexity] : effortMap[options.complexity];
6576
+ this.logger.debug(`Auto-classified reasoning effort from complexity '${options.complexity}': ${reasoningEffort}`);
6577
+ }
6578
+ if (reasoningEffort) {
6571
6579
  Object.assign(parameters, {
6572
6580
  reasoning: {
6573
- effort: isGPT5_1Model || isGPT5_2Model ? effortMap_GPT5_1_2[options.complexity] : effortMap[options.complexity]
6581
+ effort: reasoningEffort
6574
6582
  }
6575
6583
  });
6576
6584
  }
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  createFabFile,
4
4
  createFabFileSchema
5
- } from "./chunk-YQWFK5O2.js";
6
- import "./chunk-5J4RL57F.js";
7
- import "./chunk-TNFZP7FG.js";
5
+ } from "./chunk-N7IZNCAL.js";
6
+ import "./chunk-ZBCO23NT.js";
7
+ import "./chunk-TX3D6KIM.js";
8
8
  import "./chunk-OCYRD7D6.js";
9
9
  export {
10
10
  createFabFile,
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  getEffectiveApiKey,
6
6
  getOpenWeatherKey,
7
7
  getSerperKey
8
- } from "./chunk-22VR7SKO.js";
8
+ } from "./chunk-5PMVJOAC.js";
9
9
  import "./chunk-RUI6HNLO.js";
10
10
  import {
11
11
  ConfigStore,
@@ -15,8 +15,8 @@ import {
15
15
  selectActiveBackgroundAgents,
16
16
  useCliStore
17
17
  } from "./chunk-TVW4ZESU.js";
18
- import "./chunk-UYN4HMRF.js";
19
- import "./chunk-YQWFK5O2.js";
18
+ import "./chunk-NFJ434R6.js";
19
+ import "./chunk-N7IZNCAL.js";
20
20
  import {
21
21
  BFLImageService,
22
22
  BaseStorage,
@@ -28,7 +28,7 @@ import {
28
28
  OpenAIBackend,
29
29
  OpenAIImageService,
30
30
  XAIImageService
31
- } from "./chunk-5J4RL57F.js";
31
+ } from "./chunk-ZBCO23NT.js";
32
32
  import {
33
33
  AiEvents,
34
34
  ApiKeyEvents,
@@ -84,7 +84,7 @@ import {
84
84
  XAI_IMAGE_MODELS,
85
85
  b4mLLMTools,
86
86
  getMcpProviderMetadata
87
- } from "./chunk-TNFZP7FG.js";
87
+ } from "./chunk-TX3D6KIM.js";
88
88
  import {
89
89
  Logger
90
90
  } from "./chunk-OCYRD7D6.js";
@@ -3964,6 +3964,7 @@ var updateUserSchema = z7.object({
3964
3964
  preferredLanguage: z7.string().nullable().optional(),
3965
3965
  preferredContact: z7.string().nullable().optional(),
3966
3966
  preferredVoice: z7.string().nullable().optional(),
3967
+ preferredReasoningEffort: z7.enum(["auto", "none", "minimal", "low", "medium", "high", "xhigh"]).nullable().optional(),
3967
3968
  tshirtSize: z7.string().nullable().optional(),
3968
3969
  geoLocation: z7.string().nullable().optional(),
3969
3970
  lastNotebookId: z7.string().nullable().optional(),
@@ -14635,7 +14636,7 @@ import { isAxiosError as isAxiosError2 } from "axios";
14635
14636
  // package.json
14636
14637
  var package_default = {
14637
14638
  name: "@bike4mind/cli",
14638
- version: "0.2.29",
14639
+ version: "0.2.30-cj-GH6259.19188+f39a38b28",
14639
14640
  type: "module",
14640
14641
  description: "Interactive CLI tool for Bike4Mind with ReAct agents",
14641
14642
  license: "UNLICENSED",
@@ -14749,10 +14750,10 @@ var package_default = {
14749
14750
  },
14750
14751
  devDependencies: {
14751
14752
  "@bike4mind/agents": "0.1.0",
14752
- "@bike4mind/common": "2.51.0",
14753
- "@bike4mind/mcp": "1.30.0",
14754
- "@bike4mind/services": "2.49.0",
14755
- "@bike4mind/utils": "2.6.0",
14753
+ "@bike4mind/common": "2.51.1-cj-GH6259.19188+f39a38b28",
14754
+ "@bike4mind/mcp": "1.30.1-cj-GH6259.19188+f39a38b28",
14755
+ "@bike4mind/services": "2.49.1-cj-GH6259.19188+f39a38b28",
14756
+ "@bike4mind/utils": "2.6.1-cj-GH6259.19188+f39a38b28",
14756
14757
  "@types/better-sqlite3": "^7.6.13",
14757
14758
  "@types/diff": "^5.0.9",
14758
14759
  "@types/jsonwebtoken": "^9.0.4",
@@ -14770,7 +14771,7 @@ var package_default = {
14770
14771
  optionalDependencies: {
14771
14772
  "@vscode/ripgrep": "^1.17.0"
14772
14773
  },
14773
- gitHead: "dd78e3f7ac6eb31fbbae8df3be1f33310779a9d5"
14774
+ gitHead: "f39a38b28fd36310af94f2b8fcb4904f351b4ec1"
14774
14775
  };
14775
14776
 
14776
14777
  // src/config/constants.ts
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CurationArtifactType
4
- } from "./chunk-TNFZP7FG.js";
4
+ } from "./chunk-TX3D6KIM.js";
5
5
 
6
6
  // ../../b4m-core/packages/services/dist/src/notebookCurationService/llmMarkdownGenerator.js
7
7
  var DEFAULT_OPTIONS = {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CurationArtifactType
4
- } from "./chunk-TNFZP7FG.js";
4
+ } from "./chunk-TX3D6KIM.js";
5
5
 
6
6
  // ../../b4m-core/packages/services/dist/src/notebookCurationService/markdownGenerator.js
7
7
  var DEFAULT_OPTIONS = {
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  findMostSimilarMemento,
4
4
  getRelevantMementos
5
- } from "./chunk-22VR7SKO.js";
6
- import "./chunk-5J4RL57F.js";
7
- import "./chunk-TNFZP7FG.js";
5
+ } from "./chunk-5PMVJOAC.js";
6
+ import "./chunk-ZBCO23NT.js";
7
+ import "./chunk-TX3D6KIM.js";
8
8
  import "./chunk-OCYRD7D6.js";
9
9
  export {
10
10
  findMostSimilarMemento,
@@ -134,12 +134,12 @@ import {
134
134
  validateMermaidSyntax,
135
135
  warmUpSettingsCache,
136
136
  withRetry
137
- } from "./chunk-5J4RL57F.js";
137
+ } from "./chunk-ZBCO23NT.js";
138
138
  import {
139
139
  buildRateLimitLogEntry,
140
140
  isNearLimit,
141
141
  parseRateLimitHeaders
142
- } from "./chunk-TNFZP7FG.js";
142
+ } from "./chunk-TX3D6KIM.js";
143
143
  import {
144
144
  Logger,
145
145
  NotificationDeduplicator,
@@ -31,6 +31,7 @@ import {
31
31
  CATEGORY_ICONS,
32
32
  CHAT_MODELS,
33
33
  CODE_FILE_MIME_TYPES,
34
+ COMMON_JIRA_WEBHOOK_EVENTS,
34
35
  CONFLUENCE_MAX_ATTACHMENT_SIZE,
35
36
  CREDIT_ADD_TRANSACTION_TYPES,
36
37
  CREDIT_DEDUCT_TRANSACTION_TYPES,
@@ -121,6 +122,7 @@ import {
121
122
  InvitesRefetchAction,
122
123
  JIRA_MAX_ATTACHMENT_SIZE,
123
124
  JiraApi,
125
+ JiraWebhookDeliveryStatus,
124
126
  KnowledgeType,
125
127
  LEGACY_IMAGE_MODEL_MAP,
126
128
  LIVEOPS_TRIAGE_VALIDATION_LIMITS,
@@ -230,6 +232,8 @@ import {
230
232
  QuestResourceSchema,
231
233
  QuestSchema,
232
234
  QuestStatusSchema,
235
+ REASONING_EFFORT_DESCRIPTIONS,
236
+ REASONING_EFFORT_LABELS,
233
237
  RESTRICTION_OPERATIONS,
234
238
  RESTRICTION_SUBJECT_TYPES,
235
239
  RapidReplyFallbackBehaviors,
@@ -307,6 +311,7 @@ import {
307
311
  VoyageAIEmbeddingModel,
308
312
  WEBSITE_URL,
309
313
  WHATS_NEW_VALIDATION_LIMITS,
314
+ WebhookApi,
310
315
  WebhookDeliveryStatus,
311
316
  WhatsNewConfigSchema,
312
317
  WhatsNewSyncConfigSchema,
@@ -330,15 +335,20 @@ import {
330
335
  detectMimeType,
331
336
  detectResourceConflicts,
332
337
  determineMimeType,
338
+ escapeSlackMrkdwn,
333
339
  extractSnippetMeta,
340
+ extractWebhookEventType,
334
341
  formatActivityMessage,
335
342
  formatBoard,
336
343
  formatBoardConfiguration,
337
344
  formatBoardIssues,
338
345
  formatBoardList,
339
346
  formatComment,
347
+ formatCommentEventForSlack,
340
348
  formatFileSize,
349
+ formatGenericEventForSlack,
341
350
  formatIssueDetails,
351
+ formatIssueEventForSlack,
342
352
  formatIssueLinkTypes,
343
353
  formatIssueLinks,
344
354
  formatIssueResponse,
@@ -347,6 +357,7 @@ import {
347
357
  formatSSEError,
348
358
  formatSearchResults,
349
359
  formatSprint,
360
+ formatSprintEventForSlack,
350
361
  formatSprintIssues,
351
362
  formatSprintList,
352
363
  formatTransitionResult,
@@ -354,6 +365,8 @@ import {
354
365
  formatUser,
355
366
  formatUserList,
356
367
  formatWatchers,
368
+ formatWebhook,
369
+ formatWebhookList,
357
370
  getAtlassianConfig,
358
371
  getErrorMessage,
359
372
  getFileTypeEmoji,
@@ -364,15 +377,18 @@ import {
364
377
  getWebsiteUrl,
365
378
  groupShareSchema,
366
379
  isArtifact,
380
+ isCommentWebhookEvent,
367
381
  isCreditHolder,
368
382
  isDeletedArtifact,
369
383
  isDraftArtifact,
384
+ isIssueWebhookEvent,
370
385
  isModelDeprecated,
371
386
  isNearLimit,
372
387
  isPlaceholderValue,
373
388
  isPredefinedTag,
374
389
  isPublicArtifact,
375
390
  isPublishedArtifact,
391
+ isSprintWebhookEvent,
376
392
  isSupportedEmbeddingModel,
377
393
  isValidEnumValue,
378
394
  isValidIssueKey,
@@ -416,7 +432,7 @@ import {
416
432
  validateReactArtifactV2,
417
433
  validateSvgArtifactV2,
418
434
  wikiMarkupToAdf
419
- } from "./chunk-TNFZP7FG.js";
435
+ } from "./chunk-TX3D6KIM.js";
420
436
  export {
421
437
  ALL_IMAGE_MODELS,
422
438
  ALL_IMAGE_SIZES,
@@ -449,6 +465,7 @@ export {
449
465
  CATEGORY_ICONS,
450
466
  CHAT_MODELS,
451
467
  CODE_FILE_MIME_TYPES,
468
+ COMMON_JIRA_WEBHOOK_EVENTS,
452
469
  CONFLUENCE_MAX_ATTACHMENT_SIZE,
453
470
  MIME_TYPE_MAP as CONFLUENCE_MIME_TYPE_MAP,
454
471
  CREDIT_ADD_TRANSACTION_TYPES,
@@ -540,6 +557,7 @@ export {
540
557
  InvitesRefetchAction,
541
558
  JIRA_MAX_ATTACHMENT_SIZE,
542
559
  JiraApi,
560
+ JiraWebhookDeliveryStatus,
543
561
  KnowledgeType,
544
562
  LEGACY_IMAGE_MODEL_MAP,
545
563
  LIVEOPS_TRIAGE_VALIDATION_LIMITS,
@@ -649,6 +667,8 @@ export {
649
667
  QuestResourceSchema,
650
668
  QuestSchema,
651
669
  QuestStatusSchema,
670
+ REASONING_EFFORT_DESCRIPTIONS,
671
+ REASONING_EFFORT_LABELS,
652
672
  RESTRICTION_OPERATIONS,
653
673
  RESTRICTION_SUBJECT_TYPES,
654
674
  RapidReplyFallbackBehaviors,
@@ -726,6 +746,7 @@ export {
726
746
  VoyageAIEmbeddingModel,
727
747
  WEBSITE_URL,
728
748
  WHATS_NEW_VALIDATION_LIMITS,
749
+ WebhookApi,
729
750
  WebhookDeliveryStatus,
730
751
  WhatsNewConfigSchema,
731
752
  WhatsNewSyncConfigSchema,
@@ -750,15 +771,20 @@ export {
750
771
  detectMimeType,
751
772
  detectResourceConflicts,
752
773
  determineMimeType,
774
+ escapeSlackMrkdwn,
753
775
  extractSnippetMeta,
776
+ extractWebhookEventType,
754
777
  formatActivityMessage,
755
778
  formatBoard,
756
779
  formatBoardConfiguration,
757
780
  formatBoardIssues,
758
781
  formatBoardList,
759
782
  formatComment,
783
+ formatCommentEventForSlack,
760
784
  formatFileSize,
785
+ formatGenericEventForSlack,
761
786
  formatIssueDetails,
787
+ formatIssueEventForSlack,
762
788
  formatIssueLinkTypes,
763
789
  formatIssueLinks,
764
790
  formatIssueResponse,
@@ -767,6 +793,7 @@ export {
767
793
  formatSSEError,
768
794
  formatSearchResults,
769
795
  formatSprint,
796
+ formatSprintEventForSlack,
770
797
  formatSprintIssues,
771
798
  formatSprintList,
772
799
  formatTransitionResult,
@@ -774,6 +801,8 @@ export {
774
801
  formatUser,
775
802
  formatUserList,
776
803
  formatWatchers,
804
+ formatWebhook,
805
+ formatWebhookList,
777
806
  getAtlassianConfig,
778
807
  getErrorMessage,
779
808
  getFileTypeEmoji,
@@ -784,15 +813,18 @@ export {
784
813
  getWebsiteUrl,
785
814
  groupShareSchema,
786
815
  isArtifact,
816
+ isCommentWebhookEvent,
787
817
  isCreditHolder,
788
818
  isDeletedArtifact,
789
819
  isDraftArtifact,
820
+ isIssueWebhookEvent,
790
821
  isModelDeprecated,
791
822
  isNearLimit,
792
823
  isPlaceholderValue,
793
824
  isPredefinedTag,
794
825
  isPublicArtifact,
795
826
  isPublishedArtifact,
827
+ isSprintWebhookEvent,
796
828
  isSupportedEmbeddingModel,
797
829
  isValidEnumValue,
798
830
  isValidIssueKey,
@@ -2,9 +2,9 @@
2
2
  import {
3
3
  SubtractCreditsSchema,
4
4
  subtractCredits
5
- } from "./chunk-UYN4HMRF.js";
6
- import "./chunk-5J4RL57F.js";
7
- import "./chunk-TNFZP7FG.js";
5
+ } from "./chunk-NFJ434R6.js";
6
+ import "./chunk-ZBCO23NT.js";
7
+ import "./chunk-TX3D6KIM.js";
8
8
  import "./chunk-OCYRD7D6.js";
9
9
  export {
10
10
  SubtractCreditsSchema,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bike4mind/cli",
3
- "version": "0.2.29",
3
+ "version": "0.2.30-cj-GH6259.19188+f39a38b28",
4
4
  "type": "module",
5
5
  "description": "Interactive CLI tool for Bike4Mind with ReAct agents",
6
6
  "license": "UNLICENSED",
@@ -114,10 +114,10 @@
114
114
  },
115
115
  "devDependencies": {
116
116
  "@bike4mind/agents": "0.1.0",
117
- "@bike4mind/common": "2.51.0",
118
- "@bike4mind/mcp": "1.30.0",
119
- "@bike4mind/services": "2.49.0",
120
- "@bike4mind/utils": "2.6.0",
117
+ "@bike4mind/common": "2.51.1-cj-GH6259.19188+f39a38b28",
118
+ "@bike4mind/mcp": "1.30.1-cj-GH6259.19188+f39a38b28",
119
+ "@bike4mind/services": "2.49.1-cj-GH6259.19188+f39a38b28",
120
+ "@bike4mind/utils": "2.6.1-cj-GH6259.19188+f39a38b28",
121
121
  "@types/better-sqlite3": "^7.6.13",
122
122
  "@types/diff": "^5.0.9",
123
123
  "@types/jsonwebtoken": "^9.0.4",
@@ -135,5 +135,5 @@
135
135
  "optionalDependencies": {
136
136
  "@vscode/ripgrep": "^1.17.0"
137
137
  },
138
- "gitHead": "dd78e3f7ac6eb31fbbae8df3be1f33310779a9d5"
138
+ "gitHead": "f39a38b28fd36310af94f2b8fcb4904f351b4ec1"
139
139
  }