@nhtio/adk 0.1.0-master-f0aa531d

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 (297) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +3 -0
  3. package/batteries/index.d.ts +28 -0
  4. package/batteries/llm/index.d.ts +11 -0
  5. package/batteries/llm/openai_chat_completions/adapter.cjs +916 -0
  6. package/batteries/llm/openai_chat_completions/adapter.cjs.map +1 -0
  7. package/batteries/llm/openai_chat_completions/adapter.d.ts +101 -0
  8. package/batteries/llm/openai_chat_completions/adapter.mjs +914 -0
  9. package/batteries/llm/openai_chat_completions/adapter.mjs.map +1 -0
  10. package/batteries/llm/openai_chat_completions/exceptions.cjs +89 -0
  11. package/batteries/llm/openai_chat_completions/exceptions.cjs.map +1 -0
  12. package/batteries/llm/openai_chat_completions/exceptions.d.ts +97 -0
  13. package/batteries/llm/openai_chat_completions/exceptions.mjs +81 -0
  14. package/batteries/llm/openai_chat_completions/exceptions.mjs.map +1 -0
  15. package/batteries/llm/openai_chat_completions/helpers.cjs +819 -0
  16. package/batteries/llm/openai_chat_completions/helpers.cjs.map +1 -0
  17. package/batteries/llm/openai_chat_completions/helpers.d.ts +233 -0
  18. package/batteries/llm/openai_chat_completions/helpers.mjs +783 -0
  19. package/batteries/llm/openai_chat_completions/helpers.mjs.map +1 -0
  20. package/batteries/llm/openai_chat_completions/index.d.ts +27 -0
  21. package/batteries/llm/openai_chat_completions/types.cjs +1 -0
  22. package/batteries/llm/openai_chat_completions/types.d.ts +524 -0
  23. package/batteries/llm/openai_chat_completions/types.mjs +0 -0
  24. package/batteries/llm/openai_chat_completions/validation.cjs +190 -0
  25. package/batteries/llm/openai_chat_completions/validation.cjs.map +1 -0
  26. package/batteries/llm/openai_chat_completions/validation.d.ts +31 -0
  27. package/batteries/llm/openai_chat_completions/validation.mjs +187 -0
  28. package/batteries/llm/openai_chat_completions/validation.mjs.map +1 -0
  29. package/batteries/llm/openai_chat_completions.cjs +51 -0
  30. package/batteries/llm/openai_chat_completions.mjs +5 -0
  31. package/batteries/llm/webllm_chat_completions/adapter.cjs +658 -0
  32. package/batteries/llm/webllm_chat_completions/adapter.cjs.map +1 -0
  33. package/batteries/llm/webllm_chat_completions/adapter.d.ts +103 -0
  34. package/batteries/llm/webllm_chat_completions/adapter.mjs +656 -0
  35. package/batteries/llm/webllm_chat_completions/adapter.mjs.map +1 -0
  36. package/batteries/llm/webllm_chat_completions/exceptions.cjs +70 -0
  37. package/batteries/llm/webllm_chat_completions/exceptions.cjs.map +1 -0
  38. package/batteries/llm/webllm_chat_completions/exceptions.d.ts +74 -0
  39. package/batteries/llm/webllm_chat_completions/exceptions.mjs +65 -0
  40. package/batteries/llm/webllm_chat_completions/exceptions.mjs.map +1 -0
  41. package/batteries/llm/webllm_chat_completions/helpers.cjs +38 -0
  42. package/batteries/llm/webllm_chat_completions/helpers.d.ts +6 -0
  43. package/batteries/llm/webllm_chat_completions/helpers.mjs +2 -0
  44. package/batteries/llm/webllm_chat_completions/index.d.ts +25 -0
  45. package/batteries/llm/webllm_chat_completions/types.d.ts +31 -0
  46. package/batteries/llm/webllm_chat_completions/validation.cjs +115 -0
  47. package/batteries/llm/webllm_chat_completions/validation.cjs.map +1 -0
  48. package/batteries/llm/webllm_chat_completions/validation.d.ts +8 -0
  49. package/batteries/llm/webllm_chat_completions/validation.mjs +112 -0
  50. package/batteries/llm/webllm_chat_completions/validation.mjs.map +1 -0
  51. package/batteries/llm/webllm_chat_completions.cjs +50 -0
  52. package/batteries/llm/webllm_chat_completions.mjs +6 -0
  53. package/batteries/llm.cjs +63 -0
  54. package/batteries/llm.mjs +10 -0
  55. package/batteries/storage/flydrive/index.d.ts +167 -0
  56. package/batteries/storage/flydrive.cjs +249 -0
  57. package/batteries/storage/flydrive.cjs.map +1 -0
  58. package/batteries/storage/flydrive.mjs +249 -0
  59. package/batteries/storage/flydrive.mjs.map +1 -0
  60. package/batteries/storage/in_memory/index.d.ts +106 -0
  61. package/batteries/storage/in_memory.cjs +121 -0
  62. package/batteries/storage/in_memory.cjs.map +1 -0
  63. package/batteries/storage/in_memory.mjs +119 -0
  64. package/batteries/storage/in_memory.mjs.map +1 -0
  65. package/batteries/storage/index.d.ts +18 -0
  66. package/batteries/storage/opfs/index.d.ts +299 -0
  67. package/batteries/storage/opfs.cjs +368 -0
  68. package/batteries/storage/opfs.cjs.map +1 -0
  69. package/batteries/storage/opfs.mjs +366 -0
  70. package/batteries/storage/opfs.mjs.map +1 -0
  71. package/batteries/storage.cjs +4 -0
  72. package/batteries/storage.mjs +2 -0
  73. package/batteries/tools/color/index.d.ts +37 -0
  74. package/batteries/tools/color.cjs +659 -0
  75. package/batteries/tools/color.cjs.map +1 -0
  76. package/batteries/tools/color.mjs +655 -0
  77. package/batteries/tools/color.mjs.map +1 -0
  78. package/batteries/tools/comparison/index.d.ts +29 -0
  79. package/batteries/tools/comparison.cjs +171 -0
  80. package/batteries/tools/comparison.cjs.map +1 -0
  81. package/batteries/tools/comparison.mjs +168 -0
  82. package/batteries/tools/comparison.mjs.map +1 -0
  83. package/batteries/tools/data_structure/index.d.ts +30 -0
  84. package/batteries/tools/data_structure.cjs +270 -0
  85. package/batteries/tools/data_structure.cjs.map +1 -0
  86. package/batteries/tools/data_structure.mjs +267 -0
  87. package/batteries/tools/data_structure.mjs.map +1 -0
  88. package/batteries/tools/datetime_extended/index.d.ts +51 -0
  89. package/batteries/tools/datetime_extended.cjs +309 -0
  90. package/batteries/tools/datetime_extended.cjs.map +1 -0
  91. package/batteries/tools/datetime_extended.mjs +302 -0
  92. package/batteries/tools/datetime_extended.mjs.map +1 -0
  93. package/batteries/tools/datetime_math/index.d.ts +36 -0
  94. package/batteries/tools/datetime_math.cjs +175 -0
  95. package/batteries/tools/datetime_math.cjs.map +1 -0
  96. package/batteries/tools/datetime_math.mjs +171 -0
  97. package/batteries/tools/datetime_math.mjs.map +1 -0
  98. package/batteries/tools/encoding/index.d.ts +36 -0
  99. package/batteries/tools/encoding.cjs +156 -0
  100. package/batteries/tools/encoding.cjs.map +1 -0
  101. package/batteries/tools/encoding.mjs +152 -0
  102. package/batteries/tools/encoding.mjs.map +1 -0
  103. package/batteries/tools/formatting/index.d.ts +28 -0
  104. package/batteries/tools/formatting.cjs +120 -0
  105. package/batteries/tools/formatting.cjs.map +1 -0
  106. package/batteries/tools/formatting.mjs +117 -0
  107. package/batteries/tools/formatting.mjs.map +1 -0
  108. package/batteries/tools/geo_basics/index.d.ts +33 -0
  109. package/batteries/tools/geo_basics.cjs +136 -0
  110. package/batteries/tools/geo_basics.cjs.map +1 -0
  111. package/batteries/tools/geo_basics.mjs +132 -0
  112. package/batteries/tools/geo_basics.mjs.map +1 -0
  113. package/batteries/tools/index.d.ts +32 -0
  114. package/batteries/tools/math/index.d.ts +37 -0
  115. package/batteries/tools/math.cjs +136 -0
  116. package/batteries/tools/math.cjs.map +1 -0
  117. package/batteries/tools/math.mjs +133 -0
  118. package/batteries/tools/math.mjs.map +1 -0
  119. package/batteries/tools/memory/index.d.ts +73 -0
  120. package/batteries/tools/memory.cjs +193 -0
  121. package/batteries/tools/memory.cjs.map +1 -0
  122. package/batteries/tools/memory.mjs +187 -0
  123. package/batteries/tools/memory.mjs.map +1 -0
  124. package/batteries/tools/parsing/index.d.ts +47 -0
  125. package/batteries/tools/parsing.cjs +191 -0
  126. package/batteries/tools/parsing.cjs.map +1 -0
  127. package/batteries/tools/parsing.mjs +185 -0
  128. package/batteries/tools/parsing.mjs.map +1 -0
  129. package/batteries/tools/retrievables/index.d.ts +81 -0
  130. package/batteries/tools/retrievables.cjs +215 -0
  131. package/batteries/tools/retrievables.cjs.map +1 -0
  132. package/batteries/tools/retrievables.mjs +209 -0
  133. package/batteries/tools/retrievables.mjs.map +1 -0
  134. package/batteries/tools/standing_instructions/index.d.ts +64 -0
  135. package/batteries/tools/standing_instructions.cjs +126 -0
  136. package/batteries/tools/standing_instructions.cjs.map +1 -0
  137. package/batteries/tools/standing_instructions.mjs +121 -0
  138. package/batteries/tools/standing_instructions.mjs.map +1 -0
  139. package/batteries/tools/statistics/index.d.ts +46 -0
  140. package/batteries/tools/statistics.cjs +253 -0
  141. package/batteries/tools/statistics.cjs.map +1 -0
  142. package/batteries/tools/statistics.mjs +248 -0
  143. package/batteries/tools/statistics.mjs.map +1 -0
  144. package/batteries/tools/string_processing/index.d.ts +29 -0
  145. package/batteries/tools/string_processing.cjs +154 -0
  146. package/batteries/tools/string_processing.cjs.map +1 -0
  147. package/batteries/tools/string_processing.mjs +151 -0
  148. package/batteries/tools/string_processing.mjs.map +1 -0
  149. package/batteries/tools/structured_data/index.d.ts +34 -0
  150. package/batteries/tools/structured_data.cjs +189 -0
  151. package/batteries/tools/structured_data.cjs.map +1 -0
  152. package/batteries/tools/structured_data.mjs +185 -0
  153. package/batteries/tools/structured_data.mjs.map +1 -0
  154. package/batteries/tools/text_analysis/index.d.ts +31 -0
  155. package/batteries/tools/text_analysis.cjs +120 -0
  156. package/batteries/tools/text_analysis.cjs.map +1 -0
  157. package/batteries/tools/text_analysis.mjs +117 -0
  158. package/batteries/tools/text_analysis.mjs.map +1 -0
  159. package/batteries/tools/text_comparison/index.d.ts +28 -0
  160. package/batteries/tools/text_comparison.cjs +96 -0
  161. package/batteries/tools/text_comparison.cjs.map +1 -0
  162. package/batteries/tools/text_comparison.mjs +93 -0
  163. package/batteries/tools/text_comparison.mjs.map +1 -0
  164. package/batteries/tools/time/index.d.ts +27 -0
  165. package/batteries/tools/time.cjs +63 -0
  166. package/batteries/tools/time.cjs.map +1 -0
  167. package/batteries/tools/time.mjs +60 -0
  168. package/batteries/tools/time.mjs.map +1 -0
  169. package/batteries/tools/unit_conversion/index.d.ts +19 -0
  170. package/batteries/tools/unit_conversion.cjs +452 -0
  171. package/batteries/tools/unit_conversion.cjs.map +1 -0
  172. package/batteries/tools/unit_conversion.mjs +450 -0
  173. package/batteries/tools/unit_conversion.mjs.map +1 -0
  174. package/batteries/tools.cjs +80 -0
  175. package/batteries/tools.mjs +21 -0
  176. package/batteries.cjs +142 -0
  177. package/batteries.mjs +30 -0
  178. package/chunk-KmRHZBOW.js +35 -0
  179. package/common-DeZaonK1.mjs +208 -0
  180. package/common-DeZaonK1.mjs.map +1 -0
  181. package/common-Od8edUXU.js +232 -0
  182. package/common-Od8edUXU.js.map +1 -0
  183. package/common.cjs +31 -0
  184. package/common.d.ts +108 -0
  185. package/common.mjs +8 -0
  186. package/dispatch_runner-9j6bXHL3.mjs +1609 -0
  187. package/dispatch_runner-9j6bXHL3.mjs.map +1 -0
  188. package/dispatch_runner-CsoH0nld.js +1627 -0
  189. package/dispatch_runner-CsoH0nld.js.map +1 -0
  190. package/dispatch_runner.cjs +3 -0
  191. package/dispatch_runner.d.ts +17 -0
  192. package/dispatch_runner.mjs +2 -0
  193. package/exceptions-D5YrO9Vm.js +280 -0
  194. package/exceptions-D5YrO9Vm.js.map +1 -0
  195. package/exceptions-NrzIHw_R.mjs +244 -0
  196. package/exceptions-NrzIHw_R.mjs.map +1 -0
  197. package/exceptions.cjs +33 -0
  198. package/exceptions.d.ts +52 -0
  199. package/exceptions.mjs +3 -0
  200. package/factories.cjs +4 -0
  201. package/factories.d.ts +39 -0
  202. package/factories.mjs +2 -0
  203. package/forge.cjs +9 -0
  204. package/forge.d.ts +49 -0
  205. package/forge.mjs +5 -0
  206. package/guards.cjs +96 -0
  207. package/guards.cjs.map +1 -0
  208. package/guards.d.ts +83 -0
  209. package/guards.mjs +72 -0
  210. package/guards.mjs.map +1 -0
  211. package/index.cjs +107 -0
  212. package/index.cjs.map +1 -0
  213. package/index.d.ts +18 -0
  214. package/index.mjs +31 -0
  215. package/index.mjs.map +1 -0
  216. package/lib/classes/artifact_tool.d.ts +129 -0
  217. package/lib/classes/base_exception.d.ts +83 -0
  218. package/lib/classes/identity.d.ts +71 -0
  219. package/lib/classes/media.d.ts +326 -0
  220. package/lib/classes/memory.d.ts +72 -0
  221. package/lib/classes/message.d.ts +137 -0
  222. package/lib/classes/registry.d.ts +79 -0
  223. package/lib/classes/retrievable.d.ts +100 -0
  224. package/lib/classes/spooled_artifact.d.ts +296 -0
  225. package/lib/classes/spooled_json_artifact.d.ts +158 -0
  226. package/lib/classes/spooled_markdown_artifact.d.ts +202 -0
  227. package/lib/classes/thought.d.ts +142 -0
  228. package/lib/classes/tokenizable.d.ts +124 -0
  229. package/lib/classes/tool.d.ts +228 -0
  230. package/lib/classes/tool_call.d.ts +190 -0
  231. package/lib/classes/tool_registry.d.ts +159 -0
  232. package/lib/classes/turn_gate.d.ts +109 -0
  233. package/lib/contracts/dispatch_context.d.ts +345 -0
  234. package/lib/contracts/media_reader.d.ts +60 -0
  235. package/lib/contracts/spool_reader.d.ts +80 -0
  236. package/lib/contracts/spooled_artifact_constructor.d.ts +38 -0
  237. package/lib/contracts/turn_runner_config.d.ts +101 -0
  238. package/lib/contracts/turn_runner_context.d.ts +267 -0
  239. package/lib/dispatch_runner.d.ts +98 -0
  240. package/lib/exceptions/runtime.d.ts +370 -0
  241. package/lib/helpers/media_readers.d.ts +39 -0
  242. package/lib/turn_runner.d.ts +144 -0
  243. package/lib/types/dispatch_context.d.ts +233 -0
  244. package/lib/types/dispatch_runner.d.ts +387 -0
  245. package/lib/types/turn_runner.d.ts +322 -0
  246. package/lib/utils/canonical_json.d.ts +18 -0
  247. package/lib/utils/exceptions.d.ts +78 -0
  248. package/lib/utils/guards.d.ts +32 -0
  249. package/lib/utils/validation.d.ts +77 -0
  250. package/package.json +334 -0
  251. package/runtime-BJVkrGQe.js +519 -0
  252. package/runtime-BJVkrGQe.js.map +1 -0
  253. package/runtime-CrEPIFgr.mjs +346 -0
  254. package/runtime-CrEPIFgr.mjs.map +1 -0
  255. package/skills/adk-assembly/SKILL.md +109 -0
  256. package/skills/adk-assembly/references/assembly-contract.md +66 -0
  257. package/skills/adk-assembly/references/executors-tools-pipelines-events.md +113 -0
  258. package/skills/adk-assembly/references/first-integration.md +93 -0
  259. package/skills/adk-assembly/references/storage-and-context.md +102 -0
  260. package/spooled_artifact-C5ZtGxuJ.mjs +544 -0
  261. package/spooled_artifact-C5ZtGxuJ.mjs.map +1 -0
  262. package/spooled_artifact-Cm9Te22K.js +568 -0
  263. package/spooled_artifact-Cm9Te22K.js.map +1 -0
  264. package/spooled_artifact.cjs +7 -0
  265. package/spooled_artifact.d.ts +40 -0
  266. package/spooled_artifact.mjs +3 -0
  267. package/spooled_markdown_artifact-BpUJol0W.mjs +771 -0
  268. package/spooled_markdown_artifact-BpUJol0W.mjs.map +1 -0
  269. package/spooled_markdown_artifact-RRB113sy.js +786 -0
  270. package/spooled_markdown_artifact-RRB113sy.js.map +1 -0
  271. package/thought-CDb457b4.mjs +470 -0
  272. package/thought-CDb457b4.mjs.map +1 -0
  273. package/thought-DuN2PgdO.js +494 -0
  274. package/thought-DuN2PgdO.js.map +1 -0
  275. package/tool-COSeH8I6.js +302 -0
  276. package/tool-COSeH8I6.js.map +1 -0
  277. package/tool-D2WB1EA1.mjs +296 -0
  278. package/tool-D2WB1EA1.mjs.map +1 -0
  279. package/tool_call-BKyyxGaZ.mjs +578 -0
  280. package/tool_call-BKyyxGaZ.mjs.map +1 -0
  281. package/tool_call-DFgzcVcU.js +608 -0
  282. package/tool_call-DFgzcVcU.js.map +1 -0
  283. package/tool_registry-Dkfprsck.js +641 -0
  284. package/tool_registry-Dkfprsck.js.map +1 -0
  285. package/tool_registry-DqLOyGyG.mjs +592 -0
  286. package/tool_registry-DqLOyGyG.mjs.map +1 -0
  287. package/turn_runner-CMm2BHdX.js +615 -0
  288. package/turn_runner-CMm2BHdX.js.map +1 -0
  289. package/turn_runner-y7eyEcJH.mjs +603 -0
  290. package/turn_runner-y7eyEcJH.mjs.map +1 -0
  291. package/turn_runner.cjs +3 -0
  292. package/turn_runner.d.ts +21 -0
  293. package/turn_runner.mjs +2 -0
  294. package/types.cjs +1 -0
  295. package/types.d.ts +56 -0
  296. package/types.mjs +0 -0
  297. package/vite-env.d.ts +23 -0
@@ -0,0 +1,568 @@
1
+ require("./chunk-KmRHZBOW.js");
2
+ const require_exceptions = require("./exceptions-D5YrO9Vm.js");
3
+ const require_tool_registry = require("./tool_registry-Dkfprsck.js");
4
+ const require_runtime = require("./runtime-BJVkrGQe.js");
5
+ const require_tool = require("./tool-COSeH8I6.js");
6
+ let _nhtio_validation = require("@nhtio/validation");
7
+ //#region src/lib/classes/artifact_tool.ts
8
+ /**
9
+ * Validator schema for a {@link RawArtifactTool}.
10
+ *
11
+ * @remarks
12
+ * Mirrors the base tool schema but explicitly forbids `artifactConstructor` — the entire
13
+ * point of `ArtifactTool` is to opt out of `SpooledArtifact` wrapping.
14
+ */
15
+ var rawArtifactToolSchema = _nhtio_validation.validator.object({
16
+ name: _nhtio_validation.validator.string().required(),
17
+ description: _nhtio_validation.validator.string().required(),
18
+ inputSchema: _nhtio_validation.validator.any().custom((value, helpers) => {
19
+ if (_nhtio_validation.validator.isSchema(value) && value.type === "object") return value;
20
+ return helpers.error("any.invalid");
21
+ }).required(),
22
+ handler: _nhtio_validation.validator.function().required(),
23
+ meta: _nhtio_validation.validator.object().pattern(_nhtio_validation.validator.string(), _nhtio_validation.validator.any()).default({}),
24
+ ephemeral: _nhtio_validation.validator.boolean().default(false),
25
+ trusted: _nhtio_validation.validator.boolean().default(false),
26
+ onCollision: _nhtio_validation.validator.string().valid("throw", "replace", "keep").default("throw"),
27
+ artifactConstructor: _nhtio_validation.validator.any().forbidden()
28
+ });
29
+ /**
30
+ * A {@link @nhtio/adk!Tool} subclass whose handler return value is wrapped directly in a
31
+ * {@link @nhtio/adk!Tokenizable} (not a {@link @nhtio/adk!SpooledArtifact}) when it
32
+ * lands on `ToolCall.results`.
33
+ *
34
+ * @remarks
35
+ * `ArtifactTool` is the canonical producer for **forged artifact-query tools** — the tools
36
+ * `SpooledArtifact.forgeTools(ctx)` emits so the model can `head`, `tail`, `grep`, `json_get`,
37
+ * `md_headings` (etc.) an artifact that is already in `ctx.turnToolCalls`.
38
+ *
39
+ * The difference from {@link @nhtio/adk!Tool} is structural, not stylistic:
40
+ *
41
+ * - A normal `Tool`'s handler returns bytes the ADK wraps in a fresh `SpooledArtifact`.
42
+ * The artifact lands in `ToolCall.results`, joins `ctx.turnToolCalls`, and is itself a
43
+ * first-class queryable artifact in the turn.
44
+ * - An `ArtifactTool`'s handler returns a string that is **already the model-visible answer**
45
+ * to a query against an existing artifact. The ADK wraps it in a `Tokenizable` rather
46
+ * than a `SpooledArtifact`; nothing new is queryable on its own. Subsequent
47
+ * `forgeTools(ctx)` calls exclude `ToolCall`s produced by an `ArtifactTool` from the
48
+ * `callId` enum (via the `ToolCall.fromArtifactTool` marker) — this is the structural fix
49
+ * that breaks the otherwise-recursive grep-on-the-grep-result loop.
50
+ *
51
+ * Consumers who want to build their own artifact-query tools (e.g. for a domain-specific
52
+ * spooled subclass not shipped by the ADK) should extend or instantiate this class.
53
+ */
54
+ var ArtifactTool = class ArtifactTool extends require_tool.Tool {
55
+ /**
56
+ * Validator schema that accepts a {@link RawArtifactTool} object.
57
+ *
58
+ * @remarks
59
+ * Differs from {@link @nhtio/adk!Tool.schema} by forbidding `artifactConstructor` — wrapping is
60
+ * exactly the thing this class opts out of. Typed identically to {@link @nhtio/adk!Tool.schema} so the
61
+ * subclass relationship `class ArtifactTool extends Tool` remains structurally sound; the
62
+ * runtime validation rules still differ as declared by `rawArtifactToolSchema`.
63
+ */
64
+ static schema = rawArtifactToolSchema;
65
+ /**
66
+ * Returns `true` if `value` is an {@link ArtifactTool} instance.
67
+ *
68
+ * @remarks
69
+ * Uses {@link @nhtio/adk!isInstanceOf} for cross-realm safety — `instanceof` would fail for instances
70
+ * created in a different module copy or VM context.
71
+ *
72
+ * @param value - The value to test.
73
+ * @returns `true` when `value` is an {@link ArtifactTool} instance.
74
+ */
75
+ static isArtifactTool(value) {
76
+ return require_tool_registry.isInstanceOf(value, "ArtifactTool", ArtifactTool);
77
+ }
78
+ /**
79
+ * @param raw - Raw tool input validated against {@link ArtifactTool.schema}.
80
+ *
81
+ * @throws {@link @nhtio/adk!E_INVALID_INITIAL_TOOL_VALUE} when `raw` does not satisfy
82
+ * {@link ArtifactTool.schema} (most commonly, when `artifactConstructor` is supplied — it is
83
+ * explicitly forbidden on this class) or when the base {@link @nhtio/adk!Tool} constructor rejects the
84
+ * input for any reason.
85
+ */
86
+ constructor(raw) {
87
+ try {
88
+ require_exceptions.validateOrThrow(rawArtifactToolSchema, raw, true);
89
+ } catch (err) {
90
+ if (require_tool_registry.isInstanceOf(err, "ValidationException", require_exceptions.ValidationException)) throw new require_runtime.E_INVALID_INITIAL_TOOL_VALUE({ cause: err });
91
+ throw err;
92
+ }
93
+ super(raw);
94
+ }
95
+ };
96
+ //#endregion
97
+ //#region src/lib/contracts/spool_reader.ts
98
+ /**
99
+ * Validator schema used to validate a {@link SpoolReader} value.
100
+ *
101
+ * @remarks
102
+ * Because `SpoolReader` is a structural interface with no associated constructor, validation is
103
+ * duck-typed: the value must be an object, class instance, or function with `line`, `byteLength`,
104
+ * and `lineCount` present as callable properties. Arity is not enforced — implementations may add
105
+ * optional parameters beyond the contract.
106
+ */
107
+ var spoolReaderSchema = _nhtio_validation.validator.any().custom((value, helpers) => {
108
+ if (value !== null && value !== void 0 && typeof value.line === "function" && typeof value.byteLength === "function" && typeof value.lineCount === "function" && typeof value.readAll === "function") return value;
109
+ return helpers.error("any.invalid");
110
+ });
111
+ /**
112
+ * Returns `true` if `value` implements the {@link SpoolReader} interface.
113
+ *
114
+ * @remarks
115
+ * Duck-typed: checks that `value` is non-null with `line`, `byteLength`, `lineCount`, and
116
+ * `readAll` as callable functions. Does not use `instanceof` — there is no `SpoolReader`
117
+ * constructor.
118
+ *
119
+ * @param value - The value to test.
120
+ * @returns `true` when `value` conforms to the {@link SpoolReader} interface.
121
+ */
122
+ var implementsSpoolReader = (value) => {
123
+ return require_exceptions.passesSchema(spoolReaderSchema, value);
124
+ };
125
+ //#endregion
126
+ //#region src/lib/classes/spooled_artifact.ts
127
+ var noArgsSchema = _nhtio_validation.validator.object({});
128
+ /**
129
+ * Default serialiser for {@link @nhtio/adk!ArtifactTool} handler return values when a descriptor does not
130
+ * provide its own. Exported for reuse by subclass `forgeTools` overrides.
131
+ *
132
+ * @param result - The artifact-method return value.
133
+ * @returns A string suitable for inclusion in an LLM tool-call response.
134
+ */
135
+ var defaultSerialise = (result) => {
136
+ if (result === void 0) return "(undefined)";
137
+ if (result === null) return "null";
138
+ if (typeof result === "string") return result;
139
+ if (Array.isArray(result) && result.every((r) => typeof r === "string")) {
140
+ if (result.length === 0) return "(empty list)";
141
+ return result.join("\n");
142
+ }
143
+ if (typeof result === "number") return String(result);
144
+ return JSON.stringify(result, null, 2);
145
+ };
146
+ var baseToolMethods = Object.freeze([
147
+ {
148
+ name: "artifact_head",
149
+ method: "head",
150
+ description: "Return the first n lines of a spooled artifact produced earlier in this turn. Takes a callId selecting which artifact to inspect.",
151
+ argsSchema: _nhtio_validation.validator.object({ n: _nhtio_validation.validator.number().integer().min(1).default(10).description("Number of lines to return.") })
152
+ },
153
+ {
154
+ name: "artifact_tail",
155
+ method: "tail",
156
+ description: "Return the last n lines of a spooled artifact produced earlier in this turn. Takes a callId selecting which artifact to inspect.",
157
+ argsSchema: _nhtio_validation.validator.object({ n: _nhtio_validation.validator.number().integer().min(1).default(10).description("Number of lines to return.") })
158
+ },
159
+ {
160
+ name: "artifact_grep",
161
+ method: "grep",
162
+ description: "Return all lines matching a regular expression pattern from a spooled artifact produced earlier in this turn.",
163
+ argsSchema: _nhtio_validation.validator.object({
164
+ pattern: _nhtio_validation.validator.string().required().description("Regular expression pattern, applied via JavaScript RegExp."),
165
+ flags: _nhtio_validation.validator.string().pattern(/^[imsu]*$/).optional().description("Optional RegExp flags. Allowed: 'i' (case-insensitive), 'm' (multiline), 's' (dotAll), 'u' (unicode). 'g' and 'y' are disallowed because per-line matching is stateless.")
166
+ })
167
+ },
168
+ {
169
+ name: "artifact_cat",
170
+ method: "cat",
171
+ description: "Return lines from a spooled artifact produced earlier in this turn, optionally bounded to a range.",
172
+ argsSchema: _nhtio_validation.validator.object({
173
+ start: _nhtio_validation.validator.number().integer().min(0).optional().description("Start line (inclusive)."),
174
+ end: _nhtio_validation.validator.number().integer().min(0).optional().description("End line (exclusive).")
175
+ })
176
+ },
177
+ {
178
+ name: "artifact_byte_length",
179
+ method: "byteLength",
180
+ description: "Return the total byte length of a spooled artifact produced earlier in this turn.",
181
+ argsSchema: noArgsSchema
182
+ },
183
+ {
184
+ name: "artifact_line_count",
185
+ method: "lineCount",
186
+ description: "Return the total line count of a spooled artifact produced earlier in this turn.",
187
+ argsSchema: noArgsSchema
188
+ },
189
+ {
190
+ name: "artifact_estimate_tokens",
191
+ method: "estimateTokens",
192
+ description: "Estimate the total token count of a spooled artifact produced earlier in this turn under a named encoding.",
193
+ argsSchema: _nhtio_validation.validator.object({ encoding: _nhtio_validation.validator.string().valid(...require_tool_registry.TokenEncoding).required().description("Token encoding identifier.") })
194
+ }
195
+ ]);
196
+ /**
197
+ * A lazy, line-oriented view over an arbitrary backing store.
198
+ *
199
+ * @remarks
200
+ * All I/O methods are async to remain compatible with both in-memory and streaming
201
+ * {@link @nhtio/adk!SpoolReader} implementations. Token estimation delegates to
202
+ * {@link @nhtio/adk!Tokenizable.estimateTokens} — the same backends used elsewhere in the ADK.
203
+ *
204
+ * The class is read-only by design: mutation of the underlying data is the responsibility of the
205
+ * producer that created the {@link @nhtio/adk!SpoolReader}, not the consumer reading from this artifact.
206
+ */
207
+ var SpooledArtifact = class SpooledArtifact {
208
+ /**
209
+ * The set of artifact-query methods this class surfaces via {@link SpooledArtifact.forgeTools}.
210
+ *
211
+ * @remarks
212
+ * The base set covers the generic line-oriented operations every artifact supports:
213
+ * `artifact_head`, `artifact_tail`, `artifact_grep`, `artifact_cat`, `artifact_byte_length`,
214
+ * `artifact_line_count`, `artifact_estimate_tokens`. Each `toolMethods` array lists **only**
215
+ * its own class's descriptors — subclasses do not concatenate inherited descriptors. The
216
+ * subclass instead overrides {@link SpooledArtifact.forgeTools} to merge the base registry
217
+ * (produced by `SpooledArtifact.forgeTools(ctx)`) with its own — see
218
+ * {@link @nhtio/adk!SpooledJsonArtifact.forgeTools} and {@link @nhtio/adk!SpooledMarkdownArtifact.forgeTools} for
219
+ * the canonical shape and the pattern downstream consumers should follow when building
220
+ * their own `SpooledArtifact` subclasses.
221
+ *
222
+ * Tool names are absolute (not subclass-prefixed). Forged tools carry
223
+ * `Tool.onCollision = 'replace'` so merging multiple subclasses' `forgeTools()` outputs is
224
+ * silent — every same-named tool dispatches the same method on whatever artifact the
225
+ * `callId` resolves to, so the overlap is behaviourally interchangeable.
226
+ *
227
+ * Frozen at module load.
228
+ */
229
+ static toolMethods = baseToolMethods;
230
+ #reader;
231
+ /**
232
+ * @param reader - The backing store to read from.
233
+ * @throws {@link @nhtio/adk!E_NOT_A_SPOOL_READER} when `reader` does not implement {@link @nhtio/adk!SpoolReader}.
234
+ */
235
+ constructor(reader) {
236
+ if (!implementsSpoolReader(reader)) throw new require_runtime.E_NOT_A_SPOOL_READER();
237
+ this.#reader = reader;
238
+ }
239
+ /**
240
+ * Returns the line at the given 0-based index, or `undefined` when out of range.
241
+ *
242
+ * @remarks
243
+ * Protected so subclasses can scan the backing store line-by-line without allocating
244
+ * intermediate arrays. Delegates directly to the {@link @nhtio/adk!SpoolReader}.
245
+ *
246
+ * @param index - 0-based line index.
247
+ * @returns The raw line string, or `undefined` when out of range.
248
+ */
249
+ async line(index) {
250
+ return this.#reader.line(index);
251
+ }
252
+ /**
253
+ * Returns `true` if `value` is a {@link SpooledArtifact} instance (including any subclass).
254
+ *
255
+ * @remarks
256
+ * Uses the cross-realm-safe {@link @nhtio/adk!isInstanceOf} guard: `instanceof` first, then
257
+ * `Symbol.hasInstance`, then a `constructor.name` fallback. Subclass instances (e.g.
258
+ * {@link @nhtio/adk!SpooledJsonArtifact}) satisfy this guard because `instanceof` walks the prototype
259
+ * chain. The fallbacks handle the dual-module-copy case where two distinct `SpooledArtifact`
260
+ * classes coexist in the same realm (e.g. one bundled into a downstream library, one in the
261
+ * consumer's `node_modules`).
262
+ *
263
+ * @param value - The value to test.
264
+ * @returns `true` when `value` is a {@link SpooledArtifact} instance.
265
+ */
266
+ static isSpooledArtifact(value) {
267
+ return require_tool_registry.isInstanceOf(value, "SpooledArtifact", SpooledArtifact);
268
+ }
269
+ /**
270
+ * Returns `true` if `value` is a constructor function whose prototype chain includes
271
+ * {@link SpooledArtifact} (including `SpooledArtifact` itself).
272
+ *
273
+ * @remarks
274
+ * Used by {@link @nhtio/adk!Tool} to validate the optional `artifactConstructor` field. Performs an
275
+ * `instanceof`-based check on the prototype chain; falls back to a duck-type test that looks
276
+ * for the canonical SpooledArtifact instance methods on `value.prototype` for cross-realm
277
+ * safety (constructors passed from a different module copy or VM context).
278
+ *
279
+ * @param value - The value to test.
280
+ * @returns `true` when `value` is a constructor for `SpooledArtifact` or a subclass.
281
+ */
282
+ static isSpooledArtifactConstructor(value) {
283
+ if (typeof value !== "function") return false;
284
+ if (value === SpooledArtifact) return true;
285
+ const proto = value.prototype;
286
+ if (proto === void 0 || proto === null) return false;
287
+ if (require_tool_registry.isInstanceOf(proto, "SpooledArtifact", SpooledArtifact)) return true;
288
+ return [
289
+ "head",
290
+ "tail",
291
+ "grep",
292
+ "cat",
293
+ "byteLength",
294
+ "lineCount",
295
+ "estimateTokens"
296
+ ].every((m) => typeof proto[m] === "function");
297
+ }
298
+ /**
299
+ * Returns the first `n` lines of the artifact.
300
+ *
301
+ * @remarks
302
+ * If the artifact contains fewer than `n` lines, all available lines are returned. Matches the
303
+ * behaviour of POSIX `head -n`.
304
+ *
305
+ * @param n - Number of lines to return. Defaults to 10.
306
+ * @returns Array of line strings, without trailing newlines.
307
+ */
308
+ async head(n = 10) {
309
+ const count = await this.#reader.lineCount();
310
+ const limit = Math.min(n, count);
311
+ const lines = [];
312
+ for (let i = 0; i < limit; i++) {
313
+ const line = await this.#reader.line(i);
314
+ if (line !== void 0) lines.push(line);
315
+ }
316
+ return lines;
317
+ }
318
+ /**
319
+ * Returns the last `n` lines of the artifact.
320
+ *
321
+ * @remarks
322
+ * If the artifact contains fewer than `n` lines, all available lines are returned. Matches the
323
+ * behaviour of POSIX `tail -n`.
324
+ *
325
+ * @param n - Number of lines to return. Defaults to 10.
326
+ * @returns Array of line strings, without trailing newlines.
327
+ */
328
+ async tail(n = 10) {
329
+ const count = await this.#reader.lineCount();
330
+ const start = Math.max(0, count - n);
331
+ const lines = [];
332
+ for (let i = start; i < count; i++) {
333
+ const line = await this.#reader.line(i);
334
+ if (line !== void 0) lines.push(line);
335
+ }
336
+ return lines;
337
+ }
338
+ /**
339
+ * Returns all lines that match `pattern`.
340
+ *
341
+ * @remarks
342
+ * Behaves like POSIX `grep`: each line is tested against the pattern and included in the result
343
+ * when it matches. The pattern is applied as a JavaScript `RegExp`; flags (e.g. case-
344
+ * insensitivity) should be encoded in the expression itself.
345
+ *
346
+ * Stateful flags (`g`, `y`) on the supplied `RegExp` would normally cause `pattern.test()` to
347
+ * advance `lastIndex` across calls, producing skipped matches and order-dependent results. To
348
+ * keep the per-line semantics stateless, `grep` resets `pattern.lastIndex` to `0` before each
349
+ * line test. The forged `artifact_grep` tool also rejects `g` and `y` flags up-front at schema
350
+ * validation time.
351
+ *
352
+ * @param pattern - The regular expression to test each line against.
353
+ * @returns Array of matching line strings, in order.
354
+ */
355
+ async grep(pattern) {
356
+ const count = await this.#reader.lineCount();
357
+ const matches = [];
358
+ for (let i = 0; i < count; i++) {
359
+ const line = await this.#reader.line(i);
360
+ if (line !== void 0) {
361
+ pattern.lastIndex = 0;
362
+ if (pattern.test(line)) matches.push(line);
363
+ }
364
+ }
365
+ return matches;
366
+ }
367
+ /**
368
+ * Returns lines from the artifact, optionally bounded to a range.
369
+ *
370
+ * @remarks
371
+ * Without arguments, returns all lines — equivalent to POSIX `cat`. With `start` and/or `end`,
372
+ * behaves like `Array.prototype.slice`: `start` defaults to `0`, `end` defaults to the total
373
+ * line count, and only lines in `[start, end)` are fetched from the backing store. For large
374
+ * artifacts, prefer a bounded range or {@link SpooledArtifact.head} / {@link SpooledArtifact.tail}.
375
+ *
376
+ * @param start - 0-based start line index (inclusive). Defaults to `0`.
377
+ * @param end - 0-based end line index (exclusive). Defaults to `lineCount()`.
378
+ * @returns Array of line strings in the requested range.
379
+ */
380
+ async cat(start, end) {
381
+ const count = await this.#reader.lineCount();
382
+ const from = Math.max(0, start ?? 0);
383
+ const to = Math.min(count, end ?? count);
384
+ const lines = [];
385
+ for (let i = from; i < to; i++) {
386
+ const line = await this.#reader.line(i);
387
+ if (line !== void 0) lines.push(line);
388
+ }
389
+ return lines;
390
+ }
391
+ /**
392
+ * Returns the total byte length of the underlying data.
393
+ *
394
+ * @returns The byte length as reported by the {@link @nhtio/adk!SpoolReader}.
395
+ */
396
+ async byteLength() {
397
+ return this.#reader.byteLength();
398
+ }
399
+ /**
400
+ * Returns the total number of lines in the artifact.
401
+ *
402
+ * @returns The line count as reported by the {@link @nhtio/adk!SpoolReader}.
403
+ */
404
+ async lineCount() {
405
+ return this.#reader.lineCount();
406
+ }
407
+ /**
408
+ * Estimates the total token count of the artifact under `encoding`.
409
+ *
410
+ * @remarks
411
+ * Reads the full byte-faithful content via {@link SpooledArtifact.asString} (which delegates to
412
+ * {@link @nhtio/adk!SpoolReader.readAll}) and delegates to {@link @nhtio/adk!Tokenizable.estimateTokens}. The estimate
413
+ * therefore reflects the actual source bytes — including trailing newlines and non-`\n` line
414
+ * terminators that the line-based {@link SpooledArtifact.cat} view would otherwise discard or
415
+ * misrepresent.
416
+ *
417
+ * @param encoding - The encoding identifier to use for counting.
418
+ * @returns The estimated number of tokens.
419
+ */
420
+ async estimateTokens(encoding) {
421
+ const content = await this.#reader.readAll();
422
+ return require_tool_registry.Tokenizable.estimateTokens(content, encoding);
423
+ }
424
+ /**
425
+ * Returns the full artifact body as a single byte-faithful string.
426
+ *
427
+ * @remarks
428
+ * Round-trip faithful to whatever bytes the {@link @nhtio/adk!SpoolReader} was constructed over —
429
+ * preserves trailing newlines and non-`\n` line terminators that {@link SpooledArtifact.cat}
430
+ * discards via its line-based view. This is the canonical primitive for "inline the artifact
431
+ * content directly into a message" use cases.
432
+ *
433
+ * `asString()` and the static `forgeTools(ctx)` factory on each subclass are independent
434
+ * alternatives — a consumer chooses per turn whether to inline the body in a message
435
+ * (`await tc.results.asString()`) or hand the model query tools
436
+ * (`SpooledArtifact.forgeTools(ctx)`). Neither calls the other; either works with neither.
437
+ *
438
+ * @returns The full content as a single string.
439
+ */
440
+ async asString() {
441
+ return this.#reader.readAll();
442
+ }
443
+ /**
444
+ * Forges a fresh {@link @nhtio/adk!ToolRegistry} of ephemeral {@link @nhtio/adk!ArtifactTool} instances that let the
445
+ * LLM query artifacts already present in `ctx.turnToolCalls`.
446
+ *
447
+ * @remarks
448
+ * Standard subclass extension pattern — each class owns only its own `toolMethods` and its
449
+ * own `forgeTools`. The base `SpooledArtifact.forgeTools(ctx)` narrows the `callId` enum to
450
+ * any `tc.results instanceof SpooledArtifact` (so subclass instances are included — that's
451
+ * the whole point of inheritance) and dispatches the seven base methods (`head`, `tail`,
452
+ * `grep`, `cat`, `byteLength`, `lineCount`, `estimateTokens`) on the resolved artifact.
453
+ * Subclasses override `forgeTools` to call this static first and then register their own
454
+ * tools on the returned registry — see {@link @nhtio/adk!SpooledJsonArtifact.forgeTools} and
455
+ * {@link @nhtio/adk!SpooledMarkdownArtifact.forgeTools} for the canonical shape. There is no
456
+ * `requiresSubclass` field, no helper indirection, and no `this`-based class narrowing —
457
+ * just plain `instanceof ThisClass` at each subclass's own filter site.
458
+ *
459
+ * For each descriptor in this class's `toolMethods`, the factory:
460
+ *
461
+ * 1. Walks `ctx.turnToolCalls` to find `ToolCall`s whose `results instanceof SpooledArtifact`.
462
+ * `ToolCall`s flagged `fromArtifactTool === true` are excluded — they carry a
463
+ * {@link @nhtio/adk!Tokenizable}, not a `SpooledArtifact`, and including them would let the model
464
+ * `artifact_grep` on a previous `artifact_grep` result (an infinite-recursion hazard with
465
+ * no semantic value).
466
+ * 2. Returns an empty registry if no compatible callIds are found — no point shipping tools
467
+ * whose `callId` enum is empty.
468
+ * 3. Otherwise mints an {@link @nhtio/adk!ArtifactTool} with `ephemeral: true` and `onCollision: 'replace'`
469
+ * so multiple `Subclass.forgeTools(ctx)` outputs merge silently. The tool's `inputSchema`
470
+ * includes a required `callId` field with `.valid(...compatibleIds)`, plus the descriptor's
471
+ * own `argsSchema` fields.
472
+ *
473
+ * The handler resolves the artifact via `[...ctx.turnToolCalls].find(t => t.id === callId)`,
474
+ * dispatches the descriptor's method, and serialises the return value (string → as-is;
475
+ * string[] → newline-join; number → `String(n)`; otherwise `JSON.stringify(value, null, 2)`;
476
+ * `descriptor.serialise` overrides the defaults). `grep` is special-cased: the handler
477
+ * constructs `new RegExp(pattern, flags ?? '')` before invoking the artifact's `grep` method.
478
+ *
479
+ * The returned registry must be merged into the consumer's main registry and the main
480
+ * registry must be bound to `ctx` via {@link @nhtio/adk!ToolRegistry.bindContext}:
481
+ *
482
+ * ```ts
483
+ * const executor: DispatchExecutorFn = async (ctx) => {
484
+ * const forged = SpooledArtifact.forgeTools(ctx)
485
+ * const merged = ToolRegistry.merge([main, forged])
486
+ * main.bindContext(ctx)
487
+ * const result = await llm.invoke({ tools: merged.all(), ... })
488
+ * ctx.ack() // ← ephemeral cleanup fires here
489
+ * }
490
+ * ```
491
+ *
492
+ * @warning You **must** call `registry.bindContext(ctx)` on the registry hosting these tools,
493
+ * or ephemeral cleanup will not run and the `callId` enum in subsequent executor calls will
494
+ * be stale (excluding new tool calls produced in the meantime).
495
+ *
496
+ * @param ctx - The execution context whose `turnToolCalls` snapshot defines the `callId` enum.
497
+ * @returns A fresh `ToolRegistry`. Empty when `turnToolCalls` contains no compatible artifacts.
498
+ *
499
+ * @see {@link @nhtio/adk!ToolRegistry.bindContext}
500
+ * @see {@link @nhtio/adk!ToolRegistry.merge}
501
+ * @see {@link @nhtio/adk!DispatchContext.onAck}
502
+ */
503
+ static forgeTools(ctx) {
504
+ const requires = SpooledArtifact;
505
+ const compatibleIds = [...ctx.turnToolCalls].filter((tc) => !tc.fromArtifactTool && require_tool_registry.isInstanceOf(tc.results, requires.name, requires)).map((tc) => tc.id);
506
+ if (compatibleIds.length === 0) return new require_tool_registry.ToolRegistry([]);
507
+ const tools = [];
508
+ for (const descriptor of this.toolMethods) {
509
+ const callIdSchema = _nhtio_validation.validator.string().valid(...compatibleIds).required().description("ToolCall id of the artifact to query.");
510
+ const argsSchema = (descriptor.argsSchema ?? noArgsSchema).append({ callId: callIdSchema });
511
+ const serialise = descriptor.serialise ?? defaultSerialise;
512
+ const tool = new ArtifactTool({
513
+ name: descriptor.name,
514
+ description: descriptor.description,
515
+ inputSchema: argsSchema,
516
+ ephemeral: true,
517
+ onCollision: "replace",
518
+ handler: async (rawArgs, ctxInner) => {
519
+ const args = rawArgs;
520
+ const tc = [...ctxInner.turnToolCalls].find((t) => t.id === args.callId);
521
+ if (!tc) return `Error: no tool call with id ${args.callId} in this turn`;
522
+ const artifact = tc.results;
523
+ if (!require_tool_registry.isInstanceOf(artifact, requires.name, requires)) return `Error: tool call ${args.callId} results are not a ${requires.name} instance`;
524
+ const methodArgs = [];
525
+ if (descriptor.method === "grep") {
526
+ const pattern = args.pattern;
527
+ const flags = args.flags ?? "";
528
+ methodArgs.push(new RegExp(pattern, flags));
529
+ } else if (descriptor.method === "head" || descriptor.method === "tail") methodArgs.push(args.n ?? 10);
530
+ else if (descriptor.method === "cat") methodArgs.push(args.start, args.end);
531
+ else if (descriptor.method === "estimateTokens") methodArgs.push(args.encoding);
532
+ const fn = artifact[descriptor.method];
533
+ if (typeof fn !== "function") return `Error: artifact has no method ${descriptor.method}`;
534
+ return serialise(await Promise.resolve(fn.apply(artifact, methodArgs)));
535
+ }
536
+ });
537
+ tools.push(tool);
538
+ }
539
+ return new require_tool_registry.ToolRegistry(tools);
540
+ }
541
+ };
542
+ //#endregion
543
+ Object.defineProperty(exports, "ArtifactTool", {
544
+ enumerable: true,
545
+ get: function() {
546
+ return ArtifactTool;
547
+ }
548
+ });
549
+ Object.defineProperty(exports, "SpooledArtifact", {
550
+ enumerable: true,
551
+ get: function() {
552
+ return SpooledArtifact;
553
+ }
554
+ });
555
+ Object.defineProperty(exports, "defaultSerialise", {
556
+ enumerable: true,
557
+ get: function() {
558
+ return defaultSerialise;
559
+ }
560
+ });
561
+ Object.defineProperty(exports, "implementsSpoolReader", {
562
+ enumerable: true,
563
+ get: function() {
564
+ return implementsSpoolReader;
565
+ }
566
+ });
567
+
568
+ //# sourceMappingURL=spooled_artifact-Cm9Te22K.js.map