experimental-ash 0.2.0-alpha.2 → 0.2.0-alpha.21

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 (585) hide show
  1. package/dist/src/channel/http-channel.d.ts +26 -0
  2. package/dist/src/channel/http-channel.d.ts.map +1 -0
  3. package/dist/src/channel/http-channel.js +24 -0
  4. package/dist/src/channel/http-channel.js.map +1 -0
  5. package/dist/src/channel/resolve-text.d.ts +20 -0
  6. package/dist/src/channel/resolve-text.d.ts.map +1 -0
  7. package/dist/src/channel/resolve-text.js +60 -0
  8. package/dist/src/channel/resolve-text.js.map +1 -0
  9. package/dist/src/channel/schedule-channel.d.ts +16 -0
  10. package/dist/src/channel/schedule-channel.d.ts.map +1 -0
  11. package/dist/src/channel/schedule-channel.js +20 -0
  12. package/dist/src/channel/schedule-channel.js.map +1 -0
  13. package/dist/src/channel/schedule.d.ts +4 -6
  14. package/dist/src/channel/schedule.d.ts.map +1 -1
  15. package/dist/src/channel/schedule.js +6 -9
  16. package/dist/src/channel/schedule.js.map +1 -1
  17. package/dist/src/channel/slack-channel.d.ts +125 -0
  18. package/dist/src/channel/slack-channel.d.ts.map +1 -0
  19. package/dist/src/channel/slack-channel.js +320 -0
  20. package/dist/src/channel/slack-channel.js.map +1 -0
  21. package/dist/src/channel/subagent-channel.d.ts +41 -0
  22. package/dist/src/channel/subagent-channel.d.ts.map +1 -0
  23. package/dist/src/channel/{subagent-emitter.js → subagent-channel.js} +15 -19
  24. package/dist/src/channel/subagent-channel.js.map +1 -0
  25. package/dist/src/channel/types.d.ts +157 -90
  26. package/dist/src/channel/types.d.ts.map +1 -1
  27. package/dist/src/channel/types.js +64 -1
  28. package/dist/src/channel/types.js.map +1 -1
  29. package/dist/src/cli/dev/input-requests.d.ts +4 -4
  30. package/dist/src/cli/dev/input-requests.d.ts.map +1 -1
  31. package/dist/src/cli/dev/input-requests.js +34 -65
  32. package/dist/src/cli/dev/input-requests.js.map +1 -1
  33. package/dist/src/cli/dev/repl.d.ts.map +1 -1
  34. package/dist/src/cli/dev/repl.js +41 -24
  35. package/dist/src/cli/dev/repl.js.map +1 -1
  36. package/dist/src/client/index.d.ts +3 -2
  37. package/dist/src/client/index.d.ts.map +1 -1
  38. package/dist/src/client/index.js +1 -0
  39. package/dist/src/client/index.js.map +1 -1
  40. package/dist/src/client/message-response.d.ts +5 -5
  41. package/dist/src/client/message-response.d.ts.map +1 -1
  42. package/dist/src/client/message-response.js +6 -6
  43. package/dist/src/client/message-response.js.map +1 -1
  44. package/dist/src/client/open-stream.d.ts +1 -1
  45. package/dist/src/client/open-stream.d.ts.map +1 -1
  46. package/dist/src/client/open-stream.js +1 -1
  47. package/dist/src/client/open-stream.js.map +1 -1
  48. package/dist/src/client/session-utils.d.ts +3 -3
  49. package/dist/src/client/session-utils.d.ts.map +1 -1
  50. package/dist/src/client/session-utils.js +4 -4
  51. package/dist/src/client/session-utils.js.map +1 -1
  52. package/dist/src/client/session.d.ts +5 -5
  53. package/dist/src/client/session.js +28 -28
  54. package/dist/src/client/session.js.map +1 -1
  55. package/dist/src/client/types.d.ts +8 -8
  56. package/dist/src/client/types.d.ts.map +1 -1
  57. package/dist/src/compiler/channel-url.d.ts +1 -1
  58. package/dist/src/compiler/channel-url.js +1 -1
  59. package/dist/src/compiler/manifest.d.ts +38 -5
  60. package/dist/src/compiler/manifest.d.ts.map +1 -1
  61. package/dist/src/compiler/manifest.js +15 -1
  62. package/dist/src/compiler/manifest.js.map +1 -1
  63. package/dist/src/compiler/module-map.js +8 -0
  64. package/dist/src/compiler/module-map.js.map +1 -1
  65. package/dist/src/compiler/normalize-channel.d.ts +1 -1
  66. package/dist/src/compiler/normalize-channel.js +3 -3
  67. package/dist/src/compiler/normalize-channel.js.map +1 -1
  68. package/dist/src/compiler/normalize-connection.d.ts +14 -0
  69. package/dist/src/compiler/normalize-connection.d.ts.map +1 -0
  70. package/dist/src/compiler/normalize-connection.js +29 -0
  71. package/dist/src/compiler/normalize-connection.js.map +1 -0
  72. package/dist/src/compiler/normalize-manifest.d.ts.map +1 -1
  73. package/dist/src/compiler/normalize-manifest.js +2 -0
  74. package/dist/src/compiler/normalize-manifest.js.map +1 -1
  75. package/dist/src/context/accessors.d.ts +13 -12
  76. package/dist/src/context/accessors.d.ts.map +1 -1
  77. package/dist/src/context/accessors.js +16 -17
  78. package/dist/src/context/accessors.js.map +1 -1
  79. package/dist/src/context/container.d.ts +17 -19
  80. package/dist/src/context/container.d.ts.map +1 -1
  81. package/dist/src/context/container.js +21 -14
  82. package/dist/src/context/container.js.map +1 -1
  83. package/dist/src/context/durable-context.d.ts +18 -0
  84. package/dist/src/context/durable-context.d.ts.map +1 -0
  85. package/dist/src/context/durable-context.js +49 -0
  86. package/dist/src/context/durable-context.js.map +1 -0
  87. package/dist/src/context/key.d.ts +43 -83
  88. package/dist/src/context/key.d.ts.map +1 -1
  89. package/dist/src/context/key.js +58 -80
  90. package/dist/src/context/key.js.map +1 -1
  91. package/dist/src/context/keys.d.ts +8 -20
  92. package/dist/src/context/keys.d.ts.map +1 -1
  93. package/dist/src/context/keys.js +20 -34
  94. package/dist/src/context/keys.js.map +1 -1
  95. package/dist/src/context/provider.d.ts +2 -2
  96. package/dist/src/context/provider.d.ts.map +1 -1
  97. package/dist/src/context/providers/connection.d.ts +4 -0
  98. package/dist/src/context/providers/connection.d.ts.map +1 -0
  99. package/dist/src/context/providers/connection.js +18 -0
  100. package/dist/src/context/providers/connection.js.map +1 -0
  101. package/dist/src/context/providers/session.d.ts.map +1 -1
  102. package/dist/src/context/providers/session.js +1 -2
  103. package/dist/src/context/providers/session.js.map +1 -1
  104. package/dist/src/context/providers/skill.d.ts.map +1 -1
  105. package/dist/src/context/providers/skill.js +2 -15
  106. package/dist/src/context/providers/skill.js.map +1 -1
  107. package/dist/src/context/run-step.d.ts +6 -8
  108. package/dist/src/context/run-step.d.ts.map +1 -1
  109. package/dist/src/context/run-step.js +15 -17
  110. package/dist/src/context/run-step.js.map +1 -1
  111. package/dist/src/context/seed-keys.d.ts +21 -0
  112. package/dist/src/context/seed-keys.d.ts.map +1 -0
  113. package/dist/src/context/seed-keys.js +31 -0
  114. package/dist/src/context/seed-keys.js.map +1 -0
  115. package/dist/src/context/serialize.d.ts +8 -9
  116. package/dist/src/context/serialize.d.ts.map +1 -1
  117. package/dist/src/context/serialize.js +38 -15
  118. package/dist/src/context/serialize.js.map +1 -1
  119. package/dist/src/discover/connections.d.ts +48 -0
  120. package/dist/src/discover/connections.d.ts.map +1 -0
  121. package/dist/src/discover/connections.js +169 -0
  122. package/dist/src/discover/connections.js.map +1 -0
  123. package/dist/src/discover/discover-agent.d.ts +1 -0
  124. package/dist/src/discover/discover-agent.d.ts.map +1 -1
  125. package/dist/src/discover/discover-agent.js +8 -0
  126. package/dist/src/discover/discover-agent.js.map +1 -1
  127. package/dist/src/discover/discover-subagent.js +7 -0
  128. package/dist/src/discover/discover-subagent.js.map +1 -1
  129. package/dist/src/discover/filesystem.d.ts +3 -3
  130. package/dist/src/discover/filesystem.d.ts.map +1 -1
  131. package/dist/src/discover/filesystem.js +7 -0
  132. package/dist/src/discover/filesystem.js.map +1 -1
  133. package/dist/src/discover/grammar.d.ts +20 -4
  134. package/dist/src/discover/grammar.d.ts.map +1 -1
  135. package/dist/src/discover/grammar.js +31 -5
  136. package/dist/src/discover/grammar.js.map +1 -1
  137. package/dist/src/discover/manifest.d.ts +28 -1
  138. package/dist/src/discover/manifest.d.ts.map +1 -1
  139. package/dist/src/discover/manifest.js +11 -1
  140. package/dist/src/discover/manifest.js.map +1 -1
  141. package/dist/src/evals/runner/artifacts.js +1 -1
  142. package/dist/src/evals/runner/artifacts.js.map +1 -1
  143. package/dist/src/evals/runner/derive-run-facts.js +5 -5
  144. package/dist/src/evals/runner/derive-run-facts.js.map +1 -1
  145. package/dist/src/evals/runner/execute-case.js +4 -4
  146. package/dist/src/evals/runner/execute-case.js.map +1 -1
  147. package/dist/src/evals/runner/execute-suite.js +1 -1
  148. package/dist/src/evals/runner/execute-suite.js.map +1 -1
  149. package/dist/src/evals/runner/reporters/braintrust.js +2 -2
  150. package/dist/src/evals/runner/reporters/braintrust.js.map +1 -1
  151. package/dist/src/evals/types.d.ts +4 -4
  152. package/dist/src/evals/types.d.ts.map +1 -1
  153. package/dist/src/execution/continuous-entry.d.ts +18 -9
  154. package/dist/src/execution/continuous-entry.d.ts.map +1 -1
  155. package/dist/src/execution/continuous-entry.js +62 -18
  156. package/dist/src/execution/continuous-entry.js.map +1 -1
  157. package/dist/src/execution/continuous-runtime.d.ts +1 -1
  158. package/dist/src/execution/continuous-runtime.d.ts.map +1 -1
  159. package/dist/src/execution/continuous-runtime.js +14 -10
  160. package/dist/src/execution/continuous-runtime.js.map +1 -1
  161. package/dist/src/execution/node-step.d.ts +1 -2
  162. package/dist/src/execution/node-step.d.ts.map +1 -1
  163. package/dist/src/execution/node-step.js +42 -55
  164. package/dist/src/execution/node-step.js.map +1 -1
  165. package/dist/src/execution/runtime-context.d.ts +3 -0
  166. package/dist/src/execution/runtime-context.d.ts.map +1 -1
  167. package/dist/src/execution/runtime-context.js +6 -4
  168. package/dist/src/execution/runtime-context.js.map +1 -1
  169. package/dist/src/execution/session.d.ts +2 -1
  170. package/dist/src/execution/session.d.ts.map +1 -1
  171. package/dist/src/execution/session.js +1 -0
  172. package/dist/src/execution/session.js.map +1 -1
  173. package/dist/src/execution/skills/access.d.ts.map +1 -1
  174. package/dist/src/execution/skills/instructions.d.ts +6 -6
  175. package/dist/src/execution/skills/instructions.d.ts.map +1 -1
  176. package/dist/src/execution/skills/instructions.js +15 -15
  177. package/dist/src/execution/skills/instructions.js.map +1 -1
  178. package/dist/src/execution/skills/types.d.ts +4 -4
  179. package/dist/src/execution/skills/types.d.ts.map +1 -1
  180. package/dist/src/execution/step-context.d.ts +27 -0
  181. package/dist/src/execution/step-context.d.ts.map +1 -0
  182. package/dist/src/execution/step-context.js +54 -0
  183. package/dist/src/execution/step-context.js.map +1 -0
  184. package/dist/src/execution/subagent-tool.d.ts +1 -1
  185. package/dist/src/execution/subagent-tool.d.ts.map +1 -1
  186. package/dist/src/execution/subagent-tool.js +3 -4
  187. package/dist/src/execution/subagent-tool.js.map +1 -1
  188. package/dist/src/execution/tool-compaction.d.ts +1 -3
  189. package/dist/src/execution/tool-compaction.d.ts.map +1 -1
  190. package/dist/src/execution/tool-compaction.js +6 -20
  191. package/dist/src/execution/tool-compaction.js.map +1 -1
  192. package/dist/src/execution/types.d.ts +1 -1
  193. package/dist/src/execution/types.d.ts.map +1 -1
  194. package/dist/src/execution/workflow-entry.d.ts +4 -5
  195. package/dist/src/execution/workflow-entry.d.ts.map +1 -1
  196. package/dist/src/execution/workflow-entry.js +7 -2
  197. package/dist/src/execution/workflow-entry.js.map +1 -1
  198. package/dist/src/execution/workflow-runtime.d.ts.map +1 -1
  199. package/dist/src/execution/workflow-runtime.js +10 -5
  200. package/dist/src/execution/workflow-runtime.js.map +1 -1
  201. package/dist/src/execution/workflow-steps.d.ts +13 -6
  202. package/dist/src/execution/workflow-steps.d.ts.map +1 -1
  203. package/dist/src/execution/workflow-steps.js +24 -19
  204. package/dist/src/execution/workflow-steps.js.map +1 -1
  205. package/dist/src/harness/emission.d.ts +36 -27
  206. package/dist/src/harness/emission.d.ts.map +1 -1
  207. package/dist/src/harness/emission.js +130 -84
  208. package/dist/src/harness/emission.js.map +1 -1
  209. package/dist/src/harness/execute-tool.d.ts +52 -0
  210. package/dist/src/harness/execute-tool.d.ts.map +1 -0
  211. package/dist/src/harness/execute-tool.js +59 -0
  212. package/dist/src/harness/execute-tool.js.map +1 -0
  213. package/dist/src/harness/input-extraction.d.ts +3 -3
  214. package/dist/src/harness/input-extraction.d.ts.map +1 -1
  215. package/dist/src/harness/input-extraction.js +15 -8
  216. package/dist/src/harness/input-extraction.js.map +1 -1
  217. package/dist/src/harness/input-requests.d.ts +46 -40
  218. package/dist/src/harness/input-requests.d.ts.map +1 -1
  219. package/dist/src/harness/input-requests.js +169 -245
  220. package/dist/src/harness/input-requests.js.map +1 -1
  221. package/dist/src/harness/messages.d.ts +10 -9
  222. package/dist/src/harness/messages.d.ts.map +1 -1
  223. package/dist/src/harness/messages.js +23 -20
  224. package/dist/src/harness/messages.js.map +1 -1
  225. package/dist/src/harness/provider-tools.d.ts +2 -2
  226. package/dist/src/harness/provider-tools.d.ts.map +1 -1
  227. package/dist/src/harness/provider-tools.js +7 -3
  228. package/dist/src/harness/provider-tools.js.map +1 -1
  229. package/dist/src/harness/step-hooks.d.ts +77 -0
  230. package/dist/src/harness/step-hooks.d.ts.map +1 -0
  231. package/dist/src/harness/step-hooks.js +192 -0
  232. package/dist/src/harness/step-hooks.js.map +1 -0
  233. package/dist/src/harness/tool-loop.d.ts +4 -2
  234. package/dist/src/harness/tool-loop.d.ts.map +1 -1
  235. package/dist/src/harness/tool-loop.js +130 -181
  236. package/dist/src/harness/tool-loop.js.map +1 -1
  237. package/dist/src/harness/tools.d.ts +12 -16
  238. package/dist/src/harness/tools.d.ts.map +1 -1
  239. package/dist/src/harness/tools.js +39 -33
  240. package/dist/src/harness/tools.js.map +1 -1
  241. package/dist/src/harness/types.d.ts +44 -28
  242. package/dist/src/harness/types.d.ts.map +1 -1
  243. package/dist/src/harness/types.js +6 -1
  244. package/dist/src/harness/types.js.map +1 -1
  245. package/dist/src/internal/application/compiled-artifacts.d.ts +5 -3
  246. package/dist/src/internal/application/compiled-artifacts.d.ts.map +1 -1
  247. package/dist/src/internal/application/compiled-artifacts.js +19 -40
  248. package/dist/src/internal/application/compiled-artifacts.js.map +1 -1
  249. package/dist/src/internal/application/package.js +1 -1
  250. package/dist/src/internal/authored-definition/channel.d.ts +3 -3
  251. package/dist/src/internal/authored-definition/channel.d.ts.map +1 -1
  252. package/dist/src/internal/authored-definition/channel.js +28 -4
  253. package/dist/src/internal/authored-definition/channel.js.map +1 -1
  254. package/dist/src/internal/authored-definition/connection.d.ts +10 -0
  255. package/dist/src/internal/authored-definition/connection.d.ts.map +1 -0
  256. package/dist/src/internal/authored-definition/connection.js +134 -0
  257. package/dist/src/internal/authored-definition/connection.js.map +1 -0
  258. package/dist/src/internal/authored-module.js +1 -1
  259. package/dist/src/internal/authored-module.js.map +1 -1
  260. package/dist/src/internal/message/builder.d.ts +1 -2
  261. package/dist/src/internal/message/builder.d.ts.map +1 -1
  262. package/dist/src/internal/message/builder.js +4 -12
  263. package/dist/src/internal/message/builder.js.map +1 -1
  264. package/dist/src/internal/nitro/host/configure-message-routes.d.ts +3 -1
  265. package/dist/src/internal/nitro/host/configure-message-routes.d.ts.map +1 -1
  266. package/dist/src/internal/nitro/host/configure-message-routes.js +124 -25
  267. package/dist/src/internal/nitro/host/configure-message-routes.js.map +1 -1
  268. package/dist/src/internal/nitro/host/create-application-nitro.d.ts.map +1 -1
  269. package/dist/src/internal/nitro/host/create-application-nitro.js +63 -21
  270. package/dist/src/internal/nitro/host/create-application-nitro.js.map +1 -1
  271. package/dist/src/internal/nitro/host/load-home-page-web-assets.d.ts +13 -0
  272. package/dist/src/internal/nitro/host/load-home-page-web-assets.d.ts.map +1 -0
  273. package/dist/src/internal/nitro/host/load-home-page-web-assets.js +35 -0
  274. package/dist/src/internal/nitro/host/load-home-page-web-assets.js.map +1 -0
  275. package/dist/src/internal/nitro/host/prepare-application-host.js +1 -1
  276. package/dist/src/internal/nitro/host/prepare-application-host.js.map +1 -1
  277. package/dist/src/internal/nitro/routes/channel-dispatch.d.ts +10 -18
  278. package/dist/src/internal/nitro/routes/channel-dispatch.d.ts.map +1 -1
  279. package/dist/src/internal/nitro/routes/channel-dispatch.js +16 -45
  280. package/dist/src/internal/nitro/routes/channel-dispatch.js.map +1 -1
  281. package/dist/src/internal/nitro/routes/home-page/build-home-page-response.d.ts +88 -0
  282. package/dist/src/internal/nitro/routes/home-page/build-home-page-response.d.ts.map +1 -0
  283. package/dist/src/internal/nitro/routes/home-page/build-home-page-response.js +175 -0
  284. package/dist/src/internal/nitro/routes/home-page/build-home-page-response.js.map +1 -0
  285. package/dist/src/internal/nitro/routes/home.d.ts +7 -0
  286. package/dist/src/internal/nitro/routes/home.d.ts.map +1 -0
  287. package/dist/src/internal/nitro/routes/home.js +22 -0
  288. package/dist/src/internal/nitro/routes/home.js.map +1 -0
  289. package/dist/src/internal/nitro/routes/index.d.ts +3 -8
  290. package/dist/src/internal/nitro/routes/index.d.ts.map +1 -1
  291. package/dist/src/internal/nitro/routes/index.js +18 -36
  292. package/dist/src/internal/nitro/routes/index.js.map +1 -1
  293. package/dist/src/internal/nitro/routes/runtime-artifacts.d.ts +10 -3
  294. package/dist/src/internal/nitro/routes/runtime-artifacts.d.ts.map +1 -1
  295. package/dist/src/internal/nitro/routes/runtime-artifacts.js +2 -9
  296. package/dist/src/internal/nitro/routes/runtime-artifacts.js.map +1 -1
  297. package/dist/src/internal/nitro/routes/runtime-stack.d.ts +8 -7
  298. package/dist/src/internal/nitro/routes/runtime-stack.d.ts.map +1 -1
  299. package/dist/src/internal/nitro/routes/runtime-stack.js +10 -10
  300. package/dist/src/internal/nitro/routes/runtime-stack.js.map +1 -1
  301. package/dist/src/internal/nitro/routes/schedule-task.d.ts +7 -7
  302. package/dist/src/internal/nitro/routes/schedule-task.d.ts.map +1 -1
  303. package/dist/src/internal/nitro/routes/schedule-task.js +22 -30
  304. package/dist/src/internal/nitro/routes/schedule-task.js.map +1 -1
  305. package/dist/src/internal/nitro/routes/web-ui/assets/index.js +10 -0
  306. package/dist/src/internal/nitro/routes/web-ui/assets/style.css +2 -0
  307. package/dist/src/internal/nitro/routes/web-ui/index.html +17 -0
  308. package/dist/src/internal/nitro/routes/workflow-data.d.ts +32 -0
  309. package/dist/src/internal/nitro/routes/workflow-data.d.ts.map +1 -0
  310. package/dist/src/internal/nitro/routes/workflow-data.js +142 -0
  311. package/dist/src/internal/nitro/routes/workflow-data.js.map +1 -0
  312. package/dist/src/internal/nitro/routes/workflow-route-helpers.d.ts +46 -0
  313. package/dist/src/internal/nitro/routes/workflow-route-helpers.d.ts.map +1 -0
  314. package/dist/src/internal/nitro/routes/workflow-route-helpers.js +137 -0
  315. package/dist/src/internal/nitro/routes/workflow-route-helpers.js.map +1 -0
  316. package/dist/src/internal/nitro/routes/workflow-run-events.d.ts +14 -0
  317. package/dist/src/internal/nitro/routes/workflow-run-events.d.ts.map +1 -0
  318. package/dist/src/internal/nitro/routes/workflow-run-events.js +42 -0
  319. package/dist/src/internal/nitro/routes/workflow-run-events.js.map +1 -0
  320. package/dist/src/internal/nitro/routes/workflow-run-steps.d.ts +14 -0
  321. package/dist/src/internal/nitro/routes/workflow-run-steps.d.ts.map +1 -0
  322. package/dist/src/internal/nitro/routes/workflow-run-steps.js +42 -0
  323. package/dist/src/internal/nitro/routes/workflow-run-steps.js.map +1 -0
  324. package/dist/src/internal/nitro/routes/workflow-run.d.ts +13 -0
  325. package/dist/src/internal/nitro/routes/workflow-run.d.ts.map +1 -0
  326. package/dist/src/internal/nitro/routes/workflow-run.js +35 -0
  327. package/dist/src/internal/nitro/routes/workflow-run.js.map +1 -0
  328. package/dist/src/internal/nitro/routes/workflow-runs.d.ts +11 -0
  329. package/dist/src/internal/nitro/routes/workflow-runs.d.ts.map +1 -0
  330. package/dist/src/internal/nitro/routes/workflow-runs.js +29 -0
  331. package/dist/src/internal/nitro/routes/workflow-runs.js.map +1 -0
  332. package/dist/src/protocol/message.d.ts +160 -76
  333. package/dist/src/protocol/message.d.ts.map +1 -1
  334. package/dist/src/protocol/message.js +92 -36
  335. package/dist/src/protocol/message.js.map +1 -1
  336. package/dist/src/protocol/routes.d.ts +11 -3
  337. package/dist/src/protocol/routes.d.ts.map +1 -1
  338. package/dist/src/protocol/routes.js +12 -4
  339. package/dist/src/protocol/routes.js.map +1 -1
  340. package/dist/src/public/channels/auth.d.ts +32 -81
  341. package/dist/src/public/channels/auth.d.ts.map +1 -1
  342. package/dist/src/public/channels/auth.js +23 -86
  343. package/dist/src/public/channels/auth.js.map +1 -1
  344. package/dist/src/public/channels/http.d.ts +66 -26
  345. package/dist/src/public/channels/http.d.ts.map +1 -1
  346. package/dist/src/public/channels/http.js +88 -78
  347. package/dist/src/public/channels/http.js.map +1 -1
  348. package/dist/src/public/channels/index.d.ts +9 -10
  349. package/dist/src/public/channels/index.d.ts.map +1 -1
  350. package/dist/src/public/channels/index.js +9 -9
  351. package/dist/src/public/channels/index.js.map +1 -1
  352. package/dist/src/public/channels/slack/index.d.ts +104 -37
  353. package/dist/src/public/channels/slack/index.d.ts.map +1 -1
  354. package/dist/src/public/channels/slack/index.js +168 -47
  355. package/dist/src/public/channels/slack/index.js.map +1 -1
  356. package/dist/src/public/channels/slack/lowlevel.d.ts +5 -5
  357. package/dist/src/public/channels/slack/lowlevel.d.ts.map +1 -1
  358. package/dist/src/public/channels/slack/lowlevel.js +4 -4
  359. package/dist/src/public/channels/slack/lowlevel.js.map +1 -1
  360. package/dist/src/public/connections/index.d.ts +25 -0
  361. package/dist/src/public/connections/index.d.ts.map +1 -0
  362. package/dist/src/public/connections/index.js +24 -0
  363. package/dist/src/public/connections/index.js.map +1 -0
  364. package/dist/src/public/definitions/channel.d.ts +89 -60
  365. package/dist/src/public/definitions/channel.d.ts.map +1 -1
  366. package/dist/src/public/definitions/channel.js +42 -24
  367. package/dist/src/public/definitions/channel.js.map +1 -1
  368. package/dist/src/public/definitions/connections/mcp.d.ts +60 -0
  369. package/dist/src/public/definitions/connections/mcp.d.ts.map +1 -0
  370. package/dist/src/public/definitions/connections/mcp.js +7 -0
  371. package/dist/src/public/definitions/connections/mcp.js.map +1 -0
  372. package/dist/src/public/definitions/tool.d.ts +14 -7
  373. package/dist/src/public/definitions/tool.d.ts.map +1 -1
  374. package/dist/src/public/definitions/tool.js.map +1 -1
  375. package/dist/src/public/index.d.ts +10 -9
  376. package/dist/src/public/index.d.ts.map +1 -1
  377. package/dist/src/public/index.js +7 -6
  378. package/dist/src/public/index.js.map +1 -1
  379. package/dist/src/public/sandboxes/internal.d.ts +1 -1
  380. package/dist/src/public/sandboxes/internal.js +1 -1
  381. package/dist/src/public/tools/defaults.d.ts +6 -6
  382. package/dist/src/public/tools/defaults.d.ts.map +1 -1
  383. package/dist/src/public/tools/defaults.js +6 -6
  384. package/dist/src/public/tools/defaults.js.map +1 -1
  385. package/dist/src/public/tools/internal.d.ts +1 -1
  386. package/dist/src/public/tools/internal.js +1 -1
  387. package/dist/src/runtime/actions/types.d.ts +21 -18
  388. package/dist/src/runtime/actions/types.d.ts.map +1 -1
  389. package/dist/src/runtime/actions/types.js +22 -19
  390. package/dist/src/runtime/actions/types.js.map +1 -1
  391. package/dist/src/runtime/agent/bootstrap-model-utils.d.ts +37 -0
  392. package/dist/src/runtime/agent/bootstrap-model-utils.d.ts.map +1 -0
  393. package/dist/src/runtime/agent/bootstrap-model-utils.js +149 -0
  394. package/dist/src/runtime/agent/bootstrap-model-utils.js.map +1 -0
  395. package/dist/src/runtime/agent/bootstrap-model.d.ts.map +1 -1
  396. package/dist/src/runtime/agent/bootstrap-model.js +11 -80
  397. package/dist/src/runtime/agent/bootstrap-model.js.map +1 -1
  398. package/dist/src/runtime/agent/bootstrap.d.ts.map +1 -1
  399. package/dist/src/runtime/agent/bootstrap.js +4 -1
  400. package/dist/src/runtime/agent/bootstrap.js.map +1 -1
  401. package/dist/src/runtime/agent/mock-model-adapter.d.ts.map +1 -1
  402. package/dist/src/runtime/agent/mock-model-adapter.js +72 -134
  403. package/dist/src/runtime/agent/mock-model-adapter.js.map +1 -1
  404. package/dist/src/runtime/channels/registry.d.ts +21 -0
  405. package/dist/src/runtime/channels/registry.d.ts.map +1 -0
  406. package/dist/src/runtime/channels/registry.js +65 -0
  407. package/dist/src/runtime/channels/registry.js.map +1 -0
  408. package/dist/src/runtime/connections/mcp-client.d.ts +48 -0
  409. package/dist/src/runtime/connections/mcp-client.d.ts.map +1 -0
  410. package/dist/src/runtime/connections/mcp-client.js +182 -0
  411. package/dist/src/runtime/connections/mcp-client.js.map +1 -0
  412. package/dist/src/runtime/connections/registry.d.ts +33 -0
  413. package/dist/src/runtime/connections/registry.d.ts.map +1 -0
  414. package/dist/src/runtime/connections/registry.js +54 -0
  415. package/dist/src/runtime/connections/registry.js.map +1 -0
  416. package/dist/src/runtime/connections/types.d.ts +75 -0
  417. package/dist/src/runtime/connections/types.d.ts.map +1 -0
  418. package/dist/src/runtime/connections/types.js +9 -0
  419. package/dist/src/runtime/connections/types.js.map +1 -0
  420. package/dist/src/runtime/framework-channels/index.d.ts +6 -6
  421. package/dist/src/runtime/framework-channels/index.d.ts.map +1 -1
  422. package/dist/src/runtime/framework-channels/index.js +16 -14
  423. package/dist/src/runtime/framework-channels/index.js.map +1 -1
  424. package/dist/src/runtime/framework-tools/ask-question.js +4 -4
  425. package/dist/src/runtime/framework-tools/ask-question.js.map +1 -1
  426. package/dist/src/runtime/framework-tools/connection-execute.d.ts +10 -0
  427. package/dist/src/runtime/framework-tools/connection-execute.d.ts.map +1 -0
  428. package/dist/src/runtime/framework-tools/connection-execute.js +50 -0
  429. package/dist/src/runtime/framework-tools/connection-execute.js.map +1 -0
  430. package/dist/src/runtime/framework-tools/connection-search.d.ts +43 -0
  431. package/dist/src/runtime/framework-tools/connection-search.d.ts.map +1 -0
  432. package/dist/src/runtime/framework-tools/connection-search.js +135 -0
  433. package/dist/src/runtime/framework-tools/connection-search.js.map +1 -0
  434. package/dist/src/runtime/framework-tools/file-state.d.ts +5 -5
  435. package/dist/src/runtime/framework-tools/file-state.d.ts.map +1 -1
  436. package/dist/src/runtime/framework-tools/file-state.js +6 -8
  437. package/dist/src/runtime/framework-tools/file-state.js.map +1 -1
  438. package/dist/src/runtime/framework-tools/index.d.ts +3 -1
  439. package/dist/src/runtime/framework-tools/index.d.ts.map +1 -1
  440. package/dist/src/runtime/framework-tools/index.js +10 -1
  441. package/dist/src/runtime/framework-tools/index.js.map +1 -1
  442. package/dist/src/runtime/framework-tools/skill.d.ts +4 -4
  443. package/dist/src/runtime/framework-tools/skill.d.ts.map +1 -1
  444. package/dist/src/runtime/framework-tools/skill.js +14 -11
  445. package/dist/src/runtime/framework-tools/skill.js.map +1 -1
  446. package/dist/src/runtime/framework-tools/todo.d.ts.map +1 -1
  447. package/dist/src/runtime/framework-tools/todo.js +2 -4
  448. package/dist/src/runtime/framework-tools/todo.js.map +1 -1
  449. package/dist/src/runtime/input/types.d.ts +40 -115
  450. package/dist/src/runtime/input/types.d.ts.map +1 -1
  451. package/dist/src/runtime/input/types.js +28 -66
  452. package/dist/src/runtime/input/types.js.map +1 -1
  453. package/dist/src/runtime/loaders/module-map.js +8 -0
  454. package/dist/src/runtime/loaders/module-map.js.map +1 -1
  455. package/dist/src/runtime/prompt/compose.d.ts +4 -1
  456. package/dist/src/runtime/prompt/compose.d.ts.map +1 -1
  457. package/dist/src/runtime/prompt/compose.js +18 -1
  458. package/dist/src/runtime/prompt/compose.js.map +1 -1
  459. package/dist/src/runtime/prompt/connections.d.ts +10 -0
  460. package/dist/src/runtime/prompt/connections.d.ts.map +1 -0
  461. package/dist/src/runtime/prompt/connections.js +25 -0
  462. package/dist/src/runtime/prompt/connections.js.map +1 -0
  463. package/dist/src/runtime/resolve-agent-graph.d.ts.map +1 -1
  464. package/dist/src/runtime/resolve-agent-graph.js +29 -7
  465. package/dist/src/runtime/resolve-agent-graph.js.map +1 -1
  466. package/dist/src/runtime/resolve-agent.d.ts.map +1 -1
  467. package/dist/src/runtime/resolve-agent.js +3 -0
  468. package/dist/src/runtime/resolve-agent.js.map +1 -1
  469. package/dist/src/runtime/resolve-channel.d.ts.map +1 -1
  470. package/dist/src/runtime/resolve-channel.js +1 -0
  471. package/dist/src/runtime/resolve-channel.js.map +1 -1
  472. package/dist/src/runtime/resolve-connection.d.ts +16 -0
  473. package/dist/src/runtime/resolve-connection.d.ts.map +1 -0
  474. package/dist/src/runtime/resolve-connection.js +69 -0
  475. package/dist/src/runtime/resolve-connection.js.map +1 -0
  476. package/dist/src/runtime/resolve-tool.d.ts.map +1 -1
  477. package/dist/src/runtime/resolve-tool.js +8 -0
  478. package/dist/src/runtime/resolve-tool.js.map +1 -1
  479. package/dist/src/runtime/sessions/auth.d.ts +1 -1
  480. package/dist/src/runtime/sessions/compiled-agent-cache.d.ts +2 -0
  481. package/dist/src/runtime/sessions/compiled-agent-cache.d.ts.map +1 -1
  482. package/dist/src/runtime/sessions/compiled-agent-cache.js +14 -0
  483. package/dist/src/runtime/sessions/compiled-agent-cache.js.map +1 -1
  484. package/dist/src/runtime/skills/fragment-context.d.ts +2 -2
  485. package/dist/src/runtime/skills/fragment-context.d.ts.map +1 -1
  486. package/dist/src/runtime/skills/fragment-context.js +2 -2
  487. package/dist/src/runtime/skills/fragment-context.js.map +1 -1
  488. package/dist/src/runtime/standard-schema.d.ts +28 -0
  489. package/dist/src/runtime/standard-schema.d.ts.map +1 -0
  490. package/dist/src/runtime/standard-schema.js +65 -0
  491. package/dist/src/runtime/standard-schema.js.map +1 -0
  492. package/dist/src/runtime/types.d.ts +29 -3
  493. package/dist/src/runtime/types.d.ts.map +1 -1
  494. package/dist/src/services/dev-client/send-message.d.ts +2 -2
  495. package/dist/src/services/dev-client/send-message.d.ts.map +1 -1
  496. package/dist/src/services/dev-client/send-message.js +21 -22
  497. package/dist/src/services/dev-client/send-message.js.map +1 -1
  498. package/dist/src/services/dev-client/session.d.ts +5 -5
  499. package/dist/src/services/dev-client/session.d.ts.map +1 -1
  500. package/dist/src/services/dev-client/session.js +2 -2
  501. package/dist/src/services/dev-client/session.js.map +1 -1
  502. package/dist/src/services/dev-client.d.ts +6 -6
  503. package/dist/src/services/dev-client.d.ts.map +1 -1
  504. package/dist/src/services/dev-client.js +3 -3
  505. package/dist/src/services/dev-client.js.map +1 -1
  506. package/docs/external-agent-protocol.md +37 -34
  507. package/docs/internals/channels.md +15 -12
  508. package/docs/internals/context.md +81 -161
  509. package/docs/internals/message-runtime.md +28 -26
  510. package/docs/public/README.md +22 -20
  511. package/docs/public/auth-and-route-protection.md +15 -12
  512. package/docs/public/channels/README.md +16 -11
  513. package/docs/public/cli-build-and-debugging.md +1 -1
  514. package/docs/public/context-control.md +7 -3
  515. package/docs/public/evals.md +3 -3
  516. package/docs/public/getting-started.md +15 -12
  517. package/docs/public/human-in-the-loop.md +45 -57
  518. package/docs/public/migration-guide.md +71 -0
  519. package/docs/public/project-layout.md +5 -0
  520. package/docs/public/runs-and-streaming.md +32 -25
  521. package/docs/public/schedules.md +4 -4
  522. package/docs/public/session-context.md +131 -15
  523. package/docs/public/skills.md +27 -3
  524. package/docs/public/subagents.md +2 -2
  525. package/docs/public/tools.md +23 -30
  526. package/docs/public/typescript-api.md +16 -12
  527. package/docs/public/vercel-deployment.md +3 -4
  528. package/docs/public/workspace.md +11 -11
  529. package/package.json +18 -11
  530. package/dist/src/channel/emitter-registry.d.ts +0 -34
  531. package/dist/src/channel/emitter-registry.d.ts.map +0 -1
  532. package/dist/src/channel/emitter-registry.js +0 -63
  533. package/dist/src/channel/emitter-registry.js.map +0 -1
  534. package/dist/src/channel/http-emitter.d.ts +0 -16
  535. package/dist/src/channel/http-emitter.d.ts.map +0 -1
  536. package/dist/src/channel/http-emitter.js +0 -22
  537. package/dist/src/channel/http-emitter.js.map +0 -1
  538. package/dist/src/channel/schedule-emitter.d.ts +0 -15
  539. package/dist/src/channel/schedule-emitter.d.ts.map +0 -1
  540. package/dist/src/channel/schedule-emitter.js +0 -21
  541. package/dist/src/channel/schedule-emitter.js.map +0 -1
  542. package/dist/src/channel/slack-emitter.d.ts +0 -56
  543. package/dist/src/channel/slack-emitter.d.ts.map +0 -1
  544. package/dist/src/channel/slack-emitter.js +0 -235
  545. package/dist/src/channel/slack-emitter.js.map +0 -1
  546. package/dist/src/channel/subagent-emitter.d.ts +0 -41
  547. package/dist/src/channel/subagent-emitter.d.ts.map +0 -1
  548. package/dist/src/channel/subagent-emitter.js.map +0 -1
  549. package/dist/src/context/state.d.ts +0 -27
  550. package/dist/src/context/state.d.ts.map +0 -1
  551. package/dist/src/context/state.js +0 -53
  552. package/dist/src/context/state.js.map +0 -1
  553. package/dist/src/internal/message/nitro-route-shims.d.ts +0 -6
  554. package/dist/src/internal/message/nitro-route-shims.d.ts.map +0 -1
  555. package/dist/src/internal/message/nitro-route-shims.js +0 -38
  556. package/dist/src/internal/message/nitro-route-shims.js.map +0 -1
  557. package/dist/src/internal/message/rewrite-generated-imports.d.ts +0 -15
  558. package/dist/src/internal/message/rewrite-generated-imports.d.ts.map +0 -1
  559. package/dist/src/internal/message/rewrite-generated-imports.js +0 -59
  560. package/dist/src/internal/message/rewrite-generated-imports.js.map +0 -1
  561. package/dist/src/internal/nitro/host/channel-url-matcher.d.ts +0 -35
  562. package/dist/src/internal/nitro/host/channel-url-matcher.d.ts.map +0 -1
  563. package/dist/src/internal/nitro/host/channel-url-matcher.js +0 -57
  564. package/dist/src/internal/nitro/host/channel-url-matcher.js.map +0 -1
  565. package/dist/src/internal/nitro/routes/home-page/build-home-page-view-model.d.ts +0 -11
  566. package/dist/src/internal/nitro/routes/home-page/build-home-page-view-model.d.ts.map +0 -1
  567. package/dist/src/internal/nitro/routes/home-page/build-home-page-view-model.js +0 -264
  568. package/dist/src/internal/nitro/routes/home-page/build-home-page-view-model.js.map +0 -1
  569. package/dist/src/internal/nitro/routes/home-page/render-home-page.d.ts +0 -9
  570. package/dist/src/internal/nitro/routes/home-page/render-home-page.d.ts.map +0 -1
  571. package/dist/src/internal/nitro/routes/home-page/render-home-page.js +0 -15
  572. package/dist/src/internal/nitro/routes/home-page/render-home-page.js.map +0 -1
  573. package/dist/src/internal/nitro/routes/index.html +0 -525
  574. package/dist/src/internal/nitro/runtime-configuration.d.ts +0 -16
  575. package/dist/src/internal/nitro/runtime-configuration.d.ts.map +0 -1
  576. package/dist/src/internal/nitro/runtime-configuration.js +0 -23
  577. package/dist/src/internal/nitro/runtime-configuration.js.map +0 -1
  578. package/dist/src/internal/nitro/shims/runtime-configuration-plugin.d.ts +0 -10
  579. package/dist/src/internal/nitro/shims/runtime-configuration-plugin.d.ts.map +0 -1
  580. package/dist/src/internal/nitro/shims/runtime-configuration-plugin.js +0 -17
  581. package/dist/src/internal/nitro/shims/runtime-configuration-plugin.js.map +0 -1
  582. package/dist/src/runtime/tools/execute-tool.d.ts +0 -20
  583. package/dist/src/runtime/tools/execute-tool.d.ts.map +0 -1
  584. package/dist/src/runtime/tools/execute-tool.js +0 -69
  585. package/dist/src/runtime/tools/execute-tool.js.map +0 -1
@@ -1,8 +1,11 @@
1
1
  # Session Context
2
2
 
3
- Ash exposes three runtime helpers for authored code:
3
+ Ash exposes six runtime helpers for authored code:
4
4
 
5
5
  - `getSession()`
6
+ - `getContext(key)`
7
+ - `setContext(key, value)`
8
+ - `ensureContext(key, valueOrFactory)`
6
9
  - `getSandbox(name)`
7
10
  - `getSkill(identifier)`
8
11
 
@@ -26,13 +29,12 @@ export default defineTool({
26
29
  const session = getSession();
27
30
 
28
31
  return {
29
- runId: session.runId,
30
32
  sessionId: session.sessionId,
31
33
  turnId: session.turn.id,
32
34
  turnSequence: session.turn.sequence,
33
35
  currentCaller: session.auth.current?.principalId,
34
36
  initiator: session.auth.initiator?.principalId,
35
- parentRunId: session.parent?.runId,
37
+ parentSessionId: session.parent?.sessionId,
36
38
  };
37
39
  },
38
40
  });
@@ -43,7 +45,6 @@ Public session fields:
43
45
  - `auth.current`
44
46
  - `auth.initiator`
45
47
  - `sessionId`
46
- - `runId`
47
48
  - `turn.id`
48
49
  - `turn.sequence`
49
50
  - optional `parent`
@@ -53,8 +54,8 @@ Important behavior:
53
54
  - `auth.current` is the caller for the active inbound turn
54
55
  - `auth.initiator` is the caller that started the durable session
55
56
  - unprotected agents expose both as `null`
56
- - top-level schedule runs expose a framework-owned `schedule` principal
57
- - `parent` is present for child subagent runs
57
+ - top-level schedule sessions expose a framework-owned `schedule` principal
58
+ - `parent` is present for child subagent sessions
58
59
 
59
60
  ## `getSandbox(name)`
60
61
 
@@ -95,6 +96,120 @@ Important behavior:
95
96
 
96
97
  See [`skills.md`](./skills.md) for the full authoring model.
97
98
 
99
+ ## Durable Authored Context
100
+
101
+ `ContextKey` values are session-durable by default. Once authored code sets a key, Ash hydrates it
102
+ from `session.context` before later steps and commits it back after each step.
103
+
104
+ ```ts
105
+ import { ContextKey, ensureContext, getContext, setContext } from "experimental-ash";
106
+
107
+ const TenantKey = new ContextKey<string>("myapp.tenant");
108
+ const NotesKey = new ContextKey<{ readonly notes: readonly string[] }>("myapp.notes");
109
+
110
+ const tenant = getContext(TenantKey);
111
+ const notes = ensureContext(NotesKey, () => ({ notes: [] }));
112
+
113
+ setContext(NotesKey, {
114
+ notes: [...notes.notes, `Handled tenant ${tenant}`],
115
+ });
116
+ ```
117
+
118
+ Use `ensureContext` when a key needs a default value. `ContextKey({ initial })` no longer exists.
119
+
120
+ ## Passing Custom Context From a Channel
121
+
122
+ Channels can inject custom typed context into the agent inside `onDeliver`. This is useful when a
123
+ channel needs to pass platform-specific metadata (tenant ID, feature flags, etc.) that authored
124
+ tools can read.
125
+
126
+ ### Defining a key
127
+
128
+ Declare a `ContextKey` at module scope. The key is shared between the channel and the tools that
129
+ read it.
130
+
131
+ `agent/channels/keys.ts`
132
+
133
+ ```ts
134
+ import { ContextKey } from "experimental-ash";
135
+
136
+ export const TenantKey = new ContextKey<string>("myapp.tenant");
137
+ ```
138
+
139
+ ### Setting context from a channel
140
+
141
+ Wrap an existing channel with `onDeliver` to set custom context keys. The hook receives a narrow
142
+ `ContextAccessor` (`get`, `tryGet`, `has`, `set`, `ensure`) as its first argument and a
143
+ `DeliverPayload` as the second. It runs on both `run()` and `deliver()`, after Ash has hydrated the
144
+ durable context bag for that turn.
145
+
146
+ `agent/channels/slack.ts`
147
+
148
+ ```ts
149
+ import {
150
+ slackRoute,
151
+ SlackChannel,
152
+ type SlackChannelState,
153
+ } from "experimental-ash/channels/slack";
154
+ import { TenantKey } from "./keys.js";
155
+
156
+ interface TenantSlackState extends SlackChannelState {
157
+ readonly tenantId: string;
158
+ }
159
+
160
+ class TenantSlackChannel extends SlackChannel<TenantSlackState> {
161
+ static override readonly kind = "tenant-slack";
162
+
163
+ constructor(state: SlackChannelState) {
164
+ super({
165
+ ...state,
166
+ tenantId: lookupTenant(state),
167
+ });
168
+ }
169
+
170
+ async onDeliver(ctx, payload) {
171
+ ctx.set(TenantKey, this.state().tenantId);
172
+ return await super.onDeliver(ctx, payload);
173
+ }
174
+ }
175
+
176
+ export default slackRoute({
177
+ channel: TenantSlackChannel,
178
+ });
179
+ ```
180
+
181
+ Auth lives on `RunInput.auth` and `DeliverInput.auth`, not on the channel object. There is no
182
+ `withAuth` or `withContext` wrapper.
183
+
184
+ Keep channel constructor state immutable after the run starts. Stable transport identity belongs in
185
+ serialized channel state; mutable per-session data belongs in durable context or `session.internal`.
186
+
187
+ ### Reading context from a tool
188
+
189
+ ```ts
190
+ import { getContext } from "experimental-ash";
191
+ import { defineTool } from "experimental-ash/tools";
192
+ import { TenantKey } from "../channels/keys.js";
193
+
194
+ export default defineTool({
195
+ description: "Return the active tenant.",
196
+ async execute() {
197
+ const tenant = getContext(TenantKey);
198
+ return { tenant };
199
+ },
200
+ });
201
+ ```
202
+
203
+ ### Context on deliver
204
+
205
+ `onDeliver` runs on every turn, including `deliver()` follow-ups. The channel is deserialized from
206
+ the session, so its stable serialized state (including custom fields like `tenantId`) is available
207
+ on follow-up turns.
208
+
209
+ Auth on `deliver()` is also honored — `session.auth.current` reflects the caller of each follow-up
210
+ message, not just the session initiator. Deliver-time auth is passed via `DeliverInput.auth` and the
211
+ runtime applies it directly.
212
+
98
213
  ## Where These APIs Work
99
214
 
100
215
  Safe places:
@@ -114,17 +229,18 @@ explaining the required scope.
114
229
 
115
230
  ## How It Works
116
231
 
117
- All three accessors read from the same `AshContext` container bound by a single `AsyncLocalStorage`.
118
- The framework sets up this context before invoking authored code:
232
+ All runtime helpers read from the same `AshContext` container bound by a single
233
+ `AsyncLocalStorage`. The framework sets up this context before invoking authored code:
119
234
 
120
- 1. The runtime entry point creates an `AshContext` and populates seed keys (auth, session ID,
121
- run ID, channel emitter, compiled bundle).
122
- 2. Before each step, providers create derived values (session metadata, sandbox access, skill
123
- access) from the seed keys and the harness session.
124
- 3. The step callback runs inside the `AsyncLocalStorage` scope, making the context available to
235
+ 1. The runtime entry point creates an `AshContext` and serializes only runtime seed keys such as
236
+ auth, session id, channel, and compiled bundle.
237
+ 2. Before each step, Ash rebuilds a fresh context, hydrates durable authored context from
238
+ `session.context`, seeds runtime-only bookkeeping, and runs `channel.onDeliver(...)`.
239
+ 3. Providers create derived values such as session metadata, sandbox access, and skill access.
240
+ 4. The step callback runs inside the `AsyncLocalStorage` scope, making the context available to
125
241
  all authored code in the call chain.
126
- 4. After the step, providers with mutable state (sandboxes, skills) commit their changes back onto
127
- the session for persistence.
242
+ 5. After the step, Ash commits the full durable context bag back to `session.context` and lets
243
+ mutable providers persist any provider-owned state.
128
244
 
129
245
  This lifecycle is fully managed by the framework. Authored code only needs to call the public
130
246
  accessors.
@@ -16,17 +16,23 @@ single turn.
16
16
  ## How Skill Loading Works
17
17
 
18
18
  Ash discovers the files under `skills/`, advertises them to the model, and adds a framework-owned
19
- `activate_skill` tool.
19
+ `load_skill` tool.
20
20
 
21
- When the model decides a skill is relevant, it calls `activate_skill`. Ash then adds that skill's
21
+ When the model decides a skill is relevant, it calls `load_skill`. Ash then adds that skill's
22
22
  instructions to the active turn context.
23
23
 
24
+ In practice, the model should activate a skill when the user names it directly or when the request
25
+ clearly matches the skill's description. That makes the description a routing hint, not just a
26
+ label.
27
+
24
28
  Important behavior:
25
29
 
26
30
  - skills are not pasted into the base prompt by default
27
31
  - tools remain visible whether or not a skill is activated
28
32
  - skills are for instructions and procedures, not for executing code
29
33
  - if you need typed runtime behavior, use a tool
34
+ - packaged skill paths are visible in the runtime workspace, so the model can inspect sibling files
35
+ with normal file or shell tools when needed
30
36
 
31
37
  ## Flat Markdown Skills
32
38
 
@@ -92,6 +98,25 @@ export default defineTool({
92
98
  - flat skills may omit frontmatter
93
99
  - the legacy `allowed-tools` frontmatter field is not supported
94
100
 
101
+ ## Write Good Descriptions
102
+
103
+ Skill descriptions should describe the task that should trigger activation.
104
+
105
+ Prefer descriptions like:
106
+
107
+ - `Use when the user needs a release checklist or changelog workflow.`
108
+ - `Research unfamiliar topics before answering with confidence.`
109
+ - `Use the weather tool before answering forecast or temperature questions.`
110
+
111
+ Avoid vague descriptions like:
112
+
113
+ - `Helpful workflow`
114
+ - `General assistant support`
115
+ - `Misc utilities`
116
+
117
+ Better descriptions improve automatic routing quality because Ash exposes them to the model as the
118
+ main signal for when a skill should be activated.
119
+
95
120
  ## When To Use A Skill
96
121
 
97
122
  Use a skill for:
@@ -163,4 +188,3 @@ For most apps:
163
188
  - [`context-control.md`](./context-control.md)
164
189
  - [`tools.md`](./tools.md)
165
190
  - [`subagents.md`](./subagents.md)
166
-
@@ -58,13 +58,13 @@ Subagent execution gets:
58
58
 
59
59
  ## Stream Behavior
60
60
 
61
- Subagent activity is emitted inline on the parent run stream:
61
+ Subagent activity is emitted inline on the parent session stream:
62
62
 
63
63
  - `subagent.started`
64
64
  - `subagent.event`
65
65
  - `subagent.completed`
66
66
 
67
- There is no separate public child-run stream to attach to.
67
+ There is no separate public child-session stream to attach to.
68
68
 
69
69
  ## What Subagents Can Declare
70
70
 
@@ -24,7 +24,6 @@ export default defineTool({
24
24
 
25
25
  return {
26
26
  city: input.city,
27
- runId: session.runId,
28
27
  sessionId: session.sessionId,
29
28
  temperatureF: 72,
30
29
  };
@@ -37,8 +36,8 @@ exposed to the model as `get_weather`; a file at `agent/tools/get-weather.ts` is
37
36
  `get-weather`. You can override that by setting `name` in the tool definition.
38
37
 
39
38
  `defineTool`, `disableTool`, `defineBashTool`, `defineReadFileTool`, and `defineWriteFileTool` live on the `experimental-ash/tools` subpath.
40
- Runtime helpers like `getSession`, `getSandbox`, `getSkill`, `getState`, and `setState` stay on the
41
- main `experimental-ash` barrel.
39
+ Runtime helpers like `getSession`, `getContext`, `setContext`, `ensureContext`, `getSandbox`, and
40
+ `getSkill` stay on the main `experimental-ash` barrel.
42
41
 
43
42
  ## What A Tool Definition Needs
44
43
 
@@ -75,7 +74,7 @@ export default defineTool({
75
74
 
76
75
  Tools are the most common place to use Ash's runtime helpers:
77
76
 
78
- - `getSession()` for run, turn, auth, and parent lineage data
77
+ - `getSession()` for session, turn, auth, and parent lineage data
79
78
  - `getSandbox(name)` for live isolated shell environments
80
79
  - `getSkill(identifier)` for reading skill metadata and packaged skill files
81
80
 
@@ -100,12 +99,15 @@ That means tools are:
100
99
 
101
100
  Every Ash agent gets a small set of framework-provided tools by default:
102
101
  `bash`, `read_file`, `write_file`, `todo`, `web_fetch`, `web_search`, and, when the agent has skills,
103
- `activate_skill`.
102
+ `load_skill`.
103
+
104
+ `load_skill` loads on-demand skill instructions into the current turn. It does not add a new
105
+ execution surface by itself; executable behavior still comes from the tools the agent already has.
104
106
 
105
107
  `read_file` reads a text file from the sandbox filesystem with line-numbered output. `write_file`
106
108
  writes a complete file, enforcing read-before-write for existing files and detecting stale reads.
107
- Both target the framework default sandbox. Compaction clears the durable read-file state so the model
108
- must re-read files before overwriting after compaction.
109
+ Both target the framework default sandbox. Compaction clears the durable read-file context so the
110
+ model must re-read files before overwriting after compaction.
109
111
 
110
112
  Authors can wrap, replace, or disable these defaults from `agent/tools/`.
111
113
 
@@ -223,32 +225,23 @@ export default defineWriteFileTool({
223
225
  ```
224
226
 
225
227
  When replacing the framework `read_file`, the authored version inherits the same compaction
226
- state-reset behavior by default. Provide an explicit `onCompact` to override that.
228
+ context-reset behavior by default. Provide an explicit `onCompact` to override that.
227
229
 
228
- ### Replace A Default With Custom State
230
+ ### Replace A Default With Custom Context
229
231
 
230
- `agent/tools/todo.ts` - replace the framework `todo` tool with a custom stateful version. State is
231
- the replacement's responsibility. Declare your own `ContextKey` and use `getState` / `setState` to
232
- read and write it:
232
+ `agent/tools/todo.ts` - replace the framework `todo` tool with a custom durable-context version.
233
+ Declare your own `ContextKey` and use `ensureContext` / `setContext` to read and write it:
233
234
 
234
235
  ```ts
235
- import { ContextKey, getState, setState } from "experimental-ash";
236
+ import { ContextKey, ensureContext, setContext } from "experimental-ash";
236
237
  import { defineTool } from "experimental-ash/tools";
237
238
  import { z } from "zod";
238
239
 
239
- interface NoteListState {
240
+ interface NoteListContext {
240
241
  readonly notes: readonly string[];
241
242
  }
242
243
 
243
- const NoteListStateKey = new ContextKey<NoteListState>("myapp.notes", {
244
- initial: () => ({ notes: [] }),
245
- compact: (state) => ({
246
- summary:
247
- state.notes.length === 0
248
- ? undefined
249
- : `Notes (${state.notes.length}): ${state.notes.join("; ")}`,
250
- }),
251
- });
244
+ const NoteListContextKey = new ContextKey<NoteListContext>("myapp.notes");
252
245
 
253
246
  export default defineTool({
254
247
  description: "Append a note or read the running list of notes.",
@@ -257,12 +250,12 @@ export default defineTool({
257
250
  }),
258
251
  async execute(input) {
259
252
  if (typeof input.note === "string" && input.note.length > 0) {
260
- const next = input.note;
261
- setState(NoteListStateKey, (current) => ({
262
- notes: [...current.notes, next],
263
- }));
253
+ const current = ensureContext(NoteListContextKey, () => ({ notes: [] }));
254
+ setContext(NoteListContextKey, {
255
+ notes: [...current.notes, input.note],
256
+ });
264
257
  }
265
- return getState(NoteListStateKey);
258
+ return ensureContext(NoteListContextKey, () => ({ notes: [] }));
266
259
  },
267
260
  });
268
261
  ```
@@ -270,8 +263,8 @@ export default defineTool({
270
263
  ### Subtleties Worth Knowing
271
264
 
272
265
  - The filename is the default name. There is also an explicit `name` property when you need it.
273
- - State is owned by the replacement. Replacing `todo` with a fresh `defineTool` does not inherit the
274
- framework's state key.
266
+ - Durable context is owned by the replacement. Replacing `todo` with a fresh `defineTool` does not
267
+ inherit the framework's context key.
275
268
  - Authored-vs-authored collisions are impossible by construction. Two files cannot share a slug under
276
269
  the same `agent/tools/` directory.
277
270
 
@@ -17,7 +17,7 @@ Use these to author the filesystem-backed surface. Tool authoring helpers live o
17
17
  on the main `experimental-ash` barrel.
18
18
 
19
19
  - `defineAgent(...)` - additive runtime config for `agent.ts`
20
- - `defineChannel(...)` - messaging-platform or HTTP channel entrypoints in `channels/`
20
+ - `defineRoute(...)` - messaging-platform or HTTP route entrypoints in `channels/`
21
21
  - `defineSandbox(...)` - isolated bash-style environments in `sandboxes/`
22
22
  - `defineSchedule(...)` - recurring jobs in `schedules/`
23
23
  - `defineSkill(...)` - module-authored skills
@@ -28,22 +28,24 @@ on the main `experimental-ash` barrel.
28
28
  - `defineReadFileTool(...)` - model-visible file reader targeting a named sandbox
29
29
  - `defineWriteFileTool(...)` - model-visible file writer targeting a named sandbox
30
30
  - `disableTool()` - disable the framework default whose name matches `tools/<name>.ts`
31
- - `disableChannel()` - disable a framework-owned channel that matches the file path
31
+ - `disableRoute()` - disable a framework-owned route that matches the file path
32
32
  - `defineEvalSuite(...)` - repeatable eval suite under `evals/*.eval.ts`
33
33
 
34
34
  Framework defaults reachable for spread/wrap composition:
35
35
 
36
- - `bash`, `readFile`, `writeFile`, `webFetch`, `todo`, `activateSkill` (`experimental-ash/tools/defaults`)
36
+ - `bash`, `readFile`, `writeFile`, `webFetch`, `todo`, `loadSkill` (`experimental-ash/tools/defaults`)
37
37
  - `defaultSandbox` (`experimental-ash/sandboxes/defaults`)
38
38
 
39
39
  Most apps use `defineAgent`, `defineTool`, and `defineSandbox` the most.
40
40
 
41
41
  ## Runtime Helpers
42
42
 
43
- - `getSession()` - current run, turn, auth, and optional parent lineage
43
+ - `getSession()` - current session, turn, auth, and optional parent lineage
44
+ - `getContext(key)` - read one durable authored context value
45
+ - `setContext(key, value)` - write one durable authored context value
46
+ - `ensureContext(key, valueOrFactory)` - read-or-create one durable context value
44
47
  - `getSandbox(name)` - live named sandbox session
45
48
  - `getSkill(identifier)` - handle for a named skill visible to the current agent
46
- - `getState(key)` / `setState(key)` - context-backed runtime state helpers
47
49
 
48
50
  Related exported types:
49
51
 
@@ -56,11 +58,13 @@ Related exported types:
56
58
  Ash also exports lower-level runtime primitives such as `createToolLoopHarness(...)`,
57
59
  `createContinuousLoopRuntime(...)`, and `createWorkflowRuntime(...)`.
58
60
 
59
- `RunMode` is explicit: `"conversation"` runs may wait for follow-up input, while `"task"` runs must
60
- finish inside the current invocation.
61
+ `RunMode` is explicit: `"conversation"` sessions may wait for follow-up input, while `"task"`
62
+ sessions must finish inside the current invocation.
61
63
 
62
64
  These helpers only work inside active authored runtime execution.
63
65
 
66
+ Breaking change details and before/after examples live in [`migration-guide.md`](./migration-guide.md).
67
+
64
68
  ## Markdown Helpers
65
69
 
66
70
  Ash also exports helpers for turning markdown into the same shapes as module-authored definitions:
@@ -81,11 +85,11 @@ shapes.
81
85
  import { defineAgent } from "experimental-ash";
82
86
  ```
83
87
 
84
- ### Channel Definition
88
+ ### Route Definition
85
89
 
86
90
  ```ts
87
- import { defineChannel } from "experimental-ash";
88
- import { httpMessageChannel } from "experimental-ash/channels/http";
91
+ import { defineRoute } from "experimental-ash";
92
+ import { httpRoute } from "experimental-ash/channels/http";
89
93
  import { vercelOidc } from "experimental-ash/channels/auth";
90
94
  ```
91
95
 
@@ -108,7 +112,7 @@ import { defineBashTool } from "experimental-ash/tools";
108
112
 
109
113
  ```ts
110
114
  import { defineTool, disableTool } from "experimental-ash/tools";
111
- import { bash, readFile, writeFile, webFetch, todo, activateSkill } from "experimental-ash/tools/defaults";
115
+ import { bash, readFile, writeFile, webFetch, todo, loadSkill } from "experimental-ash/tools/defaults";
112
116
  ```
113
117
 
114
118
  See [`tools.md`](./tools.md) for the full override patterns.
@@ -131,7 +135,7 @@ import { Braintrust } from "experimental-ash/evals/reporters";
131
135
  ## Where To Learn Each Surface
132
136
 
133
137
  - `defineAgent` -> [`agent-ts.md`](./agent-ts.md)
134
- - `defineChannel` and channel factories -> [`channels/README.md`](./channels/README.md)
138
+ - `defineRoute` and route/channel factories -> [`channels/README.md`](./channels/README.md)
135
139
  - `defineTool`, `disableTool`, `defineBashTool`, `defineReadFileTool`, `defineWriteFileTool`, and `experimental-ash/tools/defaults` -> [`tools.md`](./tools.md)
136
140
  - `defineSandbox` and `getSandbox` -> [`sandboxes.md`](./sandboxes.md)
137
141
  - `getSession` -> [`session-context.md`](./session-context.md)
@@ -9,7 +9,7 @@ This page covers the practical expectations for shipping an Ash app on Vercel.
9
9
  - use `ash build` for production builds
10
10
  - keep provider keys and auth secrets in Vercel environment variables
11
11
  - use the `vercel` workspace or sandbox backend when the app needs hosted command environments
12
- - expect Ash to expose the same stable health, message, and run-stream routes after deployment
12
+ - expect Ash to expose the same stable health, message, and session-stream routes after deployment
13
13
 
14
14
  ## Build Output
15
15
 
@@ -76,7 +76,7 @@ curl -X POST https://<your-app>/.well-known/ash/v1/message \
76
76
  Then attach to the returned stream URL pattern:
77
77
 
78
78
  ```bash
79
- curl https://<your-app>/.well-known/ash/v1/runs/<runId>/stream
79
+ curl https://<your-app>/.well-known/ash/v1/sessions/<sessionId>/stream
80
80
  ```
81
81
 
82
82
  ## Remote REPL
@@ -95,11 +95,10 @@ This is useful for smoke tests against preview or production environments.
95
95
  - route-auth secrets are set on the relevant channel
96
96
  - the default sandbox `adapter` matches the deployment environment
97
97
  - the health route responds
98
- - a test message run streams successfully
98
+ - a test message session streams successfully
99
99
 
100
100
  ## What To Read Next
101
101
 
102
102
  - [`workspace.md`](./workspace.md)
103
103
  - [`sandboxes.md`](./sandboxes.md)
104
104
  - [`auth-and-route-protection.md`](./auth-and-route-protection.md)
105
-
@@ -1,17 +1,17 @@
1
1
  # Workspace
2
2
 
3
- Every Ash run gets a shared runtime workspace exposed to the model as the `bash` tool.
3
+ Every Ash session gets a shared runtime workspace exposed to the model as the `bash` tool.
4
4
 
5
5
  This workspace is for command-and-file work that should be shared across turns in the same durable
6
- run.
6
+ session.
7
7
 
8
8
  ## What The Workspace Is
9
9
 
10
10
  Use the shared workspace when you want:
11
11
 
12
12
  - one place for the model to inspect files
13
- - one mutable command environment for the current run
14
- - command/file continuity across follow-up turns in the same run
13
+ - one mutable command environment for the current session
14
+ - command/file continuity across follow-up turns in the same session
15
15
 
16
16
  The workspace is not:
17
17
 
@@ -44,13 +44,13 @@ inspection to happen through runtime tools such as `bash`.
44
44
 
45
45
  ## Workspace Vs Sandboxes
46
46
 
47
- Use the workspace when you want one shared per-run shell.
47
+ Use the workspace when you want one shared per-session shell.
48
48
 
49
49
  Use a sandbox when you want a separate named environment with its own lifecycle hooks.
50
50
 
51
51
  Quick comparison:
52
52
 
53
- - workspace -> one shared `bash` tool for the run
53
+ - workspace -> one shared `bash` tool for the session
54
54
  - sandbox -> additional isolated bash-style tool surfaces
55
55
 
56
56
  See [`sandboxes.md`](./sandboxes.md) for the isolated case.
@@ -85,28 +85,28 @@ The live root that the `bash` tool sees depends on the active workspace adapter:
85
85
  - `local` -> `/workspace`
86
86
  - `vercel` -> `/vercel/sandbox/workspace`
87
87
 
88
- Ash includes the active live root in the runtime prompt for each run, so the model can inspect the
88
+ Ash includes the active live root in the runtime prompt for each session, so the model can inspect the
89
89
  right location with `pwd`, `ls`, `find`, or `rg` instead of guessing.
90
90
 
91
91
  ## What Persists Across Turns
92
92
 
93
- The shared workspace can persist across turns for the same durable run.
93
+ The shared workspace can persist across turns for the same durable session.
94
94
 
95
95
  That lets the model do workflows like:
96
96
 
97
97
  1. inspect files
98
98
  2. write or modify files
99
99
  3. wait for a follow-up message
100
- 4. continue working in the same run
100
+ 4. continue working in the same session
101
101
 
102
- This persistence is run-scoped, not app-global.
102
+ This persistence is session-scoped, not app-global.
103
103
 
104
104
  ## Good Uses
105
105
 
106
106
  Use the workspace for:
107
107
 
108
108
  - browsing skill files
109
- - temporary working files for a run
109
+ - temporary working files for a session
110
110
  - simple command-driven workflows
111
111
  - shared scratch state across turns
112
112
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "experimental-ash",
3
- "version": "0.2.0-alpha.2",
3
+ "version": "0.2.0-alpha.21",
4
4
  "type": "module",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -47,6 +47,11 @@
47
47
  "import": "./dist/src/public/tools/defaults.js",
48
48
  "default": "./dist/src/public/tools/defaults.js"
49
49
  },
50
+ "./connections": {
51
+ "types": "./dist/src/public/connections/index.d.ts",
52
+ "import": "./dist/src/public/connections/index.js",
53
+ "default": "./dist/src/public/connections/index.js"
54
+ },
50
55
  "./sandboxes": {
51
56
  "types": "./dist/src/public/sandboxes/index.d.ts",
52
57
  "import": "./dist/src/public/sandboxes/index.js",
@@ -100,31 +105,32 @@
100
105
  "./package.json": "./package.json"
101
106
  },
102
107
  "dependencies": {
103
- "@ai-sdk/anthropic": "^3.0.68",
108
+ "@ai-sdk/anthropic": "^3.0.69",
104
109
  "@ai-sdk/google": "^3.0.61",
110
+ "@ai-sdk/mcp": "^1.0.36",
105
111
  "@ai-sdk/openai": "^3.0.52",
106
- "@chat-adapter/slack": "^4.24.0",
107
- "@chat-adapter/state-memory": "^4.24.0",
112
+ "@chat-adapter/slack": "^4.25.0",
113
+ "@chat-adapter/state-memory": "^4.25.0",
108
114
  "@standard-schema/spec": "^1.1.0",
109
115
  "@vercel/oidc": "^3.2.0",
110
116
  "@vercel/sandbox": "2.0.0-beta.12",
111
- "@workflow/ai": "^4.1.0",
112
- "@workflow/builders": "^4.0.1",
113
- "ai": "^6.0.154",
117
+ "@workflow/ai": "^4.1.1",
118
+ "@workflow/builders": "^4.0.2",
119
+ "ai": "^6.0.158",
114
120
  "bash-tool": "^1.3.16",
115
- "chat": "^4.24.0",
121
+ "chat": "^4.25.0",
116
122
  "chokidar": "^5.0.0",
117
123
  "commander": "^14.0.3",
118
124
  "esbuild": "^0.28.0",
119
125
  "gray-matter": "^4.0.3",
120
126
  "jose": "^6.2.2",
121
127
  "jsonc-parser": "^3.3.1",
122
- "just-bash": "^2.14.0",
128
+ "just-bash": "^2.14.1",
123
129
  "nitro": "3.0.260311-beta",
124
130
  "picocolors": "^1.1.1",
125
131
  "std-env": "^4.0.0",
126
132
  "turndown": "^7.2.4",
127
- "workflow": "^4.2.0",
133
+ "workflow": "^4.2.1",
128
134
  "zod": "^4.3.6",
129
135
  "zod-validation-error": "^5.0.0"
130
136
  },
@@ -138,11 +144,12 @@
138
144
  },
139
145
  "devDependencies": {
140
146
  "@types/turndown": "^5.0.6",
141
- "@workflow/vitest": "^4.0.1"
147
+ "@workflow/vitest": "^4.0.2"
142
148
  },
143
149
  "scripts": {
144
150
  "clean": "rm -rf dist",
145
151
  "build": "pnpm run clean && tsc -p tsconfig.build.json && node ./scripts/copy-static-assets.mjs",
152
+ "dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput",
146
153
  "lint": "biome lint .",
147
154
  "test": "pnpm run test:unit && pnpm run test:integration",
148
155
  "test:integration": "vitest run --config vitest.integration.config.ts",