@langchain/angular 0.4.7 → 1.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 (208) hide show
  1. package/README.md +79 -584
  2. package/dist/context.cjs +13 -11
  3. package/dist/context.cjs.map +1 -1
  4. package/dist/context.d.cts +7 -76
  5. package/dist/context.d.cts.map +1 -1
  6. package/dist/context.d.ts +7 -76
  7. package/dist/context.d.ts.map +1 -1
  8. package/dist/context.js +13 -11
  9. package/dist/context.js.map +1 -1
  10. package/dist/index.cjs +33 -149
  11. package/dist/index.d.cts +11 -329
  12. package/dist/index.d.ts +11 -329
  13. package/dist/index.js +11 -114
  14. package/dist/inject-media-url.cjs +54 -0
  15. package/dist/inject-media-url.cjs.map +1 -0
  16. package/dist/inject-media-url.d.cts +34 -0
  17. package/dist/inject-media-url.d.cts.map +1 -0
  18. package/dist/inject-media-url.d.ts +34 -0
  19. package/dist/inject-media-url.d.ts.map +1 -0
  20. package/dist/inject-media-url.js +54 -0
  21. package/dist/inject-media-url.js.map +1 -0
  22. package/dist/inject-projection.cjs +74 -0
  23. package/dist/inject-projection.cjs.map +1 -0
  24. package/dist/inject-projection.d.cts +34 -0
  25. package/dist/inject-projection.d.cts.map +1 -0
  26. package/dist/inject-projection.d.ts +34 -0
  27. package/dist/inject-projection.d.ts.map +1 -0
  28. package/dist/inject-projection.js +74 -0
  29. package/dist/inject-projection.js.map +1 -0
  30. package/dist/inject-stream.cjs +27 -0
  31. package/dist/inject-stream.cjs.map +1 -0
  32. package/dist/inject-stream.d.cts +31 -0
  33. package/dist/inject-stream.d.cts.map +1 -0
  34. package/dist/inject-stream.d.ts +31 -0
  35. package/dist/inject-stream.d.ts.map +1 -0
  36. package/dist/inject-stream.js +27 -0
  37. package/dist/inject-stream.js.map +1 -0
  38. package/dist/selectors-metadata.cjs +39 -0
  39. package/dist/selectors-metadata.cjs.map +1 -0
  40. package/dist/selectors-metadata.d.cts +28 -0
  41. package/dist/selectors-metadata.d.cts.map +1 -0
  42. package/dist/selectors-metadata.d.ts +28 -0
  43. package/dist/selectors-metadata.d.ts.map +1 -0
  44. package/dist/selectors-metadata.js +39 -0
  45. package/dist/selectors-metadata.js.map +1 -0
  46. package/dist/selectors-queue.cjs +21 -0
  47. package/dist/selectors-queue.cjs.map +1 -0
  48. package/dist/selectors-queue.d.cts +36 -0
  49. package/dist/selectors-queue.d.cts.map +1 -0
  50. package/dist/selectors-queue.d.ts +36 -0
  51. package/dist/selectors-queue.d.ts.map +1 -0
  52. package/dist/selectors-queue.js +21 -0
  53. package/dist/selectors-queue.js.map +1 -0
  54. package/dist/selectors.cjs +144 -0
  55. package/dist/selectors.cjs.map +1 -0
  56. package/dist/selectors.d.cts +111 -0
  57. package/dist/selectors.d.cts.map +1 -0
  58. package/dist/selectors.d.ts +111 -0
  59. package/dist/selectors.d.ts.map +1 -0
  60. package/dist/selectors.js +136 -0
  61. package/dist/selectors.js.map +1 -0
  62. package/dist/stream-service.cjs +84 -0
  63. package/dist/stream-service.cjs.map +1 -0
  64. package/dist/stream-service.d.cts +67 -0
  65. package/dist/stream-service.d.cts.map +1 -0
  66. package/dist/stream-service.d.ts +67 -0
  67. package/dist/stream-service.d.ts.map +1 -0
  68. package/dist/stream-service.js +79 -0
  69. package/dist/stream-service.js.map +1 -0
  70. package/dist/use-stream.cjs +155 -0
  71. package/dist/use-stream.cjs.map +1 -0
  72. package/dist/use-stream.d.cts +97 -0
  73. package/dist/use-stream.d.cts.map +1 -0
  74. package/dist/use-stream.d.ts +97 -0
  75. package/dist/use-stream.d.ts.map +1 -0
  76. package/dist/use-stream.js +153 -0
  77. package/dist/use-stream.js.map +1 -0
  78. package/package.json +26 -25
  79. package/dist/index.cjs.map +0 -1
  80. package/dist/index.d.cts.map +0 -1
  81. package/dist/index.d.ts.map +0 -1
  82. package/dist/index.js.map +0 -1
  83. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/channels/base.d.cts +0 -83
  84. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/channels/base.d.cts.map +0 -1
  85. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/channels/base.d.ts +0 -83
  86. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/channels/base.d.ts.map +0 -1
  87. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/constants.d.cts +0 -42
  88. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/constants.d.cts.map +0 -1
  89. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/constants.d.ts +0 -42
  90. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/constants.d.ts.map +0 -1
  91. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/graph/zod/index.d.cts +0 -2
  92. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/graph/zod/index.d.ts +0 -2
  93. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/graph/zod/meta.d.cts +0 -109
  94. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/graph/zod/meta.d.cts.map +0 -1
  95. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/graph/zod/meta.d.ts +0 -109
  96. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/graph/zod/meta.d.ts.map +0 -1
  97. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/graph/zod/zod-registry.d.cts +0 -49
  98. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/graph/zod/zod-registry.d.cts.map +0 -1
  99. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/graph/zod/zod-registry.d.ts +0 -49
  100. package/dist/node_modules/.pnpm/@langchain_langgraph@1.2.6_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33._a807b9e815d3fdb40e51117306822e31/node_modules/@langchain/langgraph/dist/graph/zod/zod-registry.d.ts.map +0 -1
  101. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/ReactAgent.d.cts +0 -1
  102. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/ReactAgent.d.ts +0 -1
  103. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/index.d.cts +0 -1
  104. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/index.d.ts +0 -1
  105. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/contextEditing.d.cts +0 -1
  106. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/contextEditing.d.ts +0 -1
  107. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/dynamicSystemPrompt.d.cts +0 -1
  108. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/dynamicSystemPrompt.d.ts +0 -1
  109. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/hitl.d.cts +0 -1
  110. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/hitl.d.ts +0 -1
  111. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/llmToolSelector.d.cts +0 -1
  112. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/llmToolSelector.d.ts +0 -1
  113. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/modelCallLimit.d.cts +0 -1
  114. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/modelCallLimit.d.ts +0 -1
  115. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/modelFallback.d.cts +0 -1
  116. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/modelFallback.d.ts +0 -1
  117. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/modelRetry.d.cts +0 -1
  118. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/modelRetry.d.ts +0 -1
  119. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/pii.d.cts +0 -1
  120. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/pii.d.ts +0 -1
  121. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/piiRedaction.d.cts +0 -1
  122. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/piiRedaction.d.ts +0 -1
  123. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/provider/anthropic/promptCaching.d.cts +0 -1
  124. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/provider/anthropic/promptCaching.d.ts +0 -1
  125. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/provider/openai/moderation.d.cts +0 -1
  126. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/provider/openai/moderation.d.ts +0 -1
  127. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/summarization.d.cts +0 -1
  128. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/summarization.d.ts +0 -1
  129. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/todoListMiddleware.d.cts +0 -1
  130. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/todoListMiddleware.d.ts +0 -1
  131. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/toolCallLimit.d.cts +0 -1
  132. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/toolCallLimit.d.ts +0 -1
  133. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/toolEmulator.d.cts +0 -1
  134. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/toolEmulator.d.ts +0 -1
  135. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/toolRetry.d.cts +0 -1
  136. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/toolRetry.d.ts +0 -1
  137. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/types.d.cts +0 -2
  138. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware/types.d.ts +0 -2
  139. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware.d.cts +0 -1
  140. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/middleware.d.ts +0 -1
  141. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/types.d.cts +0 -2
  142. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/agents/types.d.ts +0 -2
  143. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/index.d.cts +0 -2
  144. package/dist/node_modules/.pnpm/langchain@1.3.0_@langchain_core@1.1.40_@opentelemetry_api@1.9.0_openai@6.33.0_ws@8.19.0_41511a57baf32de01f36b804226da973/node_modules/langchain/dist/index.d.ts +0 -2
  145. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.d.cts +0 -29
  146. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.d.cts.map +0 -1
  147. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.d.ts +0 -29
  148. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.d.ts.map +0 -1
  149. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.d.cts +0 -29
  150. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.d.cts.map +0 -1
  151. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.d.ts +0 -29
  152. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.d.ts.map +0 -1
  153. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.d.cts +0 -105
  154. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.d.cts.map +0 -1
  155. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.d.ts +0 -105
  156. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.d.ts.map +0 -1
  157. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema.d.cts +0 -70
  158. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema.d.cts.map +0 -1
  159. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema.d.ts +0 -70
  160. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema.d.ts.map +0 -1
  161. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.d.cts +0 -24
  162. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.d.cts.map +0 -1
  163. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.d.ts +0 -24
  164. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.d.ts.map +0 -1
  165. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.d.cts +0 -97
  166. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.d.cts.map +0 -1
  167. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.d.ts +0 -97
  168. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.d.ts.map +0 -1
  169. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/standard-schema.d.cts +0 -79
  170. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/standard-schema.d.cts.map +0 -1
  171. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/standard-schema.d.ts +0 -79
  172. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/standard-schema.d.ts.map +0 -1
  173. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.d.cts +0 -52
  174. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.d.cts.map +0 -1
  175. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.d.ts +0 -52
  176. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.d.ts.map +0 -1
  177. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.d.cts +0 -17
  178. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.d.cts.map +0 -1
  179. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.d.ts +0 -17
  180. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.d.ts.map +0 -1
  181. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.d.cts +0 -9
  182. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.d.cts.map +0 -1
  183. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.d.ts +0 -9
  184. package/dist/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.d.ts.map +0 -1
  185. package/dist/stream-service-instance.d.cts +0 -70
  186. package/dist/stream-service-instance.d.cts.map +0 -1
  187. package/dist/stream-service-instance.d.ts +0 -70
  188. package/dist/stream-service-instance.d.ts.map +0 -1
  189. package/dist/stream.custom.cjs +0 -117
  190. package/dist/stream.custom.cjs.map +0 -1
  191. package/dist/stream.custom.d.cts +0 -45
  192. package/dist/stream.custom.d.cts.map +0 -1
  193. package/dist/stream.custom.d.ts +0 -45
  194. package/dist/stream.custom.d.ts.map +0 -1
  195. package/dist/stream.custom.js +0 -116
  196. package/dist/stream.custom.js.map +0 -1
  197. package/dist/stream.lgp.cjs +0 -174
  198. package/dist/stream.lgp.cjs.map +0 -1
  199. package/dist/stream.lgp.d.cts +0 -57
  200. package/dist/stream.lgp.d.cts.map +0 -1
  201. package/dist/stream.lgp.d.ts +0 -57
  202. package/dist/stream.lgp.d.ts.map +0 -1
  203. package/dist/stream.lgp.js +0 -174
  204. package/dist/stream.lgp.js.map +0 -1
  205. package/dist/subagents.cjs +0 -76
  206. package/dist/subagents.cjs.map +0 -1
  207. package/dist/subagents.js +0 -76
  208. package/dist/subagents.js.map +0 -1
@@ -0,0 +1,136 @@
1
+ import { getRegistry } from "./use-stream.js";
2
+ import { injectProjection } from "./inject-projection.js";
3
+ import { computed, isSignal } from "@angular/core";
4
+ import { NAMESPACE_SEPARATOR, audioProjection, channelProjection, extensionProjection, filesProjection, imagesProjection, messagesProjection, toolCallsProjection, valuesProjection, videoProjection } from "@langchain/langgraph-sdk/stream";
5
+ //#region src/selectors.ts
6
+ const EMPTY_NAMESPACE = [];
7
+ function resolveNamespace(target) {
8
+ if (target == null) return EMPTY_NAMESPACE;
9
+ if (Array.isArray(target)) return target;
10
+ return target.namespace ?? EMPTY_NAMESPACE;
11
+ }
12
+ function isRoot(namespace) {
13
+ return namespace.length === 0;
14
+ }
15
+ function namespaceKey(namespace) {
16
+ return namespace.join(NAMESPACE_SEPARATOR);
17
+ }
18
+ /**
19
+ * Resolve a target or target-signal into a reactive
20
+ * `[namespace, key]` pair. The helper returns plain signals so
21
+ * `injectProjection` can track them via its internal effect.
22
+ */
23
+ function normalizeTarget(target, prefix) {
24
+ if (isSignal(target)) {
25
+ const namespace = computed(() => resolveNamespace(target()));
26
+ return {
27
+ namespace,
28
+ key: computed(() => `${prefix}|${namespaceKey(namespace())}`),
29
+ isRootSignal: computed(() => isRoot(namespace()))
30
+ };
31
+ }
32
+ const ns = resolveNamespace(target);
33
+ const staticKey = `${prefix}|${namespaceKey(ns)}`;
34
+ return {
35
+ namespace: computed(() => ns),
36
+ key: computed(() => staticKey),
37
+ isRootSignal: computed(() => isRoot(ns))
38
+ };
39
+ }
40
+ /**
41
+ * Subscribe to a scoped `messages` stream.
42
+ *
43
+ * Contract:
44
+ * - At the root (no `target`) this returns `stream.messages` — the
45
+ * always-on root projection; no extra subscription is opened.
46
+ * - For any non-root namespace, call-time triggers a ref-counted
47
+ * `messages` subscription scoped to that namespace. The
48
+ * subscription is released automatically when the calling
49
+ * component / service is destroyed (and the registry closes the
50
+ * underlying server subscription when the last consumer leaves).
51
+ *
52
+ * Messages are always `BaseMessage` class instances from
53
+ * `@langchain/core/messages`.
54
+ */
55
+ function injectMessages(stream, target) {
56
+ const { namespace, key, isRootSignal } = normalizeTarget(target, "messages");
57
+ const scoped = injectProjection(computed(() => isRootSignal() ? null : getRegistry(stream)), () => messagesProjection(namespace()), key, EMPTY_MESSAGES);
58
+ return computed(() => isRootSignal() ? stream.messages() : scoped());
59
+ }
60
+ const EMPTY_MESSAGES = [];
61
+ /**
62
+ * Subscribe to a scoped `tools` (tool-call) stream. Same target and
63
+ * lifecycle rules as {@link injectMessages}; at the root this returns
64
+ * `stream.toolCalls` directly.
65
+ */
66
+ function injectToolCalls(stream, target) {
67
+ const { namespace, key, isRootSignal } = normalizeTarget(target, "toolCalls");
68
+ const scoped = injectProjection(computed(() => isRootSignal() ? null : getRegistry(stream)), () => toolCallsProjection(namespace()), key, EMPTY_TOOLCALLS);
69
+ return computed(() => isRootSignal() ? stream.toolCalls() : scoped());
70
+ }
71
+ const EMPTY_TOOLCALLS = [];
72
+ function injectValues(stream, target, options) {
73
+ const messagesKey = options?.messagesKey ?? "messages";
74
+ const { namespace, key, isRootSignal } = normalizeTarget(target, `values|${messagesKey}`);
75
+ const scoped = injectProjection(computed(() => isRootSignal() ? null : getRegistry(stream)), () => valuesProjection(namespace(), messagesKey), key, void 0);
76
+ return computed(() => isRootSignal() ? stream.values() : scoped());
77
+ }
78
+ /**
79
+ * Subscribe to a `custom:<name>` stream extension — the most recent
80
+ * payload emitted by the transformer, scoped to the target namespace.
81
+ */
82
+ function injectExtension(stream, name, target) {
83
+ const { namespace, key } = normalizeTarget(target, `extension|${name}`);
84
+ return injectProjection(getRegistry(stream), () => extensionProjection(name, namespace()), key, void 0);
85
+ }
86
+ function injectChannel(stream, channels, target, options) {
87
+ const sortedChannels = [...channels].sort().join(",");
88
+ const { namespace, key } = normalizeTarget(target, `channel|${options?.bufferSize ?? "default"}|${options?.replay ?? true ? "replay" : "live"}|${sortedChannels}`);
89
+ return injectProjection(getRegistry(stream), () => channelProjection(channels, namespace(), options), key, EMPTY_EVENTS);
90
+ }
91
+ const EMPTY_EVENTS = [];
92
+ /**
93
+ * Subscribe to a scoped audio-media stream. Each handle is yielded
94
+ * on its first matching `content-block-start`, exposes
95
+ * `.partialBytes` for live access, settles `.blob` / `.objectURL` /
96
+ * `.transcript` on `message-finish`, and surfaces errors via
97
+ * `.error`.
98
+ *
99
+ * Pair with `injectMediaUrl` to turn a handle into an `<audio src>`.
100
+ */
101
+ function injectAudio(stream, target) {
102
+ const { namespace, key } = normalizeTarget(target, "audio");
103
+ return injectProjection(getRegistry(stream), () => audioProjection(namespace()), key, EMPTY_AUDIO);
104
+ }
105
+ const EMPTY_AUDIO = [];
106
+ /**
107
+ * Subscribe to a scoped image-media stream. Pair with
108
+ * `injectMediaUrl` for `<img src>`.
109
+ */
110
+ function injectImages(stream, target) {
111
+ const { namespace, key } = normalizeTarget(target, "images");
112
+ return injectProjection(getRegistry(stream), () => imagesProjection(namespace()), key, EMPTY_IMAGES);
113
+ }
114
+ const EMPTY_IMAGES = [];
115
+ /**
116
+ * Subscribe to a scoped video-media stream. Pair with
117
+ * `injectMediaUrl` for `<video src>`.
118
+ */
119
+ function injectVideo(stream, target) {
120
+ const { namespace, key } = normalizeTarget(target, "video");
121
+ return injectProjection(getRegistry(stream), () => videoProjection(namespace()), key, EMPTY_VIDEO);
122
+ }
123
+ const EMPTY_VIDEO = [];
124
+ /**
125
+ * Subscribe to a scoped file-media stream. Pair with
126
+ * `injectMediaUrl` for an `<a download href>` target.
127
+ */
128
+ function injectFiles(stream, target) {
129
+ const { namespace, key } = normalizeTarget(target, "files");
130
+ return injectProjection(getRegistry(stream), () => filesProjection(namespace()), key, EMPTY_FILES);
131
+ }
132
+ const EMPTY_FILES = [];
133
+ //#endregion
134
+ export { injectAudio, injectChannel, injectExtension, injectFiles, injectImages, injectMessages, injectToolCalls, injectValues, injectVideo };
135
+
136
+ //# sourceMappingURL=selectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectors.js","names":[],"sources":["../src/selectors.ts"],"sourcesContent":["import { computed, isSignal, type Signal } from \"@angular/core\";\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport {\n NAMESPACE_SEPARATOR,\n audioProjection,\n channelProjection,\n extensionProjection,\n filesProjection,\n imagesProjection,\n messagesProjection,\n toolCallsProjection,\n valuesProjection,\n videoProjection,\n type AssembledToolCall,\n type AudioMedia,\n type Channel,\n type ChannelProjectionOptions,\n type Event,\n type FileMedia,\n type ImageMedia,\n type InferStateType,\n type SubagentDiscoverySnapshot,\n type SubgraphDiscoverySnapshot,\n type VideoMedia,\n} from \"@langchain/langgraph-sdk/stream\";\nimport {\n getRegistry,\n type AnyStream,\n type UseStreamReturn,\n} from \"./use-stream.js\";\nimport { injectProjection } from \"./inject-projection.js\";\n\n/**\n * Selector primitives don't need to carry `InterruptType` /\n * `ConfigurableType`. Parameterising on `StateType` alone lets\n * callers with a full `injectStream<S, I, C>()` handle pass it in\n * without redeclaring those generics at every call site.\n */\ntype StreamHandle<StateType extends object> = UseStreamReturn<\n StateType,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any\n>;\n\n/**\n * What a selector primitive can be targeted at. Callers can pass:\n * - `undefined` / `null` — root namespace (served by the always-on\n * root store — no extra subscription);\n * - a {@link SubagentDiscoverySnapshot} (`stream.subagents().get(...)`);\n * - a {@link SubgraphDiscoverySnapshot} (`stream.subgraphs().get(...)`);\n * - an explicit `{ namespace: string[] }`;\n * - a raw `string[]` escape hatch.\n *\n * Selectors also accept a `Signal<SelectorTarget>` so callers can\n * feed a `computed(() => ...)` and have the projection rebind\n * automatically.\n */\nexport type SelectorTarget =\n | undefined\n | null\n | readonly string[]\n | { namespace: readonly string[] }\n | SubagentDiscoverySnapshot\n | SubgraphDiscoverySnapshot;\n\nconst EMPTY_NAMESPACE: readonly string[] = [];\n\nfunction resolveNamespace(target: SelectorTarget): readonly string[] {\n if (target == null) return EMPTY_NAMESPACE;\n if (Array.isArray(target)) return target as readonly string[];\n const obj = target as { namespace?: readonly string[] };\n return obj.namespace ?? EMPTY_NAMESPACE;\n}\n\nfunction isRoot(namespace: readonly string[]): boolean {\n return namespace.length === 0;\n}\n\nfunction namespaceKey(namespace: readonly string[]): string {\n return namespace.join(NAMESPACE_SEPARATOR);\n}\n\n/**\n * Resolve a target or target-signal into a reactive\n * `[namespace, key]` pair. The helper returns plain signals so\n * `injectProjection` can track them via its internal effect.\n */\nfunction normalizeTarget(\n target: SelectorTarget | Signal<SelectorTarget>,\n prefix: string\n): {\n namespace: Signal<readonly string[]>;\n key: Signal<string>;\n isRootSignal: Signal<boolean>;\n} {\n if (isSignal(target)) {\n const namespace = computed(() =>\n resolveNamespace((target as Signal<SelectorTarget>)())\n );\n const key = computed(() => `${prefix}|${namespaceKey(namespace())}`);\n const isRootSignal = computed(() => isRoot(namespace()));\n return { namespace, key, isRootSignal };\n }\n const ns = resolveNamespace(target as SelectorTarget);\n const staticKey = `${prefix}|${namespaceKey(ns)}`;\n return {\n namespace: computed(() => ns),\n key: computed(() => staticKey),\n isRootSignal: computed(() => isRoot(ns)),\n };\n}\n\n/**\n * Subscribe to a scoped `messages` stream.\n *\n * Contract:\n * - At the root (no `target`) this returns `stream.messages` — the\n * always-on root projection; no extra subscription is opened.\n * - For any non-root namespace, call-time triggers a ref-counted\n * `messages` subscription scoped to that namespace. The\n * subscription is released automatically when the calling\n * component / service is destroyed (and the registry closes the\n * underlying server subscription when the last consumer leaves).\n *\n * Messages are always `BaseMessage` class instances from\n * `@langchain/core/messages`.\n */\nexport function injectMessages(\n stream: AnyStream,\n target?: SelectorTarget | Signal<SelectorTarget>\n): Signal<BaseMessage[]> {\n const { namespace, key, isRootSignal } = normalizeTarget(\n target as SelectorTarget | Signal<SelectorTarget>,\n \"messages\"\n );\n const registry = computed(() =>\n isRootSignal() ? null : getRegistry(stream)\n );\n const scoped = injectProjection<BaseMessage[]>(\n registry,\n () => messagesProjection(namespace()),\n key,\n EMPTY_MESSAGES\n );\n return computed(() => (isRootSignal() ? stream.messages() : scoped()));\n}\n\nconst EMPTY_MESSAGES: BaseMessage[] = [];\n\n/**\n * Subscribe to a scoped `tools` (tool-call) stream. Same target and\n * lifecycle rules as {@link injectMessages}; at the root this returns\n * `stream.toolCalls` directly.\n */\nexport function injectToolCalls(\n stream: AnyStream,\n target?: SelectorTarget | Signal<SelectorTarget>\n): Signal<AssembledToolCall[]> {\n const { namespace, key, isRootSignal } = normalizeTarget(\n target as SelectorTarget | Signal<SelectorTarget>,\n \"toolCalls\"\n );\n const registry = computed(() =>\n isRootSignal() ? null : getRegistry(stream)\n );\n const scoped = injectProjection<AssembledToolCall[]>(\n registry,\n () => toolCallsProjection(namespace()),\n key,\n EMPTY_TOOLCALLS\n );\n return computed(() => (isRootSignal() ? stream.toolCalls() : scoped()));\n}\n\nconst EMPTY_TOOLCALLS: AssembledToolCall[] = [];\n\n/**\n * Subscribe to a scoped `values` stream — the most recent state\n * payload for a namespace. At the root returns `stream.values`.\n *\n * Typing:\n * - **Root** (`injectValues(stream)`): returns the `StateType`\n * declared on `injectStream<State>()` — non-nullable (the root\n * snapshot always has values, falling back to `initialValues ??\n * {}`).\n * - **Scoped** (`injectValues(stream, target)`): scoped payloads can\n * differ from the root state; callers should annotate the expected\n * shape explicitly (`injectValues<SubagentState>(stream, sub)`).\n * Defaults to `unknown` when not annotated.\n */\nexport function injectValues<StateType extends object>(\n stream: StreamHandle<StateType>\n): Signal<StateType>;\nexport function injectValues<T>(stream: AnyStream): Signal<InferStateType<T>>;\nexport function injectValues<T = unknown>(\n stream: AnyStream,\n target: SelectorTarget | Signal<SelectorTarget>,\n options?: { messagesKey?: string }\n): Signal<T | undefined>;\nexport function injectValues(\n stream: AnyStream,\n target?: SelectorTarget | Signal<SelectorTarget>,\n options?: { messagesKey?: string }\n): Signal<unknown> {\n const messagesKey = options?.messagesKey ?? \"messages\";\n const { namespace, key, isRootSignal } = normalizeTarget(\n target as SelectorTarget | Signal<SelectorTarget>,\n `values|${messagesKey}`\n );\n const registry = computed(() =>\n isRootSignal() ? null : getRegistry(stream)\n );\n const scoped = injectProjection<unknown>(\n registry,\n () => valuesProjection<unknown>(namespace(), messagesKey),\n key,\n undefined\n );\n return computed(() => (isRootSignal() ? stream.values() : scoped()));\n}\n\n/**\n * Subscribe to a `custom:<name>` stream extension — the most recent\n * payload emitted by the transformer, scoped to the target namespace.\n */\nexport function injectExtension<T = unknown>(\n stream: AnyStream,\n name: string,\n target?: SelectorTarget | Signal<SelectorTarget>\n): Signal<T | undefined> {\n const { namespace, key } = normalizeTarget(\n target as SelectorTarget | Signal<SelectorTarget>,\n `extension|${name}`\n );\n return injectProjection<T | undefined>(\n getRegistry(stream),\n () => extensionProjection<T>(name, namespace()),\n key,\n undefined\n );\n}\n\n/**\n * Raw-events escape hatch. Subscribes to one or more channels at a\n * namespace and returns a bounded buffer of raw protocol events.\n * Prefer {@link injectMessages} / {@link injectToolCalls} /\n * {@link injectValues} for the common cases.\n */\nexport type InjectChannelOptions = ChannelProjectionOptions;\n\nexport function injectChannel(\n stream: AnyStream,\n channels: readonly Channel[],\n target?: SelectorTarget | Signal<SelectorTarget>,\n options?: InjectChannelOptions\n): Signal<Event[]> {\n const sortedChannels = [...channels].sort().join(\",\");\n const prefix = `channel|${options?.bufferSize ?? \"default\"}|${(options?.replay ?? true) ? \"replay\" : \"live\"}|${sortedChannels}`;\n const { namespace, key } = normalizeTarget(\n target as SelectorTarget | Signal<SelectorTarget>,\n prefix\n );\n return injectProjection<Event[]>(\n getRegistry(stream),\n () => channelProjection(channels, namespace(), options),\n key,\n EMPTY_EVENTS\n );\n}\n\nconst EMPTY_EVENTS: Event[] = [];\n\n/**\n * Subscribe to a scoped audio-media stream. Each handle is yielded\n * on its first matching `content-block-start`, exposes\n * `.partialBytes` for live access, settles `.blob` / `.objectURL` /\n * `.transcript` on `message-finish`, and surfaces errors via\n * `.error`.\n *\n * Pair with `injectMediaUrl` to turn a handle into an `<audio src>`.\n */\nexport function injectAudio(\n stream: AnyStream,\n target?: SelectorTarget | Signal<SelectorTarget>\n): Signal<AudioMedia[]> {\n const { namespace, key } = normalizeTarget(\n target as SelectorTarget | Signal<SelectorTarget>,\n \"audio\"\n );\n return injectProjection<AudioMedia[]>(\n getRegistry(stream),\n () => audioProjection(namespace()),\n key,\n EMPTY_AUDIO\n );\n}\n\nconst EMPTY_AUDIO: AudioMedia[] = [];\n\n/**\n * Subscribe to a scoped image-media stream. Pair with\n * `injectMediaUrl` for `<img src>`.\n */\nexport function injectImages(\n stream: AnyStream,\n target?: SelectorTarget | Signal<SelectorTarget>\n): Signal<ImageMedia[]> {\n const { namespace, key } = normalizeTarget(\n target as SelectorTarget | Signal<SelectorTarget>,\n \"images\"\n );\n return injectProjection<ImageMedia[]>(\n getRegistry(stream),\n () => imagesProjection(namespace()),\n key,\n EMPTY_IMAGES\n );\n}\n\nconst EMPTY_IMAGES: ImageMedia[] = [];\n\n/**\n * Subscribe to a scoped video-media stream. Pair with\n * `injectMediaUrl` for `<video src>`.\n */\nexport function injectVideo(\n stream: AnyStream,\n target?: SelectorTarget | Signal<SelectorTarget>\n): Signal<VideoMedia[]> {\n const { namespace, key } = normalizeTarget(\n target as SelectorTarget | Signal<SelectorTarget>,\n \"video\"\n );\n return injectProjection<VideoMedia[]>(\n getRegistry(stream),\n () => videoProjection(namespace()),\n key,\n EMPTY_VIDEO\n );\n}\n\nconst EMPTY_VIDEO: VideoMedia[] = [];\n\n/**\n * Subscribe to a scoped file-media stream. Pair with\n * `injectMediaUrl` for an `<a download href>` target.\n */\nexport function injectFiles(\n stream: AnyStream,\n target?: SelectorTarget | Signal<SelectorTarget>\n): Signal<FileMedia[]> {\n const { namespace, key } = normalizeTarget(\n target as SelectorTarget | Signal<SelectorTarget>,\n \"files\"\n );\n return injectProjection<FileMedia[]>(\n getRegistry(stream),\n () => filesProjection(namespace()),\n key,\n EMPTY_FILES\n );\n}\n\nconst EMPTY_FILES: FileMedia[] = [];\n"],"mappings":";;;;;AAmEA,MAAM,kBAAqC,EAAE;AAE7C,SAAS,iBAAiB,QAA2C;AACnE,KAAI,UAAU,KAAM,QAAO;AAC3B,KAAI,MAAM,QAAQ,OAAO,CAAE,QAAO;AAElC,QADY,OACD,aAAa;;AAG1B,SAAS,OAAO,WAAuC;AACrD,QAAO,UAAU,WAAW;;AAG9B,SAAS,aAAa,WAAsC;AAC1D,QAAO,UAAU,KAAK,oBAAoB;;;;;;;AAQ5C,SAAS,gBACP,QACA,QAKA;AACA,KAAI,SAAS,OAAO,EAAE;EACpB,MAAM,YAAY,eAChB,iBAAkB,QAAmC,CAAC,CACvD;AAGD,SAAO;GAAE;GAAW,KAFR,eAAe,GAAG,OAAO,GAAG,aAAa,WAAW,CAAC,GAAG;GAE3C,cADJ,eAAe,OAAO,WAAW,CAAC,CAAC;GACjB;;CAEzC,MAAM,KAAK,iBAAiB,OAAyB;CACrD,MAAM,YAAY,GAAG,OAAO,GAAG,aAAa,GAAG;AAC/C,QAAO;EACL,WAAW,eAAe,GAAG;EAC7B,KAAK,eAAe,UAAU;EAC9B,cAAc,eAAe,OAAO,GAAG,CAAC;EACzC;;;;;;;;;;;;;;;;;AAkBH,SAAgB,eACd,QACA,QACuB;CACvB,MAAM,EAAE,WAAW,KAAK,iBAAiB,gBACvC,QACA,WACD;CAID,MAAM,SAAS,iBAHE,eACf,cAAc,GAAG,OAAO,YAAY,OAAO,CAC5C,QAGO,mBAAmB,WAAW,CAAC,EACrC,KACA,eACD;AACD,QAAO,eAAgB,cAAc,GAAG,OAAO,UAAU,GAAG,QAAQ,CAAE;;AAGxE,MAAM,iBAAgC,EAAE;;;;;;AAOxC,SAAgB,gBACd,QACA,QAC6B;CAC7B,MAAM,EAAE,WAAW,KAAK,iBAAiB,gBACvC,QACA,YACD;CAID,MAAM,SAAS,iBAHE,eACf,cAAc,GAAG,OAAO,YAAY,OAAO,CAC5C,QAGO,oBAAoB,WAAW,CAAC,EACtC,KACA,gBACD;AACD,QAAO,eAAgB,cAAc,GAAG,OAAO,WAAW,GAAG,QAAQ,CAAE;;AAGzE,MAAM,kBAAuC,EAAE;AAyB/C,SAAgB,aACd,QACA,QACA,SACiB;CACjB,MAAM,cAAc,SAAS,eAAe;CAC5C,MAAM,EAAE,WAAW,KAAK,iBAAiB,gBACvC,QACA,UAAU,cACX;CAID,MAAM,SAAS,iBAHE,eACf,cAAc,GAAG,OAAO,YAAY,OAAO,CAC5C,QAGO,iBAA0B,WAAW,EAAE,YAAY,EACzD,KACA,KAAA,EACD;AACD,QAAO,eAAgB,cAAc,GAAG,OAAO,QAAQ,GAAG,QAAQ,CAAE;;;;;;AAOtE,SAAgB,gBACd,QACA,MACA,QACuB;CACvB,MAAM,EAAE,WAAW,QAAQ,gBACzB,QACA,aAAa,OACd;AACD,QAAO,iBACL,YAAY,OAAO,QACb,oBAAuB,MAAM,WAAW,CAAC,EAC/C,KACA,KAAA,EACD;;AAWH,SAAgB,cACd,QACA,UACA,QACA,SACiB;CACjB,MAAM,iBAAiB,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI;CAErD,MAAM,EAAE,WAAW,QAAQ,gBACzB,QAFa,WAAW,SAAS,cAAc,UAAU,GAAI,SAAS,UAAU,OAAQ,WAAW,OAAO,GAAG,iBAI9G;AACD,QAAO,iBACL,YAAY,OAAO,QACb,kBAAkB,UAAU,WAAW,EAAE,QAAQ,EACvD,KACA,aACD;;AAGH,MAAM,eAAwB,EAAE;;;;;;;;;;AAWhC,SAAgB,YACd,QACA,QACsB;CACtB,MAAM,EAAE,WAAW,QAAQ,gBACzB,QACA,QACD;AACD,QAAO,iBACL,YAAY,OAAO,QACb,gBAAgB,WAAW,CAAC,EAClC,KACA,YACD;;AAGH,MAAM,cAA4B,EAAE;;;;;AAMpC,SAAgB,aACd,QACA,QACsB;CACtB,MAAM,EAAE,WAAW,QAAQ,gBACzB,QACA,SACD;AACD,QAAO,iBACL,YAAY,OAAO,QACb,iBAAiB,WAAW,CAAC,EACnC,KACA,aACD;;AAGH,MAAM,eAA6B,EAAE;;;;;AAMrC,SAAgB,YACd,QACA,QACsB;CACtB,MAAM,EAAE,WAAW,QAAQ,gBACzB,QACA,QACD;AACD,QAAO,iBACL,YAAY,OAAO,QACb,gBAAgB,WAAW,CAAC,EAClC,KACA,YACD;;AAGH,MAAM,cAA4B,EAAE;;;;;AAMpC,SAAgB,YACd,QACA,QACqB;CACrB,MAAM,EAAE,WAAW,QAAQ,gBACzB,QACA,QACD;AACD,QAAO,iBACL,YAAY,OAAO,QACb,gBAAgB,WAAW,CAAC,EAClC,KACA,YACD;;AAGH,MAAM,cAA2B,EAAE"}
@@ -0,0 +1,84 @@
1
+ const require_use_stream = require("./use-stream.cjs");
2
+ const require_decorate = require("./_virtual/_@oxc-project_runtime@0.115.0/helpers/decorate.cjs");
3
+ let _angular_core = require("@angular/core");
4
+ //#region src/stream-service.ts
5
+ let StreamService = class StreamService {
6
+ /** Underlying `StreamApi` returned by {@link useStream}. */
7
+ stream;
8
+ constructor(options) {
9
+ const injector = (0, _angular_core.inject)(_angular_core.EnvironmentInjector);
10
+ const destroyRef = (0, _angular_core.inject)(_angular_core.DestroyRef);
11
+ this.stream = (0, _angular_core.runInInjectionContext)(injector, () => require_use_stream.useStream(options, destroyRef));
12
+ }
13
+ get values() {
14
+ return this.stream.values;
15
+ }
16
+ get messages() {
17
+ return this.stream.messages;
18
+ }
19
+ get toolCalls() {
20
+ return this.stream.toolCalls;
21
+ }
22
+ get interrupts() {
23
+ return this.stream.interrupts;
24
+ }
25
+ get interrupt() {
26
+ return this.stream.interrupt;
27
+ }
28
+ get isLoading() {
29
+ return this.stream.isLoading;
30
+ }
31
+ get isThreadLoading() {
32
+ return this.stream.isThreadLoading;
33
+ }
34
+ get error() {
35
+ return this.stream.error;
36
+ }
37
+ get threadId() {
38
+ return this.stream.threadId;
39
+ }
40
+ get hydrationPromise() {
41
+ return this.stream.hydrationPromise;
42
+ }
43
+ get subagents() {
44
+ return this.stream.subagents;
45
+ }
46
+ get subgraphs() {
47
+ return this.stream.subgraphs;
48
+ }
49
+ get subgraphsByNode() {
50
+ return this.stream.subgraphsByNode;
51
+ }
52
+ get client() {
53
+ return this.stream.client;
54
+ }
55
+ get assistantId() {
56
+ return this.stream.assistantId;
57
+ }
58
+ submit(input, options) {
59
+ return this.stream.submit(input, options);
60
+ }
61
+ stop() {
62
+ return this.stream.stop();
63
+ }
64
+ respond(response, target) {
65
+ return this.stream.respond(response, target);
66
+ }
67
+ getThread() {
68
+ return this.stream.getThread();
69
+ }
70
+ /** @internal Lets selector primitives resolve the controller. */
71
+ get [require_use_stream.STREAM_CONTROLLER]() {
72
+ return this.stream[require_use_stream.STREAM_CONTROLLER];
73
+ }
74
+ };
75
+ StreamService = require_decorate.__decorate([(0, _angular_core.Injectable)()], StreamService);
76
+ //#endregion
77
+ Object.defineProperty(exports, "StreamService", {
78
+ enumerable: true,
79
+ get: function() {
80
+ return StreamService;
81
+ }
82
+ });
83
+
84
+ //# sourceMappingURL=stream-service.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-service.cjs","names":["EnvironmentInjector","DestroyRef","useStream","STREAM_CONTROLLER"],"sources":["../src/stream-service.ts"],"sourcesContent":["import {\n DestroyRef,\n EnvironmentInjector,\n Injectable,\n inject,\n runInInjectionContext,\n type Signal,\n} from \"@angular/core\";\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport type { Client, Interrupt } from \"@langchain/langgraph-sdk\";\nimport type {\n AssembledToolCall,\n InferStateType,\n StreamSubmitOptions,\n SubgraphDiscoverySnapshot,\n WidenUpdateMessages,\n} from \"@langchain/langgraph-sdk/stream\";\nimport type { ThreadStream } from \"@langchain/langgraph-sdk/client\";\nimport {\n useStream,\n STREAM_CONTROLLER,\n type StreamApi,\n type UseStreamOptions,\n type UseStreamReturn,\n} from \"./use-stream.js\";\n\n/**\n * `@Injectable()` wrapper around {@link useStream}. Extend this class\n * with your own service when you want a DI-scoped, shareable\n * {@link StreamApi}:\n *\n * ```ts\n * @Injectable({ providedIn: \"root\" })\n * export class ChatStream extends StreamService<ChatState> {\n * constructor() {\n * super({\n * transport: new HttpAgentServerAdapter({ apiUrl: \"/api/graph\" }),\n * assistantId: \"chat\",\n * });\n * }\n * }\n * ```\n *\n * The service exposes the same `StreamApi` surface as\n * `injectStream()` — read data via signals (`service.messages()`,\n * `service.isLoading()`) and use the imperative methods\n * (`service.submit(...)`, `service.stop()`).\n *\n * Must be instantiated inside an Angular injection context. Its\n * {@link DestroyRef} owns the controller lifetime, so scoping the\n * service to a component tears down the stream when the component\n * is destroyed.\n */\n@Injectable()\nexport class StreamService<\n T = Record<string, unknown>,\n InterruptType = unknown,\n ConfigurableType extends object = Record<string, unknown>,\n> {\n /** Underlying `StreamApi` returned by {@link useStream}. */\n readonly stream: UseStreamReturn<T, InterruptType, ConfigurableType>;\n\n constructor(options: UseStreamOptions<InferStateType<T>>) {\n const injector = inject(EnvironmentInjector);\n const destroyRef = inject(DestroyRef);\n this.stream = runInInjectionContext(injector, () =>\n useStream<T, InterruptType, ConfigurableType>(options, destroyRef)\n );\n }\n\n // ─── Reactive accessors (pass-through) ────────────────────────────\n\n get values(): UseStreamReturn<T, InterruptType, ConfigurableType>[\"values\"] {\n return this.stream.values;\n }\n\n get messages(): Signal<BaseMessage[]> {\n return this.stream.messages;\n }\n\n get toolCalls(): Signal<AssembledToolCall[]> {\n return this.stream.toolCalls;\n }\n\n get interrupts(): Signal<Interrupt<InterruptType>[]> {\n return this.stream.interrupts;\n }\n\n get interrupt(): Signal<Interrupt<InterruptType> | undefined> {\n return this.stream.interrupt;\n }\n\n get isLoading(): Signal<boolean> {\n return this.stream.isLoading;\n }\n\n get isThreadLoading(): Signal<boolean> {\n return this.stream.isThreadLoading;\n }\n\n get error(): Signal<unknown> {\n return this.stream.error;\n }\n\n get threadId(): Signal<string | null> {\n return this.stream.threadId;\n }\n\n get hydrationPromise(): Signal<Promise<void>> {\n return this.stream.hydrationPromise;\n }\n\n get subagents(): UseStreamReturn<\n T,\n InterruptType,\n ConfigurableType\n >[\"subagents\"] {\n return this.stream.subagents;\n }\n\n get subgraphs(): Signal<ReadonlyMap<string, SubgraphDiscoverySnapshot>> {\n return this.stream.subgraphs;\n }\n\n get subgraphsByNode(): Signal<\n ReadonlyMap<string, readonly SubgraphDiscoverySnapshot[]>\n > {\n return this.stream.subgraphsByNode;\n }\n\n // ─── Identity ─────────────────────────────────────────────────────\n\n get client(): Client {\n return this.stream.client;\n }\n\n get assistantId(): string {\n return this.stream.assistantId;\n }\n\n // ─── Imperatives ──────────────────────────────────────────────────\n\n submit(\n input: WidenUpdateMessages<Partial<InferStateType<T>>> | null | undefined,\n options?: StreamSubmitOptions<InferStateType<T>, ConfigurableType>\n ): Promise<void> {\n return this.stream.submit(\n input as Parameters<this[\"stream\"][\"submit\"]>[0],\n options as Parameters<this[\"stream\"][\"submit\"]>[1]\n );\n }\n\n stop(): Promise<void> {\n return this.stream.stop();\n }\n\n respond(\n response: unknown,\n target?: { interruptId: string; namespace?: string[] }\n ): Promise<void> {\n return this.stream.respond(response, target);\n }\n\n getThread(): ThreadStream | undefined {\n return this.stream.getThread();\n }\n\n /** @internal Lets selector primitives resolve the controller. */\n get [STREAM_CONTROLLER](): StreamApi<\n T,\n InterruptType,\n ConfigurableType\n >[typeof STREAM_CONTROLLER] {\n return this.stream[STREAM_CONTROLLER];\n }\n}\n"],"mappings":";;;;AAsDO,IAAA,gBAAA,MAAM,cAIX;;CAEA;CAEA,YAAY,SAA8C;EACxD,MAAM,YAAA,GAAA,cAAA,QAAkBA,cAAAA,oBAAoB;EAC5C,MAAM,cAAA,GAAA,cAAA,QAAoBC,cAAAA,WAAW;AACrC,OAAK,UAAA,GAAA,cAAA,uBAA+B,gBAClCC,mBAAAA,UAA8C,SAAS,WAAW,CACnE;;CAKH,IAAI,SAAwE;AAC1E,SAAO,KAAK,OAAO;;CAGrB,IAAI,WAAkC;AACpC,SAAO,KAAK,OAAO;;CAGrB,IAAI,YAAyC;AAC3C,SAAO,KAAK,OAAO;;CAGrB,IAAI,aAAiD;AACnD,SAAO,KAAK,OAAO;;CAGrB,IAAI,YAA0D;AAC5D,SAAO,KAAK,OAAO;;CAGrB,IAAI,YAA6B;AAC/B,SAAO,KAAK,OAAO;;CAGrB,IAAI,kBAAmC;AACrC,SAAO,KAAK,OAAO;;CAGrB,IAAI,QAAyB;AAC3B,SAAO,KAAK,OAAO;;CAGrB,IAAI,WAAkC;AACpC,SAAO,KAAK,OAAO;;CAGrB,IAAI,mBAA0C;AAC5C,SAAO,KAAK,OAAO;;CAGrB,IAAI,YAIW;AACb,SAAO,KAAK,OAAO;;CAGrB,IAAI,YAAoE;AACtE,SAAO,KAAK,OAAO;;CAGrB,IAAI,kBAEF;AACA,SAAO,KAAK,OAAO;;CAKrB,IAAI,SAAiB;AACnB,SAAO,KAAK,OAAO;;CAGrB,IAAI,cAAsB;AACxB,SAAO,KAAK,OAAO;;CAKrB,OACE,OACA,SACe;AACf,SAAO,KAAK,OAAO,OACjB,OACA,QACD;;CAGH,OAAsB;AACpB,SAAO,KAAK,OAAO,MAAM;;CAG3B,QACE,UACA,QACe;AACf,SAAO,KAAK,OAAO,QAAQ,UAAU,OAAO;;CAG9C,YAAsC;AACpC,SAAO,KAAK,OAAO,WAAW;;;CAIhC,KAAKC,mBAAAA,qBAIuB;AAC1B,SAAO,KAAK,OAAOA,mBAAAA;;;4EAxHV,CAAA,EAAA,cAAA"}
@@ -0,0 +1,67 @@
1
+ import { STREAM_CONTROLLER, StreamApi, UseStreamOptions as UseStreamOptions$1, UseStreamReturn } from "./use-stream.cjs";
2
+ import { AssembledToolCall, InferStateType, StreamSubmitOptions, SubgraphDiscoverySnapshot, WidenUpdateMessages } from "@langchain/langgraph-sdk/stream";
3
+ import { Signal } from "@angular/core";
4
+ import { BaseMessage } from "@langchain/core/messages";
5
+ import { Client, Interrupt } from "@langchain/langgraph-sdk";
6
+ import { ThreadStream } from "@langchain/langgraph-sdk/client";
7
+
8
+ //#region src/stream-service.d.ts
9
+ /**
10
+ * `@Injectable()` wrapper around {@link useStream}. Extend this class
11
+ * with your own service when you want a DI-scoped, shareable
12
+ * {@link StreamApi}:
13
+ *
14
+ * ```ts
15
+ * @Injectable({ providedIn: "root" })
16
+ * export class ChatStream extends StreamService<ChatState> {
17
+ * constructor() {
18
+ * super({
19
+ * transport: new HttpAgentServerAdapter({ apiUrl: "/api/graph" }),
20
+ * assistantId: "chat",
21
+ * });
22
+ * }
23
+ * }
24
+ * ```
25
+ *
26
+ * The service exposes the same `StreamApi` surface as
27
+ * `injectStream()` — read data via signals (`service.messages()`,
28
+ * `service.isLoading()`) and use the imperative methods
29
+ * (`service.submit(...)`, `service.stop()`).
30
+ *
31
+ * Must be instantiated inside an Angular injection context. Its
32
+ * {@link DestroyRef} owns the controller lifetime, so scoping the
33
+ * service to a component tears down the stream when the component
34
+ * is destroyed.
35
+ */
36
+ declare class StreamService<T = Record<string, unknown>, InterruptType = unknown, ConfigurableType extends object = Record<string, unknown>> {
37
+ /** Underlying `StreamApi` returned by {@link useStream}. */
38
+ readonly stream: UseStreamReturn<T, InterruptType, ConfigurableType>;
39
+ constructor(options: UseStreamOptions$1<InferStateType<T>>);
40
+ get values(): UseStreamReturn<T, InterruptType, ConfigurableType>["values"];
41
+ get messages(): Signal<BaseMessage[]>;
42
+ get toolCalls(): Signal<AssembledToolCall[]>;
43
+ get interrupts(): Signal<Interrupt<InterruptType>[]>;
44
+ get interrupt(): Signal<Interrupt<InterruptType> | undefined>;
45
+ get isLoading(): Signal<boolean>;
46
+ get isThreadLoading(): Signal<boolean>;
47
+ get error(): Signal<unknown>;
48
+ get threadId(): Signal<string | null>;
49
+ get hydrationPromise(): Signal<Promise<void>>;
50
+ get subagents(): UseStreamReturn<T, InterruptType, ConfigurableType>["subagents"];
51
+ get subgraphs(): Signal<ReadonlyMap<string, SubgraphDiscoverySnapshot>>;
52
+ get subgraphsByNode(): Signal<ReadonlyMap<string, readonly SubgraphDiscoverySnapshot[]>>;
53
+ get client(): Client;
54
+ get assistantId(): string;
55
+ submit(input: WidenUpdateMessages<Partial<InferStateType<T>>> | null | undefined, options?: StreamSubmitOptions<InferStateType<T>, ConfigurableType>): Promise<void>;
56
+ stop(): Promise<void>;
57
+ respond(response: unknown, target?: {
58
+ interruptId: string;
59
+ namespace?: string[];
60
+ }): Promise<void>;
61
+ getThread(): ThreadStream | undefined;
62
+ /** @internal Lets selector primitives resolve the controller. */
63
+ get [STREAM_CONTROLLER](): StreamApi<T, InterruptType, ConfigurableType>[typeof STREAM_CONTROLLER];
64
+ }
65
+ //#endregion
66
+ export { StreamService };
67
+ //# sourceMappingURL=stream-service.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-service.d.cts","names":[],"sources":["../src/stream-service.ts"],"mappings":";;;;;;;;;;AAqDA;;;;;;;;;;;;;;;;;;;;;;;;;cACa,aAAA,KACP,MAAA,8EAE8B,MAAA;EAmCjB;EAAA,SAhCR,MAAA,EAAQ,eAAA,CAAgB,CAAA,EAAG,aAAA,EAAe,gBAAA;EAEnD,WAAA,CAAY,OAAA,EAAS,kBAAA,CAAiB,cAAA,CAAe,CAAA;EAAA,IAUjD,MAAA,CAAA,GAAU,eAAA,CAAgB,CAAA,EAAG,aAAA,EAAe,gBAAA;EAAA,IAI5C,QAAA,CAAA,GAAY,MAAA,CAAO,WAAA;EAAA,IAInB,SAAA,CAAA,GAAa,MAAA,CAAO,iBAAA;EAAA,IAIpB,UAAA,CAAA,GAAc,MAAA,CAAO,SAAA,CAAU,aAAA;EAAA,IAI/B,SAAA,CAAA,GAAa,MAAA,CAAO,SAAA,CAAU,aAAA;EAAA,IAI9B,SAAA,CAAA,GAAa,MAAA;EAAA,IAIb,eAAA,CAAA,GAAmB,MAAA;EAAA,IAInB,KAAA,CAAA,GAAS,MAAA;EAAA,IAIT,QAAA,CAAA,GAAY,MAAA;EAAA,IAIZ,gBAAA,CAAA,GAAoB,MAAA,CAAO,OAAA;EAAA,IAI3B,SAAA,CAAA,GAAa,eAAA,CACf,CAAA,EACA,aAAA,EACA,gBAAA;EAAA,IAKE,SAAA,CAAA,GAAa,MAAA,CAAO,WAAA,SAAoB,yBAAA;EAAA,IAIxC,eAAA,CAAA,GAAmB,MAAA,CACrB,WAAA,kBAA6B,yBAAA;EAAA,IAO3B,MAAA,CAAA,GAAU,MAAA;EAAA,IAIV,WAAA,CAAA;EAMJ,MAAA,CACE,KAAA,EAAO,mBAAA,CAAoB,OAAA,CAAQ,cAAA,CAAe,CAAA,wBAClD,OAAA,GAAU,mBAAA,CAAoB,cAAA,CAAe,CAAA,GAAI,gBAAA,IAChD,OAAA;EAOH,IAAA,CAAA,GAAQ,OAAA;EAIR,OAAA,CACE,QAAA,WACA,MAAA;IAAW,WAAA;IAAqB,SAAA;EAAA,IAC/B,OAAA;EAIH,SAAA,CAAA,GAAa,YAAA;EAlBV;EAAA,KAuBE,iBAAA,KAAsB,SAAA,CACzB,CAAA,EACA,aAAA,EACA,gBAAA,SACO,iBAAA;AAAA"}
@@ -0,0 +1,67 @@
1
+ import { STREAM_CONTROLLER, StreamApi, UseStreamOptions as UseStreamOptions$1, UseStreamReturn } from "./use-stream.js";
2
+ import { Signal } from "@angular/core";
3
+ import { Client, Interrupt } from "@langchain/langgraph-sdk";
4
+ import { ThreadStream } from "@langchain/langgraph-sdk/client";
5
+ import { AssembledToolCall, InferStateType, StreamSubmitOptions, SubgraphDiscoverySnapshot, WidenUpdateMessages } from "@langchain/langgraph-sdk/stream";
6
+ import { BaseMessage } from "@langchain/core/messages";
7
+
8
+ //#region src/stream-service.d.ts
9
+ /**
10
+ * `@Injectable()` wrapper around {@link useStream}. Extend this class
11
+ * with your own service when you want a DI-scoped, shareable
12
+ * {@link StreamApi}:
13
+ *
14
+ * ```ts
15
+ * @Injectable({ providedIn: "root" })
16
+ * export class ChatStream extends StreamService<ChatState> {
17
+ * constructor() {
18
+ * super({
19
+ * transport: new HttpAgentServerAdapter({ apiUrl: "/api/graph" }),
20
+ * assistantId: "chat",
21
+ * });
22
+ * }
23
+ * }
24
+ * ```
25
+ *
26
+ * The service exposes the same `StreamApi` surface as
27
+ * `injectStream()` — read data via signals (`service.messages()`,
28
+ * `service.isLoading()`) and use the imperative methods
29
+ * (`service.submit(...)`, `service.stop()`).
30
+ *
31
+ * Must be instantiated inside an Angular injection context. Its
32
+ * {@link DestroyRef} owns the controller lifetime, so scoping the
33
+ * service to a component tears down the stream when the component
34
+ * is destroyed.
35
+ */
36
+ declare class StreamService<T = Record<string, unknown>, InterruptType = unknown, ConfigurableType extends object = Record<string, unknown>> {
37
+ /** Underlying `StreamApi` returned by {@link useStream}. */
38
+ readonly stream: UseStreamReturn<T, InterruptType, ConfigurableType>;
39
+ constructor(options: UseStreamOptions$1<InferStateType<T>>);
40
+ get values(): UseStreamReturn<T, InterruptType, ConfigurableType>["values"];
41
+ get messages(): Signal<BaseMessage[]>;
42
+ get toolCalls(): Signal<AssembledToolCall[]>;
43
+ get interrupts(): Signal<Interrupt<InterruptType>[]>;
44
+ get interrupt(): Signal<Interrupt<InterruptType> | undefined>;
45
+ get isLoading(): Signal<boolean>;
46
+ get isThreadLoading(): Signal<boolean>;
47
+ get error(): Signal<unknown>;
48
+ get threadId(): Signal<string | null>;
49
+ get hydrationPromise(): Signal<Promise<void>>;
50
+ get subagents(): UseStreamReturn<T, InterruptType, ConfigurableType>["subagents"];
51
+ get subgraphs(): Signal<ReadonlyMap<string, SubgraphDiscoverySnapshot>>;
52
+ get subgraphsByNode(): Signal<ReadonlyMap<string, readonly SubgraphDiscoverySnapshot[]>>;
53
+ get client(): Client;
54
+ get assistantId(): string;
55
+ submit(input: WidenUpdateMessages<Partial<InferStateType<T>>> | null | undefined, options?: StreamSubmitOptions<InferStateType<T>, ConfigurableType>): Promise<void>;
56
+ stop(): Promise<void>;
57
+ respond(response: unknown, target?: {
58
+ interruptId: string;
59
+ namespace?: string[];
60
+ }): Promise<void>;
61
+ getThread(): ThreadStream | undefined;
62
+ /** @internal Lets selector primitives resolve the controller. */
63
+ get [STREAM_CONTROLLER](): StreamApi<T, InterruptType, ConfigurableType>[typeof STREAM_CONTROLLER];
64
+ }
65
+ //#endregion
66
+ export { StreamService };
67
+ //# sourceMappingURL=stream-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-service.d.ts","names":[],"sources":["../src/stream-service.ts"],"mappings":";;;;;;;;;;AAqDA;;;;;;;;;;;;;;;;;;;;;;;;;cACa,aAAA,KACP,MAAA,8EAE8B,MAAA;EAmCjB;EAAA,SAhCR,MAAA,EAAQ,eAAA,CAAgB,CAAA,EAAG,aAAA,EAAe,gBAAA;EAEnD,WAAA,CAAY,OAAA,EAAS,kBAAA,CAAiB,cAAA,CAAe,CAAA;EAAA,IAUjD,MAAA,CAAA,GAAU,eAAA,CAAgB,CAAA,EAAG,aAAA,EAAe,gBAAA;EAAA,IAI5C,QAAA,CAAA,GAAY,MAAA,CAAO,WAAA;EAAA,IAInB,SAAA,CAAA,GAAa,MAAA,CAAO,iBAAA;EAAA,IAIpB,UAAA,CAAA,GAAc,MAAA,CAAO,SAAA,CAAU,aAAA;EAAA,IAI/B,SAAA,CAAA,GAAa,MAAA,CAAO,SAAA,CAAU,aAAA;EAAA,IAI9B,SAAA,CAAA,GAAa,MAAA;EAAA,IAIb,eAAA,CAAA,GAAmB,MAAA;EAAA,IAInB,KAAA,CAAA,GAAS,MAAA;EAAA,IAIT,QAAA,CAAA,GAAY,MAAA;EAAA,IAIZ,gBAAA,CAAA,GAAoB,MAAA,CAAO,OAAA;EAAA,IAI3B,SAAA,CAAA,GAAa,eAAA,CACf,CAAA,EACA,aAAA,EACA,gBAAA;EAAA,IAKE,SAAA,CAAA,GAAa,MAAA,CAAO,WAAA,SAAoB,yBAAA;EAAA,IAIxC,eAAA,CAAA,GAAmB,MAAA,CACrB,WAAA,kBAA6B,yBAAA;EAAA,IAO3B,MAAA,CAAA,GAAU,MAAA;EAAA,IAIV,WAAA,CAAA;EAMJ,MAAA,CACE,KAAA,EAAO,mBAAA,CAAoB,OAAA,CAAQ,cAAA,CAAe,CAAA,wBAClD,OAAA,GAAU,mBAAA,CAAoB,cAAA,CAAe,CAAA,GAAI,gBAAA,IAChD,OAAA;EAOH,IAAA,CAAA,GAAQ,OAAA;EAIR,OAAA,CACE,QAAA,WACA,MAAA;IAAW,WAAA;IAAqB,SAAA;EAAA,IAC/B,OAAA;EAIH,SAAA,CAAA,GAAa,YAAA;EAlBV;EAAA,KAuBE,iBAAA,KAAsB,SAAA,CACzB,CAAA,EACA,aAAA,EACA,gBAAA,SACO,iBAAA;AAAA"}
@@ -0,0 +1,79 @@
1
+ import { STREAM_CONTROLLER, useStream } from "./use-stream.js";
2
+ import { __decorate } from "./_virtual/_@oxc-project_runtime@0.115.0/helpers/decorate.js";
3
+ import { DestroyRef, EnvironmentInjector, Injectable, inject, runInInjectionContext } from "@angular/core";
4
+ //#region src/stream-service.ts
5
+ let StreamService = class StreamService {
6
+ /** Underlying `StreamApi` returned by {@link useStream}. */
7
+ stream;
8
+ constructor(options) {
9
+ const injector = inject(EnvironmentInjector);
10
+ const destroyRef = inject(DestroyRef);
11
+ this.stream = runInInjectionContext(injector, () => useStream(options, destroyRef));
12
+ }
13
+ get values() {
14
+ return this.stream.values;
15
+ }
16
+ get messages() {
17
+ return this.stream.messages;
18
+ }
19
+ get toolCalls() {
20
+ return this.stream.toolCalls;
21
+ }
22
+ get interrupts() {
23
+ return this.stream.interrupts;
24
+ }
25
+ get interrupt() {
26
+ return this.stream.interrupt;
27
+ }
28
+ get isLoading() {
29
+ return this.stream.isLoading;
30
+ }
31
+ get isThreadLoading() {
32
+ return this.stream.isThreadLoading;
33
+ }
34
+ get error() {
35
+ return this.stream.error;
36
+ }
37
+ get threadId() {
38
+ return this.stream.threadId;
39
+ }
40
+ get hydrationPromise() {
41
+ return this.stream.hydrationPromise;
42
+ }
43
+ get subagents() {
44
+ return this.stream.subagents;
45
+ }
46
+ get subgraphs() {
47
+ return this.stream.subgraphs;
48
+ }
49
+ get subgraphsByNode() {
50
+ return this.stream.subgraphsByNode;
51
+ }
52
+ get client() {
53
+ return this.stream.client;
54
+ }
55
+ get assistantId() {
56
+ return this.stream.assistantId;
57
+ }
58
+ submit(input, options) {
59
+ return this.stream.submit(input, options);
60
+ }
61
+ stop() {
62
+ return this.stream.stop();
63
+ }
64
+ respond(response, target) {
65
+ return this.stream.respond(response, target);
66
+ }
67
+ getThread() {
68
+ return this.stream.getThread();
69
+ }
70
+ /** @internal Lets selector primitives resolve the controller. */
71
+ get [STREAM_CONTROLLER]() {
72
+ return this.stream[STREAM_CONTROLLER];
73
+ }
74
+ };
75
+ StreamService = __decorate([Injectable()], StreamService);
76
+ //#endregion
77
+ export { StreamService };
78
+
79
+ //# sourceMappingURL=stream-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-service.js","names":[],"sources":["../src/stream-service.ts"],"sourcesContent":["import {\n DestroyRef,\n EnvironmentInjector,\n Injectable,\n inject,\n runInInjectionContext,\n type Signal,\n} from \"@angular/core\";\nimport type { BaseMessage } from \"@langchain/core/messages\";\nimport type { Client, Interrupt } from \"@langchain/langgraph-sdk\";\nimport type {\n AssembledToolCall,\n InferStateType,\n StreamSubmitOptions,\n SubgraphDiscoverySnapshot,\n WidenUpdateMessages,\n} from \"@langchain/langgraph-sdk/stream\";\nimport type { ThreadStream } from \"@langchain/langgraph-sdk/client\";\nimport {\n useStream,\n STREAM_CONTROLLER,\n type StreamApi,\n type UseStreamOptions,\n type UseStreamReturn,\n} from \"./use-stream.js\";\n\n/**\n * `@Injectable()` wrapper around {@link useStream}. Extend this class\n * with your own service when you want a DI-scoped, shareable\n * {@link StreamApi}:\n *\n * ```ts\n * @Injectable({ providedIn: \"root\" })\n * export class ChatStream extends StreamService<ChatState> {\n * constructor() {\n * super({\n * transport: new HttpAgentServerAdapter({ apiUrl: \"/api/graph\" }),\n * assistantId: \"chat\",\n * });\n * }\n * }\n * ```\n *\n * The service exposes the same `StreamApi` surface as\n * `injectStream()` — read data via signals (`service.messages()`,\n * `service.isLoading()`) and use the imperative methods\n * (`service.submit(...)`, `service.stop()`).\n *\n * Must be instantiated inside an Angular injection context. Its\n * {@link DestroyRef} owns the controller lifetime, so scoping the\n * service to a component tears down the stream when the component\n * is destroyed.\n */\n@Injectable()\nexport class StreamService<\n T = Record<string, unknown>,\n InterruptType = unknown,\n ConfigurableType extends object = Record<string, unknown>,\n> {\n /** Underlying `StreamApi` returned by {@link useStream}. */\n readonly stream: UseStreamReturn<T, InterruptType, ConfigurableType>;\n\n constructor(options: UseStreamOptions<InferStateType<T>>) {\n const injector = inject(EnvironmentInjector);\n const destroyRef = inject(DestroyRef);\n this.stream = runInInjectionContext(injector, () =>\n useStream<T, InterruptType, ConfigurableType>(options, destroyRef)\n );\n }\n\n // ─── Reactive accessors (pass-through) ────────────────────────────\n\n get values(): UseStreamReturn<T, InterruptType, ConfigurableType>[\"values\"] {\n return this.stream.values;\n }\n\n get messages(): Signal<BaseMessage[]> {\n return this.stream.messages;\n }\n\n get toolCalls(): Signal<AssembledToolCall[]> {\n return this.stream.toolCalls;\n }\n\n get interrupts(): Signal<Interrupt<InterruptType>[]> {\n return this.stream.interrupts;\n }\n\n get interrupt(): Signal<Interrupt<InterruptType> | undefined> {\n return this.stream.interrupt;\n }\n\n get isLoading(): Signal<boolean> {\n return this.stream.isLoading;\n }\n\n get isThreadLoading(): Signal<boolean> {\n return this.stream.isThreadLoading;\n }\n\n get error(): Signal<unknown> {\n return this.stream.error;\n }\n\n get threadId(): Signal<string | null> {\n return this.stream.threadId;\n }\n\n get hydrationPromise(): Signal<Promise<void>> {\n return this.stream.hydrationPromise;\n }\n\n get subagents(): UseStreamReturn<\n T,\n InterruptType,\n ConfigurableType\n >[\"subagents\"] {\n return this.stream.subagents;\n }\n\n get subgraphs(): Signal<ReadonlyMap<string, SubgraphDiscoverySnapshot>> {\n return this.stream.subgraphs;\n }\n\n get subgraphsByNode(): Signal<\n ReadonlyMap<string, readonly SubgraphDiscoverySnapshot[]>\n > {\n return this.stream.subgraphsByNode;\n }\n\n // ─── Identity ─────────────────────────────────────────────────────\n\n get client(): Client {\n return this.stream.client;\n }\n\n get assistantId(): string {\n return this.stream.assistantId;\n }\n\n // ─── Imperatives ──────────────────────────────────────────────────\n\n submit(\n input: WidenUpdateMessages<Partial<InferStateType<T>>> | null | undefined,\n options?: StreamSubmitOptions<InferStateType<T>, ConfigurableType>\n ): Promise<void> {\n return this.stream.submit(\n input as Parameters<this[\"stream\"][\"submit\"]>[0],\n options as Parameters<this[\"stream\"][\"submit\"]>[1]\n );\n }\n\n stop(): Promise<void> {\n return this.stream.stop();\n }\n\n respond(\n response: unknown,\n target?: { interruptId: string; namespace?: string[] }\n ): Promise<void> {\n return this.stream.respond(response, target);\n }\n\n getThread(): ThreadStream | undefined {\n return this.stream.getThread();\n }\n\n /** @internal Lets selector primitives resolve the controller. */\n get [STREAM_CONTROLLER](): StreamApi<\n T,\n InterruptType,\n ConfigurableType\n >[typeof STREAM_CONTROLLER] {\n return this.stream[STREAM_CONTROLLER];\n }\n}\n"],"mappings":";;;;AAsDO,IAAA,gBAAA,MAAM,cAIX;;CAEA;CAEA,YAAY,SAA8C;EACxD,MAAM,WAAW,OAAO,oBAAoB;EAC5C,MAAM,aAAa,OAAO,WAAW;AACrC,OAAK,SAAS,sBAAsB,gBAClC,UAA8C,SAAS,WAAW,CACnE;;CAKH,IAAI,SAAwE;AAC1E,SAAO,KAAK,OAAO;;CAGrB,IAAI,WAAkC;AACpC,SAAO,KAAK,OAAO;;CAGrB,IAAI,YAAyC;AAC3C,SAAO,KAAK,OAAO;;CAGrB,IAAI,aAAiD;AACnD,SAAO,KAAK,OAAO;;CAGrB,IAAI,YAA0D;AAC5D,SAAO,KAAK,OAAO;;CAGrB,IAAI,YAA6B;AAC/B,SAAO,KAAK,OAAO;;CAGrB,IAAI,kBAAmC;AACrC,SAAO,KAAK,OAAO;;CAGrB,IAAI,QAAyB;AAC3B,SAAO,KAAK,OAAO;;CAGrB,IAAI,WAAkC;AACpC,SAAO,KAAK,OAAO;;CAGrB,IAAI,mBAA0C;AAC5C,SAAO,KAAK,OAAO;;CAGrB,IAAI,YAIW;AACb,SAAO,KAAK,OAAO;;CAGrB,IAAI,YAAoE;AACtE,SAAO,KAAK,OAAO;;CAGrB,IAAI,kBAEF;AACA,SAAO,KAAK,OAAO;;CAKrB,IAAI,SAAiB;AACnB,SAAO,KAAK,OAAO;;CAGrB,IAAI,cAAsB;AACxB,SAAO,KAAK,OAAO;;CAKrB,OACE,OACA,SACe;AACf,SAAO,KAAK,OAAO,OACjB,OACA,QACD;;CAGH,OAAsB;AACpB,SAAO,KAAK,OAAO,MAAM;;CAG3B,QACE,UACA,QACe;AACf,SAAO,KAAK,OAAO,QAAQ,UAAU,OAAO;;CAG9C,YAAsC;AACpC,SAAO,KAAK,OAAO,WAAW;;;CAIhC,KAAK,qBAIuB;AAC1B,SAAO,KAAK,OAAO;;;4BAxHtB,YAAY,CAAA,EAAA,cAAA"}