@openclaw/amazon-bedrock-provider 2026.9.4 → 2026.9.5

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 (42) hide show
  1. package/assets/activity.svg +30 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/stream.runtime.js +38 -8
  4. package/dist/thinking-policy.js +5 -4
  5. package/node_modules/@aws-sdk/client-bedrock/dist-cjs/index.js +2 -1
  6. package/node_modules/@aws-sdk/client-bedrock/dist-es/models/enums.js +1 -0
  7. package/node_modules/@aws-sdk/client-bedrock/dist-types/commands/GetAccountDataRetentionCommand.d.ts +1 -1
  8. package/node_modules/@aws-sdk/client-bedrock/dist-types/commands/PutAccountDataRetentionCommand.d.ts +2 -2
  9. package/node_modules/@aws-sdk/client-bedrock/dist-types/models/enums.d.ts +1 -0
  10. package/node_modules/@aws-sdk/client-bedrock/dist-types/ts3.4/models/enums.d.ts +1 -0
  11. package/node_modules/@aws-sdk/client-bedrock/node_modules/@aws-sdk/token-providers/package.json +1 -1
  12. package/node_modules/@aws-sdk/client-bedrock/node_modules/@smithy/fetch-http-handler/CHANGELOG.md +11 -0
  13. package/node_modules/@aws-sdk/client-bedrock/node_modules/@smithy/fetch-http-handler/dist-cjs/index.js +2 -1
  14. package/node_modules/@aws-sdk/client-bedrock/node_modules/@smithy/fetch-http-handler/dist-es/fetch-http-handler.js +2 -1
  15. package/node_modules/@aws-sdk/client-bedrock/node_modules/@smithy/fetch-http-handler/package.json +3 -3
  16. package/node_modules/@aws-sdk/client-bedrock/package.json +3 -3
  17. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-cjs/index.js +1 -1
  18. package/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/token-providers/package.json +1 -1
  19. package/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/fetch-http-handler/CHANGELOG.md +11 -0
  20. package/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/fetch-http-handler/dist-cjs/index.js +2 -1
  21. package/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/fetch-http-handler/dist-es/fetch-http-handler.js +2 -1
  22. package/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/fetch-http-handler/package.json +3 -3
  23. package/node_modules/@aws-sdk/client-bedrock-runtime/package.json +3 -3
  24. package/node_modules/@aws-sdk/credential-provider-node/dist-cjs/index.js +2 -0
  25. package/node_modules/@aws-sdk/credential-provider-node/dist-es/runtime/memoize-chain.js +2 -0
  26. package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/fetch-http-handler/CHANGELOG.md +11 -0
  27. package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/fetch-http-handler/dist-cjs/index.js +2 -1
  28. package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/fetch-http-handler/dist-es/fetch-http-handler.js +2 -1
  29. package/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/fetch-http-handler/package.json +3 -3
  30. package/node_modules/@aws-sdk/credential-provider-node/package.json +1 -1
  31. package/node_modules/@smithy/node-http-handler/CHANGELOG.md +14 -0
  32. package/node_modules/@smithy/node-http-handler/dist-cjs/index.js +11 -4
  33. package/node_modules/@smithy/node-http-handler/dist-es/http2/ClientHttp2SessionRef.js +1 -0
  34. package/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +2 -3
  35. package/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +8 -1
  36. package/node_modules/@smithy/node-http-handler/package.json +2 -2
  37. package/node_modules/@smithy/types/CHANGELOG.md +6 -0
  38. package/node_modules/@smithy/types/dist-types/http/httpHandlerInitialization.d.ts +14 -0
  39. package/node_modules/@smithy/types/dist-types/ts3.4/http/httpHandlerInitialization.d.ts +14 -0
  40. package/node_modules/@smithy/types/package.json +1 -1
  41. package/openclaw.plugin.json +15 -1
  42. package/package.json +13 -10
@@ -0,0 +1,30 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
2
+ <!--
3
+ Adapted from OpenClaw ui/public/provider-icons/ProviderIcon-bedrock.svg.
4
+ Source: https://github.com/steipete/CodexBar/blob/215efbd39ad58acb4b0cd637c407d63e6183bc8d/Sources/CodexBar/Resources/ProviderIcon-bedrock.svg
5
+
6
+ MIT License
7
+ Copyright (c) 2026 Peter Steinberger
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
26
+
27
+ Names and marks remain the property of their respective owners.
28
+ -->
29
+ <path fill="currentColor" fill-rule="evenodd" stroke="none" stroke-width="1" transform="scale(2, 2)" d="M41,20.9998818 C40.448,20.9998818 40,20.5508818 40,19.9998818 C40,19.4488818 40.448,18.9998818 41,18.9998818 C41.552,18.9998818 42,19.4488818 42,19.9998818 C42,20.5508818 41.552,20.9998818 41,20.9998818 L41,20.9998818 Z M16.977,41.8478818 L13.774,40.1018818 L17.515,37.8568818 L16.485,36.1428818 L11.738,38.9908818 L7,36.4058818 L7,30.5658818 L11.515,27.8568818 L10.485,26.1428818 L6,28.8338818 L2,26.4338818 L2,22.6178818 L7.447,19.8948818 L6.553,18.1048818 L2,20.3818818 L2,17.6178818 L6.956,15.1398818 L11,17.5658818 L11,20.3818818 L7.553,22.1048818 L8.447,23.8948818 L12.003,22.1168818 L15.557,23.8768818 L16.443,22.0848818 L13,20.3798818 L13,17.5658818 L17.515,14.8568818 C17.815,14.6768818 18,14.3508818 18,13.9998818 L18,8.99988178 L16,8.99988178 L16,13.4338818 L12,15.8338818 L8,13.4338818 L8,6.58788178 L11,4.92188178 L11,10.9998818 L13,10.9998818 L13,3.81088178 L16.024,2.12988178 L21.002,4.61588178 L21.001,26.4498818 L10.463,33.1558818 L11.537,34.8438818 L21.001,28.8218818 L21,39.4338818 L16.977,41.8478818 Z M38,28.9998818 C38.552,28.9998818 39,29.4488818 39,29.9998818 C39,30.5508818 38.552,30.9998818 38,30.9998818 C37.448,30.9998818 37,30.5508818 37,29.9998818 C37,29.4488818 37.448,28.9998818 38,28.9998818 L38,28.9998818 Z M30,38.9998818 C29.448,38.9998818 29,38.5508818 29,37.9998818 C29,37.4488818 29.448,36.9998818 30,36.9998818 C30.552,36.9998818 31,37.4488818 31,37.9998818 C31,38.5508818 30.552,38.9998818 30,38.9998818 L30,38.9998818 Z M32,5.99988178 C32.552,5.99988178 33,6.44888178 33,6.99988178 C33,7.55088178 32.552,7.99988178 32,7.99988178 C31.448,7.99988178 31,7.55088178 31,6.99988178 C31,6.44888178 31.448,5.99988178 32,5.99988178 L32,5.99988178 Z M41,16.9998818 C39.698,16.9998818 38.598,17.8388818 38.184,18.9998818 L23.001,18.9998818 L23.001,14.9998818 L32,14.9998818 C32.553,14.9998818 33,14.5518818 33,13.9998818 L33,9.81588178 C34.161,9.40188178 35,8.30188178 35,6.99988178 C35,5.34588178 33.654,3.99988178 32,3.99988178 C30.346,3.99988178 29,5.34588178 29,6.99988178 C29,8.30188178 29.839,9.40188178 31,9.81588178 L31,12.9998818 L23.001,12.9998818 L23.002,3.99788178 C23.002,3.61888178 22.788,3.27288178 22.449,3.10388178 L16.447,0.104881781 C16.151,-0.0421182195 15.803,-0.0341182195 15.515,0.125881781 L6.515,5.12588178 C6.197,5.30188178 6,5.63688178 6,5.99988178 L6,13.3818818 L0.553,16.1048818 C0.214,16.2748818 0,16.6208818 0,16.9998818 L0,26.9998818 C0,27.3508818 0.185,27.6768818 0.485,27.8568818 L5,30.5658818 L5,36.9998818 C5,37.3658818 5.2,37.7028818 5.521,37.8778818 L16.521,43.8778818 C16.671,43.9588818 16.835,43.9998818 17,43.9998818 C17.179,43.9998818 17.356,43.9518818 17.515,43.8568818 L22.515,40.8568818 C22.815,40.6768818 23,40.3508818 23,39.9998818 L23,32.9998818 L29,32.9998818 L29,35.1838818 C27.839,35.5978818 27,36.6978818 27,37.9998818 C27,39.6538818 28.346,40.9998818 30,40.9998818 C31.654,40.9998818 33,39.6538818 33,37.9998818 C33,36.6978818 32.161,35.5978818 31,35.1838818 L31,31.9998818 C31,31.4478818 30.553,30.9998818 30,30.9998818 L23,30.9998818 L23.001,26.9998818 L33.586,26.9998818 L35.301,28.7148818 C35.113,29.1058818 35,29.5378818 35,29.9998818 C35,31.6538818 36.346,32.9998818 38,32.9998818 C39.654,32.9998818 41,31.6538818 41,29.9998818 C41,28.3458818 39.654,26.9998818 38,26.9998818 C37.538,26.9998818 37.106,27.1128818 36.715,27.3008818 L34.707,25.2928818 C34.52,25.1048818 34.266,24.9998818 34,24.9998818 L23.001,24.9998818 L23.001,20.9998818 L38.184,20.9998818 C38.598,22.1608818 39.698,22.9998818 41,22.9998818 C42.654,22.9998818 44,21.6538818 44,19.9998818 C44,18.3458818 42.654,16.9998818 41,16.9998818 L41,16.9998818 Z" />
30
+ </svg>
Binary file
@@ -1,5 +1,5 @@
1
1
  import { resolveBedrockCachePoint, resolveBedrockPromptCachePolicy } from "./bedrock-options.js";
2
- import { supportsBedrockNativeMaxEffort } from "./thinking-policy.js";
2
+ import { resolveBedrockClaudeThinkingProfile, supportsBedrockNativeMaxEffort } from "./thinking-policy.js";
3
3
  import { bindsClaudeThinkingPrefix, requiresClaudeMandatoryAdaptiveThinking, resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, supportsClaudeAdaptiveThinking, supportsClaudeNativeXhighEffort } from "openclaw/plugin-sdk/provider-model-shared";
4
4
  import { applyAnthropicRefusal, createDeferredEventBuffer, notifyLlmRequestActivity } from "openclaw/plugin-sdk/provider-stream-shared";
5
5
  import { describeToolResultMediaPlaceholder, failTransportStream, finalizeTerminalToolCallArguments, notifyProviderHttpMetadata, splitSystemPromptCacheBoundary, stripSystemPromptCacheBoundary } from "openclaw/plugin-sdk/provider-transport-runtime";
@@ -244,11 +244,11 @@ function resolveSimpleBedrockOptions(model, options) {
244
244
  if (requiresMandatoryAdaptiveThinking(model)) return {
245
245
  ...base,
246
246
  maxTokens: resolveAdaptiveBedrockMaxTokens(model, base.maxTokens),
247
- reasoning: options?.reasoning === "off" ? "low" : options?.reasoning ?? "high",
247
+ reasoning: options?.reasoning,
248
248
  thinkingBudgets: options?.thinkingBudgets
249
249
  };
250
250
  if (!options?.reasoning) {
251
- const reasoning = usesClaudeOpus5BedrockContract(model) || isAnthropicClaudeModel(model) && requiresMandatoryAdaptiveThinking(model) ? "high" : void 0;
251
+ const reasoning = usesClaudeOpus5BedrockContract(model) ? "high" : void 0;
252
252
  return {
253
253
  ...base,
254
254
  ...reasoning !== void 0 || supportsAdaptiveThinking(model) ? { maxTokens: resolveAdaptiveBedrockMaxTokens(model, base.maxTokens) } : {},
@@ -473,11 +473,23 @@ function isClaudeMythosPreviewModelId(modelId) {
473
473
  /** Check canonical metadata and profile names for adaptive Claude support. */
474
474
  function supportsAdaptiveThinking(model) {
475
475
  const profileModelId = resolveClaudeProfileNameModelId(model.name);
476
- return supportsClaudeAdaptiveThinking(model) || supportsClaudeAdaptiveThinking({ id: profileModelId }) || isClaudeMythosPreviewModelId(resolveClaudeModelIdentity(model)) || isClaudeMythosPreviewModelId(profileModelId) || usesClaudeSonnet5BedrockContract(model) || resolveClaudeSonnet5ModelIdentity({ id: profileModelId }) !== void 0;
476
+ return supportsClaudeAdaptiveThinking(model) || supportsClaudeAdaptiveThinking({ id: profileModelId }) || isClaudeMythosPreviewModelId(resolveClaudeModelIdentity(model));
477
477
  }
478
478
  function requiresMandatoryAdaptiveThinking(model) {
479
479
  const profileModelId = resolveClaudeProfileNameModelId(model.name);
480
- return requiresClaudeMandatoryAdaptiveThinking(model) || requiresClaudeMandatoryAdaptiveThinking({ id: profileModelId }) || isClaudeMythosPreviewModelId(resolveClaudeModelIdentity(model)) || isClaudeMythosPreviewModelId(profileModelId) || usesClaudeSonnet5BedrockContract(model) || resolveClaudeSonnet5ModelIdentity({ id: profileModelId }) !== void 0;
480
+ return requiresClaudeMandatoryAdaptiveThinking(model) || requiresClaudeMandatoryAdaptiveThinking({ id: profileModelId }) || isClaudeMythosPreviewModelId(resolveClaudeModelIdentity(model)) || usesClaudeSonnet5BedrockContract(model) || resolveClaudeSonnet5ModelIdentity({ id: profileModelId }) !== void 0;
481
+ }
482
+ function resolveMandatoryAdaptiveDefault(model) {
483
+ const defaultLevel = resolveBedrockClaudeThinkingProfile(model.id, model.params).defaultLevel ?? resolveBedrockClaudeThinkingProfile(resolveClaudeProfileNameModelId(model.name) ?? "").defaultLevel;
484
+ switch (defaultLevel) {
485
+ case "minimal":
486
+ case "low":
487
+ case "medium":
488
+ case "high":
489
+ case "xhigh":
490
+ case "max": return defaultLevel;
491
+ default: return "high";
492
+ }
481
493
  }
482
494
  function supportsNativeXhighEffort(model) {
483
495
  const profileModelId = resolveClaudeProfileNameModelId(model.name);
@@ -517,7 +529,6 @@ function resolveCacheRetention(model, cacheRetention) {
517
529
  * whose ARNs don't contain the model name.
518
530
  */
519
531
  function isAnthropicClaudeModel(model) {
520
- if (usesClaudeFable5BedrockContract(model)) return true;
521
532
  if (resolveClaudeModelIdentity(model).startsWith("claude-")) return true;
522
533
  const id = model.id.toLowerCase();
523
534
  const name = model.name?.toLowerCase() ?? "";
@@ -647,9 +658,28 @@ function convertMessages(context, model, cachePoint) {
647
658
  j++;
648
659
  }
649
660
  i = j - 1;
661
+ const attachedImages = [];
662
+ const userContent = model.id.includes("openai.gpt-5.6-sol") ? toolResults.map((block) => {
663
+ const images = [];
664
+ const content = (block.toolResult.content ?? []).filter((part) => {
665
+ if (part.image) {
666
+ images.push({ image: part.image });
667
+ return false;
668
+ }
669
+ return true;
670
+ });
671
+ if (images.length === 0) return block;
672
+ const label = `Images from tool result ${block.toolResult.toolUseId}`;
673
+ attachedImages.push({ text: `${label}:` }, ...images);
674
+ return { toolResult: {
675
+ ...block.toolResult,
676
+ content: [...content, { text: `(see attached images labeled "${label}")` }]
677
+ } };
678
+ }) : toolResults;
679
+ userContent.push(...attachedImages);
650
680
  result.push({
651
681
  role: ConversationRole.USER,
652
- content: toolResults
682
+ content: userContent
653
683
  });
654
684
  break;
655
685
  }
@@ -736,7 +766,7 @@ function isGovCloudBedrockTarget(model, options) {
736
766
  }
737
767
  function buildAdditionalModelRequestFields(model, options) {
738
768
  const mandatoryAdaptiveThinking = requiresMandatoryAdaptiveThinking(model);
739
- const reasoning = options.reasoning === "off" ? mandatoryAdaptiveThinking ? "low" : "off" : options.reasoning ?? (mandatoryAdaptiveThinking ? "high" : void 0);
769
+ const reasoning = options.reasoning === "off" ? mandatoryAdaptiveThinking ? "low" : "off" : options.reasoning ?? (mandatoryAdaptiveThinking ? resolveMandatoryAdaptiveDefault(model) : void 0);
740
770
  if (reasoning === "off") return;
741
771
  if (!reasoning || !model.reasoning && !usesClaudeFable5BedrockContract(model) && !supportsAdaptiveThinking(model)) return;
742
772
  if (isAnthropicClaudeModel(model)) {
@@ -1,4 +1,4 @@
1
- import { resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity } from "openclaw/plugin-sdk/claude-model-runtime";
1
+ import { resolveClaudeFable5ModelIdentity, resolveClaudeModelIdentity, resolveClaudeMythos5ModelIdentity, resolveClaudeOpus5ModelIdentity, resolveClaudeSonnet5ModelIdentity, resolveClaudeThinkingProfile } from "openclaw/plugin-sdk/claude-model-runtime";
2
2
  //#region extensions/amazon-bedrock/thinking-policy.ts
3
3
  const BASE_CLAUDE_THINKING_LEVELS = [
4
4
  { id: "off" },
@@ -87,10 +87,11 @@ function resolveBedrockClaudeThinkingProfile(modelId, params) {
87
87
  id: trimmed,
88
88
  params
89
89
  })];
90
- if (resolveClaudeFable5ModelIdentity({
90
+ const fableModelId = resolveClaudeFable5ModelIdentity({
91
91
  id: trimmed,
92
92
  params
93
- }) || resolveClaudeMythos5ModelIdentity({
93
+ });
94
+ if (fableModelId || resolveClaudeMythos5ModelIdentity({
94
95
  id: trimmed,
95
96
  params
96
97
  }) || resolveClaudeSonnet5ModelIdentity({
@@ -103,7 +104,7 @@ function resolveBedrockClaudeThinkingProfile(modelId, params) {
103
104
  { id: "adaptive" },
104
105
  { id: "max" }
105
106
  ],
106
- defaultLevel: "high",
107
+ defaultLevel: fableModelId ? resolveClaudeThinkingProfile(fableModelId).defaultLevel : "high",
107
108
  preserveWhenCatalogReasoningFalse: true
108
109
  };
109
110
  if (resolveClaudeOpus5ModelIdentity({
@@ -86,7 +86,7 @@ const commonParams = {
86
86
  UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
87
87
  };
88
88
 
89
- var version = "3.1120.0";
89
+ var version = "3.1127.0";
90
90
  var packageInfo = {
91
91
  version: version};
92
92
 
@@ -5614,6 +5614,7 @@ const ModelStatus = {
5614
5614
  FAILED: "Failed",
5615
5615
  };
5616
5616
  const DataRetentionMode = {
5617
+ AWS_REVIEW: "aws_review",
5617
5618
  DEFAULT: "default",
5618
5619
  INHERIT: "inherit",
5619
5620
  NONE: "none",
@@ -132,6 +132,7 @@ export const ModelStatus = {
132
132
  FAILED: "Failed",
133
133
  };
134
134
  export const DataRetentionMode = {
135
+ AWS_REVIEW: "aws_review",
135
136
  DEFAULT: "default",
136
137
  INHERIT: "inherit",
137
138
  NONE: "none",
@@ -37,7 +37,7 @@ declare const GetAccountDataRetentionCommand_base: {
37
37
  * const command = new GetAccountDataRetentionCommand(input);
38
38
  * const response = await client.send(command);
39
39
  * // { // GetAccountDataRetentionResponse
40
- * // mode: "default" || "none" || "provider_data_share" || "inherit", // required
40
+ * // mode: "default" || "none" || "aws_review" || "provider_data_share" || "inherit", // required
41
41
  * // updatedAt: new Date("TIMESTAMP"),
42
42
  * // };
43
43
  *
@@ -34,12 +34,12 @@ declare const PutAccountDataRetentionCommand_base: {
34
34
  * const config = {}; // type is BedrockClientConfig
35
35
  * const client = new BedrockClient(config);
36
36
  * const input = { // PutAccountDataRetentionRequest
37
- * mode: "default" || "none" || "provider_data_share" || "inherit", // required
37
+ * mode: "default" || "none" || "aws_review" || "provider_data_share" || "inherit", // required
38
38
  * };
39
39
  * const command = new PutAccountDataRetentionCommand(input);
40
40
  * const response = await client.send(command);
41
41
  * // { // PutAccountDataRetentionResponse
42
- * // mode: "default" || "none" || "provider_data_share" || "inherit", // required
42
+ * // mode: "default" || "none" || "aws_review" || "provider_data_share" || "inherit", // required
43
43
  * // updatedAt: new Date("TIMESTAMP"),
44
44
  * // };
45
45
  *
@@ -331,6 +331,7 @@ export type ModelStatus = (typeof ModelStatus)[keyof typeof ModelStatus];
331
331
  * @enum
332
332
  */
333
333
  export declare const DataRetentionMode: {
334
+ readonly AWS_REVIEW: "aws_review";
334
335
  readonly DEFAULT: "default";
335
336
  readonly INHERIT: "inherit";
336
337
  readonly NONE: "none";
@@ -170,6 +170,7 @@ export declare const ModelStatus: {
170
170
  };
171
171
  export type ModelStatus = (typeof ModelStatus)[keyof typeof ModelStatus];
172
172
  export declare const DataRetentionMode: {
173
+ readonly AWS_REVIEW: "aws_review";
173
174
  readonly DEFAULT: "default";
174
175
  readonly INHERIT: "inherit";
175
176
  readonly NONE: "none";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-sdk/token-providers",
3
- "version": "3.1121.0",
3
+ "version": "3.1128.0",
4
4
  "description": "A collection of token providers",
5
5
  "keywords": [
6
6
  "aws",
@@ -1,5 +1,16 @@
1
1
  # Change Log
2
2
 
3
+ ## 5.8.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 016389b: Allow passing custom fetch function to fetch-http-handler
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [016389b]
12
+ - @smithy/types@4.18.0
13
+
3
14
  ## 5.7.2
4
15
 
5
16
  ### Patch Changes
@@ -51,6 +51,7 @@ class FetchHttpHandler {
51
51
  const requestTimeoutInMs = requestTimeout$1 ?? this.config.requestTimeout;
52
52
  const keepAlive = this.config.keepAlive === true;
53
53
  const credentials = this.config.credentials;
54
+ const fetchFn = this.config.customFetch ?? fetch;
54
55
  if (abortSignal?.aborted) {
55
56
  const abortError = buildAbortError(abortSignal);
56
57
  return Promise.reject(abortError);
@@ -96,7 +97,7 @@ class FetchHttpHandler {
96
97
  let removeSignalEventListener = () => { };
97
98
  const fetchRequest = createRequest(url, requestOptions);
98
99
  const raceOfPromises = [
99
- fetch(fetchRequest).then((response) => {
100
+ fetchFn(fetchRequest).then((response) => {
100
101
  const fetchHeaders = response.headers;
101
102
  const transformedHeaders = {};
102
103
  for (const pair of fetchHeaders.entries()) {
@@ -34,6 +34,7 @@ export class FetchHttpHandler {
34
34
  const requestTimeoutInMs = requestTimeout ?? this.config.requestTimeout;
35
35
  const keepAlive = this.config.keepAlive === true;
36
36
  const credentials = this.config.credentials;
37
+ const fetchFn = this.config.customFetch ?? fetch;
37
38
  if (abortSignal?.aborted) {
38
39
  const abortError = buildAbortError(abortSignal);
39
40
  return Promise.reject(abortError);
@@ -79,7 +80,7 @@ export class FetchHttpHandler {
79
80
  let removeSignalEventListener = () => { };
80
81
  const fetchRequest = createRequest(url, requestOptions);
81
82
  const raceOfPromises = [
82
- fetch(fetchRequest).then((response) => {
83
+ fetchFn(fetchRequest).then((response) => {
83
84
  const fetchHeaders = response.headers;
84
85
  const transformedHeaders = {};
85
86
  for (const pair of fetchHeaders.entries()) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smithy/fetch-http-handler",
3
- "version": "5.7.2",
3
+ "version": "5.8.0",
4
4
  "description": "Provides a way to make requests",
5
5
  "homepage": "https://github.com/smithy-lang/smithy-typescript/tree/main/packages/fetch-http-handler",
6
6
  "license": "Apache-2.0",
@@ -40,8 +40,8 @@
40
40
  "test:browser:watch": "yarn g:vitest watch -c vitest.config.browser.mts"
41
41
  },
42
42
  "dependencies": {
43
- "@smithy/core": "^3.33.2",
44
- "@smithy/types": "^4.17.2",
43
+ "@smithy/core": "^3.33.3",
44
+ "@smithy/types": "^4.18.0",
45
45
  "tslib": "^2.6.2"
46
46
  },
47
47
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-sdk/client-bedrock",
3
- "version": "3.1121.0",
3
+ "version": "3.1128.0",
4
4
  "description": "AWS SDK for JavaScript Bedrock Client for Node.js, Browser and React Native",
5
5
  "homepage": "https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-bedrock",
6
6
  "license": "Apache-2.0",
@@ -47,8 +47,8 @@
47
47
  },
48
48
  "dependencies": {
49
49
  "@aws-sdk/core": "^3.977.9",
50
- "@aws-sdk/credential-provider-node": "^3.972.81",
51
- "@aws-sdk/token-providers": "3.1121.0",
50
+ "@aws-sdk/credential-provider-node": "^3.972.82",
51
+ "@aws-sdk/token-providers": "3.1128.0",
52
52
  "@aws-sdk/types": "^3.974.5",
53
53
  "@smithy/core": "^3.33.3",
54
54
  "@smithy/fetch-http-handler": "^5.7.2",
@@ -90,7 +90,7 @@ const commonParams = {
90
90
  UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" },
91
91
  };
92
92
 
93
- var version = "3.1120.0";
93
+ var version = "3.1127.0";
94
94
  var packageInfo = {
95
95
  version: version};
96
96
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-sdk/token-providers",
3
- "version": "3.1121.0",
3
+ "version": "3.1128.0",
4
4
  "description": "A collection of token providers",
5
5
  "keywords": [
6
6
  "aws",
@@ -1,5 +1,16 @@
1
1
  # Change Log
2
2
 
3
+ ## 5.8.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 016389b: Allow passing custom fetch function to fetch-http-handler
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [016389b]
12
+ - @smithy/types@4.18.0
13
+
3
14
  ## 5.7.2
4
15
 
5
16
  ### Patch Changes
@@ -51,6 +51,7 @@ class FetchHttpHandler {
51
51
  const requestTimeoutInMs = requestTimeout$1 ?? this.config.requestTimeout;
52
52
  const keepAlive = this.config.keepAlive === true;
53
53
  const credentials = this.config.credentials;
54
+ const fetchFn = this.config.customFetch ?? fetch;
54
55
  if (abortSignal?.aborted) {
55
56
  const abortError = buildAbortError(abortSignal);
56
57
  return Promise.reject(abortError);
@@ -96,7 +97,7 @@ class FetchHttpHandler {
96
97
  let removeSignalEventListener = () => { };
97
98
  const fetchRequest = createRequest(url, requestOptions);
98
99
  const raceOfPromises = [
99
- fetch(fetchRequest).then((response) => {
100
+ fetchFn(fetchRequest).then((response) => {
100
101
  const fetchHeaders = response.headers;
101
102
  const transformedHeaders = {};
102
103
  for (const pair of fetchHeaders.entries()) {
@@ -34,6 +34,7 @@ export class FetchHttpHandler {
34
34
  const requestTimeoutInMs = requestTimeout ?? this.config.requestTimeout;
35
35
  const keepAlive = this.config.keepAlive === true;
36
36
  const credentials = this.config.credentials;
37
+ const fetchFn = this.config.customFetch ?? fetch;
37
38
  if (abortSignal?.aborted) {
38
39
  const abortError = buildAbortError(abortSignal);
39
40
  return Promise.reject(abortError);
@@ -79,7 +80,7 @@ export class FetchHttpHandler {
79
80
  let removeSignalEventListener = () => { };
80
81
  const fetchRequest = createRequest(url, requestOptions);
81
82
  const raceOfPromises = [
82
- fetch(fetchRequest).then((response) => {
83
+ fetchFn(fetchRequest).then((response) => {
83
84
  const fetchHeaders = response.headers;
84
85
  const transformedHeaders = {};
85
86
  for (const pair of fetchHeaders.entries()) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smithy/fetch-http-handler",
3
- "version": "5.7.2",
3
+ "version": "5.8.0",
4
4
  "description": "Provides a way to make requests",
5
5
  "homepage": "https://github.com/smithy-lang/smithy-typescript/tree/main/packages/fetch-http-handler",
6
6
  "license": "Apache-2.0",
@@ -40,8 +40,8 @@
40
40
  "test:browser:watch": "yarn g:vitest watch -c vitest.config.browser.mts"
41
41
  },
42
42
  "dependencies": {
43
- "@smithy/core": "^3.33.2",
44
- "@smithy/types": "^4.17.2",
43
+ "@smithy/core": "^3.33.3",
44
+ "@smithy/types": "^4.18.0",
45
45
  "tslib": "^2.6.2"
46
46
  },
47
47
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-sdk/client-bedrock-runtime",
3
- "version": "3.1121.0",
3
+ "version": "3.1128.0",
4
4
  "description": "AWS SDK for JavaScript Bedrock Runtime Client for Node.js, Browser and React Native",
5
5
  "homepage": "https://github.com/aws/aws-sdk-js-v3/tree/main/clients/client-bedrock-runtime",
6
6
  "license": "Apache-2.0",
@@ -55,11 +55,11 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "@aws-sdk/core": "^3.977.9",
58
- "@aws-sdk/credential-provider-node": "^3.972.81",
58
+ "@aws-sdk/credential-provider-node": "^3.972.82",
59
59
  "@aws-sdk/eventstream-handler-node": "^3.972.34",
60
60
  "@aws-sdk/middleware-eventstream": "^3.972.29",
61
61
  "@aws-sdk/middleware-websocket": "^3.972.52",
62
- "@aws-sdk/token-providers": "3.1121.0",
62
+ "@aws-sdk/token-providers": "3.1128.0",
63
63
  "@aws-sdk/types": "^3.974.5",
64
64
  "@smithy/core": "^3.33.3",
65
65
  "@smithy/fetch-http-handler": "^5.7.2",
@@ -52,6 +52,8 @@ function memoizeChain(providers, treatAsExpired) {
52
52
  passiveLock = chain(options)
53
53
  .then((c) => {
54
54
  credentials = c;
55
+ })
56
+ .catch(() => {
55
57
  })
56
58
  .finally(() => {
57
59
  passiveLock = undefined;
@@ -32,6 +32,8 @@ export function memoizeChain(providers, treatAsExpired) {
32
32
  passiveLock = chain(options)
33
33
  .then((c) => {
34
34
  credentials = c;
35
+ })
36
+ .catch(() => {
35
37
  })
36
38
  .finally(() => {
37
39
  passiveLock = undefined;
@@ -1,5 +1,16 @@
1
1
  # Change Log
2
2
 
3
+ ## 5.8.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 016389b: Allow passing custom fetch function to fetch-http-handler
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [016389b]
12
+ - @smithy/types@4.18.0
13
+
3
14
  ## 5.7.2
4
15
 
5
16
  ### Patch Changes
@@ -51,6 +51,7 @@ class FetchHttpHandler {
51
51
  const requestTimeoutInMs = requestTimeout$1 ?? this.config.requestTimeout;
52
52
  const keepAlive = this.config.keepAlive === true;
53
53
  const credentials = this.config.credentials;
54
+ const fetchFn = this.config.customFetch ?? fetch;
54
55
  if (abortSignal?.aborted) {
55
56
  const abortError = buildAbortError(abortSignal);
56
57
  return Promise.reject(abortError);
@@ -96,7 +97,7 @@ class FetchHttpHandler {
96
97
  let removeSignalEventListener = () => { };
97
98
  const fetchRequest = createRequest(url, requestOptions);
98
99
  const raceOfPromises = [
99
- fetch(fetchRequest).then((response) => {
100
+ fetchFn(fetchRequest).then((response) => {
100
101
  const fetchHeaders = response.headers;
101
102
  const transformedHeaders = {};
102
103
  for (const pair of fetchHeaders.entries()) {
@@ -34,6 +34,7 @@ export class FetchHttpHandler {
34
34
  const requestTimeoutInMs = requestTimeout ?? this.config.requestTimeout;
35
35
  const keepAlive = this.config.keepAlive === true;
36
36
  const credentials = this.config.credentials;
37
+ const fetchFn = this.config.customFetch ?? fetch;
37
38
  if (abortSignal?.aborted) {
38
39
  const abortError = buildAbortError(abortSignal);
39
40
  return Promise.reject(abortError);
@@ -79,7 +80,7 @@ export class FetchHttpHandler {
79
80
  let removeSignalEventListener = () => { };
80
81
  const fetchRequest = createRequest(url, requestOptions);
81
82
  const raceOfPromises = [
82
- fetch(fetchRequest).then((response) => {
83
+ fetchFn(fetchRequest).then((response) => {
83
84
  const fetchHeaders = response.headers;
84
85
  const transformedHeaders = {};
85
86
  for (const pair of fetchHeaders.entries()) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smithy/fetch-http-handler",
3
- "version": "5.7.2",
3
+ "version": "5.8.0",
4
4
  "description": "Provides a way to make requests",
5
5
  "homepage": "https://github.com/smithy-lang/smithy-typescript/tree/main/packages/fetch-http-handler",
6
6
  "license": "Apache-2.0",
@@ -40,8 +40,8 @@
40
40
  "test:browser:watch": "yarn g:vitest watch -c vitest.config.browser.mts"
41
41
  },
42
42
  "dependencies": {
43
- "@smithy/core": "^3.33.2",
44
- "@smithy/types": "^4.17.2",
43
+ "@smithy/core": "^3.33.3",
44
+ "@smithy/types": "^4.18.0",
45
45
  "tslib": "^2.6.2"
46
46
  },
47
47
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-sdk/credential-provider-node",
3
- "version": "3.972.81",
3
+ "version": "3.972.82",
4
4
  "description": "AWS credential provider that sources credentials from a Node.JS environment. ",
5
5
  "keywords": [
6
6
  "aws",
@@ -1,5 +1,19 @@
1
1
  # Change Log
2
2
 
3
+ ## 4.12.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 1d85108: Clear the HTTP/2 session timeout before destroying a session. Node keeps a destroyed `Http2Session` reachable until its pending `setTimeout` fires, so with the default 300 s timer on isolated sessions every completed request was retained for 5 minutes.
8
+ - Updated dependencies [016389b]
9
+ - @smithy/types@4.18.0
10
+
11
+ ## 4.12.0
12
+
13
+ ### Minor Changes
14
+
15
+ - bb68484: destroy isolated http2 session and manage timeout
16
+
3
17
  ## 4.11.3
4
18
 
5
19
  ### Patch Changes
@@ -491,6 +491,7 @@ class ClientHttp2SessionRef {
491
491
  destroy() {
492
492
  this.refs = 0;
493
493
  if (!this.session.destroyed) {
494
+ this.session.setTimeout(0);
494
495
  this.session.destroy();
495
496
  }
496
497
  }
@@ -608,9 +609,8 @@ class NodeHttp2ConnectionManager {
608
609
  session.on("error", ensureDestroyed);
609
610
  session.on("frameError", ensureDestroyed);
610
611
  session.on("close", ensureDestroyed);
611
- if (connectionConfiguration.requestTimeout) {
612
- session.setTimeout(connectionConfiguration.requestTimeout, ensureDestroyed);
613
- }
612
+ const timeout = connectionConfiguration.requestTimeout ?? 300_000;
613
+ session.setTimeout(timeout, ensureDestroyed);
614
614
  ref.retain();
615
615
  return ref;
616
616
  }
@@ -817,6 +817,9 @@ class NodeHttp2Handler {
817
817
  resolve({ response: httpResponse });
818
818
  if (useIsolatedSession) {
819
819
  session.close();
820
+ clientHttp2Stream.on("end", () => {
821
+ ref.destroy();
822
+ });
820
823
  }
821
824
  });
822
825
  clientHttp2Stream.on("close", () => {
@@ -827,7 +830,11 @@ class NodeHttp2Handler {
827
830
  this.connectionManager.release(requestContext, ref);
828
831
  }
829
832
  if (!fulfilled) {
830
- rejectWithDestroy(new Error("Unexpected error: http2 request did not get a response"));
833
+ const error = new Error("Unexpected error: http2 request did not get a response");
834
+ if (session.destroyed) {
835
+ error.name = "TimeoutError";
836
+ }
837
+ rejectWithDestroy(error);
831
838
  }
832
839
  });
833
840
  writeRequestBodyPromise = writeRequestBody(clientHttp2Stream, request, effectiveRequestTimeout);
@@ -41,6 +41,7 @@ export class ClientHttp2SessionRef {
41
41
  destroy() {
42
42
  this.refs = 0;
43
43
  if (!this.session.destroyed) {
44
+ this.session.setTimeout(0);
44
45
  this.session.destroy();
45
46
  }
46
47
  }
@@ -64,9 +64,8 @@ export class NodeHttp2ConnectionManager {
64
64
  session.on("error", ensureDestroyed);
65
65
  session.on("frameError", ensureDestroyed);
66
66
  session.on("close", ensureDestroyed);
67
- if (connectionConfiguration.requestTimeout) {
68
- session.setTimeout(connectionConfiguration.requestTimeout, ensureDestroyed);
69
- }
67
+ const timeout = connectionConfiguration.requestTimeout ?? 300_000;
68
+ session.setTimeout(timeout, ensureDestroyed);
70
69
  ref.retain();
71
70
  return ref;
72
71
  }
@@ -142,6 +142,9 @@ export class NodeHttp2Handler {
142
142
  resolve({ response: httpResponse });
143
143
  if (useIsolatedSession) {
144
144
  session.close();
145
+ clientHttp2Stream.on("end", () => {
146
+ ref.destroy();
147
+ });
145
148
  }
146
149
  });
147
150
  clientHttp2Stream.on("close", () => {
@@ -152,7 +155,11 @@ export class NodeHttp2Handler {
152
155
  this.connectionManager.release(requestContext, ref);
153
156
  }
154
157
  if (!fulfilled) {
155
- rejectWithDestroy(new Error("Unexpected error: http2 request did not get a response"));
158
+ const error = new Error("Unexpected error: http2 request did not get a response");
159
+ if (session.destroyed) {
160
+ error.name = "TimeoutError";
161
+ }
162
+ rejectWithDestroy(error);
156
163
  }
157
164
  });
158
165
  writeRequestBodyPromise = writeRequestBody(clientHttp2Stream, request, effectiveRequestTimeout);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smithy/node-http-handler",
3
- "version": "4.11.3",
3
+ "version": "4.12.1",
4
4
  "description": "Provides a way to make requests",
5
5
  "homepage": "https://github.com/smithy-lang/smithy-typescript/tree/main/packages/node-http-handler",
6
6
  "license": "Apache-2.0",
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@smithy/core": "^3.33.3",
43
- "@smithy/types": "^4.17.2",
43
+ "@smithy/types": "^4.18.0",
44
44
  "tslib": "^2.6.2"
45
45
  },
46
46
  "devDependencies": {
@@ -1,5 +1,11 @@
1
1
  # Change Log
2
2
 
3
+ ## 4.18.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 016389b: Allow passing custom fetch function to fetch-http-handler
8
+
3
9
  ## 4.17.2
4
10
 
5
11
  ### Patch Changes
@@ -118,6 +118,20 @@ export interface FetchHttpHandlerOptions {
118
118
  * ```
119
119
  */
120
120
  requestInit?: (httpRequest: IHttpRequest) => RequestInit;
121
+ /**
122
+ * An optional custom fetch implementation to use in place of the
123
+ * global fetch function.
124
+ *
125
+ * @example
126
+ * ```js
127
+ * new Client({
128
+ * requestHandler: {
129
+ * customFetch: (request) => myFetchImplementation(request)
130
+ * }
131
+ * });
132
+ * ```
133
+ */
134
+ customFetch?: typeof fetch;
121
135
  }
122
136
  declare global {
123
137
  /**
@@ -118,6 +118,20 @@ export interface FetchHttpHandlerOptions {
118
118
  * ```
119
119
  */
120
120
  requestInit?: (httpRequest: IHttpRequest) => RequestInit;
121
+ /**
122
+ * An optional custom fetch implementation to use in place of the
123
+ * global fetch function.
124
+ *
125
+ * @example
126
+ * ```js
127
+ * new Client({
128
+ * requestHandler: {
129
+ * customFetch: (request) => myFetchImplementation(request)
130
+ * }
131
+ * });
132
+ * ```
133
+ */
134
+ customFetch?: typeof fetch;
121
135
  }
122
136
  declare global {
123
137
  /**
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smithy/types",
3
- "version": "4.17.2",
3
+ "version": "4.18.0",
4
4
  "homepage": "https://github.com/smithy-lang/smithy-typescript/tree/main/packages/types",
5
5
  "license": "Apache-2.0",
6
6
  "author": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "amazon-bedrock",
3
- "categories": ["models", "memory"],
3
+ "categories": ["models"],
4
4
  "name": "Amazon Bedrock",
5
5
  "description": "OpenClaw Amazon Bedrock provider plugin with model discovery, embeddings, and guardrail support.",
6
6
  "activation": {
@@ -16,6 +16,20 @@
16
16
  "contracts": {
17
17
  "embeddingProviders": ["bedrock"]
18
18
  },
19
+ "configGroups": [
20
+ {
21
+ "id": "model-discovery",
22
+ "title": "Model discovery",
23
+ "order": 10,
24
+ "properties": ["discovery"]
25
+ },
26
+ {
27
+ "id": "guardrails",
28
+ "title": "Guardrails",
29
+ "order": 20,
30
+ "properties": ["guardrail"]
31
+ }
32
+ ],
19
33
  "configSchema": {
20
34
  "type": "object",
21
35
  "additionalProperties": false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/amazon-bedrock-provider",
3
- "version": "2026.9.4",
3
+ "version": "2026.9.5",
4
4
  "description": "OpenClaw Amazon Bedrock provider plugin with model discovery, embeddings, and guardrail support.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -8,27 +8,28 @@
8
8
  },
9
9
  "type": "module",
10
10
  "dependencies": {
11
- "@aws-sdk/client-bedrock": "3.1121.0",
12
- "@aws-sdk/client-bedrock-runtime": "3.1121.0",
13
- "@aws-sdk/credential-provider-node": "3.972.81",
14
- "@smithy/node-http-handler": "4.11.3",
11
+ "@aws-sdk/client-bedrock": "3.1128.0",
12
+ "@aws-sdk/client-bedrock-runtime": "3.1128.0",
13
+ "@aws-sdk/credential-provider-node": "3.972.82",
14
+ "@smithy/node-http-handler": "4.12.1",
15
15
  "@smithy/shared-ini-file-loader": "4.7.2",
16
- "@smithy/types": "4.17.2"
16
+ "@smithy/types": "4.18.0"
17
17
  },
18
18
  "openclaw": {
19
19
  "extensions": [
20
20
  "./index.ts"
21
21
  ],
22
22
  "install": {
23
+ "clawhubSpec": "clawhub:@openclaw/amazon-bedrock-provider",
23
24
  "npmSpec": "@openclaw/amazon-bedrock-provider",
24
25
  "defaultChoice": "npm",
25
26
  "minHostVersion": ">=2026.5.12-beta.1"
26
27
  },
27
28
  "compat": {
28
- "pluginApi": ">=2026.9.4"
29
+ "pluginApi": ">=2026.9.5"
29
30
  },
30
31
  "build": {
31
- "openclawVersion": "2026.9.4",
32
+ "openclawVersion": "2026.9.5",
32
33
  "bundledDist": false
33
34
  },
34
35
  "release": {
@@ -42,10 +43,12 @@
42
43
  "files": [
43
44
  "dist/**",
44
45
  "openclaw.plugin.json",
45
- "README.md"
46
+ "README.md",
47
+ "assets/icon.png",
48
+ "assets/activity.svg"
46
49
  ],
47
50
  "peerDependencies": {
48
- "openclaw": ">=2026.9.4"
51
+ "openclaw": ">=2026.9.5"
49
52
  },
50
53
  "peerDependenciesMeta": {
51
54
  "openclaw": {