@nhtio/adk 0.1.0-master-2a4e1bd2 → 0.1.0-master-cd595e6f

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 (413) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/artifact_methods-CJDQ5Lv-.mjs +1 -0
  3. package/artifact_methods-D6k_82r3.js +1 -0
  4. package/batteries/artifacts/ecmascript.cjs +1 -1
  5. package/batteries/artifacts/ecmascript.mjs +1 -1
  6. package/batteries/artifacts/toon.cjs +1 -1
  7. package/batteries/artifacts/toon.mjs +1 -1
  8. package/batteries/artifacts/xml.cjs +1 -1
  9. package/batteries/artifacts/xml.mjs +1 -1
  10. package/batteries/artifacts/yaml.cjs +1 -1
  11. package/batteries/artifacts/yaml.mjs +1 -1
  12. package/batteries/artifacts.cjs +4 -4
  13. package/batteries/artifacts.mjs +4 -4
  14. package/batteries/dev-tools/forge.cjs +3 -3
  15. package/batteries/dev-tools/forge.mjs +3 -3
  16. package/batteries/dev-tools.cjs +2 -2
  17. package/batteries/dev-tools.mjs +2 -2
  18. package/batteries/encoding.cjs +7 -7
  19. package/batteries/encoding.mjs +7 -7
  20. package/batteries/generation/gemini/adapter.cjs +1 -1
  21. package/batteries/generation/gemini/adapter.mjs +1 -1
  22. package/batteries/generation/local_diffusion/adapter.cjs +1 -1
  23. package/batteries/generation/local_diffusion/adapter.mjs +1 -1
  24. package/batteries/generation/openai/adapter.cjs +1 -1
  25. package/batteries/generation/openai/adapter.mjs +1 -1
  26. package/batteries/isolation/browser.d.ts +1 -1
  27. package/batteries/isolation/child_process/transport.d.ts +2 -2
  28. package/batteries/isolation/child_process.cjs +4 -4
  29. package/batteries/isolation/child_process.cjs.map +1 -1
  30. package/batteries/isolation/child_process.mjs +4 -4
  31. package/batteries/isolation/child_process.mjs.map +1 -1
  32. package/batteries/isolation/codec.d.ts +2 -2
  33. package/batteries/isolation/crash_policy.d.ts +1 -1
  34. package/batteries/isolation/isolate_function.d.ts +2 -2
  35. package/batteries/isolation/protocol.d.ts +4 -4
  36. package/batteries/isolation/serve.d.ts +2 -2
  37. package/batteries/isolation/types.d.ts +4 -4
  38. package/batteries/isolation.cjs +1 -1
  39. package/batteries/isolation.mjs +1 -1
  40. package/batteries/llm/anthropic_messages/adapter.cjs +6 -6
  41. package/batteries/llm/anthropic_messages/adapter.cjs.map +1 -1
  42. package/batteries/llm/anthropic_messages/adapter.mjs +6 -6
  43. package/batteries/llm/anthropic_messages/adapter.mjs.map +1 -1
  44. package/batteries/llm/anthropic_messages/count_tokens.cjs +1 -1
  45. package/batteries/llm/anthropic_messages/count_tokens.mjs +1 -1
  46. package/batteries/llm/anthropic_messages/helpers.cjs +3 -3
  47. package/batteries/llm/anthropic_messages/helpers.mjs +3 -3
  48. package/batteries/llm/anthropic_messages/types.d.ts +2 -2
  49. package/batteries/llm/anthropic_messages/validation.cjs +3 -3
  50. package/batteries/llm/anthropic_messages/validation.cjs.map +1 -1
  51. package/batteries/llm/anthropic_messages/validation.mjs +3 -3
  52. package/batteries/llm/anthropic_messages/validation.mjs.map +1 -1
  53. package/batteries/llm/anthropic_messages.cjs +2 -2
  54. package/batteries/llm/anthropic_messages.mjs +2 -2
  55. package/batteries/llm/bedrock_converse/adapter.cjs +29 -7
  56. package/batteries/llm/bedrock_converse/adapter.cjs.map +1 -1
  57. package/batteries/llm/bedrock_converse/adapter.mjs +30 -8
  58. package/batteries/llm/bedrock_converse/adapter.mjs.map +1 -1
  59. package/batteries/llm/bedrock_converse/exceptions.cjs +3 -0
  60. package/batteries/llm/bedrock_converse/exceptions.cjs.map +1 -1
  61. package/batteries/llm/bedrock_converse/exceptions.d.ts +6 -0
  62. package/batteries/llm/bedrock_converse/exceptions.mjs +3 -1
  63. package/batteries/llm/bedrock_converse/exceptions.mjs.map +1 -1
  64. package/batteries/llm/bedrock_converse/helpers.cjs +1 -1
  65. package/batteries/llm/bedrock_converse/helpers.mjs +1 -1
  66. package/batteries/llm/bedrock_converse/types.d.ts +6 -2
  67. package/batteries/llm/bedrock_converse/validation.cjs +7 -1
  68. package/batteries/llm/bedrock_converse/validation.cjs.map +1 -1
  69. package/batteries/llm/bedrock_converse/validation.mjs +7 -1
  70. package/batteries/llm/bedrock_converse/validation.mjs.map +1 -1
  71. package/batteries/llm/bedrock_converse.cjs +2 -2
  72. package/batteries/llm/bedrock_converse.mjs +2 -2
  73. package/batteries/llm/claude_code_cli/adapter.cjs +6 -6
  74. package/batteries/llm/claude_code_cli/adapter.cjs.map +1 -1
  75. package/batteries/llm/claude_code_cli/adapter.mjs +6 -6
  76. package/batteries/llm/claude_code_cli/adapter.mjs.map +1 -1
  77. package/batteries/llm/claude_code_cli/helpers.cjs +3 -3
  78. package/batteries/llm/claude_code_cli/helpers.mjs +3 -3
  79. package/batteries/llm/claude_code_cli/types.d.ts +3 -2
  80. package/batteries/llm/claude_code_cli/validation.cjs +3 -3
  81. package/batteries/llm/claude_code_cli/validation.cjs.map +1 -1
  82. package/batteries/llm/claude_code_cli/validation.mjs +3 -3
  83. package/batteries/llm/claude_code_cli/validation.mjs.map +1 -1
  84. package/batteries/llm/claude_code_cli.cjs +1 -1
  85. package/batteries/llm/claude_code_cli.mjs +1 -1
  86. package/batteries/llm/gemini_generate_content/adapter.cjs +29 -7
  87. package/batteries/llm/gemini_generate_content/adapter.cjs.map +1 -1
  88. package/batteries/llm/gemini_generate_content/adapter.mjs +30 -8
  89. package/batteries/llm/gemini_generate_content/adapter.mjs.map +1 -1
  90. package/batteries/llm/gemini_generate_content/exceptions.cjs +3 -0
  91. package/batteries/llm/gemini_generate_content/exceptions.cjs.map +1 -1
  92. package/batteries/llm/gemini_generate_content/exceptions.d.ts +6 -0
  93. package/batteries/llm/gemini_generate_content/exceptions.mjs +3 -1
  94. package/batteries/llm/gemini_generate_content/exceptions.mjs.map +1 -1
  95. package/batteries/llm/gemini_generate_content/helpers.cjs +1 -1
  96. package/batteries/llm/gemini_generate_content/helpers.mjs +1 -1
  97. package/batteries/llm/gemini_generate_content/types.d.ts +7 -3
  98. package/batteries/llm/gemini_generate_content/validation.cjs +11 -2
  99. package/batteries/llm/gemini_generate_content/validation.cjs.map +1 -1
  100. package/batteries/llm/gemini_generate_content/validation.mjs +11 -2
  101. package/batteries/llm/gemini_generate_content/validation.mjs.map +1 -1
  102. package/batteries/llm/gemini_generate_content.cjs +1 -1
  103. package/batteries/llm/gemini_generate_content.mjs +1 -1
  104. package/batteries/llm/litert_lm/adapter.cjs +6 -6
  105. package/batteries/llm/litert_lm/adapter.cjs.map +1 -1
  106. package/batteries/llm/litert_lm/adapter.mjs +6 -6
  107. package/batteries/llm/litert_lm/adapter.mjs.map +1 -1
  108. package/batteries/llm/litert_lm/helpers.cjs +3 -3
  109. package/batteries/llm/litert_lm/helpers.mjs +3 -3
  110. package/batteries/llm/litert_lm/types.d.ts +2 -2
  111. package/batteries/llm/litert_lm/validation.cjs +3 -3
  112. package/batteries/llm/litert_lm/validation.cjs.map +1 -1
  113. package/batteries/llm/litert_lm/validation.mjs +3 -3
  114. package/batteries/llm/litert_lm/validation.mjs.map +1 -1
  115. package/batteries/llm/litert_lm.cjs +1 -1
  116. package/batteries/llm/litert_lm.mjs +1 -1
  117. package/batteries/llm/ollama/adapter.cjs +6 -6
  118. package/batteries/llm/ollama/adapter.cjs.map +1 -1
  119. package/batteries/llm/ollama/adapter.mjs +6 -6
  120. package/batteries/llm/ollama/adapter.mjs.map +1 -1
  121. package/batteries/llm/ollama/helpers.cjs +4 -4
  122. package/batteries/llm/ollama/helpers.mjs +4 -4
  123. package/batteries/llm/ollama/types.d.ts +2 -2
  124. package/batteries/llm/ollama/validation.cjs +3 -3
  125. package/batteries/llm/ollama/validation.cjs.map +1 -1
  126. package/batteries/llm/ollama/validation.mjs +3 -3
  127. package/batteries/llm/ollama/validation.mjs.map +1 -1
  128. package/batteries/llm/ollama.cjs +2 -2
  129. package/batteries/llm/ollama.mjs +2 -2
  130. package/batteries/llm/openai_chat_completions/adapter.cjs +6 -6
  131. package/batteries/llm/openai_chat_completions/adapter.cjs.map +1 -1
  132. package/batteries/llm/openai_chat_completions/adapter.mjs +6 -6
  133. package/batteries/llm/openai_chat_completions/adapter.mjs.map +1 -1
  134. package/batteries/llm/openai_chat_completions/helpers.cjs +4 -4
  135. package/batteries/llm/openai_chat_completions/helpers.mjs +4 -4
  136. package/batteries/llm/openai_chat_completions/types.d.ts +2 -2
  137. package/batteries/llm/openai_chat_completions/validation.cjs +3 -3
  138. package/batteries/llm/openai_chat_completions/validation.cjs.map +1 -1
  139. package/batteries/llm/openai_chat_completions/validation.mjs +3 -3
  140. package/batteries/llm/openai_chat_completions/validation.mjs.map +1 -1
  141. package/batteries/llm/openai_chat_completions.cjs +2 -2
  142. package/batteries/llm/openai_chat_completions.mjs +2 -2
  143. package/batteries/llm/openai_responses/adapter.cjs +6 -6
  144. package/batteries/llm/openai_responses/adapter.cjs.map +1 -1
  145. package/batteries/llm/openai_responses/adapter.mjs +6 -6
  146. package/batteries/llm/openai_responses/adapter.mjs.map +1 -1
  147. package/batteries/llm/openai_responses/helpers.cjs +3 -3
  148. package/batteries/llm/openai_responses/helpers.mjs +3 -3
  149. package/batteries/llm/openai_responses/types.d.ts +2 -2
  150. package/batteries/llm/openai_responses/validation.cjs +3 -3
  151. package/batteries/llm/openai_responses/validation.cjs.map +1 -1
  152. package/batteries/llm/openai_responses/validation.mjs +3 -3
  153. package/batteries/llm/openai_responses/validation.mjs.map +1 -1
  154. package/batteries/llm/openai_responses.cjs +2 -2
  155. package/batteries/llm/openai_responses.mjs +2 -2
  156. package/batteries/llm/transformers_js/adapter.cjs +6 -6
  157. package/batteries/llm/transformers_js/adapter.cjs.map +1 -1
  158. package/batteries/llm/transformers_js/adapter.mjs +6 -6
  159. package/batteries/llm/transformers_js/adapter.mjs.map +1 -1
  160. package/batteries/llm/transformers_js/helpers.cjs +3 -3
  161. package/batteries/llm/transformers_js/helpers.mjs +3 -3
  162. package/batteries/llm/transformers_js/types.d.ts +2 -2
  163. package/batteries/llm/transformers_js/validation.cjs +3 -3
  164. package/batteries/llm/transformers_js/validation.cjs.map +1 -1
  165. package/batteries/llm/transformers_js/validation.mjs +3 -3
  166. package/batteries/llm/transformers_js/validation.mjs.map +1 -1
  167. package/batteries/llm/transformers_js.cjs +1 -1
  168. package/batteries/llm/transformers_js.mjs +1 -1
  169. package/batteries/llm/webllm_chat_completions/adapter.cjs +6 -6
  170. package/batteries/llm/webllm_chat_completions/adapter.cjs.map +1 -1
  171. package/batteries/llm/webllm_chat_completions/adapter.mjs +6 -6
  172. package/batteries/llm/webllm_chat_completions/adapter.mjs.map +1 -1
  173. package/batteries/llm/webllm_chat_completions/helpers.cjs +1 -1
  174. package/batteries/llm/webllm_chat_completions/helpers.mjs +1 -1
  175. package/batteries/llm/webllm_chat_completions/validation.cjs +3 -3
  176. package/batteries/llm/webllm_chat_completions/validation.cjs.map +1 -1
  177. package/batteries/llm/webllm_chat_completions/validation.mjs +3 -3
  178. package/batteries/llm/webllm_chat_completions/validation.mjs.map +1 -1
  179. package/batteries/llm/webllm_chat_completions.cjs +2 -2
  180. package/batteries/llm/webllm_chat_completions.mjs +2 -2
  181. package/batteries/llm.cjs +2 -2
  182. package/batteries/llm.mjs +2 -2
  183. package/batteries/media/builder.d.ts +3 -0
  184. package/batteries/media/contracts.cjs.map +1 -1
  185. package/batteries/media/contracts.d.ts +40 -1
  186. package/batteries/media/contracts.mjs.map +1 -1
  187. package/batteries/media/engines/sharp.cjs +36 -2
  188. package/batteries/media/engines/sharp.cjs.map +1 -1
  189. package/batteries/media/engines/sharp.mjs +36 -2
  190. package/batteries/media/engines/sharp.mjs.map +1 -1
  191. package/batteries/media/forge.cjs +5 -5
  192. package/batteries/media/forge.mjs +5 -5
  193. package/batteries/media/index.d.ts +1 -1
  194. package/batteries/media/lint.cjs +3 -2
  195. package/batteries/media/lint.cjs.map +1 -1
  196. package/batteries/media/lint.mjs +3 -2
  197. package/batteries/media/lint.mjs.map +1 -1
  198. package/batteries/media.cjs +66 -2
  199. package/batteries/media.cjs.map +1 -1
  200. package/batteries/media.mjs +66 -2
  201. package/batteries/media.mjs.map +1 -1
  202. package/batteries/orchestration/conformance.cjs +123 -74
  203. package/batteries/orchestration/conformance.cjs.map +1 -1
  204. package/batteries/orchestration/conformance.d.ts +10 -8
  205. package/batteries/orchestration/conformance.mjs +54 -5
  206. package/batteries/orchestration/conformance.mjs.map +1 -1
  207. package/batteries/orchestration/dispatch_reasoner.cjs +4 -4
  208. package/batteries/orchestration/dispatch_reasoner.mjs +4 -4
  209. package/batteries/orchestration/executor.cjs +2 -2
  210. package/batteries/orchestration/executor.mjs +2 -2
  211. package/batteries/orchestration/forge.cjs +4 -4
  212. package/batteries/orchestration/forge.mjs +4 -4
  213. package/batteries/orchestration/validation.cjs +2 -2
  214. package/batteries/orchestration/validation.mjs +2 -2
  215. package/batteries/orchestration.cjs +4 -4
  216. package/batteries/orchestration.mjs +4 -4
  217. package/batteries/sandbox/contracts/policy_enforcer.d.ts +13 -1
  218. package/batteries/sandbox/js/compartment.d.ts +7 -2
  219. package/batteries/sandbox/js/exceptions.d.ts +4 -0
  220. package/batteries/sandbox/js/runner.d.ts +1 -1
  221. package/batteries/sandbox/js/service.d.ts +1 -1
  222. package/batteries/sandbox/js/ses_contracts.d.ts +4 -3
  223. package/batteries/sandbox/js.cjs +17 -8
  224. package/batteries/sandbox/js.cjs.map +1 -1
  225. package/batteries/sandbox/js.mjs +17 -9
  226. package/batteries/sandbox/js.mjs.map +1 -1
  227. package/batteries/sandbox/manager.d.ts +4 -3
  228. package/batteries/sandbox/node/srt_enforcer.d.ts +1 -1
  229. package/batteries/sandbox/node.cjs +36 -12
  230. package/batteries/sandbox/node.cjs.map +1 -1
  231. package/batteries/sandbox/node.mjs +36 -12
  232. package/batteries/sandbox/node.mjs.map +1 -1
  233. package/batteries/sandbox/tools.cjs +1 -1
  234. package/batteries/sandbox/tools.mjs +1 -1
  235. package/batteries/sandbox/types.d.ts +10 -1
  236. package/batteries/sandbox.cjs +27 -9
  237. package/batteries/sandbox.cjs.map +1 -1
  238. package/batteries/sandbox.mjs +28 -11
  239. package/batteries/sandbox.mjs.map +1 -1
  240. package/batteries/skills.cjs +9 -9
  241. package/batteries/skills.mjs +9 -9
  242. package/batteries/tools/_shared.cjs +1 -1
  243. package/batteries/tools/_shared.mjs +1 -1
  244. package/batteries/tools/color.cjs +2 -2
  245. package/batteries/tools/color.mjs +2 -2
  246. package/batteries/tools/comparison.cjs +2 -2
  247. package/batteries/tools/comparison.mjs +2 -2
  248. package/batteries/tools/data_structure.cjs +2 -2
  249. package/batteries/tools/data_structure.mjs +2 -2
  250. package/batteries/tools/datetime_extended.cjs +3 -3
  251. package/batteries/tools/datetime_extended.mjs +3 -3
  252. package/batteries/tools/datetime_math.cjs +3 -3
  253. package/batteries/tools/datetime_math.mjs +3 -3
  254. package/batteries/tools/encoding.cjs +2 -2
  255. package/batteries/tools/encoding.mjs +2 -2
  256. package/batteries/tools/formatting.cjs +2 -2
  257. package/batteries/tools/formatting.mjs +2 -2
  258. package/batteries/tools/geo_basics.cjs +2 -2
  259. package/batteries/tools/geo_basics.mjs +2 -2
  260. package/batteries/tools/math.cjs +2 -2
  261. package/batteries/tools/math.mjs +2 -2
  262. package/batteries/tools/memory.cjs +5 -5
  263. package/batteries/tools/memory.mjs +5 -5
  264. package/batteries/tools/parsing.cjs +3 -3
  265. package/batteries/tools/parsing.mjs +3 -3
  266. package/batteries/tools/retrievables.cjs +5 -5
  267. package/batteries/tools/retrievables.mjs +5 -5
  268. package/batteries/tools/scrapper.cjs +1 -1
  269. package/batteries/tools/scrapper.mjs +1 -1
  270. package/batteries/tools/searxng.cjs +1 -1
  271. package/batteries/tools/searxng.mjs +1 -1
  272. package/batteries/tools/standing_instructions.cjs +3 -3
  273. package/batteries/tools/standing_instructions.mjs +3 -3
  274. package/batteries/tools/statistics.cjs +3 -3
  275. package/batteries/tools/statistics.mjs +3 -3
  276. package/batteries/tools/string_processing.cjs +2 -2
  277. package/batteries/tools/string_processing.mjs +2 -2
  278. package/batteries/tools/structured_data.cjs +2 -2
  279. package/batteries/tools/structured_data.mjs +2 -2
  280. package/batteries/tools/text_analysis.cjs +3 -3
  281. package/batteries/tools/text_analysis.mjs +3 -3
  282. package/batteries/tools/text_comparison.cjs +2 -2
  283. package/batteries/tools/text_comparison.mjs +2 -2
  284. package/batteries/tools/time.cjs +3 -3
  285. package/batteries/tools/time.mjs +3 -3
  286. package/batteries/tools/unit_conversion.cjs +2 -2
  287. package/batteries/tools/unit_conversion.mjs +2 -2
  288. package/batteries/tools.cjs +2 -2
  289. package/batteries/tools.mjs +2 -2
  290. package/batteries/validation.cjs +5 -5
  291. package/batteries/validation.mjs +5 -5
  292. package/batteries/vector/conformance/index.d.ts +11 -16
  293. package/batteries/vector/conformance.cjs +107 -36
  294. package/batteries/vector/conformance.cjs.map +1 -1
  295. package/batteries/vector/conformance.mjs +84 -13
  296. package/batteries/vector/conformance.mjs.map +1 -1
  297. package/batteries/vector/retrievable.cjs +1 -1
  298. package/batteries/vector/retrievable.mjs +1 -1
  299. package/batteries.cjs +5 -5
  300. package/batteries.mjs +5 -5
  301. package/{chat_common-DbbIESdo.mjs → chat_common-CmKV5Dz4.mjs} +2 -2
  302. package/{chat_common-DbbIESdo.mjs.map → chat_common-CmKV5Dz4.mjs.map} +1 -1
  303. package/{chat_common-B3O3zz-i.js → chat_common-Dpan9moo.js} +2 -2
  304. package/{chat_common-B3O3zz-i.js.map → chat_common-Dpan9moo.js.map} +1 -1
  305. package/{common-v9Jo9M5k.mjs → common-BpdHIpQE.mjs} +7 -7
  306. package/{common-v9Jo9M5k.mjs.map → common-BpdHIpQE.mjs.map} +1 -1
  307. package/{common-BV3HGeLj.js → common-H44Ik9ou.js} +7 -7
  308. package/{common-BV3HGeLj.js.map → common-H44Ik9ou.js.map} +1 -1
  309. package/common.cjs +7 -7
  310. package/common.mjs +7 -7
  311. package/{dispatch_runner-CbNyqSMy.mjs → dispatch_runner-BZDXUe0G.mjs} +5 -5
  312. package/{dispatch_runner-CbNyqSMy.mjs.map → dispatch_runner-BZDXUe0G.mjs.map} +1 -1
  313. package/{dispatch_runner-Bl3Xwebu.js → dispatch_runner-CKhm-scw.js} +5 -5
  314. package/{dispatch_runner-Bl3Xwebu.js.map → dispatch_runner-CKhm-scw.js.map} +1 -1
  315. package/dispatch_runner.cjs +1 -1
  316. package/dispatch_runner.mjs +1 -1
  317. package/{ecmascript-BSnvyY8T.js → ecmascript-CCtgamDh.js} +3 -3
  318. package/{ecmascript-BSnvyY8T.js.map → ecmascript-CCtgamDh.js.map} +1 -1
  319. package/{ecmascript-CZ7_YKfZ.mjs → ecmascript-DcmUQ9Jx.mjs} +3 -3
  320. package/{ecmascript-CZ7_YKfZ.mjs.map → ecmascript-DcmUQ9Jx.mjs.map} +1 -1
  321. package/eslint.cjs +1 -1
  322. package/eslint.mjs +1 -1
  323. package/exceptions.cjs +1 -1
  324. package/exceptions.mjs +1 -1
  325. package/forge.cjs +2 -2
  326. package/forge.mjs +2 -2
  327. package/guards.cjs +7 -7
  328. package/guards.mjs +7 -7
  329. package/{helpers-CDmLDBq5.mjs → helpers-BH7HTtkD.mjs} +3 -3
  330. package/{helpers-CDmLDBq5.mjs.map → helpers-BH7HTtkD.mjs.map} +1 -1
  331. package/{helpers-Tvvwpx1M.js → helpers-CEjjkXso.js} +3 -3
  332. package/{helpers-Tvvwpx1M.js.map → helpers-CEjjkXso.js.map} +1 -1
  333. package/index.cjs +10 -10
  334. package/index.mjs +10 -10
  335. package/{isolation-BQCTQYZ_.js → isolation-7Jrcucgc.js} +11 -11
  336. package/isolation-7Jrcucgc.js.map +1 -0
  337. package/{isolation-7xbkc12r.mjs → isolation-CO0NiK8R.mjs} +11 -11
  338. package/isolation-CO0NiK8R.mjs.map +1 -0
  339. package/lib/classes/tokenizable.d.ts +2 -3
  340. package/mcp/adk-docs-corpus.json +2 -2
  341. package/package.json +469 -469
  342. package/{retrievable-C5dXuDhD.js → retrievable-BTwjmPnl.js} +3 -3
  343. package/{retrievable-C5dXuDhD.js.map → retrievable-BTwjmPnl.js.map} +1 -1
  344. package/{retrievable-gl_TIHnX.mjs → retrievable-CXTAUuuv.mjs} +3 -3
  345. package/{retrievable-gl_TIHnX.mjs.map → retrievable-CXTAUuuv.mjs.map} +1 -1
  346. package/{scrapper-DD6-_2u-.js → scrapper-CJexXXK-.js} +4 -4
  347. package/{scrapper-DD6-_2u-.js.map → scrapper-CJexXXK-.js.map} +1 -1
  348. package/{scrapper-u_orpxIB.mjs → scrapper-DiQ5FfDL.mjs} +4 -4
  349. package/{scrapper-u_orpxIB.mjs.map → scrapper-DiQ5FfDL.mjs.map} +1 -1
  350. package/{searxng-fVdJUCK2.mjs → searxng-BFTJ6rTE.mjs} +4 -4
  351. package/{searxng-fVdJUCK2.mjs.map → searxng-BFTJ6rTE.mjs.map} +1 -1
  352. package/{searxng-C7GK0Nrz.js → searxng-DzlGZG4V.js} +4 -4
  353. package/{searxng-C7GK0Nrz.js.map → searxng-DzlGZG4V.js.map} +1 -1
  354. package/server.json +2 -2
  355. package/skills/adk-assembly/SKILL.md +2 -2
  356. package/{spooled_artifact-DriNQRj7.js → spooled_artifact-BpcesRBv.js} +384 -384
  357. package/spooled_artifact-BpcesRBv.js.map +1 -0
  358. package/{spooled_artifact-BkueYJhR.mjs → spooled_artifact-Bw_7swIp.mjs} +385 -385
  359. package/spooled_artifact-Bw_7swIp.mjs.map +1 -0
  360. package/spooled_artifact.cjs +2 -2
  361. package/spooled_artifact.mjs +2 -2
  362. package/{spooled_markdown_artifact-CfHRZUkl.mjs → spooled_markdown_artifact-vd6eNtIP.mjs} +3 -3
  363. package/{spooled_markdown_artifact-CfHRZUkl.mjs.map → spooled_markdown_artifact-vd6eNtIP.mjs.map} +1 -1
  364. package/{spooled_markdown_artifact-C_VkCDhF.js → spooled_markdown_artifact-wJPnE8Ij.js} +3 -3
  365. package/{spooled_markdown_artifact-C_VkCDhF.js.map → spooled_markdown_artifact-wJPnE8Ij.js.map} +1 -1
  366. package/{thought-B8JAi3-W.mjs → thought-BE1KGEhV.mjs} +3 -3
  367. package/{thought-B8JAi3-W.mjs.map → thought-BE1KGEhV.mjs.map} +1 -1
  368. package/{thought--fRgOwTP.js → thought-bS7O9O5H.js} +3 -3
  369. package/{thought--fRgOwTP.js.map → thought-bS7O9O5H.js.map} +1 -1
  370. package/{tokenizable-CWW7iSrD.js → tokenizable-BMZuGWRd.js} +35 -29
  371. package/tokenizable-BMZuGWRd.js.map +1 -0
  372. package/{tokenizable-DLMP68ZV.mjs → tokenizable-VB4Av8GF.mjs} +36 -30
  373. package/tokenizable-VB4Av8GF.mjs.map +1 -0
  374. package/{tool_call-CPjyvkm4.mjs → tool_call-Cfaj-6zK.mjs} +4 -4
  375. package/{tool_call-CPjyvkm4.mjs.map → tool_call-Cfaj-6zK.mjs.map} +1 -1
  376. package/{tool_call-DgqVwL5n.js → tool_call-Fs_Uh5wQ.js} +4 -4
  377. package/{tool_call-DgqVwL5n.js.map → tool_call-Fs_Uh5wQ.js.map} +1 -1
  378. package/{tools-BmLzkvNr.mjs → tools-B3_8C78Q.mjs} +6 -6
  379. package/{tools-BmLzkvNr.mjs.map → tools-B3_8C78Q.mjs.map} +1 -1
  380. package/{tools-DmcIe2Cb.js → tools-CqOcmHR8.js} +6 -6
  381. package/{tools-DmcIe2Cb.js.map → tools-CqOcmHR8.js.map} +1 -1
  382. package/{toon-BvTQsKdN.mjs → toon-BSlr88px.mjs} +5 -5
  383. package/{toon-BvTQsKdN.mjs.map → toon-BSlr88px.mjs.map} +1 -1
  384. package/{toon-B05eKx-q.js → toon-D71tkyI3.js} +5 -5
  385. package/{toon-B05eKx-q.js.map → toon-D71tkyI3.js.map} +1 -1
  386. package/{turn_runner-DEGCvfVZ.mjs → turn_runner-BHHD6h77.mjs} +5 -5
  387. package/{turn_runner-DEGCvfVZ.mjs.map → turn_runner-BHHD6h77.mjs.map} +1 -1
  388. package/{turn_runner-DT8TseR4.js → turn_runner-DhLI7OTH.js} +5 -5
  389. package/{turn_runner-DT8TseR4.js.map → turn_runner-DhLI7OTH.js.map} +1 -1
  390. package/turn_runner.cjs +1 -1
  391. package/turn_runner.mjs +1 -1
  392. package/types-D6X_aUIb.mjs.map +1 -1
  393. package/types-DrSosVaM.js.map +1 -1
  394. package/{validate-lzy9nG_E.mjs → validate-Bi7FGjoq.mjs} +13 -1
  395. package/{validate-lzy9nG_E.mjs.map → validate-Bi7FGjoq.mjs.map} +1 -1
  396. package/{validate-CdOS7S2u.js → validate-CkQI-48O.js} +13 -1
  397. package/{validate-CdOS7S2u.js.map → validate-CkQI-48O.js.map} +1 -1
  398. package/{xml-DDTIMpY3.js → xml-BeNvlifb.js} +5 -5
  399. package/{xml-DDTIMpY3.js.map → xml-BeNvlifb.js.map} +1 -1
  400. package/{xml-VhJ4NrMB.mjs → xml-vyCZZiF_.mjs} +5 -5
  401. package/{xml-VhJ4NrMB.mjs.map → xml-vyCZZiF_.mjs.map} +1 -1
  402. package/{yaml-Cx16IYJq.js → yaml-DhLLa2cj.js} +5 -5
  403. package/{yaml-Cx16IYJq.js.map → yaml-DhLLa2cj.js.map} +1 -1
  404. package/{yaml-Du4wFGzL.mjs → yaml-Dtz0Bd7J.mjs} +5 -5
  405. package/{yaml-Du4wFGzL.mjs.map → yaml-Dtz0Bd7J.mjs.map} +1 -1
  406. package/artifact_methods-BMCahBLn.mjs +0 -1
  407. package/artifact_methods-f_bSy4kX.js +0 -1
  408. package/isolation-7xbkc12r.mjs.map +0 -1
  409. package/isolation-BQCTQYZ_.js.map +0 -1
  410. package/spooled_artifact-BkueYJhR.mjs.map +0 -1
  411. package/spooled_artifact-DriNQRj7.js.map +0 -1
  412. package/tokenizable-CWW7iSrD.js.map +0 -1
  413. package/tokenizable-DLMP68ZV.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("./chunk-Cek0wNdY.js");
3
- const require_dispatch_runner = require("./dispatch_runner-Bl3Xwebu.js");
3
+ const require_dispatch_runner = require("./dispatch_runner-CKhm-scw.js");
4
4
  exports.DispatchRunner = require_dispatch_runner.DispatchRunner;
@@ -1,2 +1,2 @@
1
- import { t as DispatchRunner } from "./dispatch_runner-CbNyqSMy.mjs";
1
+ import { t as DispatchRunner } from "./dispatch_runner-BZDXUe0G.mjs";
2
2
  export { DispatchRunner };
@@ -1,8 +1,8 @@
1
1
  const require_exceptions = require("./exceptions-DrHnAGQz.js");
2
2
  const require_guards = require("./guards-05Uq3J4M.js");
3
- const require_spooled_artifact = require("./spooled_artifact-DriNQRj7.js");
3
+ const require_spooled_artifact = require("./spooled_artifact-BpcesRBv.js");
4
+ require("./common-H44Ik9ou.js");
4
5
  require("./factories.cjs");
5
- require("./common-BV3HGeLj.js");
6
6
  require("./guards.cjs");
7
7
  require("./spooled_artifact.cjs");
8
8
  let _nhtio_validation = require("@nhtio/validation");
@@ -779,4 +779,4 @@ Object.defineProperty(exports, "SpooledEcmaScriptArtifact", {
779
779
  }
780
780
  });
781
781
 
782
- //# sourceMappingURL=ecmascript-BSnvyY8T.js.map
782
+ //# sourceMappingURL=ecmascript-CCtgamDh.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ecmascript-BSnvyY8T.js","names":["#fileName","#scriptKind","#inferScriptKind","#typeScriptPromise","#loadTypeScript","#resolveSourceFile","#sourceFile","#getMembersFromNode","#getMembersFromInterfaceNode","#findTopLevelDeclaration","#findNestedMember","#extractSignatureText"],"sources":["../src/batteries/artifacts/ecmascript/exceptions.ts","../src/batteries/artifacts/ecmascript/index.ts"],"sourcesContent":["/**\n * Battery-scoped exceptions for the EcmaScript artifact battery.\n *\n * @remarks\n * Internal sibling of the `@nhtio/adk/batteries/artifacts/ecmascript` entry — re-exported from\n * the battery's own barrel per the battery-scoped-exceptions rule. These are the typed errors the\n * battery throws when loading or configuring its TypeScript compiler peer dependency.\n */\n\nimport { createException } from '@nhtio/adk/factories'\n\n/**\n * Thrown when the TypeScript peer dependency fails to load.\n *\n * @remarks\n * The battery requires typescript as an optional peer. This exception surfaces when the\n * dynamic import fails, typically because the package is not installed or cannot be resolved.\n * The message template includes the package name, a description of its purpose, the underlying\n * error, and the exact install command, so the consumer sees a complete, actionable message\n * regardless of call site.\n */\nexport const E_TYPESCRIPT_PEER_MISSING = createException<[string]>(\n 'E_TYPESCRIPT_PEER_MISSING',\n 'the ecmascript battery could not load its peer dependency \"typescript\" (needed for EcmaScript artifact queries): %s — install it (pnpm add typescript)',\n 'E_TYPESCRIPT_PEER_MISSING',\n 500\n)\n","/**\n * @module @nhtio/adk/batteries/artifacts/ecmascript\n *\n * Provides `SpooledEcmaScriptArtifact`, a structured query interface for JavaScript and\n * TypeScript source files.\n *\n * @remarks\n * Parse source code via the TypeScript compiler API to enable structural queries:\n * - `artifact_es_symbols` — top-level declarations (functions, classes, interfaces, types)\n * - `artifact_es_imports` — import declarations and their source modules\n * - `artifact_es_exports` — export declarations and re-exports\n * - `artifact_es_outline` — nested member index (class methods/properties, interface members)\n * - `artifact_es_signature` — declaration signature text (parameters, return types)\n * - `artifact_es_jsdoc` — JSDoc comments attached to declarations\n * - `artifact_es_references` — syntactic scan for identifier usage (not semantic)\n *\n * **Decoding note:** `decode()` on a `SpooledEcmaScriptArtifact` throws until\n * `registerArtifactEncodables()` has run. `encode()` requires no setup.\n */\n\nimport { validator } from '@nhtio/validation'\nimport { E_TYPESCRIPT_PEER_MISSING } from './exceptions'\nimport { isError, isInstanceOf } from '@nhtio/adk/guards'\nimport { ArtifactTool, ToolRegistry, resolveSpoolReader, ReaderDescriptor } from '@nhtio/adk/common'\nimport {\n SpooledArtifact,\n collectArtifactCompatibleIds,\n defaultSerialise,\n resolveArtifactById,\n} from '@nhtio/adk/spooled_artifact'\n\n/**\n * Well-known @nhtio/encoder contract keys, resolved via the global symbol registry\n * to avoid a hard dependency on the optional @nhtio/encoder peer.\n */\nconst ENCODE_METHOD: unique symbol = Symbol.for('@nhtio/encoder:toEncoded')\nconst DECODE_METHOD: unique symbol = Symbol.for('@nhtio/encoder:fromEncoded')\nimport type { SourceFile } from 'typescript'\nimport type { DispatchContext, SpoolReader, ToolMethodDescriptor } from '@nhtio/adk/types'\n\n/** Snapshot payload for the encoder contract; the encoder treats it as opaque. */\ntype AdkEncodableSnapshot = unknown\n\n/**\n * A top-level declaration (function, class, interface, type alias, enum, or binding).\n *\n * @remarks\n * Line numbers are 0-based. `startLine` is the line containing the declaration keyword or\n * identifier. `endLine` is the 0-based index of the last line belonging to this declaration\n * (inclusive).\n */\nexport interface EcmaScriptSymbol {\n /** Declaration kind: `'function'`, `'class'`, `'interface'`, `'type'`, `'enum'`, or `'const'`/`'let'`/`'var'`. */\n kind: string\n /** The declared name. */\n name: string\n /** Whether this declaration is exported. */\n exported: boolean\n /** 0-based line of the first line of this declaration. */\n startLine: number\n /** 0-based line of the last line of this declaration (inclusive). */\n endLine: number\n}\n\n/**\n * An import declaration.\n *\n * @remarks\n * Line numbers are 0-based. The `named` array contains all imported identifiers from a named\n * import; `default` contains the default import name (if any); `namespace` contains the\n * namespace import name (if `import * as`). `typeOnly` indicates whether this is a\n * `import type` declaration.\n */\nexport interface EcmaScriptImport {\n /** The module specifier (e.g., `'@nhtio/adk/common'` or `'./utils'`). */\n moduleSpecifier: string\n /** Array of named imports (empty if none). */\n named: string[]\n /** The default import name, or undefined. */\n default?: string\n /** The namespace import name (for `import *`), or undefined. */\n namespace?: string\n /** True for `import type` declarations. */\n typeOnly: boolean\n /** 0-based line of this import statement. */\n line: number\n}\n\n/**\n * An export declaration or re-export.\n *\n * @remarks\n * Includes named exports, default exports, re-exports (`export * from`), and re-export named\n * members. When `moduleSpecifier` is present, this is a re-export; otherwise it re-exports\n * locally-declared members.\n */\nexport interface EcmaScriptExport {\n /** 0-based line of this export statement. */\n line: number\n /** The module specifier for re-exports (e.g., `'./utils'`), or undefined for local exports. */\n moduleSpecifier?: string\n /** Array of named exports (empty if this is `export default` or `export * from`). */\n named: string[]\n /** True for `export default`. */\n isDefault: boolean\n /** True for `export * from`. */\n isNamespaceReExport: boolean\n /** True for `export type` declarations. */\n isTypeOnly: boolean\n}\n\n/**\n * A class or interface member in the outline.\n */\nexport interface OutlineMember {\n /** The member name. */\n name: string\n /** The member kind: `'method'`, `'property'`, `'accessor'`, or `'signature'`. */\n kind: string\n /** 0-based line of this member. */\n startLine: number\n /** 0-based line of the last line of this member (inclusive). */\n endLine: number\n}\n\n/**\n * An entry in the structural outline (class or interface with its members).\n */\nexport interface OutlineEntry {\n /** The container kind: `'class'` or `'interface'`. */\n kind: 'class' | 'interface'\n /** The container name. */\n name: string\n /** 0-based line of the container declaration. */\n startLine: number\n /** 0-based line of the last line of this container (inclusive). */\n endLine: number\n /** Array of members (methods, properties, accessors). */\n members: OutlineMember[]\n}\n\n/**\n * The location of an identifier reference.\n */\nexport interface IdentifierReference {\n /** 0-based line where this identifier appears. */\n line: number\n /** 0-based column where this identifier starts. */\n column: number\n}\n\n/**\n * A {@link @nhtio/adk!SpooledArtifact} specialisation for EcmaScript (JavaScript and TypeScript)\n * source files.\n *\n * @remarks\n * Parses source code syntactically (no type checker) using the TypeScript compiler API, enabling\n * structural queries without materialising the full file into memory.\n *\n * The parser automatically infers the script kind (`.js`, `.ts`, `.jsx`, `.tsx`) from the\n * `fileName` when provided; defaults to `ts` when omitted (it parses the widest grammar).\n *\n * All parsing errors are non-fatal — TypeScript's parser is error-tolerant and produces a\n * partial tree. Diagnostics are not surfaced by the query methods.\n */\nexport class SpooledEcmaScriptArtifact extends SpooledArtifact {\n #sourceFile: SourceFile | undefined\n #fileName: string | undefined\n #scriptKind: 'js' | 'jsx' | 'ts' | 'tsx'\n\n /**\n * @param reader - The backing store to read from.\n * @param options - Optional configuration.\n * @param options.fileName - The source file name. When provided, script kind is inferred from\n * the extension (`.mts`/`.cts`/`.ts` → `'ts'`, `.mjs`/`.cjs`/`.js` → `'js'`, `.tsx` → `'tsx'`,\n * `.jsx` → `'jsx'`). Defaults to `undefined`.\n * @param options.scriptKind - Explicit script kind override. Defaults to `'ts'` when not\n * provided and cannot be inferred from `fileName`.\n */\n constructor(\n reader: SpoolReader,\n options?: {\n fileName?: string\n scriptKind?: 'js' | 'jsx' | 'ts' | 'tsx'\n }\n ) {\n super(reader)\n this.#fileName = options?.fileName\n this.#scriptKind = options?.scriptKind ?? this.#inferScriptKind(options?.fileName) ?? 'ts'\n }\n\n /**\n * Returns `true` if `value` is a {@link SpooledEcmaScriptArtifact} instance.\n *\n * @remarks\n * Uses the cross-realm-safe {@link @nhtio/adk!isInstanceOf} guard. Safe against the\n * dual-module-copy case.\n */\n public static isSpooledEcmaScriptArtifact(value: unknown): value is SpooledEcmaScriptArtifact {\n return isInstanceOf(value, 'SpooledEcmaScriptArtifact', SpooledEcmaScriptArtifact)\n }\n\n /**\n * The EcmaScript-specific artifact-query descriptors this class adds.\n *\n * @remarks\n * Lists seven descriptors; the base seven (`artifact_head`, etc.) are forged separately.\n */\n public static toolMethods: ReadonlyArray<ToolMethodDescriptor> = Object.freeze([\n {\n name: 'artifact_es_symbols',\n method: 'es_symbols',\n description:\n 'Return every top-level declaration (function, class, interface, type, enum, const/let/var) from an EcmaScript artifact produced earlier in this turn. Optionally filter by declaration kind.',\n argsSchema: validator.object({\n kind: validator\n .string()\n .optional()\n .allow('')\n .description(\n 'Optional declaration kind filter (e.g., \"function\", \"class\", \"interface\"). Empty string or omitted means no filter.'\n ),\n }),\n },\n {\n name: 'artifact_es_imports',\n method: 'es_imports',\n description:\n 'Return every import declaration from an EcmaScript artifact produced earlier in this turn, including default imports, named imports, namespace imports, and type-only imports.',\n argsSchema: validator.object({}),\n },\n {\n name: 'artifact_es_exports',\n method: 'es_exports',\n description:\n 'Return every export declaration and re-export from an EcmaScript artifact produced earlier in this turn, including the export * form.',\n argsSchema: validator.object({}),\n },\n {\n name: 'artifact_es_outline',\n method: 'es_outline',\n description:\n 'Return a nested structural index from an EcmaScript artifact produced earlier in this turn: each class or interface with its methods, properties, and accessors, all with line ranges.',\n argsSchema: validator.object({}),\n },\n {\n name: 'artifact_es_signature',\n method: 'es_signature',\n description:\n 'Return the signature text (type parameters, parameters, return type) of a named declaration from an EcmaScript artifact produced earlier in this turn, without the body.',\n argsSchema: validator.object({\n name: validator\n .string()\n .required()\n .description('The name of the declaration whose signature to retrieve.'),\n }),\n },\n {\n name: 'artifact_es_jsdoc',\n method: 'es_jsdoc',\n description:\n 'Return the JSDoc comment attached to a named declaration from an EcmaScript artifact produced earlier in this turn.',\n argsSchema: validator.object({\n name: validator\n .string()\n .required()\n .description('The name of the declaration whose JSDoc to retrieve.'),\n }),\n },\n {\n name: 'artifact_es_references',\n method: 'es_references',\n description:\n 'Return every line (0-based) where an identifier appears in an EcmaScript artifact produced earlier in this turn. This is a syntactic scan only — without a type checker it cannot distinguish shadowed bindings or resolve ambiguous names. Do not treat this as a semantic find-references.',\n argsSchema: validator.object({\n name: validator.string().required().description('The identifier name to search for.'),\n }),\n },\n ])\n\n /**\n * Forges base-class tools plus EcmaScript-specific tools narrowed to {@link SpooledEcmaScriptArtifact}.\n */\n public static override forgeTools(ctx: DispatchContext): ToolRegistry {\n const registry = SpooledArtifact.forgeTools(ctx)\n const requires = SpooledEcmaScriptArtifact\n const compatibleIds = collectArtifactCompatibleIds(ctx, requires)\n if (compatibleIds.length === 0) return registry\n\n for (const descriptor of this.toolMethods) {\n const callIdSchema = validator\n .string()\n .valid(...compatibleIds)\n .required()\n .description('ToolCall id of the artifact to query.')\n\n const argsSchema = (\n descriptor.argsSchema ?? validator.object<Record<string, never>>({})\n ).append({\n callId: callIdSchema,\n })\n\n const tool = new ArtifactTool({\n name: descriptor.name,\n description: descriptor.description,\n inputSchema: argsSchema,\n ephemeral: true,\n onCollision: 'replace',\n handler: async (rawArgs, ctxInner) => {\n const args = rawArgs as Record<string, unknown> & { callId: string }\n const resolved = resolveArtifactById(ctxInner, args.callId, requires)\n if (!resolved) return `Error: no artifact with id ${args.callId} in this turn`\n const artifact = resolved.artifact\n const methodArgs: unknown[] = []\n if (descriptor.method === 'es_symbols') {\n methodArgs.push((args.kind as string) || '')\n } else if (\n descriptor.method === 'es_signature' ||\n descriptor.method === 'es_jsdoc' ||\n descriptor.method === 'es_references'\n ) {\n methodArgs.push(args.name as string)\n }\n const fn = (artifact as unknown as Record<string, (...a: unknown[]) => unknown>)[\n descriptor.method\n ]\n if (typeof fn !== 'function') {\n return `Error: artifact has no method ${descriptor.method}`\n }\n const result = await Promise.resolve(fn.apply(artifact, methodArgs))\n const serialise = descriptor.serialise ?? defaultSerialise\n return serialise(result)\n },\n })\n registry.register(tool)\n }\n return registry\n }\n\n /**\n * Infer script kind from file extension.\n */\n #inferScriptKind(fileName: string | undefined): 'js' | 'jsx' | 'ts' | 'tsx' | undefined {\n if (!fileName) return undefined\n const lower = fileName.toLowerCase()\n if (lower.endsWith('.mts') || lower.endsWith('.cts') || lower.endsWith('.ts')) {\n return 'ts'\n }\n if (lower.endsWith('.tsx')) {\n return 'tsx'\n }\n if (lower.endsWith('.jsx')) {\n return 'jsx'\n }\n if (lower.endsWith('.mjs') || lower.endsWith('.cjs') || lower.endsWith('.js')) {\n return 'js'\n }\n return undefined\n }\n\n /**\n * Lazy-load the TypeScript module once and cache the promise.\n * All call sites route through this to ensure consistent error handling.\n */\n static #typeScriptPromise: Promise<any> | undefined\n\n /**\n * Load the TypeScript module, wrapping module-resolution errors in the battery exception.\n * @internal\n */\n static async #loadTypeScript(): Promise<any> {\n if (this.#typeScriptPromise !== undefined) {\n return this.#typeScriptPromise\n }\n\n this.#typeScriptPromise = import('typescript').catch((err) => {\n const detail = isError(err) ? err.message : String(err)\n throw new E_TYPESCRIPT_PEER_MISSING([detail])\n })\n\n return this.#typeScriptPromise\n }\n\n /**\n * Resolve and cache the parsed SourceFile.\n */\n async #resolveSourceFile(): Promise<SourceFile> {\n if (this.#sourceFile !== undefined) {\n return this.#sourceFile\n }\n\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const text = await this.asString()\n const fileName = this.#fileName ?? 'source.ts'\n\n // Map script kind to ts.ScriptKind enum\n const scriptKindMap: Record<string, number> = {\n js: ts.ScriptKind.JS,\n jsx: ts.ScriptKind.JSX,\n ts: ts.ScriptKind.TS,\n tsx: ts.ScriptKind.TSX,\n }\n const scriptKind = scriptKindMap[this.#scriptKind] ?? ts.ScriptKind.TS\n\n this.#sourceFile = ts.createSourceFile(\n fileName,\n text,\n ts.ScriptTarget.Latest,\n /* setParentNodes */ true,\n scriptKind\n )\n\n return this.#sourceFile!\n }\n\n /**\n * Return every top-level declaration, optionally filtered by kind.\n */\n async es_symbols(kind?: string): Promise<EcmaScriptSymbol[]> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n const symbols: EcmaScriptSymbol[] = []\n const filterKind = kind === '' ? undefined : kind\n\n const visit = (node: any): void | undefined => {\n // Only visit top-level declarations\n if (node.parent !== sf) return\n\n let symbolKind: string | undefined\n let symbolName: string | undefined\n let isExported = false\n\n // Determine kind and name\n if (ts.isFunctionDeclaration(node)) {\n symbolKind = 'function'\n symbolName = node.name?.text\n } else if (ts.isClassDeclaration(node)) {\n symbolKind = 'class'\n symbolName = node.name?.text\n } else if (ts.isInterfaceDeclaration(node)) {\n symbolKind = 'interface'\n symbolName = node.name.text\n } else if (ts.isTypeAliasDeclaration(node)) {\n symbolKind = 'type'\n symbolName = node.name.text\n } else if (ts.isEnumDeclaration(node)) {\n symbolKind = 'enum'\n symbolName = node.name.text\n } else if (ts.isVariableStatement(node)) {\n // Extract kind from variable declaration flags\n const flags = node.declarationList.flags\n let varKind: string\n if (flags & ts.NodeFlags.Let) {\n varKind = 'let'\n } else if (flags & ts.NodeFlags.Const) {\n varKind = 'const'\n } else {\n varKind = 'var'\n }\n\n // Check if exported\n let varIsExported = false\n if (node.modifiers) {\n varIsExported = node.modifiers.some((m: any) => m.kind === ts.SyntaxKind.ExportKeyword)\n }\n\n // Emit one symbol per binding, not one per statement\n const startLine = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n const endLine = sf.getLineAndCharacterOfPosition(node.getEnd()).line\n\n node.declarationList.declarations.forEach((decl: any) => {\n if (ts.isIdentifier(decl.name)) {\n const bindingName = decl.name.text\n\n // Apply filter if provided\n if (filterKind && varKind !== filterKind) return\n\n symbols.push({\n kind: varKind,\n name: bindingName,\n exported: varIsExported,\n startLine,\n endLine,\n })\n }\n })\n return\n }\n\n if (!symbolKind || !symbolName) return\n\n // Check if exported\n if (node.modifiers) {\n isExported = node.modifiers.some((m: any) => m.kind === ts.SyntaxKind.ExportKeyword)\n }\n\n // Apply filter if provided\n if (filterKind && symbolKind !== filterKind) return\n\n const startLine = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n const endLine = sf.getLineAndCharacterOfPosition(node.getEnd()).line\n\n symbols.push({\n kind: symbolKind,\n name: symbolName,\n exported: isExported,\n startLine,\n endLine,\n })\n }\n\n ts.forEachChild(sf, visit)\n return symbols\n }\n\n /**\n * Return every import declaration.\n */\n async es_imports(): Promise<EcmaScriptImport[]> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n const imports: EcmaScriptImport[] = []\n\n const visit = (node: any): void | undefined => {\n if (!ts.isImportDeclaration(node)) return\n\n const moduleSpecifier =\n node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)\n ? node.moduleSpecifier.text\n : ''\n\n const namedImports: string[] = []\n let defaultImport: string | undefined\n let namespaceImport: string | undefined\n let typeOnly = false\n\n if (node.importClause) {\n typeOnly = node.importClause.isTypeOnly ?? false\n\n // Default import\n if (node.importClause.name) {\n defaultImport = node.importClause.name.text\n }\n\n // Namespace import (import * as Foo)\n if (node.importClause.namedBindings) {\n if (ts.isNamespaceImport(node.importClause.namedBindings)) {\n namespaceImport = node.importClause.namedBindings.name.text\n } else if (ts.isNamedImports(node.importClause.namedBindings)) {\n // Named imports\n node.importClause.namedBindings.elements.forEach((elem: any) => {\n namedImports.push(elem.name.text)\n })\n }\n }\n }\n\n const line = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n imports.push({\n moduleSpecifier,\n named: namedImports,\n default: defaultImport,\n namespace: namespaceImport,\n typeOnly,\n line,\n })\n }\n\n ts.forEachChild(sf, visit)\n return imports\n }\n\n /**\n * Return every export declaration and re-export.\n */\n async es_exports(): Promise<EcmaScriptExport[]> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n const exports: EcmaScriptExport[] = []\n\n const visit = (node: any): void | undefined => {\n // Handle export declarations (named exports, export *, re-exports)\n if (ts.isExportDeclaration(node)) {\n const isTypeOnly = node.isTypeOnly ?? false\n const moduleSpecifier =\n node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)\n ? node.moduleSpecifier.text\n : undefined\n\n const namedExports: string[] = []\n let isNamespaceReExport = false\n\n if (node.exportClause && ts.isNamedExports(node.exportClause)) {\n node.exportClause.elements.forEach((elem: any) => {\n namedExports.push(elem.name.text)\n })\n } else if (node.exportClause === undefined && moduleSpecifier) {\n // export * from '...'\n isNamespaceReExport = true\n }\n\n const line = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n exports.push({\n line,\n moduleSpecifier,\n named: namedExports,\n isDefault: false,\n isNamespaceReExport,\n isTypeOnly,\n })\n }\n // Handle export default (which is ExportAssignment, not ExportDeclaration)\n else if (ts.isExportAssignment(node)) {\n const line = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n exports.push({\n line,\n moduleSpecifier: undefined,\n named: [],\n isDefault: true,\n isNamespaceReExport: false,\n isTypeOnly: false,\n })\n }\n // Handle exported declarations with export modifier (export function, export class, etc.)\n else if (node.parent === sf && node.modifiers) {\n const hasExportModifier = node.modifiers.some(\n (m: any) => m.kind === ts.SyntaxKind.ExportKeyword\n )\n if (!hasExportModifier) return\n\n const hasDefaultModifier = node.modifiers.some(\n (m: any) => m.kind === ts.SyntaxKind.DefaultKeyword\n )\n\n let declaredName: string | undefined\n\n // Determine the name and isTypeOnly flag based on declaration kind\n let isTypeOnly = false\n\n if (ts.isFunctionDeclaration(node)) {\n declaredName = node.name?.text\n } else if (ts.isClassDeclaration(node)) {\n declaredName = node.name?.text\n } else if (ts.isInterfaceDeclaration(node)) {\n declaredName = node.name.text\n isTypeOnly = true\n } else if (ts.isTypeAliasDeclaration(node)) {\n declaredName = node.name.text\n isTypeOnly = true\n } else if (ts.isEnumDeclaration(node)) {\n declaredName = node.name.text\n } else if (ts.isVariableStatement(node)) {\n // For variable statements, emit one export per binding\n const flags = node.declarationList.flags\n const varIsTypeOnly =\n (flags & ts.NodeFlags.Const) !== 0 &&\n node.declarationList.declarations.some(\n (d: any) => d.type?.kind === ts.SyntaxKind.TypeKeyword\n )\n\n const line = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n\n node.declarationList.declarations.forEach((decl: any) => {\n if (ts.isIdentifier(decl.name)) {\n const bindingName = decl.name.text\n exports.push({\n line,\n moduleSpecifier: undefined,\n named: hasDefaultModifier ? [] : [bindingName],\n isDefault: hasDefaultModifier,\n isNamespaceReExport: false,\n isTypeOnly: varIsTypeOnly,\n })\n }\n })\n return\n }\n\n if (declaredName) {\n const line = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n exports.push({\n line,\n moduleSpecifier: undefined,\n named: hasDefaultModifier ? [] : [declaredName],\n isDefault: hasDefaultModifier,\n isNamespaceReExport: false,\n isTypeOnly,\n })\n }\n }\n }\n\n ts.forEachChild(sf, visit)\n return exports\n }\n\n /**\n * Return a structural outline of classes and interfaces with their members.\n */\n async es_outline(): Promise<OutlineEntry[]> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n const entries: OutlineEntry[] = []\n\n const visit = (node: any): void | undefined => {\n if (!node.parent || node.parent !== sf) return\n\n let entry: OutlineEntry | undefined\n\n if (ts.isClassDeclaration(node) && node.name) {\n const members = this.#getMembersFromNode(ts, sf, node)\n entry = {\n kind: 'class',\n name: node.name.text,\n startLine: sf.getLineAndCharacterOfPosition(node.getStart(sf)).line,\n endLine: sf.getLineAndCharacterOfPosition(node.getEnd()).line,\n members,\n }\n } else if (ts.isInterfaceDeclaration(node)) {\n const members = this.#getMembersFromInterfaceNode(ts, sf, node)\n entry = {\n kind: 'interface',\n name: node.name.text,\n startLine: sf.getLineAndCharacterOfPosition(node.getStart(sf)).line,\n endLine: sf.getLineAndCharacterOfPosition(node.getEnd()).line,\n members,\n }\n }\n\n if (entry) {\n entries.push(entry)\n }\n }\n\n ts.forEachChild(sf, visit)\n return entries\n }\n\n /**\n * Extract members from a class node.\n */\n #getMembersFromNode(ts: any, sf: SourceFile, classNode: any): OutlineMember[] {\n const members: OutlineMember[] = []\n\n const visit = (node: any): void | undefined => {\n if (node.parent !== classNode) return\n\n let memberKind: string | undefined\n let memberName: string | undefined\n\n if (ts.isConstructorDeclaration(node)) {\n memberKind = 'method'\n memberName = 'constructor'\n } else if (ts.isMethodDeclaration(node)) {\n memberKind = 'method'\n memberName = node.name?.text\n } else if (ts.isPropertyDeclaration(node)) {\n memberKind = 'property'\n memberName = node.name?.text\n } else if (ts.isGetAccessorDeclaration(node) || ts.isSetAccessorDeclaration(node)) {\n memberKind = 'accessor'\n memberName = node.name?.text\n }\n\n if (memberKind && memberName) {\n members.push({\n name: memberName,\n kind: memberKind,\n startLine: sf.getLineAndCharacterOfPosition(node.getStart(sf)).line,\n endLine: sf.getLineAndCharacterOfPosition(node.getEnd()).line,\n })\n }\n }\n\n ts.forEachChild(classNode, visit)\n return members\n }\n\n /**\n * Extract members from an interface node.\n */\n #getMembersFromInterfaceNode(ts: any, sf: SourceFile, interfaceNode: any): OutlineMember[] {\n const members: OutlineMember[] = []\n\n const visit = (node: any): void | undefined => {\n if (node.parent !== interfaceNode) return\n\n let memberKind: string | undefined\n let memberName: string | undefined\n\n if (ts.isMethodSignature(node)) {\n memberKind = 'method'\n memberName = node.name?.text\n } else if (ts.isPropertySignature(node)) {\n memberKind = 'property'\n memberName = node.name?.text\n } else if (ts.isCallSignatureDeclaration(node)) {\n memberKind = 'signature'\n memberName = 'call'\n } else if (ts.isConstructSignatureDeclaration(node)) {\n memberKind = 'signature'\n memberName = 'constructor'\n } else if (ts.isIndexSignatureDeclaration(node)) {\n memberKind = 'signature'\n memberName = 'index'\n }\n\n if (memberKind && memberName) {\n members.push({\n name: memberName,\n kind: memberKind,\n startLine: sf.getLineAndCharacterOfPosition(node.getStart(sf)).line,\n endLine: sf.getLineAndCharacterOfPosition(node.getEnd()).line,\n })\n }\n }\n\n ts.forEachChild(interfaceNode, visit)\n return members\n }\n\n /**\n * Search for a named top-level declaration. Returns the matching node or undefined.\n *\n * @remarks\n * Searches FunctionDeclaration, ClassDeclaration, InterfaceDeclaration, EnumDeclaration,\n * TypeAliasDeclaration, and the individual VariableDeclaration bindings of a\n * VariableStatement. This is the single lookup shared by {@link SpooledEcmaScriptArtifact.es_signature}\n * and {@link SpooledEcmaScriptArtifact.es_jsdoc} so the two can never disagree about\n * what a name resolves to. For a variable the VariableDeclaration is returned, not its\n * enclosing statement — TypeScript attaches the JSDoc of a variable statement to both,\n * so this is safe for either caller.\n * @internal\n */\n #findTopLevelDeclaration(ts: any, sf: SourceFile, name: string): any | undefined {\n for (const node of sf.statements as unknown as any[]) {\n if (ts.isFunctionDeclaration(node) && node.name?.text === name) {\n return node\n } else if (ts.isClassDeclaration(node) && node.name?.text === name) {\n return node\n } else if (ts.isInterfaceDeclaration(node) && node.name.text === name) {\n return node\n } else if (ts.isEnumDeclaration(node) && node.name.text === name) {\n return node\n } else if (ts.isTypeAliasDeclaration(node) && node.name.text === name) {\n return node\n } else if (ts.isVariableStatement(node)) {\n const decl = node.declarationList.declarations.find(\n (d: any) => ts.isIdentifier(d.name) && d.name.text === name\n )\n if (decl) return decl\n }\n }\n return undefined\n }\n\n /**\n * Search for a named member (method, property, constructor, accessor, or signature)\n * within class and interface declarations. Returns the matching node or undefined.\n *\n * @remarks\n * Searches class members: MethodDeclaration, PropertyDeclaration, ConstructorDeclaration,\n * GetAccessorDeclaration, SetAccessorDeclaration.\n * Searches interface members: MethodSignature, PropertySignature.\n * Returns the first matching node or undefined if not found.\n * @internal\n */\n #findNestedMember(ts: any, sf: SourceFile, name: string): any | undefined {\n let foundNode: any | undefined\n\n const searchClasses = (node: any): void => {\n if (foundNode) return\n if (ts.isClassDeclaration(node)) {\n const searchMember = (member: any): void => {\n if (foundNode) return\n\n if (ts.isMethodDeclaration(member) && member.name?.text === name) {\n foundNode = member\n return\n } else if (ts.isConstructorDeclaration(member) && name === 'constructor') {\n foundNode = member\n return\n } else if (ts.isPropertyDeclaration(member) && member.name?.text === name) {\n foundNode = member\n return\n } else if (\n (ts.isGetAccessorDeclaration(member) || ts.isSetAccessorDeclaration(member)) &&\n member.name?.text === name\n ) {\n foundNode = member\n return\n }\n }\n ts.forEachChild(node, searchMember)\n }\n\n if (!foundNode) {\n ts.forEachChild(node, searchClasses)\n }\n }\n\n const searchInterfaces = (node: any): void => {\n if (foundNode) return\n if (ts.isInterfaceDeclaration(node)) {\n const searchMember = (member: any): void => {\n if (foundNode) return\n\n if (ts.isMethodSignature(member) && member.name?.text === name) {\n foundNode = member\n return\n } else if (ts.isPropertySignature(member) && member.name?.text === name) {\n foundNode = member\n return\n }\n }\n ts.forEachChild(node, searchMember)\n }\n\n if (!foundNode) {\n ts.forEachChild(node, searchInterfaces)\n }\n }\n\n ts.forEachChild(sf, searchClasses)\n if (!foundNode) {\n ts.forEachChild(sf, searchInterfaces)\n }\n\n return foundNode\n }\n\n /**\n * Extract the signature text of a declaration, excluding the body.\n * For functions/methods: includes type parameters, parameters, and return type.\n * For classes: includes the class keyword, name, type parameters, and heritage.\n * For interfaces: includes the interface keyword, name, type parameters, and heritage.\n * For enums: includes the enum keyword, modifiers, and name, excluding the member list.\n * For type aliases: includes the type keyword, name, and RHS up to the semicolon.\n * For variables: includes the variable declaration up to (but not including) the initializer.\n * For properties/accessors: includes the declaration without the body.\n * For method/property signatures: includes the signature without the body.\n *\n * @remarks\n * Variables and function expressions are returned as the binding name only (parameters\n * and return type are not surfaced for these cases).\n * @internal\n */\n #extractSignatureText(ts: any, sf: SourceFile, node: any): string {\n if (ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node)) {\n // For functions/methods: extract from start to the end of return type (or param list if no return type)\n const start = node.getStart(sf)\n // The body (if present) starts after the closing paren of parameters and optional return type\n const bodyStart = node.body ? node.body.getStart(sf) : node.getEnd()\n return sf.text.substring(start, bodyStart).trim()\n } else if (ts.isConstructorDeclaration(node)) {\n // constructor(params): void { body }\n const start = node.getStart(sf)\n const bodyStart = node.body ? node.body.getStart(sf) : node.getEnd()\n return sf.text.substring(start, bodyStart).trim()\n } else if (ts.isClassDeclaration(node)) {\n // class Name<T> extends Base { members }\n // Find the opening brace that starts the body and stop before it.\n const start = node.getStart(sf)\n const children = node.getChildren(sf)\n const openBrace = children.find((child: any) => child.kind === ts.SyntaxKind.OpenBraceToken)\n if (openBrace) {\n // Extract up to the opening brace and trim any trailing whitespace/brace\n const bracePos = openBrace.getStart(sf)\n let text = sf.text.substring(start, bracePos).trim()\n // Remove trailing opening brace and any whitespace before it\n text = text.replace(/\\s*\\{\\s*$/, '')\n return text\n }\n return ''\n } else if (ts.isInterfaceDeclaration(node)) {\n // interface Name<T> extends Base { members }\n // Find the opening brace that starts the body and stop before it.\n const start = node.getStart(sf)\n const children = node.getChildren(sf)\n const openBrace = children.find((child: any) => child.kind === ts.SyntaxKind.OpenBraceToken)\n if (openBrace) {\n // Extract up to the opening brace and trim any trailing whitespace/brace\n const bracePos = openBrace.getStart(sf)\n let text = sf.text.substring(start, bracePos).trim()\n // Remove trailing opening brace and any whitespace before it\n text = text.replace(/\\s*\\{\\s*$/, '')\n return text\n }\n return ''\n } else if (ts.isEnumDeclaration(node)) {\n // enum Name { members } or const enum Name { members } or declare enum Name { members }\n // Find the opening brace that starts the member list and stop before it.\n const start = node.getStart(sf)\n const children = node.getChildren(sf)\n const openBrace = children.find((child: any) => child.kind === ts.SyntaxKind.OpenBraceToken)\n if (openBrace) {\n // Extract up to the opening brace and trim any trailing whitespace/brace\n const bracePos = openBrace.getStart(sf)\n let text = sf.text.substring(start, bracePos).trim()\n // Remove trailing opening brace and any whitespace before it\n text = text.replace(/\\s*\\{\\s*$/, '')\n return text\n }\n return ''\n } else if (ts.isTypeAliasDeclaration(node)) {\n // type Name<T> = ...\n const start = node.getStart(sf)\n const end = node.getEnd()\n return sf.text.substring(start, end).trim()\n } else if (ts.isVariableDeclaration(node)) {\n // const x = 5 or let y: string\n // Return up to the initializer or end if no initializer\n const start = node.getStart(sf)\n const initStart = node.initializer ? node.initializer.getStart(sf) : node.getEnd()\n let text = sf.text.substring(start, initStart).trim()\n // Remove trailing assignment operator and surrounding whitespace\n text = text.replace(/\\s*=\\s*$/, '')\n return text\n } else if (ts.isPropertyDeclaration(node)) {\n // class property: name: type = initializer;\n // Return from start to initializer (if any) or end (without body)\n const start = node.getStart(sf)\n const initStart = node.initializer ? node.initializer.getStart(sf) : node.getEnd()\n let text = sf.text.substring(start, initStart).trim()\n // Remove trailing assignment operator and surrounding whitespace\n text = text.replace(/\\s*=\\s*$/, '')\n return text\n } else if (ts.isGetAccessorDeclaration(node) || ts.isSetAccessorDeclaration(node)) {\n // getter/setter: get/set name(): type { body }\n const start = node.getStart(sf)\n const bodyStart = node.body ? node.body.getStart(sf) : node.getEnd()\n return sf.text.substring(start, bodyStart).trim()\n } else if (ts.isMethodSignature(node)) {\n // interface method signature: name(params): returnType;\n const start = node.getStart(sf)\n const end = node.getEnd()\n return sf.text.substring(start, end).trim()\n } else if (ts.isPropertySignature(node)) {\n // interface property: name: type;\n const start = node.getStart(sf)\n const end = node.getEnd()\n return sf.text.substring(start, end).trim()\n }\n return ''\n }\n\n /**\n * Return the signature text for a named declaration.\n * Searches top-level declarations (functions, classes, interfaces, enums, type aliases,\n * const/let/var bindings), class members (methods, properties, constructors, accessors),\n * and interface members (method signatures, property signatures) — the same lookup\n * {@link SpooledEcmaScriptArtifact.es_jsdoc} uses, so the two always agree on what a\n * name resolves to.\n */\n async es_signature(name: string): Promise<string> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n // Top-level declarations first, then nested class/interface members.\n const node = this.#findTopLevelDeclaration(ts, sf, name) ?? this.#findNestedMember(ts, sf, name)\n\n return node ? this.#extractSignatureText(ts, sf, node) : ''\n }\n\n /**\n * Return the JSDoc comment for a named declaration.\n * Searches top-level declarations (functions, classes, interfaces, enums, type aliases,\n * const/let/var bindings), class members (methods, properties, constructors, accessors),\n * and interface members (method signatures, property signatures) — the same lookup\n * {@link SpooledEcmaScriptArtifact.es_signature} uses, so the two always agree on what a\n * name resolves to.\n */\n async es_jsdoc(name: string): Promise<string> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n // Helper to extract JSDoc from a node\n const extractJSDoc = (target: any): string => {\n // A JSDoc block sits above the whole `const a = 1, b = 2` statement, so for a\n // variable binding read the comment off the enclosing VariableStatement — otherwise\n // only the first declarator would carry it.\n const node =\n ts.isVariableDeclaration(target) && target.parent?.parent ? target.parent.parent : target\n const comments = ts.getJSDocCommentsAndTags(node)\n if (comments && comments.length > 0) {\n const commentStrs: string[] = []\n for (const comment of comments) {\n const text = sf.text.substring(comment.getStart(sf), comment.getEnd())\n commentStrs.push(text)\n }\n return commentStrs.join('\\n')\n }\n return ''\n }\n\n // Top-level declarations first, then nested class/interface members.\n const node = this.#findTopLevelDeclaration(ts, sf, name) ?? this.#findNestedMember(ts, sf, name)\n\n return node ? extractJSDoc(node) : ''\n }\n\n /**\n * Return every line where an identifier appears (syntactic scan only).\n */\n async es_references(name: string): Promise<IdentifierReference[]> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n const references: IdentifierReference[] = []\n\n const visit = (node: any): void | undefined => {\n if (ts.isIdentifier(node) && node.text === name) {\n const pos = node.getStart(sf)\n const lineChar = sf.getLineAndCharacterOfPosition(pos)\n references.push({\n line: lineChar.line,\n column: lineChar.character,\n })\n }\n\n ts.forEachChild(node, visit)\n }\n\n ts.forEachChild(sf, visit)\n return references\n }\n\n /**\n * Serialise this SpooledEcmaScriptArtifact into an encoder snapshot.\n */\n [ENCODE_METHOD](): AdkEncodableSnapshot {\n return {\n reader: this.readerDescriptor(),\n fileName: this.#fileName,\n scriptKind: this.#scriptKind,\n }\n }\n\n /**\n * Reconstruct a SpooledEcmaScriptArtifact from an encoder snapshot.\n */\n static [DECODE_METHOD](data: AdkEncodableSnapshot): SpooledEcmaScriptArtifact {\n const snapshot = data as {\n reader: ReaderDescriptor\n fileName?: string\n scriptKind?: 'js' | 'jsx' | 'ts' | 'tsx'\n }\n return new SpooledEcmaScriptArtifact(resolveSpoolReader(snapshot.reader), {\n fileName: snapshot.fileName,\n scriptKind: snapshot.scriptKind,\n })\n }\n}\n\n/**\n * Battery exception re-export.\n */\nexport { E_TYPESCRIPT_PEER_MISSING }\n"],"mappings":"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"}
1
+ {"version":3,"file":"ecmascript-CCtgamDh.js","names":["#fileName","#scriptKind","#inferScriptKind","#typeScriptPromise","#loadTypeScript","#resolveSourceFile","#sourceFile","#getMembersFromNode","#getMembersFromInterfaceNode","#findTopLevelDeclaration","#findNestedMember","#extractSignatureText"],"sources":["../src/batteries/artifacts/ecmascript/exceptions.ts","../src/batteries/artifacts/ecmascript/index.ts"],"sourcesContent":["/**\n * Battery-scoped exceptions for the EcmaScript artifact battery.\n *\n * @remarks\n * Internal sibling of the `@nhtio/adk/batteries/artifacts/ecmascript` entry — re-exported from\n * the battery's own barrel per the battery-scoped-exceptions rule. These are the typed errors the\n * battery throws when loading or configuring its TypeScript compiler peer dependency.\n */\n\nimport { createException } from '@nhtio/adk/factories'\n\n/**\n * Thrown when the TypeScript peer dependency fails to load.\n *\n * @remarks\n * The battery requires typescript as an optional peer. This exception surfaces when the\n * dynamic import fails, typically because the package is not installed or cannot be resolved.\n * The message template includes the package name, a description of its purpose, the underlying\n * error, and the exact install command, so the consumer sees a complete, actionable message\n * regardless of call site.\n */\nexport const E_TYPESCRIPT_PEER_MISSING = createException<[string]>(\n 'E_TYPESCRIPT_PEER_MISSING',\n 'the ecmascript battery could not load its peer dependency \"typescript\" (needed for EcmaScript artifact queries): %s — install it (pnpm add typescript)',\n 'E_TYPESCRIPT_PEER_MISSING',\n 500\n)\n","/**\n * @module @nhtio/adk/batteries/artifacts/ecmascript\n *\n * Provides `SpooledEcmaScriptArtifact`, a structured query interface for JavaScript and\n * TypeScript source files.\n *\n * @remarks\n * Parse source code via the TypeScript compiler API to enable structural queries:\n * - `artifact_es_symbols` — top-level declarations (functions, classes, interfaces, types)\n * - `artifact_es_imports` — import declarations and their source modules\n * - `artifact_es_exports` — export declarations and re-exports\n * - `artifact_es_outline` — nested member index (class methods/properties, interface members)\n * - `artifact_es_signature` — declaration signature text (parameters, return types)\n * - `artifact_es_jsdoc` — JSDoc comments attached to declarations\n * - `artifact_es_references` — syntactic scan for identifier usage (not semantic)\n *\n * **Decoding note:** `decode()` on a `SpooledEcmaScriptArtifact` throws until\n * `registerArtifactEncodables()` has run. `encode()` requires no setup.\n */\n\nimport { validator } from '@nhtio/validation'\nimport { E_TYPESCRIPT_PEER_MISSING } from './exceptions'\nimport { isError, isInstanceOf } from '@nhtio/adk/guards'\nimport { ArtifactTool, ToolRegistry, resolveSpoolReader, ReaderDescriptor } from '@nhtio/adk/common'\nimport {\n SpooledArtifact,\n collectArtifactCompatibleIds,\n defaultSerialise,\n resolveArtifactById,\n} from '@nhtio/adk/spooled_artifact'\n\n/**\n * Well-known @nhtio/encoder contract keys, resolved via the global symbol registry\n * to avoid a hard dependency on the optional @nhtio/encoder peer.\n */\nconst ENCODE_METHOD: unique symbol = Symbol.for('@nhtio/encoder:toEncoded')\nconst DECODE_METHOD: unique symbol = Symbol.for('@nhtio/encoder:fromEncoded')\nimport type { SourceFile } from 'typescript'\nimport type { DispatchContext, SpoolReader, ToolMethodDescriptor } from '@nhtio/adk/types'\n\n/** Snapshot payload for the encoder contract; the encoder treats it as opaque. */\ntype AdkEncodableSnapshot = unknown\n\n/**\n * A top-level declaration (function, class, interface, type alias, enum, or binding).\n *\n * @remarks\n * Line numbers are 0-based. `startLine` is the line containing the declaration keyword or\n * identifier. `endLine` is the 0-based index of the last line belonging to this declaration\n * (inclusive).\n */\nexport interface EcmaScriptSymbol {\n /** Declaration kind: `'function'`, `'class'`, `'interface'`, `'type'`, `'enum'`, or `'const'`/`'let'`/`'var'`. */\n kind: string\n /** The declared name. */\n name: string\n /** Whether this declaration is exported. */\n exported: boolean\n /** 0-based line of the first line of this declaration. */\n startLine: number\n /** 0-based line of the last line of this declaration (inclusive). */\n endLine: number\n}\n\n/**\n * An import declaration.\n *\n * @remarks\n * Line numbers are 0-based. The `named` array contains all imported identifiers from a named\n * import; `default` contains the default import name (if any); `namespace` contains the\n * namespace import name (if `import * as`). `typeOnly` indicates whether this is a\n * `import type` declaration.\n */\nexport interface EcmaScriptImport {\n /** The module specifier (e.g., `'@nhtio/adk/common'` or `'./utils'`). */\n moduleSpecifier: string\n /** Array of named imports (empty if none). */\n named: string[]\n /** The default import name, or undefined. */\n default?: string\n /** The namespace import name (for `import *`), or undefined. */\n namespace?: string\n /** True for `import type` declarations. */\n typeOnly: boolean\n /** 0-based line of this import statement. */\n line: number\n}\n\n/**\n * An export declaration or re-export.\n *\n * @remarks\n * Includes named exports, default exports, re-exports (`export * from`), and re-export named\n * members. When `moduleSpecifier` is present, this is a re-export; otherwise it re-exports\n * locally-declared members.\n */\nexport interface EcmaScriptExport {\n /** 0-based line of this export statement. */\n line: number\n /** The module specifier for re-exports (e.g., `'./utils'`), or undefined for local exports. */\n moduleSpecifier?: string\n /** Array of named exports (empty if this is `export default` or `export * from`). */\n named: string[]\n /** True for `export default`. */\n isDefault: boolean\n /** True for `export * from`. */\n isNamespaceReExport: boolean\n /** True for `export type` declarations. */\n isTypeOnly: boolean\n}\n\n/**\n * A class or interface member in the outline.\n */\nexport interface OutlineMember {\n /** The member name. */\n name: string\n /** The member kind: `'method'`, `'property'`, `'accessor'`, or `'signature'`. */\n kind: string\n /** 0-based line of this member. */\n startLine: number\n /** 0-based line of the last line of this member (inclusive). */\n endLine: number\n}\n\n/**\n * An entry in the structural outline (class or interface with its members).\n */\nexport interface OutlineEntry {\n /** The container kind: `'class'` or `'interface'`. */\n kind: 'class' | 'interface'\n /** The container name. */\n name: string\n /** 0-based line of the container declaration. */\n startLine: number\n /** 0-based line of the last line of this container (inclusive). */\n endLine: number\n /** Array of members (methods, properties, accessors). */\n members: OutlineMember[]\n}\n\n/**\n * The location of an identifier reference.\n */\nexport interface IdentifierReference {\n /** 0-based line where this identifier appears. */\n line: number\n /** 0-based column where this identifier starts. */\n column: number\n}\n\n/**\n * A {@link @nhtio/adk!SpooledArtifact} specialisation for EcmaScript (JavaScript and TypeScript)\n * source files.\n *\n * @remarks\n * Parses source code syntactically (no type checker) using the TypeScript compiler API, enabling\n * structural queries without materialising the full file into memory.\n *\n * The parser automatically infers the script kind (`.js`, `.ts`, `.jsx`, `.tsx`) from the\n * `fileName` when provided; defaults to `ts` when omitted (it parses the widest grammar).\n *\n * All parsing errors are non-fatal — TypeScript's parser is error-tolerant and produces a\n * partial tree. Diagnostics are not surfaced by the query methods.\n */\nexport class SpooledEcmaScriptArtifact extends SpooledArtifact {\n #sourceFile: SourceFile | undefined\n #fileName: string | undefined\n #scriptKind: 'js' | 'jsx' | 'ts' | 'tsx'\n\n /**\n * @param reader - The backing store to read from.\n * @param options - Optional configuration.\n * @param options.fileName - The source file name. When provided, script kind is inferred from\n * the extension (`.mts`/`.cts`/`.ts` → `'ts'`, `.mjs`/`.cjs`/`.js` → `'js'`, `.tsx` → `'tsx'`,\n * `.jsx` → `'jsx'`). Defaults to `undefined`.\n * @param options.scriptKind - Explicit script kind override. Defaults to `'ts'` when not\n * provided and cannot be inferred from `fileName`.\n */\n constructor(\n reader: SpoolReader,\n options?: {\n fileName?: string\n scriptKind?: 'js' | 'jsx' | 'ts' | 'tsx'\n }\n ) {\n super(reader)\n this.#fileName = options?.fileName\n this.#scriptKind = options?.scriptKind ?? this.#inferScriptKind(options?.fileName) ?? 'ts'\n }\n\n /**\n * Returns `true` if `value` is a {@link SpooledEcmaScriptArtifact} instance.\n *\n * @remarks\n * Uses the cross-realm-safe {@link @nhtio/adk!isInstanceOf} guard. Safe against the\n * dual-module-copy case.\n */\n public static isSpooledEcmaScriptArtifact(value: unknown): value is SpooledEcmaScriptArtifact {\n return isInstanceOf(value, 'SpooledEcmaScriptArtifact', SpooledEcmaScriptArtifact)\n }\n\n /**\n * The EcmaScript-specific artifact-query descriptors this class adds.\n *\n * @remarks\n * Lists seven descriptors; the base seven (`artifact_head`, etc.) are forged separately.\n */\n public static toolMethods: ReadonlyArray<ToolMethodDescriptor> = Object.freeze([\n {\n name: 'artifact_es_symbols',\n method: 'es_symbols',\n description:\n 'Return every top-level declaration (function, class, interface, type, enum, const/let/var) from an EcmaScript artifact produced earlier in this turn. Optionally filter by declaration kind.',\n argsSchema: validator.object({\n kind: validator\n .string()\n .optional()\n .allow('')\n .description(\n 'Optional declaration kind filter (e.g., \"function\", \"class\", \"interface\"). Empty string or omitted means no filter.'\n ),\n }),\n },\n {\n name: 'artifact_es_imports',\n method: 'es_imports',\n description:\n 'Return every import declaration from an EcmaScript artifact produced earlier in this turn, including default imports, named imports, namespace imports, and type-only imports.',\n argsSchema: validator.object({}),\n },\n {\n name: 'artifact_es_exports',\n method: 'es_exports',\n description:\n 'Return every export declaration and re-export from an EcmaScript artifact produced earlier in this turn, including the export * form.',\n argsSchema: validator.object({}),\n },\n {\n name: 'artifact_es_outline',\n method: 'es_outline',\n description:\n 'Return a nested structural index from an EcmaScript artifact produced earlier in this turn: each class or interface with its methods, properties, and accessors, all with line ranges.',\n argsSchema: validator.object({}),\n },\n {\n name: 'artifact_es_signature',\n method: 'es_signature',\n description:\n 'Return the signature text (type parameters, parameters, return type) of a named declaration from an EcmaScript artifact produced earlier in this turn, without the body.',\n argsSchema: validator.object({\n name: validator\n .string()\n .required()\n .description('The name of the declaration whose signature to retrieve.'),\n }),\n },\n {\n name: 'artifact_es_jsdoc',\n method: 'es_jsdoc',\n description:\n 'Return the JSDoc comment attached to a named declaration from an EcmaScript artifact produced earlier in this turn.',\n argsSchema: validator.object({\n name: validator\n .string()\n .required()\n .description('The name of the declaration whose JSDoc to retrieve.'),\n }),\n },\n {\n name: 'artifact_es_references',\n method: 'es_references',\n description:\n 'Return every line (0-based) where an identifier appears in an EcmaScript artifact produced earlier in this turn. This is a syntactic scan only — without a type checker it cannot distinguish shadowed bindings or resolve ambiguous names. Do not treat this as a semantic find-references.',\n argsSchema: validator.object({\n name: validator.string().required().description('The identifier name to search for.'),\n }),\n },\n ])\n\n /**\n * Forges base-class tools plus EcmaScript-specific tools narrowed to {@link SpooledEcmaScriptArtifact}.\n */\n public static override forgeTools(ctx: DispatchContext): ToolRegistry {\n const registry = SpooledArtifact.forgeTools(ctx)\n const requires = SpooledEcmaScriptArtifact\n const compatibleIds = collectArtifactCompatibleIds(ctx, requires)\n if (compatibleIds.length === 0) return registry\n\n for (const descriptor of this.toolMethods) {\n const callIdSchema = validator\n .string()\n .valid(...compatibleIds)\n .required()\n .description('ToolCall id of the artifact to query.')\n\n const argsSchema = (\n descriptor.argsSchema ?? validator.object<Record<string, never>>({})\n ).append({\n callId: callIdSchema,\n })\n\n const tool = new ArtifactTool({\n name: descriptor.name,\n description: descriptor.description,\n inputSchema: argsSchema,\n ephemeral: true,\n onCollision: 'replace',\n handler: async (rawArgs, ctxInner) => {\n const args = rawArgs as Record<string, unknown> & { callId: string }\n const resolved = resolveArtifactById(ctxInner, args.callId, requires)\n if (!resolved) return `Error: no artifact with id ${args.callId} in this turn`\n const artifact = resolved.artifact\n const methodArgs: unknown[] = []\n if (descriptor.method === 'es_symbols') {\n methodArgs.push((args.kind as string) || '')\n } else if (\n descriptor.method === 'es_signature' ||\n descriptor.method === 'es_jsdoc' ||\n descriptor.method === 'es_references'\n ) {\n methodArgs.push(args.name as string)\n }\n const fn = (artifact as unknown as Record<string, (...a: unknown[]) => unknown>)[\n descriptor.method\n ]\n if (typeof fn !== 'function') {\n return `Error: artifact has no method ${descriptor.method}`\n }\n const result = await Promise.resolve(fn.apply(artifact, methodArgs))\n const serialise = descriptor.serialise ?? defaultSerialise\n return serialise(result)\n },\n })\n registry.register(tool)\n }\n return registry\n }\n\n /**\n * Infer script kind from file extension.\n */\n #inferScriptKind(fileName: string | undefined): 'js' | 'jsx' | 'ts' | 'tsx' | undefined {\n if (!fileName) return undefined\n const lower = fileName.toLowerCase()\n if (lower.endsWith('.mts') || lower.endsWith('.cts') || lower.endsWith('.ts')) {\n return 'ts'\n }\n if (lower.endsWith('.tsx')) {\n return 'tsx'\n }\n if (lower.endsWith('.jsx')) {\n return 'jsx'\n }\n if (lower.endsWith('.mjs') || lower.endsWith('.cjs') || lower.endsWith('.js')) {\n return 'js'\n }\n return undefined\n }\n\n /**\n * Lazy-load the TypeScript module once and cache the promise.\n * All call sites route through this to ensure consistent error handling.\n */\n static #typeScriptPromise: Promise<any> | undefined\n\n /**\n * Load the TypeScript module, wrapping module-resolution errors in the battery exception.\n * @internal\n */\n static async #loadTypeScript(): Promise<any> {\n if (this.#typeScriptPromise !== undefined) {\n return this.#typeScriptPromise\n }\n\n this.#typeScriptPromise = import('typescript').catch((err) => {\n const detail = isError(err) ? err.message : String(err)\n throw new E_TYPESCRIPT_PEER_MISSING([detail])\n })\n\n return this.#typeScriptPromise\n }\n\n /**\n * Resolve and cache the parsed SourceFile.\n */\n async #resolveSourceFile(): Promise<SourceFile> {\n if (this.#sourceFile !== undefined) {\n return this.#sourceFile\n }\n\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const text = await this.asString()\n const fileName = this.#fileName ?? 'source.ts'\n\n // Map script kind to ts.ScriptKind enum\n const scriptKindMap: Record<string, number> = {\n js: ts.ScriptKind.JS,\n jsx: ts.ScriptKind.JSX,\n ts: ts.ScriptKind.TS,\n tsx: ts.ScriptKind.TSX,\n }\n const scriptKind = scriptKindMap[this.#scriptKind] ?? ts.ScriptKind.TS\n\n this.#sourceFile = ts.createSourceFile(\n fileName,\n text,\n ts.ScriptTarget.Latest,\n /* setParentNodes */ true,\n scriptKind\n )\n\n return this.#sourceFile!\n }\n\n /**\n * Return every top-level declaration, optionally filtered by kind.\n */\n async es_symbols(kind?: string): Promise<EcmaScriptSymbol[]> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n const symbols: EcmaScriptSymbol[] = []\n const filterKind = kind === '' ? undefined : kind\n\n const visit = (node: any): void | undefined => {\n // Only visit top-level declarations\n if (node.parent !== sf) return\n\n let symbolKind: string | undefined\n let symbolName: string | undefined\n let isExported = false\n\n // Determine kind and name\n if (ts.isFunctionDeclaration(node)) {\n symbolKind = 'function'\n symbolName = node.name?.text\n } else if (ts.isClassDeclaration(node)) {\n symbolKind = 'class'\n symbolName = node.name?.text\n } else if (ts.isInterfaceDeclaration(node)) {\n symbolKind = 'interface'\n symbolName = node.name.text\n } else if (ts.isTypeAliasDeclaration(node)) {\n symbolKind = 'type'\n symbolName = node.name.text\n } else if (ts.isEnumDeclaration(node)) {\n symbolKind = 'enum'\n symbolName = node.name.text\n } else if (ts.isVariableStatement(node)) {\n // Extract kind from variable declaration flags\n const flags = node.declarationList.flags\n let varKind: string\n if (flags & ts.NodeFlags.Let) {\n varKind = 'let'\n } else if (flags & ts.NodeFlags.Const) {\n varKind = 'const'\n } else {\n varKind = 'var'\n }\n\n // Check if exported\n let varIsExported = false\n if (node.modifiers) {\n varIsExported = node.modifiers.some((m: any) => m.kind === ts.SyntaxKind.ExportKeyword)\n }\n\n // Emit one symbol per binding, not one per statement\n const startLine = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n const endLine = sf.getLineAndCharacterOfPosition(node.getEnd()).line\n\n node.declarationList.declarations.forEach((decl: any) => {\n if (ts.isIdentifier(decl.name)) {\n const bindingName = decl.name.text\n\n // Apply filter if provided\n if (filterKind && varKind !== filterKind) return\n\n symbols.push({\n kind: varKind,\n name: bindingName,\n exported: varIsExported,\n startLine,\n endLine,\n })\n }\n })\n return\n }\n\n if (!symbolKind || !symbolName) return\n\n // Check if exported\n if (node.modifiers) {\n isExported = node.modifiers.some((m: any) => m.kind === ts.SyntaxKind.ExportKeyword)\n }\n\n // Apply filter if provided\n if (filterKind && symbolKind !== filterKind) return\n\n const startLine = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n const endLine = sf.getLineAndCharacterOfPosition(node.getEnd()).line\n\n symbols.push({\n kind: symbolKind,\n name: symbolName,\n exported: isExported,\n startLine,\n endLine,\n })\n }\n\n ts.forEachChild(sf, visit)\n return symbols\n }\n\n /**\n * Return every import declaration.\n */\n async es_imports(): Promise<EcmaScriptImport[]> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n const imports: EcmaScriptImport[] = []\n\n const visit = (node: any): void | undefined => {\n if (!ts.isImportDeclaration(node)) return\n\n const moduleSpecifier =\n node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)\n ? node.moduleSpecifier.text\n : ''\n\n const namedImports: string[] = []\n let defaultImport: string | undefined\n let namespaceImport: string | undefined\n let typeOnly = false\n\n if (node.importClause) {\n typeOnly = node.importClause.isTypeOnly ?? false\n\n // Default import\n if (node.importClause.name) {\n defaultImport = node.importClause.name.text\n }\n\n // Namespace import (import * as Foo)\n if (node.importClause.namedBindings) {\n if (ts.isNamespaceImport(node.importClause.namedBindings)) {\n namespaceImport = node.importClause.namedBindings.name.text\n } else if (ts.isNamedImports(node.importClause.namedBindings)) {\n // Named imports\n node.importClause.namedBindings.elements.forEach((elem: any) => {\n namedImports.push(elem.name.text)\n })\n }\n }\n }\n\n const line = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n imports.push({\n moduleSpecifier,\n named: namedImports,\n default: defaultImport,\n namespace: namespaceImport,\n typeOnly,\n line,\n })\n }\n\n ts.forEachChild(sf, visit)\n return imports\n }\n\n /**\n * Return every export declaration and re-export.\n */\n async es_exports(): Promise<EcmaScriptExport[]> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n const exports: EcmaScriptExport[] = []\n\n const visit = (node: any): void | undefined => {\n // Handle export declarations (named exports, export *, re-exports)\n if (ts.isExportDeclaration(node)) {\n const isTypeOnly = node.isTypeOnly ?? false\n const moduleSpecifier =\n node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)\n ? node.moduleSpecifier.text\n : undefined\n\n const namedExports: string[] = []\n let isNamespaceReExport = false\n\n if (node.exportClause && ts.isNamedExports(node.exportClause)) {\n node.exportClause.elements.forEach((elem: any) => {\n namedExports.push(elem.name.text)\n })\n } else if (node.exportClause === undefined && moduleSpecifier) {\n // export * from '...'\n isNamespaceReExport = true\n }\n\n const line = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n exports.push({\n line,\n moduleSpecifier,\n named: namedExports,\n isDefault: false,\n isNamespaceReExport,\n isTypeOnly,\n })\n }\n // Handle export default (which is ExportAssignment, not ExportDeclaration)\n else if (ts.isExportAssignment(node)) {\n const line = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n exports.push({\n line,\n moduleSpecifier: undefined,\n named: [],\n isDefault: true,\n isNamespaceReExport: false,\n isTypeOnly: false,\n })\n }\n // Handle exported declarations with export modifier (export function, export class, etc.)\n else if (node.parent === sf && node.modifiers) {\n const hasExportModifier = node.modifiers.some(\n (m: any) => m.kind === ts.SyntaxKind.ExportKeyword\n )\n if (!hasExportModifier) return\n\n const hasDefaultModifier = node.modifiers.some(\n (m: any) => m.kind === ts.SyntaxKind.DefaultKeyword\n )\n\n let declaredName: string | undefined\n\n // Determine the name and isTypeOnly flag based on declaration kind\n let isTypeOnly = false\n\n if (ts.isFunctionDeclaration(node)) {\n declaredName = node.name?.text\n } else if (ts.isClassDeclaration(node)) {\n declaredName = node.name?.text\n } else if (ts.isInterfaceDeclaration(node)) {\n declaredName = node.name.text\n isTypeOnly = true\n } else if (ts.isTypeAliasDeclaration(node)) {\n declaredName = node.name.text\n isTypeOnly = true\n } else if (ts.isEnumDeclaration(node)) {\n declaredName = node.name.text\n } else if (ts.isVariableStatement(node)) {\n // For variable statements, emit one export per binding\n const flags = node.declarationList.flags\n const varIsTypeOnly =\n (flags & ts.NodeFlags.Const) !== 0 &&\n node.declarationList.declarations.some(\n (d: any) => d.type?.kind === ts.SyntaxKind.TypeKeyword\n )\n\n const line = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n\n node.declarationList.declarations.forEach((decl: any) => {\n if (ts.isIdentifier(decl.name)) {\n const bindingName = decl.name.text\n exports.push({\n line,\n moduleSpecifier: undefined,\n named: hasDefaultModifier ? [] : [bindingName],\n isDefault: hasDefaultModifier,\n isNamespaceReExport: false,\n isTypeOnly: varIsTypeOnly,\n })\n }\n })\n return\n }\n\n if (declaredName) {\n const line = sf.getLineAndCharacterOfPosition(node.getStart(sf)).line\n exports.push({\n line,\n moduleSpecifier: undefined,\n named: hasDefaultModifier ? [] : [declaredName],\n isDefault: hasDefaultModifier,\n isNamespaceReExport: false,\n isTypeOnly,\n })\n }\n }\n }\n\n ts.forEachChild(sf, visit)\n return exports\n }\n\n /**\n * Return a structural outline of classes and interfaces with their members.\n */\n async es_outline(): Promise<OutlineEntry[]> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n const entries: OutlineEntry[] = []\n\n const visit = (node: any): void | undefined => {\n if (!node.parent || node.parent !== sf) return\n\n let entry: OutlineEntry | undefined\n\n if (ts.isClassDeclaration(node) && node.name) {\n const members = this.#getMembersFromNode(ts, sf, node)\n entry = {\n kind: 'class',\n name: node.name.text,\n startLine: sf.getLineAndCharacterOfPosition(node.getStart(sf)).line,\n endLine: sf.getLineAndCharacterOfPosition(node.getEnd()).line,\n members,\n }\n } else if (ts.isInterfaceDeclaration(node)) {\n const members = this.#getMembersFromInterfaceNode(ts, sf, node)\n entry = {\n kind: 'interface',\n name: node.name.text,\n startLine: sf.getLineAndCharacterOfPosition(node.getStart(sf)).line,\n endLine: sf.getLineAndCharacterOfPosition(node.getEnd()).line,\n members,\n }\n }\n\n if (entry) {\n entries.push(entry)\n }\n }\n\n ts.forEachChild(sf, visit)\n return entries\n }\n\n /**\n * Extract members from a class node.\n */\n #getMembersFromNode(ts: any, sf: SourceFile, classNode: any): OutlineMember[] {\n const members: OutlineMember[] = []\n\n const visit = (node: any): void | undefined => {\n if (node.parent !== classNode) return\n\n let memberKind: string | undefined\n let memberName: string | undefined\n\n if (ts.isConstructorDeclaration(node)) {\n memberKind = 'method'\n memberName = 'constructor'\n } else if (ts.isMethodDeclaration(node)) {\n memberKind = 'method'\n memberName = node.name?.text\n } else if (ts.isPropertyDeclaration(node)) {\n memberKind = 'property'\n memberName = node.name?.text\n } else if (ts.isGetAccessorDeclaration(node) || ts.isSetAccessorDeclaration(node)) {\n memberKind = 'accessor'\n memberName = node.name?.text\n }\n\n if (memberKind && memberName) {\n members.push({\n name: memberName,\n kind: memberKind,\n startLine: sf.getLineAndCharacterOfPosition(node.getStart(sf)).line,\n endLine: sf.getLineAndCharacterOfPosition(node.getEnd()).line,\n })\n }\n }\n\n ts.forEachChild(classNode, visit)\n return members\n }\n\n /**\n * Extract members from an interface node.\n */\n #getMembersFromInterfaceNode(ts: any, sf: SourceFile, interfaceNode: any): OutlineMember[] {\n const members: OutlineMember[] = []\n\n const visit = (node: any): void | undefined => {\n if (node.parent !== interfaceNode) return\n\n let memberKind: string | undefined\n let memberName: string | undefined\n\n if (ts.isMethodSignature(node)) {\n memberKind = 'method'\n memberName = node.name?.text\n } else if (ts.isPropertySignature(node)) {\n memberKind = 'property'\n memberName = node.name?.text\n } else if (ts.isCallSignatureDeclaration(node)) {\n memberKind = 'signature'\n memberName = 'call'\n } else if (ts.isConstructSignatureDeclaration(node)) {\n memberKind = 'signature'\n memberName = 'constructor'\n } else if (ts.isIndexSignatureDeclaration(node)) {\n memberKind = 'signature'\n memberName = 'index'\n }\n\n if (memberKind && memberName) {\n members.push({\n name: memberName,\n kind: memberKind,\n startLine: sf.getLineAndCharacterOfPosition(node.getStart(sf)).line,\n endLine: sf.getLineAndCharacterOfPosition(node.getEnd()).line,\n })\n }\n }\n\n ts.forEachChild(interfaceNode, visit)\n return members\n }\n\n /**\n * Search for a named top-level declaration. Returns the matching node or undefined.\n *\n * @remarks\n * Searches FunctionDeclaration, ClassDeclaration, InterfaceDeclaration, EnumDeclaration,\n * TypeAliasDeclaration, and the individual VariableDeclaration bindings of a\n * VariableStatement. This is the single lookup shared by {@link SpooledEcmaScriptArtifact.es_signature}\n * and {@link SpooledEcmaScriptArtifact.es_jsdoc} so the two can never disagree about\n * what a name resolves to. For a variable the VariableDeclaration is returned, not its\n * enclosing statement — TypeScript attaches the JSDoc of a variable statement to both,\n * so this is safe for either caller.\n * @internal\n */\n #findTopLevelDeclaration(ts: any, sf: SourceFile, name: string): any | undefined {\n for (const node of sf.statements as unknown as any[]) {\n if (ts.isFunctionDeclaration(node) && node.name?.text === name) {\n return node\n } else if (ts.isClassDeclaration(node) && node.name?.text === name) {\n return node\n } else if (ts.isInterfaceDeclaration(node) && node.name.text === name) {\n return node\n } else if (ts.isEnumDeclaration(node) && node.name.text === name) {\n return node\n } else if (ts.isTypeAliasDeclaration(node) && node.name.text === name) {\n return node\n } else if (ts.isVariableStatement(node)) {\n const decl = node.declarationList.declarations.find(\n (d: any) => ts.isIdentifier(d.name) && d.name.text === name\n )\n if (decl) return decl\n }\n }\n return undefined\n }\n\n /**\n * Search for a named member (method, property, constructor, accessor, or signature)\n * within class and interface declarations. Returns the matching node or undefined.\n *\n * @remarks\n * Searches class members: MethodDeclaration, PropertyDeclaration, ConstructorDeclaration,\n * GetAccessorDeclaration, SetAccessorDeclaration.\n * Searches interface members: MethodSignature, PropertySignature.\n * Returns the first matching node or undefined if not found.\n * @internal\n */\n #findNestedMember(ts: any, sf: SourceFile, name: string): any | undefined {\n let foundNode: any | undefined\n\n const searchClasses = (node: any): void => {\n if (foundNode) return\n if (ts.isClassDeclaration(node)) {\n const searchMember = (member: any): void => {\n if (foundNode) return\n\n if (ts.isMethodDeclaration(member) && member.name?.text === name) {\n foundNode = member\n return\n } else if (ts.isConstructorDeclaration(member) && name === 'constructor') {\n foundNode = member\n return\n } else if (ts.isPropertyDeclaration(member) && member.name?.text === name) {\n foundNode = member\n return\n } else if (\n (ts.isGetAccessorDeclaration(member) || ts.isSetAccessorDeclaration(member)) &&\n member.name?.text === name\n ) {\n foundNode = member\n return\n }\n }\n ts.forEachChild(node, searchMember)\n }\n\n if (!foundNode) {\n ts.forEachChild(node, searchClasses)\n }\n }\n\n const searchInterfaces = (node: any): void => {\n if (foundNode) return\n if (ts.isInterfaceDeclaration(node)) {\n const searchMember = (member: any): void => {\n if (foundNode) return\n\n if (ts.isMethodSignature(member) && member.name?.text === name) {\n foundNode = member\n return\n } else if (ts.isPropertySignature(member) && member.name?.text === name) {\n foundNode = member\n return\n }\n }\n ts.forEachChild(node, searchMember)\n }\n\n if (!foundNode) {\n ts.forEachChild(node, searchInterfaces)\n }\n }\n\n ts.forEachChild(sf, searchClasses)\n if (!foundNode) {\n ts.forEachChild(sf, searchInterfaces)\n }\n\n return foundNode\n }\n\n /**\n * Extract the signature text of a declaration, excluding the body.\n * For functions/methods: includes type parameters, parameters, and return type.\n * For classes: includes the class keyword, name, type parameters, and heritage.\n * For interfaces: includes the interface keyword, name, type parameters, and heritage.\n * For enums: includes the enum keyword, modifiers, and name, excluding the member list.\n * For type aliases: includes the type keyword, name, and RHS up to the semicolon.\n * For variables: includes the variable declaration up to (but not including) the initializer.\n * For properties/accessors: includes the declaration without the body.\n * For method/property signatures: includes the signature without the body.\n *\n * @remarks\n * Variables and function expressions are returned as the binding name only (parameters\n * and return type are not surfaced for these cases).\n * @internal\n */\n #extractSignatureText(ts: any, sf: SourceFile, node: any): string {\n if (ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node)) {\n // For functions/methods: extract from start to the end of return type (or param list if no return type)\n const start = node.getStart(sf)\n // The body (if present) starts after the closing paren of parameters and optional return type\n const bodyStart = node.body ? node.body.getStart(sf) : node.getEnd()\n return sf.text.substring(start, bodyStart).trim()\n } else if (ts.isConstructorDeclaration(node)) {\n // constructor(params): void { body }\n const start = node.getStart(sf)\n const bodyStart = node.body ? node.body.getStart(sf) : node.getEnd()\n return sf.text.substring(start, bodyStart).trim()\n } else if (ts.isClassDeclaration(node)) {\n // class Name<T> extends Base { members }\n // Find the opening brace that starts the body and stop before it.\n const start = node.getStart(sf)\n const children = node.getChildren(sf)\n const openBrace = children.find((child: any) => child.kind === ts.SyntaxKind.OpenBraceToken)\n if (openBrace) {\n // Extract up to the opening brace and trim any trailing whitespace/brace\n const bracePos = openBrace.getStart(sf)\n let text = sf.text.substring(start, bracePos).trim()\n // Remove trailing opening brace and any whitespace before it\n text = text.replace(/\\s*\\{\\s*$/, '')\n return text\n }\n return ''\n } else if (ts.isInterfaceDeclaration(node)) {\n // interface Name<T> extends Base { members }\n // Find the opening brace that starts the body and stop before it.\n const start = node.getStart(sf)\n const children = node.getChildren(sf)\n const openBrace = children.find((child: any) => child.kind === ts.SyntaxKind.OpenBraceToken)\n if (openBrace) {\n // Extract up to the opening brace and trim any trailing whitespace/brace\n const bracePos = openBrace.getStart(sf)\n let text = sf.text.substring(start, bracePos).trim()\n // Remove trailing opening brace and any whitespace before it\n text = text.replace(/\\s*\\{\\s*$/, '')\n return text\n }\n return ''\n } else if (ts.isEnumDeclaration(node)) {\n // enum Name { members } or const enum Name { members } or declare enum Name { members }\n // Find the opening brace that starts the member list and stop before it.\n const start = node.getStart(sf)\n const children = node.getChildren(sf)\n const openBrace = children.find((child: any) => child.kind === ts.SyntaxKind.OpenBraceToken)\n if (openBrace) {\n // Extract up to the opening brace and trim any trailing whitespace/brace\n const bracePos = openBrace.getStart(sf)\n let text = sf.text.substring(start, bracePos).trim()\n // Remove trailing opening brace and any whitespace before it\n text = text.replace(/\\s*\\{\\s*$/, '')\n return text\n }\n return ''\n } else if (ts.isTypeAliasDeclaration(node)) {\n // type Name<T> = ...\n const start = node.getStart(sf)\n const end = node.getEnd()\n return sf.text.substring(start, end).trim()\n } else if (ts.isVariableDeclaration(node)) {\n // const x = 5 or let y: string\n // Return up to the initializer or end if no initializer\n const start = node.getStart(sf)\n const initStart = node.initializer ? node.initializer.getStart(sf) : node.getEnd()\n let text = sf.text.substring(start, initStart).trim()\n // Remove trailing assignment operator and surrounding whitespace\n text = text.replace(/\\s*=\\s*$/, '')\n return text\n } else if (ts.isPropertyDeclaration(node)) {\n // class property: name: type = initializer;\n // Return from start to initializer (if any) or end (without body)\n const start = node.getStart(sf)\n const initStart = node.initializer ? node.initializer.getStart(sf) : node.getEnd()\n let text = sf.text.substring(start, initStart).trim()\n // Remove trailing assignment operator and surrounding whitespace\n text = text.replace(/\\s*=\\s*$/, '')\n return text\n } else if (ts.isGetAccessorDeclaration(node) || ts.isSetAccessorDeclaration(node)) {\n // getter/setter: get/set name(): type { body }\n const start = node.getStart(sf)\n const bodyStart = node.body ? node.body.getStart(sf) : node.getEnd()\n return sf.text.substring(start, bodyStart).trim()\n } else if (ts.isMethodSignature(node)) {\n // interface method signature: name(params): returnType;\n const start = node.getStart(sf)\n const end = node.getEnd()\n return sf.text.substring(start, end).trim()\n } else if (ts.isPropertySignature(node)) {\n // interface property: name: type;\n const start = node.getStart(sf)\n const end = node.getEnd()\n return sf.text.substring(start, end).trim()\n }\n return ''\n }\n\n /**\n * Return the signature text for a named declaration.\n * Searches top-level declarations (functions, classes, interfaces, enums, type aliases,\n * const/let/var bindings), class members (methods, properties, constructors, accessors),\n * and interface members (method signatures, property signatures) — the same lookup\n * {@link SpooledEcmaScriptArtifact.es_jsdoc} uses, so the two always agree on what a\n * name resolves to.\n */\n async es_signature(name: string): Promise<string> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n // Top-level declarations first, then nested class/interface members.\n const node = this.#findTopLevelDeclaration(ts, sf, name) ?? this.#findNestedMember(ts, sf, name)\n\n return node ? this.#extractSignatureText(ts, sf, node) : ''\n }\n\n /**\n * Return the JSDoc comment for a named declaration.\n * Searches top-level declarations (functions, classes, interfaces, enums, type aliases,\n * const/let/var bindings), class members (methods, properties, constructors, accessors),\n * and interface members (method signatures, property signatures) — the same lookup\n * {@link SpooledEcmaScriptArtifact.es_signature} uses, so the two always agree on what a\n * name resolves to.\n */\n async es_jsdoc(name: string): Promise<string> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n // Helper to extract JSDoc from a node\n const extractJSDoc = (target: any): string => {\n // A JSDoc block sits above the whole `const a = 1, b = 2` statement, so for a\n // variable binding read the comment off the enclosing VariableStatement — otherwise\n // only the first declarator would carry it.\n const node =\n ts.isVariableDeclaration(target) && target.parent?.parent ? target.parent.parent : target\n const comments = ts.getJSDocCommentsAndTags(node)\n if (comments && comments.length > 0) {\n const commentStrs: string[] = []\n for (const comment of comments) {\n const text = sf.text.substring(comment.getStart(sf), comment.getEnd())\n commentStrs.push(text)\n }\n return commentStrs.join('\\n')\n }\n return ''\n }\n\n // Top-level declarations first, then nested class/interface members.\n const node = this.#findTopLevelDeclaration(ts, sf, name) ?? this.#findNestedMember(ts, sf, name)\n\n return node ? extractJSDoc(node) : ''\n }\n\n /**\n * Return every line where an identifier appears (syntactic scan only).\n */\n async es_references(name: string): Promise<IdentifierReference[]> {\n const ts = await SpooledEcmaScriptArtifact.#loadTypeScript()\n const sf = await this.#resolveSourceFile()\n\n const references: IdentifierReference[] = []\n\n const visit = (node: any): void | undefined => {\n if (ts.isIdentifier(node) && node.text === name) {\n const pos = node.getStart(sf)\n const lineChar = sf.getLineAndCharacterOfPosition(pos)\n references.push({\n line: lineChar.line,\n column: lineChar.character,\n })\n }\n\n ts.forEachChild(node, visit)\n }\n\n ts.forEachChild(sf, visit)\n return references\n }\n\n /**\n * Serialise this SpooledEcmaScriptArtifact into an encoder snapshot.\n */\n [ENCODE_METHOD](): AdkEncodableSnapshot {\n return {\n reader: this.readerDescriptor(),\n fileName: this.#fileName,\n scriptKind: this.#scriptKind,\n }\n }\n\n /**\n * Reconstruct a SpooledEcmaScriptArtifact from an encoder snapshot.\n */\n static [DECODE_METHOD](data: AdkEncodableSnapshot): SpooledEcmaScriptArtifact {\n const snapshot = data as {\n reader: ReaderDescriptor\n fileName?: string\n scriptKind?: 'js' | 'jsx' | 'ts' | 'tsx'\n }\n return new SpooledEcmaScriptArtifact(resolveSpoolReader(snapshot.reader), {\n fileName: snapshot.fileName,\n scriptKind: snapshot.scriptKind,\n })\n }\n}\n\n/**\n * Battery exception re-export.\n */\nexport { E_TYPESCRIPT_PEER_MISSING }\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { t as createException } from "./exceptions-DRYLe-J4.mjs";
2
2
  import { n as isInstanceOf, t as isError } from "./guards-BEpY7lBI.mjs";
3
- import { a as resolveArtifactById, d as ArtifactTool, l as resolveSpoolReader, n as collectArtifactCompatibleIds, r as defaultSerialise, t as SpooledArtifact } from "./spooled_artifact-BkueYJhR.mjs";
3
+ import { a as resolveArtifactById, f as ArtifactTool, l as resolveSpoolReader, n as collectArtifactCompatibleIds, r as defaultSerialise, t as SpooledArtifact } from "./spooled_artifact-Bw_7swIp.mjs";
4
+ import "./common-BpdHIpQE.mjs";
4
5
  import "./factories.mjs";
5
- import "./common-v9Jo9M5k.mjs";
6
6
  import "./guards.mjs";
7
7
  import "./spooled_artifact.mjs";
8
8
  import { validator } from "@nhtio/validation";
@@ -768,4 +768,4 @@ var SpooledEcmaScriptArtifact = class SpooledEcmaScriptArtifact extends SpooledA
768
768
  //#endregion
769
769
  export { E_TYPESCRIPT_PEER_MISSING as n, SpooledEcmaScriptArtifact as t };
770
770
 
771
- //# sourceMappingURL=ecmascript-CZ7_YKfZ.mjs.map
771
+ //# sourceMappingURL=ecmascript-DcmUQ9Jx.mjs.map