@copilotkitnext/angular 0.0.9-alpha.3 → 0.0.11

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 (210) hide show
  1. package/dist/esm2022/index.mjs +2 -70
  2. package/dist/esm2022/lib/agent.mjs +73 -0
  3. package/dist/esm2022/lib/chat-config.mjs +35 -0
  4. package/dist/esm2022/lib/chat-state.mjs +18 -0
  5. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-buttons.mjs +344 -0
  6. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-renderer.mjs +260 -0
  7. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-toolbar.mjs +22 -0
  8. package/dist/esm2022/{components/chat/copilot-chat-assistant-message.component.mjs → lib/components/chat/copilot-chat-assistant-message.mjs} +216 -240
  9. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message.types.mjs +2 -0
  10. package/dist/esm2022/lib/components/chat/copilot-chat-audio-recorder.mjs +196 -0
  11. package/dist/esm2022/lib/components/chat/copilot-chat-buttons.mjs +299 -0
  12. package/dist/esm2022/lib/components/chat/copilot-chat-input-defaults.mjs +39 -0
  13. package/dist/esm2022/lib/components/chat/copilot-chat-input.mjs +634 -0
  14. package/dist/esm2022/lib/components/chat/copilot-chat-input.types.mjs +10 -0
  15. package/dist/esm2022/lib/components/chat/copilot-chat-message-view-cursor.mjs +27 -0
  16. package/dist/esm2022/lib/components/chat/copilot-chat-message-view.mjs +268 -0
  17. package/dist/esm2022/lib/components/chat/copilot-chat-message-view.types.mjs +2 -0
  18. package/dist/esm2022/lib/components/chat/copilot-chat-textarea.mjs +139 -0
  19. package/dist/esm2022/lib/components/chat/copilot-chat-tool-calls-view.mjs +36 -0
  20. package/dist/esm2022/lib/components/chat/copilot-chat-toolbar.mjs +20 -0
  21. package/dist/esm2022/lib/components/chat/copilot-chat-tools-menu.mjs +203 -0
  22. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-branch-navigation.mjs +118 -0
  23. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-buttons.mjs +182 -0
  24. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-renderer.mjs +28 -0
  25. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-toolbar.mjs +25 -0
  26. package/dist/esm2022/lib/components/chat/copilot-chat-user-message.mjs +306 -0
  27. package/dist/esm2022/lib/components/chat/copilot-chat-user-message.types.mjs +2 -0
  28. package/dist/esm2022/lib/components/chat/copilot-chat-view-disclaimer.mjs +48 -0
  29. package/dist/esm2022/lib/components/chat/copilot-chat-view-feather.mjs +41 -0
  30. package/dist/esm2022/lib/components/chat/copilot-chat-view-handlers.mjs +19 -0
  31. package/dist/esm2022/lib/components/chat/copilot-chat-view-input-container.mjs +96 -0
  32. package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.mjs +89 -0
  33. package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-view.mjs +456 -0
  34. package/dist/esm2022/lib/components/chat/copilot-chat-view.mjs +404 -0
  35. package/dist/esm2022/lib/components/chat/copilot-chat-view.types.mjs +2 -0
  36. package/dist/esm2022/lib/components/chat/copilot-chat.mjs +167 -0
  37. package/dist/esm2022/lib/config.mjs +9 -0
  38. package/dist/esm2022/lib/copilotkit.mjs +124 -0
  39. package/dist/esm2022/lib/directives/copilotkit-agent-context.mjs +130 -0
  40. package/dist/esm2022/lib/directives/stick-to-bottom.mjs +170 -0
  41. package/dist/esm2022/lib/directives/tooltip.mjs +217 -0
  42. package/dist/esm2022/lib/human-in-the-loop.mjs +19 -0
  43. package/dist/esm2022/lib/render-tool-calls.mjs +131 -0
  44. package/dist/esm2022/lib/resize-observer.mjs +152 -0
  45. package/dist/esm2022/lib/scroll-position.mjs +124 -0
  46. package/dist/esm2022/lib/slots/copilot-slot.mjs +156 -0
  47. package/dist/esm2022/lib/slots/index.mjs +4 -0
  48. package/dist/esm2022/lib/slots/slot.types.mjs +3 -3
  49. package/dist/esm2022/lib/slots/slot.utils.mjs +19 -15
  50. package/dist/esm2022/lib/tools.mjs +31 -0
  51. package/dist/esm2022/lib/utils.mjs +3 -3
  52. package/dist/esm2022/public-api.mjs +47 -0
  53. package/dist/fesm2022/copilotkitnext-angular.mjs +5249 -8271
  54. package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
  55. package/dist/index.d.ts +1 -55
  56. package/dist/lib/agent.d.ts +53 -0
  57. package/dist/{core/chat-configuration/chat-configuration.types.d.ts → lib/chat-config.d.ts} +4 -8
  58. package/dist/lib/chat-state.d.ts +10 -0
  59. package/dist/lib/components/chat/copilot-chat-assistant-message-buttons.d.ts +68 -0
  60. package/dist/lib/components/chat/copilot-chat-assistant-message-renderer.d.ts +26 -0
  61. package/dist/lib/components/chat/copilot-chat-assistant-message-toolbar.d.ts +7 -0
  62. package/dist/lib/components/chat/copilot-chat-assistant-message.d.ts +178 -0
  63. package/dist/{components → lib/components}/chat/copilot-chat-assistant-message.types.d.ts +1 -1
  64. package/dist/{components/chat/copilot-chat-audio-recorder.component.d.ts → lib/components/chat/copilot-chat-audio-recorder.d.ts} +10 -10
  65. package/dist/lib/components/chat/copilot-chat-buttons.d.ts +65 -0
  66. package/dist/lib/components/chat/copilot-chat-input-defaults.d.ts +38 -0
  67. package/dist/lib/components/chat/copilot-chat-input.d.ts +133 -0
  68. package/dist/{components → lib/components}/chat/copilot-chat-input.types.d.ts +11 -11
  69. package/dist/lib/components/chat/copilot-chat-message-view-cursor.d.ts +11 -0
  70. package/dist/{components/chat/copilot-chat-message-view.component.d.ts → lib/components/chat/copilot-chat-message-view.d.ts} +68 -36
  71. package/dist/{components → lib/components}/chat/copilot-chat-message-view.types.d.ts +2 -2
  72. package/dist/lib/components/chat/copilot-chat-textarea.d.ts +41 -0
  73. package/dist/lib/components/chat/copilot-chat-tool-calls-view.d.ts +55 -0
  74. package/dist/lib/components/chat/copilot-chat-toolbar.d.ts +7 -0
  75. package/dist/lib/components/chat/copilot-chat-tools-menu.d.ts +20 -0
  76. package/dist/lib/components/chat/copilot-chat-user-message-branch-navigation.d.ts +20 -0
  77. package/dist/lib/components/chat/copilot-chat-user-message-buttons.d.ts +35 -0
  78. package/dist/lib/components/chat/copilot-chat-user-message-renderer.d.ts +8 -0
  79. package/dist/lib/components/chat/copilot-chat-user-message-toolbar.d.ts +7 -0
  80. package/dist/lib/components/chat/copilot-chat-user-message.d.ts +55 -0
  81. package/dist/{components → lib/components}/chat/copilot-chat-user-message.types.d.ts +2 -2
  82. package/dist/lib/components/chat/copilot-chat-view-disclaimer.d.ts +15 -0
  83. package/dist/{components/chat/copilot-chat-view-feather.component.d.ts → lib/components/chat/copilot-chat-view-feather.d.ts} +6 -6
  84. package/dist/{components/chat/copilot-chat-view-handlers.service.d.ts → lib/components/chat/copilot-chat-view-handlers.d.ts} +3 -3
  85. package/dist/lib/components/chat/copilot-chat-view-input-container.d.ts +23 -0
  86. package/dist/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.d.ts +16 -0
  87. package/dist/lib/components/chat/copilot-chat-view-scroll-view.d.ts +114 -0
  88. package/dist/lib/components/chat/copilot-chat-view.d.ts +239 -0
  89. package/dist/{components → lib/components}/chat/copilot-chat-view.types.d.ts +2 -2
  90. package/dist/lib/components/chat/copilot-chat.d.ts +67 -0
  91. package/dist/lib/config.d.ts +16 -0
  92. package/dist/lib/copilotkit.d.ts +29 -0
  93. package/dist/{directives/copilotkit-agent-context.directive.d.ts → lib/directives/copilotkit-agent-context.d.ts} +5 -5
  94. package/dist/lib/directives/stick-to-bottom.d.ts +62 -0
  95. package/dist/lib/directives/tooltip.d.ts +33 -0
  96. package/dist/lib/human-in-the-loop.d.ts +13 -0
  97. package/dist/lib/render-tool-calls.d.ts +75 -0
  98. package/dist/{services/resize-observer.service.d.ts → lib/resize-observer.d.ts} +2 -2
  99. package/dist/{services/scroll-position.service.d.ts → lib/scroll-position.d.ts} +6 -6
  100. package/dist/lib/slots/copilot-slot.d.ts +34 -0
  101. package/dist/lib/slots/index.d.ts +3 -0
  102. package/dist/lib/slots/slot.types.d.ts +1 -1
  103. package/dist/lib/slots/slot.utils.d.ts +6 -4
  104. package/dist/lib/tools.d.ts +63 -0
  105. package/dist/lib/utils.d.ts +1 -1
  106. package/dist/public-api.d.ts +46 -0
  107. package/dist/styles.css +0 -69
  108. package/package.json +5 -5
  109. package/dist/components/chat/copilot-chat-assistant-message-buttons.component.d.ts +0 -75
  110. package/dist/components/chat/copilot-chat-assistant-message-renderer.component.d.ts +0 -31
  111. package/dist/components/chat/copilot-chat-assistant-message-toolbar.component.d.ts +0 -8
  112. package/dist/components/chat/copilot-chat-assistant-message.component.d.ts +0 -132
  113. package/dist/components/chat/copilot-chat-buttons.component.d.ts +0 -66
  114. package/dist/components/chat/copilot-chat-input-defaults.d.ts +0 -37
  115. package/dist/components/chat/copilot-chat-input.component.d.ts +0 -133
  116. package/dist/components/chat/copilot-chat-message-view-cursor.component.d.ts +0 -15
  117. package/dist/components/chat/copilot-chat-textarea.component.d.ts +0 -45
  118. package/dist/components/chat/copilot-chat-tool-calls-view.component.d.ts +0 -35
  119. package/dist/components/chat/copilot-chat-toolbar.component.d.ts +0 -8
  120. package/dist/components/chat/copilot-chat-tools-menu.component.d.ts +0 -20
  121. package/dist/components/chat/copilot-chat-user-message-branch-navigation.component.d.ts +0 -23
  122. package/dist/components/chat/copilot-chat-user-message-buttons.component.d.ts +0 -39
  123. package/dist/components/chat/copilot-chat-user-message-renderer.component.d.ts +0 -9
  124. package/dist/components/chat/copilot-chat-user-message-toolbar.component.d.ts +0 -8
  125. package/dist/components/chat/copilot-chat-user-message.component.d.ts +0 -55
  126. package/dist/components/chat/copilot-chat-view-disclaimer.component.d.ts +0 -15
  127. package/dist/components/chat/copilot-chat-view-input-container.component.d.ts +0 -23
  128. package/dist/components/chat/copilot-chat-view-scroll-to-bottom-button.component.d.ts +0 -17
  129. package/dist/components/chat/copilot-chat-view-scroll-view.component.d.ts +0 -84
  130. package/dist/components/chat/copilot-chat-view.component.d.ts +0 -205
  131. package/dist/components/chat/copilot-chat.component.d.ts +0 -36
  132. package/dist/components/copilotkit-tool-render.component.d.ts +0 -25
  133. package/dist/core/chat-configuration/chat-configuration.providers.d.ts +0 -54
  134. package/dist/core/chat-configuration/chat-configuration.service.d.ts +0 -75
  135. package/dist/core/copilotkit.providers.d.ts +0 -13
  136. package/dist/core/copilotkit.service.d.ts +0 -119
  137. package/dist/core/copilotkit.types.d.ts +0 -81
  138. package/dist/directives/copilotkit-agent.directive.d.ts +0 -106
  139. package/dist/directives/copilotkit-chat-config.directive.d.ts +0 -84
  140. package/dist/directives/copilotkit-config.directive.d.ts +0 -44
  141. package/dist/directives/copilotkit-frontend-tool.directive.d.ts +0 -25
  142. package/dist/directives/copilotkit-human-in-the-loop.directive.d.ts +0 -124
  143. package/dist/directives/stick-to-bottom.directive.d.ts +0 -62
  144. package/dist/esm2022/components/chat/copilot-chat-assistant-message-buttons.component.mjs +0 -384
  145. package/dist/esm2022/components/chat/copilot-chat-assistant-message-renderer.component.mjs +0 -286
  146. package/dist/esm2022/components/chat/copilot-chat-assistant-message-toolbar.component.mjs +0 -27
  147. package/dist/esm2022/components/chat/copilot-chat-assistant-message.types.mjs +0 -2
  148. package/dist/esm2022/components/chat/copilot-chat-audio-recorder.component.mjs +0 -202
  149. package/dist/esm2022/components/chat/copilot-chat-buttons.component.mjs +0 -321
  150. package/dist/esm2022/components/chat/copilot-chat-input-defaults.mjs +0 -38
  151. package/dist/esm2022/components/chat/copilot-chat-input.component.mjs +0 -666
  152. package/dist/esm2022/components/chat/copilot-chat-input.types.mjs +0 -10
  153. package/dist/esm2022/components/chat/copilot-chat-message-view-cursor.component.mjs +0 -45
  154. package/dist/esm2022/components/chat/copilot-chat-message-view.component.mjs +0 -296
  155. package/dist/esm2022/components/chat/copilot-chat-message-view.types.mjs +0 -2
  156. package/dist/esm2022/components/chat/copilot-chat-textarea.component.mjs +0 -188
  157. package/dist/esm2022/components/chat/copilot-chat-tool-calls-view.component.mjs +0 -222
  158. package/dist/esm2022/components/chat/copilot-chat-toolbar.component.mjs +0 -25
  159. package/dist/esm2022/components/chat/copilot-chat-tools-menu.component.mjs +0 -199
  160. package/dist/esm2022/components/chat/copilot-chat-user-message-branch-navigation.component.mjs +0 -137
  161. package/dist/esm2022/components/chat/copilot-chat-user-message-buttons.component.mjs +0 -207
  162. package/dist/esm2022/components/chat/copilot-chat-user-message-renderer.component.mjs +0 -35
  163. package/dist/esm2022/components/chat/copilot-chat-user-message-toolbar.component.mjs +0 -34
  164. package/dist/esm2022/components/chat/copilot-chat-user-message.component.mjs +0 -341
  165. package/dist/esm2022/components/chat/copilot-chat-user-message.types.mjs +0 -2
  166. package/dist/esm2022/components/chat/copilot-chat-view-disclaimer.component.mjs +0 -52
  167. package/dist/esm2022/components/chat/copilot-chat-view-feather.component.mjs +0 -55
  168. package/dist/esm2022/components/chat/copilot-chat-view-handlers.service.mjs +0 -19
  169. package/dist/esm2022/components/chat/copilot-chat-view-input-container.component.mjs +0 -110
  170. package/dist/esm2022/components/chat/copilot-chat-view-scroll-to-bottom-button.component.mjs +0 -93
  171. package/dist/esm2022/components/chat/copilot-chat-view-scroll-view.component.mjs +0 -443
  172. package/dist/esm2022/components/chat/copilot-chat-view.component.mjs +0 -479
  173. package/dist/esm2022/components/chat/copilot-chat-view.types.mjs +0 -2
  174. package/dist/esm2022/components/chat/copilot-chat.component.mjs +0 -220
  175. package/dist/esm2022/components/copilotkit-tool-render.component.mjs +0 -150
  176. package/dist/esm2022/core/chat-configuration/chat-configuration.providers.mjs +0 -65
  177. package/dist/esm2022/core/chat-configuration/chat-configuration.service.mjs +0 -145
  178. package/dist/esm2022/core/chat-configuration/chat-configuration.types.mjs +0 -26
  179. package/dist/esm2022/core/copilotkit.providers.mjs +0 -34
  180. package/dist/esm2022/core/copilotkit.service.mjs +0 -411
  181. package/dist/esm2022/core/copilotkit.types.mjs +0 -13
  182. package/dist/esm2022/directives/copilotkit-agent-context.directive.mjs +0 -130
  183. package/dist/esm2022/directives/copilotkit-agent.directive.mjs +0 -221
  184. package/dist/esm2022/directives/copilotkit-chat-config.directive.mjs +0 -218
  185. package/dist/esm2022/directives/copilotkit-config.directive.mjs +0 -94
  186. package/dist/esm2022/directives/copilotkit-frontend-tool.directive.mjs +0 -128
  187. package/dist/esm2022/directives/copilotkit-human-in-the-loop.directive.mjs +0 -265
  188. package/dist/esm2022/directives/stick-to-bottom.directive.mjs +0 -181
  189. package/dist/esm2022/lib/directives/tooltip.directive.mjs +0 -211
  190. package/dist/esm2022/lib/slots/copilot-slot.component.mjs +0 -154
  191. package/dist/esm2022/services/resize-observer.service.mjs +0 -152
  192. package/dist/esm2022/services/scroll-position.service.mjs +0 -124
  193. package/dist/esm2022/types/frontend-tool.mjs +0 -2
  194. package/dist/esm2022/types/human-in-the-loop.mjs +0 -2
  195. package/dist/esm2022/utils/agent-context.utils.mjs +0 -114
  196. package/dist/esm2022/utils/agent.utils.mjs +0 -212
  197. package/dist/esm2022/utils/chat-config.utils.mjs +0 -186
  198. package/dist/esm2022/utils/copilotkit.utils.mjs +0 -20
  199. package/dist/esm2022/utils/frontend-tool.utils.mjs +0 -224
  200. package/dist/esm2022/utils/human-in-the-loop.utils.mjs +0 -293
  201. package/dist/lib/directives/tooltip.directive.d.ts +0 -33
  202. package/dist/lib/slots/copilot-slot.component.d.ts +0 -34
  203. package/dist/types/frontend-tool.d.ts +0 -37
  204. package/dist/types/human-in-the-loop.d.ts +0 -44
  205. package/dist/utils/agent-context.utils.d.ts +0 -75
  206. package/dist/utils/agent.utils.d.ts +0 -108
  207. package/dist/utils/chat-config.utils.d.ts +0 -166
  208. package/dist/utils/copilotkit.utils.d.ts +0 -16
  209. package/dist/utils/frontend-tool.utils.d.ts +0 -119
  210. package/dist/utils/human-in-the-loop.utils.d.ts +0 -92
@@ -0,0 +1,167 @@
1
+ import { Component, input, ChangeDetectionStrategy, ViewEncapsulation, signal, effect, ChangeDetectorRef, Injector, computed, inject, } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { CopilotChatView } from "./copilot-chat-view";
4
+ import { DEFAULT_AGENT_ID, randomUUID } from "@copilotkitnext/shared";
5
+ import { injectAgentStore } from "../../agent";
6
+ import { ChatState } from "../../chat-state";
7
+ import * as i0 from "@angular/core";
8
+ /**
9
+ * CopilotChat component - Angular equivalent of React's <CopilotChat>
10
+ * Provides a complete chat interface that wires an agent to the chat view
11
+ *
12
+ * @example
13
+ * ```html
14
+ * <copilot-chat [agentId]="'default'" [threadId]="'abc123'"></copilot-chat>
15
+ * ```
16
+ */
17
+ export class CopilotChat {
18
+ inputValue = signal("");
19
+ agentId = input();
20
+ threadId = input();
21
+ inputComponent = input();
22
+ resolvedAgentId = computed(() => this.agentId() ?? DEFAULT_AGENT_ID);
23
+ agentStore = injectAgentStore(this.resolvedAgentId);
24
+ // readonly chatConfig = injectChatConfig();
25
+ cdr = inject(ChangeDetectorRef);
26
+ injector = inject(Injector);
27
+ messages = computed(() => this.agentStore()?.messages());
28
+ isRunning = computed(() => this.agentStore()?.isRunning());
29
+ showCursor = signal(false);
30
+ generatedThreadId = randomUUID();
31
+ hasConnectedOnce = false;
32
+ constructor() {
33
+ // Connect once when agent becomes available
34
+ // Connect once when agent becomes available
35
+ effect(() => {
36
+ const a = this.agentStore()?.agent;
37
+ if (!a)
38
+ return;
39
+ // Apply thread id when agent is available
40
+ a.threadId = this.threadId() || this.generatedThreadId;
41
+ if (!this.hasConnectedOnce) {
42
+ this.hasConnectedOnce = true;
43
+ if ("isCopilotKitAgent" in a) {
44
+ this.connectToAgent(a);
45
+ }
46
+ else {
47
+ // Non-CopilotKit agent: nothing to connect; keep default cursor state
48
+ }
49
+ }
50
+ }, { allowSignalWrites: true });
51
+ // Keep agent threadId in sync with input
52
+ effect(() => {
53
+ const a = this.agentStore()?.agent;
54
+ if (a) {
55
+ a.threadId = this.threadId() || this.generatedThreadId;
56
+ }
57
+ });
58
+ }
59
+ async connectToAgent(agent) {
60
+ if (!agent)
61
+ return;
62
+ this.showCursor.set(true);
63
+ this.cdr.markForCheck();
64
+ try {
65
+ await agent.runAgent({ forwardedProps: { __copilotkitConnect: true } }, {
66
+ onTextMessageStartEvent: () => {
67
+ this.showCursor.set(false);
68
+ this.cdr.detectChanges();
69
+ },
70
+ onToolCallStartEvent: () => {
71
+ this.showCursor.set(false);
72
+ this.cdr.detectChanges();
73
+ },
74
+ });
75
+ this.showCursor.set(false);
76
+ this.cdr.markForCheck();
77
+ }
78
+ catch (error) {
79
+ console.error("Failed to connect to agent:", error);
80
+ this.showCursor.set(false);
81
+ this.cdr.markForCheck();
82
+ }
83
+ }
84
+ async submitInput(value) {
85
+ const agent = this.agentStore()?.agent;
86
+ if (!agent || !value.trim())
87
+ return;
88
+ // Add user message
89
+ const userMessage = {
90
+ id: randomUUID(),
91
+ role: "user",
92
+ content: value,
93
+ };
94
+ agent.addMessage(userMessage);
95
+ // Clear the input
96
+ this.inputValue.set("");
97
+ // Show cursor while processing
98
+ this.showCursor.set(true);
99
+ this.cdr.markForCheck();
100
+ // Run the agent with named subscriber callbacks
101
+ try {
102
+ await agent.runAgent({}, {
103
+ onTextMessageStartEvent: () => {
104
+ this.showCursor.set(false);
105
+ this.cdr.detectChanges();
106
+ },
107
+ onToolCallStartEvent: () => {
108
+ this.showCursor.set(false);
109
+ this.cdr.detectChanges();
110
+ },
111
+ });
112
+ }
113
+ catch (error) {
114
+ console.error("Agent run error:", error);
115
+ }
116
+ finally {
117
+ this.showCursor.set(false);
118
+ this.cdr.markForCheck();
119
+ }
120
+ }
121
+ changeInput(value) {
122
+ this.inputValue.set(value);
123
+ }
124
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChat, deps: [], target: i0.ɵɵFactoryTarget.Component });
125
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CopilotChat, isStandalone: true, selector: "copilot-chat", inputs: { agentId: { classPropertyName: "agentId", publicName: "agentId", isSignal: true, isRequired: false, transformFunction: null }, threadId: { classPropertyName: "threadId", publicName: "threadId", isSignal: true, isRequired: false, transformFunction: null }, inputComponent: { classPropertyName: "inputComponent", publicName: "inputComponent", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
126
+ {
127
+ provide: ChatState,
128
+ useExisting: CopilotChat,
129
+ },
130
+ ], ngImport: i0, template: `
131
+ <copilot-chat-view
132
+ [messages]="messages() ?? []"
133
+ [autoScroll]="true"
134
+ [messageViewClass]="'w-full'"
135
+ [showCursor]="showCursor()"
136
+ [inputComponent]="inputComponent()"
137
+ >
138
+ </copilot-chat-view>
139
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CopilotChatView, selector: "copilot-chat-view", inputs: ["messages", "autoScroll", "showCursor", "messageViewComponent", "messageViewTemplate", "messageViewClass", "scrollViewComponent", "scrollViewTemplate", "scrollViewClass", "scrollToBottomButtonComponent", "scrollToBottomButtonTemplate", "scrollToBottomButtonClass", "inputComponent", "inputTemplate", "inputContainerComponent", "inputContainerTemplate", "inputContainerClass", "featherComponent", "featherTemplate", "featherClass", "disclaimerComponent", "disclaimerTemplate", "disclaimerClass", "disclaimerText"], outputs: ["assistantMessageThumbsUp", "assistantMessageThumbsDown", "assistantMessageReadAloud", "assistantMessageRegenerate", "userMessageCopy", "userMessageEdit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
140
+ }
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChat, decorators: [{
142
+ type: Component,
143
+ args: [{
144
+ selector: "copilot-chat",
145
+ standalone: true,
146
+ imports: [CommonModule, CopilotChatView],
147
+ changeDetection: ChangeDetectionStrategy.OnPush,
148
+ encapsulation: ViewEncapsulation.None,
149
+ template: `
150
+ <copilot-chat-view
151
+ [messages]="messages() ?? []"
152
+ [autoScroll]="true"
153
+ [messageViewClass]="'w-full'"
154
+ [showCursor]="showCursor()"
155
+ [inputComponent]="inputComponent()"
156
+ >
157
+ </copilot-chat-view>
158
+ `,
159
+ providers: [
160
+ {
161
+ provide: ChatState,
162
+ useExisting: CopilotChat,
163
+ },
164
+ ],
165
+ }]
166
+ }], ctorParameters: () => [] });
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsUUFBUSxFQUVSLFFBQVEsRUFDUixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFN0M7Ozs7Ozs7O0dBUUc7QUF3QkgsTUFBTSxPQUFPLFdBQVc7SUFDYixVQUFVLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFDdEMsUUFBUSxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUN2QyxjQUFjLEdBQUcsS0FBSyxFQUF5QixDQUFDO0lBQ3hDLGVBQWUsR0FBRyxRQUFRLENBQ3pDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxnQkFBZ0IsQ0FDekMsQ0FBQztJQUNPLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0QsNENBQTRDO0lBQ25DLEdBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNoQyxRQUFRLEdBQUcsTUFB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LEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQzt3R0EzSFUsV0FBVzs0RkFBWCxXQUFXLHlkQVBYO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLFdBQVcsRUFBRSxXQUFXO2FBQ3pCO1NBQ0YsMEJBZlM7Ozs7Ozs7OztHQVNULDJEQVpTLFlBQVksK0JBQUUsZUFBZTs7NEZBb0I1QixXQUFXO2tCQXZCdkIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUM7b0JBQ3hDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsUUFBUSxFQUFFOzs7Ozs7Ozs7R0FTVDtvQkFDRCxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLFNBQVM7NEJBQ2xCLFdBQVcsYUFBYTt5QkFDekI7cUJBQ0Y7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGlucHV0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIHNpZ25hbCxcbiAgZWZmZWN0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgSW5qZWN0b3IsXG4gIFR5cGUsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdFZpZXcgfSBmcm9tIFwiLi9jb3BpbG90LWNoYXQtdmlld1wiO1xuXG5pbXBvcnQgeyBERUZBVUxUX0FHRU5UX0lELCByYW5kb21VVUlEIH0gZnJvbSBcIkBjb3BpbG90a2l0bmV4dC9zaGFyZWRcIjtcbmltcG9ydCB7IE1lc3NhZ2UsIEFic3RyYWN0QWdlbnQgfSBmcm9tIFwiQGFnLXVpL2NsaWVudFwiO1xuaW1wb3J0IHsgaW5qZWN0QWdlbnRTdG9yZSB9IGZyb20gXCIuLi8uLi9hZ2VudFwiO1xuaW1wb3J0IHsgQ2hhdFN0YXRlIH0gZnJvbSBcIi4uLy4uL2NoYXQtc3RhdGVcIjtcblxuLyoqXG4gKiBDb3BpbG90Q2hhdCBjb21wb25lbnQgLSBBbmd1bGFyIGVxdWl2YWxlbnQgb2YgUmVhY3QncyA8Q29waWxvdENoYXQ+XG4gKiBQcm92aWRlcyBhIGNvbXBsZXRlIGNoYXQgaW50ZXJmYWNlIHRoYXQgd2lyZXMgYW4gYWdlbnQgdG8gdGhlIGNoYXQgdmlld1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8Y29waWxvdC1jaGF0IFthZ2VudElkXT1cIidkZWZhdWx0J1wiIFt0aHJlYWRJZF09XCInYWJjMTIzJ1wiPjwvY29waWxvdC1jaGF0PlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJjb3BpbG90LWNoYXRcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ29waWxvdENoYXRWaWV3XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGNvcGlsb3QtY2hhdC12aWV3XG4gICAgICBbbWVzc2FnZXNdPVwibWVzc2FnZXMoKSA/PyBbXVwiXG4gICAgICBbYXV0b1Njcm9sbF09XCJ0cnVlXCJcbiAgICAgIFttZXNzYWdlVmlld0NsYXNzXT1cIid3LWZ1bGwnXCJcbiAgICAgIFtzaG93Q3Vyc29yXT1cInNob3dDdXJzb3IoKVwiXG4gICAgICBbaW5wdXRDb21wb25lbnRdPVwiaW5wdXRDb21wb25lbnQoKVwiXG4gICAgPlxuICAgIDwvY29waWxvdC1jaGF0LXZpZXc+XG4gIGAsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IENoYXRTdGF0ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3BpbG90Q2hhdCxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90Q2hhdCBpbXBsZW1lbnRzIENoYXRTdGF0ZSB7XG4gIHJlYWRvbmx5IGlucHV0VmFsdWUgPSBzaWduYWw8c3RyaW5nPihcIlwiKTtcbiAgcmVhZG9ubHkgYWdlbnRJZCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgdGhyZWFkSWQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGlucHV0Q29tcG9uZW50ID0gaW5wdXQ8VHlwZTxhbnk+IHwgdW5kZWZpbmVkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVkQWdlbnRJZCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuYWdlbnRJZCgpID8/IERFRkFVTFRfQUdFTlRfSURcbiAgKTtcbiAgcmVhZG9ubHkgYWdlbnRTdG9yZSA9IGluamVjdEFnZW50U3RvcmUodGhpcy5yZXNvbHZlZEFnZW50SWQpO1xuICAvLyByZWFkb25seSBjaGF0Q29uZmlnID0gaW5qZWN0Q2hhdENvbmZpZygpO1xuICByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgcHJvdGVjdGVkIG1lc3NhZ2VzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hZ2VudFN0b3JlKCk/Lm1lc3NhZ2VzKCkpO1xuICBwcm90ZWN0ZWQgaXNSdW5uaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hZ2VudFN0b3JlKCk/LmlzUnVubmluZygpKTtcbiAgcHJvdGVjdGVkIHNob3dDdXJzb3IgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgZ2VuZXJhdGVkVGhyZWFkSWQ6IHN0cmluZyA9IHJhbmRvbVVVSUQoKTtcbiAgcHJpdmF0ZSBoYXNDb25uZWN0ZWRPbmNlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gQ29ubmVjdCBvbmNlIHdoZW4gYWdlbnQgYmVjb21lcyBhdmFpbGFibGVcbiAgICAvLyBDb25uZWN0IG9uY2Ugd2hlbiBhZ2VudCBiZWNvbWVzIGF2YWlsYWJsZVxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgYSA9IHRoaXMuYWdlbnRTdG9yZSgpPy5hZ2VudDtcbiAgICAgICAgaWYgKCFhKSByZXR1cm47XG4gICAgICAgIC8vIEFwcGx5IHRocmVhZCBpZCB3aGVuIGFnZW50IGlzIGF2YWlsYWJsZVxuICAgICAgICBhLnRocmVhZElkID0gdGhpcy50aHJlYWRJZCgpIHx8IHRoaXMuZ2VuZXJhdGVkVGhyZWFkSWQ7XG4gICAgICAgIGlmICghdGhpcy5oYXNDb25uZWN0ZWRPbmNlKSB7XG4gICAgICAgICAgdGhpcy5oYXNDb25uZWN0ZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoXCJpc0NvcGlsb3RLaXRBZ2VudFwiIGluIChhIGFzIGFueSkpIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdFRvQWdlbnQoYSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vbi1Db3BpbG90S2l0IGFnZW50OiBub3RoaW5nIHRvIGNvbm5lY3Q7IGtlZXAgZGVmYXVsdCBjdXJzb3Igc3RhdGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgLy8gS2VlcCBhZ2VudCB0aHJlYWRJZCBpbiBzeW5jIHdpdGggaW5wdXRcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgYSA9IHRoaXMuYWdlbnRTdG9yZSgpPy5hZ2VudDtcbiAgICAgIGlmIChhKSB7XG4gICAgICAgIGEudGhyZWFkSWQgPSB0aGlzLnRocmVhZElkKCkgfHwgdGhpcy5nZW5lcmF0ZWRUaHJlYWRJZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29ubmVjdFRvQWdlbnQoYWdlbnQ6IEFic3RyYWN0QWdlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWFnZW50KSByZXR1cm47XG5cbiAgICB0aGlzLnNob3dDdXJzb3Iuc2V0KHRydWUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFnZW50LnJ1bkFnZW50KFxuICAgICAgICB7IGZvcndhcmRlZFByb3BzOiB7IF9fY29waWxvdGtpdENvbm5lY3Q6IHRydWUgfSB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25UZXh0TWVzc2FnZVN0YXJ0RXZlbnQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0N1cnNvci5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ub29sQ2FsbFN0YXJ0RXZlbnQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0N1cnNvci5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aGlzLnNob3dDdXJzb3Iuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNvbm5lY3QgdG8gYWdlbnQ6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuc2hvd0N1cnNvci5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3VibWl0SW5wdXQodmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFnZW50ID0gdGhpcy5hZ2VudFN0b3JlKCk/LmFnZW50O1xuICAgIGlmICghYWdlbnQgfHwgIXZhbHVlLnRyaW0oKSkgcmV0dXJuO1xuXG4gICAgLy8gQWRkIHVzZXIgbWVzc2FnZVxuICAgIGNvbnN0IHVzZXJNZXNzYWdlOiBNZXNzYWdlID0ge1xuICAgICAgaWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgIHJvbGU6IFwidXNlclwiLFxuICAgICAgY29udGVudDogdmFsdWUsXG4gICAgfTtcbiAgICBhZ2VudC5hZGRNZXNzYWdlKHVzZXJNZXNzYWdlKTtcblxuICAgIC8vIENsZWFyIHRoZSBpbnB1dFxuICAgIHRoaXMuaW5wdXRWYWx1ZS5zZXQoXCJcIik7XG5cbiAgICAvLyBTaG93IGN1cnNvciB3aGlsZSBwcm9jZXNzaW5nXG4gICAgdGhpcy5zaG93Q3Vyc29yLnNldCh0cnVlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIC8vIFJ1biB0aGUgYWdlbnQgd2l0aCBuYW1lZCBzdWJzY3JpYmVyIGNhbGxiYWNrc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhZ2VudC5ydW5BZ2VudChcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBvblRleHRNZXNzYWdlU3RhcnRFdmVudDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93Q3Vyc29yLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblRvb2xDYWxsU3RhcnRFdmVudDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93Q3Vyc29yLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkFnZW50IHJ1biBlcnJvcjpcIiwgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNob3dDdXJzb3Iuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUlucHV0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0VmFsdWUuc2V0KHZhbHVlKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,9 @@
1
+ import { inject, InjectionToken } from "@angular/core";
2
+ export const COPILOT_KIT_CONFIG = new InjectionToken("COPILOT_KIT_CONFIG");
3
+ export function injectCopilotKitConfig() {
4
+ return inject(COPILOT_KIT_CONFIG);
5
+ }
6
+ export function provideCopilotKit(config) {
7
+ return { provide: COPILOT_KIT_CONFIG, useValue: config };
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFvQmpFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUNsRCxvQkFBb0IsQ0FDckIsQ0FBQztBQUVGLE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQXdCO0lBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGlvblRva2VuLCBQcm92aWRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBYnN0cmFjdEFnZW50IH0gZnJvbSBcIkBhZy11aS9jbGllbnRcIjtcbmltcG9ydCB7XG4gIENsaWVudFRvb2wsXG4gIEZyb250ZW5kVG9vbENvbmZpZyxcbiAgSHVtYW5JblRoZUxvb3BDb25maWcsXG4gIFJlbmRlclRvb2xDYWxsQ29uZmlnLFxufSBmcm9tIFwiLi90b29sc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvcGlsb3RLaXRDb25maWcge1xuICBydW50aW1lVXJsPzogc3RyaW5nO1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBhZ2VudHM/OiBSZWNvcmQ8c3RyaW5nLCBBYnN0cmFjdEFnZW50PjtcbiAgdG9vbHM/OiBDbGllbnRUb29sW107XG4gIHJlbmRlclRvb2xDYWxscz86IFJlbmRlclRvb2xDYWxsQ29uZmlnW107XG4gIGZyb250ZW5kVG9vbHM/OiBGcm9udGVuZFRvb2xDb25maWdbXTtcbiAgaHVtYW5JblRoZUxvb3A/OiBIdW1hbkluVGhlTG9vcENvbmZpZ1tdO1xufVxuXG5leHBvcnQgY29uc3QgQ09QSUxPVF9LSVRfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPENvcGlsb3RLaXRDb25maWc+KFxuICBcIkNPUElMT1RfS0lUX0NPTkZJR1wiXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q29waWxvdEtpdENvbmZpZygpOiBDb3BpbG90S2l0Q29uZmlnIHtcbiAgcmV0dXJuIGluamVjdChDT1BJTE9UX0tJVF9DT05GSUcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNvcGlsb3RLaXQoY29uZmlnOiBDb3BpbG90S2l0Q29uZmlnKTogUHJvdmlkZXIge1xuICByZXR1cm4geyBwcm92aWRlOiBDT1BJTE9UX0tJVF9DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfTtcbn1cbiJdfQ==
@@ -0,0 +1,124 @@
1
+ import { CopilotKitCore } from "@copilotkitnext/core";
2
+ import { Injectable, Injector, runInInjectionContext, signal, inject, } from "@angular/core";
3
+ import { injectCopilotKitConfig } from "./config";
4
+ import { HumanInTheLoop } from "./human-in-the-loop";
5
+ import * as i0 from "@angular/core";
6
+ export class CopilotKit {
7
+ #config = injectCopilotKitConfig();
8
+ #hitl = inject(HumanInTheLoop);
9
+ #rootInjector = inject(Injector);
10
+ #agents = signal(this.#config.agents ?? {});
11
+ agents = this.#agents.asReadonly();
12
+ core = new CopilotKitCore({
13
+ runtimeUrl: this.#config.runtimeUrl,
14
+ headers: this.#config.headers,
15
+ properties: this.#config.properties,
16
+ agents: this.#config.agents,
17
+ tools: this.#config.tools,
18
+ });
19
+ #toolCallRenderConfigs = signal([]);
20
+ #clientToolCallRenderConfigs = signal([]);
21
+ #humanInTheLoopToolRenderConfigs = signal([]);
22
+ toolCallRenderConfigs = this.#toolCallRenderConfigs.asReadonly();
23
+ clientToolCallRenderConfigs = this.#clientToolCallRenderConfigs.asReadonly();
24
+ humanInTheLoopToolRenderConfigs = this.#humanInTheLoopToolRenderConfigs.asReadonly();
25
+ constructor() {
26
+ this.#config.renderToolCalls?.forEach((renderConfig) => {
27
+ this.addRenderToolCall(renderConfig);
28
+ });
29
+ this.#config.tools?.forEach((tool) => {
30
+ if (tool.renderer && tool.parameters) {
31
+ this.addRenderToolCall({
32
+ name: tool.name,
33
+ args: tool.parameters,
34
+ component: tool.renderer,
35
+ agentId: tool.agentId,
36
+ });
37
+ }
38
+ });
39
+ this.#config.frontendTools?.forEach((clientTool) => {
40
+ this.addFrontendTool({ ...clientTool, injector: this.#rootInjector });
41
+ });
42
+ this.#config.humanInTheLoop?.forEach((humanInTheLoopTool) => {
43
+ this.addHumanInTheLoop(humanInTheLoopTool);
44
+ });
45
+ this.core.subscribe({
46
+ onAgentsChanged: () => {
47
+ this.#agents.set(this.core.agents);
48
+ },
49
+ });
50
+ }
51
+ #bindClientTool(clientToolWithInjector) {
52
+ const { injector, handler, ...frontendCandidate } = clientToolWithInjector;
53
+ return {
54
+ ...frontendCandidate,
55
+ handler: (args) => runInInjectionContext(injector, () => handler(args)),
56
+ };
57
+ }
58
+ addFrontendTool(clientToolWithInjector) {
59
+ const tool = this.#bindClientTool(clientToolWithInjector);
60
+ this.core.addTool(tool);
61
+ this.#clientToolCallRenderConfigs.update((current) => [
62
+ ...current,
63
+ clientToolWithInjector,
64
+ ]);
65
+ }
66
+ addRenderToolCall(renderConfig) {
67
+ this.#toolCallRenderConfigs.update((current) => [...current, renderConfig]);
68
+ }
69
+ #bindHumanInTheLoopTool(humanInTheLoopTool) {
70
+ return {
71
+ ...humanInTheLoopTool,
72
+ handler: (args, toolCall) => {
73
+ return this.#hitl.onResult(toolCall.id, humanInTheLoopTool.name);
74
+ },
75
+ };
76
+ }
77
+ addHumanInTheLoop(humanInTheLoopTool) {
78
+ this.#humanInTheLoopToolRenderConfigs.update((current) => [
79
+ ...current,
80
+ humanInTheLoopTool,
81
+ ]);
82
+ const tool = this.#bindHumanInTheLoopTool(humanInTheLoopTool);
83
+ this.core.addTool(tool);
84
+ }
85
+ #isSameAgentId(target, agentId) {
86
+ if (agentId) {
87
+ return target.agentId === agentId;
88
+ }
89
+ return true;
90
+ }
91
+ removeTool(toolName, agentId) {
92
+ this.core.removeTool(toolName);
93
+ this.#clientToolCallRenderConfigs.update((current) => current.filter((renderConfig) => renderConfig.name !== toolName &&
94
+ this.#isSameAgentId(renderConfig, agentId)));
95
+ this.#humanInTheLoopToolRenderConfigs.update((current) => current.filter((renderConfig) => renderConfig.name !== toolName &&
96
+ this.#isSameAgentId(renderConfig, agentId)));
97
+ this.#toolCallRenderConfigs.update((current) => current.filter((renderConfig) => renderConfig.name !== toolName &&
98
+ this.#isSameAgentId(renderConfig, agentId)));
99
+ }
100
+ getAgent(agentId) {
101
+ return this.core.getAgent(agentId);
102
+ }
103
+ updateRuntime(options) {
104
+ if (options.runtimeUrl !== undefined) {
105
+ this.core.setRuntimeUrl(options.runtimeUrl);
106
+ }
107
+ if (options.headers !== undefined) {
108
+ this.core.setHeaders(options.headers);
109
+ }
110
+ if (options.properties !== undefined) {
111
+ this.core.setProperties(options.properties);
112
+ }
113
+ if (options.agents !== undefined) {
114
+ this.core.setAgents(options.agents);
115
+ }
116
+ }
117
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKit, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
118
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKit, providedIn: "root" });
119
+ }
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKit, decorators: [{
121
+ type: Injectable,
122
+ args: [{ providedIn: "root" }]
123
+ }], ctorParameters: () => [] });
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdGtpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29waWxvdGtpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWdCLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BFLE9BQU8sRUFDTCxVQUFVLEVBQ1YsUUFBUSxFQUdSLHFCQUFxQixFQUNyQixNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBTXZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBR3JELE1BQU0sT0FBTyxVQUFVO0lBQ1osT0FBTyxHQUFHLHNCQUFzQixFQUFFLENBQUM7SUFDbkMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixhQUFhLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxNQUFNLENBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FDMUIsQ0FBQztJQUNPLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBRW5DLElBQUksR0FBRyxJQUFJLGNBQWMsQ0FBQztRQUNqQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1FBQ25DLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87UUFDN0IsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtRQUNuQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1FBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUs7S0FDMUIsQ0FBQyxDQUFDO0lBRU0sc0JBQXNCLEdBQzdCLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNKLDRCQUE0QixH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Q0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQzt3R0EvS1UsVUFBVTs0R0FBVixVQUFVLGNBREcsTUFBTTs7NEZBQ25CLFVBQVU7a0JBRHRCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RBZ2VudCB9IGZyb20gXCJAYWctdWkvY2xpZW50XCI7XG5pbXBvcnQgeyBGcm9udGVuZFRvb2wsIENvcGlsb3RLaXRDb3JlIH0gZnJvbSBcIkBjb3BpbG90a2l0bmV4dC9jb3JlXCI7XG5pbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBJbmplY3RvcixcbiAgU2lnbmFsLFxuICBXcml0YWJsZVNpZ25hbCxcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxuICBzaWduYWwsXG4gIGluamVjdCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEZyb250ZW5kVG9vbENvbmZpZyxcbiAgSHVtYW5JblRoZUxvb3BDb25maWcsXG4gIFJlbmRlclRvb2xDYWxsQ29uZmlnLFxufSBmcm9tIFwiLi90b29sc1wiO1xuaW1wb3J0IHsgaW5qZWN0Q29waWxvdEtpdENvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgSHVtYW5JblRoZUxvb3AgfSBmcm9tIFwiLi9odW1hbi1pbi10aGUtbG9vcFwiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgQ29waWxvdEtpdCB7XG4gIHJlYWRvbmx5ICNjb25maWcgPSBpbmplY3RDb3BpbG90S2l0Q29uZmlnKCk7XG4gIHJlYWRvbmx5ICNoaXRsID0gaW5qZWN0KEh1bWFuSW5UaGVMb29wKTtcbiAgcmVhZG9ubHkgI3Jvb3RJbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHJlYWRvbmx5ICNhZ2VudHMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgQWJzdHJhY3RBZ2VudD4+KFxuICAgIHRoaXMuI2NvbmZpZy5hZ2VudHMgPz8ge31cbiAgKTtcbiAgcmVhZG9ubHkgYWdlbnRzID0gdGhpcy4jYWdlbnRzLmFzUmVhZG9ubHkoKTtcblxuICByZWFkb25seSBjb3JlID0gbmV3IENvcGlsb3RLaXRDb3JlKHtcbiAgICBydW50aW1lVXJsOiB0aGlzLiNjb25maWcucnVudGltZVVybCxcbiAgICBoZWFkZXJzOiB0aGlzLiNjb25maWcuaGVhZGVycyxcbiAgICBwcm9wZXJ0aWVzOiB0aGlzLiNjb25maWcucHJvcGVydGllcyxcbiAgICBhZ2VudHM6IHRoaXMuI2NvbmZpZy5hZ2VudHMsXG4gICAgdG9vbHM6IHRoaXMuI2NvbmZpZy50b29scyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgI3Rvb2xDYWxsUmVuZGVyQ29uZmlnczogV3JpdGFibGVTaWduYWw8UmVuZGVyVG9vbENhbGxDb25maWdbXT4gPVxuICAgIHNpZ25hbChbXSk7XG4gIHJlYWRvbmx5ICNjbGllbnRUb29sQ2FsbFJlbmRlckNvbmZpZ3M6IFdyaXRhYmxlU2lnbmFsPEZyb250ZW5kVG9vbENvbmZpZ1tdPiA9XG4gICAgc2lnbmFsKFtdKTtcbiAgcmVhZG9ubHkgI2h1bWFuSW5UaGVMb29wVG9vbFJlbmRlckNvbmZpZ3M6IFdyaXRhYmxlU2lnbmFsPFxuICAgIEh1bWFuSW5UaGVMb29wQ29uZmlnW11cbiAgPiA9IHNpZ25hbChbXSk7XG5cbiAgcmVhZG9ubHkgdG9vbENhbGxSZW5kZXJDb25maWdzOiBTaWduYWw8UmVuZGVyVG9vbENhbGxDb25maWdbXT4gPVxuICAgIHRoaXMuI3Rvb2xDYWxsUmVuZGVyQ29uZmlncy5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IGNsaWVudFRvb2xDYWxsUmVuZGVyQ29uZmlnczogU2lnbmFsPEZyb250ZW5kVG9vbENvbmZpZ1tdPiA9XG4gICAgdGhpcy4jY2xpZW50VG9vbENhbGxSZW5kZXJDb25maWdzLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgaHVtYW5JblRoZUxvb3BUb29sUmVuZGVyQ29uZmlnczogU2lnbmFsPEh1bWFuSW5UaGVMb29wQ29uZmlnW10+ID1cbiAgICB0aGlzLiNodW1hbkluVGhlTG9vcFRvb2xSZW5kZXJDb25maWdzLmFzUmVhZG9ubHkoKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiNjb25maWcucmVuZGVyVG9vbENhbGxzPy5mb3JFYWNoKChyZW5kZXJDb25maWcpID0+IHtcbiAgICAgIHRoaXMuYWRkUmVuZGVyVG9vbENhbGwocmVuZGVyQ29uZmlnKTtcbiAgICB9KTtcblxuICAgIHRoaXMuI2NvbmZpZy50b29scz8uZm9yRWFjaCgodG9vbCkgPT4ge1xuICAgICAgaWYgKHRvb2wucmVuZGVyZXIgJiYgdG9vbC5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuYWRkUmVuZGVyVG9vbENhbGwoe1xuICAgICAgICAgIG5hbWU6IHRvb2wubmFtZSxcbiAgICAgICAgICBhcmdzOiB0b29sLnBhcmFtZXRlcnMsXG4gICAgICAgICAgY29tcG9uZW50OiB0b29sLnJlbmRlcmVyLFxuICAgICAgICAgIGFnZW50SWQ6IHRvb2wuYWdlbnRJZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLiNjb25maWcuZnJvbnRlbmRUb29scz8uZm9yRWFjaCgoY2xpZW50VG9vbCkgPT4ge1xuICAgICAgdGhpcy5hZGRGcm9udGVuZFRvb2woeyAuLi5jbGllbnRUb29sLCBpbmplY3RvcjogdGhpcy4jcm9vdEluamVjdG9yIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy4jY29uZmlnLmh1bWFuSW5UaGVMb29wPy5mb3JFYWNoKChodW1hbkluVGhlTG9vcFRvb2wpID0+IHtcbiAgICAgIHRoaXMuYWRkSHVtYW5JblRoZUxvb3AoaHVtYW5JblRoZUxvb3BUb29sKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY29yZS5zdWJzY3JpYmUoe1xuICAgICAgb25BZ2VudHNDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2FnZW50cy5zZXQodGhpcy5jb3JlLmFnZW50cyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgI2JpbmRDbGllbnRUb29sKFxuICAgIGNsaWVudFRvb2xXaXRoSW5qZWN0b3I6IEZyb250ZW5kVG9vbENvbmZpZyAmIHtcbiAgICAgIGluamVjdG9yOiBJbmplY3RvcjtcbiAgICB9XG4gICk6IEZyb250ZW5kVG9vbCB7XG4gICAgY29uc3QgeyBpbmplY3RvciwgaGFuZGxlciwgLi4uZnJvbnRlbmRDYW5kaWRhdGUgfSA9IGNsaWVudFRvb2xXaXRoSW5qZWN0b3I7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZnJvbnRlbmRDYW5kaWRhdGUsXG4gICAgICBoYW5kbGVyOiAoYXJncykgPT4gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiBoYW5kbGVyKGFyZ3MpKSxcbiAgICB9O1xuICB9XG5cbiAgYWRkRnJvbnRlbmRUb29sKFxuICAgIGNsaWVudFRvb2xXaXRoSW5qZWN0b3I6IEZyb250ZW5kVG9vbENvbmZpZyAmIHtcbiAgICAgIGluamVjdG9yOiBJbmplY3RvcjtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHRvb2wgPSB0aGlzLiNiaW5kQ2xpZW50VG9vbChjbGllbnRUb29sV2l0aEluamVjdG9yKTtcblxuICAgIHRoaXMuY29yZS5hZGRUb29sKHRvb2wpO1xuXG4gICAgdGhpcy4jY2xpZW50VG9vbENhbGxSZW5kZXJDb25maWdzLnVwZGF0ZSgoY3VycmVudCkgPT4gW1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIGNsaWVudFRvb2xXaXRoSW5qZWN0b3IsXG4gICAgXSk7XG4gIH1cblxuICBhZGRSZW5kZXJUb29sQ2FsbChyZW5kZXJDb25maWc6IFJlbmRlclRvb2xDYWxsQ29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy4jdG9vbENhbGxSZW5kZXJDb25maWdzLnVwZGF0ZSgoY3VycmVudCkgPT4gWy4uLmN1cnJlbnQsIHJlbmRlckNvbmZpZ10pO1xuICB9XG5cbiAgI2JpbmRIdW1hbkluVGhlTG9vcFRvb2woXG4gICAgaHVtYW5JblRoZUxvb3BUb29sOiBIdW1hbkluVGhlTG9vcENvbmZpZ1xuICApOiBGcm9udGVuZFRvb2wge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5odW1hbkluVGhlTG9vcFRvb2wsXG4gICAgICBoYW5kbGVyOiAoYXJncywgdG9vbENhbGwpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2hpdGwub25SZXN1bHQodG9vbENhbGwuaWQsIGh1bWFuSW5UaGVMb29wVG9vbC5uYW1lKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGFkZEh1bWFuSW5UaGVMb29wKGh1bWFuSW5UaGVMb29wVG9vbDogSHVtYW5JblRoZUxvb3BDb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLiNodW1hbkluVGhlTG9vcFRvb2xSZW5kZXJDb25maWdzLnVwZGF0ZSgoY3VycmVudCkgPT4gW1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIGh1bWFuSW5UaGVMb29wVG9vbCxcbiAgICBdKTtcblxuICAgIGNvbnN0IHRvb2wgPSB0aGlzLiNiaW5kSHVtYW5JblRoZUxvb3BUb29sKGh1bWFuSW5UaGVMb29wVG9vbCk7XG5cbiAgICB0aGlzLmNvcmUuYWRkVG9vbCh0b29sKTtcbiAgfVxuXG4gICNpc1NhbWVBZ2VudElkPFQgZXh0ZW5kcyB7IGFnZW50SWQ/OiBzdHJpbmcgfT4oXG4gICAgdGFyZ2V0OiBULFxuICAgIGFnZW50SWQ/OiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGFnZW50SWQpIHtcbiAgICAgIHJldHVybiB0YXJnZXQuYWdlbnRJZCA9PT0gYWdlbnRJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJlbW92ZVRvb2wodG9vbE5hbWU6IHN0cmluZywgYWdlbnRJZD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29yZS5yZW1vdmVUb29sKHRvb2xOYW1lKTtcbiAgICB0aGlzLiNjbGllbnRUb29sQ2FsbFJlbmRlckNvbmZpZ3MudXBkYXRlKChjdXJyZW50KSA9PlxuICAgICAgY3VycmVudC5maWx0ZXIoXG4gICAgICAgIChyZW5kZXJDb25maWcpID0+XG4gICAgICAgICAgcmVuZGVyQ29uZmlnLm5hbWUgIT09IHRvb2xOYW1lICYmXG4gICAgICAgICAgdGhpcy4jaXNTYW1lQWdlbnRJZChyZW5kZXJDb25maWcsIGFnZW50SWQpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLiNodW1hbkluVGhlTG9vcFRvb2xSZW5kZXJDb25maWdzLnVwZGF0ZSgoY3VycmVudCkgPT5cbiAgICAgIGN1cnJlbnQuZmlsdGVyKFxuICAgICAgICAocmVuZGVyQ29uZmlnKSA9PlxuICAgICAgICAgIHJlbmRlckNvbmZpZy5uYW1lICE9PSB0b29sTmFtZSAmJlxuICAgICAgICAgIHRoaXMuI2lzU2FtZUFnZW50SWQocmVuZGVyQ29uZmlnLCBhZ2VudElkKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy4jdG9vbENhbGxSZW5kZXJDb25maWdzLnVwZGF0ZSgoY3VycmVudCkgPT5cbiAgICAgIGN1cnJlbnQuZmlsdGVyKFxuICAgICAgICAocmVuZGVyQ29uZmlnKSA9PlxuICAgICAgICAgIHJlbmRlckNvbmZpZy5uYW1lICE9PSB0b29sTmFtZSAmJlxuICAgICAgICAgIHRoaXMuI2lzU2FtZUFnZW50SWQocmVuZGVyQ29uZmlnLCBhZ2VudElkKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBnZXRBZ2VudChhZ2VudElkOiBzdHJpbmcpOiBBYnN0cmFjdEFnZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb3JlLmdldEFnZW50KGFnZW50SWQpO1xuICB9XG5cbiAgdXBkYXRlUnVudGltZShvcHRpb25zOiB7XG4gICAgcnVudGltZVVybD86IHN0cmluZztcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgYWdlbnRzPzogUmVjb3JkPHN0cmluZywgQWJzdHJhY3RBZ2VudD47XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucy5ydW50aW1lVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29yZS5zZXRSdW50aW1lVXJsKG9wdGlvbnMucnVudGltZVVybCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmhlYWRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jb3JlLnNldEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucHJvcGVydGllcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvcmUuc2V0UHJvcGVydGllcyhvcHRpb25zLnByb3BlcnRpZXMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hZ2VudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jb3JlLnNldEFnZW50cyhvcHRpb25zLmFnZW50cyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,130 @@
1
+ import { Directive, Input, Inject, } from "@angular/core";
2
+ import { CopilotKit } from "../copilotkit";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../copilotkit";
5
+ /**
6
+ * Directive to manage agent context in CopilotKit.
7
+ * Automatically adds context on init, updates on changes, and removes on destroy.
8
+ *
9
+ * @example
10
+ * ```html
11
+ * <!-- With separate inputs -->
12
+ * <div copilotkitAgentContext
13
+ * [description]="'User preferences'"
14
+ * [value]="userSettings">
15
+ * </div>
16
+ *
17
+ * <!-- With context object -->
18
+ * <div [copilotkitAgentContext]="contextObject">
19
+ * </div>
20
+ *
21
+ * <!-- With dynamic values -->
22
+ * <div copilotkitAgentContext
23
+ * description="Form state"
24
+ * [value]="formData$ | async">
25
+ * </div>
26
+ * ```
27
+ */
28
+ export class CopilotKitAgentContext {
29
+ copilotkit;
30
+ contextId;
31
+ constructor(copilotkit) {
32
+ this.copilotkit = copilotkit;
33
+ }
34
+ /**
35
+ * Context object containing both description and value.
36
+ * If provided, this takes precedence over individual inputs.
37
+ */
38
+ context;
39
+ /**
40
+ * Description of the context.
41
+ * Used when context object is not provided.
42
+ */
43
+ description;
44
+ /**
45
+ * Value of the context.
46
+ * Used when context object is not provided.
47
+ */
48
+ value;
49
+ ngOnInit() {
50
+ this.addContext();
51
+ }
52
+ ngOnChanges(changes) {
53
+ // Check if any relevant input has changed
54
+ const hasContextChange = "context" in changes;
55
+ const hasDescriptionChange = "description" in changes;
56
+ const hasValueChange = "value" in changes;
57
+ if (hasContextChange || hasDescriptionChange || hasValueChange) {
58
+ // Skip the first change as ngOnInit handles initial setup
59
+ if (this.contextId) {
60
+ this.updateContext();
61
+ }
62
+ }
63
+ }
64
+ ngOnDestroy() {
65
+ this.removeContext();
66
+ }
67
+ /**
68
+ * Adds the context to CopilotKit
69
+ */
70
+ addContext() {
71
+ const contextToAdd = this.getContext();
72
+ if (contextToAdd) {
73
+ this.contextId = this.copilotkit.core.addContext(contextToAdd);
74
+ }
75
+ }
76
+ /**
77
+ * Updates the context by removing the old one and adding a new one
78
+ */
79
+ updateContext() {
80
+ this.removeContext();
81
+ this.addContext();
82
+ }
83
+ /**
84
+ * Removes the current context from CopilotKit
85
+ */
86
+ removeContext() {
87
+ if (this.contextId) {
88
+ this.copilotkit.core.removeContext(this.contextId);
89
+ this.contextId = undefined;
90
+ }
91
+ }
92
+ /**
93
+ * Gets the context object from inputs
94
+ */
95
+ getContext() {
96
+ // If context object is provided, use it
97
+ if (this.context) {
98
+ return this.context;
99
+ }
100
+ // Otherwise, build from individual inputs
101
+ // Note: null is a valid value, but undefined means not set
102
+ if (this.description !== undefined && this.value !== undefined) {
103
+ return {
104
+ description: this.description,
105
+ value: this.value,
106
+ };
107
+ }
108
+ return null;
109
+ }
110
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitAgentContext, deps: [{ token: CopilotKit }], target: i0.ɵɵFactoryTarget.Directive });
111
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: CopilotKitAgentContext, isStandalone: true, selector: "[copilotkitAgentContext]", inputs: { context: ["copilotkitAgentContext", "context"], description: "description", value: "value" }, usesOnChanges: true, ngImport: i0 });
112
+ }
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitAgentContext, decorators: [{
114
+ type: Directive,
115
+ args: [{
116
+ selector: "[copilotkitAgentContext]",
117
+ standalone: true,
118
+ }]
119
+ }], ctorParameters: () => [{ type: i1.CopilotKit, decorators: [{
120
+ type: Inject,
121
+ args: [CopilotKit]
122
+ }] }], propDecorators: { context: [{
123
+ type: Input,
124
+ args: ["copilotkitAgentContext"]
125
+ }], description: [{
126
+ type: Input
127
+ }], value: [{
128
+ type: Input
129
+ }] } });
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdGtpdC1hZ2VudC1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kaXJlY3RpdmVzL2NvcGlsb3RraXQtYWdlbnQtY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFLTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBRzNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBS0gsTUFBTSxPQUFPLHNCQUFzQjtJQUdnQjtJQUZ6QyxTQUFTLENBQVU7SUFFM0IsWUFBaUQsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUFHLENBQUM7SUFFM0U7OztPQUdHO0lBQzhCLE9BQU8sQ0FBVztJQUVuRDs7O09BR0c7SUFDTSxXQUFXLENBQVU7SUFFOUI7OztPQUdHO0lBQ00sS0FBSyxDQUFPO0lBRXJCLFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQywwQ0FBMEM7UUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLElBQUksT0FBTyxDQUFDO1FBQzlDLE1BQU0sb0JBQW9CLEdBQUcsYUFBYSxJQUFJLE9BQU8sQ0FBQztRQUN0RCxNQUFNLGNBQWMsR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDO1FBRTFDLElBQUksZ0JBQWdCLElBQUksb0JBQW9CLElBQUksY0FBYyxFQUFFLENBQUM7WUFDL0QsMERBQTBEO1lBQzFELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVO1FBQ2hCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV2QyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxhQUFhO1FBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVO1FBQ2hCLHdDQUF3QztRQUN4QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdEIsQ0FBQztRQUVELDBDQUEwQztRQUMxQywyREFBMkQ7UUFDM0QsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9ELE9BQU87Z0JBQ0wsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7YUFDbEIsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7d0dBN0ZVLHNCQUFzQixrQkFHYixVQUFVOzRGQUhuQixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkFJYyxNQUFNOzJCQUFDLFVBQVU7eUNBTUcsT0FBTztzQkFBdkMsS0FBSzt1QkFBQyx3QkFBd0I7Z0JBTXRCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTUcsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgSW5qZWN0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29waWxvdEtpdCB9IGZyb20gXCIuLi9jb3BpbG90a2l0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tIFwiQGFnLXVpL2NsaWVudFwiO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0byBtYW5hZ2UgYWdlbnQgY29udGV4dCBpbiBDb3BpbG90S2l0LlxuICogQXV0b21hdGljYWxseSBhZGRzIGNvbnRleHQgb24gaW5pdCwgdXBkYXRlcyBvbiBjaGFuZ2VzLCBhbmQgcmVtb3ZlcyBvbiBkZXN0cm95LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8IS0tIFdpdGggc2VwYXJhdGUgaW5wdXRzIC0tPlxuICogPGRpdiBjb3BpbG90a2l0QWdlbnRDb250ZXh0XG4gKiAgICAgIFtkZXNjcmlwdGlvbl09XCInVXNlciBwcmVmZXJlbmNlcydcIlxuICogICAgICBbdmFsdWVdPVwidXNlclNldHRpbmdzXCI+XG4gKiA8L2Rpdj5cbiAqXG4gKiA8IS0tIFdpdGggY29udGV4dCBvYmplY3QgLS0+XG4gKiA8ZGl2IFtjb3BpbG90a2l0QWdlbnRDb250ZXh0XT1cImNvbnRleHRPYmplY3RcIj5cbiAqIDwvZGl2PlxuICpcbiAqIDwhLS0gV2l0aCBkeW5hbWljIHZhbHVlcyAtLT5cbiAqIDxkaXYgY29waWxvdGtpdEFnZW50Q29udGV4dFxuICogICAgICBkZXNjcmlwdGlvbj1cIkZvcm0gc3RhdGVcIlxuICogICAgICBbdmFsdWVdPVwiZm9ybURhdGEkIHwgYXN5bmNcIj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbY29waWxvdGtpdEFnZW50Q29udGV4dF1cIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdEtpdEFnZW50Q29udGV4dCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGNvbnRleHRJZD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KENvcGlsb3RLaXQpIHByaXZhdGUgcmVhZG9ubHkgY29waWxvdGtpdDogQ29waWxvdEtpdCkge31cblxuICAvKipcbiAgICogQ29udGV4dCBvYmplY3QgY29udGFpbmluZyBib3RoIGRlc2NyaXB0aW9uIGFuZCB2YWx1ZS5cbiAgICogSWYgcHJvdmlkZWQsIHRoaXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGluZGl2aWR1YWwgaW5wdXRzLlxuICAgKi9cbiAgQElucHV0KFwiY29waWxvdGtpdEFnZW50Q29udGV4dFwiKSBjb250ZXh0PzogQ29udGV4dDtcblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gb2YgdGhlIGNvbnRleHQuXG4gICAqIFVzZWQgd2hlbiBjb250ZXh0IG9iamVjdCBpcyBub3QgcHJvdmlkZWQuXG4gICAqL1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIGNvbnRleHQuXG4gICAqIFVzZWQgd2hlbiBjb250ZXh0IG9iamVjdCBpcyBub3QgcHJvdmlkZWQuXG4gICAqL1xuICBASW5wdXQoKSB2YWx1ZT86IGFueTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZENvbnRleHQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiBhbnkgcmVsZXZhbnQgaW5wdXQgaGFzIGNoYW5nZWRcbiAgICBjb25zdCBoYXNDb250ZXh0Q2hhbmdlID0gXCJjb250ZXh0XCIgaW4gY2hhbmdlcztcbiAgICBjb25zdCBoYXNEZXNjcmlwdGlvbkNoYW5nZSA9IFwiZGVzY3JpcHRpb25cIiBpbiBjaGFuZ2VzO1xuICAgIGNvbnN0IGhhc1ZhbHVlQ2hhbmdlID0gXCJ2YWx1ZVwiIGluIGNoYW5nZXM7XG5cbiAgICBpZiAoaGFzQ29udGV4dENoYW5nZSB8fCBoYXNEZXNjcmlwdGlvbkNoYW5nZSB8fCBoYXNWYWx1ZUNoYW5nZSkge1xuICAgICAgLy8gU2tpcCB0aGUgZmlyc3QgY2hhbmdlIGFzIG5nT25Jbml0IGhhbmRsZXMgaW5pdGlhbCBzZXR1cFxuICAgICAgaWYgKHRoaXMuY29udGV4dElkKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29udGV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlQ29udGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIGNvbnRleHQgdG8gQ29waWxvdEtpdFxuICAgKi9cbiAgcHJpdmF0ZSBhZGRDb250ZXh0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRleHRUb0FkZCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgaWYgKGNvbnRleHRUb0FkZCkge1xuICAgICAgdGhpcy5jb250ZXh0SWQgPSB0aGlzLmNvcGlsb3RraXQuY29yZS5hZGRDb250ZXh0KGNvbnRleHRUb0FkZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbnRleHQgYnkgcmVtb3ZpbmcgdGhlIG9sZCBvbmUgYW5kIGFkZGluZyBhIG5ldyBvbmVcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlQ29udGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZUNvbnRleHQoKTtcbiAgICB0aGlzLmFkZENvbnRleHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBjdXJyZW50IGNvbnRleHQgZnJvbSBDb3BpbG90S2l0XG4gICAqL1xuICBwcml2YXRlIHJlbW92ZUNvbnRleHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29udGV4dElkKSB7XG4gICAgICB0aGlzLmNvcGlsb3RraXQuY29yZS5yZW1vdmVDb250ZXh0KHRoaXMuY29udGV4dElkKTtcbiAgICAgIHRoaXMuY29udGV4dElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjb250ZXh0IG9iamVjdCBmcm9tIGlucHV0c1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb250ZXh0KCk6IENvbnRleHQgfCBudWxsIHtcbiAgICAvLyBJZiBjb250ZXh0IG9iamVjdCBpcyBwcm92aWRlZCwgdXNlIGl0XG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGJ1aWxkIGZyb20gaW5kaXZpZHVhbCBpbnB1dHNcbiAgICAvLyBOb3RlOiBudWxsIGlzIGEgdmFsaWQgdmFsdWUsIGJ1dCB1bmRlZmluZWQgbWVhbnMgbm90IHNldFxuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=