@get-bb/plugin-sdk 0.4.24 → 0.4.27

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.
@@ -55,7 +55,11 @@ var experimental_aiInferenceCompleteInputSchema = z2.object({
55
55
  timeoutMs: z2.number().int().positive()
56
56
  }).strict();
57
57
  var experimental_aiInferenceCompleteOutputSchema = z2.union([
58
- z2.object({ ok: z2.literal(true), model: z2.string().min(1), value: jsonObjectSchema }).strict(),
58
+ z2.object({
59
+ ok: z2.literal(true),
60
+ model: z2.string().min(1),
61
+ value: jsonObjectSchema
62
+ }).strict(),
59
63
  failureSchema
60
64
  ]);
61
65
  var experimental_aiVoiceTranscribeInputSchema = z2.object({
@@ -511,9 +511,7 @@ function normalizeProviderBridgeOptions(providerId, value, label = "experimental
511
511
  return current;
512
512
  }
513
513
  if (typeof current !== "object") {
514
- throw new Error(
515
- `provider "${providerId}" ${label}${path} must be JSON`
516
- );
514
+ throw new Error(`provider "${providerId}" ${label}${path} must be JSON`);
517
515
  }
518
516
  if (active.has(current)) {
519
517
  throw new Error(
@@ -549,9 +547,7 @@ function normalizeProviderBridgeOptions(providerId, value, label = "experimental
549
547
  }
550
548
  const normalized = visit(value, "");
551
549
  if (normalized === null || Array.isArray(normalized) || typeof normalized !== "object") {
552
- throw new Error(
553
- `provider "${providerId}" ${label} must be an object`
554
- );
550
+ throw new Error(`provider "${providerId}" ${label} must be an object`);
555
551
  }
556
552
  if (Buffer.byteLength(JSON.stringify(normalized), "utf8") > PLUGIN_PROVIDER_BRIDGE_OPTIONS_MAX_BYTES) {
557
553
  throw new Error(
@@ -574,9 +570,7 @@ function requireNonBlankString(args) {
574
570
  }
575
571
  function validateProviderStrings(providerId, value) {
576
572
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
577
- throw new Error(
578
- `provider "${providerId}" strings must be an object`
579
- );
573
+ throw new Error(`provider "${providerId}" strings must be an object`);
580
574
  }
581
575
  const record = Object.fromEntries(
582
576
  Object.entries(value)
@@ -778,7 +772,9 @@ function validateProviderNativeRoots(providerId, field, value) {
778
772
  }
779
773
  return Object.freeze({
780
774
  user: Object.freeze(wire.data.user.map((root) => Object.freeze(root))),
781
- project: Object.freeze(wire.data.project.map((root) => Object.freeze(root)))
775
+ project: Object.freeze(
776
+ wire.data.project.map((root) => Object.freeze(root))
777
+ )
782
778
  });
783
779
  }
784
780
  var PROVIDER_MODEL_CATALOG_SCOPES = [
@@ -798,9 +794,7 @@ function validateProviderModelCatalogScope(providerId, value) {
798
794
  }
799
795
  function validateProviderFallbackModels(providerId, value) {
800
796
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
801
- throw new Error(
802
- `provider "${providerId}" models must be an object`
803
- );
797
+ throw new Error(`provider "${providerId}" models must be an object`);
804
798
  }
805
799
  const fallback = Reflect.get(value, "fallback");
806
800
  if (fallback === void 0) {
@@ -818,95 +812,95 @@ function validateProviderFallbackModels(providerId, value) {
818
812
  }
819
813
  const seen = /* @__PURE__ */ new Set();
820
814
  let defaults = 0;
821
- const normalized = fallback.map((entry, index) => {
822
- const field = `models.fallback[${index}]`;
823
- if (typeof entry !== "object" || entry === null || Array.isArray(entry)) {
824
- throw new Error(`provider "${providerId}" ${field} must be an object`);
825
- }
826
- const record = Object.fromEntries(
827
- Object.entries(entry)
828
- );
829
- const id = requireNonBlankString({
830
- providerId,
831
- field: `${field}.id`,
832
- value: record.id
833
- });
834
- if (seen.has(id)) {
835
- throw new Error(
836
- `provider "${providerId}" models.fallback id ${JSON.stringify(id)} is duplicated`
837
- );
838
- }
839
- seen.add(id);
840
- const displayName = requireNonBlankString({
841
- providerId,
842
- field: `${field}.displayName`,
843
- value: record.displayName
844
- });
845
- const description = requireNonBlankString({
846
- providerId,
847
- field: `${field}.description`,
848
- value: record.description
849
- });
850
- const efforts = record.supportedReasoningEfforts;
851
- if (!Array.isArray(efforts) || efforts.length === 0) {
852
- throw new Error(
853
- `provider "${providerId}" ${field}.supportedReasoningEfforts must be a non-empty array`
854
- );
855
- }
856
- const levels = /* @__PURE__ */ new Set();
857
- const supportedReasoningEfforts = efforts.map(
858
- (effort, effortIndex) => {
859
- if (typeof effort !== "object" || effort === null || Array.isArray(effort)) {
860
- throw new Error(
861
- `provider "${providerId}" ${field}.supportedReasoningEfforts[${effortIndex}] must be { reasoningEffort, description }`
862
- );
863
- }
864
- const reasoningEffort = Reflect.get(effort, "reasoningEffort");
865
- if (typeof reasoningEffort !== "string" || !PLUGIN_PROVIDER_REASONING_LEVEL_VALUES.includes(
866
- reasoningEffort
867
- )) {
868
- throw new Error(
869
- `provider "${providerId}" ${field}.supportedReasoningEfforts[${effortIndex}].reasoningEffort must be one of ${PLUGIN_PROVIDER_REASONING_LEVEL_VALUES.join(", ")}`
870
- );
871
- }
872
- const level = reasoningEffort;
873
- if (levels.has(level)) {
874
- throw new Error(
875
- `provider "${providerId}" ${field}.supportedReasoningEfforts repeats ${JSON.stringify(level)}`
876
- );
877
- }
878
- levels.add(level);
879
- return Object.freeze({
880
- reasoningEffort: level,
881
- description: requireNonBlankString({
882
- providerId,
883
- field: `${field}.supportedReasoningEfforts[${effortIndex}].description`,
884
- value: Reflect.get(effort, "description")
885
- })
886
- });
815
+ const normalized = fallback.map(
816
+ (entry, index) => {
817
+ const field = `models.fallback[${index}]`;
818
+ if (typeof entry !== "object" || entry === null || Array.isArray(entry)) {
819
+ throw new Error(`provider "${providerId}" ${field} must be an object`);
887
820
  }
888
- );
889
- const defaultReasoningEffort = record.defaultReasoningEffort;
890
- if (typeof defaultReasoningEffort !== "string" || !levels.has(defaultReasoningEffort)) {
891
- throw new Error(
892
- `provider "${providerId}" ${field}.defaultReasoningEffort must be one of its supportedReasoningEfforts`
821
+ const record = Object.fromEntries(
822
+ Object.entries(entry)
893
823
  );
894
- }
895
- if (typeof record.isDefault !== "boolean") {
896
- throw new Error(
897
- `provider "${providerId}" ${field}.isDefault must be a boolean`
824
+ const id = requireNonBlankString({
825
+ providerId,
826
+ field: `${field}.id`,
827
+ value: record.id
828
+ });
829
+ if (seen.has(id)) {
830
+ throw new Error(
831
+ `provider "${providerId}" models.fallback id ${JSON.stringify(id)} is duplicated`
832
+ );
833
+ }
834
+ seen.add(id);
835
+ const displayName = requireNonBlankString({
836
+ providerId,
837
+ field: `${field}.displayName`,
838
+ value: record.displayName
839
+ });
840
+ const description = requireNonBlankString({
841
+ providerId,
842
+ field: `${field}.description`,
843
+ value: record.description
844
+ });
845
+ const efforts = record.supportedReasoningEfforts;
846
+ if (!Array.isArray(efforts) || efforts.length === 0) {
847
+ throw new Error(
848
+ `provider "${providerId}" ${field}.supportedReasoningEfforts must be a non-empty array`
849
+ );
850
+ }
851
+ const levels = /* @__PURE__ */ new Set();
852
+ const supportedReasoningEfforts = efforts.map(
853
+ (effort, effortIndex) => {
854
+ if (typeof effort !== "object" || effort === null || Array.isArray(effort)) {
855
+ throw new Error(
856
+ `provider "${providerId}" ${field}.supportedReasoningEfforts[${effortIndex}] must be { reasoningEffort, description }`
857
+ );
858
+ }
859
+ const reasoningEffort = Reflect.get(effort, "reasoningEffort");
860
+ if (typeof reasoningEffort !== "string" || !PLUGIN_PROVIDER_REASONING_LEVEL_VALUES.includes(reasoningEffort)) {
861
+ throw new Error(
862
+ `provider "${providerId}" ${field}.supportedReasoningEfforts[${effortIndex}].reasoningEffort must be one of ${PLUGIN_PROVIDER_REASONING_LEVEL_VALUES.join(", ")}`
863
+ );
864
+ }
865
+ const level = reasoningEffort;
866
+ if (levels.has(level)) {
867
+ throw new Error(
868
+ `provider "${providerId}" ${field}.supportedReasoningEfforts repeats ${JSON.stringify(level)}`
869
+ );
870
+ }
871
+ levels.add(level);
872
+ return Object.freeze({
873
+ reasoningEffort: level,
874
+ description: requireNonBlankString({
875
+ providerId,
876
+ field: `${field}.supportedReasoningEfforts[${effortIndex}].description`,
877
+ value: Reflect.get(effort, "description")
878
+ })
879
+ });
880
+ }
898
881
  );
882
+ const defaultReasoningEffort = record.defaultReasoningEffort;
883
+ if (typeof defaultReasoningEffort !== "string" || !levels.has(defaultReasoningEffort)) {
884
+ throw new Error(
885
+ `provider "${providerId}" ${field}.defaultReasoningEffort must be one of its supportedReasoningEfforts`
886
+ );
887
+ }
888
+ if (typeof record.isDefault !== "boolean") {
889
+ throw new Error(
890
+ `provider "${providerId}" ${field}.isDefault must be a boolean`
891
+ );
892
+ }
893
+ if (record.isDefault) defaults += 1;
894
+ return Object.freeze({
895
+ id,
896
+ displayName,
897
+ description,
898
+ supportedReasoningEfforts: Object.freeze(supportedReasoningEfforts),
899
+ defaultReasoningEffort,
900
+ isDefault: record.isDefault
901
+ });
899
902
  }
900
- if (record.isDefault) defaults += 1;
901
- return Object.freeze({
902
- id,
903
- displayName,
904
- description,
905
- supportedReasoningEfforts: Object.freeze(supportedReasoningEfforts),
906
- defaultReasoningEffort,
907
- isDefault: record.isDefault
908
- });
909
- });
903
+ );
910
904
  if (normalized.length > 0 && defaults !== 1) {
911
905
  throw new Error(
912
906
  `provider "${providerId}" models.fallback must mark exactly one model isDefault (found ${defaults})`
@@ -968,9 +962,7 @@ function validatePluginAiServiceDeclaration(declaration) {
968
962
  }
969
963
  const displayName = typeof declaration.displayName === "string" ? declaration.displayName.trim() : "";
970
964
  if (displayName.length === 0 || displayName.length > 64) {
971
- throw new Error(
972
- `AI service "${id}" displayName must be 1-64 characters`
973
- );
965
+ throw new Error(`AI service "${id}" displayName must be 1-64 characters`);
974
966
  }
975
967
  const kinds = declaration.kinds;
976
968
  if (!Array.isArray(kinds) || kinds.length === 0) {
@@ -1206,10 +1198,7 @@ function validatePluginProviderDeclaration(declaration) {
1206
1198
  field: "reasoningLevels",
1207
1199
  value: declaration.reasoningLevels
1208
1200
  });
1209
- const extensionKinds = declaration.extensionKinds === void 0 ? void 0 : validateProviderExtensionKinds(
1210
- id,
1211
- declaration.extensionKinds
1212
- );
1201
+ const extensionKinds = declaration.extensionKinds === void 0 ? void 0 : validateProviderExtensionKinds(id, declaration.extensionKinds);
1213
1202
  const fallbackModels = declaration.models === void 0 ? void 0 : validateProviderFallbackModels(id, declaration.models);
1214
1203
  const modelCatalogScope = validateProviderModelCatalogScope(
1215
1204
  id,
@@ -1470,9 +1459,7 @@ function parsePluginAgentToolPresentation(toolName, value) {
1470
1459
  return null;
1471
1460
  }
1472
1461
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
1473
- throw new Error(
1474
- `tool "${toolName}" presentation must be an object`
1475
- );
1462
+ throw new Error(`tool "${toolName}" presentation must be an object`);
1476
1463
  }
1477
1464
  const declared = value;
1478
1465
  const presentation = {};