@agentick/core 0.0.1

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 (626) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +875 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/.tsbuildinfo.build +1 -0
  5. package/dist/agent.d.ts +32 -0
  6. package/dist/agent.d.ts.map +1 -0
  7. package/dist/agent.js +26 -0
  8. package/dist/agent.js.map +1 -0
  9. package/dist/agentick-instance.d.ts +285 -0
  10. package/dist/agentick-instance.d.ts.map +1 -0
  11. package/dist/agentick-instance.js +700 -0
  12. package/dist/agentick-instance.js.map +1 -0
  13. package/dist/aidk-instance.d.ts +294 -0
  14. package/dist/aidk-instance.d.ts.map +1 -0
  15. package/dist/aidk-instance.js +340 -0
  16. package/dist/aidk-instance.js.map +1 -0
  17. package/dist/app/session-store.d.ts +57 -0
  18. package/dist/app/session-store.d.ts.map +1 -0
  19. package/dist/app/session-store.js +87 -0
  20. package/dist/app/session-store.js.map +1 -0
  21. package/dist/app/session.d.ts +209 -0
  22. package/dist/app/session.d.ts.map +1 -0
  23. package/dist/app/session.js +2131 -0
  24. package/dist/app/session.js.map +1 -0
  25. package/dist/app/sqlite-session-store.d.ts +60 -0
  26. package/dist/app/sqlite-session-store.d.ts.map +1 -0
  27. package/dist/app/sqlite-session-store.js +234 -0
  28. package/dist/app/sqlite-session-store.js.map +1 -0
  29. package/dist/app/types.d.ts +1461 -0
  30. package/dist/app/types.d.ts.map +1 -0
  31. package/dist/app/types.js +14 -0
  32. package/dist/app/types.js.map +1 -0
  33. package/dist/app.d.ts +79 -0
  34. package/dist/app.d.ts.map +1 -0
  35. package/dist/app.js +83 -0
  36. package/dist/app.js.map +1 -0
  37. package/dist/channels/adapters/index.d.ts +2 -0
  38. package/dist/channels/adapters/index.d.ts.map +1 -0
  39. package/dist/channels/adapters/index.js +2 -0
  40. package/dist/channels/adapters/index.js.map +1 -0
  41. package/dist/channels/adapters/redis.d.ts +77 -0
  42. package/dist/channels/adapters/redis.d.ts.map +1 -0
  43. package/dist/channels/adapters/redis.js +259 -0
  44. package/dist/channels/adapters/redis.js.map +1 -0
  45. package/dist/channels/index.d.ts +38 -0
  46. package/dist/channels/index.d.ts.map +1 -0
  47. package/dist/channels/index.js +38 -0
  48. package/dist/channels/index.js.map +1 -0
  49. package/dist/channels/service.d.ts +684 -0
  50. package/dist/channels/service.d.ts.map +1 -0
  51. package/dist/channels/service.js +870 -0
  52. package/dist/channels/service.js.map +1 -0
  53. package/dist/channels/transports/index.d.ts +4 -0
  54. package/dist/channels/transports/index.d.ts.map +1 -0
  55. package/dist/channels/transports/index.js +4 -0
  56. package/dist/channels/transports/index.js.map +1 -0
  57. package/dist/channels/transports/socketio.d.ts +98 -0
  58. package/dist/channels/transports/socketio.d.ts.map +1 -0
  59. package/dist/channels/transports/socketio.js +246 -0
  60. package/dist/channels/transports/socketio.js.map +1 -0
  61. package/dist/channels/transports/streamable-http.d.ts +107 -0
  62. package/dist/channels/transports/streamable-http.d.ts.map +1 -0
  63. package/dist/channels/transports/streamable-http.js +353 -0
  64. package/dist/channels/transports/streamable-http.js.map +1 -0
  65. package/dist/channels/transports/websocket.d.ts +117 -0
  66. package/dist/channels/transports/websocket.d.ts.map +1 -0
  67. package/dist/channels/transports/websocket.js +416 -0
  68. package/dist/channels/transports/websocket.js.map +1 -0
  69. package/dist/com/index.d.ts +29 -0
  70. package/dist/com/index.d.ts.map +1 -0
  71. package/dist/com/index.js +29 -0
  72. package/dist/com/index.js.map +1 -0
  73. package/dist/com/object-model.d.ts +634 -0
  74. package/dist/com/object-model.d.ts.map +1 -0
  75. package/dist/com/object-model.js +963 -0
  76. package/dist/com/object-model.js.map +1 -0
  77. package/dist/com/types.d.ts +192 -0
  78. package/dist/com/types.d.ts.map +1 -0
  79. package/dist/com/types.js +1 -0
  80. package/dist/com/types.js.map +1 -0
  81. package/dist/compiler/collector.d.ts +16 -0
  82. package/dist/compiler/collector.d.ts.map +1 -0
  83. package/dist/compiler/collector.js +388 -0
  84. package/dist/compiler/collector.js.map +1 -0
  85. package/dist/compiler/content-block-registry.d.ts +11 -0
  86. package/dist/compiler/content-block-registry.d.ts.map +1 -0
  87. package/dist/compiler/content-block-registry.js +312 -0
  88. package/dist/compiler/content-block-registry.js.map +1 -0
  89. package/dist/compiler/extractors.d.ts +68 -0
  90. package/dist/compiler/extractors.d.ts.map +1 -0
  91. package/dist/compiler/extractors.js +547 -0
  92. package/dist/compiler/extractors.js.map +1 -0
  93. package/dist/compiler/fiber-compiler.d.ts +203 -0
  94. package/dist/compiler/fiber-compiler.d.ts.map +1 -0
  95. package/dist/compiler/fiber-compiler.js +498 -0
  96. package/dist/compiler/fiber-compiler.js.map +1 -0
  97. package/dist/compiler/fiber.d.ts +61 -0
  98. package/dist/compiler/fiber.d.ts.map +1 -0
  99. package/dist/compiler/fiber.js +244 -0
  100. package/dist/compiler/fiber.js.map +1 -0
  101. package/dist/compiler/index.d.ts +18 -0
  102. package/dist/compiler/index.d.ts.map +1 -0
  103. package/dist/compiler/index.js +38 -0
  104. package/dist/compiler/index.js.map +1 -0
  105. package/dist/compiler/scheduler.d.ts +95 -0
  106. package/dist/compiler/scheduler.d.ts.map +1 -0
  107. package/dist/compiler/scheduler.js +138 -0
  108. package/dist/compiler/scheduler.js.map +1 -0
  109. package/dist/compiler/structure-renderer.d.ts +42 -0
  110. package/dist/compiler/structure-renderer.d.ts.map +1 -0
  111. package/dist/compiler/structure-renderer.js +189 -0
  112. package/dist/compiler/structure-renderer.js.map +1 -0
  113. package/dist/compiler/types.d.ts +96 -0
  114. package/dist/compiler/types.d.ts.map +1 -0
  115. package/dist/compiler/types.js +19 -0
  116. package/dist/compiler/types.js.map +1 -0
  117. package/dist/component/component-hooks.d.ts +68 -0
  118. package/dist/component/component-hooks.d.ts.map +1 -0
  119. package/dist/component/component-hooks.js +112 -0
  120. package/dist/component/component-hooks.js.map +1 -0
  121. package/dist/component/component.d.ts +314 -0
  122. package/dist/component/component.d.ts.map +1 -0
  123. package/dist/component/component.js +64 -0
  124. package/dist/component/component.js.map +1 -0
  125. package/dist/component/index.d.ts +47 -0
  126. package/dist/component/index.d.ts.map +1 -0
  127. package/dist/component/index.js +47 -0
  128. package/dist/component/index.js.map +1 -0
  129. package/dist/component/tentickle-component.d.ts +185 -0
  130. package/dist/component/tentickle-component.d.ts.map +1 -0
  131. package/dist/component/tentickle-component.js +182 -0
  132. package/dist/component/tentickle-component.js.map +1 -0
  133. package/dist/content/index.d.ts +12 -0
  134. package/dist/content/index.d.ts.map +1 -0
  135. package/dist/content/index.js +17 -0
  136. package/dist/content/index.js.map +1 -0
  137. package/dist/context/index.d.ts +51 -0
  138. package/dist/context/index.d.ts.map +1 -0
  139. package/dist/context/index.js +69 -0
  140. package/dist/context/index.js.map +1 -0
  141. package/dist/core/channel-helpers.d.ts +31 -0
  142. package/dist/core/channel-helpers.d.ts.map +1 -0
  143. package/dist/core/channel-helpers.js +62 -0
  144. package/dist/core/channel-helpers.js.map +1 -0
  145. package/dist/core/channel.d.ts +164 -0
  146. package/dist/core/channel.d.ts.map +1 -0
  147. package/dist/core/channel.js +199 -0
  148. package/dist/core/channel.js.map +1 -0
  149. package/dist/core/context.d.ts +412 -0
  150. package/dist/core/context.d.ts.map +1 -0
  151. package/dist/core/context.js +290 -0
  152. package/dist/core/context.js.map +1 -0
  153. package/dist/core/event-buffer.d.ts +212 -0
  154. package/dist/core/event-buffer.d.ts.map +1 -0
  155. package/dist/core/event-buffer.js +346 -0
  156. package/dist/core/event-buffer.js.map +1 -0
  157. package/dist/core/execution-helpers.d.ts +179 -0
  158. package/dist/core/execution-helpers.d.ts.map +1 -0
  159. package/dist/core/execution-helpers.js +212 -0
  160. package/dist/core/execution-helpers.js.map +1 -0
  161. package/dist/core/execution-tracker.d.ts +53 -0
  162. package/dist/core/execution-tracker.d.ts.map +1 -0
  163. package/dist/core/execution-tracker.js +309 -0
  164. package/dist/core/execution-tracker.js.map +1 -0
  165. package/dist/core/index.d.ts +58 -0
  166. package/dist/core/index.d.ts.map +1 -0
  167. package/dist/core/index.js +58 -0
  168. package/dist/core/index.js.map +1 -0
  169. package/dist/core/logger.d.ts +341 -0
  170. package/dist/core/logger.d.ts.map +1 -0
  171. package/dist/core/logger.js +346 -0
  172. package/dist/core/logger.js.map +1 -0
  173. package/dist/core/metrics-helpers.d.ts +40 -0
  174. package/dist/core/metrics-helpers.d.ts.map +1 -0
  175. package/dist/core/metrics-helpers.js +72 -0
  176. package/dist/core/metrics-helpers.js.map +1 -0
  177. package/dist/core/otel-provider.d.ts +54 -0
  178. package/dist/core/otel-provider.d.ts.map +1 -0
  179. package/dist/core/otel-provider.js +107 -0
  180. package/dist/core/otel-provider.js.map +1 -0
  181. package/dist/core/procedure-graph.d.ts +136 -0
  182. package/dist/core/procedure-graph.d.ts.map +1 -0
  183. package/dist/core/procedure-graph.js +272 -0
  184. package/dist/core/procedure-graph.js.map +1 -0
  185. package/dist/core/procedure.d.ts +755 -0
  186. package/dist/core/procedure.d.ts.map +1 -0
  187. package/dist/core/procedure.js +899 -0
  188. package/dist/core/procedure.js.map +1 -0
  189. package/dist/core/stream.d.ts +106 -0
  190. package/dist/core/stream.d.ts.map +1 -0
  191. package/dist/core/stream.js +186 -0
  192. package/dist/core/stream.js.map +1 -0
  193. package/dist/core/telemetry.d.ts +182 -0
  194. package/dist/core/telemetry.d.ts.map +1 -0
  195. package/dist/core/telemetry.js +124 -0
  196. package/dist/core/telemetry.js.map +1 -0
  197. package/dist/engine/client-tool-coordinator.d.ts +50 -0
  198. package/dist/engine/client-tool-coordinator.d.ts.map +1 -0
  199. package/dist/engine/client-tool-coordinator.js +121 -0
  200. package/dist/engine/client-tool-coordinator.js.map +1 -0
  201. package/dist/engine/engine-events.d.ts +117 -0
  202. package/dist/engine/engine-events.d.ts.map +1 -0
  203. package/dist/engine/engine-events.js +178 -0
  204. package/dist/engine/engine-events.js.map +1 -0
  205. package/dist/engine/engine-response.d.ts +48 -0
  206. package/dist/engine/engine-response.d.ts.map +1 -0
  207. package/dist/engine/engine-response.js +2 -0
  208. package/dist/engine/engine-response.js.map +1 -0
  209. package/dist/engine/execution-graph.d.ts +104 -0
  210. package/dist/engine/execution-graph.d.ts.map +1 -0
  211. package/dist/engine/execution-graph.js +257 -0
  212. package/dist/engine/execution-graph.js.map +1 -0
  213. package/dist/engine/execution-handle.d.ts +212 -0
  214. package/dist/engine/execution-handle.d.ts.map +1 -0
  215. package/dist/engine/execution-handle.js +602 -0
  216. package/dist/engine/execution-handle.js.map +1 -0
  217. package/dist/engine/execution-types.d.ts +248 -0
  218. package/dist/engine/execution-types.d.ts.map +1 -0
  219. package/dist/engine/execution-types.js +23 -0
  220. package/dist/engine/execution-types.js.map +1 -0
  221. package/dist/engine/index.d.ts +21 -0
  222. package/dist/engine/index.d.ts.map +1 -0
  223. package/dist/engine/index.js +23 -0
  224. package/dist/engine/index.js.map +1 -0
  225. package/dist/engine/tool-confirmation-coordinator.d.ts +74 -0
  226. package/dist/engine/tool-confirmation-coordinator.d.ts.map +1 -0
  227. package/dist/engine/tool-confirmation-coordinator.js +137 -0
  228. package/dist/engine/tool-confirmation-coordinator.js.map +1 -0
  229. package/dist/engine/tool-executor.d.ts +127 -0
  230. package/dist/engine/tool-executor.d.ts.map +1 -0
  231. package/dist/engine/tool-executor.js +363 -0
  232. package/dist/engine/tool-executor.js.map +1 -0
  233. package/dist/hibernation/index.d.ts +126 -0
  234. package/dist/hibernation/index.d.ts.map +1 -0
  235. package/dist/hibernation/index.js +127 -0
  236. package/dist/hibernation/index.js.map +1 -0
  237. package/dist/hooks/base-hook-registry.d.ts +41 -0
  238. package/dist/hooks/base-hook-registry.d.ts.map +1 -0
  239. package/dist/hooks/base-hook-registry.js +76 -0
  240. package/dist/hooks/base-hook-registry.js.map +1 -0
  241. package/dist/hooks/com-state.d.ts +40 -0
  242. package/dist/hooks/com-state.d.ts.map +1 -0
  243. package/dist/hooks/com-state.js +90 -0
  244. package/dist/hooks/com-state.js.map +1 -0
  245. package/dist/hooks/context-info.d.ts +139 -0
  246. package/dist/hooks/context-info.d.ts.map +1 -0
  247. package/dist/hooks/context-info.js +115 -0
  248. package/dist/hooks/context-info.js.map +1 -0
  249. package/dist/hooks/context-internal.d.ts +21 -0
  250. package/dist/hooks/context-internal.d.ts.map +1 -0
  251. package/dist/hooks/context-internal.js +20 -0
  252. package/dist/hooks/context-internal.js.map +1 -0
  253. package/dist/hooks/context.d.ts +64 -0
  254. package/dist/hooks/context.d.ts.map +1 -0
  255. package/dist/hooks/context.js +83 -0
  256. package/dist/hooks/context.js.map +1 -0
  257. package/dist/hooks/data.d.ts +33 -0
  258. package/dist/hooks/data.d.ts.map +1 -0
  259. package/dist/hooks/data.js +84 -0
  260. package/dist/hooks/data.js.map +1 -0
  261. package/dist/hooks/formatter-context.d.ts +34 -0
  262. package/dist/hooks/formatter-context.d.ts.map +1 -0
  263. package/dist/hooks/formatter-context.js +34 -0
  264. package/dist/hooks/formatter-context.js.map +1 -0
  265. package/dist/hooks/hook-registry.d.ts +45 -0
  266. package/dist/hooks/hook-registry.d.ts.map +1 -0
  267. package/dist/hooks/hook-registry.js +109 -0
  268. package/dist/hooks/hook-registry.js.map +1 -0
  269. package/dist/hooks/index.d.ts +20 -0
  270. package/dist/hooks/index.d.ts.map +1 -0
  271. package/dist/hooks/index.js +47 -0
  272. package/dist/hooks/index.js.map +1 -0
  273. package/dist/hooks/knob.d.ts +87 -0
  274. package/dist/hooks/knob.d.ts.map +1 -0
  275. package/dist/hooks/knob.js +129 -0
  276. package/dist/hooks/knob.js.map +1 -0
  277. package/dist/hooks/knobs-component.d.ts +70 -0
  278. package/dist/hooks/knobs-component.d.ts.map +1 -0
  279. package/dist/hooks/knobs-component.js +300 -0
  280. package/dist/hooks/knobs-component.js.map +1 -0
  281. package/dist/hooks/lifecycle.d.ts +158 -0
  282. package/dist/hooks/lifecycle.d.ts.map +1 -0
  283. package/dist/hooks/lifecycle.js +217 -0
  284. package/dist/hooks/lifecycle.js.map +1 -0
  285. package/dist/hooks/message-context.d.ts +101 -0
  286. package/dist/hooks/message-context.d.ts.map +1 -0
  287. package/dist/hooks/message-context.js +145 -0
  288. package/dist/hooks/message-context.js.map +1 -0
  289. package/dist/hooks/policy-context.d.ts.map +1 -0
  290. package/dist/hooks/runtime-context.d.ts +122 -0
  291. package/dist/hooks/runtime-context.d.ts.map +1 -0
  292. package/dist/hooks/runtime-context.js +149 -0
  293. package/dist/hooks/runtime-context.js.map +1 -0
  294. package/dist/hooks/signal.d.ts +267 -0
  295. package/dist/hooks/signal.d.ts.map +1 -0
  296. package/dist/hooks/signal.js +825 -0
  297. package/dist/hooks/signal.js.map +1 -0
  298. package/dist/hooks/types.d.ts +179 -0
  299. package/dist/hooks/types.d.ts.map +1 -0
  300. package/dist/hooks/types.js +5 -0
  301. package/dist/hooks/types.js.map +1 -0
  302. package/dist/index.d.ts +20 -0
  303. package/dist/index.d.ts.map +1 -0
  304. package/dist/index.js +50 -0
  305. package/dist/index.js.map +1 -0
  306. package/dist/jsx/components/agent.d.ts +64 -0
  307. package/dist/jsx/components/agent.d.ts.map +1 -0
  308. package/dist/jsx/components/agent.js +80 -0
  309. package/dist/jsx/components/agent.js.map +1 -0
  310. package/dist/jsx/components/complete.d.ts +65 -0
  311. package/dist/jsx/components/complete.d.ts.map +1 -0
  312. package/dist/jsx/components/complete.js +64 -0
  313. package/dist/jsx/components/complete.js.map +1 -0
  314. package/dist/jsx/components/content.d.ts +98 -0
  315. package/dist/jsx/components/content.d.ts.map +1 -0
  316. package/dist/jsx/components/content.js +51 -0
  317. package/dist/jsx/components/content.js.map +1 -0
  318. package/dist/jsx/components/harness.d.ts +118 -0
  319. package/dist/jsx/components/harness.d.ts.map +1 -0
  320. package/dist/jsx/components/harness.js +117 -0
  321. package/dist/jsx/components/harness.js.map +1 -0
  322. package/dist/jsx/components/index.d.ts +11 -0
  323. package/dist/jsx/components/index.d.ts.map +1 -0
  324. package/dist/jsx/components/index.js +11 -0
  325. package/dist/jsx/components/index.js.map +1 -0
  326. package/dist/jsx/components/markdown.d.ts +31 -0
  327. package/dist/jsx/components/markdown.d.ts.map +1 -0
  328. package/dist/jsx/components/markdown.js +17 -0
  329. package/dist/jsx/components/markdown.js.map +1 -0
  330. package/dist/jsx/components/messages.d.ts +283 -0
  331. package/dist/jsx/components/messages.d.ts.map +1 -0
  332. package/dist/jsx/components/messages.js +257 -0
  333. package/dist/jsx/components/messages.js.map +1 -0
  334. package/dist/jsx/components/model.d.ts +94 -0
  335. package/dist/jsx/components/model.d.ts.map +1 -0
  336. package/dist/jsx/components/model.js +96 -0
  337. package/dist/jsx/components/model.js.map +1 -0
  338. package/dist/jsx/components/primitives.d.ts +117 -0
  339. package/dist/jsx/components/primitives.d.ts.map +1 -0
  340. package/dist/jsx/components/primitives.js +83 -0
  341. package/dist/jsx/components/primitives.js.map +1 -0
  342. package/dist/jsx/components/renderer.d.ts +24 -0
  343. package/dist/jsx/components/renderer.d.ts.map +1 -0
  344. package/dist/jsx/components/renderer.js +11 -0
  345. package/dist/jsx/components/renderer.js.map +1 -0
  346. package/dist/jsx/components/semantic.d.ts +155 -0
  347. package/dist/jsx/components/semantic.d.ts.map +1 -0
  348. package/dist/jsx/components/semantic.js +39 -0
  349. package/dist/jsx/components/semantic.js.map +1 -0
  350. package/dist/jsx/components/timeline.d.ts +157 -0
  351. package/dist/jsx/components/timeline.d.ts.map +1 -0
  352. package/dist/jsx/components/timeline.js +357 -0
  353. package/dist/jsx/components/timeline.js.map +1 -0
  354. package/dist/jsx/components/token-budget.d.ts +70 -0
  355. package/dist/jsx/components/token-budget.d.ts.map +1 -0
  356. package/dist/jsx/components/token-budget.js +135 -0
  357. package/dist/jsx/components/token-budget.js.map +1 -0
  358. package/dist/jsx/components/xml.d.ts +27 -0
  359. package/dist/jsx/components/xml.d.ts.map +1 -0
  360. package/dist/jsx/components/xml.js +17 -0
  361. package/dist/jsx/components/xml.js.map +1 -0
  362. package/dist/jsx/index.d.ts +58 -0
  363. package/dist/jsx/index.d.ts.map +1 -0
  364. package/dist/jsx/index.js +59 -0
  365. package/dist/jsx/index.js.map +1 -0
  366. package/dist/jsx/jsx-runtime.d.ts +370 -0
  367. package/dist/jsx/jsx-runtime.d.ts.map +1 -0
  368. package/dist/jsx/jsx-runtime.js +79 -0
  369. package/dist/jsx/jsx-runtime.js.map +1 -0
  370. package/dist/jsx/jsx-types.d.ts +23 -0
  371. package/dist/jsx/jsx-types.d.ts.map +1 -0
  372. package/dist/jsx/jsx-types.js +1 -0
  373. package/dist/jsx/jsx-types.js.map +1 -0
  374. package/dist/mcp/client.d.ts +46 -0
  375. package/dist/mcp/client.d.ts.map +1 -0
  376. package/dist/mcp/client.js +138 -0
  377. package/dist/mcp/client.js.map +1 -0
  378. package/dist/mcp/component.d.ts +95 -0
  379. package/dist/mcp/component.d.ts.map +1 -0
  380. package/dist/mcp/component.js +185 -0
  381. package/dist/mcp/component.js.map +1 -0
  382. package/dist/mcp/create-mcp-tool.d.ts +191 -0
  383. package/dist/mcp/create-mcp-tool.d.ts.map +1 -0
  384. package/dist/mcp/create-mcp-tool.js +228 -0
  385. package/dist/mcp/create-mcp-tool.js.map +1 -0
  386. package/dist/mcp/index.d.ts +49 -0
  387. package/dist/mcp/index.d.ts.map +1 -0
  388. package/dist/mcp/index.js +48 -0
  389. package/dist/mcp/index.js.map +1 -0
  390. package/dist/mcp/service.d.ts +39 -0
  391. package/dist/mcp/service.d.ts.map +1 -0
  392. package/dist/mcp/service.js +77 -0
  393. package/dist/mcp/service.js.map +1 -0
  394. package/dist/mcp/tool.d.ts +55 -0
  395. package/dist/mcp/tool.d.ts.map +1 -0
  396. package/dist/mcp/tool.js +119 -0
  397. package/dist/mcp/tool.js.map +1 -0
  398. package/dist/mcp/types.d.ts +72 -0
  399. package/dist/mcp/types.d.ts.map +1 -0
  400. package/dist/mcp/types.js +6 -0
  401. package/dist/mcp/types.js.map +1 -0
  402. package/dist/middleware/defaults.d.ts +9 -0
  403. package/dist/middleware/defaults.d.ts.map +1 -0
  404. package/dist/middleware/defaults.js +47 -0
  405. package/dist/middleware/defaults.js.map +1 -0
  406. package/dist/model/adapter-helpers.d.ts +161 -0
  407. package/dist/model/adapter-helpers.d.ts.map +1 -0
  408. package/dist/model/adapter-helpers.js +351 -0
  409. package/dist/model/adapter-helpers.js.map +1 -0
  410. package/dist/model/adapter.d.ts +399 -0
  411. package/dist/model/adapter.d.ts.map +1 -0
  412. package/dist/model/adapter.js +497 -0
  413. package/dist/model/adapter.js.map +1 -0
  414. package/dist/model/index.d.ts +54 -0
  415. package/dist/model/index.d.ts.map +1 -0
  416. package/dist/model/index.js +55 -0
  417. package/dist/model/index.js.map +1 -0
  418. package/dist/model/model-hooks.d.ts +45 -0
  419. package/dist/model/model-hooks.d.ts.map +1 -0
  420. package/dist/model/model-hooks.js +24 -0
  421. package/dist/model/model-hooks.js.map +1 -0
  422. package/dist/model/model.d.ts +302 -0
  423. package/dist/model/model.d.ts.map +1 -0
  424. package/dist/model/model.js +20 -0
  425. package/dist/model/model.js.map +1 -0
  426. package/dist/model/simple-adapter.d.ts +176 -0
  427. package/dist/model/simple-adapter.d.ts.map +1 -0
  428. package/dist/model/simple-adapter.js +264 -0
  429. package/dist/model/simple-adapter.js.map +1 -0
  430. package/dist/model/stream-accumulator.d.ts +284 -0
  431. package/dist/model/stream-accumulator.d.ts.map +1 -0
  432. package/dist/model/stream-accumulator.js +532 -0
  433. package/dist/model/stream-accumulator.js.map +1 -0
  434. package/dist/model/utils/index.d.ts +2 -0
  435. package/dist/model/utils/index.d.ts.map +1 -0
  436. package/dist/model/utils/index.js +2 -0
  437. package/dist/model/utils/index.js.map +1 -0
  438. package/dist/model/utils/language-model.d.ts +26 -0
  439. package/dist/model/utils/language-model.d.ts.map +1 -0
  440. package/dist/model/utils/language-model.js +706 -0
  441. package/dist/model/utils/language-model.js.map +1 -0
  442. package/dist/procedure/index.d.ts +20 -0
  443. package/dist/procedure/index.d.ts.map +1 -0
  444. package/dist/procedure/index.js +19 -0
  445. package/dist/procedure/index.js.map +1 -0
  446. package/dist/reconciler/devtools-bridge.d.ts +40 -0
  447. package/dist/reconciler/devtools-bridge.d.ts.map +1 -0
  448. package/dist/reconciler/devtools-bridge.js +79 -0
  449. package/dist/reconciler/devtools-bridge.js.map +1 -0
  450. package/dist/reconciler/host-config.d.ts +39 -0
  451. package/dist/reconciler/host-config.d.ts.map +1 -0
  452. package/dist/reconciler/host-config.js +195 -0
  453. package/dist/reconciler/host-config.js.map +1 -0
  454. package/dist/reconciler/index.d.ts +7 -0
  455. package/dist/reconciler/index.d.ts.map +1 -0
  456. package/dist/reconciler/index.js +7 -0
  457. package/dist/reconciler/index.js.map +1 -0
  458. package/dist/reconciler/reconciler.d.ts +47 -0
  459. package/dist/reconciler/reconciler.d.ts.map +1 -0
  460. package/dist/reconciler/reconciler.js +89 -0
  461. package/dist/reconciler/reconciler.js.map +1 -0
  462. package/dist/reconciler/types.d.ts +86 -0
  463. package/dist/reconciler/types.d.ts.map +1 -0
  464. package/dist/reconciler/types.js +37 -0
  465. package/dist/reconciler/types.js.map +1 -0
  466. package/dist/renderers/base.d.ts +98 -0
  467. package/dist/renderers/base.d.ts.map +1 -0
  468. package/dist/renderers/base.js +82 -0
  469. package/dist/renderers/base.js.map +1 -0
  470. package/dist/renderers/index.d.ts +31 -0
  471. package/dist/renderers/index.d.ts.map +1 -0
  472. package/dist/renderers/index.js +31 -0
  473. package/dist/renderers/index.js.map +1 -0
  474. package/dist/renderers/markdown.d.ts +48 -0
  475. package/dist/renderers/markdown.d.ts.map +1 -0
  476. package/dist/renderers/markdown.js +432 -0
  477. package/dist/renderers/markdown.js.map +1 -0
  478. package/dist/renderers/types.d.ts +7 -0
  479. package/dist/renderers/types.d.ts.map +1 -0
  480. package/dist/renderers/types.js +7 -0
  481. package/dist/renderers/types.js.map +1 -0
  482. package/dist/renderers/xml.d.ts +49 -0
  483. package/dist/renderers/xml.d.ts.map +1 -0
  484. package/dist/renderers/xml.js +444 -0
  485. package/dist/renderers/xml.js.map +1 -0
  486. package/dist/state/boundary.d.ts +347 -0
  487. package/dist/state/boundary.d.ts.map +1 -0
  488. package/dist/state/boundary.js +341 -0
  489. package/dist/state/boundary.js.map +1 -0
  490. package/dist/state/context.d.ts +138 -0
  491. package/dist/state/context.d.ts.map +1 -0
  492. package/dist/state/context.js +139 -0
  493. package/dist/state/context.js.map +1 -0
  494. package/dist/state/hooks.d.ts +798 -0
  495. package/dist/state/hooks.d.ts.map +1 -0
  496. package/dist/state/hooks.js +1437 -0
  497. package/dist/state/hooks.js.map +1 -0
  498. package/dist/state/index.d.ts +72 -0
  499. package/dist/state/index.d.ts.map +1 -0
  500. package/dist/state/index.js +73 -0
  501. package/dist/state/index.js.map +1 -0
  502. package/dist/state/signal.d.ts +223 -0
  503. package/dist/state/signal.d.ts.map +1 -0
  504. package/dist/state/signal.js +699 -0
  505. package/dist/state/signal.js.map +1 -0
  506. package/dist/state/use-state.d.ts +210 -0
  507. package/dist/state/use-state.d.ts.map +1 -0
  508. package/dist/state/use-state.js +327 -0
  509. package/dist/state/use-state.js.map +1 -0
  510. package/dist/tentickle-instance.d.ts +285 -0
  511. package/dist/tentickle-instance.d.ts.map +1 -0
  512. package/dist/tentickle-instance.js +700 -0
  513. package/dist/tentickle-instance.js.map +1 -0
  514. package/dist/testing/act.d.ts +59 -0
  515. package/dist/testing/act.d.ts.map +1 -0
  516. package/dist/testing/act.js +92 -0
  517. package/dist/testing/act.js.map +1 -0
  518. package/dist/testing/async-helpers.d.ts +99 -0
  519. package/dist/testing/async-helpers.d.ts.map +1 -0
  520. package/dist/testing/async-helpers.js +193 -0
  521. package/dist/testing/async-helpers.js.map +1 -0
  522. package/dist/testing/compile-agent.d.ts +101 -0
  523. package/dist/testing/compile-agent.d.ts.map +1 -0
  524. package/dist/testing/compile-agent.js +136 -0
  525. package/dist/testing/compile-agent.js.map +1 -0
  526. package/dist/testing/index.d.ts +57 -0
  527. package/dist/testing/index.d.ts.map +1 -0
  528. package/dist/testing/index.js +59 -0
  529. package/dist/testing/index.js.map +1 -0
  530. package/dist/testing/mock-app.d.ts +163 -0
  531. package/dist/testing/mock-app.d.ts.map +1 -0
  532. package/dist/testing/mock-app.js +393 -0
  533. package/dist/testing/mock-app.js.map +1 -0
  534. package/dist/testing/mocks.d.ts +142 -0
  535. package/dist/testing/mocks.d.ts.map +1 -0
  536. package/dist/testing/mocks.js +191 -0
  537. package/dist/testing/mocks.js.map +1 -0
  538. package/dist/testing/render-agent.d.ts +146 -0
  539. package/dist/testing/render-agent.d.ts.map +1 -0
  540. package/dist/testing/render-agent.js +200 -0
  541. package/dist/testing/render-agent.js.map +1 -0
  542. package/dist/testing/test-adapter.d.ts +157 -0
  543. package/dist/testing/test-adapter.d.ts.map +1 -0
  544. package/dist/testing/test-adapter.js +297 -0
  545. package/dist/testing/test-adapter.js.map +1 -0
  546. package/dist/testing/test-model.d.ts +132 -0
  547. package/dist/testing/test-model.d.ts.map +1 -0
  548. package/dist/testing/test-model.js +260 -0
  549. package/dist/testing/test-model.js.map +1 -0
  550. package/dist/tool/index.d.ts +61 -0
  551. package/dist/tool/index.d.ts.map +1 -0
  552. package/dist/tool/index.js +63 -0
  553. package/dist/tool/index.js.map +1 -0
  554. package/dist/tool/tool-hooks.d.ts +45 -0
  555. package/dist/tool/tool-hooks.d.ts.map +1 -0
  556. package/dist/tool/tool-hooks.js +35 -0
  557. package/dist/tool/tool-hooks.js.map +1 -0
  558. package/dist/tool/tool.d.ts +403 -0
  559. package/dist/tool/tool.d.ts.map +1 -0
  560. package/dist/tool/tool.js +176 -0
  561. package/dist/tool/tool.js.map +1 -0
  562. package/dist/types.d.ts +442 -0
  563. package/dist/types.d.ts.map +1 -0
  564. package/dist/types.js +97 -0
  565. package/dist/types.js.map +1 -0
  566. package/dist/utils/abort-utils.d.ts +5 -0
  567. package/dist/utils/abort-utils.d.ts.map +1 -0
  568. package/dist/utils/abort-utils.js +50 -0
  569. package/dist/utils/abort-utils.js.map +1 -0
  570. package/dist/utils/classify-error.d.ts +19 -0
  571. package/dist/utils/classify-error.d.ts.map +1 -0
  572. package/dist/utils/classify-error.js +77 -0
  573. package/dist/utils/classify-error.js.map +1 -0
  574. package/dist/utils/index.d.ts +21 -0
  575. package/dist/utils/index.d.ts.map +1 -0
  576. package/dist/utils/index.js +21 -0
  577. package/dist/utils/index.js.map +1 -0
  578. package/dist/utils/normalization.d.ts +6 -0
  579. package/dist/utils/normalization.d.ts.map +1 -0
  580. package/dist/utils/normalization.js +103 -0
  581. package/dist/utils/normalization.js.map +1 -0
  582. package/dist/utils/registry.d.ts +15 -0
  583. package/dist/utils/registry.d.ts.map +1 -0
  584. package/dist/utils/registry.js +28 -0
  585. package/dist/utils/registry.js.map +1 -0
  586. package/dist/utils/schema.d.ts +7 -0
  587. package/dist/utils/schema.d.ts.map +1 -0
  588. package/dist/utils/schema.js +13 -0
  589. package/dist/utils/schema.js.map +1 -0
  590. package/dist/utils/token-estimate.d.ts +87 -0
  591. package/dist/utils/token-estimate.d.ts.map +1 -0
  592. package/dist/utils/token-estimate.js +199 -0
  593. package/dist/utils/token-estimate.js.map +1 -0
  594. package/dist/v2/reconciler/host-config.d.ts +31 -0
  595. package/dist/v2/reconciler/host-config.d.ts.map +1 -0
  596. package/dist/v2/reconciler/host-config.js +197 -0
  597. package/dist/v2/reconciler/host-config.js.map +1 -0
  598. package/dist/v2/reconciler/index.d.ts +7 -0
  599. package/dist/v2/reconciler/index.d.ts.map +1 -0
  600. package/dist/v2/reconciler/index.js +7 -0
  601. package/dist/v2/reconciler/index.js.map +1 -0
  602. package/dist/v2/reconciler/reconciler.d.ts +39 -0
  603. package/dist/v2/reconciler/reconciler.d.ts.map +1 -0
  604. package/dist/v2/reconciler/reconciler.js +54 -0
  605. package/dist/v2/reconciler/reconciler.js.map +1 -0
  606. package/dist/v2/reconciler/types.d.ts +64 -0
  607. package/dist/v2/reconciler/types.d.ts.map +1 -0
  608. package/dist/v2/reconciler/types.js +20 -0
  609. package/dist/v2/reconciler/types.js.map +1 -0
  610. package/dist/v2/renderers/index.d.ts +7 -0
  611. package/dist/v2/renderers/index.d.ts.map +1 -0
  612. package/dist/v2/renderers/index.js +7 -0
  613. package/dist/v2/renderers/index.js.map +1 -0
  614. package/dist/v2/renderers/markdown.d.ts +16 -0
  615. package/dist/v2/renderers/markdown.d.ts.map +1 -0
  616. package/dist/v2/renderers/markdown.js +65 -0
  617. package/dist/v2/renderers/markdown.js.map +1 -0
  618. package/dist/v2/renderers/types.d.ts +26 -0
  619. package/dist/v2/renderers/types.d.ts.map +1 -0
  620. package/dist/v2/renderers/types.js +6 -0
  621. package/dist/v2/renderers/types.js.map +1 -0
  622. package/dist/v2/renderers/xml.d.ts +17 -0
  623. package/dist/v2/renderers/xml.d.ts.map +1 -0
  624. package/dist/v2/renderers/xml.js +73 -0
  625. package/dist/v2/renderers/xml.js.map +1 -0
  626. package/package.json +49 -0
@@ -0,0 +1,899 @@
1
+ /**
2
+ * New Procedure Implementation - Variable Arity, Decorators, Pipelines
3
+ *
4
+ * Design Principles:
5
+ * - Everything is a Procedure
6
+ * - Variable arity support (0, 1, N args)
7
+ * - Decorator = Function (same type)
8
+ * - Hooks are Procedures (@hook decorator)
9
+ * - Pipelines for middleware bundles
10
+ * - Direct calls (no registration)
11
+ * - Automatic tracking (execution graph, telemetry)
12
+ */
13
+ import { z } from "zod";
14
+ import { EventEmitter } from "node:events";
15
+ import { Context, isKernelContext } from "./context";
16
+ import { ExecutionTracker } from "./execution-tracker";
17
+ import { randomUUID } from "node:crypto";
18
+ import { ProcedureNode } from "./procedure-graph";
19
+ import { AbortError, ValidationError } from "@tentickle/shared";
20
+ import { EventBuffer } from "./event-buffer";
21
+ /**
22
+ * Create a ProcedurePromise from a regular Promise.
23
+ *
24
+ * Adds a `.result` property that chains through to the inner handle's result.
25
+ * If the resolved value has a `.result` property, `.result` resolves to that.
26
+ * Otherwise, `.result` resolves to the value itself.
27
+ *
28
+ * @param promise - The base promise to enhance
29
+ * @returns Enhanced ProcedurePromise with .result chaining
30
+ */
31
+ export function createProcedurePromise(promise) {
32
+ const enhanced = promise;
33
+ Object.defineProperty(enhanced, "result", {
34
+ get() {
35
+ return promise.then((value) => {
36
+ // If the resolved value has a .result property, chain to it
37
+ if (value && typeof value === "object" && "result" in value) {
38
+ return value.result;
39
+ }
40
+ // Otherwise, return the value itself
41
+ return value;
42
+ });
43
+ },
44
+ enumerable: true,
45
+ configurable: false,
46
+ });
47
+ return enhanced;
48
+ }
49
+ // ============================================================================
50
+ // Symbol Branding
51
+ // ============================================================================
52
+ /**
53
+ * Symbol used to brand Procedure objects for deterministic type checking.
54
+ * Using Symbol.for() ensures the same symbol across module instances.
55
+ */
56
+ export const PROCEDURE_SYMBOL = Symbol.for("@tentickle/kernel.procedure");
57
+ /**
58
+ * Check if a value is a Procedure using Symbol branding.
59
+ *
60
+ * This is more reliable than duck typing because it uses a unique Symbol
61
+ * that can only be present on objects created by the procedure system.
62
+ *
63
+ * @param value - The value to check
64
+ * @returns True if the value is a branded Procedure
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const proc = createProcedure(async (x: number) => x * 2);
69
+ * isProcedure(proc); // true
70
+ * isProcedure(() => {}); // false
71
+ * isProcedure({ use: () => {} }); // false (duck typing would say true)
72
+ * ```
73
+ */
74
+ export function isProcedure(value) {
75
+ return value != null && typeof value === "function" && PROCEDURE_SYMBOL in value;
76
+ }
77
+ /**
78
+ * Default implementation of ExecutionHandle.
79
+ *
80
+ * Creates a handle that wraps a result promise and event stream.
81
+ * Uses EventBuffer for dual consumption - multiple iterators can independently
82
+ * consume all events, and late subscribers receive replayed events.
83
+ *
84
+ * @typeParam TResult - The return type of the procedure
85
+ * @typeParam TEvent - The event type for streaming
86
+ */
87
+ export class ExecutionHandleImpl {
88
+ result;
89
+ traceId;
90
+ _status = "running";
91
+ _abortController;
92
+ events;
93
+ constructor(result, events, traceId, abortController) {
94
+ this.result = result;
95
+ this.traceId = traceId;
96
+ this._abortController = abortController ?? new AbortController();
97
+ this.events = events;
98
+ // Update status when result settles
99
+ result.then(() => {
100
+ if (this._status === "running") {
101
+ this._status = "completed";
102
+ this.events.close();
103
+ }
104
+ }, (err) => {
105
+ if (this._status === "running") {
106
+ this._status = "error";
107
+ this.events.error(err instanceof Error ? err : new Error(String(err)));
108
+ }
109
+ });
110
+ }
111
+ /**
112
+ * @deprecated Use `events` instead. This getter exists for backwards compatibility.
113
+ */
114
+ get eventBuffer() {
115
+ return this.events;
116
+ }
117
+ get status() {
118
+ return this._status;
119
+ }
120
+ abort(reason) {
121
+ if (this._status === "running") {
122
+ this._status = "aborted";
123
+ this._abortController.abort(reason);
124
+ this.events.close();
125
+ }
126
+ }
127
+ /**
128
+ * Push an event to the buffer.
129
+ * This is the primary way to emit events from procedure handlers.
130
+ */
131
+ pushEvent(event) {
132
+ this.events.push(event);
133
+ }
134
+ // AsyncIterable implementation - delegates to EventBuffer for dual consumption
135
+ [Symbol.asyncIterator]() {
136
+ return this.events[Symbol.asyncIterator]();
137
+ }
138
+ }
139
+ /**
140
+ * Create a reusable middleware pipeline.
141
+ *
142
+ * Pipelines bundle multiple middleware together for reuse across procedures.
143
+ * They can be passed to `procedure.use()` just like individual middleware.
144
+ *
145
+ * @param middleware - Initial middleware to include in the pipeline
146
+ * @returns A new MiddlewarePipeline
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * // Create a pipeline with initial middleware
151
+ * const authPipeline = createPipeline([authMiddleware, rateLimitMiddleware]);
152
+ *
153
+ * // Or build it up with .use()
154
+ * const logPipeline = createPipeline()
155
+ * .use(requestLogging)
156
+ * .use(responseLogging);
157
+ *
158
+ * // Apply to procedures
159
+ * const proc = createProcedure(handler)
160
+ * .use(authPipeline)
161
+ * .use(logPipeline);
162
+ * ```
163
+ *
164
+ * @see {@link MiddlewarePipeline} - The pipeline interface
165
+ */
166
+ export function createPipeline(middleware = []) {
167
+ const middlewares = [...middleware];
168
+ return {
169
+ use(...mw) {
170
+ middlewares.push(...mw);
171
+ return this;
172
+ },
173
+ getMiddleware() {
174
+ return middlewares;
175
+ },
176
+ };
177
+ }
178
+ // ============================================================================
179
+ // Helper Functions
180
+ // ============================================================================
181
+ export function isAsyncIterable(obj) {
182
+ return obj && typeof obj[Symbol.asyncIterator] === "function";
183
+ }
184
+ function flattenMiddleware(middleware) {
185
+ const flattened = [];
186
+ for (const mw of middleware) {
187
+ if ("getMiddleware" in mw && typeof mw.getMiddleware === "function") {
188
+ flattened.push(...mw.getMiddleware());
189
+ }
190
+ else {
191
+ flattened.push(mw);
192
+ }
193
+ }
194
+ return flattened;
195
+ }
196
+ class ProcedureImpl {
197
+ internalMiddlewares = [];
198
+ middlewares = [];
199
+ schema;
200
+ procedureName;
201
+ sourceType = "procedure";
202
+ sourceId;
203
+ handleFactory;
204
+ metadata; // For telemetry span attributes
205
+ handler;
206
+ timeout; // Timeout in milliseconds
207
+ skipTracking; // Skip ExecutionTracker for transparent wrappers
208
+ executionBoundary; // Execution boundary config (Phase 3)
209
+ executionType; // Explicit execution type (Phase 3)
210
+ constructor(options = {}, handler) {
211
+ this.procedureName = options.name;
212
+ this.schema = options.schema;
213
+ this.sourceType = options.sourceType || "procedure";
214
+ this.sourceId = options.sourceId;
215
+ this.handleFactory = options.handleFactory;
216
+ this.metadata = options.metadata; // Store metadata for telemetry
217
+ this.timeout = options.timeout; // Store timeout
218
+ this.skipTracking = options.skipTracking; // Store skipTracking flag
219
+ this.executionBoundary = options.executionBoundary; // Execution boundary config (Phase 3)
220
+ this.executionType = options.executionType; // Explicit execution type (Phase 3)
221
+ if (options.middleware) {
222
+ this.middlewares = flattenMiddleware(options.middleware);
223
+ }
224
+ // Adapt Procedure middleware to internal middleware format
225
+ for (const mw of this.middlewares) {
226
+ const adaptedMw = async (args, ctx, nextFn) => {
227
+ const envelope = {
228
+ sourceType: this.sourceType,
229
+ sourceId: this.sourceId,
230
+ operationName: this.procedureName || "anonymous",
231
+ args,
232
+ context: ctx,
233
+ };
234
+ return mw(args, envelope, async (transformedArgs) => {
235
+ return nextFn(transformedArgs);
236
+ });
237
+ };
238
+ this.internalMiddlewares.push(adaptedMw);
239
+ }
240
+ // Set handler if provided
241
+ if (handler) {
242
+ this.handler = handler;
243
+ }
244
+ }
245
+ /**
246
+ * Set the handler function. Returns a new Procedure with the handler set.
247
+ */
248
+ setHandler(fn) {
249
+ return createProcedureFromImpl({
250
+ name: this.procedureName,
251
+ schema: this.schema,
252
+ middleware: this.middlewares,
253
+ handleFactory: this.handleFactory,
254
+ sourceType: this.sourceType,
255
+ sourceId: this.sourceId,
256
+ metadata: this.metadata, // Preserve metadata when setting new handler
257
+ // Preserve execution tracking options (Phase 3)
258
+ executionBoundary: this.executionBoundary,
259
+ executionType: this.executionType,
260
+ skipTracking: this.skipTracking,
261
+ timeout: this.timeout,
262
+ }, fn);
263
+ }
264
+ /**
265
+ * Internal execution method - runs middleware pipeline and handler.
266
+ */
267
+ async runMiddlewarePipeline(args, context) {
268
+ if (!this.handler) {
269
+ throw new Error("Procedure handler not set. Call constructor with handler or use .setHandler() method.");
270
+ }
271
+ // Get context middleware at execution time (from Tentickle instance)
272
+ // This enables runtime middleware configuration that can differ per-app or per-request
273
+ const procedureName = this.procedureName || "anonymous";
274
+ const contextMiddleware = [];
275
+ if (context.middleware?.getMiddlewareFor) {
276
+ const externalMiddleware = context.middleware.getMiddlewareFor(procedureName);
277
+ for (const mw of externalMiddleware) {
278
+ // Adapt external middleware to internal format
279
+ const adaptedMw = async (mwArgs, ctx, nextFn) => {
280
+ const envelope = {
281
+ sourceType: this.sourceType,
282
+ sourceId: this.sourceId,
283
+ operationName: procedureName,
284
+ args: mwArgs,
285
+ context: ctx,
286
+ };
287
+ // Cast envelope to any[] version since external middleware uses Middleware<any[]>
288
+ return mw(mwArgs, envelope, async (transformedArgs) => {
289
+ return nextFn(transformedArgs);
290
+ });
291
+ };
292
+ contextMiddleware.push(adaptedMw);
293
+ }
294
+ }
295
+ // Combine: context middleware runs first, then instance middleware
296
+ const allMiddleware = [...contextMiddleware, ...this.internalMiddlewares];
297
+ // Helper function to run the middleware pipeline
298
+ const executeMiddlewarePipeline = async () => {
299
+ // Check Abort Signal before starting
300
+ if (context?.signal?.aborted) {
301
+ throw new AbortError();
302
+ }
303
+ // Run Middleware Pipeline
304
+ let index = 0;
305
+ let currentInput = args;
306
+ const runMiddleware = async (transformedInput) => {
307
+ // Check Abort Signal before each middleware/handler
308
+ if (context?.signal?.aborted) {
309
+ throw new AbortError();
310
+ }
311
+ // Update current input if middleware provided transformed input
312
+ if (transformedInput !== undefined) {
313
+ currentInput = transformedInput;
314
+ }
315
+ if (index < allMiddleware.length) {
316
+ const middleware = allMiddleware[index++];
317
+ const result = await middleware(currentInput, context, runMiddleware);
318
+ // Check Abort Signal after middleware execution (middleware might have aborted)
319
+ if (context?.signal?.aborted) {
320
+ throw new AbortError();
321
+ }
322
+ return result;
323
+ }
324
+ else {
325
+ // Check Abort Signal before handler
326
+ if (context?.signal?.aborted) {
327
+ throw new AbortError();
328
+ }
329
+ // Call handler with current input (which may have been transformed)
330
+ const result = this.handler(...currentInput);
331
+ // Handler can return anything - Promise.resolve handles Promise, value, or AsyncIterable
332
+ return result;
333
+ }
334
+ };
335
+ return runMiddleware();
336
+ };
337
+ // Skip ExecutionTracker for transparent wrappers (e.g., withContext)
338
+ // This prevents duplicate procedure tracking when a wrapper delegates to another procedure
339
+ if (this.skipTracking) {
340
+ return executeMiddlewarePipeline();
341
+ }
342
+ // Wrap execution with ExecutionTracker
343
+ return ExecutionTracker.track(context, {
344
+ name: this.procedureName || `procedure:${this.handler.name || "anonymous"}`,
345
+ parentPid: context.procedurePid,
346
+ metadata: this.metadata, // Pass metadata to ExecutionTracker for span attributes
347
+ // Execution boundary configuration (Phase 3)
348
+ executionBoundary: this.executionBoundary,
349
+ executionType: this.executionType,
350
+ }, async (_node) => {
351
+ return executeMiddlewarePipeline();
352
+ });
353
+ }
354
+ /**
355
+ * Internal execution method.
356
+ */
357
+ async execute(args, options, opEvents) {
358
+ if (!this.handler) {
359
+ throw ValidationError.required("handler", "Procedure handler not set. Call constructor with handler or use .setHandler() method.");
360
+ }
361
+ // Validate input if schema provided
362
+ let validatedArgs = args;
363
+ if (this.schema && args.length > 0) {
364
+ const validated = await this.schema.parseAsync(args[0]);
365
+ validatedArgs = [validated, ...args.slice(1)];
366
+ }
367
+ // Resolve context: either create new root or derive child from current
368
+ let context;
369
+ const currentContext = Context.tryGet();
370
+ // Detect if we have "real" context overrides (not just signal/traceId from createHandle)
371
+ const hasRealOverrides = options &&
372
+ Object.keys(options).some((k) => k !== "signal" && k !== "traceId" && k !== "events");
373
+ if (!currentContext) {
374
+ // No existing context - create a new root context
375
+ context = Context.create(options);
376
+ // If opEvents was provided, use it instead of the auto-created events emitter
377
+ // (Context.create always creates a new EventEmitter, we need to override it)
378
+ if (opEvents) {
379
+ context.events = opEvents;
380
+ }
381
+ }
382
+ else if (hasRealOverrides) {
383
+ // Existing context with meaningful overrides - create a child context
384
+ // This ensures we don't mutate the parent's context object
385
+ context = Context.child({
386
+ ...options,
387
+ events: opEvents ?? options?.events ?? currentContext.events,
388
+ channels: options?.channels ?? currentContext.channels,
389
+ });
390
+ }
391
+ else {
392
+ // Existing context, no meaningful overrides - reuse as-is
393
+ // This preserves procedureGraph sharing with parent context
394
+ context = currentContext;
395
+ }
396
+ // Create handle if handleFactory is provided and handle doesn't exist
397
+ if (this.handleFactory && !context.executionHandle) {
398
+ const events = new EventBuffer();
399
+ const traceId = context.traceId || randomUUID();
400
+ const resultPromise = Promise.resolve();
401
+ // Only call handleFactory if it's a function, otherwise use default implementation
402
+ const handle = typeof this.handleFactory === "function"
403
+ ? this.handleFactory(events, traceId, resultPromise, context)
404
+ : new ExecutionHandleImpl(resultPromise, events, traceId);
405
+ context.executionHandle = handle;
406
+ }
407
+ const currentStore = Context.tryGet();
408
+ const isRoot = context !== currentStore;
409
+ const executeInternal = async () => {
410
+ let result;
411
+ if (isRoot) {
412
+ result = await Context.run(context, async () => this.runMiddlewarePipeline(validatedArgs, context));
413
+ }
414
+ else {
415
+ result = await this.runMiddlewarePipeline(validatedArgs, context);
416
+ }
417
+ // AsyncIterables are now fully handled by ExecutionTracker (context, procedure:end/error)
418
+ // No additional wrapping needed here - just return the result
419
+ // ExecutionTracker wraps AsyncIterables to:
420
+ // 1. Maintain the forked context with procedurePid during iteration
421
+ // 2. Emit procedure:end when iteration completes
422
+ // 3. Emit procedure:error on errors
423
+ return result;
424
+ };
425
+ // Apply timeout if configured
426
+ if (this.timeout && this.timeout > 0) {
427
+ return this.withTimeoutRace(executeInternal(), this.timeout);
428
+ }
429
+ return executeInternal();
430
+ }
431
+ /**
432
+ * Race execution against a timeout.
433
+ */
434
+ async withTimeoutRace(promise, timeoutMs) {
435
+ let timeoutId;
436
+ const timeoutPromise = new Promise((_, reject) => {
437
+ timeoutId = setTimeout(() => {
438
+ reject(AbortError.timeout(timeoutMs));
439
+ }, timeoutMs);
440
+ });
441
+ try {
442
+ return await Promise.race([promise, timeoutPromise]);
443
+ }
444
+ finally {
445
+ clearTimeout(timeoutId);
446
+ }
447
+ }
448
+ /**
449
+ * Execute the procedure and return a ProcedurePromise.
450
+ *
451
+ * All procedures return ProcedurePromise<T> consistently:
452
+ * - `await proc()` → T (the value or handle)
453
+ * - `await proc().result` → final result (chains to T.result if exists)
454
+ *
455
+ * By default, procedures are PASS-THROUGH:
456
+ * - T is whatever the handler returns
457
+ * - If handler returns something with .result, proc().result chains to it
458
+ *
459
+ * To wrap in ExecutionHandle, provide a handleFactory:
460
+ * - T is ExecutionHandle<HandlerReturn>
461
+ * - handle.result is the handler's return value
462
+ */
463
+ exec(...args) {
464
+ // If handleFactory is a function or true, use handle wrapping
465
+ if (typeof this.handleFactory === "function" || this.handleFactory === true) {
466
+ return this.executeWithHandle(args);
467
+ }
468
+ // Default: pass-through mode (handleFactory: false or undefined)
469
+ return this.executePassThrough(args);
470
+ }
471
+ /**
472
+ * Execute in pass-through mode - returns ProcedurePromise<T>.
473
+ * Used when handleFactory: false.
474
+ *
475
+ * Always returns ProcedurePromise for consistency, even when there's no middleware.
476
+ * This ensures `await proc()` and `await proc().result` always work predictably.
477
+ */
478
+ executePassThrough(args) {
479
+ const promise = (async () => {
480
+ // Validate if schema provided
481
+ let validatedArgs = args;
482
+ if (this.schema && args.length > 0) {
483
+ const validated = await this.schema.parseAsync(args[0]);
484
+ validatedArgs = [validated, ...args.slice(1)];
485
+ }
486
+ // If no middleware and no timeout, call handler directly
487
+ // But still check abort signal first
488
+ if (this.middlewares.length === 0 && !this.timeout) {
489
+ const ctx = Context.tryGet();
490
+ if (ctx?.signal?.aborted) {
491
+ throw new AbortError();
492
+ }
493
+ return this.handler(...validatedArgs);
494
+ }
495
+ // Otherwise go through the middleware chain
496
+ return this.execute(validatedArgs);
497
+ })();
498
+ return createProcedurePromise(promise);
499
+ }
500
+ /**
501
+ * Execute with handle wrapping - returns ProcedurePromise<ExecutionHandle<T>>.
502
+ * Used when handleFactory is provided (not false).
503
+ */
504
+ executeWithHandle(args) {
505
+ const handle = this.createHandle(args);
506
+ // Wrap the synchronously-created handle in a ProcedurePromise
507
+ return createProcedurePromise(Promise.resolve(handle));
508
+ }
509
+ /**
510
+ * Create an ExecutionHandle for the given args.
511
+ * This is the core method that creates the handle and starts execution.
512
+ */
513
+ createHandle(args) {
514
+ const events = new EventBuffer();
515
+ const traceId = Context.tryGet()?.traceId || randomUUID();
516
+ const abortController = new AbortController();
517
+ // Create the result promise that will resolve when execution completes
518
+ const resultPromise = (async () => {
519
+ // Validate input if schema provided
520
+ let validatedArgs = args;
521
+ if (this.schema && args.length > 0) {
522
+ const validated = await this.schema.parseAsync(args[0]);
523
+ validatedArgs = [validated, ...args.slice(1)];
524
+ }
525
+ // Execute with the events buffer - it has EventEmitter-compatible API
526
+ return this.execute(validatedArgs, { signal: abortController.signal, traceId }, events);
527
+ })();
528
+ // Create handle using factory or default implementation
529
+ if (this.handleFactory && typeof this.handleFactory === "function") {
530
+ const context = Context.tryGet() || Context.create({ traceId });
531
+ return this.handleFactory(events, traceId, resultPromise, context, abortController);
532
+ }
533
+ return new ExecutionHandleImpl(resultPromise, events, traceId, abortController);
534
+ }
535
+ /**
536
+ * Add middleware to the procedure. Returns a new Procedure.
537
+ */
538
+ use(...middleware) {
539
+ const flattened = flattenMiddleware(middleware);
540
+ return createProcedureFromImpl({
541
+ name: this.procedureName,
542
+ schema: this.schema,
543
+ middleware: [...this.middlewares, ...flattened],
544
+ handleFactory: this.handleFactory,
545
+ sourceType: this.sourceType,
546
+ sourceId: this.sourceId,
547
+ metadata: this.metadata, // Preserve metadata when adding middleware
548
+ // Preserve execution tracking options (Phase 3)
549
+ executionBoundary: this.executionBoundary,
550
+ executionType: this.executionType,
551
+ skipTracking: this.skipTracking,
552
+ timeout: this.timeout,
553
+ }, this.handler);
554
+ }
555
+ /**
556
+ * Create a procedure variant with merged context. Returns a new Procedure.
557
+ *
558
+ * IMPORTANT: This does NOT copy middleware to the new procedure. The middleware
559
+ * runs when proc.execute() is called in the wrapped handler. Copying middleware
560
+ * would cause double execution since execute() runs its own middleware chain.
561
+ */
562
+ withContext(ctx) {
563
+ const proc = this;
564
+ // Create a wrapper that merges context BEFORE execution
565
+ const wrappedHandler = (async (...args) => {
566
+ // Get current context and merge
567
+ // Note: Signal should come from ExecutionHandle, not Context inheritance
568
+ // Context signal is only for external aborts (e.g., user-provided), not execution lifecycle
569
+ const currentCtx = Context.tryGet() || Context.create();
570
+ const mergedCtx = { ...currentCtx, ...ctx };
571
+ // Run with merged context - this ensures middleware sees the merged context
572
+ return Context.run(mergedCtx, async () => {
573
+ // Call the original procedure's execute method with merged context as options
574
+ // This ensures the merged context is used throughout execution
575
+ return proc.execute(args, ctx);
576
+ });
577
+ });
578
+ // Don't copy middleware here! The original proc.execute() will run its middleware.
579
+ // Copying middleware would cause double execution.
580
+ // Skip tracking for this wrapper - the inner proc.execute() will handle tracking.
581
+ return createProcedureFromImpl({
582
+ name: this.procedureName,
583
+ schema: this.schema,
584
+ middleware: [], // Empty - middleware runs in proc.execute()
585
+ handleFactory: this.handleFactory,
586
+ sourceType: this.sourceType,
587
+ sourceId: this.sourceId,
588
+ metadata: this.metadata, // Preserve metadata for telemetry
589
+ skipTracking: true, // Wrapper delegates to original - don't double-track
590
+ }, wrappedHandler);
591
+ }
592
+ /**
593
+ * Add a single middleware. Returns a new Procedure.
594
+ */
595
+ withMiddleware(mw) {
596
+ return this.use(mw);
597
+ }
598
+ /**
599
+ * Create a procedure variant with a timeout. Returns a new Procedure.
600
+ * Throws AbortError.timeout() if the timeout is exceeded.
601
+ *
602
+ * @param ms - Timeout in milliseconds
603
+ */
604
+ withTimeout(ms) {
605
+ return createProcedureFromImpl({
606
+ name: this.procedureName,
607
+ schema: this.schema,
608
+ middleware: this.middlewares,
609
+ handleFactory: this.handleFactory,
610
+ sourceType: this.sourceType,
611
+ sourceId: this.sourceId,
612
+ metadata: this.metadata,
613
+ timeout: ms,
614
+ // Preserve execution tracking options (Phase 3)
615
+ executionBoundary: this.executionBoundary,
616
+ executionType: this.executionType,
617
+ skipTracking: this.skipTracking,
618
+ }, this.handler);
619
+ }
620
+ /**
621
+ * Create a procedure variant with merged metadata. Returns a new Procedure.
622
+ * Metadata flows to ExecutionTracker and is included in procedure events and telemetry spans.
623
+ *
624
+ * @param metadata - Metadata to merge with existing procedure metadata
625
+ */
626
+ withMetadata(metadata) {
627
+ return createProcedureFromImpl({
628
+ name: this.procedureName,
629
+ schema: this.schema,
630
+ middleware: this.middlewares,
631
+ handleFactory: this.handleFactory,
632
+ sourceType: this.sourceType,
633
+ sourceId: this.sourceId,
634
+ // Merge metadata - new values override existing
635
+ metadata: { ...this.metadata, ...metadata },
636
+ timeout: this.timeout,
637
+ // Preserve execution tracking options (Phase 3)
638
+ executionBoundary: this.executionBoundary,
639
+ executionType: this.executionType,
640
+ skipTracking: this.skipTracking,
641
+ }, this.handler);
642
+ }
643
+ /**
644
+ * Pipe the output of this procedure to another procedure.
645
+ * Creates a new procedure that runs this procedure, then passes its result to the next.
646
+ */
647
+ pipe(next) {
648
+ const self = this;
649
+ const pipedHandler = async (...args) => {
650
+ const firstResult = await self.execute(args);
651
+ const secondResult = await next(firstResult);
652
+ return secondResult;
653
+ };
654
+ return createProcedureFromImpl({
655
+ name: this.procedureName ? `${this.procedureName}.pipe` : "piped-procedure",
656
+ sourceType: this.sourceType,
657
+ sourceId: this.sourceId,
658
+ metadata: this.metadata,
659
+ timeout: this.timeout,
660
+ }, pipedHandler);
661
+ }
662
+ }
663
+ function createProcedureFromImpl(options, handler) {
664
+ const impl = new ProcedureImpl(options, handler);
665
+ // Create a callable function
666
+ const proc = (...args) => {
667
+ // Support context as last arg (backward compat)
668
+ let actualArgs;
669
+ if (args.length > 0) {
670
+ const lastArg = args[args.length - 1];
671
+ // Check if last arg is a KernelContext
672
+ if (isKernelContext(lastArg)) {
673
+ actualArgs = args.slice(0, -1);
674
+ }
675
+ else {
676
+ actualArgs = args;
677
+ }
678
+ }
679
+ else {
680
+ actualArgs = args;
681
+ }
682
+ // Return result directly (pass-through) or ExecutionHandle
683
+ return impl.exec(...actualArgs);
684
+ };
685
+ // Attach methods - same for both Procedure with handle return and Pass-through return Procedure
686
+ proc.use = impl.use.bind(impl);
687
+ proc.withContext = impl.withContext.bind(impl);
688
+ proc.withMiddleware = impl.withMiddleware.bind(impl);
689
+ proc.withTimeout = impl.withTimeout.bind(impl);
690
+ proc.withMetadata = impl.withMetadata.bind(impl);
691
+ proc.exec = impl.exec.bind(impl);
692
+ proc.pipe = impl.pipe.bind(impl);
693
+ // Brand with symbol for deterministic type checking
694
+ proc[PROCEDURE_SYMBOL] = true;
695
+ return proc;
696
+ }
697
+ export function generatorProcedure(optionsOrFn, fn) {
698
+ if (typeof optionsOrFn === "function") {
699
+ fn = optionsOrFn;
700
+ }
701
+ return createProcedure(function (...args) {
702
+ if (!fn) {
703
+ throw ValidationError.required("handler", "Handler function required when options are provided");
704
+ }
705
+ return fn.apply(this, args);
706
+ });
707
+ }
708
+ // Implementation
709
+ export function createProcedure(optionsOrFn, fn) {
710
+ let options = {};
711
+ let handler;
712
+ if (typeof optionsOrFn === "function") {
713
+ handler = optionsOrFn;
714
+ options = { sourceType: "procedure" };
715
+ }
716
+ else if (optionsOrFn) {
717
+ options = { ...optionsOrFn, sourceType: "procedure" };
718
+ if (!fn) {
719
+ throw ValidationError.required("handler", "Handler function required when options are provided");
720
+ }
721
+ handler = fn;
722
+ }
723
+ else if (fn) {
724
+ handler = fn;
725
+ options = { sourceType: "procedure" };
726
+ }
727
+ if (!handler) {
728
+ throw ValidationError.required("handler");
729
+ }
730
+ return createProcedureFromImpl(options, handler);
731
+ }
732
+ export function pipe(...procedures) {
733
+ if (procedures.length === 0) {
734
+ throw new ValidationError("pipe requires at least one procedure", "procedures");
735
+ }
736
+ if (procedures.length === 1) {
737
+ return procedures[0];
738
+ }
739
+ // Chain all procedures together using the instance pipe method
740
+ let result = procedures[0];
741
+ for (let i = 1; i < procedures.length; i++) {
742
+ result = result.pipe(procedures[i]);
743
+ }
744
+ return result;
745
+ }
746
+ export function compose(...procedures) {
747
+ if (procedures.length === 0) {
748
+ throw new ValidationError("compose requires at least one procedure", "procedures");
749
+ }
750
+ if (procedures.length === 1) {
751
+ return procedures[0];
752
+ }
753
+ // Chain in reverse order: compose(a, b, c) = a(b(c(x)))
754
+ // Start from the end and work backwards
755
+ let result = procedures[procedures.length - 1];
756
+ for (let i = procedures.length - 2; i >= 0; i--) {
757
+ result = result.pipe(procedures[i]);
758
+ }
759
+ return result;
760
+ }
761
+ export function createHook(optionsOrFn, fn) {
762
+ let options = {};
763
+ let handler;
764
+ if (typeof optionsOrFn === "function") {
765
+ handler = optionsOrFn;
766
+ options = { sourceType: "hook" };
767
+ }
768
+ else if (optionsOrFn) {
769
+ options = { ...optionsOrFn, sourceType: "hook" };
770
+ if (!fn) {
771
+ throw ValidationError.required("handler", "Handler function required when options are provided");
772
+ }
773
+ handler = fn;
774
+ }
775
+ else if (fn) {
776
+ handler = fn;
777
+ options = { sourceType: "hook" };
778
+ }
779
+ if (!handler) {
780
+ throw ValidationError.required("handler");
781
+ }
782
+ return createProcedure(options, handler);
783
+ }
784
+ // ============================================================================
785
+ // ProcedureBase - Base class for auto-wrapping methods as Procedures
786
+ // ============================================================================
787
+ // ============================================================================
788
+ // Helper Functions
789
+ // ============================================================================
790
+ /**
791
+ * Type-safe helper to apply middleware to a Procedure while preserving types.
792
+ *
793
+ * This helper ensures that middleware types are correctly matched to the Procedure's
794
+ * argument types, avoiding the need for type assertions.
795
+ *
796
+ * @example
797
+ * ```typescript
798
+ * const proc = createProcedure({ name: 'test' }, async (input: string) => input);
799
+ * const middleware: Middleware<[string]>[] = [...];
800
+ * const procWithMw = applyMiddleware(proc, middleware);
801
+ * // procWithMw is still Procedure<[string], string> - types preserved!
802
+ * ```
803
+ */
804
+ export function applyMiddleware(procedure, ...middleware) {
805
+ return procedure.use(...middleware);
806
+ }
807
+ /**
808
+ * Type-safe helper to apply middleware from a registry/hook system.
809
+ *
810
+ * This is useful when middleware comes from hook registries where types might
811
+ * be unions or `Middleware<any[]>`. The helper ensures type safety by requiring
812
+ * the middleware to match the Procedure's argument types.
813
+ *
814
+ * @example
815
+ * ```typescript
816
+ * const proc = createProcedure({ name: 'test' }, async (input: string) => input);
817
+ * const registryMiddleware = registry.getMiddleware('test'); // Middleware<any[]>[]
818
+ * const procWithMw = applyRegistryMiddleware(proc, registryMiddleware);
819
+ * // Types are preserved and validated
820
+ * ```
821
+ */
822
+ export function applyRegistryMiddleware(procedure, ...middleware) {
823
+ // Type assertion is safe here because we're applying middleware that should
824
+ // be compatible with the Procedure's args. The runtime will validate.
825
+ // We accept Procedure<any, any> to handle cases where createEngineProcedure
826
+ // returns a generic Procedure type that needs to be narrowed.
827
+ return procedure.use(...middleware);
828
+ }
829
+ export function wrapProcedure(middleware) {
830
+ function wrapProcedureImpl(optionsOrFn, fn) {
831
+ let config;
832
+ let handler;
833
+ if (typeof optionsOrFn === "function") {
834
+ // Handler-only overload: createEngineProcedure(handler)
835
+ handler = optionsOrFn;
836
+ config = {
837
+ name: handler.name || "anonymous",
838
+ };
839
+ }
840
+ else if (optionsOrFn) {
841
+ // Config + handler overload: createEngineProcedure(config, handler)
842
+ config = { ...optionsOrFn };
843
+ if (!fn) {
844
+ throw ValidationError.required("handler", "Handler function required when options are provided");
845
+ }
846
+ handler = fn;
847
+ }
848
+ else if (fn) {
849
+ // Edge case: just handler as second param
850
+ handler = fn;
851
+ config = {
852
+ name: handler.name || "anonymous",
853
+ };
854
+ }
855
+ else {
856
+ throw ValidationError.required("handler");
857
+ }
858
+ // Merge middleware: engine defaults + global + config middleware
859
+ config.middleware = [...middleware, ...(config.middleware || [])];
860
+ return createProcedure(config, handler);
861
+ }
862
+ return wrapProcedureImpl;
863
+ }
864
+ export function wrapHook(middleware) {
865
+ function wrapHookImpl(optionsOrFn, fn) {
866
+ let config;
867
+ let handler;
868
+ if (typeof optionsOrFn === "function") {
869
+ // Handler-only overload: createEngineHook(handler)
870
+ handler = optionsOrFn;
871
+ config = {
872
+ name: handler.name || "anonymous",
873
+ };
874
+ }
875
+ else if (optionsOrFn) {
876
+ // Config + handler overload: createEngineHook(config, handler)
877
+ config = { ...optionsOrFn };
878
+ if (!fn) {
879
+ throw ValidationError.required("handler", "Handler function required when options are provided");
880
+ }
881
+ handler = fn;
882
+ }
883
+ else if (fn) {
884
+ // Edge case: just handler as second param
885
+ handler = fn;
886
+ config = {
887
+ name: handler.name || "anonymous",
888
+ };
889
+ }
890
+ else {
891
+ throw ValidationError.required("handler");
892
+ }
893
+ // Merge middleware: engine defaults + global + config middleware
894
+ config.middleware = [...middleware, ...(config.middleware || [])];
895
+ return createHook(config, handler);
896
+ }
897
+ return wrapHookImpl;
898
+ }
899
+ //# sourceMappingURL=procedure.js.map