@nhtio/adk 0.1.0-master-e04b0eba → 0.1.0-master-d3e80e7a

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 (184) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/batteries/embeddings/index.d.ts +25 -0
  3. package/batteries/embeddings/openai/adapter.cjs +185 -0
  4. package/batteries/embeddings/openai/adapter.cjs.map +1 -0
  5. package/batteries/embeddings/openai/adapter.d.ts +74 -0
  6. package/batteries/embeddings/openai/adapter.mjs +183 -0
  7. package/batteries/embeddings/openai/adapter.mjs.map +1 -0
  8. package/batteries/embeddings/openai/exceptions.cjs +48 -0
  9. package/batteries/embeddings/openai/exceptions.cjs.map +1 -0
  10. package/batteries/embeddings/openai/exceptions.d.ts +45 -0
  11. package/batteries/embeddings/openai/exceptions.mjs +43 -0
  12. package/batteries/embeddings/openai/exceptions.mjs.map +1 -0
  13. package/batteries/embeddings/openai/helpers.cjs +25 -0
  14. package/batteries/embeddings/openai/helpers.cjs.map +1 -0
  15. package/batteries/embeddings/openai/helpers.d.ts +25 -0
  16. package/batteries/embeddings/openai/helpers.mjs +23 -0
  17. package/batteries/embeddings/openai/helpers.mjs.map +1 -0
  18. package/batteries/embeddings/openai/index.d.ts +17 -0
  19. package/batteries/embeddings/openai/types.cjs +2 -0
  20. package/batteries/embeddings/openai/types.d.ts +123 -0
  21. package/batteries/embeddings/openai/types.mjs +0 -0
  22. package/batteries/embeddings/openai/validation.cjs +56 -0
  23. package/batteries/embeddings/openai/validation.cjs.map +1 -0
  24. package/batteries/embeddings/openai/validation.d.ts +24 -0
  25. package/batteries/embeddings/openai/validation.mjs +53 -0
  26. package/batteries/embeddings/openai/validation.mjs.map +1 -0
  27. package/batteries/embeddings/openai.cjs +14 -0
  28. package/batteries/embeddings/openai.mjs +5 -0
  29. package/batteries/embeddings/webllm/adapter.cjs +147 -0
  30. package/batteries/embeddings/webllm/adapter.cjs.map +1 -0
  31. package/batteries/embeddings/webllm/adapter.d.ts +74 -0
  32. package/batteries/embeddings/webllm/adapter.mjs +145 -0
  33. package/batteries/embeddings/webllm/adapter.mjs.map +1 -0
  34. package/batteries/embeddings/webllm/exceptions.cjs +31 -0
  35. package/batteries/embeddings/webllm/exceptions.cjs.map +1 -0
  36. package/batteries/embeddings/webllm/exceptions.d.ts +25 -0
  37. package/batteries/embeddings/webllm/exceptions.mjs +28 -0
  38. package/batteries/embeddings/webllm/exceptions.mjs.map +1 -0
  39. package/batteries/embeddings/webllm/index.d.ts +15 -0
  40. package/batteries/embeddings/webllm/types.cjs +2 -0
  41. package/batteries/embeddings/webllm/types.d.ts +52 -0
  42. package/batteries/embeddings/webllm/types.mjs +0 -0
  43. package/batteries/embeddings/webllm/validation.cjs +43 -0
  44. package/batteries/embeddings/webllm/validation.cjs.map +1 -0
  45. package/batteries/embeddings/webllm/validation.d.ts +25 -0
  46. package/batteries/embeddings/webllm/validation.mjs +40 -0
  47. package/batteries/embeddings/webllm/validation.mjs.map +1 -0
  48. package/batteries/embeddings/webllm.cjs +10 -0
  49. package/batteries/embeddings/webllm.mjs +4 -0
  50. package/batteries/embeddings.cjs +15 -0
  51. package/batteries/embeddings.mjs +6 -0
  52. package/batteries/index.d.ts +1 -0
  53. package/batteries/llm/openai_chat_completions/adapter.cjs +14 -73
  54. package/batteries/llm/openai_chat_completions/adapter.cjs.map +1 -1
  55. package/batteries/llm/openai_chat_completions/adapter.mjs +8 -67
  56. package/batteries/llm/openai_chat_completions/adapter.mjs.map +1 -1
  57. package/batteries/llm/openai_chat_completions/helpers.cjs +2 -2
  58. package/batteries/llm/openai_chat_completions/helpers.mjs +2 -2
  59. package/batteries/llm/openai_chat_completions/validation.cjs +1 -1
  60. package/batteries/llm/openai_chat_completions/validation.mjs +1 -1
  61. package/batteries/llm/webllm_chat_completions/adapter.cjs +7 -6
  62. package/batteries/llm/webllm_chat_completions/adapter.cjs.map +1 -1
  63. package/batteries/llm/webllm_chat_completions/adapter.mjs +7 -6
  64. package/batteries/llm/webllm_chat_completions/adapter.mjs.map +1 -1
  65. package/batteries/llm/webllm_chat_completions/validation.cjs +1 -1
  66. package/batteries/llm/webllm_chat_completions/validation.mjs +1 -1
  67. package/batteries/storage/flydrive.cjs +1 -1
  68. package/batteries/storage/flydrive.mjs +1 -1
  69. package/batteries/storage/in_memory.cjs +1 -1
  70. package/batteries/storage/in_memory.mjs +1 -1
  71. package/batteries/storage/opfs.cjs +1 -1
  72. package/batteries/storage/opfs.mjs +1 -1
  73. package/batteries/tools/color.cjs +2 -2
  74. package/batteries/tools/color.mjs +2 -2
  75. package/batteries/tools/comparison.cjs +3 -3
  76. package/batteries/tools/comparison.mjs +3 -3
  77. package/batteries/tools/data_structure.cjs +3 -3
  78. package/batteries/tools/data_structure.mjs +3 -3
  79. package/batteries/tools/datetime_extended.cjs +2 -2
  80. package/batteries/tools/datetime_extended.mjs +2 -2
  81. package/batteries/tools/datetime_math.cjs +2 -2
  82. package/batteries/tools/datetime_math.mjs +2 -2
  83. package/batteries/tools/encoding.cjs +3 -3
  84. package/batteries/tools/encoding.mjs +3 -3
  85. package/batteries/tools/formatting.cjs +3 -3
  86. package/batteries/tools/formatting.mjs +3 -3
  87. package/batteries/tools/geo_basics.cjs +2 -2
  88. package/batteries/tools/geo_basics.mjs +2 -2
  89. package/batteries/tools/math.cjs +3 -3
  90. package/batteries/tools/math.mjs +3 -3
  91. package/batteries/tools/memory.cjs +5 -5
  92. package/batteries/tools/memory.mjs +5 -5
  93. package/batteries/tools/parsing.cjs +4 -4
  94. package/batteries/tools/parsing.mjs +4 -4
  95. package/batteries/tools/retrievables.cjs +4 -4
  96. package/batteries/tools/retrievables.mjs +4 -4
  97. package/batteries/tools/standing_instructions.cjs +4 -4
  98. package/batteries/tools/standing_instructions.mjs +4 -4
  99. package/batteries/tools/statistics.cjs +4 -4
  100. package/batteries/tools/statistics.mjs +4 -4
  101. package/batteries/tools/string_processing.cjs +3 -3
  102. package/batteries/tools/string_processing.mjs +3 -3
  103. package/batteries/tools/structured_data.cjs +3 -3
  104. package/batteries/tools/structured_data.mjs +3 -3
  105. package/batteries/tools/text_analysis.cjs +3 -3
  106. package/batteries/tools/text_analysis.mjs +3 -3
  107. package/batteries/tools/text_comparison.cjs +2 -2
  108. package/batteries/tools/text_comparison.mjs +2 -2
  109. package/batteries/tools/time.cjs +2 -2
  110. package/batteries/tools/time.mjs +2 -2
  111. package/batteries/tools/unit_conversion.cjs +2 -2
  112. package/batteries/tools/unit_conversion.mjs +2 -2
  113. package/batteries.cjs +13 -0
  114. package/batteries.mjs +8 -3
  115. package/{common-DuKWGTVd.js → common-D_e5zYsG.js} +8 -8
  116. package/{common-DuKWGTVd.js.map → common-D_e5zYsG.js.map} +1 -1
  117. package/{common-ClCHam5-.mjs → common-lMrnzoyn.mjs} +8 -8
  118. package/{common-ClCHam5-.mjs.map → common-lMrnzoyn.mjs.map} +1 -1
  119. package/common.cjs +7 -7
  120. package/common.mjs +7 -7
  121. package/{dispatch_runner-uNtS-XSP.mjs → dispatch_runner-CDF3X0nv.mjs} +3 -3
  122. package/{dispatch_runner-uNtS-XSP.mjs.map → dispatch_runner-CDF3X0nv.mjs.map} +1 -1
  123. package/{dispatch_runner-CEFHXRJZ.js → dispatch_runner-CpuyATj1.js} +3 -3
  124. package/{dispatch_runner-CEFHXRJZ.js.map → dispatch_runner-CpuyATj1.js.map} +1 -1
  125. package/dispatch_runner.cjs +1 -1
  126. package/dispatch_runner.mjs +1 -1
  127. package/exceptions.cjs +1 -1
  128. package/exceptions.mjs +1 -1
  129. package/forge.cjs +4 -4
  130. package/forge.mjs +4 -4
  131. package/guards.cjs +8 -8
  132. package/guards.mjs +8 -8
  133. package/index.cjs +12 -12
  134. package/index.mjs +12 -12
  135. package/lib/exceptions/runtime.d.ts +5 -0
  136. package/lib/types/turn_runner.d.ts +32 -10
  137. package/lib/utils/retry.cjs +107 -0
  138. package/lib/utils/retry.cjs.map +1 -0
  139. package/lib/utils/retry.d.ts +63 -0
  140. package/lib/utils/retry.mjs +102 -0
  141. package/lib/utils/retry.mjs.map +1 -0
  142. package/mcp/adk-docs-corpus.json +1 -1
  143. package/package.json +128 -63
  144. package/{runtime-DyD9oQjH.js → runtime-MFFcJrRv.js} +6 -2
  145. package/runtime-MFFcJrRv.js.map +1 -0
  146. package/{runtime-CDIZwCT0.mjs → runtime-j92CNi5z.mjs} +6 -2
  147. package/runtime-j92CNi5z.mjs.map +1 -0
  148. package/skills/adk-assembly/SKILL.md +2 -2
  149. package/{spooled_artifact-CHvDDYGA.js → spooled_artifact-B8gIIn9h.js} +4 -4
  150. package/{spooled_artifact-CHvDDYGA.js.map → spooled_artifact-B8gIIn9h.js.map} +1 -1
  151. package/{spooled_artifact-D-JrpY4W.mjs → spooled_artifact-CWoKUDEm.mjs} +4 -4
  152. package/{spooled_artifact-D-JrpY4W.mjs.map → spooled_artifact-CWoKUDEm.mjs.map} +1 -1
  153. package/spooled_artifact.cjs +2 -2
  154. package/spooled_artifact.mjs +2 -2
  155. package/{spooled_markdown_artifact-B4eWOfCX.mjs → spooled_markdown_artifact-CNle4jXN.mjs} +3 -3
  156. package/{spooled_markdown_artifact-B4eWOfCX.mjs.map → spooled_markdown_artifact-CNle4jXN.mjs.map} +1 -1
  157. package/{spooled_markdown_artifact-BYfPqFvk.js → spooled_markdown_artifact-DQX0RCdI.js} +3 -3
  158. package/{spooled_markdown_artifact-BYfPqFvk.js.map → spooled_markdown_artifact-DQX0RCdI.js.map} +1 -1
  159. package/{thought-DBNsR6l8.js → thought-BD6AkkOr.js} +4 -4
  160. package/{thought-DBNsR6l8.js.map → thought-BD6AkkOr.js.map} +1 -1
  161. package/{thought-D9IS11b5.mjs → thought-B_P8LiB6.mjs} +4 -4
  162. package/{thought-D9IS11b5.mjs.map → thought-B_P8LiB6.mjs.map} +1 -1
  163. package/{tool-CsYuHhiS.mjs → tool-CRZSUcdP.mjs} +3 -3
  164. package/{tool-CsYuHhiS.mjs.map → tool-CRZSUcdP.mjs.map} +1 -1
  165. package/{tool-DIHzOZiV.js → tool-CX9vNHAw.js} +3 -3
  166. package/{tool-DIHzOZiV.js.map → tool-CX9vNHAw.js.map} +1 -1
  167. package/{tool_call-CkOVOhg0.js → tool_call--7ti-frB.js} +4 -4
  168. package/{tool_call-CkOVOhg0.js.map → tool_call--7ti-frB.js.map} +1 -1
  169. package/{tool_call-Bs_Q5LOG.mjs → tool_call-BUeMuCc6.mjs} +4 -4
  170. package/{tool_call-Bs_Q5LOG.mjs.map → tool_call-BUeMuCc6.mjs.map} +1 -1
  171. package/{tool_registry-CX3ofUh9.mjs → tool_registry-BGHg6KTq.mjs} +2 -2
  172. package/{tool_registry-CX3ofUh9.mjs.map → tool_registry-BGHg6KTq.mjs.map} +1 -1
  173. package/{tool_registry-CKk5ooxm.js → tool_registry-CtCQ4Xoz.js} +2 -2
  174. package/{tool_registry-CKk5ooxm.js.map → tool_registry-CtCQ4Xoz.js.map} +1 -1
  175. package/{turn_runner-D0qGIrRI.js → turn_runner-BJTtAORU.js} +7 -6
  176. package/turn_runner-BJTtAORU.js.map +1 -0
  177. package/{turn_runner-C1-mup84.mjs → turn_runner-C02LZHjt.mjs} +8 -7
  178. package/turn_runner-C02LZHjt.mjs.map +1 -0
  179. package/turn_runner.cjs +1 -1
  180. package/turn_runner.mjs +1 -1
  181. package/runtime-CDIZwCT0.mjs.map +0 -1
  182. package/runtime-DyD9oQjH.js.map +0 -1
  183. package/turn_runner-C1-mup84.mjs.map +0 -1
  184. package/turn_runner-D0qGIrRI.js.map +0 -1
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("./chunk-Ble4zEEl.js");
3
- const require_dispatch_runner = require("./dispatch_runner-CEFHXRJZ.js");
3
+ const require_dispatch_runner = require("./dispatch_runner-CpuyATj1.js");
4
4
  exports.DispatchRunner = require_dispatch_runner.DispatchRunner;
@@ -1,2 +1,2 @@
1
- import { t as DispatchRunner } from "./dispatch_runner-uNtS-XSP.mjs";
1
+ import { t as DispatchRunner } from "./dispatch_runner-CDF3X0nv.mjs";
2
2
  export { DispatchRunner };
package/exceptions.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("./chunk-Ble4zEEl.js");
3
3
  const require_exceptions = require("./exceptions-CitH5wZI.js");
4
- const require_runtime = require("./runtime-DyD9oQjH.js");
4
+ const require_runtime = require("./runtime-MFFcJrRv.js");
5
5
  exports.E_DISPATCH_PIPELINE_ERROR = require_runtime.E_DISPATCH_PIPELINE_ERROR;
6
6
  exports.E_INPUT_PIPELINE_ERROR = require_runtime.E_INPUT_PIPELINE_ERROR;
7
7
  exports.E_INVALID_INITIAL_IDENTITY_VALUE = require_runtime.E_INVALID_INITIAL_IDENTITY_VALUE;
package/exceptions.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  import { n as ValidationException } from "./exceptions-BeWH2FwP.mjs";
2
- import { C as E_NOT_A_SPOOL_READER, D as E_TOOL_DOWNSTREAM_ERROR, E as E_TOOL_ALREADY_REGISTERED, O as E_TURN_GATE_ABORTED, S as E_NOT_A_MEDIA_READER, T as E_PIPELINE_SHORT_CIRCUITED, _ as E_INVALID_TURN_GATE_RESOLUTION, a as E_INVALID_INITIAL_MEMORY_VALUE, b as E_LLM_EXECUTION_EXECUTOR_ERROR, c as E_INVALID_INITIAL_RETRIEVABLE_VALUE, d as E_INVALID_INITIAL_TOOL_VALUE, f as E_INVALID_INITIAL_TURN_GATE_VALUE, g as E_INVALID_TURN_CONTEXT, h as E_INVALID_TOOL_ARGS, i as E_INVALID_INITIAL_MEDIA_VALUE, k as E_TURN_GATE_TIMEOUT, l as E_INVALID_INITIAL_THOUGHT_VALUE, m as E_INVALID_LLM_EXECUTION_CONTEXT, n as E_INPUT_PIPELINE_ERROR, o as E_INVALID_INITIAL_MESSAGE_VALUE, p as E_INVALID_LLM_DISPATCH_INPUT, r as E_INVALID_INITIAL_IDENTITY_VALUE, s as E_INVALID_INITIAL_REGISTRY_VALUE, t as E_DISPATCH_PIPELINE_ERROR, u as E_INVALID_INITIAL_TOOL_CALL_VALUE, v as E_INVALID_TURN_RUNNER_CONFIG, w as E_OUTPUT_PIPELINE_ERROR, x as E_LLM_EXECUTION_GATE_NOT_SUPPORTED, y as E_LLM_EXECUTION_ALREADY_SIGNALLED } from "./runtime-CDIZwCT0.mjs";
2
+ import { C as E_NOT_A_SPOOL_READER, D as E_TOOL_DOWNSTREAM_ERROR, E as E_TOOL_ALREADY_REGISTERED, O as E_TURN_GATE_ABORTED, S as E_NOT_A_MEDIA_READER, T as E_PIPELINE_SHORT_CIRCUITED, _ as E_INVALID_TURN_GATE_RESOLUTION, a as E_INVALID_INITIAL_MEMORY_VALUE, b as E_LLM_EXECUTION_EXECUTOR_ERROR, c as E_INVALID_INITIAL_RETRIEVABLE_VALUE, d as E_INVALID_INITIAL_TOOL_VALUE, f as E_INVALID_INITIAL_TURN_GATE_VALUE, g as E_INVALID_TURN_CONTEXT, h as E_INVALID_TOOL_ARGS, i as E_INVALID_INITIAL_MEDIA_VALUE, k as E_TURN_GATE_TIMEOUT, l as E_INVALID_INITIAL_THOUGHT_VALUE, m as E_INVALID_LLM_EXECUTION_CONTEXT, n as E_INPUT_PIPELINE_ERROR, o as E_INVALID_INITIAL_MESSAGE_VALUE, p as E_INVALID_LLM_DISPATCH_INPUT, r as E_INVALID_INITIAL_IDENTITY_VALUE, s as E_INVALID_INITIAL_REGISTRY_VALUE, t as E_DISPATCH_PIPELINE_ERROR, u as E_INVALID_INITIAL_TOOL_CALL_VALUE, v as E_INVALID_TURN_RUNNER_CONFIG, w as E_OUTPUT_PIPELINE_ERROR, x as E_LLM_EXECUTION_GATE_NOT_SUPPORTED, y as E_LLM_EXECUTION_ALREADY_SIGNALLED } from "./runtime-j92CNi5z.mjs";
3
3
  export { E_DISPATCH_PIPELINE_ERROR, E_INPUT_PIPELINE_ERROR, E_INVALID_INITIAL_IDENTITY_VALUE, E_INVALID_INITIAL_MEDIA_VALUE, E_INVALID_INITIAL_MEMORY_VALUE, E_INVALID_INITIAL_MESSAGE_VALUE, E_INVALID_INITIAL_REGISTRY_VALUE, E_INVALID_INITIAL_RETRIEVABLE_VALUE, E_INVALID_INITIAL_THOUGHT_VALUE, E_INVALID_INITIAL_TOOL_CALL_VALUE, E_INVALID_INITIAL_TOOL_VALUE, E_INVALID_INITIAL_TURN_GATE_VALUE, E_INVALID_LLM_DISPATCH_INPUT, E_INVALID_LLM_EXECUTION_CONTEXT, E_INVALID_TOOL_ARGS, E_INVALID_TURN_CONTEXT, E_INVALID_TURN_GATE_RESOLUTION, E_INVALID_TURN_RUNNER_CONFIG, E_LLM_EXECUTION_ALREADY_SIGNALLED, E_LLM_EXECUTION_EXECUTOR_ERROR, E_LLM_EXECUTION_GATE_NOT_SUPPORTED, E_NOT_A_MEDIA_READER, E_NOT_A_SPOOL_READER, E_OUTPUT_PIPELINE_ERROR, E_PIPELINE_SHORT_CIRCUITED, E_TOOL_ALREADY_REGISTERED, E_TOOL_DOWNSTREAM_ERROR, E_TURN_GATE_ABORTED, E_TURN_GATE_TIMEOUT, ValidationException };
package/forge.cjs CHANGED
@@ -1,9 +1,9 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("./chunk-Ble4zEEl.js");
3
- const require_tool_registry = require("./tool_registry-CKk5ooxm.js");
4
- const require_tool = require("./tool-DIHzOZiV.js");
5
- const require_spooled_artifact = require("./spooled_artifact-CHvDDYGA.js");
6
- const require_tool_call = require("./tool_call-CkOVOhg0.js");
3
+ const require_tool_registry = require("./tool_registry-CtCQ4Xoz.js");
4
+ const require_tool = require("./tool-CX9vNHAw.js");
5
+ const require_spooled_artifact = require("./spooled_artifact-B8gIIn9h.js");
6
+ const require_tool_call = require("./tool_call--7ti-frB.js");
7
7
  exports.ArtifactTool = require_spooled_artifact.ArtifactTool;
8
8
  exports.Tool = require_tool.Tool;
9
9
  exports.ToolCall = require_tool_call.ToolCall;
package/forge.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { t as ToolRegistry } from "./tool_registry-CX3ofUh9.mjs";
2
- import { t as Tool } from "./tool-CsYuHhiS.mjs";
3
- import { i as ArtifactTool } from "./spooled_artifact-D-JrpY4W.mjs";
4
- import { t as ToolCall } from "./tool_call-Bs_Q5LOG.mjs";
1
+ import { t as ToolRegistry } from "./tool_registry-BGHg6KTq.mjs";
2
+ import { t as Tool } from "./tool-CRZSUcdP.mjs";
3
+ import { i as ArtifactTool } from "./spooled_artifact-CWoKUDEm.mjs";
4
+ import { t as ToolCall } from "./tool_call-BUeMuCc6.mjs";
5
5
  export { ArtifactTool, Tool, ToolCall, ToolRegistry };
package/guards.cjs CHANGED
@@ -1,14 +1,14 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("./chunk-Ble4zEEl.js");
3
3
  const require_exceptions = require("./exceptions-CitH5wZI.js");
4
- const require_tool_registry = require("./tool_registry-CKk5ooxm.js");
5
- const require_thought = require("./thought-DBNsR6l8.js");
6
- const require_tool = require("./tool-DIHzOZiV.js");
7
- const require_spooled_artifact = require("./spooled_artifact-CHvDDYGA.js");
8
- const require_tool_call = require("./tool_call-CkOVOhg0.js");
9
- const require_spooled_markdown_artifact = require("./spooled_markdown_artifact-BYfPqFvk.js");
10
- const require_dispatch_runner = require("./dispatch_runner-CEFHXRJZ.js");
11
- const require_turn_runner = require("./turn_runner-D0qGIrRI.js");
4
+ const require_tool_registry = require("./tool_registry-CtCQ4Xoz.js");
5
+ const require_thought = require("./thought-BD6AkkOr.js");
6
+ const require_tool = require("./tool-CX9vNHAw.js");
7
+ const require_spooled_artifact = require("./spooled_artifact-B8gIIn9h.js");
8
+ const require_tool_call = require("./tool_call--7ti-frB.js");
9
+ const require_spooled_markdown_artifact = require("./spooled_markdown_artifact-DQX0RCdI.js");
10
+ const require_dispatch_runner = require("./dispatch_runner-CpuyATj1.js");
11
+ const require_turn_runner = require("./turn_runner-BJTtAORU.js");
12
12
  //#region src/guards.ts
13
13
  /**
14
14
  * Runtime type guards for ADK primitives, contexts, runners, tools, and artifacts.
package/guards.mjs CHANGED
@@ -1,12 +1,12 @@
1
1
  import { o as BaseException } from "./exceptions-BeWH2FwP.mjs";
2
- import { a as Tokenizable, c as isObject, o as isError, r as Registry, s as isInstanceOf, t as ToolRegistry } from "./tool_registry-CX3ofUh9.mjs";
3
- import { i as Identity, n as Message, r as Memory, t as Thought } from "./thought-D9IS11b5.mjs";
4
- import { t as Tool } from "./tool-CsYuHhiS.mjs";
5
- import { i as ArtifactTool, r as implementsSpoolReader, t as SpooledArtifact } from "./spooled_artifact-D-JrpY4W.mjs";
6
- import { t as ToolCall } from "./tool_call-Bs_Q5LOG.mjs";
7
- import { n as SpooledJsonArtifact, t as SpooledMarkdownArtifact } from "./spooled_markdown_artifact-B4eWOfCX.mjs";
8
- import { n as DispatchContext, r as TurnContext, t as DispatchRunner } from "./dispatch_runner-uNtS-XSP.mjs";
9
- import { n as TurnGate, t as TurnRunner } from "./turn_runner-C1-mup84.mjs";
2
+ import { a as Tokenizable, c as isObject, o as isError, r as Registry, s as isInstanceOf, t as ToolRegistry } from "./tool_registry-BGHg6KTq.mjs";
3
+ import { i as Identity, n as Message, r as Memory, t as Thought } from "./thought-B_P8LiB6.mjs";
4
+ import { t as Tool } from "./tool-CRZSUcdP.mjs";
5
+ import { i as ArtifactTool, r as implementsSpoolReader, t as SpooledArtifact } from "./spooled_artifact-CWoKUDEm.mjs";
6
+ import { t as ToolCall } from "./tool_call-BUeMuCc6.mjs";
7
+ import { n as SpooledJsonArtifact, t as SpooledMarkdownArtifact } from "./spooled_markdown_artifact-CNle4jXN.mjs";
8
+ import { n as DispatchContext, r as TurnContext, t as DispatchRunner } from "./dispatch_runner-CDF3X0nv.mjs";
9
+ import { n as TurnGate, t as TurnRunner } from "./turn_runner-C02LZHjt.mjs";
10
10
  //#region src/guards.ts
11
11
  /**
12
12
  * Runtime type guards for ADK primitives, contexts, runners, tools, and artifacts.
package/index.cjs CHANGED
@@ -1,18 +1,18 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("./chunk-Ble4zEEl.js");
3
3
  const require_exceptions = require("./exceptions-CitH5wZI.js");
4
- const require_tool_registry = require("./tool_registry-CKk5ooxm.js");
5
- const require_runtime = require("./runtime-DyD9oQjH.js");
6
- const require_thought = require("./thought-DBNsR6l8.js");
7
- const require_tool = require("./tool-DIHzOZiV.js");
8
- const require_spooled_artifact = require("./spooled_artifact-CHvDDYGA.js");
9
- const require_common = require("./common-DuKWGTVd.js");
10
- const require_tool_call = require("./tool_call-CkOVOhg0.js");
11
- const require_spooled_markdown_artifact = require("./spooled_markdown_artifact-BYfPqFvk.js");
12
- require("./exceptions.cjs");
13
- const require_dispatch_runner = require("./dispatch_runner-CEFHXRJZ.js");
4
+ const require_tool_registry = require("./tool_registry-CtCQ4Xoz.js");
5
+ const require_runtime = require("./runtime-MFFcJrRv.js");
6
+ const require_thought = require("./thought-BD6AkkOr.js");
7
+ const require_tool = require("./tool-CX9vNHAw.js");
8
+ const require_spooled_artifact = require("./spooled_artifact-B8gIIn9h.js");
9
+ const require_common = require("./common-D_e5zYsG.js");
10
+ const require_tool_call = require("./tool_call--7ti-frB.js");
11
+ const require_spooled_markdown_artifact = require("./spooled_markdown_artifact-DQX0RCdI.js");
12
+ const require_dispatch_runner = require("./dispatch_runner-CpuyATj1.js");
14
13
  require("./dispatch_runner.cjs");
15
- const require_turn_runner = require("./turn_runner-D0qGIrRI.js");
14
+ require("./exceptions.cjs");
15
+ const require_turn_runner = require("./turn_runner-BJTtAORU.js");
16
16
  const require_guards = require("./guards.cjs");
17
17
  require("./turn_runner.cjs");
18
18
  //#region src/index.ts
@@ -26,7 +26,7 @@ require("./turn_runner.cjs");
26
26
  *
27
27
  * @tip This is a constant that is replaced during the build process with the actual version of the package.
28
28
  */
29
- var version = "0.1.0-master-e04b0eba";
29
+ var version = "0.1.0-master-d3e80e7a";
30
30
  //#endregion
31
31
  exports.ArtifactTool = require_spooled_artifact.ArtifactTool;
32
32
  exports.DispatchRunner = require_dispatch_runner.DispatchRunner;
package/index.mjs CHANGED
@@ -1,16 +1,16 @@
1
1
  import { n as ValidationException } from "./exceptions-BeWH2FwP.mjs";
2
- import { a as Tokenizable, c as isObject, i as TokenEncoding, o as isError, r as Registry, s as isInstanceOf, t as ToolRegistry } from "./tool_registry-CX3ofUh9.mjs";
3
- import { C as E_NOT_A_SPOOL_READER, D as E_TOOL_DOWNSTREAM_ERROR, E as E_TOOL_ALREADY_REGISTERED, O as E_TURN_GATE_ABORTED, T as E_PIPELINE_SHORT_CIRCUITED, _ as E_INVALID_TURN_GATE_RESOLUTION, a as E_INVALID_INITIAL_MEMORY_VALUE, b as E_LLM_EXECUTION_EXECUTOR_ERROR, d as E_INVALID_INITIAL_TOOL_VALUE, f as E_INVALID_INITIAL_TURN_GATE_VALUE, g as E_INVALID_TURN_CONTEXT, h as E_INVALID_TOOL_ARGS, k as E_TURN_GATE_TIMEOUT, l as E_INVALID_INITIAL_THOUGHT_VALUE, m as E_INVALID_LLM_EXECUTION_CONTEXT, n as E_INPUT_PIPELINE_ERROR, o as E_INVALID_INITIAL_MESSAGE_VALUE, p as E_INVALID_LLM_DISPATCH_INPUT, r as E_INVALID_INITIAL_IDENTITY_VALUE, s as E_INVALID_INITIAL_REGISTRY_VALUE, t as E_DISPATCH_PIPELINE_ERROR, u as E_INVALID_INITIAL_TOOL_CALL_VALUE, v as E_INVALID_TURN_RUNNER_CONFIG, w as E_OUTPUT_PIPELINE_ERROR, x as E_LLM_EXECUTION_GATE_NOT_SUPPORTED, y as E_LLM_EXECUTION_ALREADY_SIGNALLED } from "./runtime-CDIZwCT0.mjs";
4
- import { i as Identity, n as Message, r as Memory, t as Thought } from "./thought-D9IS11b5.mjs";
5
- import { t as Tool } from "./tool-CsYuHhiS.mjs";
6
- import { i as ArtifactTool, r as implementsSpoolReader, t as SpooledArtifact } from "./spooled_artifact-D-JrpY4W.mjs";
7
- import { n as fromWebFile, o as Retrievable, r as inMemoryMediaReader, t as fromFetch } from "./common-ClCHam5-.mjs";
8
- import { a as mediaReaderSchema, i as implementsMediaReader, n as Media, r as isMedia, t as ToolCall } from "./tool_call-Bs_Q5LOG.mjs";
9
- import { n as SpooledJsonArtifact, t as SpooledMarkdownArtifact } from "./spooled_markdown_artifact-B4eWOfCX.mjs";
10
- import "./exceptions.mjs";
11
- import { t as DispatchRunner } from "./dispatch_runner-uNtS-XSP.mjs";
2
+ import { a as Tokenizable, c as isObject, i as TokenEncoding, o as isError, r as Registry, s as isInstanceOf, t as ToolRegistry } from "./tool_registry-BGHg6KTq.mjs";
3
+ import { C as E_NOT_A_SPOOL_READER, D as E_TOOL_DOWNSTREAM_ERROR, E as E_TOOL_ALREADY_REGISTERED, O as E_TURN_GATE_ABORTED, T as E_PIPELINE_SHORT_CIRCUITED, _ as E_INVALID_TURN_GATE_RESOLUTION, a as E_INVALID_INITIAL_MEMORY_VALUE, b as E_LLM_EXECUTION_EXECUTOR_ERROR, d as E_INVALID_INITIAL_TOOL_VALUE, f as E_INVALID_INITIAL_TURN_GATE_VALUE, g as E_INVALID_TURN_CONTEXT, h as E_INVALID_TOOL_ARGS, k as E_TURN_GATE_TIMEOUT, l as E_INVALID_INITIAL_THOUGHT_VALUE, m as E_INVALID_LLM_EXECUTION_CONTEXT, n as E_INPUT_PIPELINE_ERROR, o as E_INVALID_INITIAL_MESSAGE_VALUE, p as E_INVALID_LLM_DISPATCH_INPUT, r as E_INVALID_INITIAL_IDENTITY_VALUE, s as E_INVALID_INITIAL_REGISTRY_VALUE, t as E_DISPATCH_PIPELINE_ERROR, u as E_INVALID_INITIAL_TOOL_CALL_VALUE, v as E_INVALID_TURN_RUNNER_CONFIG, w as E_OUTPUT_PIPELINE_ERROR, x as E_LLM_EXECUTION_GATE_NOT_SUPPORTED, y as E_LLM_EXECUTION_ALREADY_SIGNALLED } from "./runtime-j92CNi5z.mjs";
4
+ import { i as Identity, n as Message, r as Memory, t as Thought } from "./thought-B_P8LiB6.mjs";
5
+ import { t as Tool } from "./tool-CRZSUcdP.mjs";
6
+ import { i as ArtifactTool, r as implementsSpoolReader, t as SpooledArtifact } from "./spooled_artifact-CWoKUDEm.mjs";
7
+ import { n as fromWebFile, o as Retrievable, r as inMemoryMediaReader, t as fromFetch } from "./common-lMrnzoyn.mjs";
8
+ import { a as mediaReaderSchema, i as implementsMediaReader, n as Media, r as isMedia, t as ToolCall } from "./tool_call-BUeMuCc6.mjs";
9
+ import { n as SpooledJsonArtifact, t as SpooledMarkdownArtifact } from "./spooled_markdown_artifact-CNle4jXN.mjs";
10
+ import { t as DispatchRunner } from "./dispatch_runner-CDF3X0nv.mjs";
12
11
  import "./dispatch_runner.mjs";
13
- import { t as TurnRunner } from "./turn_runner-C1-mup84.mjs";
12
+ import "./exceptions.mjs";
13
+ import { t as TurnRunner } from "./turn_runner-C02LZHjt.mjs";
14
14
  import { isArtifactTool, isBaseException, isDispatchContext, isDispatchRunner, isIdentity, isMemory, isMessage, isRegistry, isSpooledArtifact, isSpooledArtifactConstructor, isSpooledJsonArtifact, isSpooledMarkdownArtifact, isThought, isTokenizable, isTool, isToolCall, isToolRegistry, isTurnContext, isTurnGate, isTurnRunner } from "./guards.mjs";
15
15
  import "./turn_runner.mjs";
16
16
  //#region src/index.ts
@@ -24,7 +24,7 @@ import "./turn_runner.mjs";
24
24
  *
25
25
  * @tip This is a constant that is replaced during the build process with the actual version of the package.
26
26
  */
27
- var version = "0.1.0-master-e04b0eba";
27
+ var version = "0.1.0-master-d3e80e7a";
28
28
  //#endregion
29
29
  export { ArtifactTool, DispatchRunner, E_DISPATCH_PIPELINE_ERROR, E_INPUT_PIPELINE_ERROR, E_INVALID_INITIAL_IDENTITY_VALUE, E_INVALID_INITIAL_MEMORY_VALUE, E_INVALID_INITIAL_MESSAGE_VALUE, E_INVALID_INITIAL_REGISTRY_VALUE, E_INVALID_INITIAL_THOUGHT_VALUE, E_INVALID_INITIAL_TOOL_CALL_VALUE, E_INVALID_INITIAL_TOOL_VALUE, E_INVALID_INITIAL_TURN_GATE_VALUE, E_INVALID_LLM_DISPATCH_INPUT, E_INVALID_LLM_EXECUTION_CONTEXT, E_INVALID_TOOL_ARGS, E_INVALID_TURN_CONTEXT, E_INVALID_TURN_GATE_RESOLUTION, E_INVALID_TURN_RUNNER_CONFIG, E_LLM_EXECUTION_ALREADY_SIGNALLED, E_LLM_EXECUTION_EXECUTOR_ERROR, E_LLM_EXECUTION_GATE_NOT_SUPPORTED, E_NOT_A_SPOOL_READER, E_OUTPUT_PIPELINE_ERROR, E_PIPELINE_SHORT_CIRCUITED, E_TOOL_ALREADY_REGISTERED, E_TOOL_DOWNSTREAM_ERROR, E_TURN_GATE_ABORTED, E_TURN_GATE_TIMEOUT, Identity, Media, Memory, Message, Registry, Retrievable, SpooledArtifact, SpooledJsonArtifact, SpooledMarkdownArtifact, Thought, TokenEncoding, Tokenizable, Tool, ToolCall, ToolRegistry, TurnRunner, ValidationException, fromFetch, fromWebFile, implementsMediaReader, implementsSpoolReader, inMemoryMediaReader, isArtifactTool, isBaseException, isDispatchContext, isDispatchRunner, isError, isIdentity, isInstanceOf, isMedia, isMemory, isMessage, isObject, isRegistry, isSpooledArtifact, isSpooledArtifactConstructor, isSpooledJsonArtifact, isSpooledMarkdownArtifact, isThought, isTokenizable, isTool, isToolCall, isToolRegistry, isTurnContext, isTurnGate, isTurnRunner, mediaReaderSchema, version };
30
30
 
@@ -5,9 +5,14 @@
5
5
  * @remarks
6
6
  * Marked fatal — a misconfigured runner must not be allowed to execute turns.
7
7
  *
8
+ * The single printf argument carries the validator's field-level detail (e.g.
9
+ * `"storeMediaBytesCallback is required"`) so a misconfiguration names the offending field
10
+ * instead of failing opaquely. The underlying `ValidationError` is also attached on `cause`.
11
+ *
8
12
  * @group Turn Runner Construction
9
13
  */
10
14
  export declare const E_INVALID_TURN_RUNNER_CONFIG: import("../utils/exceptions").CreatedException<[
15
+ string
11
16
  ]>;
12
17
  /**
13
18
  * Thrown by {@link @nhtio/adk!TurnRunner} when the {@link @nhtio/adk!TurnContext} supplied to `run` fails schema
@@ -45,13 +45,23 @@ export interface TurnStreamableContent {
45
45
  * execution fails, `isError` is `true` and `results` contains the error detail.
46
46
  */
47
47
  export interface TurnToolCallContent {
48
- /** Stable identifier for this tool call; correlates the initial request with its result. */
48
+ /**
49
+ * Stable stream id for this tool call; ties the initial request to its result on **this** bus
50
+ * (the announce emission and the completion emission share it). This is the model/stream id, not
51
+ * a cross-bus key — to correlate with the observability `toolExecution*` events, use `checksum`.
52
+ */
49
53
  id: string;
50
54
  /** Name of the tool the model has requested. */
51
55
  tool: string;
52
56
  /** Arguments the model supplied for the tool call. */
53
57
  args: unknown;
54
- /** Integrity checksum over `tool` and `args`; can be used to detect tampering before execution. */
58
+ /**
59
+ * `sha256({ tool, args })` over the raw arguments. Doubles as the **cross-bus join key**: equal to
60
+ * {@link ToolExecutionStartEvent.callId} / {@link ToolExecutionEndEvent.callId} and to
61
+ * {@link @nhtio/adk!ToolCall.checksum}. Collides by design for identical `(tool, args)` within a
62
+ * turn — that is what {@link @nhtio/adk!DispatchContext.toolCallCount} counts — so order or
63
+ * disambiguate repeated calls by `createdAt` / `updatedAt`, not by `checksum` alone.
64
+ */
55
65
  checksum: string;
56
66
  /** Timestamp when this tool call was first emitted. */
57
67
  createdAt: DateTime;
@@ -109,16 +119,22 @@ export interface TurnEndEvent {
109
119
  *
110
120
  * @remarks
111
121
  * Fired after arg validation passes and immediately before the handler is called.
112
- * `callId` correlates the event with the {@link @nhtio/adk!ToolCall} record if one is being tracked. Fires
113
- * for both {@link @nhtio/adk!Tool} and
114
- * {@link @nhtio/adk!ArtifactTool} invocations — the payload is identical.
122
+ * `callId` is the cross-bus join key — equal to {@link TurnToolCallContent.checksum} and
123
+ * {@link @nhtio/adk!ToolCall.checksum}, **not** {@link @nhtio/adk!ToolCall.id}. Fires for both
124
+ * {@link @nhtio/adk!Tool} and {@link @nhtio/adk!ArtifactTool} invocations — the payload is identical.
115
125
  */
116
126
  export interface ToolExecutionStartEvent {
117
127
  /** Name of the tool being executed. */
118
128
  toolName: string;
119
129
  /** ID of the turn in which the tool is being executed. */
120
130
  turnId: string;
121
- /** Correlates with the associated ToolCall id, if known. Empty string when not provided. */
131
+ /**
132
+ * Cross-bus join key: `sha256({ tool, args })`, identical to {@link TurnToolCallContent.checksum}
133
+ * and {@link @nhtio/adk!ToolCall.checksum}. This is **not** {@link @nhtio/adk!ToolCall.id}. It
134
+ * collides by design for identical `(tool, args)` within a turn — that is what
135
+ * {@link @nhtio/adk!DispatchContext.toolCallCount} counts. Order or disambiguate repeated calls by
136
+ * `startedAt`. Empty string when not provided.
137
+ */
122
138
  callId: string;
123
139
  /** The validated arguments that will be passed to the handler. */
124
140
  args: unknown;
@@ -130,16 +146,22 @@ export interface ToolExecutionStartEvent {
130
146
  *
131
147
  * @remarks
132
148
  * Fired after the handler returns or throws. When `isError` is `true`, the handler threw and the
133
- * error has been wrapped in {@link @nhtio/adk!E_TOOL_DOWNSTREAM_ERROR}. Fires for both
134
- * {@link @nhtio/adk!Tool} and
135
- * {@link @nhtio/adk!ArtifactTool} invocations — the payload is identical.
149
+ * error has been wrapped in {@link @nhtio/adk!E_TOOL_DOWNSTREAM_ERROR}. `callId` carries the same
150
+ * cross-bus join key as {@link ToolExecutionStartEvent.callId}. Fires for both
151
+ * {@link @nhtio/adk!Tool} and {@link @nhtio/adk!ArtifactTool} invocations — the payload is identical.
136
152
  */
137
153
  export interface ToolExecutionEndEvent {
138
154
  /** Name of the tool that was executed. */
139
155
  toolName: string;
140
156
  /** ID of the turn in which the tool was executed. */
141
157
  turnId: string;
142
- /** Correlates with the associated ToolCall id, if known. Empty string when not provided. */
158
+ /**
159
+ * Cross-bus join key: `sha256({ tool, args })`, identical to {@link TurnToolCallContent.checksum}
160
+ * and {@link @nhtio/adk!ToolCall.checksum}. This is **not** {@link @nhtio/adk!ToolCall.id}. It
161
+ * collides by design for identical `(tool, args)` within a turn — that is what
162
+ * {@link @nhtio/adk!DispatchContext.toolCallCount} counts. Order or disambiguate repeated calls by
163
+ * `startedAt` / `endedAt`. Empty string when not provided.
164
+ */
143
165
  callId: string;
144
166
  /** When execution started. */
145
167
  startedAt: DateTime;
@@ -0,0 +1,107 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../../chunk-Ble4zEEl.js");
3
+ //#region src/lib/utils/retry.ts
4
+ /**
5
+ * Exponential backoff with a ceiling: `min(baseDelayMs * 2^(attempt-1), maxDelayMs)`.
6
+ *
7
+ * @param attempt - 1-based attempt number.
8
+ * @param cfg - Carries `baseDelayMs` (default 500) and `maxDelayMs` (default 30_000).
9
+ * @returns The (un-jittered) delay in ms.
10
+ */
11
+ var computeBackoff = (attempt, cfg) => {
12
+ const base = cfg.baseDelayMs ?? 500;
13
+ const max = cfg.maxDelayMs ?? 3e4;
14
+ return Math.min(base * Math.pow(2, attempt - 1), max);
15
+ };
16
+ /**
17
+ * Abort-aware jittered sleep used for retry backoff.
18
+ *
19
+ * @remarks
20
+ * Resolves (never rejects) the instant `signal` aborts, so an aborted caller does not stay parked
21
+ * in a backoff delay — the caller's retry loop re-checks abort state immediately after and bails.
22
+ * The timer and the abort listener are both torn down on whichever fires first, so nothing leaks.
23
+ *
24
+ * @param ms - Base delay in ms; jittered by ±10%.
25
+ * @param signal - Optional abort signal that short-circuits the sleep.
26
+ */
27
+ var sleepWithJitter = (ms, signal) => {
28
+ const jittered = ms * (.9 + Math.random() * .2);
29
+ return new Promise((resolve) => {
30
+ if (signal?.aborted) {
31
+ resolve();
32
+ return;
33
+ }
34
+ let onAbort;
35
+ const timer = setTimeout(() => {
36
+ if (onAbort && signal) signal.removeEventListener("abort", onAbort);
37
+ resolve();
38
+ }, jittered);
39
+ if (signal) {
40
+ onAbort = () => {
41
+ clearTimeout(timer);
42
+ resolve();
43
+ };
44
+ signal.addEventListener("abort", onAbort, { once: true });
45
+ }
46
+ });
47
+ };
48
+ /**
49
+ * Parses an HTTP `Retry-After` header value (delta-seconds or HTTP-date) into milliseconds.
50
+ *
51
+ * @param raw - The header value.
52
+ * @returns Milliseconds to wait, or `0` when the value cannot be parsed or is in the past.
53
+ */
54
+ var parseRetryAfter = (raw) => {
55
+ const asNum = Number(raw);
56
+ if (Number.isFinite(asNum)) return asNum * 1e3;
57
+ const asDate = Date.parse(raw);
58
+ if (Number.isFinite(asDate)) return Math.max(0, asDate - Date.now());
59
+ return 0;
60
+ };
61
+ /**
62
+ * Combines several abort signals into one.
63
+ *
64
+ * @remarks
65
+ * Returns the linked signal plus a `dispose` that detaches any listeners the fallback path
66
+ * attached, so repeated links on a long-lived signal (one per retry attempt) do not accumulate
67
+ * listeners. The native `AbortSignal.any` path self-manages its listeners, so `dispose` is a no-op
68
+ * there.
69
+ *
70
+ * @param signals - The signals to combine.
71
+ * @returns The linked signal and a `dispose` to tear down fallback listeners.
72
+ */
73
+ var linkAbortSignals = (signals) => {
74
+ const anyFn = AbortSignal.any;
75
+ if (typeof anyFn === "function") return {
76
+ signal: anyFn(signals),
77
+ dispose: () => {}
78
+ };
79
+ const ctrl = new AbortController();
80
+ const links = [];
81
+ for (const sig of signals) {
82
+ if (sig.aborted) {
83
+ ctrl.abort();
84
+ break;
85
+ }
86
+ const handler = () => ctrl.abort();
87
+ sig.addEventListener("abort", handler, { once: true });
88
+ links.push({
89
+ sig,
90
+ handler
91
+ });
92
+ }
93
+ return {
94
+ signal: ctrl.signal,
95
+ dispose: () => {
96
+ for (const { sig, handler } of links) sig.removeEventListener("abort", handler);
97
+ links.length = 0;
98
+ }
99
+ };
100
+ };
101
+ //#endregion
102
+ exports.computeBackoff = computeBackoff;
103
+ exports.linkAbortSignals = linkAbortSignals;
104
+ exports.parseRetryAfter = parseRetryAfter;
105
+ exports.sleepWithJitter = sleepWithJitter;
106
+
107
+ //# sourceMappingURL=retry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.cjs","names":[],"sources":["../../../src/lib/utils/retry.ts"],"sourcesContent":["/**\n * Environment-neutral retry/backoff/timeout primitives shared across HTTP-backed batteries.\n *\n * @module @nhtio/adk/lib/utils/retry\n *\n * @remarks\n * These are pure helpers — no DOM, no Node built-ins, only `setTimeout`, `AbortController`, and\n * `AbortSignal`, all of which exist in every target runtime (Node, browser, edge, workers). They\n * are shared (not duplicated) by the OpenAI Chat Completions battery and the OpenAI Embeddings\n * battery so retry behavior stays identical across the bundled batteries. The bundler inlines this\n * module into each consumer, so sharing introduces no build coupling.\n */\n\n/**\n * Minimal backoff configuration shape. Any retry config carrying `baseDelayMs`/`maxDelayMs`\n * satisfies it structurally, so batteries can pass their own richer config objects directly.\n */\nexport interface BackoffConfig {\n baseDelayMs?: number\n maxDelayMs?: number\n}\n\n/**\n * Exponential backoff with a ceiling: `min(baseDelayMs * 2^(attempt-1), maxDelayMs)`.\n *\n * @param attempt - 1-based attempt number.\n * @param cfg - Carries `baseDelayMs` (default 500) and `maxDelayMs` (default 30_000).\n * @returns The (un-jittered) delay in ms.\n */\nexport const computeBackoff = (attempt: number, cfg: BackoffConfig): number => {\n const base = cfg.baseDelayMs ?? 500\n const max = cfg.maxDelayMs ?? 30_000\n return Math.min(base * Math.pow(2, attempt - 1), max)\n}\n\n/**\n * Abort-aware jittered sleep used for retry backoff.\n *\n * @remarks\n * Resolves (never rejects) the instant `signal` aborts, so an aborted caller does not stay parked\n * in a backoff delay — the caller's retry loop re-checks abort state immediately after and bails.\n * The timer and the abort listener are both torn down on whichever fires first, so nothing leaks.\n *\n * @param ms - Base delay in ms; jittered by ±10%.\n * @param signal - Optional abort signal that short-circuits the sleep.\n */\nexport const sleepWithJitter = (ms: number, signal?: AbortSignal): Promise<void> => {\n const jittered = ms * (0.9 + Math.random() * 0.2)\n return new Promise((resolve) => {\n if (signal?.aborted) {\n resolve()\n return\n }\n let onAbort: (() => void) | undefined\n const timer = setTimeout(() => {\n if (onAbort && signal) signal.removeEventListener('abort', onAbort)\n resolve()\n }, jittered)\n if (signal) {\n onAbort = () => {\n clearTimeout(timer)\n resolve()\n }\n signal.addEventListener('abort', onAbort, { once: true })\n }\n })\n}\n\n/**\n * Parses an HTTP `Retry-After` header value (delta-seconds or HTTP-date) into milliseconds.\n *\n * @param raw - The header value.\n * @returns Milliseconds to wait, or `0` when the value cannot be parsed or is in the past.\n */\nexport const parseRetryAfter = (raw: string): number => {\n const asNum = Number(raw)\n if (Number.isFinite(asNum)) return asNum * 1000\n const asDate = Date.parse(raw)\n if (Number.isFinite(asDate)) return Math.max(0, asDate - Date.now())\n return 0\n}\n\n/**\n * Combines several abort signals into one.\n *\n * @remarks\n * Returns the linked signal plus a `dispose` that detaches any listeners the fallback path\n * attached, so repeated links on a long-lived signal (one per retry attempt) do not accumulate\n * listeners. The native `AbortSignal.any` path self-manages its listeners, so `dispose` is a no-op\n * there.\n *\n * @param signals - The signals to combine.\n * @returns The linked signal and a `dispose` to tear down fallback listeners.\n */\nexport const linkAbortSignals = (\n signals: ReadonlyArray<AbortSignal>\n): { signal: AbortSignal; dispose: () => void } => {\n const anyFn = (AbortSignal as unknown as { any?: (sigs: AbortSignal[]) => AbortSignal }).any\n if (typeof anyFn === 'function') {\n return { signal: anyFn(signals as AbortSignal[]), dispose: () => {} }\n }\n // Fallback for older runtimes: hand-link via a fresh controller.\n const ctrl = new AbortController()\n const links: Array<{ sig: AbortSignal; handler: () => void }> = []\n for (const sig of signals) {\n if (sig.aborted) {\n ctrl.abort()\n break\n }\n const handler = () => ctrl.abort()\n sig.addEventListener('abort', handler, { once: true })\n links.push({ sig, handler })\n }\n return {\n signal: ctrl.signal,\n dispose: () => {\n for (const { sig, handler } of links) sig.removeEventListener('abort', handler)\n links.length = 0\n },\n }\n}\n"],"mappings":";;;;;;;;;;AA6BA,IAAa,kBAAkB,SAAiB,QAA+B;CAC7E,MAAM,OAAO,IAAI,eAAe;CAChC,MAAM,MAAM,IAAI,cAAc;CAC9B,OAAO,KAAK,IAAI,OAAO,KAAK,IAAI,GAAG,UAAU,CAAC,GAAG,GAAG;AACtD;;;;;;;;;;;;AAaA,IAAa,mBAAmB,IAAY,WAAwC;CAClF,MAAM,WAAW,MAAM,KAAM,KAAK,OAAO,IAAI;CAC7C,OAAO,IAAI,SAAS,YAAY;EAC9B,IAAI,QAAQ,SAAS;GACnB,QAAQ;GACR;EACF;EACA,IAAI;EACJ,MAAM,QAAQ,iBAAiB;GAC7B,IAAI,WAAW,QAAQ,OAAO,oBAAoB,SAAS,OAAO;GAClE,QAAQ;EACV,GAAG,QAAQ;EACX,IAAI,QAAQ;GACV,gBAAgB;IACd,aAAa,KAAK;IAClB,QAAQ;GACV;GACA,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;EAC1D;CACF,CAAC;AACH;;;;;;;AAQA,IAAa,mBAAmB,QAAwB;CACtD,MAAM,QAAQ,OAAO,GAAG;CACxB,IAAI,OAAO,SAAS,KAAK,GAAG,OAAO,QAAQ;CAC3C,MAAM,SAAS,KAAK,MAAM,GAAG;CAC7B,IAAI,OAAO,SAAS,MAAM,GAAG,OAAO,KAAK,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;CACnE,OAAO;AACT;;;;;;;;;;;;;AAcA,IAAa,oBACX,YACiD;CACjD,MAAM,QAAS,YAA0E;CACzF,IAAI,OAAO,UAAU,YACnB,OAAO;EAAE,QAAQ,MAAM,OAAwB;EAAG,eAAe,CAAC;CAAE;CAGtE,MAAM,OAAO,IAAI,gBAAgB;CACjC,MAAM,QAA0D,CAAC;CACjE,KAAK,MAAM,OAAO,SAAS;EACzB,IAAI,IAAI,SAAS;GACf,KAAK,MAAM;GACX;EACF;EACA,MAAM,gBAAgB,KAAK,MAAM;EACjC,IAAI,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;EACrD,MAAM,KAAK;GAAE;GAAK;EAAQ,CAAC;CAC7B;CACA,OAAO;EACL,QAAQ,KAAK;EACb,eAAe;GACb,KAAK,MAAM,EAAE,KAAK,aAAa,OAAO,IAAI,oBAAoB,SAAS,OAAO;GAC9E,MAAM,SAAS;EACjB;CACF;AACF"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Environment-neutral retry/backoff/timeout primitives shared across HTTP-backed batteries.
3
+ *
4
+ * @module @nhtio/adk/lib/utils/retry
5
+ *
6
+ * @remarks
7
+ * These are pure helpers — no DOM, no Node built-ins, only `setTimeout`, `AbortController`, and
8
+ * `AbortSignal`, all of which exist in every target runtime (Node, browser, edge, workers). They
9
+ * are shared (not duplicated) by the OpenAI Chat Completions battery and the OpenAI Embeddings
10
+ * battery so retry behavior stays identical across the bundled batteries. The bundler inlines this
11
+ * module into each consumer, so sharing introduces no build coupling.
12
+ */
13
+ /**
14
+ * Minimal backoff configuration shape. Any retry config carrying `baseDelayMs`/`maxDelayMs`
15
+ * satisfies it structurally, so batteries can pass their own richer config objects directly.
16
+ */
17
+ export interface BackoffConfig {
18
+ baseDelayMs?: number;
19
+ maxDelayMs?: number;
20
+ }
21
+ /**
22
+ * Exponential backoff with a ceiling: `min(baseDelayMs * 2^(attempt-1), maxDelayMs)`.
23
+ *
24
+ * @param attempt - 1-based attempt number.
25
+ * @param cfg - Carries `baseDelayMs` (default 500) and `maxDelayMs` (default 30_000).
26
+ * @returns The (un-jittered) delay in ms.
27
+ */
28
+ export declare const computeBackoff: (attempt: number, cfg: BackoffConfig) => number;
29
+ /**
30
+ * Abort-aware jittered sleep used for retry backoff.
31
+ *
32
+ * @remarks
33
+ * Resolves (never rejects) the instant `signal` aborts, so an aborted caller does not stay parked
34
+ * in a backoff delay — the caller's retry loop re-checks abort state immediately after and bails.
35
+ * The timer and the abort listener are both torn down on whichever fires first, so nothing leaks.
36
+ *
37
+ * @param ms - Base delay in ms; jittered by ±10%.
38
+ * @param signal - Optional abort signal that short-circuits the sleep.
39
+ */
40
+ export declare const sleepWithJitter: (ms: number, signal?: AbortSignal) => Promise<void>;
41
+ /**
42
+ * Parses an HTTP `Retry-After` header value (delta-seconds or HTTP-date) into milliseconds.
43
+ *
44
+ * @param raw - The header value.
45
+ * @returns Milliseconds to wait, or `0` when the value cannot be parsed or is in the past.
46
+ */
47
+ export declare const parseRetryAfter: (raw: string) => number;
48
+ /**
49
+ * Combines several abort signals into one.
50
+ *
51
+ * @remarks
52
+ * Returns the linked signal plus a `dispose` that detaches any listeners the fallback path
53
+ * attached, so repeated links on a long-lived signal (one per retry attempt) do not accumulate
54
+ * listeners. The native `AbortSignal.any` path self-manages its listeners, so `dispose` is a no-op
55
+ * there.
56
+ *
57
+ * @param signals - The signals to combine.
58
+ * @returns The linked signal and a `dispose` to tear down fallback listeners.
59
+ */
60
+ export declare const linkAbortSignals: (signals: ReadonlyArray<AbortSignal>) => {
61
+ signal: AbortSignal;
62
+ dispose: () => void;
63
+ };
@@ -0,0 +1,102 @@
1
+ //#region src/lib/utils/retry.ts
2
+ /**
3
+ * Exponential backoff with a ceiling: `min(baseDelayMs * 2^(attempt-1), maxDelayMs)`.
4
+ *
5
+ * @param attempt - 1-based attempt number.
6
+ * @param cfg - Carries `baseDelayMs` (default 500) and `maxDelayMs` (default 30_000).
7
+ * @returns The (un-jittered) delay in ms.
8
+ */
9
+ var computeBackoff = (attempt, cfg) => {
10
+ const base = cfg.baseDelayMs ?? 500;
11
+ const max = cfg.maxDelayMs ?? 3e4;
12
+ return Math.min(base * Math.pow(2, attempt - 1), max);
13
+ };
14
+ /**
15
+ * Abort-aware jittered sleep used for retry backoff.
16
+ *
17
+ * @remarks
18
+ * Resolves (never rejects) the instant `signal` aborts, so an aborted caller does not stay parked
19
+ * in a backoff delay — the caller's retry loop re-checks abort state immediately after and bails.
20
+ * The timer and the abort listener are both torn down on whichever fires first, so nothing leaks.
21
+ *
22
+ * @param ms - Base delay in ms; jittered by ±10%.
23
+ * @param signal - Optional abort signal that short-circuits the sleep.
24
+ */
25
+ var sleepWithJitter = (ms, signal) => {
26
+ const jittered = ms * (.9 + Math.random() * .2);
27
+ return new Promise((resolve) => {
28
+ if (signal?.aborted) {
29
+ resolve();
30
+ return;
31
+ }
32
+ let onAbort;
33
+ const timer = setTimeout(() => {
34
+ if (onAbort && signal) signal.removeEventListener("abort", onAbort);
35
+ resolve();
36
+ }, jittered);
37
+ if (signal) {
38
+ onAbort = () => {
39
+ clearTimeout(timer);
40
+ resolve();
41
+ };
42
+ signal.addEventListener("abort", onAbort, { once: true });
43
+ }
44
+ });
45
+ };
46
+ /**
47
+ * Parses an HTTP `Retry-After` header value (delta-seconds or HTTP-date) into milliseconds.
48
+ *
49
+ * @param raw - The header value.
50
+ * @returns Milliseconds to wait, or `0` when the value cannot be parsed or is in the past.
51
+ */
52
+ var parseRetryAfter = (raw) => {
53
+ const asNum = Number(raw);
54
+ if (Number.isFinite(asNum)) return asNum * 1e3;
55
+ const asDate = Date.parse(raw);
56
+ if (Number.isFinite(asDate)) return Math.max(0, asDate - Date.now());
57
+ return 0;
58
+ };
59
+ /**
60
+ * Combines several abort signals into one.
61
+ *
62
+ * @remarks
63
+ * Returns the linked signal plus a `dispose` that detaches any listeners the fallback path
64
+ * attached, so repeated links on a long-lived signal (one per retry attempt) do not accumulate
65
+ * listeners. The native `AbortSignal.any` path self-manages its listeners, so `dispose` is a no-op
66
+ * there.
67
+ *
68
+ * @param signals - The signals to combine.
69
+ * @returns The linked signal and a `dispose` to tear down fallback listeners.
70
+ */
71
+ var linkAbortSignals = (signals) => {
72
+ const anyFn = AbortSignal.any;
73
+ if (typeof anyFn === "function") return {
74
+ signal: anyFn(signals),
75
+ dispose: () => {}
76
+ };
77
+ const ctrl = new AbortController();
78
+ const links = [];
79
+ for (const sig of signals) {
80
+ if (sig.aborted) {
81
+ ctrl.abort();
82
+ break;
83
+ }
84
+ const handler = () => ctrl.abort();
85
+ sig.addEventListener("abort", handler, { once: true });
86
+ links.push({
87
+ sig,
88
+ handler
89
+ });
90
+ }
91
+ return {
92
+ signal: ctrl.signal,
93
+ dispose: () => {
94
+ for (const { sig, handler } of links) sig.removeEventListener("abort", handler);
95
+ links.length = 0;
96
+ }
97
+ };
98
+ };
99
+ //#endregion
100
+ export { computeBackoff, linkAbortSignals, parseRetryAfter, sleepWithJitter };
101
+
102
+ //# sourceMappingURL=retry.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.mjs","names":[],"sources":["../../../src/lib/utils/retry.ts"],"sourcesContent":["/**\n * Environment-neutral retry/backoff/timeout primitives shared across HTTP-backed batteries.\n *\n * @module @nhtio/adk/lib/utils/retry\n *\n * @remarks\n * These are pure helpers — no DOM, no Node built-ins, only `setTimeout`, `AbortController`, and\n * `AbortSignal`, all of which exist in every target runtime (Node, browser, edge, workers). They\n * are shared (not duplicated) by the OpenAI Chat Completions battery and the OpenAI Embeddings\n * battery so retry behavior stays identical across the bundled batteries. The bundler inlines this\n * module into each consumer, so sharing introduces no build coupling.\n */\n\n/**\n * Minimal backoff configuration shape. Any retry config carrying `baseDelayMs`/`maxDelayMs`\n * satisfies it structurally, so batteries can pass their own richer config objects directly.\n */\nexport interface BackoffConfig {\n baseDelayMs?: number\n maxDelayMs?: number\n}\n\n/**\n * Exponential backoff with a ceiling: `min(baseDelayMs * 2^(attempt-1), maxDelayMs)`.\n *\n * @param attempt - 1-based attempt number.\n * @param cfg - Carries `baseDelayMs` (default 500) and `maxDelayMs` (default 30_000).\n * @returns The (un-jittered) delay in ms.\n */\nexport const computeBackoff = (attempt: number, cfg: BackoffConfig): number => {\n const base = cfg.baseDelayMs ?? 500\n const max = cfg.maxDelayMs ?? 30_000\n return Math.min(base * Math.pow(2, attempt - 1), max)\n}\n\n/**\n * Abort-aware jittered sleep used for retry backoff.\n *\n * @remarks\n * Resolves (never rejects) the instant `signal` aborts, so an aborted caller does not stay parked\n * in a backoff delay — the caller's retry loop re-checks abort state immediately after and bails.\n * The timer and the abort listener are both torn down on whichever fires first, so nothing leaks.\n *\n * @param ms - Base delay in ms; jittered by ±10%.\n * @param signal - Optional abort signal that short-circuits the sleep.\n */\nexport const sleepWithJitter = (ms: number, signal?: AbortSignal): Promise<void> => {\n const jittered = ms * (0.9 + Math.random() * 0.2)\n return new Promise((resolve) => {\n if (signal?.aborted) {\n resolve()\n return\n }\n let onAbort: (() => void) | undefined\n const timer = setTimeout(() => {\n if (onAbort && signal) signal.removeEventListener('abort', onAbort)\n resolve()\n }, jittered)\n if (signal) {\n onAbort = () => {\n clearTimeout(timer)\n resolve()\n }\n signal.addEventListener('abort', onAbort, { once: true })\n }\n })\n}\n\n/**\n * Parses an HTTP `Retry-After` header value (delta-seconds or HTTP-date) into milliseconds.\n *\n * @param raw - The header value.\n * @returns Milliseconds to wait, or `0` when the value cannot be parsed or is in the past.\n */\nexport const parseRetryAfter = (raw: string): number => {\n const asNum = Number(raw)\n if (Number.isFinite(asNum)) return asNum * 1000\n const asDate = Date.parse(raw)\n if (Number.isFinite(asDate)) return Math.max(0, asDate - Date.now())\n return 0\n}\n\n/**\n * Combines several abort signals into one.\n *\n * @remarks\n * Returns the linked signal plus a `dispose` that detaches any listeners the fallback path\n * attached, so repeated links on a long-lived signal (one per retry attempt) do not accumulate\n * listeners. The native `AbortSignal.any` path self-manages its listeners, so `dispose` is a no-op\n * there.\n *\n * @param signals - The signals to combine.\n * @returns The linked signal and a `dispose` to tear down fallback listeners.\n */\nexport const linkAbortSignals = (\n signals: ReadonlyArray<AbortSignal>\n): { signal: AbortSignal; dispose: () => void } => {\n const anyFn = (AbortSignal as unknown as { any?: (sigs: AbortSignal[]) => AbortSignal }).any\n if (typeof anyFn === 'function') {\n return { signal: anyFn(signals as AbortSignal[]), dispose: () => {} }\n }\n // Fallback for older runtimes: hand-link via a fresh controller.\n const ctrl = new AbortController()\n const links: Array<{ sig: AbortSignal; handler: () => void }> = []\n for (const sig of signals) {\n if (sig.aborted) {\n ctrl.abort()\n break\n }\n const handler = () => ctrl.abort()\n sig.addEventListener('abort', handler, { once: true })\n links.push({ sig, handler })\n }\n return {\n signal: ctrl.signal,\n dispose: () => {\n for (const { sig, handler } of links) sig.removeEventListener('abort', handler)\n links.length = 0\n },\n }\n}\n"],"mappings":";;;;;;;;AA6BA,IAAa,kBAAkB,SAAiB,QAA+B;CAC7E,MAAM,OAAO,IAAI,eAAe;CAChC,MAAM,MAAM,IAAI,cAAc;CAC9B,OAAO,KAAK,IAAI,OAAO,KAAK,IAAI,GAAG,UAAU,CAAC,GAAG,GAAG;AACtD;;;;;;;;;;;;AAaA,IAAa,mBAAmB,IAAY,WAAwC;CAClF,MAAM,WAAW,MAAM,KAAM,KAAK,OAAO,IAAI;CAC7C,OAAO,IAAI,SAAS,YAAY;EAC9B,IAAI,QAAQ,SAAS;GACnB,QAAQ;GACR;EACF;EACA,IAAI;EACJ,MAAM,QAAQ,iBAAiB;GAC7B,IAAI,WAAW,QAAQ,OAAO,oBAAoB,SAAS,OAAO;GAClE,QAAQ;EACV,GAAG,QAAQ;EACX,IAAI,QAAQ;GACV,gBAAgB;IACd,aAAa,KAAK;IAClB,QAAQ;GACV;GACA,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;EAC1D;CACF,CAAC;AACH;;;;;;;AAQA,IAAa,mBAAmB,QAAwB;CACtD,MAAM,QAAQ,OAAO,GAAG;CACxB,IAAI,OAAO,SAAS,KAAK,GAAG,OAAO,QAAQ;CAC3C,MAAM,SAAS,KAAK,MAAM,GAAG;CAC7B,IAAI,OAAO,SAAS,MAAM,GAAG,OAAO,KAAK,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;CACnE,OAAO;AACT;;;;;;;;;;;;;AAcA,IAAa,oBACX,YACiD;CACjD,MAAM,QAAS,YAA0E;CACzF,IAAI,OAAO,UAAU,YACnB,OAAO;EAAE,QAAQ,MAAM,OAAwB;EAAG,eAAe,CAAC;CAAE;CAGtE,MAAM,OAAO,IAAI,gBAAgB;CACjC,MAAM,QAA0D,CAAC;CACjE,KAAK,MAAM,OAAO,SAAS;EACzB,IAAI,IAAI,SAAS;GACf,KAAK,MAAM;GACX;EACF;EACA,MAAM,gBAAgB,KAAK,MAAM;EACjC,IAAI,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;EACrD,MAAM,KAAK;GAAE;GAAK;EAAQ,CAAC;CAC7B;CACA,OAAO;EACL,QAAQ,KAAK;EACb,eAAe;GACb,KAAK,MAAM,EAAE,KAAK,aAAa,OAAO,IAAI,oBAAoB,SAAS,OAAO;GAC9E,MAAM,SAAS;EACjB;CACF;AACF"}