@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.
- package/CHANGELOG.md +40 -0
- package/batteries/embeddings/index.d.ts +25 -0
- package/batteries/embeddings/openai/adapter.cjs +185 -0
- package/batteries/embeddings/openai/adapter.cjs.map +1 -0
- package/batteries/embeddings/openai/adapter.d.ts +74 -0
- package/batteries/embeddings/openai/adapter.mjs +183 -0
- package/batteries/embeddings/openai/adapter.mjs.map +1 -0
- package/batteries/embeddings/openai/exceptions.cjs +48 -0
- package/batteries/embeddings/openai/exceptions.cjs.map +1 -0
- package/batteries/embeddings/openai/exceptions.d.ts +45 -0
- package/batteries/embeddings/openai/exceptions.mjs +43 -0
- package/batteries/embeddings/openai/exceptions.mjs.map +1 -0
- package/batteries/embeddings/openai/helpers.cjs +25 -0
- package/batteries/embeddings/openai/helpers.cjs.map +1 -0
- package/batteries/embeddings/openai/helpers.d.ts +25 -0
- package/batteries/embeddings/openai/helpers.mjs +23 -0
- package/batteries/embeddings/openai/helpers.mjs.map +1 -0
- package/batteries/embeddings/openai/index.d.ts +17 -0
- package/batteries/embeddings/openai/types.cjs +2 -0
- package/batteries/embeddings/openai/types.d.ts +123 -0
- package/batteries/embeddings/openai/types.mjs +0 -0
- package/batteries/embeddings/openai/validation.cjs +56 -0
- package/batteries/embeddings/openai/validation.cjs.map +1 -0
- package/batteries/embeddings/openai/validation.d.ts +24 -0
- package/batteries/embeddings/openai/validation.mjs +53 -0
- package/batteries/embeddings/openai/validation.mjs.map +1 -0
- package/batteries/embeddings/openai.cjs +14 -0
- package/batteries/embeddings/openai.mjs +5 -0
- package/batteries/embeddings/webllm/adapter.cjs +147 -0
- package/batteries/embeddings/webllm/adapter.cjs.map +1 -0
- package/batteries/embeddings/webllm/adapter.d.ts +74 -0
- package/batteries/embeddings/webllm/adapter.mjs +145 -0
- package/batteries/embeddings/webllm/adapter.mjs.map +1 -0
- package/batteries/embeddings/webllm/exceptions.cjs +31 -0
- package/batteries/embeddings/webllm/exceptions.cjs.map +1 -0
- package/batteries/embeddings/webllm/exceptions.d.ts +25 -0
- package/batteries/embeddings/webllm/exceptions.mjs +28 -0
- package/batteries/embeddings/webllm/exceptions.mjs.map +1 -0
- package/batteries/embeddings/webllm/index.d.ts +15 -0
- package/batteries/embeddings/webllm/types.cjs +2 -0
- package/batteries/embeddings/webllm/types.d.ts +52 -0
- package/batteries/embeddings/webllm/types.mjs +0 -0
- package/batteries/embeddings/webllm/validation.cjs +43 -0
- package/batteries/embeddings/webllm/validation.cjs.map +1 -0
- package/batteries/embeddings/webllm/validation.d.ts +25 -0
- package/batteries/embeddings/webllm/validation.mjs +40 -0
- package/batteries/embeddings/webllm/validation.mjs.map +1 -0
- package/batteries/embeddings/webllm.cjs +10 -0
- package/batteries/embeddings/webllm.mjs +4 -0
- package/batteries/embeddings.cjs +15 -0
- package/batteries/embeddings.mjs +6 -0
- package/batteries/index.d.ts +1 -0
- package/batteries/llm/openai_chat_completions/adapter.cjs +14 -73
- package/batteries/llm/openai_chat_completions/adapter.cjs.map +1 -1
- package/batteries/llm/openai_chat_completions/adapter.mjs +8 -67
- package/batteries/llm/openai_chat_completions/adapter.mjs.map +1 -1
- package/batteries/llm/openai_chat_completions/helpers.cjs +2 -2
- package/batteries/llm/openai_chat_completions/helpers.mjs +2 -2
- package/batteries/llm/openai_chat_completions/validation.cjs +1 -1
- package/batteries/llm/openai_chat_completions/validation.mjs +1 -1
- package/batteries/llm/webllm_chat_completions/adapter.cjs +7 -6
- package/batteries/llm/webllm_chat_completions/adapter.cjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/adapter.mjs +7 -6
- package/batteries/llm/webllm_chat_completions/adapter.mjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/validation.cjs +1 -1
- package/batteries/llm/webllm_chat_completions/validation.mjs +1 -1
- package/batteries/storage/flydrive.cjs +1 -1
- package/batteries/storage/flydrive.mjs +1 -1
- package/batteries/storage/in_memory.cjs +1 -1
- package/batteries/storage/in_memory.mjs +1 -1
- package/batteries/storage/opfs.cjs +1 -1
- package/batteries/storage/opfs.mjs +1 -1
- package/batteries/tools/color.cjs +2 -2
- package/batteries/tools/color.mjs +2 -2
- package/batteries/tools/comparison.cjs +3 -3
- package/batteries/tools/comparison.mjs +3 -3
- package/batteries/tools/data_structure.cjs +3 -3
- package/batteries/tools/data_structure.mjs +3 -3
- package/batteries/tools/datetime_extended.cjs +2 -2
- package/batteries/tools/datetime_extended.mjs +2 -2
- package/batteries/tools/datetime_math.cjs +2 -2
- package/batteries/tools/datetime_math.mjs +2 -2
- package/batteries/tools/encoding.cjs +3 -3
- package/batteries/tools/encoding.mjs +3 -3
- package/batteries/tools/formatting.cjs +3 -3
- package/batteries/tools/formatting.mjs +3 -3
- package/batteries/tools/geo_basics.cjs +2 -2
- package/batteries/tools/geo_basics.mjs +2 -2
- package/batteries/tools/math.cjs +3 -3
- package/batteries/tools/math.mjs +3 -3
- package/batteries/tools/memory.cjs +5 -5
- package/batteries/tools/memory.mjs +5 -5
- package/batteries/tools/parsing.cjs +4 -4
- package/batteries/tools/parsing.mjs +4 -4
- package/batteries/tools/retrievables.cjs +4 -4
- package/batteries/tools/retrievables.mjs +4 -4
- package/batteries/tools/standing_instructions.cjs +4 -4
- package/batteries/tools/standing_instructions.mjs +4 -4
- package/batteries/tools/statistics.cjs +4 -4
- package/batteries/tools/statistics.mjs +4 -4
- package/batteries/tools/string_processing.cjs +3 -3
- package/batteries/tools/string_processing.mjs +3 -3
- package/batteries/tools/structured_data.cjs +3 -3
- package/batteries/tools/structured_data.mjs +3 -3
- package/batteries/tools/text_analysis.cjs +3 -3
- package/batteries/tools/text_analysis.mjs +3 -3
- package/batteries/tools/text_comparison.cjs +2 -2
- package/batteries/tools/text_comparison.mjs +2 -2
- package/batteries/tools/time.cjs +2 -2
- package/batteries/tools/time.mjs +2 -2
- package/batteries/tools/unit_conversion.cjs +2 -2
- package/batteries/tools/unit_conversion.mjs +2 -2
- package/batteries.cjs +13 -0
- package/batteries.mjs +8 -3
- package/{common-DuKWGTVd.js → common-D_e5zYsG.js} +8 -8
- package/{common-DuKWGTVd.js.map → common-D_e5zYsG.js.map} +1 -1
- package/{common-ClCHam5-.mjs → common-lMrnzoyn.mjs} +8 -8
- package/{common-ClCHam5-.mjs.map → common-lMrnzoyn.mjs.map} +1 -1
- package/common.cjs +7 -7
- package/common.mjs +7 -7
- package/{dispatch_runner-uNtS-XSP.mjs → dispatch_runner-CDF3X0nv.mjs} +3 -3
- package/{dispatch_runner-uNtS-XSP.mjs.map → dispatch_runner-CDF3X0nv.mjs.map} +1 -1
- package/{dispatch_runner-CEFHXRJZ.js → dispatch_runner-CpuyATj1.js} +3 -3
- package/{dispatch_runner-CEFHXRJZ.js.map → dispatch_runner-CpuyATj1.js.map} +1 -1
- package/dispatch_runner.cjs +1 -1
- package/dispatch_runner.mjs +1 -1
- package/exceptions.cjs +1 -1
- package/exceptions.mjs +1 -1
- package/forge.cjs +4 -4
- package/forge.mjs +4 -4
- package/guards.cjs +8 -8
- package/guards.mjs +8 -8
- package/index.cjs +12 -12
- package/index.mjs +12 -12
- package/lib/exceptions/runtime.d.ts +5 -0
- package/lib/types/turn_runner.d.ts +32 -10
- package/lib/utils/retry.cjs +107 -0
- package/lib/utils/retry.cjs.map +1 -0
- package/lib/utils/retry.d.ts +63 -0
- package/lib/utils/retry.mjs +102 -0
- package/lib/utils/retry.mjs.map +1 -0
- package/mcp/adk-docs-corpus.json +1 -1
- package/package.json +128 -63
- package/{runtime-DyD9oQjH.js → runtime-MFFcJrRv.js} +6 -2
- package/runtime-MFFcJrRv.js.map +1 -0
- package/{runtime-CDIZwCT0.mjs → runtime-j92CNi5z.mjs} +6 -2
- package/runtime-j92CNi5z.mjs.map +1 -0
- package/skills/adk-assembly/SKILL.md +2 -2
- package/{spooled_artifact-CHvDDYGA.js → spooled_artifact-B8gIIn9h.js} +4 -4
- package/{spooled_artifact-CHvDDYGA.js.map → spooled_artifact-B8gIIn9h.js.map} +1 -1
- package/{spooled_artifact-D-JrpY4W.mjs → spooled_artifact-CWoKUDEm.mjs} +4 -4
- package/{spooled_artifact-D-JrpY4W.mjs.map → spooled_artifact-CWoKUDEm.mjs.map} +1 -1
- package/spooled_artifact.cjs +2 -2
- package/spooled_artifact.mjs +2 -2
- package/{spooled_markdown_artifact-B4eWOfCX.mjs → spooled_markdown_artifact-CNle4jXN.mjs} +3 -3
- package/{spooled_markdown_artifact-B4eWOfCX.mjs.map → spooled_markdown_artifact-CNle4jXN.mjs.map} +1 -1
- package/{spooled_markdown_artifact-BYfPqFvk.js → spooled_markdown_artifact-DQX0RCdI.js} +3 -3
- package/{spooled_markdown_artifact-BYfPqFvk.js.map → spooled_markdown_artifact-DQX0RCdI.js.map} +1 -1
- package/{thought-DBNsR6l8.js → thought-BD6AkkOr.js} +4 -4
- package/{thought-DBNsR6l8.js.map → thought-BD6AkkOr.js.map} +1 -1
- package/{thought-D9IS11b5.mjs → thought-B_P8LiB6.mjs} +4 -4
- package/{thought-D9IS11b5.mjs.map → thought-B_P8LiB6.mjs.map} +1 -1
- package/{tool-CsYuHhiS.mjs → tool-CRZSUcdP.mjs} +3 -3
- package/{tool-CsYuHhiS.mjs.map → tool-CRZSUcdP.mjs.map} +1 -1
- package/{tool-DIHzOZiV.js → tool-CX9vNHAw.js} +3 -3
- package/{tool-DIHzOZiV.js.map → tool-CX9vNHAw.js.map} +1 -1
- package/{tool_call-CkOVOhg0.js → tool_call--7ti-frB.js} +4 -4
- package/{tool_call-CkOVOhg0.js.map → tool_call--7ti-frB.js.map} +1 -1
- package/{tool_call-Bs_Q5LOG.mjs → tool_call-BUeMuCc6.mjs} +4 -4
- package/{tool_call-Bs_Q5LOG.mjs.map → tool_call-BUeMuCc6.mjs.map} +1 -1
- package/{tool_registry-CX3ofUh9.mjs → tool_registry-BGHg6KTq.mjs} +2 -2
- package/{tool_registry-CX3ofUh9.mjs.map → tool_registry-BGHg6KTq.mjs.map} +1 -1
- package/{tool_registry-CKk5ooxm.js → tool_registry-CtCQ4Xoz.js} +2 -2
- package/{tool_registry-CKk5ooxm.js.map → tool_registry-CtCQ4Xoz.js.map} +1 -1
- package/{turn_runner-D0qGIrRI.js → turn_runner-BJTtAORU.js} +7 -6
- package/turn_runner-BJTtAORU.js.map +1 -0
- package/{turn_runner-C1-mup84.mjs → turn_runner-C02LZHjt.mjs} +8 -7
- package/turn_runner-C02LZHjt.mjs.map +1 -0
- package/turn_runner.cjs +1 -1
- package/turn_runner.mjs +1 -1
- package/runtime-CDIZwCT0.mjs.map +0 -1
- package/runtime-DyD9oQjH.js.map +0 -1
- package/turn_runner-C1-mup84.mjs.map +0 -1
- package/turn_runner-D0qGIrRI.js.map +0 -1
package/dispatch_runner.cjs
CHANGED
|
@@ -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-
|
|
3
|
+
const require_dispatch_runner = require("./dispatch_runner-CpuyATj1.js");
|
|
4
4
|
exports.DispatchRunner = require_dispatch_runner.DispatchRunner;
|
package/dispatch_runner.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as DispatchRunner } from "./dispatch_runner-
|
|
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-
|
|
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-
|
|
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-
|
|
4
|
-
const require_tool = require("./tool-
|
|
5
|
-
const require_spooled_artifact = require("./spooled_artifact-
|
|
6
|
-
const require_tool_call = require("./tool_call-
|
|
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-
|
|
2
|
-
import { t as Tool } from "./tool-
|
|
3
|
-
import { i as ArtifactTool } from "./spooled_artifact-
|
|
4
|
-
import { t as ToolCall } from "./tool_call-
|
|
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-
|
|
5
|
-
const require_thought = require("./thought-
|
|
6
|
-
const require_tool = require("./tool-
|
|
7
|
-
const require_spooled_artifact = require("./spooled_artifact-
|
|
8
|
-
const require_tool_call = require("./tool_call-
|
|
9
|
-
const require_spooled_markdown_artifact = require("./spooled_markdown_artifact-
|
|
10
|
-
const require_dispatch_runner = require("./dispatch_runner-
|
|
11
|
-
const require_turn_runner = require("./turn_runner-
|
|
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-
|
|
3
|
-
import { i as Identity, n as Message, r as Memory, t as Thought } from "./thought-
|
|
4
|
-
import { t as Tool } from "./tool-
|
|
5
|
-
import { i as ArtifactTool, r as implementsSpoolReader, t as SpooledArtifact } from "./spooled_artifact-
|
|
6
|
-
import { t as ToolCall } from "./tool_call-
|
|
7
|
-
import { n as SpooledJsonArtifact, t as SpooledMarkdownArtifact } from "./spooled_markdown_artifact-
|
|
8
|
-
import { n as DispatchContext, r as TurnContext, t as DispatchRunner } from "./dispatch_runner-
|
|
9
|
-
import { n as TurnGate, t as TurnRunner } from "./turn_runner-
|
|
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-
|
|
5
|
-
const require_runtime = require("./runtime-
|
|
6
|
-
const require_thought = require("./thought-
|
|
7
|
-
const require_tool = require("./tool-
|
|
8
|
-
const require_spooled_artifact = require("./spooled_artifact-
|
|
9
|
-
const require_common = require("./common-
|
|
10
|
-
const require_tool_call = require("./tool_call-
|
|
11
|
-
const require_spooled_markdown_artifact = require("./spooled_markdown_artifact-
|
|
12
|
-
require("./
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
4
|
-
import { i as Identity, n as Message, r as Memory, t as Thought } from "./thought-
|
|
5
|
-
import { t as Tool } from "./tool-
|
|
6
|
-
import { i as ArtifactTool, r as implementsSpoolReader, t as SpooledArtifact } from "./spooled_artifact-
|
|
7
|
-
import { n as fromWebFile, o as Retrievable, r as inMemoryMediaReader, t as fromFetch } from "./common-
|
|
8
|
-
import { a as mediaReaderSchema, i as implementsMediaReader, n as Media, r as isMedia, t as ToolCall } from "./tool_call-
|
|
9
|
-
import { n as SpooledJsonArtifact, t as SpooledMarkdownArtifact } from "./spooled_markdown_artifact-
|
|
10
|
-
import "./
|
|
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
|
|
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-
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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`
|
|
113
|
-
*
|
|
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
|
-
/**
|
|
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}.
|
|
134
|
-
* {@link
|
|
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
|
-
/**
|
|
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"}
|